summaryrefslogtreecommitdiffstats
path: root/abs
diff options
context:
space:
mode:
authorJames Meyer <James.meyer@operamail.com>2008-10-02 03:19:12 (GMT)
committerJames Meyer <James.meyer@operamail.com>2008-10-02 03:19:12 (GMT)
commit0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a (patch)
treec0aa2c0b53c317be87eacfcb77b63f53f1f415e7 /abs
downloadlinhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.zip
linhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.tar.gz
linhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.tar.bz2
initial import
Diffstat (limited to 'abs')
-rw-r--r--abs/chroot-devel-testing/README0
-rw-r--r--abs/chroot-devel/README0
-rw-r--r--abs/core-testing/a52dec/PKGBUILD26
-rw-r--r--abs/core-testing/a52dec/a52dec-0.7.4-build.patch27
-rw-r--r--abs/core-testing/aalib/PKGBUILD24
-rw-r--r--abs/core-testing/aalib/aclocal-fixes.patch11
-rw-r--r--abs/core-testing/acl/PKGBUILD35
-rw-r--r--abs/core-testing/alsa-lib/PKGBUILD23
-rw-r--r--abs/core-testing/alsa-lib/python2.5.patch11
-rw-r--r--abs/core-testing/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch242
-rw-r--r--abs/core-testing/alsa-oss/PKGBUILD20
-rw-r--r--abs/core-testing/alsa-utils/PKGBUILD27
-rwxr-xr-xabs/core-testing/alsa-utils/alsa48
-rw-r--r--abs/core-testing/alsa-utils/alsa.conf.d4
-rw-r--r--abs/core-testing/alsa-utils/alsaconf.patch21
-rw-r--r--abs/core-testing/apache/PKGBUILD81
-rw-r--r--abs/core-testing/apache/arch.layout22
-rwxr-xr-xabs/core-testing/apache/httpd40
-rw-r--r--abs/core-testing/apache/httpd.install16
-rw-r--r--abs/core-testing/apache/httpd.logrotate5
-rw-r--r--abs/core-testing/apr-util/PKGBUILD24
-rw-r--r--abs/core-testing/apr/PKGBUILD25
-rw-r--r--abs/core-testing/aspell/PKGBUILD24
-rw-r--r--abs/core-testing/aspell/aspell.install8
-rw-r--r--abs/core-testing/atk/PKGBUILD21
-rw-r--r--abs/core-testing/attr/PKGBUILD37
-rw-r--r--abs/core-testing/aufs-utils/PKGBUILD40
-rw-r--r--abs/core-testing/aufs/PKGBUILD57
-rw-r--r--abs/core-testing/aufs/aufs.install31
-rw-r--r--abs/core-testing/b43-fwcutter/PKGBUILD21
-rwxr-xr-xabs/core-testing/base.list98
-rw-r--r--abs/core-testing/bash/PKGBUILD87
-rw-r--r--abs/core-testing/bash/bash-noinfo.patch12
-rw-r--r--abs/core-testing/bash/bashrc3
-rw-r--r--abs/core-testing/bash/profile35
-rw-r--r--abs/core-testing/bash/profile.bash25
-rw-r--r--abs/core-testing/bc/PKGBUILD24
-rw-r--r--abs/core-testing/bc/build-fix.patch13
-rw-r--r--abs/core-testing/bigreqsproto/PKGBUILD20
-rw-r--r--abs/core-testing/binutils/PKGBUILD67
-rw-r--r--abs/core-testing/bzip2/PKGBUILD47
-rw-r--r--abs/core-testing/ca-certificates/PKGBUILD33
-rw-r--r--abs/core-testing/ca-certificates/ca-certificates.install7
-rw-r--r--abs/core-testing/cairo/PKGBUILD23
-rw-r--r--abs/core-testing/cdparanoia/ChangeLog18
-rw-r--r--abs/core-testing/cdparanoia/PKGBUILD22
-rw-r--r--abs/core-testing/cdrdao/PKGBUILD21
-rw-r--r--abs/core-testing/cdrdao/cdrdao-1.2.2-gcc43.patch73
-rw-r--r--abs/core-testing/cdrdao/gcc4.patch23
-rw-r--r--abs/core-testing/cdrkit/ChangeLog10
-rw-r--r--abs/core-testing/cdrkit/PKGBUILD38
-rw-r--r--abs/core-testing/compositeproto/PKGBUILD20
-rw-r--r--abs/core-testing/coreutils/PKGBUILD62
-rw-r--r--abs/core-testing/coreutils/coreutils-6.10-configuration.patch62
-rw-r--r--abs/core-testing/coreutils/coreutils-i18n.patch4045
-rw-r--r--abs/core-testing/coreutils/coreutils-pam.patch413
-rw-r--r--abs/core-testing/coreutils/coreutils-uname.patch173
-rw-r--r--abs/core-testing/coreutils/futimes.patch47
-rw-r--r--abs/core-testing/coreutils/su9
-rw-r--r--abs/core-testing/cpio/PKGBUILD25
-rw-r--r--abs/core-testing/cpio/cpio-2.9-gcc43.patch31
-rw-r--r--abs/core-testing/cracklib/PKGBUILD26
-rw-r--r--abs/core-testing/cryptsetup/PKGBUILD39
-rw-r--r--abs/core-testing/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch29
-rw-r--r--abs/core-testing/cryptsetup/encrypt_hook122
-rw-r--r--abs/core-testing/cryptsetup/encrypt_install22
-rw-r--r--abs/core-testing/cryptsetup/luksOpen-status.patch13
-rw-r--r--abs/core-testing/curl/ChangeLog19
-rw-r--r--abs/core-testing/curl/PKGBUILD25
-rw-r--r--abs/core-testing/damageproto/PKGBUILD19
-rw-r--r--abs/core-testing/dash/PKGBUILD29
-rw-r--r--abs/core-testing/db/PKGBUILD27
-rw-r--r--abs/core-testing/db/db.install29
-rw-r--r--abs/core-testing/db4.5/PKGBUILD41
-rw-r--r--abs/core-testing/dbus-glib/PKGBUILD22
-rw-r--r--abs/core-testing/dbus/PKGBUILD48
-rw-r--r--abs/core-testing/dbus/dbus57
-rw-r--r--abs/core-testing/dbus/dbus.install21
-rw-r--r--abs/core-testing/dcron/PKGBUILD38
-rwxr-xr-xabs/core-testing/dcron/crond37
-rw-r--r--abs/core-testing/dcron/crond.logrotate5
-rw-r--r--abs/core-testing/dcron/dcron-3.1.patch33
-rw-r--r--abs/core-testing/dcron/root.crontab12
-rwxr-xr-xabs/core-testing/dcron/run-cron14
-rw-r--r--abs/core-testing/device-mapper/PKGBUILD30
-rw-r--r--abs/core-testing/device-mapper/device-mapper.rules1
-rw-r--r--abs/core-testing/dhcpcd/PKGBUILD27
-rw-r--r--abs/core-testing/dhcpcd/dhcpcd.conf.d6
-rw-r--r--abs/core-testing/dialog/PKGBUILD21
-rw-r--r--abs/core-testing/dialog/timeout.patch11
-rw-r--r--abs/core-testing/diffutils/PKGBUILD20
-rw-r--r--abs/core-testing/dmapi/PKGBUILD31
-rw-r--r--abs/core-testing/dmidecode/PKGBUILD20
-rw-r--r--abs/core-testing/dmxproto/PKGBUILD19
-rw-r--r--abs/core-testing/dnsutils/PKGBUILD31
-rw-r--r--abs/core-testing/dnsutils/bind.so_bsdcompat.diff11
-rw-r--r--abs/core-testing/dnsutils/tools-only.patch22
-rw-r--r--abs/core-testing/dosfstools/PKGBUILD20
-rw-r--r--abs/core-testing/dosfstools/linux-2.6.patch64
-rw-r--r--abs/core-testing/dvd+rw-tools/PKGBUILD32
-rw-r--r--abs/core-testing/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch22
-rw-r--r--abs/core-testing/dvdauthor/PKGBUILD21
-rw-r--r--abs/core-testing/e2fsprogs/Makefile-fsck.static.patch13
-rw-r--r--abs/core-testing/e2fsprogs/PKGBUILD34
-rw-r--r--abs/core-testing/e2fsprogs/mke2fs.conf26
-rw-r--r--abs/core-testing/eject/PKGBUILD20
-rw-r--r--abs/core-testing/eject/eject-2.1.5-handle-spaces.patch57
-rw-r--r--abs/core-testing/etcnet/10-defaults6
-rwxr-xr-xabs/core-testing/etcnet/PKGBUILD39
-rwxr-xr-xabs/core-testing/etcnet/adddhcp.patch51
-rwxr-xr-xabs/core-testing/etcnet/etcnet.install42
-rw-r--r--abs/core-testing/etcnet/functions.patch12
-rwxr-xr-xabs/core-testing/etcnet/ipv4address1
-rwxr-xr-xabs/core-testing/etcnet/ipv4route1
-rw-r--r--abs/core-testing/etcnet/network6
-rwxr-xr-xabs/core-testing/etcnet/options62
-rw-r--r--abs/core-testing/expat/PKGBUILD23
-rw-r--r--abs/core-testing/expect/PKGBUILD35
-rw-r--r--abs/core-testing/faac/PKGBUILD28
-rw-r--r--abs/core-testing/faac/libmp4v2.patch11
-rw-r--r--abs/core-testing/faac/pipe-output.patch18
-rw-r--r--abs/core-testing/faad2/ChangeLog14
-rw-r--r--abs/core-testing/faad2/LICENSE28
-rw-r--r--abs/core-testing/faad2/PKGBUILD45
-rw-r--r--abs/core-testing/faad2/faad2-2.6.1-abi_has_changed.patch14
-rw-r--r--abs/core-testing/faad2/faad2-2.6.1-broken-pipe.patch22
-rw-r--r--abs/core-testing/faad2/faad2-2.6.1-implicitdeclar.patch11
-rw-r--r--abs/core-testing/faad2/faad2-2.6.1-libtool22.patch13
-rw-r--r--abs/core-testing/feh/PKGBUILD17
-rw-r--r--abs/core-testing/ffmpeg/PKGBUILD48
-rw-r--r--abs/core-testing/fftw2/PKGBUILD34
-rw-r--r--abs/core-testing/file/PKGBUILD23
-rw-r--r--abs/core-testing/filesystem/PKGBUILD90
-rw-r--r--abs/core-testing/filesystem/crypttab33
-rw-r--r--abs/core-testing/filesystem/filesystem.install60
-rw-r--r--abs/core-testing/filesystem/fstab11
-rw-r--r--abs/core-testing/filesystem/group28
-rw-r--r--abs/core-testing/filesystem/gshadow27
-rw-r--r--abs/core-testing/filesystem/host.conf8
-rw-r--r--abs/core-testing/filesystem/hosts8
-rw-r--r--abs/core-testing/filesystem/issue3
-rw-r--r--abs/core-testing/filesystem/ld.so.conf5
-rw-r--r--abs/core-testing/filesystem/motd0
-rw-r--r--abs/core-testing/filesystem/nsswitch.conf19
-rw-r--r--abs/core-testing/filesystem/passwd7
-rw-r--r--abs/core-testing/filesystem/profile57
-rw-r--r--abs/core-testing/filesystem/protocols57
-rw-r--r--abs/core-testing/filesystem/resolv.conf8
-rw-r--r--abs/core-testing/filesystem/securetty13
-rw-r--r--abs/core-testing/filesystem/services557
-rw-r--r--abs/core-testing/filesystem/shadow7
-rw-r--r--abs/core-testing/filesystem/shells9
-rw-r--r--abs/core-testing/findutils/PKGBUILD30
-rw-r--r--abs/core-testing/fixesproto/PKGBUILD20
-rw-r--r--abs/core-testing/flac/PKGBUILD32
-rw-r--r--abs/core-testing/flac/flac-1.2.1-gcc43.patch10
-rw-r--r--abs/core-testing/flac/flac-linking.diff12
-rw-r--r--abs/core-testing/flac/xmms-plugin.patch11
-rw-r--r--abs/core-testing/fltk/PKGBUILD23
-rw-r--r--abs/core-testing/fluxbox/PKGBUILD38
-rw-r--r--abs/core-testing/fluxbox/fluxbox-1.0.0-gcc43.patch10
-rw-r--r--abs/core-testing/fluxbox/fluxbox.desktop6
-rw-r--r--abs/core-testing/fontcacheproto/PKGBUILD19
-rw-r--r--abs/core-testing/fontconfig/29-replace-bitmap-fonts.conf37
-rw-r--r--abs/core-testing/fontconfig/PKGBUILD32
-rw-r--r--abs/core-testing/fontconfig/fontconfig.install100
-rw-r--r--abs/core-testing/fontsproto/PKGBUILD19
-rw-r--r--abs/core-testing/freeglut/PKGBUILD30
-rw-r--r--abs/core-testing/freeglut/glut-cursor-inherit.patch23
-rw-r--r--abs/core-testing/freetype2/PKGBUILD33
-rw-r--r--abs/core-testing/freetype2/bytecode.patch29
-rw-r--r--abs/core-testing/freetype2/freetype-2.2.1-enable-valid.patch20
-rw-r--r--abs/core-testing/freetype2/freetype-2.2.1-memcpy-fix.patch14
-rw-r--r--abs/core-testing/freetype2/freetype-2.3.0-enable-spr.patch11
-rw-r--r--abs/core-testing/freetype2/freetype-2.3.3-ftbitmap.patch25
-rw-r--r--abs/core-testing/freetype2/freetype2.install23
-rw-r--r--abs/core-testing/fribidi/ChangeLog5
-rw-r--r--abs/core-testing/fribidi/PKGBUILD23
-rw-r--r--abs/core-testing/fuse/PKGBUILD38
-rw-r--r--abs/core-testing/fuse/fuse.install14
-rwxr-xr-xabs/core-testing/fuse/fuse.rc.d49
-rw-r--r--abs/core-testing/fxload/PKGBUILD20
-rw-r--r--abs/core-testing/gawk/PKGBUILD31
-rw-r--r--abs/core-testing/gawk/gawk-3.1.5-segfault_fix-1.patch43
-rw-r--r--abs/core-testing/gcc-libs/PKGBUILD65
-rw-r--r--abs/core-testing/gcc-libs/gcc-hash-style-both.patch163
-rw-r--r--abs/core-testing/gcc-libs/gcc_pure64.patch26
-rw-r--r--abs/core-testing/gdbm/PKGBUILD24
-rw-r--r--abs/core-testing/gen-init-cpio/Makefile42
-rw-r--r--abs/core-testing/gen-init-cpio/PKGBUILD21
-rw-r--r--abs/core-testing/gen-init-cpio/gen_init_cpio.c514
-rw-r--r--abs/core-testing/gettext/PKGBUILD22
-rw-r--r--abs/core-testing/ghostscript/PKGBUILD50
-rw-r--r--abs/core-testing/ghostscript/ghostscript-fPIC.patch31
-rw-r--r--abs/core-testing/ghostscript/ghostscript.install14
-rw-r--r--abs/core-testing/giblib/PKGBUILD20
-rw-r--r--abs/core-testing/giflib/PKGBUILD35
-rw-r--r--abs/core-testing/glib2/PKGBUILD32
-rw-r--r--abs/core-testing/glib2/gkeyfile-bool-nocase.patch16
-rw-r--r--abs/core-testing/glib2/glib2.csh1
-rw-r--r--abs/core-testing/glib2/glib2.sh1
-rw-r--r--abs/core-testing/glibc/ChangeLog28
-rw-r--r--abs/core-testing/glibc/PKGBUILD100
-rw-r--r--abs/core-testing/glibc/fix-makecontext.patch33
-rw-r--r--abs/core-testing/glibc/glibc.install122
-rwxr-xr-xabs/core-testing/glibc/locale-gen42
-rw-r--r--abs/core-testing/glibc/locale.gen438
-rw-r--r--abs/core-testing/glibc/locale.gen.txt23
-rwxr-xr-xabs/core-testing/glibc/nscd40
-rw-r--r--abs/core-testing/glproto/PKGBUILD20
-rw-r--r--abs/core-testing/gnutls/PKGBUILD24
-rw-r--r--abs/core-testing/gpm/ChangeLog11
-rw-r--r--abs/core-testing/gpm/PKGBUILD35
-rwxr-xr-xabs/core-testing/gpm/gpm40
-rw-r--r--abs/core-testing/gpm/gpm.conf.d4
-rw-r--r--abs/core-testing/grep/01-fgrep.patch145
-rw-r--r--abs/core-testing/grep/02-bracket.patch11
-rw-r--r--abs/core-testing/grep/03-i18n.patch303
-rw-r--r--abs/core-testing/grep/04-oi.patch48
-rw-r--r--abs/core-testing/grep/05-manpage.patch19
-rw-r--r--abs/core-testing/grep/06-color.patch10
-rw-r--r--abs/core-testing/grep/07-icolor.patch36
-rw-r--r--abs/core-testing/grep/08-skip.patch42
-rw-r--r--abs/core-testing/grep/09-egf-speedup.patch823
-rw-r--r--abs/core-testing/grep/10-dfa-optional.patch67
-rw-r--r--abs/core-testing/grep/11-tests.patch138
-rw-r--r--abs/core-testing/grep/12-w.patch121
-rw-r--r--abs/core-testing/grep/13-P.patch14
-rw-r--r--abs/core-testing/grep/14-mem-exhausted.patch15
-rw-r--r--abs/core-testing/grep/15-empty-pattern.patch36
-rw-r--r--abs/core-testing/grep/64-egf-speedup.patch791
-rw-r--r--abs/core-testing/grep/PKGBUILD50
-rw-r--r--abs/core-testing/groff/PKGBUILD34
-rw-r--r--abs/core-testing/groff/man-utf8.tmac9
-rw-r--r--abs/core-testing/grub/040_all_grub-0.96-nxstack.patch623
-rw-r--r--abs/core-testing/grub/05-grub-0.97-initrdaddr.diff16
-rw-r--r--abs/core-testing/grub/PKGBUILD81
-rw-r--r--abs/core-testing/grub/grub-0.97-gpt.patch315
-rw-r--r--abs/core-testing/grub/grub-inode-size.patch94
-rw-r--r--abs/core-testing/grub/i2o.patch45
-rwxr-xr-xabs/core-testing/grub/install-grub187
-rw-r--r--abs/core-testing/grub/intelmac.patch67
-rw-r--r--abs/core-testing/grub/menu.lst46
-rw-r--r--abs/core-testing/grub/more-raid.patch100
-rw-r--r--abs/core-testing/grub/special-devices.patch18
-rw-r--r--abs/core-testing/gsfonts/PKGBUILD18
-rw-r--r--abs/core-testing/gsfonts/xfonts.install20
-rw-r--r--abs/core-testing/gtk2/PKGBUILD35
-rw-r--r--abs/core-testing/gtk2/gtk2.install27
-rw-r--r--abs/core-testing/gtk2/gtkclipboard-check.patch11
-rw-r--r--abs/core-testing/gzip/PKGBUILD31
-rw-r--r--abs/core-testing/gzip/gzip-fixpaths.patch37
-rw-r--r--abs/core-testing/gzip/gzip-fixutimens.patch36
-rw-r--r--abs/core-testing/gzip/gzip-security-update.patch186
-rw-r--r--abs/core-testing/hal-info/PKGBUILD23
-rw-r--r--abs/core-testing/hal/PKGBUILD49
-rw-r--r--abs/core-testing/hal/cryptsetup_location.patch36
-rw-r--r--abs/core-testing/hal/hal54
-rw-r--r--abs/core-testing/hal/hal-0.5.9-hide-diagnostic.patch14
-rw-r--r--abs/core-testing/hal/hal-policy.patch32
-rw-r--r--abs/core-testing/hal/hal.install25
-rw-r--r--abs/core-testing/hal/ntfs3g-valid-options.patch11
-rw-r--r--abs/core-testing/hdparm/PKGBUILD33
-rw-r--r--abs/core-testing/heimdal/002_all_heimdal-no_libedit.patch10
-rw-r--r--abs/core-testing/heimdal/003_all_heimdal-fPIC.patch12
-rw-r--r--abs/core-testing/heimdal/004_all_heimdal-rxapps.patch19
-rw-r--r--abs/core-testing/heimdal/006_all_heimdal-suid_fix.patch20
-rw-r--r--abs/core-testing/heimdal/010_all_heimdal-system-libss.patch40
-rw-r--r--abs/core-testing/heimdal/PKGBUILD103
-rw-r--r--abs/core-testing/heimdal/heimdal-kdc.rc40
-rw-r--r--abs/core-testing/heimdal/kadmind.rc40
-rw-r--r--abs/core-testing/heimdal/kpasswd.rc40
-rw-r--r--abs/core-testing/hwdetect/PKGBUILD18
-rwxr-xr-xabs/core-testing/hwdetect/hwdetect482
-rw-r--r--abs/core-testing/imagemagick/ChangeLog44
-rw-r--r--abs/core-testing/imagemagick/PKGBUILD56
-rw-r--r--abs/core-testing/imagemagick/add_delegate.patch8
-rw-r--r--abs/core-testing/imagemagick/libpng_mmx_patch_x86_64.patch12
-rw-r--r--abs/core-testing/imlib2/PKGBUILD28
-rw-r--r--abs/core-testing/initscripts/ChangeLog2083
-rw-r--r--abs/core-testing/initscripts/PKGBUILD22
-rw-r--r--abs/core-testing/initscripts/initscripts.install25
-rw-r--r--abs/core-testing/inputproto/PKGBUILD22
-rw-r--r--abs/core-testing/intel-dri/PKGBUILD38
-rw-r--r--abs/core-testing/iproute/PKGBUILD26
-rw-r--r--abs/core-testing/iproute/iproute2-2.4.7-now-ss020116.patch9823
-rw-r--r--abs/core-testing/iptables/PKGBUILD30
-rw-r--r--abs/core-testing/iptables/PKGBUILD.orig36
-rw-r--r--abs/core-testing/iptables/empty.rules6
-rwxr-xr-xabs/core-testing/iptables/ip6tables97
-rwxr-xr-xabs/core-testing/iptables/iptables95
-rw-r--r--abs/core-testing/iptables/iptables.conf.d8
-rw-r--r--abs/core-testing/iptables/simple_firewall.rules11
-rw-r--r--abs/core-testing/iputils/PKGBUILD72
-rw-r--r--abs/core-testing/iputils/iputils-20070202-no-open-max.patch16
-rw-r--r--abs/core-testing/iputils/iputils-big-patches.patch595
-rw-r--r--abs/core-testing/iputils/iputils-ss021109-try.patch239
-rw-r--r--abs/core-testing/iputils/iputils.patch1170
-rw-r--r--abs/core-testing/iputils/protocols18
-rw-r--r--abs/core-testing/iputils/services195
-rw-r--r--abs/core-testing/ipw2100-fw/PKGBUILD36
-rw-r--r--abs/core-testing/ipw2100-fw/ipw2100-fw.install18
-rw-r--r--abs/core-testing/ipw2200-fw/PKGBUILD34
-rw-r--r--abs/core-testing/ipw2200-fw/ipw2200-fw.install18
-rw-r--r--abs/core-testing/ipw3945-ucode/PKGBUILD22
-rw-r--r--abs/core-testing/ipw3945-ucode/ipw3945-ucode.install18
-rw-r--r--abs/core-testing/ipw3945/2.6.18-compile.patch11
-rw-r--r--abs/core-testing/ipw3945/PKGBUILD31
-rw-r--r--abs/core-testing/ipw3945/compile-2.6.24.patch43
-rw-r--r--abs/core-testing/ipw3945/ipw3945.install26
-rw-r--r--abs/core-testing/ipw3945/kernel-2.6.19.patch10
-rw-r--r--abs/core-testing/ipw3945/lockup.patch31
-rw-r--r--abs/core-testing/ipw3945d/PKGBUILD28
-rw-r--r--abs/core-testing/ipw3945d/ipw3945d.install35
-rw-r--r--abs/core-testing/ipw3945d/ipw3945d.rc42
-rw-r--r--abs/core-testing/ivtv-utils/PKGBUILD46
-rw-r--r--abs/core-testing/ivtv-utils/ivtv-utils.install31
-rw-r--r--abs/core-testing/iwlwifi-3945-ucode/PKGBUILD28
-rw-r--r--abs/core-testing/iwlwifi-4965-ucode/PKGBUILD26
-rw-r--r--abs/core-testing/jack-audio-connection-kit/PKGBUILD30
-rw-r--r--abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.conf.d42
-rw-r--r--abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.install34
-rw-r--r--abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.rc.d39
-rw-r--r--abs/core-testing/jasper/PKGBUILD21
-rw-r--r--abs/core-testing/jfsutils/PKGBUILD21
-rw-r--r--abs/core-testing/kakasi/PKGBUILD20
-rw-r--r--abs/core-testing/kbd/PKGBUILD34
-rw-r--r--abs/core-testing/kbd/kbd-1.12-alias.patch47
-rw-r--r--abs/core-testing/kbd/kbd-1.12-find_map_fix.patch37
-rw-r--r--abs/core-testing/kbd/kbd-1.12-no-user-map.patch19
-rw-r--r--abs/core-testing/kbd/keymap_hook21
-rw-r--r--abs/core-testing/kbd/keymap_install44
-rw-r--r--abs/core-testing/kbd/rename-duplicates.patch830
-rw-r--r--abs/core-testing/kbproto/PKGBUILD18
-rw-r--r--abs/core-testing/kdelibs3/PKGBUILD55
-rwxr-xr-xabs/core-testing/kdelibs3/kde3.profile15
-rw-r--r--abs/core-testing/kdelibs3/kdelibs3.install11
-rw-r--r--abs/core-testing/kernel-headers/PKGBUILD27
-rw-r--r--abs/core-testing/kernel-headers/netfilter-includes.patch91
-rw-r--r--abs/core-testing/kernel26/PKGBUILD159
-rw-r--r--abs/core-testing/kernel26/config3897
-rw-r--r--abs/core-testing/kernel26/config.x86_643649
-rw-r--r--abs/core-testing/kernel26/kernel26.install144
-rw-r--r--abs/core-testing/kernel26/kernel26.preset17
-rw-r--r--abs/core-testing/kernel26/logo_linux_clut224.ppm883
-rw-r--r--abs/core-testing/kernel26/logo_linux_mono.pbm883
-rw-r--r--abs/core-testing/kernel26/logo_linux_vga16.ppm883
-rw-r--r--abs/core-testing/klibc-extras/PKGBUILD22
-rw-r--r--abs/core-testing/klibc-kbd/PKGBUILD45
-rw-r--r--abs/core-testing/klibc-kbd/keymap_hook27
-rw-r--r--abs/core-testing/klibc-kbd/keymap_install76
-rw-r--r--abs/core-testing/klibc-kbd/no-exit.patch31
-rw-r--r--abs/core-testing/klibc-kbd/no-isatty.patch58
-rw-r--r--abs/core-testing/klibc-module-init-tools/PKGBUILD31
-rw-r--r--abs/core-testing/klibc-module-init-tools/fix-modprobe-ignore-path.patch14
-rw-r--r--abs/core-testing/klibc-module-init-tools/makefile.patch54
-rw-r--r--abs/core-testing/klibc-udev/PKGBUILD58
-rw-r--r--abs/core-testing/klibc-udev/klibc-remove-revert.patch111
-rwxr-xr-xabs/core-testing/klibc-udev/load-modules.sh32
-rw-r--r--abs/core-testing/klibc-udev/post-107.patch176
-rwxr-xr-xabs/core-testing/klibc-udev/start_udev115
-rw-r--r--abs/core-testing/klibc-udev/udev.rules187
-rw-r--r--abs/core-testing/klibc-udev/udev_hook7
-rw-r--r--abs/core-testing/klibc-udev/udev_install31
-rw-r--r--abs/core-testing/klibc-udev/vol_id-suspend2.patch15
-rw-r--r--abs/core-testing/klibc/PKGBUILD62
-rw-r--r--abs/core-testing/klibc/klibc-2.6.24.patch44
-rw-r--r--abs/core-testing/klibc/klibc-Kbuild.patch41
-rw-r--r--abs/core-testing/klibc/klibc-compile-shared-by-default.patch12
-rw-r--r--abs/core-testing/klibc/klibc-module-init-tools.patch63
-rw-r--r--abs/core-testing/klibc/multiple_raid_assembly_fix.patch20
-rw-r--r--abs/core-testing/lame/PKGBUILD23
-rw-r--r--abs/core-testing/lame/shared-frontend.patch23
-rw-r--r--abs/core-testing/lcms/PKGBUILD24
-rw-r--r--abs/core-testing/less/PKGBUILD23
-rw-r--r--abs/core-testing/less/zless9
-rw-r--r--abs/core-testing/libao/ChangeLog5
-rw-r--r--abs/core-testing/libao/PKGBUILD25
-rw-r--r--abs/core-testing/libao/libao.conf2
-rw-r--r--abs/core-testing/libarchive/PKGBUILD31
-rw-r--r--abs/core-testing/libart-lgpl/PKGBUILD20
-rw-r--r--abs/core-testing/libart-lgpl/art_misc.h-cplusplus.patch35
-rw-r--r--abs/core-testing/libcap/PKGBUILD20
-rw-r--r--abs/core-testing/libcap/libcap-1.10-debian.patch766
-rw-r--r--abs/core-testing/libcap/libcap-1.10-fixcflags.patch22
-rw-r--r--abs/core-testing/libcap/libcap-1.10-shared.patch17
-rw-r--r--abs/core-testing/libcdaudio/PKGBUILD23
-rw-r--r--abs/core-testing/libcroco/PKGBUILD21
-rw-r--r--abs/core-testing/libcups/PKGBUILD32
-rw-r--r--abs/core-testing/libdatrie/PKGBUILD22
-rw-r--r--abs/core-testing/libdmx/PKGBUILD22
-rw-r--r--abs/core-testing/libdownload/PKGBUILD21
-rw-r--r--abs/core-testing/libdownload/largefiles.patch12
-rw-r--r--abs/core-testing/libdrm/PKGBUILD20
-rw-r--r--abs/core-testing/libdvdread/PKGBUILD23
-rw-r--r--abs/core-testing/libdvdread/libdvdread.install11
-rw-r--r--abs/core-testing/libexif/PKGBUILD22
-rw-r--r--abs/core-testing/libfontenc/PKGBUILD24
-rw-r--r--abs/core-testing/libgcrypt/PKGBUILD23
-rw-r--r--abs/core-testing/libgl/PKGBUILD49
-rw-r--r--abs/core-testing/libglade/PKGBUILD26
-rw-r--r--abs/core-testing/libglade/glade.install30
-rw-r--r--abs/core-testing/libglade/libglade-2.0.1-nowarning.patch39
-rw-r--r--abs/core-testing/libgpg-error/PKGBUILD23
-rw-r--r--abs/core-testing/libgsf/PKGBUILD25
-rw-r--r--abs/core-testing/libice/PKGBUILD22
-rw-r--r--abs/core-testing/libid3tag/PKGBUILD21
-rw-r--r--abs/core-testing/libid3tag/id3tag.pc10
-rw-r--r--abs/core-testing/libidn/PKGBUILD22
-rw-r--r--abs/core-testing/libjpeg/PKGBUILD21
-rw-r--r--abs/core-testing/liblbxutil/PKGBUILD23
-rw-r--r--abs/core-testing/libldap/PKGBUILD62
-rw-r--r--abs/core-testing/libldap/ntlm.patch189
-rw-r--r--abs/core-testing/libldap/peercred.patch11
-rw-r--r--abs/core-testing/libmad/PKGBUILD27
-rw-r--r--abs/core-testing/libmad/libmad.patch117
-rw-r--r--abs/core-testing/libmad/libmad_gcc43.patch10
-rw-r--r--abs/core-testing/libmp4v2/PKGBUILD33
-rw-r--r--abs/core-testing/libmysqlclient/PKGBUILD55
-rw-r--r--abs/core-testing/libogg/PKGBUILD22
-rw-r--r--abs/core-testing/libpcap/PKGBUILD44
-rw-r--r--abs/core-testing/libpcap/libpcap-shared.patch51
-rw-r--r--abs/core-testing/libpng/ChangeLog51
-rw-r--r--abs/core-testing/libpng/PKGBUILD43
-rw-r--r--abs/core-testing/libpng/libpng-1.2.29-apng.patch1671
-rw-r--r--abs/core-testing/libpng/libpng-1.2.31-apng.patch1644
-rw-r--r--abs/core-testing/librsvg/PKGBUILD28
-rw-r--r--abs/core-testing/librsvg/librsvg.install14
-rw-r--r--abs/core-testing/libsasl/PKGBUILD43
-rw-r--r--abs/core-testing/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch170
-rw-r--r--abs/core-testing/libsasl/db-4.7.patch20
-rw-r--r--abs/core-testing/libsasl/libsasl.install18
-rw-r--r--abs/core-testing/libsm/PKGBUILD24
-rw-r--r--abs/core-testing/libsmbios/PKGBUILD36
-rw-r--r--abs/core-testing/libsndfile/PKGBUILD28
-rw-r--r--abs/core-testing/libsndfile/flac-1.1.4.dpatch486
-rw-r--r--abs/core-testing/libsndfile/lossy_comp_test-overflow.dpatch21
-rw-r--r--abs/core-testing/libsndfile/overflow.dpatch46
-rw-r--r--abs/core-testing/libstatgrab/PKGBUILD30
-rw-r--r--abs/core-testing/libtasn1/PKGBUILD21
-rw-r--r--abs/core-testing/libthai/PKGBUILD22
-rw-r--r--abs/core-testing/libtheora/PKGBUILD26
-rw-r--r--abs/core-testing/libtiff/CVE-2006-3459-3465.patch669
-rw-r--r--abs/core-testing/libtiff/PKGBUILD31
-rw-r--r--abs/core-testing/libtiff/tiff2pdf-compression.patch44
-rw-r--r--abs/core-testing/libtiff/tiff2pdf-octal-printf.patch11
-rw-r--r--abs/core-testing/libtiff/tiffsplit-fname-overflow.patch19
-rw-r--r--abs/core-testing/libtool/PKGBUILD21
-rw-r--r--abs/core-testing/libusb/PKGBUILD21
-rw-r--r--abs/core-testing/libvorbis/PKGBUILD24
-rw-r--r--abs/core-testing/libwmf/PKGBUILD31
-rw-r--r--abs/core-testing/libwmf/libwmf.install18
-rw-r--r--abs/core-testing/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff237
-rw-r--r--abs/core-testing/libx11/PKGBUILD44
-rw-r--r--abs/core-testing/libx11/xorg.sh19
-rw-r--r--abs/core-testing/libx86/PKGBUILD27
-rw-r--r--abs/core-testing/libx86/lrmi.patch16
-rw-r--r--abs/core-testing/libxau/PKGBUILD22
-rw-r--r--abs/core-testing/libxaw/PKGBUILD26
-rw-r--r--abs/core-testing/libxcb/PKGBUILD29
-rw-r--r--abs/core-testing/libxcb/xcb_xlib-no-assert-on-lock.patch30
-rw-r--r--abs/core-testing/libxcomposite/PKGBUILD22
-rw-r--r--abs/core-testing/libxcursor/PKGBUILD22
-rw-r--r--abs/core-testing/libxdamage/PKGBUILD22
-rw-r--r--abs/core-testing/libxdmcp/PKGBUILD22
-rw-r--r--abs/core-testing/libxext/PKGBUILD21
-rw-r--r--abs/core-testing/libxfixes/PKGBUILD22
-rw-r--r--abs/core-testing/libxfixes/xfixes_coverity576.patch16
-rw-r--r--abs/core-testing/libxfont/PKGBUILD24
-rw-r--r--abs/core-testing/libxfontcache/PKGBUILD22
-rw-r--r--abs/core-testing/libxft/PKGBUILD25
-rw-r--r--abs/core-testing/libxi/PKGBUILD22
-rw-r--r--abs/core-testing/libxinerama/PKGBUILD22
-rw-r--r--abs/core-testing/libxkbfile/PKGBUILD25
-rw-r--r--abs/core-testing/libxkbui/PKGBUILD23
-rw-r--r--abs/core-testing/libxml2/PKGBUILD25
-rw-r--r--abs/core-testing/libxmu/PKGBUILD23
-rw-r--r--abs/core-testing/libxp/PKGBUILD24
-rw-r--r--abs/core-testing/libxpm/PKGBUILD26
-rw-r--r--abs/core-testing/libxrandr/PKGBUILD24
-rw-r--r--abs/core-testing/libxrender/PKGBUILD22
-rw-r--r--abs/core-testing/libxslt/ChangeLog9
-rw-r--r--abs/core-testing/libxslt/PKGBUILD25
-rw-r--r--abs/core-testing/libxss/PKGBUILD25
-rw-r--r--abs/core-testing/libxt/PKGBUILD23
-rw-r--r--abs/core-testing/libxtrap/PKGBUILD24
-rw-r--r--abs/core-testing/libxtst/PKGBUILD23
-rw-r--r--abs/core-testing/libxv/PKGBUILD25
-rw-r--r--abs/core-testing/libxvmc/PKGBUILD23
-rw-r--r--abs/core-testing/libxxf86dga/PKGBUILD23
-rw-r--r--abs/core-testing/libxxf86misc/PKGBUILD23
-rw-r--r--abs/core-testing/libxxf86vm/PKGBUILD24
-rw-r--r--abs/core-testing/licenses/LICENSE.ralink-firmware.txt39
-rw-r--r--abs/core-testing/licenses/PKGBUILD123
-rw-r--r--abs/core-testing/licenses/ZopePublicLicense.txt54
-rw-r--r--abs/core-testing/licenses/cc-by-3.0.txt60
-rw-r--r--abs/core-testing/licenses/cc-by-nc-3.0.txt61
-rw-r--r--abs/core-testing/licenses/cc-by-nc-nd-3.0.txt58
-rw-r--r--abs/core-testing/licenses/cc-by-nc-sa-3.0.txt63
-rw-r--r--abs/core-testing/licenses/cc-by-nd-3.0.txt57
-rw-r--r--abs/core-testing/licenses/cc-by-sa-3.0.txt63
-rw-r--r--abs/core-testing/licenses/cc-readme.txt12
-rw-r--r--abs/core-testing/licenses/cddl-1.0.txt377
-rw-r--r--abs/core-testing/licenses/cpl-1.0.txt217
-rw-r--r--abs/core-testing/licenses/eclipse-1.0.txt88
-rw-r--r--abs/core-testing/licenses/perlartistic.txt151
-rw-r--r--abs/core-testing/licenses/python-2.txt270
-rw-r--r--abs/core-testing/linhes-live/PKGBUILD30
-rwxr-xr-xabs/core-testing/linhes-live/bin/gen_fstab122
-rwxr-xr-xabs/core-testing/linhes-live/bin/km76
-rw-r--r--abs/core-testing/linhes-live/etc/live-shutdown50
-rw-r--r--abs/core-testing/linhes-live/etc/live-sysinit54
-rwxr-xr-xabs/core-testing/linhes-live/etc/loginroot3
-rwxr-xr-xabs/core-testing/linhes-live/etc/rc.shutdown-live167
-rwxr-xr-xabs/core-testing/linhes-live/etc/rc.sysinit-live466
-rwxr-xr-xabs/core-testing/linhes-live/etc/ulogin57
-rwxr-xr-xabs/core-testing/linhes-live/lib/initcpio/gen_larch_init12
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/hooks/larch1120
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/hooks/larch233
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/hooks/larch2_aufs33
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/hooks/larch3192
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/install/larch115
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/install/larch215
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/install/larch2_aufs15
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/install/larch318
-rwxr-xr-xabs/core-testing/linhes-live/lib/initcpio/kinit6
-rw-r--r--abs/core-testing/linhes-live/lib/initcpio/mkinitcpio.conf54
-rw-r--r--abs/core-testing/linuxtv-dvb-apps/ChangeLog2
-rw-r--r--abs/core-testing/linuxtv-dvb-apps/PKGBUILD38
-rw-r--r--abs/core-testing/linuxtv-dvb-apps/linuxtv-dvb-apps.install12
-rw-r--r--abs/core-testing/lirc-utils/PKGBUILD66
-rw-r--r--abs/core-testing/lirc-utils/kernel-2.6.26.patch122
-rw-r--r--abs/core-testing/lirc-utils/lirc.logrotate5
-rwxr-xr-xabs/core-testing/lirc-utils/lircd43
-rw-r--r--abs/core-testing/lirc-utils/lircd.conf.d8
-rwxr-xr-xabs/core-testing/lirc-utils/lircmd36
-rw-r--r--abs/core-testing/lirc/PKGBUILD50
-rw-r--r--abs/core-testing/lirc/kernel-2.6.26.patch122
-rw-r--r--abs/core-testing/lirc/lirc.install50
-rw-r--r--abs/core-testing/live-installer/LinHES-release1
-rwxr-xr-xabs/core-testing/live-installer/MythVantage.sh3
-rwxr-xr-xabs/core-testing/live-installer/PKGBUILD66
-rwxr-xr-xabs/core-testing/live-installer/add_service.sh15
-rwxr-xr-xabs/core-testing/live-installer/autocard.py302
-rwxr-xr-xabs/core-testing/live-installer/bpopup-ui.xml164
-rwxr-xr-xabs/core-testing/live-installer/build_diskless.sh143
-rwxr-xr-xabs/core-testing/live-installer/copy-to-mythbase.sh12
-rwxr-xr-xabs/core-testing/live-installer/create_master.sh57
-rwxr-xr-xabs/core-testing/live-installer/file_time_offset.py39
-rwxr-xr-xabs/core-testing/live-installer/install-ui.xml175
-rwxr-xr-xabs/core-testing/live-installer/install_db_chroot.sh52
-rwxr-xr-xabs/core-testing/live-installer/install_functions.sh484
-rwxr-xr-xabs/core-testing/live-installer/install_proxy.sh481
-rw-r--r--abs/core-testing/live-installer/issue1
-rwxr-xr-xabs/core-testing/live-installer/live-install.sh28
-rw-r--r--abs/core-testing/live-installer/live.install78
-rw-r--r--abs/core-testing/live-installer/networkconfig.sh280
-rwxr-xr-xabs/core-testing/live-installer/remove_service.sh8
-rwxr-xr-xabs/core-testing/live-installer/restore_default_settings.sh325
-rwxr-xr-xabs/core-testing/live-installer/soundconfig.sh248
-rwxr-xr-xabs/core-testing/live-installer/startx29
-rwxr-xr-xabs/core-testing/live-installer/systemconfig.sh1255
-rw-r--r--abs/core-testing/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf869
-rw-r--r--abs/core-testing/live-installer/templates/LCD/Silverstone/LCDd.conf869
-rw-r--r--abs/core-testing/live-installer/templates/LCD/Silverstone/modules1
-rw-r--r--abs/core-testing/live-installer/templates/LCD/antec_fusion/LCDd.conf869
-rw-r--r--abs/core-testing/live-installer/templates/LCD/antec_fusion/lircd.conf38
-rw-r--r--abs/core-testing/live-installer/templates/LCD/antec_fusion/lircrc15
-rw-r--r--abs/core-testing/live-installer/templates/LCD/antec_fusion/modules1
-rw-r--r--abs/core-testing/live-installer/templates/LCD/xosd/LCDd.conf957
-rwxr-xr-xabs/core-testing/live-installer/templates/cc.orig.sh35
-rwxr-xr-xabs/core-testing/live-installer/templates/cc.sh5
-rwxr-xr-xabs/core-testing/live-installer/templates/cc_vol.sh5
-rwxr-xr-xabs/core-testing/live-installer/templates/change_chan.sh19
-rw-r--r--abs/core-testing/live-installer/templates/cron.template4
-rw-r--r--abs/core-testing/live-installer/templates/etcnet/eth/ipv4address2
-rw-r--r--abs/core-testing/live-installer/templates/etcnet/eth/ipv4route2
-rw-r--r--abs/core-testing/live-installer/templates/etcnet/eth/iwconfig2
-rw-r--r--abs/core-testing/live-installer/templates/etcnet/eth/options7
-rw-r--r--abs/core-testing/live-installer/templates/evrouter/MythVantage-40
-rw-r--r--abs/core-testing/live-installer/templates/evrouter/MythVantage-80
-rw-r--r--abs/core-testing/live-installer/templates/evrouter/MythVantage-Full0
-rw-r--r--abs/core-testing/live-installer/templates/evrouter/MythVantage8-minipac3
-rw-r--r--abs/core-testing/live-installer/templates/evrouter/MythVantage8-uhid3
-rw-r--r--abs/core-testing/live-installer/templates/exports.template8
-rwxr-xr-xabs/core-testing/live-installer/templates/fstab.conf.template16
-rw-r--r--abs/core-testing/live-installer/templates/mysql.service13
-rwxr-xr-xabs/core-testing/live-installer/templates/mysql.txt29
-rwxr-xr-xabs/core-testing/live-installer/templates/ncid.conf.template51
-rw-r--r--abs/core-testing/live-installer/templates/ncidd.conf.template143
-rwxr-xr-xabs/core-testing/live-installer/templates/real_change_chan.sh19
-rw-r--r--abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf357
-rw-r--r--abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt922
-rw-r--r--abs/core-testing/live-installer/templates/remotes/ATI_wonder/preview.jpgbin0 -> 63480 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS115
-rw-r--r--abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircrc832
-rw-r--r--abs/core-testing/live-installer/templates/remotes/MX-500-jams/preview.jpgbin0 -> 10473 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircd.conf115
-rwxr-xr-xabs/core-testing/live-installer/templates/remotes/MythVantage-one/lircrc857
-rw-r--r--abs/core-testing/live-installer/templates/remotes/MythVantage-one/preview.jpgbin0 -> 88727 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf87
-rw-r--r--abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs539
-rw-r--r--abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpgbin0 -> 7504 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap69
-rw-r--r--abs/core-testing/live-installer/templates/remotes/gr8zap/lircrc472
-rw-r--r--abs/core-testing/live-installer/templates/remotes/gr8zap/preview.jpgbin0 -> 83195 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge274
-rw-r--r--abs/core-testing/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge33
-rw-r--r--abs/core-testing/live-installer/templates/remotes/hauppauge/preview.jpgbin0 -> 45763 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/imon-pad/lircd.conf88
-rw-r--r--abs/core-testing/live-installer/templates/remotes/imon-pad/lircrc240
-rw-r--r--abs/core-testing/live-installer/templates/remotes/imon-pad/preview.jpgbin0 -> 33321 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/mceusb/lircd-mceusb.conf88
-rw-r--r--abs/core-testing/live-installer/templates/remotes/mceusb/lircrc-mceusb393
-rw-r--r--abs/core-testing/live-installer/templates/remotes/mceusb/preview.jpgbin0 -> 12551 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/no_remote/preview.jpgbin0 -> 3087 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/receiver_usb.id4
-rw-r--r--abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf127
-rw-r--r--abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt590
-rw-r--r--abs/core-testing/live-installer/templates/remotes/snapstream_firefly/preview.jpgbin0 -> 63750 bytes
-rw-r--r--abs/core-testing/live-installer/templates/remotes/streamzap/lircd.conf.streamzap69
-rwxr-xr-xabs/core-testing/live-installer/templates/remotes/streamzap/lircrc832
-rw-r--r--abs/core-testing/live-installer/templates/remotes/streamzap/preview.jpgbin0 -> 83195 bytes
-rwxr-xr-xabs/core-testing/live-installer/templates/samba/smb.conf.home10
-rwxr-xr-xabs/core-testing/live-installer/templates/samba/smb.conf.media10
-rw-r--r--abs/core-testing/live-installer/templates/samba/smb.conf.template125
-rw-r--r--abs/core-testing/live-installer/templates/settings/default_1/keybindings.txt209
-rw-r--r--abs/core-testing/live-installer/templates/settings/default_1/settings.txt320
-rw-r--r--abs/core-testing/live-installer/templates/settings/default_2/keybindings.txt209
-rw-r--r--abs/core-testing/live-installer/templates/settings/default_2/settings.txt320
-rw-r--r--abs/core-testing/live-installer/templates/sources/mv-core2
-rw-r--r--abs/core-testing/live-installer/templates/sources/mv-core-testing2
-rw-r--r--abs/core-testing/live-installer/templates/sources/mv-extra2
-rw-r--r--abs/core-testing/live-installer/templates/sources/mv-extra-testing2
-rw-r--r--abs/core-testing/live-installer/templates/sources/svc_pkg3
-rwxr-xr-xabs/core-testing/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf413
-rw-r--r--abs/core-testing/live-installer/templates/xine.config.template754
-rw-r--r--abs/core-testing/live-installer/templates/xorg/modeline.ATSC33
-rw-r--r--abs/core-testing/live-installer/templates/xorg/modeline.DVD9
-rw-r--r--abs/core-testing/live-installer/templates/xorg/modeline.NTSC10
-rw-r--r--abs/core-testing/live-installer/templates/xorg/modeline.VESA163
-rw-r--r--abs/core-testing/live-installer/templates/xorg/modeline.custom1
-rw-r--r--abs/core-testing/live-installer/templates/xorg/xorg.conf.ati94
-rw-r--r--abs/core-testing/live-installer/templates/xorg/xorg.conf.intel148
-rwxr-xr-xabs/core-testing/live-installer/templates/xorg/xorg.conf.nvidia90
-rw-r--r--abs/core-testing/live-installer/templates/xorg/xorg.conf.via77
-rwxr-xr-xabs/core-testing/live-installer/templates/xorg/xorg.conf.vmware72
-rwxr-xr-xabs/core-testing/live-installer/timezip.py185
-rwxr-xr-xabs/core-testing/live-installer/xconfig.sh233
-rw-r--r--abs/core-testing/logrotate/PKGBUILD37
-rw-r--r--abs/core-testing/logrotate/logrotate.conf28
-rwxr-xr-xabs/core-testing/logrotate/logrotate.cron.daily3
-rw-r--r--abs/core-testing/lsof/PKGBUILD30
-rw-r--r--abs/core-testing/lsof/license.txt27
-rw-r--r--abs/core-testing/lvm2/PKGBUILD35
-rw-r--r--abs/core-testing/lvm2/lvm2_hook16
-rw-r--r--abs/core-testing/lvm2/lvm2_install19
-rw-r--r--abs/core-testing/lzo2/PKGBUILD22
-rw-r--r--abs/core-testing/lzop/PKGBUILD21
-rw-r--r--abs/core-testing/madwifi-utils/PKGBUILD35
-rw-r--r--abs/core-testing/madwifi/PKGBUILD38
-rw-r--r--abs/core-testing/madwifi/kernel-2.6.19.patch383
-rw-r--r--abs/core-testing/madwifi/kernel-2.6.20.patch73
-rw-r--r--abs/core-testing/madwifi/madwifi-ng.install23
-rw-r--r--abs/core-testing/mailx/PKGBUILD24
-rw-r--r--abs/core-testing/mailx/mailx-8.1.1.patch32
-rw-r--r--abs/core-testing/mailx/mailx-gcc4.patch12
-rw-r--r--abs/core-testing/man-pages/PKGBUILD41
-rw-r--r--abs/core-testing/man/PKGBUILD31
-rw-r--r--abs/core-testing/man/man-troff.patch16
-rwxr-xr-xabs/core-testing/man/whatis.cron.daily9
-rw-r--r--abs/core-testing/mcpp/PKGBUILD27
-rw-r--r--abs/core-testing/mcpp/mcpp-2.6.4-patch22
-rw-r--r--abs/core-testing/mdadm/PKGBUILD34
-rwxr-xr-xabs/core-testing/mdadm/mdadm37
-rw-r--r--abs/core-testing/mdadm/mdadm-2.2-segfault.patch12
-rw-r--r--abs/core-testing/mdadm/mdadm.conf64
-rw-r--r--abs/core-testing/mdadm/raid-partitions_hook21
-rw-r--r--abs/core-testing/mdadm/raid-partitions_install32
-rw-r--r--abs/core-testing/mesa/PKGBUILD63
-rw-r--r--abs/core-testing/mesa/mesa-6.5-apps-noglut.patch17
-rw-r--r--abs/core-testing/mkinitcpio/PKGBUILD27
-rw-r--r--abs/core-testing/mlocate/PKGBUILD47
-rw-r--r--abs/core-testing/mlocate/mlocate.db0
-rw-r--r--abs/core-testing/mlocate/mlocate.install27
-rw-r--r--abs/core-testing/mlocate/updatedb.conf5
-rwxr-xr-xabs/core-testing/mlocate/updatedb.cron.daily10
-rw-r--r--abs/core-testing/module-init-tools/PKGBUILD33
-rw-r--r--abs/core-testing/module-init-tools/fix-modprobe-ignore-path.patch14
-rw-r--r--abs/core-testing/module-init-tools/makefile.patch22
-rw-r--r--abs/core-testing/module-init-tools/modprobe.conf3
-rw-r--r--abs/core-testing/module-init-tools/modutils-gcc4.patch280
-rw-r--r--abs/core-testing/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch286
-rw-r--r--abs/core-testing/mplayer/PKGBUILD67
-rw-r--r--abs/core-testing/mplayer/demux_audio_fix_20080129.diff11
-rw-r--r--abs/core-testing/mplayer/demux_mov_fix_20080129.diff45
-rw-r--r--abs/core-testing/mplayer/ivtv_2.6.24.patch33
-rw-r--r--abs/core-testing/mplayer/stream_cddb_fix_20080120.diff32
-rw-r--r--abs/core-testing/mplayer/url_fix_20080120.diff10
-rw-r--r--abs/core-testing/mtools/PKGBUILD23
-rw-r--r--abs/core-testing/mysql-clients/PKGBUILD36
-rw-r--r--abs/core-testing/mysql-python/PKGBUILD18
-rw-r--r--abs/core-testing/mysql/PKGBUILD54
-rw-r--r--abs/core-testing/mysql/my.cnf149
-rw-r--r--abs/core-testing/mysql/mysql-no-clients.patch65
-rwxr-xr-xabs/core-testing/mysql/mysqld87
-rw-r--r--abs/core-testing/mysql/mysqld.conf.d1
-rw-r--r--abs/core-testing/mythtv/stable/mytharchive/PKGBUILD35
-rw-r--r--abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD33
-rw-r--r--abs/core-testing/mythtv/stable/mythcontrols/PKGBUILD32
-rwxr-xr-xabs/core-testing/mythtv/stable/mythdb-initial/PKGBUILD21
-rw-r--r--abs/core-testing/mythtv/stable/mythdb-initial/mc.sql2797
-rwxr-xr-xabs/core-testing/mythtv/stable/mythdb-initial/mythdb.install31
-rwxr-xr-xabs/core-testing/mythtv/stable/mythdb-initial/permissions.sql11
-rw-r--r--abs/core-testing/mythtv/stable/mythflix/PKGBUILD31
-rw-r--r--abs/core-testing/mythtv/stable/mythgallery/PKGBUILD32
-rw-r--r--abs/core-testing/mythtv/stable/mythgame/PKGBUILD31
-rw-r--r--abs/core-testing/mythtv/stable/mythmusic/PKGBUILD33
-rw-r--r--abs/core-testing/mythtv/stable/mythmusic/music_flac.patch293
-rw-r--r--abs/core-testing/mythtv/stable/mythmusic/mythmusic-0.21.patch22
-rw-r--r--abs/core-testing/mythtv/stable/mythnews/PKGBUILD31
-rw-r--r--abs/core-testing/mythtv/stable/mythphone/PKGBUILD32
-rw-r--r--abs/core-testing/mythtv/stable/myththemes/PKGBUILD32
-rw-r--r--abs/core-testing/mythtv/stable/mythtv/PKGBUILD70
-rw-r--r--abs/core-testing/mythtv/stable/mythtv/QUICKSTART.archlinux69
-rwxr-xr-xabs/core-testing/mythtv/stable/mythtv/mythbackend38
-rw-r--r--abs/core-testing/mythtv/stable/mythtv/mythtv.install13
-rw-r--r--abs/core-testing/mythtv/stable/mythvideo/PKGBUILD36
-rw-r--r--abs/core-testing/mythtv/stable/mythvideo/mtd36
-rw-r--r--abs/core-testing/mythtv/stable/mythweather/PKGBUILD32
-rw-r--r--abs/core-testing/mythtv/stable/mythweb/PKGBUILD27
-rw-r--r--abs/core-testing/mythtv/stable/mythweb/mythweb.install10
-rw-r--r--abs/core-testing/nano/PKGBUILD25
-rw-r--r--abs/core-testing/nano/nano.install20
-rw-r--r--abs/core-testing/ncurses/PKGBUILD75
-rw-r--r--abs/core-testing/ncurses/ncurses.install9
-rw-r--r--abs/core-testing/ndiswrapper-utils/PKGBUILD22
-rw-r--r--abs/core-testing/ndiswrapper/PKGBUILD29
-rw-r--r--abs/core-testing/ndiswrapper/ndiswrapper.install28
-rw-r--r--abs/core-testing/net-tools/PKGBUILD36
-rw-r--r--abs/core-testing/net-tools/gcc340.patch46
-rw-r--r--abs/core-testing/net-tools/net-tools-1.60-2.6-compilefix.patch23
-rw-r--r--abs/core-testing/net-tools/net-tools-1.60-miiioctl.patch17
-rw-r--r--abs/core-testing/net-tools/net-tools-1.60-nameif.patch58
-rw-r--r--abs/core-testing/net-tools/net-tools-1.60-nameif_strncpy.patch13
-rw-r--r--abs/core-testing/net-tools/net-tools.patch52
-rw-r--r--abs/core-testing/net-tools/nisdomainname.conf.d3
-rw-r--r--abs/core-testing/netcfg/PKGBUILD25
-rw-r--r--abs/core-testing/ntfsprogs/PKGBUILD26
-rw-r--r--abs/core-testing/ntfsprogs/ntfsprogs.install24
-rw-r--r--abs/core-testing/nuvexport/PKGBUILD31
-rw-r--r--abs/core-testing/nuvexport/nuvexport-ipod-disable.patch12
-rw-r--r--abs/core-testing/openexr/PKGBUILD24
-rw-r--r--abs/core-testing/openexr/gcc43.patch21
-rw-r--r--abs/core-testing/openexr/openexr-gcc4.patch11
-rw-r--r--abs/core-testing/openssh/PKGBUILD61
-rwxr-xr-xabs/core-testing/openssh/sshd40
-rw-r--r--abs/core-testing/openssh/sshd.confd4
-rw-r--r--abs/core-testing/openssh/sshd.pam10
-rw-r--r--abs/core-testing/openssl/PKGBUILD28
-rw-r--r--abs/core-testing/pacman/PKGBUILD46
-rw-r--r--abs/core-testing/pacman/mirrorlist101
-rw-r--r--abs/core-testing/pacman/pacman.conf76
-rw-r--r--abs/core-testing/pacman/pacman.install56
-rw-r--r--abs/core-testing/pam/PKGBUILD50
-rw-r--r--abs/core-testing/pam/other5
-rw-r--r--abs/core-testing/pam/pam.install22
-rw-r--r--abs/core-testing/pango/PKGBUILD24
-rw-r--r--abs/core-testing/pango/pango.install26
-rw-r--r--abs/core-testing/parted/PKGBUILD24
-rw-r--r--abs/core-testing/parted/parted-1.7.1-fix-seg.patch13
-rw-r--r--abs/core-testing/pciutils/PKGBUILD29
-rw-r--r--abs/core-testing/pcmciautils/PKGBUILD34
-rw-r--r--abs/core-testing/pcre/ChangeLog10
-rw-r--r--abs/core-testing/pcre/PKGBUILD32
-rw-r--r--abs/core-testing/pcre/libpcre-7.7-buffer-overflow.patch16
-rw-r--r--abs/core-testing/perl/PKGBUILD102
-rw-r--r--abs/core-testing/perl/archlinux-cpan-installdir.patch17
-rw-r--r--abs/core-testing/perl/archlinux-inc-order.patch101
-rw-r--r--abs/core-testing/perl/perl-5.10.0-archlinux-cpan-installdir.patch11
-rw-r--r--abs/core-testing/perl/perl-5.10.0-archlinux-inc-order.patch101
-rw-r--r--abs/core-testing/perl/perl-5.8.6-picdl.patch013
-rw-r--r--abs/core-testing/perl/perl-5.8.8-gcc-4.2.0.patch10
-rw-r--r--abs/core-testing/perl/perl-5.8.8-utf-regexes.patch59
-rw-r--r--abs/core-testing/perl/perl.install54
-rwxr-xr-xabs/core-testing/perl/perlbin.sh2
-rw-r--r--abs/core-testing/perl_modules/perl-archive-zip/PKGBUILD28
-rw-r--r--abs/core-testing/perl_modules/perl-class-methodmaker/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-crypt-ssleay/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-date-manip/PKGBUILD28
-rw-r--r--abs/core-testing/perl_modules/perl-dbd-mysql/PKGBUILD29
-rw-r--r--abs/core-testing/perl_modules/perl-dbi/PKGBUILD28
-rw-r--r--abs/core-testing/perl_modules/perl-fcgi/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-file-slurp/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-html-parser/PKGBUILD31
-rw-r--r--abs/core-testing/perl_modules/perl-html-tagset/PKGBUILD31
-rw-r--r--abs/core-testing/perl_modules/perl-html-tree/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-http-cache-transparent/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-io-socket-ssl/PKGBUILD31
-rw-r--r--abs/core-testing/perl_modules/perl-io-stringy/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-libwww/PKGBUILD32
-rw-r--r--abs/core-testing/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-lingua-en-numbers/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-lingua-preferred/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-mailtools/PKGBUILD29
-rw-r--r--abs/core-testing/perl_modules/perl-mime-lite/PKGBUILD29
-rw-r--r--abs/core-testing/perl_modules/perl-mime-tools/ChangeLog4
-rw-r--r--abs/core-testing/perl_modules/perl-mime-tools/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-mime-types/PKGBUILD29
-rw-r--r--abs/core-testing/perl_modules/perl-net-ssleay/PKGBUILD33
-rw-r--r--abs/core-testing/perl_modules/perl-soap-lite/PKGBUILD24
-rw-r--r--abs/core-testing/perl_modules/perl-term-progressbar/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-term-readkey/PKGBUILD28
-rw-r--r--abs/core-testing/perl_modules/perl-text-bidi/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-text-iconv/PKGBUILD25
-rw-r--r--abs/core-testing/perl_modules/perl-text-kakasi/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-timedate/PKGBUILD32
-rw-r--r--abs/core-testing/perl_modules/perl-tk-tablematrix/PKGBUILD25
-rw-r--r--abs/core-testing/perl_modules/perl-tk/PKGBUILD45
-rw-r--r--abs/core-testing/perl_modules/perl-unicode-string/PKGBUILD28
-rw-r--r--abs/core-testing/perl_modules/perl-unicode-utf8simple/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-uri/PKGBUILD31
-rw-r--r--abs/core-testing/perl_modules/perl-www-mechanize/PKGBUILD24
-rw-r--r--abs/core-testing/perl_modules/perl-xml-libxml-common/ChangeLog5
-rw-r--r--abs/core-testing/perl_modules/perl-xml-libxml-common/PKGBUILD25
-rw-r--r--abs/core-testing/perl_modules/perl-xml-libxml/PKGBUILD26
-rw-r--r--abs/core-testing/perl_modules/perl-xml-libxml/perl-xml-libxml.install19
-rw-r--r--abs/core-testing/perl_modules/perl-xml-namespacesupport/PKGBUILD23
-rw-r--r--abs/core-testing/perl_modules/perl-xml-sax/PKGBUILD26
-rw-r--r--abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.install15
-rw-r--r--abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.patch45
-rw-r--r--abs/core-testing/perl_modules/perl-xml-simple/PKGBUILD26
-rw-r--r--abs/core-testing/perl_modules/perl-xml-twig/PKGBUILD26
-rw-r--r--abs/core-testing/perl_modules/perl-xml-writer/PKGBUILD23
-rw-r--r--abs/core-testing/perlxml/PKGBUILD29
-rw-r--r--abs/core-testing/php/PKGBUILD174
-rw-r--r--abs/core-testing/php/apache.conf9
-rw-r--r--abs/core-testing/php/db-configure.patch51
-rw-r--r--abs/core-testing/php/php.ini1304
-rw-r--r--abs/core-testing/php/php.install97
-rw-r--r--abs/core-testing/pil/PKGBUILD26
-rw-r--r--abs/core-testing/pixman/PKGBUILD20
-rw-r--r--abs/core-testing/pkgconfig/PKGBUILD22
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/all-wcprops29
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/entries95
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/format1
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base5
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base5
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base5
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base5
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base31
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base31
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base460
-rw-r--r--abs/core-testing/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base76
-rwxr-xr-xabs/core-testing/plextor-convertX-driver/PKGBUILD30
-rwxr-xr-xabs/core-testing/plextor-convertX-driver/convertX.install31
-rw-r--r--abs/core-testing/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff26
-rw-r--r--abs/core-testing/pm-utils/11netcfg26
-rw-r--r--abs/core-testing/pm-utils/PKGBUILD29
-rw-r--r--abs/core-testing/pm-utils/pm-utils.install15
-rw-r--r--abs/core-testing/pm-utils/service.patch15
-rw-r--r--abs/core-testing/popt/PKGBUILD33
-rw-r--r--abs/core-testing/ppp/PKGBUILD47
-rw-r--r--abs/core-testing/ppp/ip-down4
-rw-r--r--abs/core-testing/ppp/ip-up4
-rw-r--r--abs/core-testing/ppp/options352
-rw-r--r--abs/core-testing/ppp/plog7
-rw-r--r--abs/core-testing/ppp/poff103
-rw-r--r--abs/core-testing/ppp/pon32
-rw-r--r--abs/core-testing/ppp/pon.1121
-rw-r--r--abs/core-testing/ppp/ppp36
-rw-r--r--abs/core-testing/printproto/PKGBUILD22
-rw-r--r--abs/core-testing/procinfo/PKGBUILD22
-rw-r--r--abs/core-testing/procinfo/procinfo-19.2.patch325
-rw-r--r--abs/core-testing/procps/PKGBUILD24
-rw-r--r--abs/core-testing/procps/sysctl.conf13
-rw-r--r--abs/core-testing/psmisc/PKGBUILD25
-rw-r--r--abs/core-testing/pycairo/PKGBUILD21
-rw-r--r--abs/core-testing/pygobject/PKGBUILD21
-rw-r--r--abs/core-testing/pygtk/PKGBUILD24
-rw-r--r--abs/core-testing/python-numeric/PKGBUILD19
-rw-r--r--abs/core-testing/python-pexpect/PKGBUILD17
-rw-r--r--abs/core-testing/python/PKGBUILD69
-rw-r--r--abs/core-testing/python/Python-2.4.4-gdbm-1.patch17
-rw-r--r--abs/core-testing/python/Python-2.5.2-idlelib.patch17
-rw-r--r--abs/core-testing/python/db4.6-setup.py-detection.patch11
-rw-r--r--abs/core-testing/python/modulator-launcher2
-rw-r--r--abs/core-testing/python/pynche-launcher3
-rw-r--r--abs/core-testing/python/python-2.5.CVE-2007-4965-int-overflow.patch217
-rw-r--r--abs/core-testing/python/python.install13
-rw-r--r--abs/core-testing/python/python2.6-set_wakeup_fd4.patch94
-rw-r--r--abs/core-testing/qt3/PKGBUILD101
-rw-r--r--abs/core-testing/qt3/mysql.patch47
-rw-r--r--abs/core-testing/qt3/qt-copy-kde-patches.tar.bz2bin0 -> 31498 bytes
-rw-r--r--abs/core-testing/qt3/qt-font-default-subst.diff77
-rw-r--r--abs/core-testing/qt3/qt-patches.tar.bz2bin0 -> 3627 bytes
-rw-r--r--abs/core-testing/qt3/qt.install24
-rw-r--r--abs/core-testing/qt3/qt.profile4
-rw-r--r--abs/core-testing/qt3/utf8-bug-qt3.diff101
-rw-r--r--abs/core-testing/randrproto/PKGBUILD21
-rw-r--r--abs/core-testing/readline/PKGBUILD59
-rw-r--r--abs/core-testing/readline/inputrc40
-rw-r--r--abs/core-testing/readline/readline.install9
-rw-r--r--abs/core-testing/recordproto/PKGBUILD19
-rw-r--r--abs/core-testing/reiserfsprogs/PKGBUILD26
-rw-r--r--abs/core-testing/renderproto/PKGBUILD18
-rw-r--r--abs/core-testing/rp-pppoe/PKGBUILD25
-rwxr-xr-xabs/core-testing/rp-pppoe/adsl35
-rw-r--r--abs/core-testing/rt2500/PKGBUILD29
-rw-r--r--abs/core-testing/rt2500/kernel-2.6.22.patch24125
-rw-r--r--abs/core-testing/rt2500/kernel-2.6.24.patch20
-rw-r--r--abs/core-testing/rt2500/rt2500.install26
-rw-r--r--abs/core-testing/rt2x00-rt61-fw/PKGBUILD18
-rw-r--r--abs/core-testing/rt2x00-rt71w-fw/PKGBUILD17
-rw-r--r--abs/core-testing/run-parts/PKGBUILD22
-rwxr-xr-xabs/core-testing/runit/PKGBUILD69
-rwxr-xr-xabs/core-testing/runit/add_service.sh15
-rwxr-xr-xabs/core-testing/runit/halt.script16
-rwxr-xr-xabs/core-testing/runit/poweroff.script11
-rwxr-xr-xabs/core-testing/runit/reboot.script11
-rwxr-xr-xabs/core-testing/runit/remove_service.sh8
-rwxr-xr-xabs/core-testing/runit/runit.install57
-rwxr-xr-xabs/core-testing/runit/runitscripts/114
-rwxr-xr-xabs/core-testing/runit/runitscripts/28
-rwxr-xr-xabs/core-testing/runit/runitscripts/34
-rwxr-xr-xabs/core-testing/runit/runitscripts/ctrlaltdel9
-rwxr-xr-xabs/core-testing/runit/runitscripts/halt-runit2
-rwxr-xr-xabs/core-testing/runit/runitscripts/logger11
-rwxr-xr-xabs/core-testing/runit/runitscripts/reboot-runit2
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/Xvfb/finish12
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/Xvfb/run5
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/acpid/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/alsa-utils/finish3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/alsa-utils/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/apache/run2
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/avahi/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/cron/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/dbus/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/dnsmasq/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/evrouter/finish4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/evrouter/run5
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/frontend/finish30
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/frontend/log/run5
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/frontend/run10
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/gpm/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/hal/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/hobbit-client/run68
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/hobbit/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/lcdd/run9
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/lighttpd/run2
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/lircd/finish12
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/lircd/run39
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/mysql/run29
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/mythbackend/log/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/mythbackend/run25
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/ncid/run5
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/ncidd/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/netfs/finish3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/netfs/run5
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/nfsd/run22
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/nfslock/run4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/nmbd/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/ntpd/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/oss/finish4
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/oss/run6
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/portmap/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/smbd/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/sshd/run8
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/syslog-ng/run3
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/tty2/run2
-rwxr-xr-xabs/core-testing/runit/runitscripts/services/tty3/run2
-rw-r--r--abs/core-testing/scrnsaverproto/PKGBUILD21
-rw-r--r--abs/core-testing/sdl/PKGBUILD21
-rw-r--r--abs/core-testing/sdparm/PKGBUILD22
-rw-r--r--abs/core-testing/sed/PKGBUILD21
-rw-r--r--abs/core-testing/sg3_utils/PKGBUILD18
-rw-r--r--abs/core-testing/shadow/PKGBUILD88
-rw-r--r--abs/core-testing/shadow/adduser399
-rw-r--r--abs/core-testing/shadow/chage6
-rw-r--r--abs/core-testing/shadow/chsh6
-rw-r--r--abs/core-testing/shadow/login18
-rw-r--r--abs/core-testing/shadow/login.defs212
-rw-r--r--abs/core-testing/shadow/passwd4
-rw-r--r--abs/core-testing/shadow/shadow6
-rw-r--r--abs/core-testing/shadow/shadow-4.0.18.2-useradd-fix-1.patch26
-rw-r--r--abs/core-testing/shadow/shadow-UID_GID.patch34
-rwxr-xr-xabs/core-testing/shadow/shadow.cron.daily6
-rw-r--r--abs/core-testing/shadow/shadow.install11
-rw-r--r--abs/core-testing/shadow/useradd6
-rw-r--r--abs/core-testing/shadow/useradd-default.patch14
-rw-r--r--abs/core-testing/shadow/xstrdup.patch9
-rw-r--r--abs/core-testing/smbclient/PKGBUILD58
-rw-r--r--abs/core-testing/smbclient/heimdal.patch33
-rw-r--r--abs/core-testing/squashfs-tools/PKGBUILD24
-rw-r--r--abs/core-testing/sudo/PKGBUILD33
-rw-r--r--abs/core-testing/sudo/sudo.pam3
-rw-r--r--abs/core-testing/sysfsutils/PKGBUILD31
-rw-r--r--abs/core-testing/syslinux/PKGBUILD25
-rw-r--r--abs/core-testing/syslog-ng/PKGBUILD31
-rwxr-xr-xabs/core-testing/syslog-ng/syslog-ng39
-rw-r--r--abs/core-testing/syslog-ng/syslog-ng.conf91
-rw-r--r--abs/core-testing/syslog-ng/syslog-ng.logrotate7
-rw-r--r--abs/core-testing/sysvinit/PKGBUILD26
-rw-r--r--abs/core-testing/sysvinit/halt-init.patch17
-rw-r--r--abs/core-testing/taglib/PKGBUILD29
-rw-r--r--abs/core-testing/tar/PKGBUILD22
-rw-r--r--abs/core-testing/tar/tar.1376
-rw-r--r--abs/core-testing/tcl/ChangeLog10
-rw-r--r--abs/core-testing/tcl/PKGBUILD41
-rw-r--r--abs/core-testing/tcp_wrappers/PKGBUILD35
-rw-r--r--abs/core-testing/tcp_wrappers/gcc340.patch11
-rw-r--r--abs/core-testing/tcp_wrappers/hosts.allow5
-rw-r--r--abs/core-testing/tcp_wrappers/hosts.deny7
-rw-r--r--abs/core-testing/tcp_wrappers/safe_finger.834
-rw-r--r--abs/core-testing/tcp_wrappers/shared_lib_plus_plus-1.patch1025
-rw-r--r--abs/core-testing/tcp_wrappers/try-from.828
-rw-r--r--abs/core-testing/tiacx-firmware/PKGBUILD20
-rw-r--r--abs/core-testing/tiacx-firmware/tiacx-firmware.install22
-rw-r--r--abs/core-testing/tiacx/PKGBUILD23
-rw-r--r--abs/core-testing/tiacx/acx.install23
-rw-r--r--abs/core-testing/tk/ChangeLog16
-rw-r--r--abs/core-testing/tk/PKGBUILD37
-rw-r--r--abs/core-testing/trapproto/PKGBUILD19
-rw-r--r--abs/core-testing/ttf-dejavu/ChangeLog9
-rw-r--r--abs/core-testing/ttf-dejavu/PKGBUILD25
-rw-r--r--abs/core-testing/ttf-dejavu/ttf-dejavu.install13
-rw-r--r--abs/core-testing/tzdata/Makefile.patch140
-rw-r--r--abs/core-testing/tzdata/PKGBUILD36
-rw-r--r--abs/core-testing/tzdata/chile.patch65
-rw-r--r--abs/core-testing/udev/00-load-blacklist.rules1
-rw-r--r--abs/core-testing/udev/51-arch.rules191
-rw-r--r--abs/core-testing/udev/PKGBUILD82
-rw-r--r--abs/core-testing/udev/arch-udev-rules.patch151
-rw-r--r--abs/core-testing/udev/cdrom-rules.patch8
-rwxr-xr-xabs/core-testing/udev/cdsymlinks.sh45
-rwxr-xr-xabs/core-testing/udev/load-modules.sh60
-rw-r--r--abs/core-testing/udev/migrate-udev29
-rwxr-xr-xabs/core-testing/udev/mod-blacklist.sh47
-rw-r--r--abs/core-testing/udev/readme-udev-arch.txt264
-rwxr-xr-xabs/core-testing/udev/root-link.sh7
-rwxr-xr-xabs/core-testing/udev/start_udev137
-rw-r--r--abs/core-testing/udev/udev.install22
-rw-r--r--abs/core-testing/udev/udev.rules456
-rw-r--r--abs/core-testing/udev/usb_id-fix.patch107
-rw-r--r--abs/core-testing/unichrome-dri/PKGBUILD40
-rw-r--r--abs/core-testing/unison/PKGBUILD28
-rw-r--r--abs/core-testing/unison/ocaml-3.08-extnames.patch14
-rw-r--r--abs/core-testing/unison/unison.desktop13
-rw-r--r--abs/core-testing/unison/unison.install32
-rw-r--r--abs/core-testing/usbutils/PKGBUILD25
-rw-r--r--abs/core-testing/util-linux-ng/PKGBUILD38
-rw-r--r--abs/core-testing/util-linux-ng/util-linux-ng-2.14-20080624.diff6826
-rw-r--r--abs/core-testing/v4l-dvb/PKGBUILD24
-rw-r--r--abs/core-testing/v4l-dvb/v4l-dvb.install23
-rw-r--r--abs/core-testing/vbetool/PKGBUILD32
-rw-r--r--abs/core-testing/vi/PKGBUILD62
-rw-r--r--abs/core-testing/vi/fetch_patches.sh63
-rw-r--r--abs/core-testing/vi/fetch_runtime.sh117
-rw-r--r--abs/core-testing/vi/vi.install37
-rw-r--r--abs/core-testing/videoproto/PKGBUILD19
-rw-r--r--abs/core-testing/wget/PKGBUILD21
-rw-r--r--abs/core-testing/which/PKGBUILD20
-rw-r--r--abs/core-testing/wlan-ng26-utils/PKGBUILD32
-rw-r--r--abs/core-testing/wlan-ng26-utils/kernel-2.6.22-r1832.patch120
-rw-r--r--abs/core-testing/wlan-ng26-utils/kernel-2.6.26.patch14
-rw-r--r--abs/core-testing/wlan-ng26-utils/wlan68
-rw-r--r--abs/core-testing/wlan-ng26-utils/wlan-ng.patch14
-rw-r--r--abs/core-testing/wlan-ng26/PKGBUILD35
-rw-r--r--abs/core-testing/wlan-ng26/kernel-2.6.26.patch14
-rw-r--r--abs/core-testing/wlan-ng26/wlan-ng26.install30
-rw-r--r--abs/core-testing/wpa_supplicant/PKGBUILD36
-rw-r--r--abs/core-testing/wpa_supplicant/config308
-rw-r--r--abs/core-testing/wpa_supplicant/wpa_supplicant.install15
-rw-r--r--abs/core-testing/x264/PKGBUILD35
-rw-r--r--abs/core-testing/xbitmaps/PKGBUILD22
-rw-r--r--abs/core-testing/xcb-proto/PKGBUILD21
-rw-r--r--abs/core-testing/xcursor-themes/PKGBUILD20
-rw-r--r--abs/core-testing/xextproto/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-input-acecad/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-input-aiptek/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-calcomp/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-citron/PKGBUILD24
-rw-r--r--abs/core-testing/xf86-input-digitaledge/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-dmc/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-dynapro/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-elo2300/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-input-elographics/PKGBUILD26
-rw-r--r--abs/core-testing/xf86-input-evdev/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-input-fpit/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-hyperpen/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-jamstudio/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-joystick/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-keyboard/PKGBUILD25
-rw-r--r--abs/core-testing/xf86-input-keyboard/new-server.patch5087
-rw-r--r--abs/core-testing/xf86-input-magellan/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-magictouch/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-microtouch/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-mouse/PKGBUILD25
-rw-r--r--abs/core-testing/xf86-input-mutouch/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-palmax/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-penmount/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-spaceorb/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-summa/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-tek4957/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-ur98/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-vmmouse/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-input-void/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-amd/PKGBUILD27
-rw-r--r--abs/core-testing/xf86-video-apm/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-ark/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-ati/PKGBUILD51
-rw-r--r--abs/core-testing/xf86-video-chips/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-cirrus/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-dummy/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-fbdev/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-glint/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-i128/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-i740/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-imstt/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-intel/PKGBUILD25
-rw-r--r--abs/core-testing/xf86-video-mga/PKGBUILD49
-rw-r--r--abs/core-testing/xf86-video-neomagic/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-nv/PKGBUILD26
-rw-r--r--abs/core-testing/xf86-video-radeonhd/PKGBUILD26
-rw-r--r--abs/core-testing/xf86-video-rendition/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-s3/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-s3virge/PKGBUILD49
-rw-r--r--abs/core-testing/xf86-video-savage/PKGBUILD49
-rw-r--r--abs/core-testing/xf86-video-siliconmotion/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-sis/PKGBUILD48
-rw-r--r--abs/core-testing/xf86-video-sisusb/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-tdfx/PKGBUILD49
-rw-r--r--abs/core-testing/xf86-video-trident/PKGBUILD49
-rw-r--r--abs/core-testing/xf86-video-tseng/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-unichrome/PKGBUILD26
-rw-r--r--abs/core-testing/xf86-video-unichrome/fix-defines.patch68
-rw-r--r--abs/core-testing/xf86-video-v4l/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-vesa/COPYING24
-rw-r--r--abs/core-testing/xf86-video-vesa/PKGBUILD27
-rw-r--r--abs/core-testing/xf86-video-vga/PKGBUILD23
-rw-r--r--abs/core-testing/xf86-video-vmware/PKGBUILD22
-rw-r--r--abs/core-testing/xf86-video-voodoo/PKGBUILD23
-rw-r--r--abs/core-testing/xf86dgaproto/PKGBUILD18
-rw-r--r--abs/core-testing/xf86miscproto/PKGBUILD19
-rw-r--r--abs/core-testing/xf86vidmodeproto/PKGBUILD19
-rw-r--r--abs/core-testing/xfsprogs/PKGBUILD28
-rw-r--r--abs/core-testing/xineramaproto/PKGBUILD19
-rw-r--r--abs/core-testing/xkeyboard-config/PKGBUILD30
-rwxr-xr-xabs/core-testing/xmltv/PKGBUILD29
-rw-r--r--abs/core-testing/xorg-apps/PKGBUILD78
-rw-r--r--abs/core-testing/xorg-font-utils/PKGBUILD54
-rw-r--r--abs/core-testing/xorg-font-utils/ttmkfdir.patch86
-rw-r--r--abs/core-testing/xorg-font-utils/ttmkfdir_gcc43.patch8
-rw-r--r--abs/core-testing/xorg-font-utils/xorg-font-utils.install8
-rw-r--r--abs/core-testing/xorg-fonts-100dpi/PKGBUILD35
-rw-r--r--abs/core-testing/xorg-fonts-100dpi/xfonts.install20
-rw-r--r--abs/core-testing/xorg-fonts-75dpi/PKGBUILD35
-rw-r--r--abs/core-testing/xorg-fonts-75dpi/xfonts.install20
-rw-r--r--abs/core-testing/xorg-fonts-alias/PKGBUILD22
-rw-r--r--abs/core-testing/xorg-fonts-encodings/PKGBUILD21
-rw-r--r--abs/core-testing/xorg-fonts-encodings/xorg-fonts-encodings.install16
-rw-r--r--abs/core-testing/xorg-fonts-misc/PKGBUILD45
-rw-r--r--abs/core-testing/xorg-fonts-misc/xfonts.install20
-rw-r--r--abs/core-testing/xorg-res-utils/PKGBUILD31
-rw-r--r--abs/core-testing/xorg-server-utils/PKGBUILD75
-rw-r--r--abs/core-testing/xorg-server/PKGBUILD92
-rw-r--r--abs/core-testing/xorg-server/xorg-server.install12
-rw-r--r--abs/core-testing/xorg-utils/PKGBUILD47
-rw-r--r--abs/core-testing/xorg-xauth/PKGBUILD23
-rw-r--r--abs/core-testing/xorg-xinit/PKGBUILD39
-rw-r--r--abs/core-testing/xorg-xinit/xinitrc18
-rw-r--r--abs/core-testing/xorg-xinit/xserverrc1
-rw-r--r--abs/core-testing/xorg-xinit/xsession10
-rw-r--r--abs/core-testing/xorg-xkb-utils/PKGBUILD34
-rw-r--r--abs/core-testing/xproto/PKGBUILD22
-rw-r--r--abs/core-testing/xterm/PKGBUILD43
-rw-r--r--abs/core-testing/xtrans/PKGBUILD21
-rw-r--r--abs/core-testing/xvidcore/PKGBUILD28
-rw-r--r--abs/core-testing/zd1211-firmware/PKGBUILD22
-rw-r--r--abs/core-testing/zlib/PKGBUILD25
-rw-r--r--abs/core/a52dec/PKGBUILD26
-rw-r--r--abs/core/a52dec/a52dec-0.7.4-build.patch27
-rw-r--r--abs/core/aalib/PKGBUILD24
-rw-r--r--abs/core/aalib/aclocal-fixes.patch11
-rw-r--r--abs/core/acl/PKGBUILD35
-rw-r--r--abs/core/alsa-lib/PKGBUILD23
-rw-r--r--abs/core/alsa-lib/python2.5.patch11
-rw-r--r--abs/core/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch242
-rw-r--r--abs/core/alsa-oss/PKGBUILD20
-rw-r--r--abs/core/alsa-utils/PKGBUILD27
-rwxr-xr-xabs/core/alsa-utils/alsa48
-rw-r--r--abs/core/alsa-utils/alsa.conf.d4
-rw-r--r--abs/core/alsa-utils/alsaconf.patch21
-rw-r--r--abs/core/apache/PKGBUILD81
-rw-r--r--abs/core/apache/arch.layout22
-rwxr-xr-xabs/core/apache/httpd40
-rw-r--r--abs/core/apache/httpd.install16
-rw-r--r--abs/core/apache/httpd.logrotate5
-rw-r--r--abs/core/apr-util/PKGBUILD24
-rw-r--r--abs/core/apr/PKGBUILD25
-rw-r--r--abs/core/aspell/PKGBUILD24
-rw-r--r--abs/core/aspell/aspell.install8
-rw-r--r--abs/core/atk/PKGBUILD21
-rw-r--r--abs/core/attr/PKGBUILD37
-rw-r--r--abs/core/aufs-utils/PKGBUILD40
-rw-r--r--abs/core/aufs/PKGBUILD57
-rw-r--r--abs/core/aufs/aufs.install31
-rw-r--r--abs/core/b43-fwcutter/PKGBUILD21
-rwxr-xr-xabs/core/base.list98
-rw-r--r--abs/core/bash/PKGBUILD87
-rw-r--r--abs/core/bash/bash-noinfo.patch12
-rw-r--r--abs/core/bash/bashrc3
-rw-r--r--abs/core/bash/profile35
-rw-r--r--abs/core/bash/profile.bash25
-rw-r--r--abs/core/bc/PKGBUILD24
-rw-r--r--abs/core/bc/build-fix.patch13
-rw-r--r--abs/core/bigreqsproto/PKGBUILD20
-rw-r--r--abs/core/binutils/PKGBUILD67
-rw-r--r--abs/core/bzip2/PKGBUILD47
-rw-r--r--abs/core/ca-certificates/PKGBUILD33
-rw-r--r--abs/core/ca-certificates/ca-certificates.install7
-rw-r--r--abs/core/cairo/PKGBUILD23
-rw-r--r--abs/core/cdparanoia/ChangeLog18
-rw-r--r--abs/core/cdparanoia/PKGBUILD22
-rw-r--r--abs/core/cdrdao/PKGBUILD21
-rw-r--r--abs/core/cdrdao/cdrdao-1.2.2-gcc43.patch73
-rw-r--r--abs/core/cdrdao/gcc4.patch23
-rw-r--r--abs/core/cdrkit/ChangeLog10
-rw-r--r--abs/core/cdrkit/PKGBUILD38
-rw-r--r--abs/core/compositeproto/PKGBUILD20
-rw-r--r--abs/core/coreutils/PKGBUILD62
-rw-r--r--abs/core/coreutils/coreutils-6.10-configuration.patch62
-rw-r--r--abs/core/coreutils/coreutils-i18n.patch4045
-rw-r--r--abs/core/coreutils/coreutils-pam.patch413
-rw-r--r--abs/core/coreutils/coreutils-uname.patch173
-rw-r--r--abs/core/coreutils/futimes.patch47
-rw-r--r--abs/core/coreutils/su9
-rw-r--r--abs/core/cpio/PKGBUILD25
-rw-r--r--abs/core/cpio/cpio-2.9-gcc43.patch31
-rw-r--r--abs/core/cracklib/PKGBUILD26
-rw-r--r--abs/core/cryptsetup/PKGBUILD39
-rw-r--r--abs/core/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch29
-rw-r--r--abs/core/cryptsetup/encrypt_hook122
-rw-r--r--abs/core/cryptsetup/encrypt_install22
-rw-r--r--abs/core/cryptsetup/luksOpen-status.patch13
-rw-r--r--abs/core/curl/ChangeLog19
-rw-r--r--abs/core/curl/PKGBUILD25
-rw-r--r--abs/core/damageproto/PKGBUILD19
-rw-r--r--abs/core/dash/PKGBUILD29
-rw-r--r--abs/core/db/PKGBUILD27
-rw-r--r--abs/core/db/db.install29
-rw-r--r--abs/core/db4.5/PKGBUILD41
-rw-r--r--abs/core/dbus-glib/PKGBUILD22
-rw-r--r--abs/core/dbus/PKGBUILD48
-rw-r--r--abs/core/dbus/dbus57
-rw-r--r--abs/core/dbus/dbus.install21
-rw-r--r--abs/core/dcron/PKGBUILD38
-rwxr-xr-xabs/core/dcron/crond37
-rw-r--r--abs/core/dcron/crond.logrotate5
-rw-r--r--abs/core/dcron/dcron-3.1.patch33
-rw-r--r--abs/core/dcron/root.crontab12
-rwxr-xr-xabs/core/dcron/run-cron14
-rw-r--r--abs/core/device-mapper/PKGBUILD30
-rw-r--r--abs/core/device-mapper/device-mapper.rules1
-rw-r--r--abs/core/dhcpcd/PKGBUILD27
-rw-r--r--abs/core/dhcpcd/dhcpcd.conf.d6
-rw-r--r--abs/core/dialog/PKGBUILD21
-rw-r--r--abs/core/dialog/timeout.patch11
-rw-r--r--abs/core/diffutils/PKGBUILD20
-rw-r--r--abs/core/dmapi/PKGBUILD31
-rw-r--r--abs/core/dmidecode/PKGBUILD20
-rw-r--r--abs/core/dmxproto/PKGBUILD19
-rw-r--r--abs/core/dnsutils/PKGBUILD31
-rw-r--r--abs/core/dnsutils/bind.so_bsdcompat.diff11
-rw-r--r--abs/core/dnsutils/tools-only.patch22
-rw-r--r--abs/core/dosfstools/PKGBUILD20
-rw-r--r--abs/core/dosfstools/linux-2.6.patch64
-rw-r--r--abs/core/dvd+rw-tools/PKGBUILD32
-rw-r--r--abs/core/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch22
-rw-r--r--abs/core/dvdauthor/PKGBUILD21
-rw-r--r--abs/core/e2fsprogs/Makefile-fsck.static.patch13
-rw-r--r--abs/core/e2fsprogs/PKGBUILD34
-rw-r--r--abs/core/e2fsprogs/mke2fs.conf26
-rw-r--r--abs/core/eject/PKGBUILD20
-rw-r--r--abs/core/eject/eject-2.1.5-handle-spaces.patch57
-rw-r--r--abs/core/etcnet/10-defaults6
-rwxr-xr-xabs/core/etcnet/PKGBUILD39
-rwxr-xr-xabs/core/etcnet/adddhcp.patch51
-rwxr-xr-xabs/core/etcnet/etcnet.install42
-rw-r--r--abs/core/etcnet/functions.patch12
-rwxr-xr-xabs/core/etcnet/ipv4address1
-rwxr-xr-xabs/core/etcnet/ipv4route1
-rw-r--r--abs/core/etcnet/network6
-rwxr-xr-xabs/core/etcnet/options62
-rw-r--r--abs/core/expat/PKGBUILD23
-rw-r--r--abs/core/expect/PKGBUILD35
-rw-r--r--abs/core/faac/PKGBUILD28
-rw-r--r--abs/core/faac/libmp4v2.patch11
-rw-r--r--abs/core/faac/pipe-output.patch18
-rw-r--r--abs/core/faad2/ChangeLog14
-rw-r--r--abs/core/faad2/LICENSE28
-rw-r--r--abs/core/faad2/PKGBUILD45
-rw-r--r--abs/core/faad2/faad2-2.6.1-abi_has_changed.patch14
-rw-r--r--abs/core/faad2/faad2-2.6.1-broken-pipe.patch22
-rw-r--r--abs/core/faad2/faad2-2.6.1-implicitdeclar.patch11
-rw-r--r--abs/core/faad2/faad2-2.6.1-libtool22.patch13
-rw-r--r--abs/core/feh/PKGBUILD17
-rw-r--r--abs/core/ffmpeg/PKGBUILD48
-rw-r--r--abs/core/fftw2/PKGBUILD34
-rw-r--r--abs/core/file/PKGBUILD23
-rw-r--r--abs/core/filesystem/PKGBUILD90
-rw-r--r--abs/core/filesystem/crypttab33
-rw-r--r--abs/core/filesystem/filesystem.install60
-rw-r--r--abs/core/filesystem/fstab11
-rw-r--r--abs/core/filesystem/group28
-rw-r--r--abs/core/filesystem/gshadow27
-rw-r--r--abs/core/filesystem/host.conf8
-rw-r--r--abs/core/filesystem/hosts8
-rw-r--r--abs/core/filesystem/issue3
-rw-r--r--abs/core/filesystem/ld.so.conf5
-rw-r--r--abs/core/filesystem/motd0
-rw-r--r--abs/core/filesystem/nsswitch.conf19
-rw-r--r--abs/core/filesystem/passwd7
-rw-r--r--abs/core/filesystem/profile57
-rw-r--r--abs/core/filesystem/protocols57
-rw-r--r--abs/core/filesystem/resolv.conf8
-rw-r--r--abs/core/filesystem/securetty13
-rw-r--r--abs/core/filesystem/services557
-rw-r--r--abs/core/filesystem/shadow7
-rw-r--r--abs/core/filesystem/shells9
-rw-r--r--abs/core/findutils/PKGBUILD30
-rw-r--r--abs/core/fixesproto/PKGBUILD20
-rw-r--r--abs/core/flac/PKGBUILD32
-rw-r--r--abs/core/flac/flac-1.2.1-gcc43.patch10
-rw-r--r--abs/core/flac/flac-linking.diff12
-rw-r--r--abs/core/flac/xmms-plugin.patch11
-rw-r--r--abs/core/fltk/PKGBUILD23
-rw-r--r--abs/core/fluxbox/PKGBUILD38
-rw-r--r--abs/core/fluxbox/fluxbox-1.0.0-gcc43.patch10
-rw-r--r--abs/core/fluxbox/fluxbox.desktop6
-rw-r--r--abs/core/fontcacheproto/PKGBUILD19
-rw-r--r--abs/core/fontconfig/29-replace-bitmap-fonts.conf37
-rw-r--r--abs/core/fontconfig/PKGBUILD32
-rw-r--r--abs/core/fontconfig/fontconfig.install100
-rw-r--r--abs/core/fontsproto/PKGBUILD19
-rw-r--r--abs/core/freeglut/PKGBUILD30
-rw-r--r--abs/core/freeglut/glut-cursor-inherit.patch23
-rw-r--r--abs/core/freetype2/PKGBUILD33
-rw-r--r--abs/core/freetype2/bytecode.patch29
-rw-r--r--abs/core/freetype2/freetype-2.2.1-enable-valid.patch20
-rw-r--r--abs/core/freetype2/freetype-2.2.1-memcpy-fix.patch14
-rw-r--r--abs/core/freetype2/freetype-2.3.0-enable-spr.patch11
-rw-r--r--abs/core/freetype2/freetype-2.3.3-ftbitmap.patch25
-rw-r--r--abs/core/freetype2/freetype2.install23
-rw-r--r--abs/core/fribidi/ChangeLog5
-rw-r--r--abs/core/fribidi/PKGBUILD23
-rw-r--r--abs/core/fuse/PKGBUILD38
-rw-r--r--abs/core/fuse/fuse.install14
-rwxr-xr-xabs/core/fuse/fuse.rc.d49
-rw-r--r--abs/core/fxload/PKGBUILD20
-rw-r--r--abs/core/gawk/PKGBUILD31
-rw-r--r--abs/core/gawk/gawk-3.1.5-segfault_fix-1.patch43
-rw-r--r--abs/core/gcc-libs/PKGBUILD65
-rw-r--r--abs/core/gcc-libs/gcc-hash-style-both.patch163
-rw-r--r--abs/core/gcc-libs/gcc_pure64.patch26
-rw-r--r--abs/core/gdbm/PKGBUILD24
-rw-r--r--abs/core/gen-init-cpio/Makefile42
-rw-r--r--abs/core/gen-init-cpio/PKGBUILD21
-rw-r--r--abs/core/gen-init-cpio/gen_init_cpio.c514
-rw-r--r--abs/core/gettext/PKGBUILD22
-rw-r--r--abs/core/ghostscript/PKGBUILD50
-rw-r--r--abs/core/ghostscript/ghostscript-fPIC.patch31
-rw-r--r--abs/core/ghostscript/ghostscript.install14
-rw-r--r--abs/core/giblib/PKGBUILD20
-rw-r--r--abs/core/giflib/PKGBUILD35
-rw-r--r--abs/core/glib2/PKGBUILD32
-rw-r--r--abs/core/glib2/gkeyfile-bool-nocase.patch16
-rw-r--r--abs/core/glib2/glib2.csh1
-rw-r--r--abs/core/glib2/glib2.sh1
-rw-r--r--abs/core/glibc/ChangeLog28
-rw-r--r--abs/core/glibc/PKGBUILD100
-rw-r--r--abs/core/glibc/fix-makecontext.patch33
-rw-r--r--abs/core/glibc/glibc.install122
-rwxr-xr-xabs/core/glibc/locale-gen42
-rw-r--r--abs/core/glibc/locale.gen438
-rw-r--r--abs/core/glibc/locale.gen.txt23
-rwxr-xr-xabs/core/glibc/nscd40
-rw-r--r--abs/core/glproto/PKGBUILD20
-rw-r--r--abs/core/gnutls/PKGBUILD24
-rw-r--r--abs/core/gpm/ChangeLog11
-rw-r--r--abs/core/gpm/PKGBUILD35
-rwxr-xr-xabs/core/gpm/gpm40
-rw-r--r--abs/core/gpm/gpm.conf.d4
-rw-r--r--abs/core/grep/01-fgrep.patch145
-rw-r--r--abs/core/grep/02-bracket.patch11
-rw-r--r--abs/core/grep/03-i18n.patch303
-rw-r--r--abs/core/grep/04-oi.patch48
-rw-r--r--abs/core/grep/05-manpage.patch19
-rw-r--r--abs/core/grep/06-color.patch10
-rw-r--r--abs/core/grep/07-icolor.patch36
-rw-r--r--abs/core/grep/08-skip.patch42
-rw-r--r--abs/core/grep/09-egf-speedup.patch823
-rw-r--r--abs/core/grep/10-dfa-optional.patch67
-rw-r--r--abs/core/grep/11-tests.patch138
-rw-r--r--abs/core/grep/12-w.patch121
-rw-r--r--abs/core/grep/13-P.patch14
-rw-r--r--abs/core/grep/14-mem-exhausted.patch15
-rw-r--r--abs/core/grep/15-empty-pattern.patch36
-rw-r--r--abs/core/grep/64-egf-speedup.patch791
-rw-r--r--abs/core/grep/PKGBUILD50
-rw-r--r--abs/core/groff/PKGBUILD34
-rw-r--r--abs/core/groff/man-utf8.tmac9
-rw-r--r--abs/core/grub/040_all_grub-0.96-nxstack.patch623
-rw-r--r--abs/core/grub/05-grub-0.97-initrdaddr.diff16
-rw-r--r--abs/core/grub/PKGBUILD81
-rw-r--r--abs/core/grub/grub-0.97-gpt.patch315
-rw-r--r--abs/core/grub/grub-inode-size.patch94
-rw-r--r--abs/core/grub/i2o.patch45
-rwxr-xr-xabs/core/grub/install-grub187
-rw-r--r--abs/core/grub/intelmac.patch67
-rw-r--r--abs/core/grub/menu.lst46
-rw-r--r--abs/core/grub/more-raid.patch100
-rw-r--r--abs/core/grub/special-devices.patch18
-rw-r--r--abs/core/gsfonts/PKGBUILD18
-rw-r--r--abs/core/gsfonts/xfonts.install20
-rw-r--r--abs/core/gtk2/PKGBUILD35
-rw-r--r--abs/core/gtk2/gtk2.install27
-rw-r--r--abs/core/gtk2/gtkclipboard-check.patch11
-rw-r--r--abs/core/gzip/PKGBUILD31
-rw-r--r--abs/core/gzip/gzip-fixpaths.patch37
-rw-r--r--abs/core/gzip/gzip-fixutimens.patch36
-rw-r--r--abs/core/gzip/gzip-security-update.patch186
-rw-r--r--abs/core/hal-info/PKGBUILD23
-rw-r--r--abs/core/hal/PKGBUILD49
-rw-r--r--abs/core/hal/cryptsetup_location.patch36
-rw-r--r--abs/core/hal/hal54
-rw-r--r--abs/core/hal/hal-0.5.9-hide-diagnostic.patch14
-rw-r--r--abs/core/hal/hal-policy.patch32
-rw-r--r--abs/core/hal/hal.install25
-rw-r--r--abs/core/hal/ntfs3g-valid-options.patch11
-rw-r--r--abs/core/hdparm/PKGBUILD33
-rw-r--r--abs/core/heimdal/002_all_heimdal-no_libedit.patch10
-rw-r--r--abs/core/heimdal/003_all_heimdal-fPIC.patch12
-rw-r--r--abs/core/heimdal/004_all_heimdal-rxapps.patch19
-rw-r--r--abs/core/heimdal/006_all_heimdal-suid_fix.patch20
-rw-r--r--abs/core/heimdal/010_all_heimdal-system-libss.patch40
-rw-r--r--abs/core/heimdal/PKGBUILD103
-rw-r--r--abs/core/heimdal/heimdal-kdc.rc40
-rw-r--r--abs/core/heimdal/kadmind.rc40
-rw-r--r--abs/core/heimdal/kpasswd.rc40
-rw-r--r--abs/core/hwdetect/PKGBUILD18
-rwxr-xr-xabs/core/hwdetect/hwdetect482
-rw-r--r--abs/core/imagemagick/ChangeLog44
-rw-r--r--abs/core/imagemagick/PKGBUILD56
-rw-r--r--abs/core/imagemagick/add_delegate.patch8
-rw-r--r--abs/core/imagemagick/libpng_mmx_patch_x86_64.patch12
-rw-r--r--abs/core/imlib2/PKGBUILD28
-rw-r--r--abs/core/initscripts/ChangeLog2083
-rw-r--r--abs/core/initscripts/PKGBUILD22
-rw-r--r--abs/core/initscripts/initscripts.install25
-rw-r--r--abs/core/inputproto/PKGBUILD22
-rw-r--r--abs/core/intel-dri/PKGBUILD38
-rw-r--r--abs/core/iproute/PKGBUILD26
-rw-r--r--abs/core/iproute/iproute2-2.4.7-now-ss020116.patch9823
-rw-r--r--abs/core/iptables/PKGBUILD30
-rw-r--r--abs/core/iptables/PKGBUILD.orig36
-rw-r--r--abs/core/iptables/empty.rules6
-rwxr-xr-xabs/core/iptables/ip6tables97
-rwxr-xr-xabs/core/iptables/iptables95
-rw-r--r--abs/core/iptables/iptables.conf.d8
-rw-r--r--abs/core/iptables/simple_firewall.rules11
-rw-r--r--abs/core/iputils/PKGBUILD72
-rw-r--r--abs/core/iputils/iputils-20070202-no-open-max.patch16
-rw-r--r--abs/core/iputils/iputils-big-patches.patch595
-rw-r--r--abs/core/iputils/iputils-ss021109-try.patch239
-rw-r--r--abs/core/iputils/iputils.patch1170
-rw-r--r--abs/core/iputils/protocols18
-rw-r--r--abs/core/iputils/services195
-rw-r--r--abs/core/ipw2100-fw/PKGBUILD36
-rw-r--r--abs/core/ipw2100-fw/ipw2100-fw.install18
-rw-r--r--abs/core/ipw2200-fw/PKGBUILD34
-rw-r--r--abs/core/ipw2200-fw/ipw2200-fw.install18
-rw-r--r--abs/core/ipw3945-ucode/PKGBUILD22
-rw-r--r--abs/core/ipw3945-ucode/ipw3945-ucode.install18
-rw-r--r--abs/core/ipw3945/2.6.18-compile.patch11
-rw-r--r--abs/core/ipw3945/PKGBUILD31
-rw-r--r--abs/core/ipw3945/compile-2.6.24.patch43
-rw-r--r--abs/core/ipw3945/ipw3945.install26
-rw-r--r--abs/core/ipw3945/kernel-2.6.19.patch10
-rw-r--r--abs/core/ipw3945/lockup.patch31
-rw-r--r--abs/core/ipw3945d/PKGBUILD28
-rw-r--r--abs/core/ipw3945d/ipw3945d.install35
-rw-r--r--abs/core/ipw3945d/ipw3945d.rc42
-rw-r--r--abs/core/ivtv-utils/PKGBUILD46
-rw-r--r--abs/core/ivtv-utils/ivtv-utils.install31
-rw-r--r--abs/core/iwlwifi-3945-ucode/PKGBUILD28
-rw-r--r--abs/core/iwlwifi-4965-ucode/PKGBUILD26
-rw-r--r--abs/core/jack-audio-connection-kit/PKGBUILD30
-rw-r--r--abs/core/jack-audio-connection-kit/jack-audio-connection-kit.conf.d42
-rw-r--r--abs/core/jack-audio-connection-kit/jack-audio-connection-kit.install34
-rw-r--r--abs/core/jack-audio-connection-kit/jack-audio-connection-kit.rc.d39
-rw-r--r--abs/core/jasper/PKGBUILD21
-rw-r--r--abs/core/jfsutils/PKGBUILD21
-rw-r--r--abs/core/kakasi/PKGBUILD20
-rw-r--r--abs/core/kbd/PKGBUILD34
-rw-r--r--abs/core/kbd/kbd-1.12-alias.patch47
-rw-r--r--abs/core/kbd/kbd-1.12-find_map_fix.patch37
-rw-r--r--abs/core/kbd/kbd-1.12-no-user-map.patch19
-rw-r--r--abs/core/kbd/keymap_hook21
-rw-r--r--abs/core/kbd/keymap_install44
-rw-r--r--abs/core/kbd/rename-duplicates.patch830
-rw-r--r--abs/core/kbproto/PKGBUILD18
-rw-r--r--abs/core/kdelibs3/PKGBUILD55
-rwxr-xr-xabs/core/kdelibs3/kde3.profile15
-rw-r--r--abs/core/kdelibs3/kdelibs3.install11
-rw-r--r--abs/core/kernel-headers/PKGBUILD27
-rw-r--r--abs/core/kernel-headers/netfilter-includes.patch91
-rw-r--r--abs/core/kernel26/PKGBUILD159
-rw-r--r--abs/core/kernel26/config3897
-rw-r--r--abs/core/kernel26/config.x86_643649
-rw-r--r--abs/core/kernel26/kernel26.install144
-rw-r--r--abs/core/kernel26/kernel26.preset17
-rw-r--r--abs/core/kernel26/logo_linux_clut224.ppm883
-rw-r--r--abs/core/kernel26/logo_linux_mono.pbm883
-rw-r--r--abs/core/kernel26/logo_linux_vga16.ppm883
-rw-r--r--abs/core/klibc-extras/PKGBUILD22
-rw-r--r--abs/core/klibc-kbd/PKGBUILD45
-rw-r--r--abs/core/klibc-kbd/keymap_hook27
-rw-r--r--abs/core/klibc-kbd/keymap_install76
-rw-r--r--abs/core/klibc-kbd/no-exit.patch31
-rw-r--r--abs/core/klibc-kbd/no-isatty.patch58
-rw-r--r--abs/core/klibc-module-init-tools/PKGBUILD31
-rw-r--r--abs/core/klibc-module-init-tools/fix-modprobe-ignore-path.patch14
-rw-r--r--abs/core/klibc-module-init-tools/makefile.patch54
-rw-r--r--abs/core/klibc-udev/PKGBUILD58
-rw-r--r--abs/core/klibc-udev/klibc-remove-revert.patch111
-rwxr-xr-xabs/core/klibc-udev/load-modules.sh32
-rw-r--r--abs/core/klibc-udev/post-107.patch176
-rwxr-xr-xabs/core/klibc-udev/start_udev115
-rw-r--r--abs/core/klibc-udev/udev.rules187
-rw-r--r--abs/core/klibc-udev/udev_hook7
-rw-r--r--abs/core/klibc-udev/udev_install31
-rw-r--r--abs/core/klibc-udev/vol_id-suspend2.patch15
-rw-r--r--abs/core/klibc/PKGBUILD62
-rw-r--r--abs/core/klibc/klibc-2.6.24.patch44
-rw-r--r--abs/core/klibc/klibc-Kbuild.patch41
-rw-r--r--abs/core/klibc/klibc-compile-shared-by-default.patch12
-rw-r--r--abs/core/klibc/klibc-module-init-tools.patch63
-rw-r--r--abs/core/klibc/multiple_raid_assembly_fix.patch20
-rw-r--r--abs/core/lame/PKGBUILD23
-rw-r--r--abs/core/lame/shared-frontend.patch23
-rw-r--r--abs/core/lcms/PKGBUILD24
-rw-r--r--abs/core/less/PKGBUILD23
-rw-r--r--abs/core/less/zless9
-rw-r--r--abs/core/libao/ChangeLog5
-rw-r--r--abs/core/libao/PKGBUILD25
-rw-r--r--abs/core/libao/libao.conf2
-rw-r--r--abs/core/libarchive/PKGBUILD31
-rw-r--r--abs/core/libart-lgpl/PKGBUILD20
-rw-r--r--abs/core/libart-lgpl/art_misc.h-cplusplus.patch35
-rw-r--r--abs/core/libcap/PKGBUILD20
-rw-r--r--abs/core/libcap/libcap-1.10-debian.patch766
-rw-r--r--abs/core/libcap/libcap-1.10-fixcflags.patch22
-rw-r--r--abs/core/libcap/libcap-1.10-shared.patch17
-rw-r--r--abs/core/libcdaudio/PKGBUILD23
-rw-r--r--abs/core/libcroco/PKGBUILD21
-rw-r--r--abs/core/libcups/PKGBUILD32
-rw-r--r--abs/core/libdatrie/PKGBUILD22
-rw-r--r--abs/core/libdmx/PKGBUILD22
-rw-r--r--abs/core/libdownload/PKGBUILD21
-rw-r--r--abs/core/libdownload/largefiles.patch12
-rw-r--r--abs/core/libdrm/PKGBUILD20
-rw-r--r--abs/core/libdvdread/PKGBUILD23
-rw-r--r--abs/core/libdvdread/libdvdread.install11
-rw-r--r--abs/core/libexif/PKGBUILD22
-rw-r--r--abs/core/libfontenc/PKGBUILD24
-rw-r--r--abs/core/libgcrypt/PKGBUILD23
-rw-r--r--abs/core/libgl/PKGBUILD49
-rw-r--r--abs/core/libglade/PKGBUILD26
-rw-r--r--abs/core/libglade/glade.install30
-rw-r--r--abs/core/libglade/libglade-2.0.1-nowarning.patch39
-rw-r--r--abs/core/libgpg-error/PKGBUILD23
-rw-r--r--abs/core/libgsf/PKGBUILD25
-rw-r--r--abs/core/libice/PKGBUILD22
-rw-r--r--abs/core/libid3tag/PKGBUILD21
-rw-r--r--abs/core/libid3tag/id3tag.pc10
-rw-r--r--abs/core/libidn/PKGBUILD22
-rw-r--r--abs/core/libjpeg/PKGBUILD21
-rw-r--r--abs/core/liblbxutil/PKGBUILD23
-rw-r--r--abs/core/libldap/PKGBUILD62
-rw-r--r--abs/core/libldap/ntlm.patch189
-rw-r--r--abs/core/libldap/peercred.patch11
-rw-r--r--abs/core/libmad/PKGBUILD27
-rw-r--r--abs/core/libmad/libmad.patch117
-rw-r--r--abs/core/libmad/libmad_gcc43.patch10
-rw-r--r--abs/core/libmp4v2/PKGBUILD33
-rw-r--r--abs/core/libmysqlclient/PKGBUILD55
-rw-r--r--abs/core/libogg/PKGBUILD22
-rw-r--r--abs/core/libpcap/PKGBUILD44
-rw-r--r--abs/core/libpcap/libpcap-shared.patch51
-rw-r--r--abs/core/libpng/ChangeLog51
-rw-r--r--abs/core/libpng/PKGBUILD43
-rw-r--r--abs/core/libpng/libpng-1.2.29-apng.patch1671
-rw-r--r--abs/core/libpng/libpng-1.2.31-apng.patch1644
-rw-r--r--abs/core/librsvg/PKGBUILD28
-rw-r--r--abs/core/librsvg/librsvg.install14
-rw-r--r--abs/core/libsasl/PKGBUILD43
-rw-r--r--abs/core/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch170
-rw-r--r--abs/core/libsasl/db-4.7.patch20
-rw-r--r--abs/core/libsasl/libsasl.install18
-rw-r--r--abs/core/libsm/PKGBUILD24
-rw-r--r--abs/core/libsmbios/PKGBUILD36
-rw-r--r--abs/core/libsndfile/PKGBUILD28
-rw-r--r--abs/core/libsndfile/flac-1.1.4.dpatch486
-rw-r--r--abs/core/libsndfile/lossy_comp_test-overflow.dpatch21
-rw-r--r--abs/core/libsndfile/overflow.dpatch46
-rw-r--r--abs/core/libstatgrab/PKGBUILD30
-rw-r--r--abs/core/libtasn1/PKGBUILD21
-rw-r--r--abs/core/libthai/PKGBUILD22
-rw-r--r--abs/core/libtheora/PKGBUILD26
-rw-r--r--abs/core/libtiff/CVE-2006-3459-3465.patch669
-rw-r--r--abs/core/libtiff/PKGBUILD31
-rw-r--r--abs/core/libtiff/tiff2pdf-compression.patch44
-rw-r--r--abs/core/libtiff/tiff2pdf-octal-printf.patch11
-rw-r--r--abs/core/libtiff/tiffsplit-fname-overflow.patch19
-rw-r--r--abs/core/libtool/PKGBUILD21
-rw-r--r--abs/core/libusb/PKGBUILD21
-rw-r--r--abs/core/libvorbis/PKGBUILD24
-rw-r--r--abs/core/libwmf/PKGBUILD31
-rw-r--r--abs/core/libwmf/libwmf.install18
-rw-r--r--abs/core/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff237
-rw-r--r--abs/core/libx11/PKGBUILD44
-rw-r--r--abs/core/libx11/xorg.sh19
-rw-r--r--abs/core/libx86/PKGBUILD27
-rw-r--r--abs/core/libx86/lrmi.patch16
-rw-r--r--abs/core/libxau/PKGBUILD22
-rw-r--r--abs/core/libxaw/PKGBUILD26
-rw-r--r--abs/core/libxcb/PKGBUILD29
-rw-r--r--abs/core/libxcb/xcb_xlib-no-assert-on-lock.patch30
-rw-r--r--abs/core/libxcomposite/PKGBUILD22
-rw-r--r--abs/core/libxcursor/PKGBUILD22
-rw-r--r--abs/core/libxdamage/PKGBUILD22
-rw-r--r--abs/core/libxdmcp/PKGBUILD22
-rw-r--r--abs/core/libxext/PKGBUILD21
-rw-r--r--abs/core/libxfixes/PKGBUILD22
-rw-r--r--abs/core/libxfixes/xfixes_coverity576.patch16
-rw-r--r--abs/core/libxfont/PKGBUILD24
-rw-r--r--abs/core/libxfontcache/PKGBUILD22
-rw-r--r--abs/core/libxft/PKGBUILD25
-rw-r--r--abs/core/libxi/PKGBUILD22
-rw-r--r--abs/core/libxinerama/PKGBUILD22
-rw-r--r--abs/core/libxkbfile/PKGBUILD25
-rw-r--r--abs/core/libxkbui/PKGBUILD23
-rw-r--r--abs/core/libxml2/PKGBUILD25
-rw-r--r--abs/core/libxmu/PKGBUILD23
-rw-r--r--abs/core/libxp/PKGBUILD24
-rw-r--r--abs/core/libxpm/PKGBUILD26
-rw-r--r--abs/core/libxrandr/PKGBUILD24
-rw-r--r--abs/core/libxrender/PKGBUILD22
-rw-r--r--abs/core/libxslt/ChangeLog9
-rw-r--r--abs/core/libxslt/PKGBUILD25
-rw-r--r--abs/core/libxss/PKGBUILD25
-rw-r--r--abs/core/libxt/PKGBUILD23
-rw-r--r--abs/core/libxtrap/PKGBUILD24
-rw-r--r--abs/core/libxtst/PKGBUILD23
-rw-r--r--abs/core/libxv/PKGBUILD25
-rw-r--r--abs/core/libxvmc/PKGBUILD23
-rw-r--r--abs/core/libxxf86dga/PKGBUILD23
-rw-r--r--abs/core/libxxf86misc/PKGBUILD23
-rw-r--r--abs/core/libxxf86vm/PKGBUILD24
-rw-r--r--abs/core/licenses/LICENSE.ralink-firmware.txt39
-rw-r--r--abs/core/licenses/PKGBUILD123
-rw-r--r--abs/core/licenses/ZopePublicLicense.txt54
-rw-r--r--abs/core/licenses/cc-by-3.0.txt60
-rw-r--r--abs/core/licenses/cc-by-nc-3.0.txt61
-rw-r--r--abs/core/licenses/cc-by-nc-nd-3.0.txt58
-rw-r--r--abs/core/licenses/cc-by-nc-sa-3.0.txt63
-rw-r--r--abs/core/licenses/cc-by-nd-3.0.txt57
-rw-r--r--abs/core/licenses/cc-by-sa-3.0.txt63
-rw-r--r--abs/core/licenses/cc-readme.txt12
-rw-r--r--abs/core/licenses/cddl-1.0.txt377
-rw-r--r--abs/core/licenses/cpl-1.0.txt217
-rw-r--r--abs/core/licenses/eclipse-1.0.txt88
-rw-r--r--abs/core/licenses/perlartistic.txt151
-rw-r--r--abs/core/licenses/python-2.txt270
-rw-r--r--abs/core/linhes-live/PKGBUILD30
-rwxr-xr-xabs/core/linhes-live/bin/gen_fstab122
-rwxr-xr-xabs/core/linhes-live/bin/km76
-rw-r--r--abs/core/linhes-live/etc/live-shutdown50
-rw-r--r--abs/core/linhes-live/etc/live-sysinit54
-rwxr-xr-xabs/core/linhes-live/etc/loginroot3
-rwxr-xr-xabs/core/linhes-live/etc/rc.shutdown-live167
-rwxr-xr-xabs/core/linhes-live/etc/rc.sysinit-live466
-rwxr-xr-xabs/core/linhes-live/etc/ulogin57
-rwxr-xr-xabs/core/linhes-live/lib/initcpio/gen_larch_init12
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch1120
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch233
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs33
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch3192
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch115
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch215
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch2_aufs15
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch318
-rwxr-xr-xabs/core/linhes-live/lib/initcpio/kinit6
-rw-r--r--abs/core/linhes-live/lib/initcpio/mkinitcpio.conf54
-rw-r--r--abs/core/linuxtv-dvb-apps/ChangeLog2
-rw-r--r--abs/core/linuxtv-dvb-apps/PKGBUILD38
-rw-r--r--abs/core/linuxtv-dvb-apps/linuxtv-dvb-apps.install12
-rw-r--r--abs/core/lirc-utils/PKGBUILD66
-rw-r--r--abs/core/lirc-utils/kernel-2.6.26.patch122
-rw-r--r--abs/core/lirc-utils/lirc.logrotate5
-rwxr-xr-xabs/core/lirc-utils/lircd43
-rw-r--r--abs/core/lirc-utils/lircd.conf.d8
-rwxr-xr-xabs/core/lirc-utils/lircmd36
-rw-r--r--abs/core/lirc/PKGBUILD50
-rw-r--r--abs/core/lirc/kernel-2.6.26.patch122
-rw-r--r--abs/core/lirc/lirc.install50
-rw-r--r--abs/core/live-installer/LinHES-release1
-rwxr-xr-xabs/core/live-installer/MythVantage.sh3
-rwxr-xr-xabs/core/live-installer/PKGBUILD66
-rwxr-xr-xabs/core/live-installer/add_service.sh15
-rwxr-xr-xabs/core/live-installer/autocard.py302
-rwxr-xr-xabs/core/live-installer/bpopup-ui.xml164
-rwxr-xr-xabs/core/live-installer/build_diskless.sh143
-rwxr-xr-xabs/core/live-installer/copy-to-mythbase.sh12
-rwxr-xr-xabs/core/live-installer/create_master.sh57
-rwxr-xr-xabs/core/live-installer/file_time_offset.py39
-rwxr-xr-xabs/core/live-installer/install-ui.xml175
-rwxr-xr-xabs/core/live-installer/install_db_chroot.sh52
-rwxr-xr-xabs/core/live-installer/install_functions.sh484
-rwxr-xr-xabs/core/live-installer/install_proxy.sh481
-rw-r--r--abs/core/live-installer/issue1
-rwxr-xr-xabs/core/live-installer/live-install.sh28
-rw-r--r--abs/core/live-installer/live.install78
-rw-r--r--abs/core/live-installer/networkconfig.sh280
-rwxr-xr-xabs/core/live-installer/remove_service.sh8
-rwxr-xr-xabs/core/live-installer/restore_default_settings.sh325
-rwxr-xr-xabs/core/live-installer/soundconfig.sh248
-rwxr-xr-xabs/core/live-installer/startx29
-rwxr-xr-xabs/core/live-installer/systemconfig.sh1255
-rw-r--r--abs/core/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf869
-rw-r--r--abs/core/live-installer/templates/LCD/Silverstone/LCDd.conf869
-rw-r--r--abs/core/live-installer/templates/LCD/Silverstone/modules1
-rw-r--r--abs/core/live-installer/templates/LCD/antec_fusion/LCDd.conf869
-rw-r--r--abs/core/live-installer/templates/LCD/antec_fusion/lircd.conf38
-rw-r--r--abs/core/live-installer/templates/LCD/antec_fusion/lircrc15
-rw-r--r--abs/core/live-installer/templates/LCD/antec_fusion/modules1
-rw-r--r--abs/core/live-installer/templates/LCD/xosd/LCDd.conf957
-rwxr-xr-xabs/core/live-installer/templates/cc.orig.sh35
-rwxr-xr-xabs/core/live-installer/templates/cc.sh5
-rwxr-xr-xabs/core/live-installer/templates/cc_vol.sh5
-rwxr-xr-xabs/core/live-installer/templates/change_chan.sh19
-rw-r--r--abs/core/live-installer/templates/cron.template4
-rw-r--r--abs/core/live-installer/templates/etcnet/eth/ipv4address2
-rw-r--r--abs/core/live-installer/templates/etcnet/eth/ipv4route2
-rw-r--r--abs/core/live-installer/templates/etcnet/eth/iwconfig2
-rw-r--r--abs/core/live-installer/templates/etcnet/eth/options7
-rw-r--r--abs/core/live-installer/templates/evrouter/MythVantage-40
-rw-r--r--abs/core/live-installer/templates/evrouter/MythVantage-80
-rw-r--r--abs/core/live-installer/templates/evrouter/MythVantage-Full0
-rw-r--r--abs/core/live-installer/templates/evrouter/MythVantage8-minipac3
-rw-r--r--abs/core/live-installer/templates/evrouter/MythVantage8-uhid3
-rw-r--r--abs/core/live-installer/templates/exports.template8
-rwxr-xr-xabs/core/live-installer/templates/fstab.conf.template16
-rw-r--r--abs/core/live-installer/templates/mysql.service13
-rwxr-xr-xabs/core/live-installer/templates/mysql.txt29
-rwxr-xr-xabs/core/live-installer/templates/ncid.conf.template51
-rw-r--r--abs/core/live-installer/templates/ncidd.conf.template143
-rwxr-xr-xabs/core/live-installer/templates/real_change_chan.sh19
-rw-r--r--abs/core/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf357
-rw-r--r--abs/core/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt922
-rw-r--r--abs/core/live-installer/templates/remotes/ATI_wonder/preview.jpgbin0 -> 63480 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS115
-rw-r--r--abs/core/live-installer/templates/remotes/MX-500-jams/lircrc832
-rw-r--r--abs/core/live-installer/templates/remotes/MX-500-jams/preview.jpgbin0 -> 10473 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/MythVantage-one/lircd.conf115
-rwxr-xr-xabs/core/live-installer/templates/remotes/MythVantage-one/lircrc857
-rw-r--r--abs/core/live-installer/templates/remotes/MythVantage-one/preview.jpgbin0 -> 88727 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf87
-rw-r--r--abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs539
-rw-r--r--abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpgbin0 -> 7504 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap69
-rw-r--r--abs/core/live-installer/templates/remotes/gr8zap/lircrc472
-rw-r--r--abs/core/live-installer/templates/remotes/gr8zap/preview.jpgbin0 -> 83195 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge274
-rw-r--r--abs/core/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge33
-rw-r--r--abs/core/live-installer/templates/remotes/hauppauge/preview.jpgbin0 -> 45763 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/imon-pad/lircd.conf88
-rw-r--r--abs/core/live-installer/templates/remotes/imon-pad/lircrc240
-rw-r--r--abs/core/live-installer/templates/remotes/imon-pad/preview.jpgbin0 -> 33321 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/mceusb/lircd-mceusb.conf88
-rw-r--r--abs/core/live-installer/templates/remotes/mceusb/lircrc-mceusb393
-rw-r--r--abs/core/live-installer/templates/remotes/mceusb/preview.jpgbin0 -> 12551 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/no_remote/preview.jpgbin0 -> 3087 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/receiver_usb.id4
-rw-r--r--abs/core/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf127
-rw-r--r--abs/core/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt590
-rw-r--r--abs/core/live-installer/templates/remotes/snapstream_firefly/preview.jpgbin0 -> 63750 bytes
-rw-r--r--abs/core/live-installer/templates/remotes/streamzap/lircd.conf.streamzap69
-rwxr-xr-xabs/core/live-installer/templates/remotes/streamzap/lircrc832
-rw-r--r--abs/core/live-installer/templates/remotes/streamzap/preview.jpgbin0 -> 83195 bytes
-rwxr-xr-xabs/core/live-installer/templates/samba/smb.conf.home10
-rwxr-xr-xabs/core/live-installer/templates/samba/smb.conf.media10
-rw-r--r--abs/core/live-installer/templates/samba/smb.conf.template125
-rw-r--r--abs/core/live-installer/templates/settings/default_1/keybindings.txt209
-rw-r--r--abs/core/live-installer/templates/settings/default_1/settings.txt320
-rw-r--r--abs/core/live-installer/templates/settings/default_2/keybindings.txt209
-rw-r--r--abs/core/live-installer/templates/settings/default_2/settings.txt320
-rw-r--r--abs/core/live-installer/templates/sources/mv-core2
-rw-r--r--abs/core/live-installer/templates/sources/mv-core-testing2
-rw-r--r--abs/core/live-installer/templates/sources/mv-extra2
-rw-r--r--abs/core/live-installer/templates/sources/mv-extra-testing2
-rw-r--r--abs/core/live-installer/templates/sources/svc_pkg3
-rwxr-xr-xabs/core/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf413
-rw-r--r--abs/core/live-installer/templates/xine.config.template754
-rw-r--r--abs/core/live-installer/templates/xorg/modeline.ATSC33
-rw-r--r--abs/core/live-installer/templates/xorg/modeline.DVD9
-rw-r--r--abs/core/live-installer/templates/xorg/modeline.NTSC10
-rw-r--r--abs/core/live-installer/templates/xorg/modeline.VESA163
-rw-r--r--abs/core/live-installer/templates/xorg/modeline.custom1
-rw-r--r--abs/core/live-installer/templates/xorg/xorg.conf.ati94
-rw-r--r--abs/core/live-installer/templates/xorg/xorg.conf.intel148
-rwxr-xr-xabs/core/live-installer/templates/xorg/xorg.conf.nvidia90
-rw-r--r--abs/core/live-installer/templates/xorg/xorg.conf.via77
-rwxr-xr-xabs/core/live-installer/templates/xorg/xorg.conf.vmware72
-rwxr-xr-xabs/core/live-installer/timezip.py185
-rwxr-xr-xabs/core/live-installer/xconfig.sh233
-rw-r--r--abs/core/logrotate/PKGBUILD37
-rw-r--r--abs/core/logrotate/logrotate.conf28
-rwxr-xr-xabs/core/logrotate/logrotate.cron.daily3
-rw-r--r--abs/core/lsof/PKGBUILD30
-rw-r--r--abs/core/lsof/license.txt27
-rw-r--r--abs/core/lvm2/PKGBUILD35
-rw-r--r--abs/core/lvm2/lvm2_hook16
-rw-r--r--abs/core/lvm2/lvm2_install19
-rw-r--r--abs/core/lzo2/PKGBUILD22
-rw-r--r--abs/core/lzop/PKGBUILD21
-rw-r--r--abs/core/madwifi-utils/PKGBUILD35
-rw-r--r--abs/core/madwifi/PKGBUILD38
-rw-r--r--abs/core/madwifi/kernel-2.6.19.patch383
-rw-r--r--abs/core/madwifi/kernel-2.6.20.patch73
-rw-r--r--abs/core/madwifi/madwifi-ng.install23
-rw-r--r--abs/core/mailx/PKGBUILD24
-rw-r--r--abs/core/mailx/mailx-8.1.1.patch32
-rw-r--r--abs/core/mailx/mailx-gcc4.patch12
-rw-r--r--abs/core/man-pages/PKGBUILD41
-rw-r--r--abs/core/man/PKGBUILD31
-rw-r--r--abs/core/man/man-troff.patch16
-rwxr-xr-xabs/core/man/whatis.cron.daily9
-rw-r--r--abs/core/mcpp/PKGBUILD27
-rw-r--r--abs/core/mcpp/mcpp-2.6.4-patch22
-rw-r--r--abs/core/mdadm/PKGBUILD34
-rwxr-xr-xabs/core/mdadm/mdadm37
-rw-r--r--abs/core/mdadm/mdadm-2.2-segfault.patch12
-rw-r--r--abs/core/mdadm/mdadm.conf64
-rw-r--r--abs/core/mdadm/raid-partitions_hook21
-rw-r--r--abs/core/mdadm/raid-partitions_install32
-rw-r--r--abs/core/mesa/PKGBUILD63
-rw-r--r--abs/core/mesa/mesa-6.5-apps-noglut.patch17
-rw-r--r--abs/core/mkinitcpio/PKGBUILD27
-rw-r--r--abs/core/mlocate/PKGBUILD47
-rw-r--r--abs/core/mlocate/mlocate.db0
-rw-r--r--abs/core/mlocate/mlocate.install27
-rw-r--r--abs/core/mlocate/updatedb.conf5
-rwxr-xr-xabs/core/mlocate/updatedb.cron.daily10
-rw-r--r--abs/core/module-init-tools/PKGBUILD33
-rw-r--r--abs/core/module-init-tools/fix-modprobe-ignore-path.patch14
-rw-r--r--abs/core/module-init-tools/makefile.patch22
-rw-r--r--abs/core/module-init-tools/modprobe.conf3
-rw-r--r--abs/core/module-init-tools/modutils-gcc4.patch280
-rw-r--r--abs/core/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch286
-rw-r--r--abs/core/mplayer/PKGBUILD67
-rw-r--r--abs/core/mplayer/demux_audio_fix_20080129.diff11
-rw-r--r--abs/core/mplayer/demux_mov_fix_20080129.diff45
-rw-r--r--abs/core/mplayer/ivtv_2.6.24.patch33
-rw-r--r--abs/core/mplayer/stream_cddb_fix_20080120.diff32
-rw-r--r--abs/core/mplayer/url_fix_20080120.diff10
-rw-r--r--abs/core/mtools/PKGBUILD23
-rw-r--r--abs/core/mysql-clients/PKGBUILD36
-rw-r--r--abs/core/mysql-python/PKGBUILD18
-rw-r--r--abs/core/mysql/PKGBUILD54
-rw-r--r--abs/core/mysql/my.cnf149
-rw-r--r--abs/core/mysql/mysql-no-clients.patch65
-rwxr-xr-xabs/core/mysql/mysqld87
-rw-r--r--abs/core/mysql/mysqld.conf.d1
-rw-r--r--abs/core/mythtv/stable/mytharchive/PKGBUILD35
-rw-r--r--abs/core/mythtv/stable/mythbrowser/PKGBUILD33
-rw-r--r--abs/core/mythtv/stable/mythcontrols/PKGBUILD32
-rwxr-xr-xabs/core/mythtv/stable/mythdb-initial/PKGBUILD21
-rw-r--r--abs/core/mythtv/stable/mythdb-initial/mc.sql2797
-rwxr-xr-xabs/core/mythtv/stable/mythdb-initial/mythdb.install31
-rwxr-xr-xabs/core/mythtv/stable/mythdb-initial/permissions.sql11
-rw-r--r--abs/core/mythtv/stable/mythflix/PKGBUILD31
-rw-r--r--abs/core/mythtv/stable/mythgallery/PKGBUILD32
-rw-r--r--abs/core/mythtv/stable/mythgame/PKGBUILD31
-rw-r--r--abs/core/mythtv/stable/mythmusic/PKGBUILD33
-rw-r--r--abs/core/mythtv/stable/mythmusic/music_flac.patch293
-rw-r--r--abs/core/mythtv/stable/mythmusic/mythmusic-0.21.patch22
-rw-r--r--abs/core/mythtv/stable/mythnews/PKGBUILD31
-rw-r--r--abs/core/mythtv/stable/mythphone/PKGBUILD32
-rw-r--r--abs/core/mythtv/stable/myththemes/PKGBUILD32
-rw-r--r--abs/core/mythtv/stable/mythtv/PKGBUILD70
-rw-r--r--abs/core/mythtv/stable/mythtv/QUICKSTART.archlinux69
-rwxr-xr-xabs/core/mythtv/stable/mythtv/mythbackend38
-rw-r--r--abs/core/mythtv/stable/mythtv/mythtv.install13
-rw-r--r--abs/core/mythtv/stable/mythvideo/PKGBUILD36
-rw-r--r--abs/core/mythtv/stable/mythvideo/mtd36
-rw-r--r--abs/core/mythtv/stable/mythweather/PKGBUILD32
-rw-r--r--abs/core/mythtv/stable/mythweb/PKGBUILD27
-rw-r--r--abs/core/mythtv/stable/mythweb/mythweb.install10
-rw-r--r--abs/core/nano/PKGBUILD25
-rw-r--r--abs/core/nano/nano.install20
-rw-r--r--abs/core/ncurses/PKGBUILD75
-rw-r--r--abs/core/ncurses/ncurses.install9
-rw-r--r--abs/core/ndiswrapper-utils/PKGBUILD22
-rw-r--r--abs/core/ndiswrapper/PKGBUILD29
-rw-r--r--abs/core/ndiswrapper/ndiswrapper.install28
-rw-r--r--abs/core/net-tools/PKGBUILD36
-rw-r--r--abs/core/net-tools/gcc340.patch46
-rw-r--r--abs/core/net-tools/net-tools-1.60-2.6-compilefix.patch23
-rw-r--r--abs/core/net-tools/net-tools-1.60-miiioctl.patch17
-rw-r--r--abs/core/net-tools/net-tools-1.60-nameif.patch58
-rw-r--r--abs/core/net-tools/net-tools-1.60-nameif_strncpy.patch13
-rw-r--r--abs/core/net-tools/net-tools.patch52
-rw-r--r--abs/core/net-tools/nisdomainname.conf.d3
-rw-r--r--abs/core/netcfg/PKGBUILD25
-rw-r--r--abs/core/ntfsprogs/PKGBUILD26
-rw-r--r--abs/core/ntfsprogs/ntfsprogs.install24
-rw-r--r--abs/core/nuvexport/PKGBUILD31
-rw-r--r--abs/core/nuvexport/nuvexport-ipod-disable.patch12
-rw-r--r--abs/core/openexr/PKGBUILD24
-rw-r--r--abs/core/openexr/gcc43.patch21
-rw-r--r--abs/core/openexr/openexr-gcc4.patch11
-rw-r--r--abs/core/openssh/PKGBUILD61
-rwxr-xr-xabs/core/openssh/sshd40
-rw-r--r--abs/core/openssh/sshd.confd4
-rw-r--r--abs/core/openssh/sshd.pam10
-rw-r--r--abs/core/openssl/PKGBUILD28
-rw-r--r--abs/core/pacman/PKGBUILD46
-rw-r--r--abs/core/pacman/mirrorlist101
-rw-r--r--abs/core/pacman/pacman.conf76
-rw-r--r--abs/core/pacman/pacman.install56
-rw-r--r--abs/core/pam/PKGBUILD50
-rw-r--r--abs/core/pam/other5
-rw-r--r--abs/core/pam/pam.install22
-rw-r--r--abs/core/pango/PKGBUILD24
-rw-r--r--abs/core/pango/pango.install26
-rw-r--r--abs/core/parted/PKGBUILD24
-rw-r--r--abs/core/parted/parted-1.7.1-fix-seg.patch13
-rw-r--r--abs/core/pciutils/PKGBUILD29
-rw-r--r--abs/core/pcmciautils/PKGBUILD34
-rw-r--r--abs/core/pcre/ChangeLog10
-rw-r--r--abs/core/pcre/PKGBUILD32
-rw-r--r--abs/core/pcre/libpcre-7.7-buffer-overflow.patch16
-rw-r--r--abs/core/perl/PKGBUILD102
-rw-r--r--abs/core/perl/archlinux-cpan-installdir.patch17
-rw-r--r--abs/core/perl/archlinux-inc-order.patch101
-rw-r--r--abs/core/perl/perl-5.10.0-archlinux-cpan-installdir.patch11
-rw-r--r--abs/core/perl/perl-5.10.0-archlinux-inc-order.patch101
-rw-r--r--abs/core/perl/perl-5.8.6-picdl.patch013
-rw-r--r--abs/core/perl/perl-5.8.8-gcc-4.2.0.patch10
-rw-r--r--abs/core/perl/perl-5.8.8-utf-regexes.patch59
-rw-r--r--abs/core/perl/perl.install54
-rwxr-xr-xabs/core/perl/perlbin.sh2
-rw-r--r--abs/core/perl_modules/perl-archive-zip/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-class-methodmaker/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-crypt-ssleay/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-date-manip/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-dbd-mysql/PKGBUILD29
-rw-r--r--abs/core/perl_modules/perl-dbi/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-fcgi/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-file-slurp/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-html-parser/PKGBUILD31
-rw-r--r--abs/core/perl_modules/perl-html-tagset/PKGBUILD31
-rw-r--r--abs/core/perl_modules/perl-html-tree/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-http-cache-transparent/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-io-socket-ssl/PKGBUILD31
-rw-r--r--abs/core/perl_modules/perl-io-stringy/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-libwww/PKGBUILD32
-rw-r--r--abs/core/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-lingua-en-numbers/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-lingua-preferred/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-mailtools/PKGBUILD29
-rw-r--r--abs/core/perl_modules/perl-mime-lite/PKGBUILD29
-rw-r--r--abs/core/perl_modules/perl-mime-tools/ChangeLog4
-rw-r--r--abs/core/perl_modules/perl-mime-tools/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-mime-types/PKGBUILD29
-rw-r--r--abs/core/perl_modules/perl-net-ssleay/PKGBUILD33
-rw-r--r--abs/core/perl_modules/perl-soap-lite/PKGBUILD24
-rw-r--r--abs/core/perl_modules/perl-term-progressbar/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-term-readkey/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-text-bidi/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-text-iconv/PKGBUILD25
-rw-r--r--abs/core/perl_modules/perl-text-kakasi/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-timedate/PKGBUILD32
-rw-r--r--abs/core/perl_modules/perl-tk-tablematrix/PKGBUILD25
-rw-r--r--abs/core/perl_modules/perl-tk/PKGBUILD45
-rw-r--r--abs/core/perl_modules/perl-unicode-string/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-unicode-utf8simple/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-uri/PKGBUILD31
-rw-r--r--abs/core/perl_modules/perl-www-mechanize/PKGBUILD24
-rw-r--r--abs/core/perl_modules/perl-xml-libxml-common/ChangeLog5
-rw-r--r--abs/core/perl_modules/perl-xml-libxml-common/PKGBUILD25
-rw-r--r--abs/core/perl_modules/perl-xml-libxml/PKGBUILD26
-rw-r--r--abs/core/perl_modules/perl-xml-libxml/perl-xml-libxml.install19
-rw-r--r--abs/core/perl_modules/perl-xml-namespacesupport/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-xml-sax/PKGBUILD26
-rw-r--r--abs/core/perl_modules/perl-xml-sax/perl-xml-sax.install15
-rw-r--r--abs/core/perl_modules/perl-xml-sax/perl-xml-sax.patch45
-rw-r--r--abs/core/perl_modules/perl-xml-simple/PKGBUILD26
-rw-r--r--abs/core/perl_modules/perl-xml-twig/PKGBUILD26
-rw-r--r--abs/core/perl_modules/perl-xml-writer/PKGBUILD23
-rw-r--r--abs/core/perlxml/PKGBUILD29
-rw-r--r--abs/core/php/PKGBUILD174
-rw-r--r--abs/core/php/apache.conf9
-rw-r--r--abs/core/php/db-configure.patch51
-rw-r--r--abs/core/php/php.ini1304
-rw-r--r--abs/core/php/php.install97
-rw-r--r--abs/core/pil/PKGBUILD26
-rw-r--r--abs/core/pixman/PKGBUILD20
-rw-r--r--abs/core/pkgconfig/PKGBUILD22
-rw-r--r--abs/core/plextor-convertX-driver/.svn/all-wcprops29
-rw-r--r--abs/core/plextor-convertX-driver/.svn/entries95
-rw-r--r--abs/core/plextor-convertX-driver/.svn/format1
-rw-r--r--abs/core/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base5
-rw-r--r--abs/core/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base5
-rw-r--r--abs/core/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base5
-rw-r--r--abs/core/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base5
-rw-r--r--abs/core/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base31
-rw-r--r--abs/core/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base31
-rw-r--r--abs/core/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base460
-rw-r--r--abs/core/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base76
-rwxr-xr-xabs/core/plextor-convertX-driver/PKGBUILD30
-rwxr-xr-xabs/core/plextor-convertX-driver/convertX.install31
-rw-r--r--abs/core/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff26
-rw-r--r--abs/core/pm-utils/11netcfg26
-rw-r--r--abs/core/pm-utils/PKGBUILD29
-rw-r--r--abs/core/pm-utils/pm-utils.install15
-rw-r--r--abs/core/pm-utils/service.patch15
-rw-r--r--abs/core/popt/PKGBUILD33
-rw-r--r--abs/core/ppp/PKGBUILD47
-rw-r--r--abs/core/ppp/ip-down4
-rw-r--r--abs/core/ppp/ip-up4
-rw-r--r--abs/core/ppp/options352
-rw-r--r--abs/core/ppp/plog7
-rw-r--r--abs/core/ppp/poff103
-rw-r--r--abs/core/ppp/pon32
-rw-r--r--abs/core/ppp/pon.1121
-rw-r--r--abs/core/ppp/ppp36
-rw-r--r--abs/core/printproto/PKGBUILD22
-rw-r--r--abs/core/procinfo/PKGBUILD22
-rw-r--r--abs/core/procinfo/procinfo-19.2.patch325
-rw-r--r--abs/core/procps/PKGBUILD24
-rw-r--r--abs/core/procps/sysctl.conf13
-rw-r--r--abs/core/psmisc/PKGBUILD25
-rw-r--r--abs/core/pycairo/PKGBUILD21
-rw-r--r--abs/core/pygobject/PKGBUILD21
-rw-r--r--abs/core/pygtk/PKGBUILD24
-rw-r--r--abs/core/python-numeric/PKGBUILD19
-rw-r--r--abs/core/python-pexpect/PKGBUILD17
-rw-r--r--abs/core/python/PKGBUILD69
-rw-r--r--abs/core/python/Python-2.4.4-gdbm-1.patch17
-rw-r--r--abs/core/python/Python-2.5.2-idlelib.patch17
-rw-r--r--abs/core/python/db4.6-setup.py-detection.patch11
-rw-r--r--abs/core/python/modulator-launcher2
-rw-r--r--abs/core/python/pynche-launcher3
-rw-r--r--abs/core/python/python-2.5.CVE-2007-4965-int-overflow.patch217
-rw-r--r--abs/core/python/python.install13
-rw-r--r--abs/core/python/python2.6-set_wakeup_fd4.patch94
-rw-r--r--abs/core/qt3/PKGBUILD101
-rw-r--r--abs/core/qt3/mysql.patch47
-rw-r--r--abs/core/qt3/qt-copy-kde-patches.tar.bz2bin0 -> 31498 bytes
-rw-r--r--abs/core/qt3/qt-font-default-subst.diff77
-rw-r--r--abs/core/qt3/qt-patches.tar.bz2bin0 -> 3627 bytes
-rw-r--r--abs/core/qt3/qt.install24
-rw-r--r--abs/core/qt3/qt.profile4
-rw-r--r--abs/core/qt3/utf8-bug-qt3.diff101
-rw-r--r--abs/core/randrproto/PKGBUILD21
-rw-r--r--abs/core/readline/PKGBUILD59
-rw-r--r--abs/core/readline/inputrc40
-rw-r--r--abs/core/readline/readline.install9
-rw-r--r--abs/core/recordproto/PKGBUILD19
-rw-r--r--abs/core/reiserfsprogs/PKGBUILD26
-rw-r--r--abs/core/renderproto/PKGBUILD18
-rw-r--r--abs/core/rp-pppoe/PKGBUILD25
-rwxr-xr-xabs/core/rp-pppoe/adsl35
-rw-r--r--abs/core/rt2500/PKGBUILD29
-rw-r--r--abs/core/rt2500/kernel-2.6.22.patch24125
-rw-r--r--abs/core/rt2500/kernel-2.6.24.patch20
-rw-r--r--abs/core/rt2500/rt2500.install26
-rw-r--r--abs/core/rt2x00-rt61-fw/PKGBUILD18
-rw-r--r--abs/core/rt2x00-rt71w-fw/PKGBUILD17
-rw-r--r--abs/core/run-parts/PKGBUILD22
-rwxr-xr-xabs/core/runit/PKGBUILD69
-rwxr-xr-xabs/core/runit/add_service.sh15
-rwxr-xr-xabs/core/runit/halt.script16
-rwxr-xr-xabs/core/runit/poweroff.script11
-rwxr-xr-xabs/core/runit/reboot.script11
-rwxr-xr-xabs/core/runit/remove_service.sh8
-rwxr-xr-xabs/core/runit/runit.install57
-rwxr-xr-xabs/core/runit/runitscripts/114
-rwxr-xr-xabs/core/runit/runitscripts/28
-rwxr-xr-xabs/core/runit/runitscripts/34
-rwxr-xr-xabs/core/runit/runitscripts/ctrlaltdel9
-rwxr-xr-xabs/core/runit/runitscripts/halt-runit2
-rwxr-xr-xabs/core/runit/runitscripts/logger11
-rwxr-xr-xabs/core/runit/runitscripts/reboot-runit2
-rwxr-xr-xabs/core/runit/runitscripts/services/Xvfb/finish12
-rwxr-xr-xabs/core/runit/runitscripts/services/Xvfb/run5
-rwxr-xr-xabs/core/runit/runitscripts/services/acpid/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/alsa-utils/finish3
-rwxr-xr-xabs/core/runit/runitscripts/services/alsa-utils/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/apache/run2
-rwxr-xr-xabs/core/runit/runitscripts/services/avahi/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/cron/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/dbus/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/dnsmasq/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/evrouter/finish4
-rwxr-xr-xabs/core/runit/runitscripts/services/evrouter/run5
-rwxr-xr-xabs/core/runit/runitscripts/services/frontend/finish30
-rwxr-xr-xabs/core/runit/runitscripts/services/frontend/log/run5
-rwxr-xr-xabs/core/runit/runitscripts/services/frontend/run10
-rwxr-xr-xabs/core/runit/runitscripts/services/gpm/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/hal/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/hobbit-client/run68
-rwxr-xr-xabs/core/runit/runitscripts/services/hobbit/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/lcdd/run9
-rwxr-xr-xabs/core/runit/runitscripts/services/lighttpd/run2
-rwxr-xr-xabs/core/runit/runitscripts/services/lircd/finish12
-rwxr-xr-xabs/core/runit/runitscripts/services/lircd/run39
-rwxr-xr-xabs/core/runit/runitscripts/services/mysql/run29
-rwxr-xr-xabs/core/runit/runitscripts/services/mythbackend/log/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/mythbackend/run25
-rwxr-xr-xabs/core/runit/runitscripts/services/ncid/run5
-rwxr-xr-xabs/core/runit/runitscripts/services/ncidd/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/netfs/finish3
-rwxr-xr-xabs/core/runit/runitscripts/services/netfs/run5
-rwxr-xr-xabs/core/runit/runitscripts/services/nfsd/run22
-rwxr-xr-xabs/core/runit/runitscripts/services/nfslock/run4
-rwxr-xr-xabs/core/runit/runitscripts/services/nmbd/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/ntpd/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/oss/finish4
-rwxr-xr-xabs/core/runit/runitscripts/services/oss/run6
-rwxr-xr-xabs/core/runit/runitscripts/services/portmap/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/smbd/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/sshd/run8
-rwxr-xr-xabs/core/runit/runitscripts/services/syslog-ng/run3
-rwxr-xr-xabs/core/runit/runitscripts/services/tty2/run2
-rwxr-xr-xabs/core/runit/runitscripts/services/tty3/run2
-rw-r--r--abs/core/scrnsaverproto/PKGBUILD21
-rw-r--r--abs/core/sdl/PKGBUILD21
-rw-r--r--abs/core/sdparm/PKGBUILD22
-rw-r--r--abs/core/sed/PKGBUILD21
-rw-r--r--abs/core/sg3_utils/PKGBUILD18
-rw-r--r--abs/core/shadow/PKGBUILD88
-rw-r--r--abs/core/shadow/adduser399
-rw-r--r--abs/core/shadow/chage6
-rw-r--r--abs/core/shadow/chsh6
-rw-r--r--abs/core/shadow/login18
-rw-r--r--abs/core/shadow/login.defs212
-rw-r--r--abs/core/shadow/passwd4
-rw-r--r--abs/core/shadow/shadow6
-rw-r--r--abs/core/shadow/shadow-4.0.18.2-useradd-fix-1.patch26
-rw-r--r--abs/core/shadow/shadow-UID_GID.patch34
-rwxr-xr-xabs/core/shadow/shadow.cron.daily6
-rw-r--r--abs/core/shadow/shadow.install11
-rw-r--r--abs/core/shadow/useradd6
-rw-r--r--abs/core/shadow/useradd-default.patch14
-rw-r--r--abs/core/shadow/xstrdup.patch9
-rw-r--r--abs/core/smbclient/PKGBUILD58
-rw-r--r--abs/core/smbclient/heimdal.patch33
-rw-r--r--abs/core/squashfs-tools/PKGBUILD24
-rw-r--r--abs/core/sudo/PKGBUILD33
-rw-r--r--abs/core/sudo/sudo.pam3
-rw-r--r--abs/core/sysfsutils/PKGBUILD31
-rw-r--r--abs/core/syslinux/PKGBUILD25
-rw-r--r--abs/core/syslog-ng/PKGBUILD31
-rwxr-xr-xabs/core/syslog-ng/syslog-ng39
-rw-r--r--abs/core/syslog-ng/syslog-ng.conf91
-rw-r--r--abs/core/syslog-ng/syslog-ng.logrotate7
-rw-r--r--abs/core/sysvinit/PKGBUILD26
-rw-r--r--abs/core/sysvinit/halt-init.patch17
-rw-r--r--abs/core/taglib/PKGBUILD29
-rw-r--r--abs/core/tar/PKGBUILD22
-rw-r--r--abs/core/tar/tar.1376
-rw-r--r--abs/core/tcl/ChangeLog10
-rw-r--r--abs/core/tcl/PKGBUILD41
-rw-r--r--abs/core/tcp_wrappers/PKGBUILD35
-rw-r--r--abs/core/tcp_wrappers/gcc340.patch11
-rw-r--r--abs/core/tcp_wrappers/hosts.allow5
-rw-r--r--abs/core/tcp_wrappers/hosts.deny7
-rw-r--r--abs/core/tcp_wrappers/safe_finger.834
-rw-r--r--abs/core/tcp_wrappers/shared_lib_plus_plus-1.patch1025
-rw-r--r--abs/core/tcp_wrappers/try-from.828
-rw-r--r--abs/core/tiacx-firmware/PKGBUILD20
-rw-r--r--abs/core/tiacx-firmware/tiacx-firmware.install22
-rw-r--r--abs/core/tiacx/PKGBUILD23
-rw-r--r--abs/core/tiacx/acx.install23
-rw-r--r--abs/core/tk/ChangeLog16
-rw-r--r--abs/core/tk/PKGBUILD37
-rw-r--r--abs/core/trapproto/PKGBUILD19
-rw-r--r--abs/core/ttf-dejavu/ChangeLog9
-rw-r--r--abs/core/ttf-dejavu/PKGBUILD25
-rw-r--r--abs/core/ttf-dejavu/ttf-dejavu.install13
-rw-r--r--abs/core/tzdata/Makefile.patch140
-rw-r--r--abs/core/tzdata/PKGBUILD36
-rw-r--r--abs/core/tzdata/chile.patch65
-rw-r--r--abs/core/udev/00-load-blacklist.rules1
-rw-r--r--abs/core/udev/51-arch.rules191
-rw-r--r--abs/core/udev/PKGBUILD82
-rw-r--r--abs/core/udev/arch-udev-rules.patch151
-rw-r--r--abs/core/udev/cdrom-rules.patch8
-rwxr-xr-xabs/core/udev/cdsymlinks.sh45
-rwxr-xr-xabs/core/udev/load-modules.sh60
-rw-r--r--abs/core/udev/migrate-udev29
-rwxr-xr-xabs/core/udev/mod-blacklist.sh47
-rw-r--r--abs/core/udev/readme-udev-arch.txt264
-rwxr-xr-xabs/core/udev/root-link.sh7
-rwxr-xr-xabs/core/udev/start_udev137
-rw-r--r--abs/core/udev/udev.install22
-rw-r--r--abs/core/udev/udev.rules456
-rw-r--r--abs/core/udev/usb_id-fix.patch107
-rw-r--r--abs/core/unichrome-dri/PKGBUILD40
-rw-r--r--abs/core/unison/PKGBUILD28
-rw-r--r--abs/core/unison/ocaml-3.08-extnames.patch14
-rw-r--r--abs/core/unison/unison.desktop13
-rw-r--r--abs/core/unison/unison.install32
-rw-r--r--abs/core/usbutils/PKGBUILD25
-rw-r--r--abs/core/util-linux-ng/PKGBUILD38
-rw-r--r--abs/core/util-linux-ng/util-linux-ng-2.14-20080624.diff6826
-rw-r--r--abs/core/v4l-dvb/PKGBUILD24
-rw-r--r--abs/core/v4l-dvb/v4l-dvb.install23
-rw-r--r--abs/core/vbetool/PKGBUILD32
-rw-r--r--abs/core/vi/PKGBUILD62
-rw-r--r--abs/core/vi/fetch_patches.sh63
-rw-r--r--abs/core/vi/fetch_runtime.sh117
-rw-r--r--abs/core/vi/vi.install37
-rw-r--r--abs/core/videoproto/PKGBUILD19
-rw-r--r--abs/core/wget/PKGBUILD21
-rw-r--r--abs/core/which/PKGBUILD20
-rw-r--r--abs/core/wlan-ng26-utils/PKGBUILD32
-rw-r--r--abs/core/wlan-ng26-utils/kernel-2.6.22-r1832.patch120
-rw-r--r--abs/core/wlan-ng26-utils/kernel-2.6.26.patch14
-rw-r--r--abs/core/wlan-ng26-utils/wlan68
-rw-r--r--abs/core/wlan-ng26-utils/wlan-ng.patch14
-rw-r--r--abs/core/wlan-ng26/PKGBUILD35
-rw-r--r--abs/core/wlan-ng26/kernel-2.6.26.patch14
-rw-r--r--abs/core/wlan-ng26/wlan-ng26.install30
-rw-r--r--abs/core/wpa_supplicant/PKGBUILD36
-rw-r--r--abs/core/wpa_supplicant/config308
-rw-r--r--abs/core/wpa_supplicant/wpa_supplicant.install15
-rw-r--r--abs/core/x264/PKGBUILD35
-rw-r--r--abs/core/xbitmaps/PKGBUILD22
-rw-r--r--abs/core/xcb-proto/PKGBUILD21
-rw-r--r--abs/core/xcursor-themes/PKGBUILD20
-rw-r--r--abs/core/xextproto/PKGBUILD22
-rw-r--r--abs/core/xf86-input-acecad/PKGBUILD22
-rw-r--r--abs/core/xf86-input-aiptek/PKGBUILD23
-rw-r--r--abs/core/xf86-input-calcomp/PKGBUILD23
-rw-r--r--abs/core/xf86-input-citron/PKGBUILD24
-rw-r--r--abs/core/xf86-input-digitaledge/PKGBUILD23
-rw-r--r--abs/core/xf86-input-dmc/PKGBUILD23
-rw-r--r--abs/core/xf86-input-dynapro/PKGBUILD23
-rw-r--r--abs/core/xf86-input-elo2300/PKGBUILD22
-rw-r--r--abs/core/xf86-input-elographics/PKGBUILD26
-rw-r--r--abs/core/xf86-input-evdev/PKGBUILD22
-rw-r--r--abs/core/xf86-input-fpit/PKGBUILD23
-rw-r--r--abs/core/xf86-input-hyperpen/PKGBUILD23
-rw-r--r--abs/core/xf86-input-jamstudio/PKGBUILD23
-rw-r--r--abs/core/xf86-input-joystick/PKGBUILD23
-rw-r--r--abs/core/xf86-input-keyboard/PKGBUILD25
-rw-r--r--abs/core/xf86-input-keyboard/new-server.patch5087
-rw-r--r--abs/core/xf86-input-magellan/PKGBUILD23
-rw-r--r--abs/core/xf86-input-magictouch/PKGBUILD23
-rw-r--r--abs/core/xf86-input-microtouch/PKGBUILD23
-rw-r--r--abs/core/xf86-input-mouse/PKGBUILD25
-rw-r--r--abs/core/xf86-input-mutouch/PKGBUILD23
-rw-r--r--abs/core/xf86-input-palmax/PKGBUILD23
-rw-r--r--abs/core/xf86-input-penmount/PKGBUILD23
-rw-r--r--abs/core/xf86-input-spaceorb/PKGBUILD23
-rw-r--r--abs/core/xf86-input-summa/PKGBUILD23
-rw-r--r--abs/core/xf86-input-tek4957/PKGBUILD23
-rw-r--r--abs/core/xf86-input-ur98/PKGBUILD23
-rw-r--r--abs/core/xf86-input-vmmouse/PKGBUILD23
-rw-r--r--abs/core/xf86-input-void/PKGBUILD23
-rw-r--r--abs/core/xf86-video-amd/PKGBUILD27
-rw-r--r--abs/core/xf86-video-apm/PKGBUILD22
-rw-r--r--abs/core/xf86-video-ark/PKGBUILD22
-rw-r--r--abs/core/xf86-video-ati/PKGBUILD51
-rw-r--r--abs/core/xf86-video-chips/PKGBUILD22
-rw-r--r--abs/core/xf86-video-cirrus/PKGBUILD22
-rw-r--r--abs/core/xf86-video-dummy/PKGBUILD23
-rw-r--r--abs/core/xf86-video-fbdev/PKGBUILD23
-rw-r--r--abs/core/xf86-video-glint/PKGBUILD23
-rw-r--r--abs/core/xf86-video-i128/PKGBUILD23
-rw-r--r--abs/core/xf86-video-i740/PKGBUILD23
-rw-r--r--abs/core/xf86-video-imstt/PKGBUILD23
-rw-r--r--abs/core/xf86-video-intel/PKGBUILD25
-rw-r--r--abs/core/xf86-video-mga/PKGBUILD49
-rw-r--r--abs/core/xf86-video-neomagic/PKGBUILD22
-rw-r--r--abs/core/xf86-video-nv/PKGBUILD26
-rw-r--r--abs/core/xf86-video-radeonhd/PKGBUILD26
-rw-r--r--abs/core/xf86-video-rendition/PKGBUILD23
-rw-r--r--abs/core/xf86-video-s3/PKGBUILD23
-rw-r--r--abs/core/xf86-video-s3virge/PKGBUILD49
-rw-r--r--abs/core/xf86-video-savage/PKGBUILD49
-rw-r--r--abs/core/xf86-video-siliconmotion/PKGBUILD23
-rw-r--r--abs/core/xf86-video-sis/PKGBUILD48
-rw-r--r--abs/core/xf86-video-sisusb/PKGBUILD23
-rw-r--r--abs/core/xf86-video-tdfx/PKGBUILD49
-rw-r--r--abs/core/xf86-video-trident/PKGBUILD49
-rw-r--r--abs/core/xf86-video-tseng/PKGBUILD23
-rw-r--r--abs/core/xf86-video-unichrome/PKGBUILD26
-rw-r--r--abs/core/xf86-video-unichrome/fix-defines.patch68
-rw-r--r--abs/core/xf86-video-v4l/PKGBUILD23
-rw-r--r--abs/core/xf86-video-vesa/COPYING24
-rw-r--r--abs/core/xf86-video-vesa/PKGBUILD27
-rw-r--r--abs/core/xf86-video-vga/PKGBUILD23
-rw-r--r--abs/core/xf86-video-vmware/PKGBUILD22
-rw-r--r--abs/core/xf86-video-voodoo/PKGBUILD23
-rw-r--r--abs/core/xf86dgaproto/PKGBUILD18
-rw-r--r--abs/core/xf86miscproto/PKGBUILD19
-rw-r--r--abs/core/xf86vidmodeproto/PKGBUILD19
-rw-r--r--abs/core/xfsprogs/PKGBUILD28
-rw-r--r--abs/core/xineramaproto/PKGBUILD19
-rw-r--r--abs/core/xkeyboard-config/PKGBUILD30
-rwxr-xr-xabs/core/xmltv/PKGBUILD29
-rw-r--r--abs/core/xorg-apps/PKGBUILD78
-rw-r--r--abs/core/xorg-font-utils/PKGBUILD54
-rw-r--r--abs/core/xorg-font-utils/ttmkfdir.patch86
-rw-r--r--abs/core/xorg-font-utils/ttmkfdir_gcc43.patch8
-rw-r--r--abs/core/xorg-font-utils/xorg-font-utils.install8
-rw-r--r--abs/core/xorg-fonts-100dpi/PKGBUILD35
-rw-r--r--abs/core/xorg-fonts-100dpi/xfonts.install20
-rw-r--r--abs/core/xorg-fonts-75dpi/PKGBUILD35
-rw-r--r--abs/core/xorg-fonts-75dpi/xfonts.install20
-rw-r--r--abs/core/xorg-fonts-alias/PKGBUILD22
-rw-r--r--abs/core/xorg-fonts-encodings/PKGBUILD21
-rw-r--r--abs/core/xorg-fonts-encodings/xorg-fonts-encodings.install16
-rw-r--r--abs/core/xorg-fonts-misc/PKGBUILD45
-rw-r--r--abs/core/xorg-fonts-misc/xfonts.install20
-rw-r--r--abs/core/xorg-res-utils/PKGBUILD31
-rw-r--r--abs/core/xorg-server-utils/PKGBUILD75
-rw-r--r--abs/core/xorg-server/PKGBUILD92
-rw-r--r--abs/core/xorg-server/xorg-server.install12
-rw-r--r--abs/core/xorg-utils/PKGBUILD47
-rw-r--r--abs/core/xorg-xauth/PKGBUILD23
-rw-r--r--abs/core/xorg-xinit/PKGBUILD39
-rw-r--r--abs/core/xorg-xinit/xinitrc18
-rw-r--r--abs/core/xorg-xinit/xserverrc1
-rw-r--r--abs/core/xorg-xinit/xsession10
-rw-r--r--abs/core/xorg-xkb-utils/PKGBUILD34
-rw-r--r--abs/core/xproto/PKGBUILD22
-rw-r--r--abs/core/xterm/PKGBUILD43
-rw-r--r--abs/core/xtrans/PKGBUILD21
-rw-r--r--abs/core/xvidcore/PKGBUILD28
-rw-r--r--abs/core/zd1211-firmware/PKGBUILD22
-rw-r--r--abs/core/zlib/PKGBUILD25
-rw-r--r--abs/extra-testing/README0
-rw-r--r--abs/extra/README0
2360 files changed, 277394 insertions, 0 deletions
diff --git a/abs/chroot-devel-testing/README b/abs/chroot-devel-testing/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/chroot-devel-testing/README
diff --git a/abs/chroot-devel/README b/abs/chroot-devel/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/chroot-devel/README
diff --git a/abs/core-testing/a52dec/PKGBUILD b/abs/core-testing/a52dec/PKGBUILD
new file mode 100644
index 0000000..cba41ae
--- /dev/null
+++ b/abs/core-testing/a52dec/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 5601 2008-07-18 22:06:17Z jgc $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=a52dec
+pkgver=0.7.4
+pkgrel=4
+pkgdesc="liba52 is a free library for decoding ATSC A/52 streams."
+arch=('i686' 'x86_64')
+license=('GPL2')
+depends=('glibc')
+options=(!libtool)
+source=(http://liba52.sourceforge.net/files/${pkgname}-${pkgver}.tar.gz
+ a52dec-0.7.4-build.patch)
+url="http://liba52.sourceforge.net/"
+md5sums=('caa9f5bc44232dc8aeea773fea56be80' 'fa16f224a7dceb7613824380abef0052')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -Np1 -i ${srcdir}/a52dec-0.7.4-build.patch || return 1
+ ./bootstrap || return 1
+ ./configure --prefix=/usr --enable-shared || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m644 liba52/a52_internal.h $startdir/pkg/usr/include/a52dec/ || return 1
+}
diff --git a/abs/core-testing/a52dec/a52dec-0.7.4-build.patch b/abs/core-testing/a52dec/a52dec-0.7.4-build.patch
new file mode 100644
index 0000000..f3a29f3
--- /dev/null
+++ b/abs/core-testing/a52dec/a52dec-0.7.4-build.patch
@@ -0,0 +1,27 @@
+diff -Naur a52dec-0.7.4.orig/liba52/Makefile.am a52dec-0.7.4/liba52/Makefile.am
+--- a52dec-0.7.4.orig/liba52/Makefile.am 2002-01-27 20:36:48.000000000 -0800
++++ a52dec-0.7.4/liba52/Makefile.am 2004-11-05 01:10:21.317401872 -0800
+@@ -1,4 +1,3 @@
+-CFLAGS = @CFLAGS@ @LIBA52_CFLAGS@
+
+ lib_LTLIBRARIES = liba52.la
+
+diff -Naur a52dec-0.7.4.orig/liba52/configure.incl a52dec-0.7.4/liba52/configure.incl
+--- a52dec-0.7.4.orig/liba52/configure.incl 2002-01-27 20:36:48.000000000 -0800
++++ a52dec-0.7.4/liba52/configure.incl 2004-11-05 01:11:38.172672216 -0800
+@@ -2,7 +2,6 @@
+ AC_SUBST([LIBA52_LIBS])
+
+ dnl avoid -fPIC when possible
+-LIBA52_CFLAGS="$LIBA52_CFLAGS -prefer-non-pic"
+
+ AC_ARG_ENABLE([double],
+ [ --enable-double use double-precision samples])
+diff -Naur a52dec-0.7.4.orig/src/Makefile.am a52dec-0.7.4/src/Makefile.am
+--- a52dec-0.7.4.orig/src/Makefile.am 2002-06-22 18:51:57.000000000 -0700
++++ a52dec-0.7.4/src/Makefile.am 2004-11-05 01:10:21.320401375 -0800
+@@ -1,4 +1,3 @@
+-CFLAGS = @A52DEC_CFLAGS@
+
+ bin_PROGRAMS = a52dec extract_a52
+ a52dec_SOURCES = a52dec.c getopt.c gettimeofday.c
diff --git a/abs/core-testing/aalib/PKGBUILD b/abs/core-testing/aalib/PKGBUILD
new file mode 100644
index 0000000..ee23967
--- /dev/null
+++ b/abs/core-testing/aalib/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 2990 2008-06-18 01:46:24Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+#
+pkgname=aalib
+pkgver=1.4rc5
+pkgrel=5
+pkgdesc="AAlib is a portable ASCII art GFX library"
+arch=('i686' 'x86_64')
+url="http://aa-project.sourceforge.net/aalib/"
+license=('LGPL')
+depends=('glibc' 'ncurses' 'gpm>=1.20.4' 'libx11')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/aa-project/$pkgname-$pkgver.tar.gz
+ aclocal-fixes.patch)
+md5sums=('9801095c42bba12edebd1902bcf0a990' '863a96a6689aa7ee073ca448bc2f133d')
+
+build() {
+ cd $startdir/src/$pkgname-1.4.0
+ patch -Np0 -i ${startdir}/src/aclocal-fixes.patch || return 1
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/aalib/aclocal-fixes.patch b/abs/core-testing/aalib/aclocal-fixes.patch
new file mode 100644
index 0000000..3f1919a
--- /dev/null
+++ b/abs/core-testing/aalib/aclocal-fixes.patch
@@ -0,0 +1,11 @@
+--- aalib.m4.orig 2006-03-05 13:58:21.000000000 +0000
++++ aalib.m4 2006-03-05 13:58:32.000000000 +0000
+@@ -9,7 +9,7 @@
+ dnl AM_PATH_AALIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+ dnl Test for AALIB, and define AALIB_CFLAGS and AALIB_LIBS
+ dnl
+-AC_DEFUN(AM_PATH_AALIB,
++AC_DEFUN([AM_PATH_AALIB],
+ [dnl
+ dnl Get the cflags and libraries from the aalib-config script
+ dnl
diff --git a/abs/core-testing/acl/PKGBUILD b/abs/core-testing/acl/PKGBUILD
new file mode 100644
index 0000000..099eb04
--- /dev/null
+++ b/abs/core-testing/acl/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=acl
+pkgver=2.2.47
+pkgrel=10
+pkgdesc="Library for filesystem ACL support"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('LGPL')
+groups=('base')
+depends=('attr>=2.4.41')
+replaces=('xfsacl')
+provides=('xfsacl')
+conflicts=('xfsacl')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/acl_${pkgver}-1.tar.gz)
+md5sums=('a11e4571a54a0b1ae83010d1e68a64c2')
+
+build() {
+ cd $startdir/src/acl-$pkgver
+ autoconf
+ ./configure --prefix=$startdir/pkg/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr/ install install-lib install-dev
+
+ # tidy up
+ cd $startdir/pkg
+
+ mkdir -v lib
+ mv -v usr/lib/libacl.so* lib/
+ ln -sv ../../lib/libacl.so.1 usr/lib/libacl.so
+
+ mv -v usr/libexec/libacl.{a,la} usr/lib/
+ rm -rf $startdir/pkg/usr/libexec
+}
diff --git a/abs/core-testing/alsa-lib/PKGBUILD b/abs/core-testing/alsa-lib/PKGBUILD
new file mode 100644
index 0000000..785f6b2
--- /dev/null
+++ b/abs/core-testing/alsa-lib/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=alsa-lib
+pkgver=1.0.16
+pkgrel=1
+pkgdesc="An alternative implementation of Linux sound support"
+arch=(i686 x86_64)
+url="http://www.alsa-project.org"
+depends=('glibc')
+optdepends=('python')
+makedepends=('python')
+license=('GPL')
+options=(!libtool)
+source=(ftp://ftp.alsa-project.org/pub/lib/$pkgname-$pkgver.tar.bz2)
+md5sums=('73b0986758bb762648a5fafc93e287c1')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/alsa-lib/python2.5.patch b/abs/core-testing/alsa-lib/python2.5.patch
new file mode 100644
index 0000000..cd0032b
--- /dev/null
+++ b/abs/core-testing/alsa-lib/python2.5.patch
@@ -0,0 +1,11 @@
+--- modules/mixer/simple/python.c~ 2007-08-21 17:21:28.000000000 +0200
++++ modules/mixer/simple/python.c 2007-08-21 17:26:39.000000000 +0200
+@@ -23,7 +23,7 @@
+ #include "config.h"
+ #include "asoundlib.h"
+ #include "mixer_abst.h"
+-#include <python/Python.h>
++#include <python2.5/Python.h>
+
+ struct python_priv {
+ int py_initialized;
diff --git a/abs/core-testing/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch b/abs/core-testing/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch
new file mode 100644
index 0000000..588272f
--- /dev/null
+++ b/abs/core-testing/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch
@@ -0,0 +1,242 @@
+
+--- a/src/pcm/plugin_ops.h Mon Jan 09 14:40:08 2006 +0000
++++ b/src/pcm/plugin_ops.h Fri Mar 09 17:06:23 2007 +0100
+@@ -85,6 +85,8 @@ static inline u_int32_t sx24s(u_int32_t
+ #define _put_triple(ptr,val) _put_triple_be(ptr,val)
+ #define _put_triple_s(ptr,val) _put_triple_le(ptr,val)
+ #endif
++
++#define shift_down(val, bits) (((val) + (1 << ((bits) - 1))) >> (bits))
+
+ #ifdef COPY_LABELS
+ static void *copy_labels[5] = {
+@@ -256,14 +258,14 @@ conv_xxx1_009x: as_u32(dst) = sx24s((u_i
+ conv_xxx1_009x: as_u32(dst) = sx24s((u_int32_t)(as_u8c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_xxx1_9000: as_u32(dst) = (u_int32_t)(as_u8c(src) ^ 0x80) << 24; goto CONV_END;
+ conv_xxx1_0009: as_u32(dst) = (u_int32_t)(as_u8c(src) ^ 0x80); goto CONV_END;
+-conv_xx12_xxx1: as_u8(dst) = as_u16c(src) >> 8; goto CONV_END;
++conv_xx12_xxx1: as_u8(dst) = shift_down(as_u16c(src), 8); goto CONV_END;
+ conv_xx12_xx12: as_u16(dst) = as_u16c(src); goto CONV_END;
+ conv_xx12_xx21: as_u16(dst) = bswap_16(as_u16c(src)); goto CONV_END;
+ conv_xx12_x120: as_u32(dst) = sx24((u_int32_t)as_u16c(src) << 8); goto CONV_END;
+ conv_xx12_021x: as_u32(dst) = sx24s((u_int32_t)bswap_16(as_u16c(src)) << 8); goto CONV_END;
+ conv_xx12_1200: as_u32(dst) = (u_int32_t)as_u16c(src) << 16; goto CONV_END;
+ conv_xx12_0021: as_u32(dst) = (u_int32_t)bswap_16(as_u16c(src)); goto CONV_END;
+-conv_xx12_xxx9: as_u8(dst) = (as_u16c(src) >> 8) ^ 0x80; goto CONV_END;
++conv_xx12_xxx9: as_u8(dst) = shift_down(as_u16c(src), 8) ^ 0x80; goto CONV_END;
+ conv_xx12_xx92: as_u16(dst) = as_u16c(src) ^ 0x8000; goto CONV_END;
+ conv_xx12_xx29: as_u16(dst) = bswap_16(as_u16c(src)) ^ 0x80; goto CONV_END;
+ conv_xx12_x920: as_u32(dst) = sx24((u_int32_t)(as_u16c(src) ^ 0x8000) << 8); goto CONV_END;
+@@ -282,57 +284,57 @@ conv_xx12_01Ax: as_u32(dst) = sx24s((u_i
+ conv_xx12_01Ax: as_u32(dst) = sx24s((u_int32_t)(as_u16c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_xx12_A100: as_u32(dst) = (u_int32_t)bswap_16(as_u16c(src) ^ 0x80) << 16; goto CONV_END;
+ conv_xx12_001A: as_u32(dst) = (u_int32_t)(as_u16c(src) ^ 0x80); goto CONV_END;
+-conv_x123_xxx1: as_u8(dst) = as_u32c(src) >> 16; goto CONV_END;
+-conv_x123_xx12: as_u16(dst) = as_u32c(src) >> 8; goto CONV_END;
+-conv_x123_xx21: as_u16(dst) = bswap_16(as_u32c(src) >> 8); goto CONV_END;
++conv_x123_xxx1: as_u8(dst) = shift_down(as_u32c(src), 16); goto CONV_END;
++conv_x123_xx12: as_u16(dst) = shift_down(as_u32c(src), 8); goto CONV_END;
++conv_x123_xx21: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)); goto CONV_END;
+ conv_x123_x123: as_u32(dst) = sx24(as_u32c(src)); goto CONV_END;
+ conv_x123_321x: as_u32(dst) = sx24s(bswap_32(as_u32c(src))); goto CONV_END;
+ conv_x123_1230: as_u32(dst) = as_u32c(src) << 8; goto CONV_END;
+-conv_x123_0321: as_u32(dst) = bswap_32(as_u32c(src)) >> 8; goto CONV_END;
+-conv_x123_xxx9: as_u8(dst) = (as_u32c(src) >> 16) ^ 0x80; goto CONV_END;
+-conv_x123_xx92: as_u16(dst) = (as_u32c(src) >> 8) ^ 0x8000; goto CONV_END;
+-conv_x123_xx29: as_u16(dst) = bswap_16(as_u32c(src) >> 8) ^ 0x80; goto CONV_END;
++conv_x123_0321: as_u32(dst) = shift_down(bswap_32(as_u32c(src)), 8); goto CONV_END;
++ conv_x123_xxx9: as_u8(dst) = shift_down(as_u32c(src), 16) ^ 0x80; goto CONV_END;
++conv_x123_xx92: as_u16(dst) = shift_down(as_u32c(src), 8) ^ 0x8000; goto CONV_END;
++conv_x123_xx29: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)) ^ 0x80; goto CONV_END;
+ conv_x123_x923: as_u32(dst) = sx24(as_u32c(src) ^ 0x800000); goto CONV_END;
+ conv_x123_329x: as_u32(dst) = sx24s(bswap_32(as_u32c(src)) ^ 0x8000); goto CONV_END;
+ conv_x123_9230: as_u32(dst) = (as_u32c(src) ^ 0x800000) << 8; goto CONV_END;
+-conv_x123_0329: as_u32(dst) = (bswap_32(as_u32c(src)) >> 8) ^ 0x80; goto CONV_END;
+-conv_123x_xxx3: as_u8(dst) = (as_u32c(src) >> 8) & 0xff; goto CONV_END;
+-conv_123x_xx32: as_u16(dst) = bswap_16(as_u32c(src) >> 8); goto CONV_END;
+-conv_123x_xx23: as_u16(dst) = (as_u32c(src) >> 8) & 0xffff; goto CONV_END;
++conv_x123_0329: as_u32(dst) = shift_down(bswap_32(as_u32c(src)), 8) ^ 0x80; goto CONV_END;
++conv_123x_xxx3: as_u8(dst) = shift_down(as_u32c(src), 8) & 0xff; goto CONV_END;
++conv_123x_xx32: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)); goto CONV_END;
++conv_123x_xx23: as_u16(dst) = shift_down(as_u32c(src), 8) & 0xffff; goto CONV_END;
+ conv_123x_x321: as_u32(dst) = sx24(bswap_32(as_u32c(src))); goto CONV_END;
+ conv_123x_123x: as_u32(dst) = sx24s(as_u32c(src)); goto CONV_END;
+ conv_123x_3210: as_u32(dst) = bswap_32(as_u32c(src)) << 8; goto CONV_END;
+-conv_123x_0123: as_u32(dst) = as_u32c(src) >> 8; goto CONV_END;
+-conv_123x_xxxB: as_u8(dst) = ((as_u32c(src) >> 8) & 0xff) ^ 0x80; goto CONV_END;
+-conv_123x_xxB2: as_u16(dst) = bswap_16((as_u32c(src) >> 8) ^ 0x80); goto CONV_END;
+-conv_123x_xx2B: as_u16(dst) = ((as_u32c(src) >> 8) & 0xffff) ^ 0x80; goto CONV_END;
++conv_123x_0123: as_u32(dst) = shift_down(as_u32c(src), 8); goto CONV_END;
++conv_123x_xxxB: as_u8(dst) = (shift_down(as_u32c(src), 8) & 0xff) ^ 0x80; goto CONV_END;
++conv_123x_xxB2: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8) ^ 0x80); goto CONV_END;
++conv_123x_xx2B: as_u16(dst) = (shift_down(as_u32c(src), 8) & 0xffff) ^ 0x80; goto CONV_END;
+ conv_123x_xB21: as_u32(dst) = sx24(bswap_32(as_u32c(src)) ^ 0x800000); goto CONV_END;
+ conv_123x_12Bx: as_u32(dst) = sx24s(as_u32c(src) ^ 0x8000); goto CONV_END;
+ conv_123x_B210: as_u32(dst) = bswap_32(as_u32c(src) ^ 0x8000) << 8; goto CONV_END;
+-conv_123x_012B: as_u32(dst) = (as_u32c(src) >> 8) ^ 0x80; goto CONV_END;
+-conv_1234_xxx1: as_u8(dst) = as_u32c(src) >> 24; goto CONV_END;
+-conv_1234_xx12: as_u16(dst) = as_u32c(src) >> 16; goto CONV_END;
+-conv_1234_xx21: as_u16(dst) = bswap_16(as_u32c(src) >> 16); goto CONV_END;
+-conv_1234_x123: as_u32(dst) = sx24(as_u32c(src) >> 8); goto CONV_END;
++conv_123x_012B: as_u32(dst) = shift_down(as_u32c(src), 8) ^ 0x80; goto CONV_END;
++conv_1234_xxx1: as_u8(dst) = shift_down(as_u32c(src), 24); goto CONV_END;
++conv_1234_xx12: as_u16(dst) = shift_down(as_u32c(src), 16); goto CONV_END;
++conv_1234_xx21: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 16)); goto CONV_END;
++conv_1234_x123: as_u32(dst) = sx24(shift_down(as_u32c(src), 8)); goto CONV_END;
+ conv_1234_321x: as_u32(dst) = sx24s(bswap_32(as_u32c(src)) << 8); goto CONV_END;
+ conv_1234_1234: as_u32(dst) = as_u32c(src); goto CONV_END;
+ conv_1234_4321: as_u32(dst) = bswap_32(as_u32c(src)); goto CONV_END;
+-conv_1234_xxx9: as_u8(dst) = (as_u32c(src) >> 24) ^ 0x80; goto CONV_END;
+-conv_1234_xx92: as_u16(dst) = (as_u32c(src) >> 16) ^ 0x8000; goto CONV_END;
+-conv_1234_xx29: as_u16(dst) = bswap_16(as_u32c(src) >> 16) ^ 0x80; goto CONV_END;
+-conv_1234_x923: as_u32(dst) = sx24((as_u32c(src) >> 8) ^ 0x800000); goto CONV_END;
++conv_1234_xxx9: as_u8(dst) = shift_down(as_u32c(src), 24) ^ 0x80; goto CONV_END;
++conv_1234_xx92: as_u16(dst) = shift_down(as_u32c(src), 16) ^ 0x8000; goto CONV_END;
++conv_1234_xx29: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 16)) ^ 0x80; goto CONV_END;
++conv_1234_x923: as_u32(dst) = sx24(shift_down(as_u32c(src), 8) ^ 0x800000); goto CONV_END;
+ conv_1234_329x: as_u32(dst) = sx24s((bswap_32(as_u32c(src)) ^ 0x80) << 8); goto CONV_END;
+ conv_1234_9234: as_u32(dst) = as_u32c(src) ^ 0x80000000; goto CONV_END;
+ conv_1234_4329: as_u32(dst) = bswap_32(as_u32c(src)) ^ 0x80; goto CONV_END;
+ conv_1234_xxx4: as_u8(dst) = as_u32c(src) & 0xff; goto CONV_END;
+ conv_1234_xx43: as_u16(dst) = bswap_16(as_u32c(src)); goto CONV_END;
+ conv_1234_xx34: as_u16(dst) = as_u32c(src) & 0xffff; goto CONV_END;
+-conv_1234_x432: as_u32(dst) = sx24(bswap_32(as_u32c(src)) >> 8); goto CONV_END;
++conv_1234_x432: as_u32(dst) = sx24(shift_down(bswap_32(as_u32c(src)), 8)); goto CONV_END;
+ conv_1234_234x: as_u32(dst) = sx24s(as_u32c(src) << 8); goto CONV_END;
+ conv_1234_xxxC: as_u8(dst) = (as_u32c(src) & 0xff) ^ 0x80; goto CONV_END;
+ conv_1234_xxC3: as_u16(dst) = bswap_16(as_u32c(src) ^ 0x80); goto CONV_END;
+ conv_1234_xx3C: as_u16(dst) = (as_u32c(src) & 0xffff) ^ 0x80; goto CONV_END;
+-conv_1234_xC32: as_u32(dst) = sx24((bswap_32(as_u32c(src)) >> 8) ^ 0x800000); goto CONV_END;
++conv_1234_xC32: as_u32(dst) = sx24(shift_down(bswap_32(as_u32c(src)), 8) ^ 0x800000); goto CONV_END;
+ conv_1234_23Cx: as_u32(dst) = sx24s((as_u32c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_1234_C321: as_u32(dst) = bswap_32(as_u32c(src) ^ 0x80); goto CONV_END;
+ conv_1234_123C: as_u32(dst) = as_u32c(src) ^ 0x80; goto CONV_END;
+@@ -382,26 +384,26 @@ get16_12_92: sample = as_u16c(src) ^ 0x8
+ get16_12_92: sample = as_u16c(src) ^ 0x8000; goto GET16_END;
+ get16_12_21: sample = bswap_16(as_u16c(src)); goto GET16_END;
+ get16_12_A1: sample = bswap_16(as_u16c(src) ^ 0x80); goto GET16_END;
+-get16_0123_12: sample = as_u32c(src) >> 8; goto GET16_END;
+-get16_0123_92: sample = (as_u32c(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_1230_32: sample = bswap_16(as_u32c(src) >> 8); goto GET16_END;
+-get16_1230_B2: sample = bswap_16((as_u32c(src) >> 8) ^ 0x80); goto GET16_END;
+-get16_1234_12: sample = as_u32c(src) >> 16; goto GET16_END;
+-get16_1234_92: sample = (as_u32c(src) >> 16) ^ 0x8000; goto GET16_END;
++get16_0123_12: sample = shift_down(as_u32c(src), 8); goto GET16_END;
++get16_0123_92: sample = shift_down(as_u32c(src), 8) ^ 0x8000; goto GET16_END;
++get16_1230_32: sample = bswap_16(shift_down(as_u32c(src), 8)); goto GET16_END;
++get16_1230_B2: sample = bswap_16(shift_down(as_u32c(src), 8) ^ 0x80); goto GET16_END;
++get16_1234_12: sample = shift_down(as_u32c(src), 16); goto GET16_END;
++get16_1234_92: sample = shift_down(as_u32c(src), 16) ^ 0x8000; goto GET16_END;
+ get16_1234_43: sample = bswap_16(as_u32c(src)); goto GET16_END;
+ get16_1234_C3: sample = bswap_16(as_u32c(src) ^ 0x80); goto GET16_END;
+-get16_123_12: sample = _get_triple(src) >> 8; goto GET16_END;
+-get16_123_92: sample = (_get_triple(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_123_32: sample = _get_triple_s(src) >> 8; goto GET16_END;
+-get16_123_B2: sample = (_get_triple_s(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_123_12_20: sample = _get_triple(src) >> 4; goto GET16_END;
+-get16_123_92_20: sample = (_get_triple(src) >> 4) ^ 0x8000; goto GET16_END;
+-get16_123_32_20: sample = _get_triple_s(src) >> 4; goto GET16_END;
+-get16_123_B2_20: sample = (_get_triple_s(src) >> 4) ^ 0x8000; goto GET16_END;
+-get16_123_12_18: sample = _get_triple(src) >> 2; goto GET16_END;
+-get16_123_92_18: sample = (_get_triple(src) >> 2) ^ 0x8000; goto GET16_END;
+-get16_123_32_18: sample = _get_triple_s(src) >> 2; goto GET16_END;
+-get16_123_B2_18: sample = (_get_triple_s(src) >> 2) ^ 0x8000; goto GET16_END;
++get16_123_12: sample = shift_down(_get_triple(src), 8); goto GET16_END;
++get16_123_92: sample = shift_down(_get_triple(src), 8) ^ 0x8000; goto GET16_END;
++get16_123_32: sample = shift_down(_get_triple_s(src), 8); goto GET16_END;
++get16_123_B2: sample = shift_down(_get_triple_s(src), 8) ^ 0x8000; goto GET16_END;
++get16_123_12_20: sample = shift_down(_get_triple(src), 4); goto GET16_END;
++get16_123_92_20: sample = shift_down(_get_triple(src), 4) ^ 0x8000; goto GET16_END;
++get16_123_32_20: sample = shift_down(_get_triple_s(src), 4); goto GET16_END;
++get16_123_B2_20: sample = shift_down(_get_triple_s(src), 4) ^ 0x8000; goto GET16_END;
++get16_123_12_18: sample = shift_down(_get_triple(src), 2); goto GET16_END;
++get16_123_92_18: sample = shift_down(_get_triple(src), 2) ^ 0x8000; goto GET16_END;
++get16_123_32_18: sample = shift_down(_get_triple_s(src), 2); goto GET16_END;
++get16_123_B2_18: sample = shift_down(_get_triple_s(src), 2) ^ 0x8000; goto GET16_END;
+ }
+ #endif
+
+@@ -429,8 +431,8 @@ static void *put16_labels[4 * 2 * 2] = {
+
+ #ifdef PUT16_END
+ while (0) {
+-put16_12_1: as_u8(dst) = sample >> 8; goto PUT16_END;
+-put16_12_9: as_u8(dst) = (sample >> 8) ^ 0x80; goto PUT16_END;
++put16_12_1: as_u8(dst) = shift_down(sample, 8); goto PUT16_END;
++put16_12_9: as_u8(dst) = shift_down(sample, 8) ^ 0x80; goto PUT16_END;
+ put16_12_12: as_u16(dst) = sample; goto PUT16_END;
+ put16_12_92: as_u16(dst) = sample ^ 0x8000; goto PUT16_END;
+ put16_12_21: as_u16(dst) = bswap_16(sample); goto PUT16_END;
+@@ -500,8 +502,8 @@ get32_12_A100: sample = (u_int32_t)bswap
+ get32_12_A100: sample = (u_int32_t)bswap_16(as_u16c(src) ^ 0x80) << 16; goto GET32_END;
+ get32_0123_1230: sample = as_u32c(src) << 8; goto GET32_END;
+ get32_0123_9230: sample = (as_u32c(src) << 8) ^ 0x80000000; goto GET32_END;
+-get32_1230_3210: sample = bswap_32(as_u32c(src) >> 8); goto GET32_END;
+-get32_1230_B210: sample = bswap_32((as_u32c(src) >> 8) ^ 0x80); goto GET32_END;
++get32_1230_3210: sample = bswap_32(shift_down(as_u32c(src), 8)); goto GET32_END;
++get32_1230_B210: sample = bswap_32(shift_down(as_u32c(src), 8) ^ 0x80); goto GET32_END;
+ get32_1234_1234: sample = as_u32c(src); goto GET32_END;
+ get32_1234_9234: sample = as_u32c(src) ^ 0x80000000; goto GET32_END;
+ get32_1234_4321: sample = bswap_32(as_u32c(src)); goto GET32_END;
+@@ -568,32 +570,32 @@ static void *put32_labels[4 * 2 * 2 + 4
+
+ #ifdef PUT32_END
+ while (0) {
+-put32_1234_1: as_u8(dst) = sample >> 24; goto PUT32_END;
+-put32_1234_9: as_u8(dst) = (sample >> 24) ^ 0x80; goto PUT32_END;
+-put32_1234_12: as_u16(dst) = sample >> 16; goto PUT32_END;
+-put32_1234_92: as_u16(dst) = (sample >> 16) ^ 0x8000; goto PUT32_END;
+-put32_1234_21: as_u16(dst) = bswap_16(sample >> 16); goto PUT32_END;
+-put32_1234_29: as_u16(dst) = bswap_16(sample >> 16) ^ 0x80; goto PUT32_END;
+-put32_1234_0123: as_u32(dst) = sx24(sample >> 8); goto PUT32_END;
+-put32_1234_0923: as_u32(dst) = sx24((sample >> 8) ^ 0x800000); goto PUT32_END;
++put32_1234_1: as_u8(dst) = shift_down(sample, 24); goto PUT32_END;
++put32_1234_9: as_u8(dst) = shift_down(sample, 24) ^ 0x80; goto PUT32_END;
++put32_1234_12: as_u16(dst) = shift_down(sample, 16); goto PUT32_END;
++put32_1234_92: as_u16(dst) = shift_down(sample, 16) ^ 0x8000; goto PUT32_END;
++put32_1234_21: as_u16(dst) = bswap_16(shift_down(sample, 16)); goto PUT32_END;
++put32_1234_29: as_u16(dst) = bswap_16(shift_down(sample, 16)) ^ 0x80; goto PUT32_END;
++put32_1234_0123: as_u32(dst) = sx24(shift_down(sample, 8)); goto PUT32_END;
++put32_1234_0923: as_u32(dst) = sx24(shift_down(sample, 8) ^ 0x800000); goto PUT32_END;
+ put32_1234_3210: as_u32(dst) = sx24s(bswap_32(sample) << 8); goto PUT32_END;
+ put32_1234_3290: as_u32(dst) = sx24s((bswap_32(sample) ^ 0x80) << 8); goto PUT32_END;
+ put32_1234_1234: as_u32(dst) = sample; goto PUT32_END;
+ put32_1234_9234: as_u32(dst) = sample ^ 0x80000000; goto PUT32_END;
+ put32_1234_4321: as_u32(dst) = bswap_32(sample); goto PUT32_END;
+ put32_1234_4329: as_u32(dst) = bswap_32(sample) ^ 0x80; goto PUT32_END;
+-put32_1234_123: _put_triple(dst, sample >> 8); goto PUT32_END;
+-put32_1234_923: _put_triple(dst, (sample ^ 0x80000000) >> 8); goto PUT32_END;
+-put32_1234_321: _put_triple_s(dst, sample >> 8); goto PUT32_END;
+-put32_1234_329: _put_triple_s(dst, (sample ^ 0x80000000) >> 8); goto PUT32_END;
+-put32_1234_123_20: _put_triple(dst, sample >> 12); goto PUT32_END;
+-put32_1234_923_20: _put_triple(dst, (sample ^ 0x80000000) >> 12); goto PUT32_END;
+-put32_1234_321_20: _put_triple_s(dst, sample >> 12); goto PUT32_END;
+-put32_1234_329_20: _put_triple_s(dst, (sample ^ 0x80000000) >> 12); goto PUT32_END;
+-put32_1234_123_18: _put_triple(dst, sample >> 14); goto PUT32_END;
+-put32_1234_923_18: _put_triple(dst, (sample ^ 0x80000000) >> 14); goto PUT32_END;
+-put32_1234_321_18: _put_triple_s(dst, sample >> 14); goto PUT32_END;
+-put32_1234_329_18: _put_triple_s(dst, (sample ^ 0x80000000) >> 14); goto PUT32_END;
++put32_1234_123: _put_triple(dst, shift_down(sample, 8)); goto PUT32_END;
++put32_1234_923: _put_triple(dst, shift_down(sample ^ 0x80000000, 8)); goto PUT32_END;
++put32_1234_321: _put_triple_s(dst, shift_down(sample, 8)); goto PUT32_END;
++put32_1234_329: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 8)); goto PUT32_END;
++put32_1234_123_20: _put_triple(dst, shift_down(sample, 12)); goto PUT32_END;
++put32_1234_923_20: _put_triple(dst, shift_down(sample ^ 0x80000000, 12)); goto PUT32_END;
++put32_1234_321_20: _put_triple_s(dst, shift_down(sample, 12)); goto PUT32_END;
++put32_1234_329_20: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 12)); goto PUT32_END;
++put32_1234_123_18: _put_triple(dst, shift_down(sample, 14)); goto PUT32_END;
++put32_1234_923_18: _put_triple(dst, shift_down(sample ^ 0x80000000, 14)); goto PUT32_END;
++put32_1234_321_18: _put_triple_s(dst, shift_down(sample, 14)); goto PUT32_END;
++put32_1234_329_18: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 14)); goto PUT32_END;
+ }
+ #endif
+
+@@ -1079,3 +1081,4 @@ norms_32_s32s: _norms(src, dst, 32, 1,
+ #undef _put_triple_le
+ #undef _put_triple_be
+
++#undef shift_down
+
+
+
+
diff --git a/abs/core-testing/alsa-oss/PKGBUILD b/abs/core-testing/alsa-oss/PKGBUILD
new file mode 100644
index 0000000..d70a9e9
--- /dev/null
+++ b/abs/core-testing/alsa-oss/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=alsa-oss
+pkgver=1.0.15
+pkgrel=1
+pkgdesc="OSS compatibility library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.alsa-project.org"
+options=(!libtool)
+depends=('glibc' 'alsa-lib>=1.0.15')
+source=(ftp://ftp.alsa-project.org/pub/oss-lib/$pkgname-$pkgver.tar.bz2)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('49fb5fbae8bf955b248e46ff9c9a2aa1')
diff --git a/abs/core-testing/alsa-utils/PKGBUILD b/abs/core-testing/alsa-utils/PKGBUILD
new file mode 100644
index 0000000..a14e0ad
--- /dev/null
+++ b/abs/core-testing/alsa-utils/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=alsa-utils
+pkgver=1.0.16
+pkgrel=1
+pkgdesc="An alternative implementation of Linux sound support"
+arch=(i686 x86_64)
+url="http://www.alsa-project.org"
+depends=('alsa-lib>=1.0.16' 'dialog' 'pciutils' 'ncurses')
+license=('GPL')
+source=(ftp://ftp.alsa-project.org/pub/utils/$pkgname-${pkgver}.tar.bz2 \
+ alsa alsaconf.patch alsa.conf.d)
+backup=(etc/conf.d/alsa)
+md5sums=('b9f803f45e6988bb27a6bed521a949fc'
+ 'cce0969b0203a2bb35540fdf4f7e96ae'
+ '538f82650d08e901efea86c5395520df'
+ '366d370f874a45e67b63ce4a8b048202')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}
+ patch -Np1 -i ../alsaconf.patch || return 1
+ ./configure --prefix=/usr --with-curses=ncursesw
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m755 ../alsa $startdir/pkg/etc/rc.d/alsa
+ install -D -m644 ../alsa.conf.d $startdir/pkg/etc/conf.d/alsa
+}
diff --git a/abs/core-testing/alsa-utils/alsa b/abs/core-testing/alsa-utils/alsa
new file mode 100755
index 0000000..2581a9a
--- /dev/null
+++ b/abs/core-testing/alsa-utils/alsa
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/conf.d/alsa
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Restoring ALSA Levels"
+ /usr/sbin/alsactl restore
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ add_daemon alsa
+ fi
+
+ POWERSAVE=${POWERSAVE:-0}
+ if [ -e /sys/module/snd_ac97_codec/parameters/power_save \
+ -a $POWERSAVE -ne 0 ]; then
+ echo $POWERSAVE > /sys/module/snd_ac97_codec/parameters/power_save
+ echo 1 > /dev/dsp
+ fi
+
+ if [ -e /sys/module/snd_hda_intel/parameters/power_save \
+ -a $POWERSAVE -ne 0 ]; then
+ echo $POWERSAVE > /sys/module/snd_hda_intel/parameters/power_save
+ echo 1 > /dev/dsp
+ fi
+ ;;
+ stop)
+ stat_busy "Saving ALSA Levels"
+ /usr/sbin/alsactl store
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ rm_daemon alsa
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core-testing/alsa-utils/alsa.conf.d b/abs/core-testing/alsa-utils/alsa.conf.d
new file mode 100644
index 0000000..1fa3d38
--- /dev/null
+++ b/abs/core-testing/alsa-utils/alsa.conf.d
@@ -0,0 +1,4 @@
+# Enables powersaving mode for AC97 and hda_intel audio chips.
+# Set to 1 to enable powersaving.
+# Set to 0 to disable powersaving (default).
+POWERSAVE=0
diff --git a/abs/core-testing/alsa-utils/alsaconf.patch b/abs/core-testing/alsa-utils/alsaconf.patch
new file mode 100644
index 0000000..c1d2eb2
--- /dev/null
+++ b/abs/core-testing/alsa-utils/alsaconf.patch
@@ -0,0 +1,21 @@
+diff -Naur alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in alsa-utils-1.0.9a/alsaconf/alsaconf.in
+--- alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in 2005-03-24 00:24:52.000000000 -0800
++++ alsa-utils-1.0.9a/alsaconf/alsaconf.in 2005-07-18 09:25:02.000000000 -0700
+@@ -58,6 +58,8 @@
+ distribution="redhat"
+ elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then
+ distribution="fedora"
++elif test -f /etc/arch-release && grep -q "Arch" /etc/arch-release; then
++ distribution="arch"
+ else
+ distribution="unknown"
+ fi
+@@ -382,6 +384,8 @@
+ rcalsasound=/etc/rc.d/init.d/alsasound
+ elif [ -x /etc/init.d/alsa ]; then
+ rcalsasound=/etc/init.d/alsa
++elif [ -x /etc/rc.d/alsa ]; then
++ rcalsasound=/etc/rc.d/alsa
+ else
+ rcalsasound=rcalsasound
+ fi
diff --git a/abs/core-testing/apache/PKGBUILD b/abs/core-testing/apache/PKGBUILD
new file mode 100644
index 0000000..0bd3936
--- /dev/null
+++ b/abs/core-testing/apache/PKGBUILD
@@ -0,0 +1,81 @@
+# $Id: PKGBUILD 4776 2008-07-09 21:51:30Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apache
+pkgver=2.2.9
+pkgrel=4
+pkgdesc="A high performance Unix-based HTTP server"
+arch=('i686' 'x86_64')
+options=('!libtool')
+url='http://www.apache.org/dist/httpd'
+license=('APACHE')
+backup=(etc/httpd/conf/httpd.conf
+ etc/httpd/conf/extra/httpd-{autoindex,dav,default,info,languages}.conf
+ etc/httpd/conf/extra/httpd-{manual,mpm,multilang-errordoc}.conf
+ etc/httpd/conf/extra/httpd-{ssl,userdir,vhosts}.conf)
+depends=('openssl>=0.9.8b' 'zlib' 'apr-util>=1.3.2-2' 'db>=4.7' 'pcre')
+install='httpd.install'
+source=("http://www.apache.org/dist/httpd/httpd-${pkgver}.tar.bz2"
+ 'httpd.logrotate' 'httpd' 'arch.layout')
+md5sums=('3afa8137dc1999be695a20b62fdf032b'
+ 'f4d627c64024c1b7b95efb5ffbaa625e'
+ 'fb6baeced65b7cf5b80083f278adebba'
+ '3d659d41276ba3bfcb20c231eb254e0c')
+
+build() {
+ cd ${srcdir}/httpd-${pkgver}
+
+ # set default user
+ sed -e 's#User daemon#User http#' \
+ -e 's#Group daemon#Group http#' \
+ -i docs/conf/httpd.conf.in || return 1
+
+ cat ${srcdir}/arch.layout >> config.layout
+ ./configure --enable-layout=Arch \
+ --enable-modules=all \
+ --enable-mods-shared=all \
+ --enable-so \
+ --enable-suexec \
+ --with-suexec-caller=http \
+ --with-suexec-docroot=/srv/http \
+ --with-suexec-logfile=/var/log/httpd/suexec.log \
+ --with-suexec-bin=/usr/sbin/suexec \
+ --with-suexec-uidmin=99 --with-suexec-gidmin=99 \
+ --enable-ldap --enable-authnz-ldap \
+ --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
+ --enable-ssl --with-ssl \
+ --enable-deflate --enable-cgid \
+ --enable-proxy --enable-proxy-connect \
+ --enable-proxy-http --enable-proxy-ftp \
+ --enable-dbd \
+ --with-apr=/usr/bin/apr-1-config \
+ --with-apr-util=/usr/bin/apu-1-config \
+ --with-pcre=/usr || return 1
+
+ make || return 1
+
+ make DESTDIR=${pkgdir} install || return 1
+ install -D -m755 ${srcdir}/httpd ${pkgdir}/etc/rc.d/httpd
+ install -D -m644 ${srcdir}/httpd.logrotate ${pkgdir}/etc/logrotate.d/httpd
+
+ # symlinks for /etc/httpd
+ ln -fs /var/log/httpd ${pkgdir}/etc/httpd/logs
+ ln -fs /var/run/httpd ${pkgdir}/etc/httpd/run
+ ln -fs /usr/lib/httpd/modules ${pkgdir}/etc/httpd/modules
+ ln -fs /usr/lib/httpd/build ${pkgdir}/etc/httpd/build
+
+ # set sane defaults
+ sed -e 's#/usr/lib/httpd/modules/#modules/#' \
+ -e 's|#\(Include conf/extra/httpd-multilang-errordoc.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-autoindex.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-languages.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-userdir.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-default.conf\)|\1|' \
+ -i ${pkgdir}/etc/httpd/conf/httpd.conf || return 1
+
+ # cleanup
+ rm -rf ${pkgdir}/usr/share/httpd/manual
+ rm -rf ${pkgdir}/etc/httpd/conf/original
+ rm -rf ${pkgdir}/srv/http/*
+ rmdir ${pkgdir}/usr/bin
+}
diff --git a/abs/core-testing/apache/arch.layout b/abs/core-testing/apache/arch.layout
new file mode 100644
index 0000000..ab59db8
--- /dev/null
+++ b/abs/core-testing/apache/arch.layout
@@ -0,0 +1,22 @@
+<Layout Arch>
+ prefix: /etc/httpd
+ exec_prefix: /usr
+ bindir: /usr/bin
+ sbindir: /usr/sbin
+ libdir: /usr/lib/httpd
+ libexecdir: /usr/lib/httpd/modules
+ mandir: /usr/share/man
+ sysconfdir: /etc/httpd/conf
+ datadir: /usr/share/httpd
+ installbuilddir: /usr/lib/httpd/build
+ errordir: /usr/share/httpd/error
+ iconsdir: /usr/share/httpd/icons
+ htdocsdir: /srv/http
+ manualdir: /usr/share/httpd/manual
+ cgidir: /srv/http/cgi-bin
+ includedir: /usr/include/httpd
+ localstatedir: /var
+ runtimedir: /var/run/httpd
+ logfiledir: /var/log/httpd
+ proxycachedir: /var/cache/httpd
+</Layout> \ No newline at end of file
diff --git a/abs/core-testing/apache/httpd b/abs/core-testing/apache/httpd
new file mode 100755
index 0000000..da4de25
--- /dev/null
+++ b/abs/core-testing/apache/httpd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting HTTP Daemon"
+ /usr/sbin/apachectl start &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon httpd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping HTTP Daemon"
+ /usr/sbin/apachectl stop &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon httpd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ reload)
+ if [ -f /var/run/httpd/httpd.pid ]; then
+ status "Reloading HTTP Configuration" kill -HUP `cat /var/run/httpd/httpd.pid`
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|reload}"
+esac
diff --git a/abs/core-testing/apache/httpd.install b/abs/core-testing/apache/httpd.install
new file mode 100644
index 0000000..f72141a
--- /dev/null
+++ b/abs/core-testing/apache/httpd.install
@@ -0,0 +1,16 @@
+post_upgrade() {
+ if [ $(vercmp '2.2.8' $2) -ge 0 ]; then
+ echo '
+ ==> New default DocumentRoot
+
+ Apache httpd uses /srv/http as default DocumentRoot.
+ You can still use your current DocumentRoot
+
+ ==> New default user and group
+
+ Instead of "nobody" apache runs as user/group "http" by default now. You might
+ want to adjust your httpd.conf according to this change. But you can still
+ run httpd as nobody.
+ '
+ fi
+} \ No newline at end of file
diff --git a/abs/core-testing/apache/httpd.logrotate b/abs/core-testing/apache/httpd.logrotate
new file mode 100644
index 0000000..3f9298c
--- /dev/null
+++ b/abs/core-testing/apache/httpd.logrotate
@@ -0,0 +1,5 @@
+/var/log/httpd/*log {
+ postrotate
+ /bin/kill -HUP `cat /var/run/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true
+ endscript
+}
diff --git a/abs/core-testing/apr-util/PKGBUILD b/abs/core-testing/apr-util/PKGBUILD
new file mode 100644
index 0000000..cce5804
--- /dev/null
+++ b/abs/core-testing/apr-util/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4551 2008-07-08 03:25:33Z allan $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apr-util
+pkgver=1.3.2
+pkgrel=2
+pkgdesc="The Apache Portable Runtime"
+arch=('i686' 'x86_64')
+url="http://apr.apache.org/"
+depends=('apr>=1.3.2' 'gdbm' 'expat>=2.0' 'db>=4.7' 'libldap')
+options=('!libtool')
+license=('APACHE')
+source=("http://www.apache.org/dist/apr/apr-util-${pkgver}.tar.bz2")
+md5sums=('aa782fb9ced8b59c8e99419d8cdd1981')
+
+build() {
+ cd ${srcdir}/apr-util-${pkgver}
+
+ ./configure --prefix=/usr --with-apr=/usr \
+ --without-pgsql --without-mysql --without-sqlite2 --without-sqlite3 \
+ --with-berkeley-db=/usr --with-gdbm=/usr --with-ldap
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core-testing/apr/PKGBUILD b/abs/core-testing/apr/PKGBUILD
new file mode 100644
index 0000000..561e8e3
--- /dev/null
+++ b/abs/core-testing/apr/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 8457 2008-08-11 22:13:07Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apr
+pkgver=1.3.2
+pkgrel=2
+pkgdesc="The Apache Portable Runtime"
+arch=('i686' 'x86_64')
+url="http://apr.apache.org/"
+depends=('e2fsprogs')
+options=('!libtool')
+license=('APACHE')
+source=("http://www.apache.org/dist/apr/apr-${pkgver}.tar.bz2")
+md5sums=('a0631c63640176371dd4a5bf13beeee8')
+
+build() {
+ cd ${srcdir}/apr-${pkgver}
+
+ ./configure --prefix=/usr --includedir=/usr/include/apr-1 \
+ --with-installbuilddir=/usr/share/apr-1/build \
+ --enable-nonportable-atomics \
+ --with-devrandom=/dev/urandom
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core-testing/aspell/PKGBUILD b/abs/core-testing/aspell/PKGBUILD
new file mode 100644
index 0000000..0b8a590
--- /dev/null
+++ b/abs/core-testing/aspell/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 521 2008-04-20 13:00:37Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Jochem Kossen <j.kossen@home.nl>
+pkgname=aspell
+pkgver=0.60.6
+_pkgmajorver=0.60
+pkgrel=1
+pkgdesc="A Free and Open Source spell checker designed to eventually replace Ispell"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gcc-libs' 'ncurses')
+options=(!libtool)
+source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+install=aspell.install
+url="http://aspell.net/"
+md5sums=('bc80f0198773d5c05086522be67334eb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ ln -s ${pkgname}-${_pkgmajorver} ${startdir}/pkg/usr/lib/${pkgname}
+}
diff --git a/abs/core-testing/aspell/aspell.install b/abs/core-testing/aspell/aspell.install
new file mode 100644
index 0000000..b635a4a
--- /dev/null
+++ b/abs/core-testing/aspell/aspell.install
@@ -0,0 +1,8 @@
+post_install() {
+ echo "NOTE: aspell comes with no default dictionary"
+}
+
+op=$1
+shift
+
+[ "$(type -t "$op")" = "function" ] && $op "$@"
diff --git a/abs/core-testing/atk/PKGBUILD b/abs/core-testing/atk/PKGBUILD
new file mode 100644
index 0000000..90ba910
--- /dev/null
+++ b/abs/core-testing/atk/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=atk
+pkgver=1.22.0
+pkgrel=1
+pkgdesc="A library providing a set of interfaces for accessibility"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glib2>=2.16.0')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.22/${pkgname}-${pkgver}.tar.bz2)
+url='http://www.gtk.org/'
+md5sums=('06a2b39a22d5ca35c47435da6b9643ac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/attr/PKGBUILD b/abs/core-testing/attr/PKGBUILD
new file mode 100644
index 0000000..3100b24
--- /dev/null
+++ b/abs/core-testing/attr/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=attr
+pkgver=2.4.41
+pkgrel=10
+pkgdesc="Extended attribute support library for ACL support"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('LGPL')
+groups=('base')
+depends=('glibc')
+makedepends=('gettext')
+replaces=('xfsattr')
+provides=('xfsattr')
+conflicts=('xfsattr')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_${pkgver}-1.tar.gz)
+md5sums=('867eb6e8863e39900382d77e2b538696')
+
+build() {
+ cd $startdir/src/attr-$pkgver
+ autoconf
+ ./configure --prefix=/usr
+ sed -i -e 's/man2//g' man/Makefile
+ make || return 1
+ make prefix=${startdir}/pkg/usr install install-lib install-dev
+
+ # tidy up
+ cd "${startdir}/pkg"
+
+ mkdir -v lib
+ mv -v usr/lib/libattr.so* lib/
+ ln -sv ../../lib/libattr.so.1 usr/lib/libattr.so
+
+ mv -v usr/libexec/libattr.{a,la} usr/lib/
+ rm -rvf usr/libexec
+}
diff --git a/abs/core-testing/aufs-utils/PKGBUILD b/abs/core-testing/aufs-utils/PKGBUILD
new file mode 100644
index 0000000..b845405
--- /dev/null
+++ b/abs/core-testing/aufs-utils/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 2265 2008-05-30 12:12:12Z paul $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <pjmattal@elys.com>
+pkgname=aufs-utils
+pkgver=20080527
+pkgrel=1
+_kernver='2.6.26-ARCH'
+pkgdesc="Another Unionfs Implementation that supports NFS branches"
+arch=('i686' 'x86_64')
+url="http://aufs.sourceforge.net/"
+license=('GPL2')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/aufs/aufs-$pkgver.tar.gz)
+md5sums=('4378221aa5763d1f4408a0bbb0e80f0a')
+
+build() {
+ cd $startdir/src/aufs || return 1
+
+ # configure for NFS by:
+ # 1) configure local.mk to use FILP and LHASH
+ sed -i 's|CONFIG_AUFS_PUT_FILP_PATCH =|CONFIG_AUFS_PUT_FILP_PATCH = y|' \
+ local.mk || return 1
+ sed -i 's|CONFIG_AUFS_LHASH_PATCH =|CONFIG_AUFS_LHASH_PATCH = y|' \
+ local.mk || return 1
+ # 2) configure local.mk NOT to use FAKE_DM
+ sed -i 's|CONFIG_AUFS_FAKE_DM = y|CONFIG_AUFS_FAKE_DM = |' \
+ local.mk || return 1
+
+ # build
+ make KDIR=/usr/src/linux-$_kernver/ -f local.mk || return 1
+
+ # install
+ install -D -m755 util/aufind.sh $startdir/pkg/usr/bin/aufind.sh || return 1
+ install -D -m755 util/aulchown $startdir/pkg/usr/bin/aulchown || return 1
+ install -D -m755 util/auplink $startdir/pkg/usr/bin/auplink || return 1
+ install -D -m755 util/mount.aufs $startdir/pkg/sbin/mount.aufs || return 1
+ install -D -m755 util/umount.aufs $startdir/pkg/sbin/umount.aufs || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/aufs/PKGBUILD b/abs/core-testing/aufs/PKGBUILD
new file mode 100644
index 0000000..57b6e24
--- /dev/null
+++ b/abs/core-testing/aufs/PKGBUILD
@@ -0,0 +1,57 @@
+# $Id: PKGBUILD 5885 2008-07-21 19:28:11Z thomas $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <pjmattal@elys.com>
+pkgname=aufs
+pkgver=20080527
+pkgrel=2
+_kernver='2.6.26-ARCH'
+pkgdesc="Another Unionfs Implementation that supports NFS branches"
+arch=('i686' 'x86_64')
+url="http://aufs.sourceforge.net/"
+license=('GPL2')
+depends=('kernel26>=2.6.26-1' 'kernel26<=2.6.27' 'glibc' 'aufs-utils')
+install=$pkgname.install
+source=(ftp://ftp.archlinux.org/other/aufs/$pkgname-$pkgver.tar.gz)
+options=(!libtool !makeflags)
+md5sums=('4378221aa5763d1f4408a0bbb0e80f0a')
+
+build() {
+ cd $startdir/src/$pkgname || return 1
+
+ # use splice functions exported by unionfs kernel patch
+ # - important for loopback fs mounts
+ sed s'|#if.*KERNEL_VERSION(2, 6, 26).*|#if 0|' -i fs/aufs25/vfsub.h \
+ || return 1
+ sed -i 's|CONFIG_AUFS_SPLICE_PATCH =|CONFIG_AUFS_SPLICE_PATCH = y|' \
+ local.mk || return 1
+
+ # patch for spin_lock conflict with the new unionfs patch
+ sed s'|#if.*KERNEL_VERSION(2, 6, 26).*|#if 0|' -i fs/aufs25/cpup.c \
+ || return 1
+
+ sed -i 's|.*CONFIG_AUFS_SHWH =.*|CONFIG_AUFS_SHWH = y|' \
+ local.mk || return 1
+
+ # configure for NFS by:
+ # 1) configure local.mk to use FILP and LHASH
+ sed -i 's|CONFIG_AUFS_PUT_FILP_PATCH =|CONFIG_AUFS_PUT_FILP_PATCH = y|' \
+ local.mk || return 1
+ sed -i 's|CONFIG_AUFS_LHASH_PATCH =|CONFIG_AUFS_LHASH_PATCH = y|' \
+ local.mk || return 1
+ # 2) configure local.mk NOT to use FAKE_DM
+ sed -i 's|CONFIG_AUFS_FAKE_DM = y|CONFIG_AUFS_FAKE_DM = |' \
+ local.mk || return 1
+
+ # build
+ make KDIR=/usr/src/linux-$_kernver/ -f local.mk || return 1
+
+ # install
+ install -D -m644 fs/aufs25/aufs.ko \
+ $startdir/pkg/lib/modules/$_kernver/fs/aufs25/aufs.ko || return 1
+
+ # tweak the install script for the right kernel version
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
+ $startdir/$pkgname.install || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/aufs/aufs.install b/abs/core-testing/aufs/aufs.install
new file mode 100644
index 0000000..42d039a
--- /dev/null
+++ b/abs/core-testing/aufs/aufs.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/b43-fwcutter/PKGBUILD b/abs/core-testing/b43-fwcutter/PKGBUILD
new file mode 100644
index 0000000..a1f73b8
--- /dev/null
+++ b/abs/core-testing/b43-fwcutter/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=b43-fwcutter
+pkgver=011
+pkgrel=1
+pkgdesc="firmware extractor for the bcm43xx kernel module"
+url="http://linuxwireless.org/en/users/Drivers/b43"
+depends=('glibc')
+license=('GPL')
+arch=('i686' 'x86_64')
+source=(http://bu3sch.de/b43/fwcutter/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3db2f4de85a459451f5b391cf67a8d44')
+
+build()
+{
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ install -D -m755 b43-fwcutter $startdir/pkg/usr/bin/b43-fwcutter || return 1
+ install -D -m644 b43-fwcutter.1 $startdir/pkg/usr/share/man/man1/b43-fwcutter.1 || return 1
+}
diff --git a/abs/core-testing/base.list b/abs/core-testing/base.list
new file mode 100755
index 0000000..004186f
--- /dev/null
+++ b/abs/core-testing/base.list
@@ -0,0 +1,98 @@
+base acl
+base attr
+base bash
+base binutils
+base bzip2
+base ca-certificates
+base coreutils
+base cpio
+base cracklib
+base cryptsetup
+base dash
+base db
+base dcron
+base device-mapper
+base dhcpcd
+base dialog
+base dmapi
+base e2fsprogs
+base file
+base filesystem
+base findutils
+base gawk
+base gcc-libs
+base gdbm
+base gen-init-cpio
+base gettext
+base glibc
+base grep
+base groff
+base grub
+base gzip
+base hdparm
+base hwdetect
+base initscripts
+base iputils
+base jfsutils
+base kbd
+base kernel-headers
+base kernel26
+base klibc
+base klibc-extras
+base klibc-kbd
+base klibc-module-init-tools
+base klibc-udev
+base less
+base libarchive
+base libdownload
+base libgcrypt
+base libgpg-error
+base libpcap
+base libusb
+base licenses
+base logrotate
+base lvm2
+base lzo2
+base mailx
+base man
+base man-pages
+base mdadm
+base mkinitcpio
+base mlocate
+base module-init-tools
+base nano
+base ncurses
+base net-tools
+base openssl
+base pacman
+base pam
+base pciutils
+base pcmciautils
+base pcre
+base perl
+base popt
+base ppp
+base procinfo
+base procps
+base psmisc
+base readline
+base reiserfsprogs
+base rp-pppoe
+base sdparm
+base sed
+base shadow
+base sysfsutils
+base syslog-ng
+base sysvinit
+base tar
+base tcp_wrappers
+base tzdata
+base udev
+base usbutils
+base util-linux-ng
+base vi
+base wget
+base which
+base wpa_supplicant
+base xfsprogs
+base zlib
diff --git a/abs/core-testing/bash/PKGBUILD b/abs/core-testing/bash/PKGBUILD
new file mode 100644
index 0000000..24f80ef
--- /dev/null
+++ b/abs/core-testing/bash/PKGBUILD
@@ -0,0 +1,87 @@
+# $Id: PKGBUILD 5542 2008-07-18 15:21:56Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=bash
+_patchlevel=039
+pkgver=3.2.$_patchlevel
+pkgrel=11
+pkgdesc="The GNU Bourne Again shell"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.gnu.org/software/bash/bash.html"
+groups=('base')
+backup=(etc/profile.bash etc/skel/.bashrc etc/skel/.bash_profile)
+depends=('readline>=5.2' 'glibc')
+provides=('sh')
+source=(http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz
+ bash-noinfo.patch profile.bash bashrc)
+for p in $(seq -w 001 $_patchlevel); do
+ source=(${source[@]} http://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-$p)
+done
+md5sums=('00bfa16d58e034e3c2aa27f390390d30'
+ 'f2a3cf51e58f9b82af50b861191d96fd'
+ 'c2fae355facefcac8a732cce877da194'
+ '9451109f3fe09d6381cbf36de9fbf06f'
+ 'd8e10c754f477e3f3a581af566b89301'
+ 'd38a5288b2f0ea6c9ac76b66cc74ef7d'
+ '0b90d37911827d8cb95f3b4353cc225e'
+ '8062f3a59631f58d78b180d83759b68a'
+ '585b5943fadf0875ced243b245adde58'
+ '1d5732e01ea938aeed42f3def131fa4d'
+ 'dcd0cc5d801607827f7c851e72b0eabc'
+ 'bb3c7dd11198c0ab93d0e960bebf6256'
+ '434a6f29b0ca5f1ab784b2437ae8eaed'
+ '2efff04dd246fcf63bd4b99f77c9a081'
+ '1dd104342f6920dfaf5efb3131e922e0'
+ '4f24b696ab78bdfae4f9cb7eb59b835d'
+ '7c40addbf1187a26ae1c8373ed383442'
+ '28e88c9f8679e99ac590d4a4a8227c56'
+ '7c17d29675bd0d49470f162774385f80'
+ 'a1edaa98b4449fe2205fa75448b7b105'
+ '889ed119bbf9d363660b9a0127f35efa'
+ 'a7d3f85fa687d2c1b5a134839f6d395d'
+ 'f0399da4007e46fc5820ce25d07425b9'
+ 'b76602281c3104d904fd064510fe0c21'
+ '923374ae4403c92820f711e62e1d01a5'
+ 'c82d3bd14e373878b2a680dce18d1596'
+ '987c949a77b4b0ffe4a2597141e77635'
+ '5a2b976e761ab83f0fc7daae11451b86'
+ '08668dc2825f65eced9cac6b09ce1b45'
+ 'f35b2b217f088ff009f956894550d41d'
+ 'b5ff2b9610c61290f773c4b02cc1a37d'
+ '016f5b56c93404d32aea09385f0fc13e'
+ 'a81420626d4d88d0dce2ffac0ac56341'
+ '11f91baf970c132949f9072ee93f2ea6'
+ 'f6bbc1e8ec0246740731c728ef476191'
+ '8180ec936770579bce69f0816c2dd878'
+ '3cec33c3711860c4c6b7614afeec7870'
+ '7bc6c5b5f38b7027152f8db0458a2e14'
+ 'a2db61fe90e39371d0e6cd2285ec9208'
+ '95c70c7ae9de5bd3659c86284be7fb76'
+ '62b876a3d7cd192cc8db2476fbb6b7b9'
+ 'aca3afc341bd3e5a0d8a3b4ca40dbb3f'
+ 'e240c34f979b64bcb83c5f6567110bb1')
+
+build() {
+ cd ${startdir}/src/${pkgname}-3.2
+ for p in ../bash32-*; do
+ msg "applying patch ${p}"
+ patch -Np0 -i ${p} || return 1
+ done
+ patch -Np1 -i ../bash-noinfo.patch || return 1
+ ./configure --prefix=/usr --with-curses --enable-readline \
+ --without-bash-malloc --with-installed-readline \
+ --bindir=/bin --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ install -D -m644 ${startdir}/src/profile.bash ${startdir}/pkg/etc/profile.bash
+
+ # for now, bash is our default /bin/sh
+ cd ${startdir}/pkg/bin
+ ln -s bash sh
+
+ mkdir -p $startdir/pkg/etc/skel/
+ install -D -m644 $startdir/src/bashrc $startdir/pkg/etc/skel/.bashrc
+ echo ". \$HOME/.bashrc" >$startdir/pkg/etc/skel/.bash_profile
+}
diff --git a/abs/core-testing/bash/bash-noinfo.patch b/abs/core-testing/bash/bash-noinfo.patch
new file mode 100644
index 0000000..856ec80
--- /dev/null
+++ b/abs/core-testing/bash/bash-noinfo.patch
@@ -0,0 +1,12 @@
+diff -Naur bash-3.0-orig/doc/Makefile.in bash-3.0/doc/Makefile.in
+--- bash-3.0-orig/doc/Makefile.in 2004-07-27 05:57:48.000000000 -0700
++++ bash-3.0/doc/Makefile.in 2005-02-11 22:44:49.000000000 -0800
+@@ -220,7 +220,7 @@
+ $(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(htmldir) ; \
+ fi
+
+-install: info installdirs bash.info
++install: installdirs
+ -$(INSTALL_DATA) $(srcdir)/bash.1 $(DESTDIR)$(man1dir)/bash${man1ext}
+ -$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
+ # uncomment the next line to install the builtins man page
diff --git a/abs/core-testing/bash/bashrc b/abs/core-testing/bash/bashrc
new file mode 100644
index 0000000..fcabce0
--- /dev/null
+++ b/abs/core-testing/bash/bashrc
@@ -0,0 +1,3 @@
+alias ls='ls --color=auto'
+PS1='[\u@\h \W]\$ '
+
diff --git a/abs/core-testing/bash/profile b/abs/core-testing/bash/profile
new file mode 100644
index 0000000..ca1d402
--- /dev/null
+++ b/abs/core-testing/bash/profile
@@ -0,0 +1,35 @@
+#
+# /etc/profile
+#
+
+export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/opt/bin"
+
+export MANPATH="/usr/man:/usr/X11R6/man"
+export LESSCHARSET="latin1"
+export INPUTRC="/etc/inputrc"
+export LESS="-R"
+
+export LC_COLLATE="C"
+
+export COLUMNS LINES
+
+export PS1='[\u@\h \W]\$ '
+export PS2='> '
+
+umask 022
+
+if [ "$TERM" = "xterm" -o "$TERM" = "xterm-color" -o "$TERM" = "rxvt" -o "$TERM" = "xterm-xfree86" ]; then
+ PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+fi
+
+# load profiles from /etc/profile.d
+# (to disable a profile, just remove execute permission on it)
+if [ `ls -A1 /etc/profile.d/ | wc -l` -gt 0 ]; then
+ for profile in /etc/profile.d/*.sh; do
+ if [ -x $profile ]; then
+ . $profile
+ fi
+ done
+ unset profile
+fi
+# End of file
diff --git a/abs/core-testing/bash/profile.bash b/abs/core-testing/bash/profile.bash
new file mode 100644
index 0000000..8a7e1aa
--- /dev/null
+++ b/abs/core-testing/bash/profile.bash
@@ -0,0 +1,25 @@
+#
+# /etc/profile.bash
+# Global settings for bash shells
+#
+
+PS1='[\u@\h \W]\$ '
+PS2='> '
+PS3='> '
+PS4='+ '
+
+export PS1 PS2 PS3 PS4
+
+#In the future we may want to add more ulimit entries here,
+# in the offchance that /etc/security/limits.conf is skipped
+ulimit -Sc 0 #Don't create core files
+
+if test "$TERM" = "xterm" -o \
+ "$TERM" = "xterm-color" -o \
+ "$TERM" = "xterm-256color" -o \
+ "$TERM" = "rxvt" -o \
+ "$TERM" = "rxvt-unicode" -o \
+ "$TERM" = "xterm-xfree86"; then
+ PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+ export PROMPT_COMMAND
+fi
diff --git a/abs/core-testing/bc/PKGBUILD b/abs/core-testing/bc/PKGBUILD
new file mode 100644
index 0000000..88a85df
--- /dev/null
+++ b/abs/core-testing/bc/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=bc
+pkgver=1.06
+pkgrel=4
+pkgdesc="An arbitrary precision calculator language"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('readline')
+replaces=(bc-readline)
+conflicts=(bc-readline)
+source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ build-fix.patch)
+md5sums=('d44b5dddebd8a7a7309aea6c36fda117' 'fc7ecbd9e55ef04c6d3a495692626116')
+
+build() {
+ CFLAGS="$CFLAGS -O3"
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/build-fix.patch || return 1
+ ./configure --prefix=/usr --with-readline
+ make LEX="flex -I" || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/bc/build-fix.patch b/abs/core-testing/bc/build-fix.patch
new file mode 100644
index 0000000..98a4082
--- /dev/null
+++ b/abs/core-testing/bc/build-fix.patch
@@ -0,0 +1,13 @@
+diff -wbBur bc-1.06/bc/scan.l bc-1.06.my/bc/scan.l
+--- bc-1.06/bc/scan.l 2000-09-13 22:25:47 +0400
++++ bc-1.06.my/bc/scan.l 2006-12-25 12:39:34 +0300
+@@ -143,7 +143,9 @@
+
+ /* Definitions for readline access. */
+ extern FILE *rl_instream;
++#if 0
+ _PROTOTYPE(char *readline, (char *));
++#endif
+
+ /* rl_input puts upto MAX characters into BUF with the number put in
+ BUF placed in *RESULT. If the yy input file is the same as
diff --git a/abs/core-testing/bigreqsproto/PKGBUILD b/abs/core-testing/bigreqsproto/PKGBUILD
new file mode 100644
index 0000000..2b2bc95
--- /dev/null
+++ b/abs/core-testing/bigreqsproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=bigreqsproto
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Big Requests extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('95c29d9d10bf2868996c0c47a3b9a8dc')
+sha1sums=('8f6c112f607a137dce5d8958753c770ac3f06c14')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/binutils/PKGBUILD b/abs/core-testing/binutils/PKGBUILD
new file mode 100644
index 0000000..f958da6
--- /dev/null
+++ b/abs/core-testing/binutils/PKGBUILD
@@ -0,0 +1,67 @@
+# $Id: PKGBUILD 2707 2008-06-12 14:03:09Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+# compile always twice: first binutils, then gcc, then binutils again
+
+pkgname=binutils
+pkgver=2.18
+pkgrel=17
+_date=20080610
+pkgdesc="A set of programs to assemble and manipulate binary and object files"
+arch=('i686' 'x86_64')
+url="http://sources.redhat.com/binutils"
+license=('GPL')
+groups=('base')
+options=('!libtool' '!distcc' '!ccache')
+depends=('glibc>=2.8-1')
+makedepends=('texinfo>=4.12-2')
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}_${_date}.tar.bz2)
+md5sums=('9847b4141a1c99558cfd88dd65182566')
+
+build() {
+ # for cvs checkout
+# mkdir ${startdir}/src/${pkgname}-${_date}
+# cd ${startdir}/src/${pkgname}-${_date}
+# export _TAG=binutils-2_18-branch
+# export 'CVSROOT=:pserver:anoncvs@sourceware.org:/cvs/src'
+# cvs -z9 co -r $_TAG binutils || return 1
+# cd src && tar -cvjf ../binutils-2.18_${_date}.tar.bz2 *
+# return 1
+
+ cd ${startdir}/src
+ autoconf
+
+ mkdir build
+ cd build
+
+ CC="gcc -L`pwd`/bfd/.libs/"
+ if [ "${CARCH}" = "x86_64" ]; then
+ ../configure --prefix=/usr --enable-shared --enable-64-bit-bfd --disable-multilib
+ else
+ ../configure --prefix=/usr --enable-shared
+ fi
+
+ # This checks the host environment and makes sure all the necessary tools are available to compile Binutils.
+ make configure-host || return 1
+
+ make tooldir=${startdir}/pkg/usr || return 1
+ make prefix=${startdir}/pkg/usr tooldir=${startdir}/pkg/usr install
+ install -m 644 ../include/libiberty.h ${startdir}/pkg/usr/include
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # Rebuild libiberty.a with -fPIC
+ make -C libiberty clean
+ make CFLAGS="$CFLAGS -fPIC" -C libiberty
+ install -m 644 libiberty/libiberty.a ${startdir}/pkg/usr/lib
+ # Rebuild libbfd.a with -fPIC
+ make -C bfd clean
+ make CFLAGS="$CFLAGS -fPIC" -C bfd
+ install -m 644 bfd/libbfd.a ${startdir}/pkg/usr/lib
+ fi
+
+ rm -f ${startdir}/pkg/usr/share/man/man1/{dlltool,nlmconv,windres,windmc}*
+
+ # Remove these symlinks, with binutils prereleases they are not ABI stable.
+ # Programs should compile static to the .a file.
+ rm -f ${startdir}/pkg/usr/lib/lib{bfd,opcodes}.so
+}
diff --git a/abs/core-testing/bzip2/PKGBUILD b/abs/core-testing/bzip2/PKGBUILD
new file mode 100644
index 0000000..bd3b1c2
--- /dev/null
+++ b/abs/core-testing/bzip2/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 7561 2008-08-02 22:14:50Z jgc $
+# Maintainer: Judd <jvinet@zeroflux.org>
+
+pkgname=bzip2
+pkgver=1.0.5
+pkgrel=12
+pkgdesc="A high-quality data compression program"
+arch=(i686 x86_64)
+license=('custom')
+url="http://sources.redhat.com/bzip2"
+groups=('base')
+depends=('glibc')
+source=(http://www.bzip.org/$pkgver/bzip2-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/bin $startdir/pkg/usr/share/man/man1
+ mkdir -p $startdir/pkg/usr/include $startdir/pkg/usr/lib
+ mkdir -p $startdir/pkg/lib
+ # add large-file support
+ sed -e 's/^CFLAGS=\(.*\)$/CFLAGS=\1 \$(BIGFILES)/' -i ./Makefile-libbz2_so
+ make -f Makefile-libbz2_so || return 1
+ make bzip2recover libbz2.a || return 1
+ ln -s libbz2.so.1.0.4 libbz2.so
+ ln -s libbz2.so.1.0.4 libbz2.so.1
+ cp bzip2-shared $startdir/pkg/bin/bzip2
+ cp bzip2recover $startdir/pkg/bin
+ cp bzip2.1 $startdir/pkg/usr/share/man/man1
+ mkdir -p $startdir/pkg/usr/include
+ cp bzlib.h $startdir/pkg/usr/include
+ cp -a libbz2.so* $startdir/pkg/lib
+ rm -f $startdir/pkg/usr/lib/libbz2.a
+ cp libbz2.a $startdir/pkg/usr/lib
+ cd $startdir/pkg/usr/lib
+ ln -sf ../../lib/libbz2.so
+ cd $startdir/pkg/bin
+ ln -sf bzip2 bunzip2
+ ln -sf bzip2 bzcat
+ cd $startdir/pkg/usr/share/man/man1
+ ln -sf bzip2.1 bunzip2.1
+ ln -sf bzip2.1 bzcat.1
+ ln -sf bzip2.1 bzip2recover.1
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
+md5sums=('3c15a0c8d1d3ee1c46a1634d00617b1a')
diff --git a/abs/core-testing/ca-certificates/PKGBUILD b/abs/core-testing/ca-certificates/PKGBUILD
new file mode 100644
index 0000000..03871c6
--- /dev/null
+++ b/abs/core-testing/ca-certificates/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 9715 2008-08-18 10:20:37Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=ca-certificates
+pkgver=20080809
+pkgrel=13
+pkgdesc='Common CA certificates'
+arch=('i686' 'x86_64')
+url='http://packages.qa.debian.org/c/ca-certificates.html'
+license=('MPL' 'GPL')
+source=("http://ftp.debian.org/debian/pool/main/c/${pkgname}/${pkgname}_${pkgver}.tar.gz")
+depends=('bash' 'run-parts' 'openssl' 'findutils' 'coreutils' 'sed')
+makedepends=('ruby')
+groups=('base')
+install=ca-certificates.install
+backup=('etc/ca-certificates.conf')
+md5sums=('c155f5059006b94ad0aea7018161ab37')
+
+build() {
+ cd $srcdir/$pkgname
+
+ install -d -m755 $pkgdir/{etc/ca-certificates/update.d,usr/{sbin,share/ca-certificates}}
+ install -D -m644 sbin/update-ca-certificates.8 $pkgdir/usr/share/man/man8/update-ca-certificates.8
+ make
+ make install DESTDIR=$pkgdir
+
+ (
+ echo "# Automatically generated by ${pkgname}-${pkgver}-${pkgrel}"
+ echo "# "
+ cd $pkgdir/usr/share/ca-certificates
+ find . -name '*.crt' | sort | cut -b3-
+ ) > $pkgdir/etc/ca-certificates.conf
+}
diff --git a/abs/core-testing/ca-certificates/ca-certificates.install b/abs/core-testing/ca-certificates/ca-certificates.install
new file mode 100644
index 0000000..3a7ac28
--- /dev/null
+++ b/abs/core-testing/ca-certificates/ca-certificates.install
@@ -0,0 +1,7 @@
+post_install() {
+ usr/sbin/update-ca-certificates --fresh
+}
+
+post_upgrade() {
+ post_install
+}
diff --git a/abs/core-testing/cairo/PKGBUILD b/abs/core-testing/cairo/PKGBUILD
new file mode 100644
index 0000000..16f38b3
--- /dev/null
+++ b/abs/core-testing/cairo/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 491 2008-04-20 11:39:47Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Brice Carpentier <brice@daknet.org>
+
+pkgname=cairo
+pkgver=1.6.4
+pkgrel=1
+pkgdesc="Cairo vector graphics library"
+arch=(i686 x86_64)
+license=('LGPL' 'MPL')
+url="http://cairographics.org/"
+depends=('libpng>=1.2.25' 'libxrender' 'fontconfig>=2.5.0' 'pixman>=0.10.0')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://cairographics.org/releases/${pkgname}-${pkgver}.tar.gz)
+md5sums=('a198d509f9e3a35b78de8bb02174ebb9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/cdparanoia/ChangeLog b/abs/core-testing/cdparanoia/ChangeLog
new file mode 100644
index 0000000..f1873ff
--- /dev/null
+++ b/abs/core-testing/cdparanoia/ChangeLog
@@ -0,0 +1,18 @@
+2008-08-07 Alexander Fehr <pizzapunk gmail com>
+
+ * cdparanoia-10.1-1:
+ New upstream release.
+ Changed license to GPL.
+ Added !makeflags option.
+
+2008-07-07 Alexander Fehr <pizzapunk gmail com>
+
+ * cdparanoia-10.0-1:
+ New upstream release.
+ New maintainer.
+ Added arch variable.
+ Changed license to GPL3.
+ Fixed man page location.
+ Removed cdparanoia.patch.
+ Removed gcc34.patch.
+ Added ChangeLog.
diff --git a/abs/core-testing/cdparanoia/PKGBUILD b/abs/core-testing/cdparanoia/PKGBUILD
new file mode 100644
index 0000000..a29bac7
--- /dev/null
+++ b/abs/core-testing/cdparanoia/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8181 2008-08-08 15:48:07Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+
+pkgname=cdparanoia
+pkgver=10.1
+pkgrel=1
+pkgdesc="Compact Disc Digital Audio extraction tool"
+arch=('i686' 'x86_64')
+url="http://www.xiph.org/paranoia/"
+license=('GPL')
+depends=('glibc')
+options=('!makeflags')
+source=(http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-$pkgver.src.tgz)
+md5sums=('abf410217c4ba42f927bfd9d7b86e163')
+
+build() {
+ cd "$srcdir/cdparanoia-III-$pkgver"
+
+ ./configure --prefix=/usr --mandir=/usr/share/man || return 1
+ make || return 1
+ make prefix="$pkgdir/usr" MANDIR="$pkgdir/usr/share/man" install || return 1
+}
diff --git a/abs/core-testing/cdrdao/PKGBUILD b/abs/core-testing/cdrdao/PKGBUILD
new file mode 100644
index 0000000..ff79afd
--- /dev/null
+++ b/abs/core-testing/cdrdao/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=cdrdao
+pkgver=1.2.2
+pkgrel=2
+pkgdesc="Records audio/data CD-Rs in disk-at-once (DAO) mode"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://cdrdao.sourceforge.net/"
+depends=('gcc-libs' 'lame' 'libmad' 'libvorbis' 'libao')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ cdrdao-1.2.2-gcc43.patch)
+md5sums=('f0cbf36907406cb4f4c568f9e6669a34' '828963048850fe9e540c2b29ee987fd7')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/cdrdao-1.2.2-gcc43.patch
+ ./configure --prefix=/usr --with-lame
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/cdrdao/cdrdao-1.2.2-gcc43.patch b/abs/core-testing/cdrdao/cdrdao-1.2.2-gcc43.patch
new file mode 100644
index 0000000..f6707a9
--- /dev/null
+++ b/abs/core-testing/cdrdao/cdrdao-1.2.2-gcc43.patch
@@ -0,0 +1,73 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+## 09-gcc-3.4.dpatch by Matthias Klose <doko@debian.org>
+##
+## DP: Fix build failures with g++-4.3 (Closes: #455309).
+
+@DPATCH@
+
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatConverter.cc cdrdao-1.2.2/trackdb/FormatConverter.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatConverter.cc 2005-05-10 00:55:28.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatConverter.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -22,6 +22,7 @@
+ #include <ao/ao.h>
+ #endif
+ #include <fstream>
++#include <cstring>
+
+ #include "config.h"
+ #include "util.h"
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatOgg.cc cdrdao-1.2.2/trackdb/FormatOgg.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatOgg.cc 2005-04-22 02:01:46.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatOgg.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -18,6 +18,7 @@
+ */
+
+ #include <stdio.h>
++#include <cstring>
+
+ #include "util.h"
+ #include "FormatOgg.h"
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatMp3.cc cdrdao-1.2.2/trackdb/FormatMp3.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatMp3.cc 2005-09-24 20:28:43.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatMp3.cc 2008-03-07 11.14.07.000000000 +0000
+@@ -25,6 +25,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <cstring>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
+diff -Naurp cdrdao-1.2.2.orig/trackdb/TempFileManager.cc cdrdao-1.2.2/trackdb/TempFileManager.cc
+--- cdrdao-1.2.2.orig/trackdb/TempFileManager.cc 2005-04-22 02:01:46.000000000 +0000
++++ cdrdao-1.2.2/trackdb/TempFileManager.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -24,6 +24,7 @@
+ #include <sys/stat.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <cstring>
+
+ #define DEFAULT_TEMP_PATH "/tmp/"
+
+diff -Naurp cdrdao-1.2.2.orig/xdao/AudioCDProject.cc cdrdao-1.2.2/xdao/AudioCDProject.cc
+--- cdrdao-1.2.2.orig/xdao/AudioCDProject.cc 2006-09-18 10:42:26.000000000 +0000
++++ cdrdao-1.2.2/xdao/AudioCDProject.cc 2008-03-07 11:15:26.000000000 +0000
+@@ -18,6 +18,7 @@
+ */
+
+ #include <assert.h>
++#include <cstring>
+ #include <gtkmm.h>
+ #include <libgnome/gnome-i18n.h>
+
+diff -Naurp cdrdao-1.2.2.orig/xdao/TextEdit.cc cdrdao-1.2.2/xdao/TextEdit.cc
+--- cdrdao-1.2.2.orig/xdao/TextEdit.cc 2004-02-12 01:13:32.000000000 +0000
++++ cdrdao-1.2.2/xdao/TextEdit.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -21,6 +21,7 @@
+
+ #include <stddef.h>
+ #include <ctype.h>
++#include <cstring>
+
+ TextEdit::TextEdit(const char *sample) : Gtk::Entry()
+ {
diff --git a/abs/core-testing/cdrdao/gcc4.patch b/abs/core-testing/cdrdao/gcc4.patch
new file mode 100644
index 0000000..8fc84b7
--- /dev/null
+++ b/abs/core-testing/cdrdao/gcc4.patch
@@ -0,0 +1,23 @@
+--- cdrdao-1.2.0/trackdb/FormatConverter.h 2005-06-30 13:35:59.000000000 +0200
++++ cdrdao-1.2.0.az/trackdb/FormatConverter.h 2005-06-30 13:34:18.000000000 +0200
+@@ -95,7 +95,7 @@
+
+ // Convert all files contained in a given Toc object, and update the
+ // Toc accordingly. This is a big time blocking call.
+- FormatSupport::Status convert(Toc* toc);
++ FormatSupport::Status convert(class Toc* toc);
+
+ // Dynamic allocator.
+ FormatSupport* newConverter(const char* src);
+--- cdrdao-1.2.0/trackdb/CueParser.cc 2005-06-30 13:36:09.000000000 +0200
++++ cdrdao-1.2.0.az/trackdb/CueParser.cc 2005-06-30 13:36:22.000000000 +0200
+@@ -23,7 +23,7 @@
+
+ #include "Cue2Toc.h"
+
+-extern Toc *parseToc(const char* tocBuffer, const char *filename);
++extern class Toc *parseToc(const char* tocBuffer, const char *filename);
+
+ Toc *parseCue(FILE *fp, const char *filename)
+ {
+
diff --git a/abs/core-testing/cdrkit/ChangeLog b/abs/core-testing/cdrkit/ChangeLog
new file mode 100644
index 0000000..b09c057
--- /dev/null
+++ b/abs/core-testing/cdrkit/ChangeLog
@@ -0,0 +1,10 @@
+2008-07-14 Alexander Fehr <pizzapunk gmail com>
+
+ * cdrkit-1.1.8-1:
+ New upstream release.
+ New maintainer.
+ Changed license to GPL2.
+ Added dependency on bzip2.
+ Removed replaces cdrtools.
+ Cleaned up cdrtools compatibility symlinks.
+ Added ChangeLog.
diff --git a/abs/core-testing/cdrkit/PKGBUILD b/abs/core-testing/cdrkit/PKGBUILD
new file mode 100644
index 0000000..1f8bfa8
--- /dev/null
+++ b/abs/core-testing/cdrkit/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 5822 2008-07-21 11:34:04Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+
+pkgname=cdrkit
+pkgver=1.1.8
+pkgrel=1
+pkgdesc="Suite of programs for CD/DVD recording, ISO image creation, and audio CD extraction"
+arch=('i686' 'x86_64')
+url="http://cdrkit.org/"
+license=('GPL2')
+depends=('libcap' 'file' 'bzip2')
+makedepends=('cmake')
+provides=('cdrtools')
+conflicts=('cdrtools')
+source=(http://cdrkit.org/releases/cdrkit-$pkgver.tar.gz)
+md5sums=('97a9ea4e1bf59beb12aca649958d8c6c')
+
+build() {
+ cd "$srcdir/cdrkit-$pkgver"
+
+ make || return 1
+ make PREFIX="$pkgdir/usr" install || return 1
+
+ # Make symlinks for cdrtools compatibility
+ cd "$pkgdir/usr/bin"
+ ln -s wodim cdrecord || return 1
+ ln -s readom readcd || return 1
+ ln -s genisoimage mkisofs || return 1
+ ln -s genisoimage mkhybrid || return 1
+ ln -s icedax cdda2wav || return 1
+
+ cd "$pkgdir/usr/share/man/man1"
+ ln -s wodim.1 cdrecord.1 || return 1
+ ln -s readom.1 readcd.1 || return 1
+ ln -s genisoimage.1 mkisofs.1 || return 1
+ ln -s genisoimage.1 mkhybrid.1 || return 1
+ ln -s icedax.1 cdda2wav.1 || return 1
+}
diff --git a/abs/core-testing/compositeproto/PKGBUILD b/abs/core-testing/compositeproto/PKGBUILD
new file mode 100644
index 0000000..5ccaa8f
--- /dev/null
+++ b/abs/core-testing/compositeproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=compositeproto
+pkgver=0.4
+pkgrel=1
+pkgdesc="X11 Composite extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(fixesproto)
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('6281344d656d4e0c8e9db4918efe3d1d')
diff --git a/abs/core-testing/coreutils/PKGBUILD b/abs/core-testing/coreutils/PKGBUILD
new file mode 100644
index 0000000..bb35755
--- /dev/null
+++ b/abs/core-testing/coreutils/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 2936 2008-06-16 06:21:37Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=coreutils
+pkgver=6.12
+pkgrel=10
+pkgdesc="The basic file, shell and text manipulation utilities of the GNU operating system"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://www.gnu.org/software/coreutils"
+groups=('base')
+depends=('glibc>=2.7-9' 'shadow>=4.0.18.2-2' 'pam>=1.0.1-1' 'acl>=2.2.47-1')
+provides=('mktemp')
+conflicts=('mktemp')
+replaces=('sh-utils' 'fileutils' 'textutils' 'mktemp')
+backup=('etc/pam.d/su')
+options=('!emptydirs')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz
+ coreutils-i18n.patch
+ coreutils-uname.patch
+ coreutils-pam.patch
+ coreutils-6.10-configuration.patch
+ su)
+md5sums=('2ca9ac69823dbd567b905a9e9f53c4f6'
+ '64991a860ddb98a9b7a2a5a0221a399a'
+ '18d3ba178e2691242287b59bd81aedb9'
+ '8810a22cdc05d502a69b59511e9abf79'
+ 'e0f3edab474a4c96591c4f94a7962c9b'
+ 'fa85e5cce5d723275b14365ba71a8aad')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # only needed if new autoconf 2.62 is used
+ autoreconf
+
+ # added pam patch and i18n patch from fedora cvs
+ patch -Np1 -i ../coreutils-pam.patch || return 1
+ patch -Np1 -i ../coreutils-i18n.patch || return 1
+ patch -Np1 -i ../coreutils-6.10-configuration.patch || return 1
+ # from gentoo portage
+ patch -Np1 -i ../coreutils-uname.patch || return 1
+ # make head and tail recognize the old syntax (eg, tail -10)
+ export DEFAULT_POSIX2_VERSION=199209
+
+ autoconf
+ ./configure --prefix=/usr ac_cv_func_openat=no --enable-install-program=su --enable-pam
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ rm -f $startdir/pkg/usr/bin/hostname $startdir/pkg/usr/share/man/man1/hostname.1 || return 1
+ rm -f $startdir/pkg/usr/bin/uptime $startdir/pkg/usr/share/man/man1/uptime.1 || return 1
+ rm -f $startdir/pkg/usr/bin/groups $startdir/pkg/usr/share/man/man1/groups.1 || return 1
+ rm -f $startdir/pkg/usr/bin/kill $startdir/pkg/usr/share/man/man1/kill.1|| return 1
+ cd $startdir/pkg/usr/bin
+ mkdir -p $startdir/pkg/bin $startdir/pkg/sbin $startdir/pkg/usr/sbin
+ mv su date echo false pwd stty true uname cat tr cut readlink ../../bin
+ mv dd cp df du ln ls mv rm dir sync vdir chgrp chmod chown ../../bin
+ mv mkdir mknod rmdir shred touch mkfifo dircolors install sleep ../../bin
+ mv chroot ../sbin
+ ln -sf test [
+ ln -sf /bin/sleep $startdir/pkg/usr/bin/sleep
+ install -D -m644 $startdir/src/su $startdir/pkg/etc/pam.d/su
+}
diff --git a/abs/core-testing/coreutils/coreutils-6.10-configuration.patch b/abs/core-testing/coreutils/coreutils-6.10-configuration.patch
new file mode 100644
index 0000000..f80ab84
--- /dev/null
+++ b/abs/core-testing/coreutils/coreutils-6.10-configuration.patch
@@ -0,0 +1,62 @@
+diff -urN coreutils-6.12-orig/tests/misc/cut coreutils-6.12/tests/misc/cut
+--- coreutils-6.12-orig/tests/misc/cut 2008-05-17 08:41:11.000000000 +0200
++++ coreutils-6.12/tests/misc/cut 2008-06-02 11:13:08.000000000 +0200
+@@ -26,7 +26,7 @@
+ my $prog = 'cut';
+ my $try = "Try \`$prog --help' for more information.\n";
+ my $from_1 = "$prog: fields and positions are numbered from 1\n$try";
+-my $inval = "$prog: invalid byte or field list\n$try";
++my $inval = "$prog: invalid byte, character or field list\n$try";
+ my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try";
+
+ my @Tests =
+@@ -140,8 +140,8 @@
+ ['od-overlap5', '-b1-3,1-4', '--output-d=:', {IN=>"abcde\n"}, {OUT=>"abcd\n"}],
+
+ # None of the following invalid ranges provoked an error up to coreutils-6.9.
+- ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
+- {ERR=>"$prog: invalid decreasing range\n$try"}],
++ ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
++ {ERR=>"$prog: invalid byte, character or field list\n$try"}],
+ ['inval2', qw(-f -), {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+ ['inval3', '-f', '4,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+ ['inval4', '-f', '1-2,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+diff -urN coreutils-6.11-orig/tests/mkdir/selinux coreutils-6.11/tests/mkdir/selinux
+--- coreutils-6.11-orig/tests/mkdir/selinux 2008-04-19 23:34:23.000000000 +0200
++++ coreutils-6.11/tests/mkdir/selinux 2008-04-22 13:23:50.000000000 +0200
+@@ -38,6 +28,7 @@
+ # successfully, in spite of the invalid context string.
+
+ . $srcdir/test-lib.sh
++require_selinux_
+
+ c=invalid-selinux-context
+ msg="failed to set default file creation context to \`$c':"
+diff -urNp coreutils-6.11-orig/tests/test-lib.sh coreutils-6.11/tests/test-lib.sh
+--- coreutils-6.11-orig/tests/test-lib.sh 2008-04-19 23:34:23.000000000 +0200
++++ coreutils-6.11/tests/test-lib.sh 2008-04-24 14:18:59.000000000 +0200
+@@ -97,8 +97,8 @@ skip_if_()
+
+ require_selinux_()
+ {
+- case `ls -Zd .` in
+- '? .'|'unlabeled .')
++ case `ls --scontext -d . | cut -f1 -d" "` in
++ '?'|'unlabeled')
+ skip_test_ "this system (or maybe just" \
+ "the current file system) lacks SELinux support"
+ ;;
+diff -urp coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.11/gnulib-tests/test-getaddrinfo.c
+--- coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c
++++ coreutils-6.11/gnulib-tests/test-getaddrinfo.c
+@@ -70,6 +70,10 @@ int simple (char *host, char *service)
+ if (res == EAI_NODATA)
+ return 0;
+
++ /* Do not fail this test for temporary name resolution errors. */
++ if (res == EAI_AGAIN)
++ return 0;
++
+ return 1;
+ }
+
diff --git a/abs/core-testing/coreutils/coreutils-i18n.patch b/abs/core-testing/coreutils/coreutils-i18n.patch
new file mode 100644
index 0000000..1230c23
--- /dev/null
+++ b/abs/core-testing/coreutils/coreutils-i18n.patch
@@ -0,0 +1,4045 @@
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/sort-mb-tests 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,58 @@
++#! /bin/sh
++case $# in
++ 0) xx='../src/sort';;
++ *) xx="$1";;
++esac
++test "$VERBOSE" && echo=echo || echo=:
++$echo testing program: $xx
++errors=0
++test "$srcdir" || srcdir=.
++test "$VERBOSE" && $xx --version 2> /dev/null
++
++export LC_ALL=en_US.UTF-8
++locale -k LC_CTYPE 2>&1 | grep -q charmap.*UTF-8 || exit 77
++errors=0
++
++$xx -t ï¼  -k2 -n misc/mb1.I > misc/mb1.O
++code=$?
++if test $code != 0; then
++ $echo "Test mb1 failed: $xx return code $code differs from expected value 0" 1>&2
++ errors=`expr $errors + 1`
++else
++ cmp misc/mb1.O $srcdir/misc/mb1.X > /dev/null 2>&1
++ case $? in
++ 0) if test "$VERBOSE"; then $echo "passed mb1"; fi;;
++ 1) $echo "Test mb1 failed: files misc/mb1.O and $srcdir/misc/mb1.X differ" 1>&2
++ (diff -c misc/mb1.O $srcdir/misc/mb1.X) 2> /dev/null
++ errors=`expr $errors + 1`;;
++ 2) $echo "Test mb1 may have failed." 1>&2
++ $echo The command "cmp misc/mb1.O $srcdir/misc/mb1.X" failed. 1>&2
++ errors=`expr $errors + 1`;;
++ esac
++fi
++
++$xx -t ï¼  -k4 -n misc/mb2.I > misc/mb2.O
++code=$?
++if test $code != 0; then
++ $echo "Test mb2 failed: $xx return code $code differs from expected value 0" 1>&2
++ errors=`expr $errors + 1`
++else
++ cmp misc/mb2.O $srcdir/misc/mb2.X > /dev/null 2>&1
++ case $? in
++ 0) if test "$VERBOSE"; then $echo "passed mb2"; fi;;
++ 1) $echo "Test mb2 failed: files misc/mb2.O and $srcdir/misc/mb2.X differ" 1>&2
++ (diff -c misc/mb2.O $srcdir/misc/mb2.X) 2> /dev/null
++ errors=`expr $errors + 1`;;
++ 2) $echo "Test mb2 may have failed." 1>&2
++ $echo The command "cmp misc/mb2.O $srcdir/misc/mb2.X" failed. 1>&2
++ errors=`expr $errors + 1`;;
++ esac
++fi
++
++if test $errors = 0; then
++ $echo Passed all 113 tests. 1>&2
++else
++ $echo Failed $errors tests. 1>&2
++fi
++test $errors = 0 || errors=1
++exit $errors
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb2.I 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Apple@AA10@@20
++Banana@AA5@@30
++Citrus@AA20@@5
++Cherry@AA30@@10
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb2.X 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Citrus@AA20@@5
++Cherry@AA30@@10
++Apple@AA10@@20
++Banana@AA5@@30
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb1.I 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Appleï¼ 10
++Bananaï¼ 5
++Citrusï¼ 20
++Cherryï¼ 30
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb1.X 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Bananaï¼ 5
++Appleï¼ 10
++Citrusï¼ 20
++Cherryï¼ 30
+diff -urN coreutils-6.12-orig/tests/Makefile.am coreutils-6.12/tests/Makefile.am
+--- coreutils-6.12-orig/tests/Makefile.am 2008-05-27 13:47:53.000000000 +0200
++++ coreutils-6.12/tests/Makefile.am 2008-06-02 10:06:03.000000000 +0200
+@@ -191,6 +191,7 @@
+ misc/shuf \
+ misc/sort \
+ misc/sort-compress \
++ misc/sort-mb-tests \
+ misc/sort-merge \
+ misc/sort-rand \
+ misc/split-a \
+@@ -391,6 +392,10 @@
+ $(root_tests)
+
+ pr_data = \
++ misc/mb1.X \
++ misc/mb1.I \
++ misc/mb2.X \
++ misc/mb2.I \
+ pr/0F \
+ pr/0FF \
+ pr/0FFnt \
+--- coreutils-6.8+/lib/linebuffer.h.i18n 2005-05-14 07:44:24.000000000 +0100
++++ coreutils-6.8+/lib/linebuffer.h 2007-03-01 15:08:24.000000000 +0000
+@@ -22,6 +22,11 @@
+
+ # include <stdio.h>
+
++/* Get mbstate_t. */
++# if HAVE_WCHAR_H
++# include <wchar.h>
++# endif
++
+ /* A `struct linebuffer' holds a line of text. */
+
+ struct linebuffer
+@@ -29,6 +34,9 @@
+ size_t size; /* Allocated. */
+ size_t length; /* Used. */
+ char *buffer;
++# if HAVE_WCHAR_H
++ mbstate_t state;
++# endif
+ };
+
+ /* Initialize linebuffer LINEBUFFER for use. */
+--- coreutils-6.8+/src/expand.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/expand.c 2007-03-01 15:08:24.000000000 +0000
+@@ -38,11 +38,28 @@
+ #include <stdio.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "expand"
+
+@@ -183,6 +200,7 @@
+ stops = num_start + len - 1;
+ }
+ }
++
+ else
+ {
+ error (0, 0, _("tab size contains invalid character(s): %s"),
+@@ -365,6 +383,142 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++static void
++expand_multibyte (void)
++{
++ FILE *fp; /* Input strem. */
++ mbstate_t i_state; /* Current shift state of the input stream. */
++ mbstate_t i_state_bak; /* Back up the I_STATE. */
++ mbstate_t o_state; /* Current shift state of the output stream. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ wchar_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character
++ which shows as same character as WC. */
++ int tab_index = 0; /* Index in `tab_list' of next tabstop. */
++ int column = 0; /* Column on screen of the next char. */
++ int next_tab_column; /* Column the next tab stop is on. */
++ int convert = 1; /* If nonzero, perform translations. */
++
++ fp = next_file ((FILE *) NULL);
++ if (fp == NULL)
++ return;
++
++ memset (&o_state, '\0', sizeof(mbstate_t));
++ memset (&i_state, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ /* Refill the buffer BUF. */
++ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
++ bufpos = buf;
++ }
++
++ /* No character is left in BUF. */
++ if (buflen < 1)
++ {
++ fp = next_file (fp);
++
++ if (fp == NULL)
++ break; /* No more files. */
++ else
++ {
++ memset (&i_state, '\0', sizeof(mbstate_t));
++ continue;
++ }
++ }
++
++ /* Get a wide character. */
++ i_state_bak = i_state;
++ mblength = mbrtowc (&wc, bufpos, buflen, &i_state);
++
++ switch (mblength)
++ {
++ case (size_t)-1: /* illegal byte sequence. */
++ case (size_t)-2:
++ mblength = 1;
++ i_state = i_state_bak;
++ if (convert)
++ {
++ ++column;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ putchar (*bufpos);
++ break;
++
++ case 0: /* null. */
++ mblength = 1;
++ if (convert && convert_entire_line == 0)
++ convert = 0;
++ putchar ('\0');
++ break;
++
++ default:
++ if (wc == L'\n') /* LF. */
++ {
++ tab_index = 0;
++ column = 0;
++ convert = 1;
++ putchar ('\n');
++ }
++ else if (wc == L'\t' && convert) /* Tab. */
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (tab_index < first_free_tab - 1
++ && column >= tab_list[tab_index])
++ tab_index++;
++ next_tab_column = tab_list[tab_index];
++ if (tab_index < first_free_tab - 1)
++ tab_index++;
++ if (column >= next_tab_column)
++ next_tab_column = column + 1;
++ }
++ else
++ next_tab_column = column + tab_size - column % tab_size;
++
++ while (column < next_tab_column)
++ {
++ putchar (' ');
++ ++column;
++ }
++ }
++ else /* Others. */
++ {
++ if (convert)
++ {
++ if (wc == L'\b')
++ {
++ if (column > 0)
++ --column;
++ }
++ else
++ {
++ int width; /* The width of WC. */
++
++ width = wcwidth (wc);
++ column += (width > 0) ? width : 0;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ }
++ fwrite (bufpos, sizeof(char), mblength, stdout);
++ }
++ }
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
+ int
+ main (int argc, char **argv)
+ {
+@@ -429,7 +583,12 @@
+
+ file_list = (optind < argc ? &argv[optind] : stdin_argv);
+
+- expand ();
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ expand_multibyte ();
++ else
++#endif
++ expand ();
+
+ if (have_read_stdin && fclose (stdin) != 0)
+ error (EXIT_FAILURE, errno, "-");
+--- coreutils-6.8+/src/join.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/join.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,17 +23,31 @@
+ #include <sys/types.h>
+ #include <getopt.h>
+
++/* Get mbstate_t, mbrtowc(), mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswblank(), towupper. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "hard-locale.h"
+ #include "linebuffer.h"
+-#include "memcasecmp.h"
+ #include "quote.h"
+ #include "stdio--.h"
+ #include "xmemcoll.h"
+ #include "xstrtol.h"
+ #include "argmatch.h"
+
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "join"
+
+@@ -104,10 +118,12 @@
+ /* Last element in `outlist', where a new element can be added. */
+ static struct outlist *outlist_end = &outlist_head;
+
+-/* Tab character separating fields. If negative, fields are separated
+- by any nonempty string of blanks, otherwise by exactly one
+- tab character whose value (when cast to unsigned char) equals TAB. */
+-static int tab = -1;
++/* Tab character separating fields. If NULL, fields are separated
++ by any nonempty string of blanks. */
++static char *tab = NULL;
++
++/* The number of bytes used for tab. */
++static size_t tablen = 0;
+
+ static struct option const longopts[] =
+ {
+@@ -190,6 +206,8 @@
+
+ /* Fill in the `fields' structure in LINE. */
+
++/* Fill in the `fields' structure in LINE. */
++
+ static void
+ xfields (struct line *line)
+ {
+@@ -199,10 +217,11 @@
+ if (ptr == lim)
+ return;
+
+- if (0 <= tab)
++ if (tab != NULL)
+ {
++ unsigned char t = tab[0];
+ char *sep;
+- for (; (sep = memchr (ptr, tab, lim - ptr)) != NULL; ptr = sep + 1)
++ for (; (sep = memchr (ptr, t, lim - ptr)) != NULL; ptr = sep + 1)
+ extract_field (line, ptr, sep - ptr);
+ }
+ else
+@@ -229,6 +248,148 @@
+ extract_field (line, ptr, lim - ptr);
+ }
+
++#if HAVE_MBRTOWC
++static void
++xfields_multibyte (struct line *line)
++{
++ char *ptr = line->buf.buffer;
++ char const *lim = ptr + line->buf.length - 1;
++ wchar_t wc = 0;
++ size_t mblength = 1;
++ mbstate_t state, state_bak;
++
++ memset (&state, 0, sizeof (mbstate_t));
++
++ if (ptr == lim)
++ return;
++
++ if (tab != NULL)
++ {
++ unsigned char t = tab[0];
++ char *sep = ptr;
++ for (; ptr < lim; ptr = sep + mblength)
++ {
++ sep = ptr;
++ while (sep < lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (mblength == tablen && !memcmp (sep, tab, mblength))
++ break;
++ else
++ {
++ sep += mblength;
++ continue;
++ }
++ }
++
++ if (sep == lim)
++ break;
++
++ extract_field (line, ptr, sep - ptr);
++ }
++ }
++ else
++ {
++ /* Skip leading blanks before the first field. */
++ while(ptr < lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (!iswblank(wc))
++ break;
++ ptr += mblength;
++ }
++
++ do
++ {
++ char *sep;
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ sep = ptr + mblength;
++ while (sep != lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (iswblank (wc))
++ break;
++
++ sep += mblength;
++ }
++
++ extract_field (line, ptr, sep - ptr);
++ if (sep == lim)
++ return;
++
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ ptr = sep + mblength;
++ while (ptr != lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (!iswblank (wc))
++ break;
++
++ ptr += mblength;
++ }
++ }
++ while (ptr != lim);
++ }
++
++ extract_field (line, ptr, lim - ptr);
++}
++#endif
++
+ /* Read a line from FP into LINE and split it into fields.
+ Return true if successful. */
+
+@@ -249,6 +410,11 @@
+ line->nfields_allocated = 0;
+ line->nfields = 0;
+ line->fields = NULL;
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ xfields_multibyte (line);
++ else
++#endif
+ xfields (line);
+ return true;
+ }
+@@ -377,11 +601,18 @@
+
+ /* Print the join of LINE1 and LINE2. */
+
++#define PUT_TAB_CHAR \
++ do \
++ { \
++ (tab != NULL) ? \
++ fwrite(tab, sizeof(char), tablen, stdout) : putchar (' '); \
++ } \
++ while (0)
++
+ static void
+ prjoin (struct line const *line1, struct line const *line2)
+ {
+ const struct outlist *outlist;
+- char output_separator = tab < 0 ? ' ' : tab;
+
+ outlist = outlist_head.next;
+ if (outlist)
+@@ -397,12 +628,12 @@
+ if (o->file == 0)
+ {
+ if (line1 == &uni_blank)
+- {
++ {
+ line = line2;
+ field = join_field_2;
+ }
+ else
+- {
++ {
+ line = line1;
+ field = join_field_1;
+ }
+@@ -416,7 +647,7 @@
+ o = o->next;
+ if (o == NULL)
+ break;
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ }
+ putchar ('\n');
+ }
+@@ -434,23 +665,23 @@
+ prfield (join_field_1, line1);
+ for (i = 0; i < join_field_1 && i < line1->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line1);
+ }
+ for (i = join_field_1 + 1; i < line1->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line1);
+ }
+
+ for (i = 0; i < join_field_2 && i < line2->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line2);
+ }
+ for (i = join_field_2 + 1; i < line2->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line2);
+ }
+ putchar ('\n');
+@@ -859,20 +1090,41 @@
+
+ case 't':
+ {
+- unsigned char newtab = optarg[0];
+- if (! newtab)
++ char *newtab;
++ size_t newtablen;
++ if (! optarg[0])
+ error (EXIT_FAILURE, 0, _("empty tab"));
+- if (optarg[1])
++ newtab = xstrdup (optarg);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ mbstate_t state;
++
++ memset (&state, 0, sizeof (mbstate_t));
++ newtablen = mbrtowc (NULL, newtab,
++ strnlen (newtab, MB_LEN_MAX),
++ &state);
++ if (newtablen == (size_t) 0
++ || newtablen == (size_t) -1
++ || newtablen == (size_t) -2)
++ newtablen = 1;
++ }
++ else
++#endif
++ newtablen = 1;
++
++ if (newtablen == 1 && newtab[1])
++ {
++ if (STREQ (newtab, "\\0"))
++ newtab[0] = '\0';
++ }
++ if (tab != NULL && strcmp (tab, newtab))
+ {
+- if (STREQ (optarg, "\\0"))
+- newtab = '\0';
+- else
+- error (EXIT_FAILURE, 0, _("multi-character tab %s"),
+- quote (optarg));
++ free (newtab);
++ error (EXIT_FAILURE, 0, _("incompatible tabs"));
+ }
+- if (0 <= tab && tab != newtab)
+- error (EXIT_FAILURE, 0, _("incompatible tabs"));
+ tab = newtab;
++ tablen = newtablen;
+ }
+ break;
+
+diff -urNp coreutils-6.11-orig/src/join.c coreutils-6.11/src/join.c
+--- coreutils-6.11-orig/src/join.c 2008-04-21 13:44:32.000000000 +0200
++++ coreutils-6.11/src/join.c 2008-04-21 14:03:22.000000000 +0200
+@@ -324,56 +324,115 @@ keycmp (struct line const *line1, struct
+ size_t jf_1, size_t jf_2)
+ {
+ /* Start of field to compare in each file. */
+- char *beg1;
+- char *beg2;
+-
+- size_t len1;
+- size_t len2; /* Length of fields to compare. */
++ char *beg[2];
++ char *copy[2];
++ size_t len[2]; /* Length of fields to compare. */
+ int diff;
++ int i, j;
+
+ if (jf_1 < line1->nfields)
+ {
+- beg1 = line1->fields[jf_1].beg;
+- len1 = line1->fields[jf_1].len;
++ beg[0] = line1->fields[jf_1].beg;
++ len[0] = line1->fields[jf_1].len;
+ }
+ else
+ {
+- beg1 = NULL;
+- len1 = 0;
++ beg[0] = NULL;
++ len[0] = 0;
+ }
+
+ if (jf_2 < line2->nfields)
+ {
+- beg2 = line2->fields[jf_2].beg;
+- len2 = line2->fields[jf_2].len;
++ beg[1] = line2->fields[jf_2].beg;
++ len[1] = line2->fields[jf_2].len;
+ }
+ else
+ {
+- beg2 = NULL;
+- len2 = 0;
++ beg[1] = NULL;
++ len[1] = 0;
+ }
+
+- if (len1 == 0)
+- return len2 == 0 ? 0 : -1;
+- if (len2 == 0)
++ if (len[0] == 0)
++ return len[1] == 0 ? 0 : -1;
++ if (len[1] == 0)
+ return 1;
+
+ if (ignore_case)
+ {
+- /* FIXME: ignore_case does not work with NLS (in particular,
+- with multibyte chars). */
+- diff = memcasecmp (beg1, beg2, MIN (len1, len2));
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ size_t mblength;
++ wchar_t wc, uwc;
++ mbstate_t state, state_bak;
++
++ memset (&state, '\0', sizeof (mbstate_t));
++
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0; j < MIN (len[0], len[1]);)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state);
++
++ switch (mblength)
++ {
++ case (size_t) -1:
++ case (size_t) -2:
++ state = state_bak;
++ /* Fall through */
++ case 0:
++ mblength = 1;
++ break;
++
++ default:
++ uwc = towupper (wc);
++
++ if (uwc != wc)
++ {
++ mbstate_t state_wc;
++
++ memset (&state_wc, '\0', sizeof (mbstate_t));
++ wcrtomb (copy[i] + j, uwc, &state_wc);
++ }
++ else
++ memcpy (copy[i] + j, beg[i] + j, mblength);
++ }
++ j += mblength;
++ }
++ copy[i][j] = '\0';
++ }
++ }
++ else
++#endif
++ {
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0; j < MIN (len[0], len[1]); j++)
++ copy[i][j] = toupper (beg[i][j]);
++
++ copy[i][j] = '\0';
++ }
++ }
+ }
+ else
+ {
+- if (hard_LC_COLLATE)
+- return xmemcoll (beg1, len1, beg2, len2);
+- diff = memcmp (beg1, beg2, MIN (len1, len2));
++ copy[0] = (unsigned char *) beg[0];
++ copy[1] = (unsigned char *) beg[1];
+ }
+
++ if (hard_LC_COLLATE)
++ return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]);
++ diff = memcmp (copy[0], copy[1], MIN (len[0], len[1]));
++
++
+ if (diff)
+ return diff;
+- return len1 < len2 ? -1 : len1 != len2;
++ return len[0] - len[1];
+ }
+
+ /* Check that successive input lines PREV and CURRENT from input file
+--- coreutils-6.8+/src/uniq.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/uniq.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,6 +23,16 @@
+ #include <getopt.h>
+ #include <sys/types.h>
+
++/* Get mbstate_t, mbrtowc(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get isw* functions. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "argmatch.h"
+ #include "linebuffer.h"
+@@ -32,7 +42,19 @@
+ #include "quote.h"
+ #include "xmemcoll.h"
+ #include "xstrtol.h"
+-#include "memcasecmp.h"
++#include "xmemcoll.h"
++
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "uniq"
+@@ -109,6 +131,10 @@
+ /* Select whether/how to delimit groups of duplicate lines. */
+ static enum delimit_method delimit_groups;
+
++/* Function pointers. */
++static char *
++(*find_field) (struct linebuffer *line);
++
+ static struct option const longopts[] =
+ {
+ {"count", no_argument, NULL, 'c'},
+@@ -198,7 +224,7 @@
+ return a pointer to the beginning of the line's field to be compared. */
+
+ static char *
+-find_field (const struct linebuffer *line)
++find_field_uni (struct linebuffer *line)
+ {
+ size_t count;
+ char *lp = line->buffer;
+@@ -219,6 +245,83 @@
+ return lp + i;
+ }
+
++#if HAVE_MBRTOWC
++
++# define MBCHAR_TO_WCHAR(WC, MBLENGTH, LP, POS, SIZE, STATEP, CONVFAIL) \
++ do \
++ { \
++ mbstate_t state_bak; \
++ \
++ CONVFAIL = 0; \
++ state_bak = *STATEP; \
++ \
++ MBLENGTH = mbrtowc (&WC, LP + POS, SIZE - POS, STATEP); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-2: \
++ case (size_t)-1: \
++ *STATEP = state_bak; \
++ CONVFAIL++; \
++ /* Fall through */ \
++ case 0: \
++ MBLENGTH = 1; \
++ } \
++ } \
++ while (0)
++
++static char *
++find_field_multi (struct linebuffer *line)
++{
++ size_t count;
++ char *lp = line->buffer;
++ size_t size = line->length - 1;
++ size_t pos;
++ size_t mblength;
++ wchar_t wc;
++ mbstate_t *statep;
++ int convfail;
++
++ pos = 0;
++ statep = &(line->state);
++
++ /* skip fields. */
++ for (count = 0; count < skip_fields && pos < size; count++)
++ {
++ while (pos < size)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++
++ if (convfail || !iswblank (wc))
++ {
++ pos += mblength;
++ break;
++ }
++ pos += mblength;
++ }
++
++ while (pos < size)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++
++ if (!convfail && iswblank (wc))
++ break;
++
++ pos += mblength;
++ }
++ }
++
++ /* skip fields. */
++ for (count = 0; count < skip_chars && pos < size; count++)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++ pos += mblength;
++ }
++
++ return lp + pos;
++}
++#endif
++
+ /* Return false if two strings OLD and NEW match, true if not.
+ OLD and NEW point not to the beginnings of the lines
+ but rather to the beginnings of the fields to compare.
+@@ -227,6 +330,8 @@
+ static bool
+ different (char *old, char *new, size_t oldlen, size_t newlen)
+ {
++ char *copy_old, *copy_new;
++
+ if (check_chars < oldlen)
+ oldlen = check_chars;
+ if (check_chars < newlen)
+@@ -234,14 +339,92 @@
+
+ if (ignore_case)
+ {
+- /* FIXME: This should invoke strcoll somehow. */
+- return oldlen != newlen || memcasecmp (old, new, oldlen);
++ size_t i;
++
++ copy_old = alloca (oldlen + 1);
++ copy_new = alloca (oldlen + 1);
++
++ for (i = 0; i < oldlen; i++)
++ {
++ copy_old[i] = toupper (old[i]);
++ copy_new[i] = toupper (new[i]);
++ }
+ }
+- else if (hard_LC_COLLATE)
+- return xmemcoll (old, oldlen, new, newlen) != 0;
+ else
+- return oldlen != newlen || memcmp (old, new, oldlen);
++ {
++ copy_old = (char *)old;
++ copy_new = (char *)new;
++ }
++
++ return xmemcoll (copy_old, oldlen, copy_new, newlen);
++}
++
++#if HAVE_MBRTOWC
++static int
++different_multi (const char *old, const char *new, size_t oldlen, size_t newlen, mbstate_t oldstate, mbstate_t newstate)
++{
++ size_t i, j, chars;
++ const char *str[2];
++ char *copy[2];
++ size_t len[2];
++ mbstate_t state[2];
++ size_t mblength;
++ wchar_t wc, uwc;
++ mbstate_t state_bak;
++
++ str[0] = old;
++ str[1] = new;
++ len[0] = oldlen;
++ len[1] = newlen;
++ state[0] = oldstate;
++ state[1] = newstate;
++
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0, chars = 0; j < len[i] && chars < check_chars; chars++)
++ {
++ state_bak = state[i];
++ mblength = mbrtowc (&wc, str[i] + j, len[i] - j, &(state[i]));
++
++ switch (mblength)
++ {
++ case (size_t)-1:
++ case (size_t)-2:
++ state[i] = state_bak;
++ /* Fall through */
++ case 0:
++ mblength = 1;
++ break;
++
++ default:
++ if (ignore_case)
++ {
++ uwc = towupper (wc);
++
++ if (uwc != wc)
++ {
++ mbstate_t state_wc;
++
++ memset (&state_wc, '\0', sizeof(mbstate_t));
++ wcrtomb (copy[i] + j, uwc, &state_wc);
++ }
++ else
++ memcpy (copy[i] + j, str[i] + j, mblength);
++ }
++ else
++ memcpy (copy[i] + j, str[i] + j, mblength);
++ }
++ j += mblength;
++ }
++ copy[i][j] = '\0';
++ len[i] = j;
++ }
++
++ return xmemcoll (copy[0], len[0], copy[1], len[1]);
+ }
++#endif
+
+ /* Output the line in linebuffer LINE to standard output
+ provided that the switches say it should be output.
+@@ -295,15 +478,43 @@
+ {
+ char *prevfield IF_LINT (= NULL);
+ size_t prevlen IF_LINT (= 0);
++#if HAVE_MBRTOWC
++ mbstate_t prevstate;
++
++ memset (&prevstate, '\0', sizeof (mbstate_t));
++#endif
+
+ while (!feof (stdin))
+ {
+ char *thisfield;
+ size_t thislen;
++#if HAVE_MBRTOWC
++ mbstate_t thisstate;
++#endif
++
+ if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
+ break;
+ thisfield = find_field (thisline);
+ thislen = thisline->length - 1 - (thisfield - thisline->buffer);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ thisstate = thisline->state;
++
++ if (prevline->length == 0 || different_multi
++ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate))
++ {
++ fwrite (thisline->buffer, sizeof (char),
++ thisline->length, stdout);
++
++ SWAP_LINES (prevline, thisline);
++ prevfield = thisfield;
++ prevlen = thislen;
++ prevstate = thisstate;
++ }
++ }
++ else
++#endif
+ if (prevline->length == 0
+ || different (thisfield, prevfield, thislen, prevlen))
+ {
+@@ -322,17 +533,26 @@
+ size_t prevlen;
+ uintmax_t match_count = 0;
+ bool first_delimiter = true;
++#if HAVE_MBRTOWC
++ mbstate_t prevstate;
++#endif
+
+ if (readlinebuffer_delim (prevline, stdin, delimiter) == 0)
+ goto closefiles;
+ prevfield = find_field (prevline);
+ prevlen = prevline->length - 1 - (prevfield - prevline->buffer);
++#if HAVE_MBRTOWC
++ prevstate = prevline->state;
++#endif
+
+ while (!feof (stdin))
+ {
+ bool match;
+ char *thisfield;
+ size_t thislen;
++#if HAVE_MBRTOWC
++ mbstate_t thisstate;
++#endif
+ if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
+ {
+ if (ferror (stdin))
+@@ -341,6 +561,15 @@
+ }
+ thisfield = find_field (thisline);
+ thislen = thisline->length - 1 - (thisfield - thisline->buffer);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ thisstate = thisline->state;
++ match = !different_multi (thisfield, prevfield,
++ thislen, prevlen, thisstate, prevstate);
++ }
++ else
++#endif
+ match = !different (thisfield, prevfield, thislen, prevlen);
+ match_count += match;
+
+@@ -373,6 +602,9 @@
+ SWAP_LINES (prevline, thisline);
+ prevfield = thisfield;
+ prevlen = thislen;
++#if HAVE_MBRTOWC
++ prevstate = thisstate;
++#endif
+ if (!match)
+ match_count = 0;
+ }
+@@ -417,6 +649,19 @@
+
+ atexit (close_stdout);
+
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ find_field = find_field_multi;
++ }
++ else
++#endif
++ {
++ find_field = find_field_uni;
++ }
++
++
++
+ skip_chars = 0;
+ skip_fields = 0;
+ check_chars = SIZE_MAX;
+--- coreutils-6.8+/src/fold.c.i18n 2007-02-23 12:01:47.000000000 +0000
++++ coreutils-6.8+/src/fold.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,11 +23,33 @@
+ #include <getopt.h>
+ #include <sys/types.h>
+
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswprint(), iswblank(), wcwidth(). */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrtol.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# undef MB_LEN_MAX
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ #define TAB_WIDTH 8
+
+ /* The official name of this program (e.g., no `g' prefix). */
+@@ -35,23 +57,44 @@
+
+ #define AUTHORS "David MacKenzie"
+
++#define FATAL_ERROR(Message) \
++ do \
++ { \
++ error (0, 0, (Message)); \
++ usage (2); \
++ } \
++ while (0)
++
++enum operating_mode
++{
++ /* Fold texts by columns that are at the given positions. */
++ column_mode,
++
++ /* Fold texts by bytes that are at the given positions. */
++ byte_mode,
++
++ /* Fold texts by characters that are at the given positions. */
++ character_mode,
++};
++
+ /* The name this program was run with. */
+ char *program_name;
+
++/* The argument shows current mode. (Default: column_mode) */
++static enum operating_mode operating_mode;
++
+ /* If nonzero, try to break on whitespace. */
+ static bool break_spaces;
+
+-/* If nonzero, count bytes, not column positions. */
+-static bool count_bytes;
+-
+ /* If nonzero, at least one of the files we read was standard input. */
+ static bool have_read_stdin;
+
+-static char const shortopts[] = "bsw:0::1::2::3::4::5::6::7::8::9::";
++static char const shortopts[] = "bcsw:0::1::2::3::4::5::6::7::8::9::";
+
+ static struct option const longopts[] =
+ {
+ {"bytes", no_argument, NULL, 'b'},
++ {"characters", no_argument, NULL, 'c'},
+ {"spaces", no_argument, NULL, 's'},
+ {"width", required_argument, NULL, 'w'},
+ {GETOPT_HELP_OPTION_DECL},
+@@ -81,6 +124,7 @@
+ "), stdout);
+ fputs (_("\
+ -b, --bytes count bytes rather than columns\n\
++ -c, --characters count characters rather than columns\n\
+ -s, --spaces break at spaces\n\
+ -w, --width=WIDTH use WIDTH columns instead of 80\n\
+ "), stdout);
+@@ -98,7 +142,7 @@
+ static size_t
+ adjust_column (size_t column, char c)
+ {
+- if (!count_bytes)
++ if (operating_mode != byte_mode)
+ {
+ if (c == '\b')
+ {
+@@ -121,30 +165,14 @@
+ to stdout, with maximum line length WIDTH.
+ Return true if successful. */
+
+-static bool
+-fold_file (char const *filename, size_t width)
++static void
++fold_text (FILE *istream, size_t width, int *saved_errno)
+ {
+- FILE *istream;
+ int c;
+ size_t column = 0; /* Screen column where next char will go. */
+ size_t offset_out = 0; /* Index in `line_out' for next char. */
+ static char *line_out = NULL;
+ static size_t allocated_out = 0;
+- int saved_errno;
+-
+- if (STREQ (filename, "-"))
+- {
+- istream = stdin;
+- have_read_stdin = true;
+- }
+- else
+- istream = fopen (filename, "r");
+-
+- if (istream == NULL)
+- {
+- error (0, errno, "%s", filename);
+- return false;
+- }
+
+ while ((c = getc (istream)) != EOF)
+ {
+@@ -172,6 +200,15 @@
+ bool found_blank = false;
+ size_t logical_end = offset_out;
+
++ /* If LINE_OUT has no wide character,
++ put a new wide character in LINE_OUT
++ if column is bigger than width. */
++ if (offset_out == 0)
++ {
++ line_out[offset_out++] = c;
++ continue;
++ }
++
+ /* Look for the last blank. */
+ while (logical_end)
+ {
+@@ -218,11 +255,225 @@
+ line_out[offset_out++] = c;
+ }
+
+- saved_errno = errno;
++ *saved_errno = errno;
++
++ if (offset_out)
++ fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
++
++ free(line_out);
++}
++
++#if HAVE_MBRTOWC
++static void
++fold_multibyte_text (FILE *istream, size_t width, int *saved_errno)
++{
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ char *bufpos; /* Next read position of BUF. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state, state_bak; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ char *line_out = NULL;
++ size_t offset_out = 0; /* Index in `line_out' for next char. */
++ size_t allocated_out = 0;
++
++ int increment;
++ size_t column = 0;
++
++ size_t last_blank_pos;
++ size_t last_blank_column;
++ int is_blank_seen;
++ int last_blank_increment;
++ int is_bs_following_last_blank;
++ size_t bs_following_last_blank_num;
++ int is_cr_after_last_blank;
++
++#define CLEAR_FLAGS \
++ do \
++ { \
++ last_blank_pos = 0; \
++ last_blank_column = 0; \
++ is_blank_seen = 0; \
++ is_bs_following_last_blank = 0; \
++ bs_following_last_blank_num = 0; \
++ is_cr_after_last_blank = 0; \
++ } \
++ while (0)
++
++#define START_NEW_LINE \
++ do \
++ { \
++ putchar ('\n'); \
++ column = 0; \
++ offset_out = 0; \
++ CLEAR_FLAGS; \
++ } \
++ while (0)
++
++ CLEAR_FLAGS;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ for (;; bufpos += mblength, buflen -= mblength)
++ {
++ if (buflen < MB_LEN_MAX && !feof (istream) && !ferror (istream))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, istream);
++ bufpos = buf;
++ }
++
++ if (buflen < 1)
++ break;
++
++ /* Get a wide character. */
++ convfail = 0;
++ state_bak = state;
++ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &state);
++
++ switch (mblength)
++ {
++ case (size_t)-1:
++ case (size_t)-2:
++ convfail++;
++ state = state_bak;
++ /* Fall through. */
++
++ case 0:
++ mblength = 1;
++ break;
++ }
++
++rescan:
++ if (operating_mode == byte_mode) /* byte mode */
++ increment = mblength;
++ else if (operating_mode == character_mode) /* character mode */
++ increment = 1;
++ else /* column mode */
++ {
++ if (convfail)
++ increment = 1;
++ else
++ {
++ switch (wc)
++ {
++ case L'\n':
++ fwrite (line_out, sizeof(char), offset_out, stdout);
++ START_NEW_LINE;
++ continue;
++
++ case L'\b':
++ increment = (column > 0) ? -1 : 0;
++ break;
++
++ case L'\r':
++ increment = -1 * column;
++ break;
++
++ case L'\t':
++ increment = 8 - column % 8;
++ break;
++
++ default:
++ increment = wcwidth (wc);
++ increment = (increment < 0) ? 0 : increment;
++ }
++ }
++ }
++
++ if (column + increment > width && break_spaces && last_blank_pos)
++ {
++ fwrite (line_out, sizeof(char), last_blank_pos, stdout);
++ putchar ('\n');
++
++ offset_out = offset_out - last_blank_pos;
++ column = column - last_blank_column + ((is_cr_after_last_blank)
++ ? last_blank_increment : bs_following_last_blank_num);
++ memmove (line_out, line_out + last_blank_pos, offset_out);
++ CLEAR_FLAGS;
++ goto rescan;
++ }
++
++ if (column + increment > width && column != 0)
++ {
++ fwrite (line_out, sizeof(char), offset_out, stdout);
++ START_NEW_LINE;
++ goto rescan;
++ }
++
++ if (allocated_out < offset_out + mblength)
++ {
++ allocated_out += 1024;
++ line_out = xrealloc (line_out, allocated_out);
++ }
++
++ memcpy (line_out + offset_out, bufpos, mblength);
++ offset_out += mblength;
++ column += increment;
++
++ if (is_blank_seen && !convfail && wc == L'\r')
++ is_cr_after_last_blank = 1;
++
++ if (is_bs_following_last_blank && !convfail && wc == L'\b')
++ ++bs_following_last_blank_num;
++ else
++ is_bs_following_last_blank = 0;
++
++ if (break_spaces && !convfail && iswblank (wc))
++ {
++ last_blank_pos = offset_out;
++ last_blank_column = column;
++ is_blank_seen = 1;
++ last_blank_increment = increment;
++ is_bs_following_last_blank = 1;
++ bs_following_last_blank_num = 0;
++ is_cr_after_last_blank = 0;
++ }
++ }
++
++ *saved_errno = errno;
+
+ if (offset_out)
+ fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
+
++ free(line_out);
++}
++#endif
++
++/* Fold file FILENAME, or standard input if FILENAME is "-",
++ to stdout, with maximum line length WIDTH.
++ Return 0 if successful, 1 if an error occurs. */
++
++static bool
++fold_file (char *filename, size_t width)
++{
++ FILE *istream;
++ int saved_errno;
++
++ if (STREQ (filename, "-"))
++ {
++ istream = stdin;
++ have_read_stdin = 1;
++ }
++ else
++ istream = fopen (filename, "r");
++
++ if (istream == NULL)
++ {
++ error (0, errno, "%s", filename);
++ return 1;
++ }
++
++ /* Define how ISTREAM is being folded. */
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ fold_multibyte_text (istream, width, &saved_errno);
++ else
++#endif
++ fold_text (istream, width, &saved_errno);
++
+ if (ferror (istream))
+ {
+ error (0, saved_errno, "%s", filename);
+@@ -255,7 +506,8 @@
+
+ atexit (close_stdout);
+
+- break_spaces = count_bytes = have_read_stdin = false;
++ operating_mode = column_mode;
++ break_spaces = have_read_stdin = false;
+
+ while ((optc = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1)
+ {
+@@ -264,7 +516,15 @@
+ switch (optc)
+ {
+ case 'b': /* Count bytes rather than columns. */
+- count_bytes = true;
++ if (operating_mode != column_mode)
++ FATAL_ERROR (_("only one way of folding may be specified"));
++ operating_mode = byte_mode;
++ break;
++
++ case 'c':
++ if (operating_mode != column_mode)
++ FATAL_ERROR (_("only one way of folding may be specified"));
++ operating_mode = character_mode;
+ break;
+
+ case 's': /* Break at word boundaries. */
+--- coreutils-6.8+/src/sort.c.i18n 2007-02-24 11:23:23.000000000 +0000
++++ coreutils-6.8+/src/sort.c 2007-03-01 15:10:57.000000000 +0000
+@@ -23,10 +23,19 @@
+
+ #include <config.h>
+
++#include <assert.h>
+ #include <getopt.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <signal.h>
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++/* Get isw* functions. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "argmatch.h"
+ #include "error.h"
+@@ -116,14 +125,38 @@
+ /* Thousands separator; if -1, then there isn't one. */
+ static int thousands_sep;
+
++static int force_general_numcompare = 0;
++
+ /* Nonzero if the corresponding locales are hard. */
+ static bool hard_LC_COLLATE;
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ static bool hard_LC_TIME;
+ #endif
+
+ #define NONZERO(x) ((x) != 0)
+
++/* get a multibyte character's byte length. */
++#define GET_BYTELEN_OF_CHAR(LIM, PTR, MBLENGTH, STATE) \
++ do \
++ { \
++ wchar_t wc; \
++ mbstate_t state_bak; \
++ \
++ state_bak = STATE; \
++ mblength = mbrtowc (&wc, PTR, LIM - PTR, &STATE); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-1: \
++ case (size_t)-2: \
++ STATE = state_bak; \
++ /* Fall through. */ \
++ case 0: \
++ MBLENGTH = 1; \
++ } \
++ } \
++ while (0)
++
+ /* The kind of blanks for '-b' to skip in various options. */
+ enum blanktype { bl_start, bl_end, bl_both };
+
+@@ -261,13 +294,11 @@
+ they were read if all keys compare equal. */
+ static bool stable;
+
+-/* If TAB has this value, blanks separate fields. */
+-enum { TAB_DEFAULT = CHAR_MAX + 1 };
+-
+-/* Tab character separating fields. If TAB_DEFAULT, then fields are
++/* Tab character separating fields. If tab_length is 0, then fields are
+ separated by the empty string between a non-blank character and a blank
+ character. */
+-static int tab = TAB_DEFAULT;
++static char tab[MB_LEN_MAX + 1];
++static size_t tab_length = 0;
+
+ /* Flag to remove consecutive duplicate lines from the output.
+ Only the last of a sequence of equal lines will be output. */
+@@ -639,6 +670,44 @@
+ update_proc (pid);
+ }
+
++/* Function pointers. */
++static void
++(*inittables) (void);
++static char *
++(*begfield) (const struct line*, const struct keyfield *);
++static char *
++(*limfield) (const struct line*, const struct keyfield *);
++static int
++(*getmonth) (char const *, size_t);
++static int
++(*keycompare) (const struct line *, const struct line *);
++static int
++(*numcompare) (const char *, const char *);
++
++/* Test for white space multibyte character.
++ Set LENGTH the byte length of investigated multibyte character. */
++#if HAVE_MBRTOWC
++static int
++ismbblank (const char *str, size_t len, size_t *length)
++{
++ size_t mblength;
++ wchar_t wc;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++ mblength = mbrtowc (&wc, str, len, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ *length = 1;
++ return 0;
++ }
++
++ *length = (mblength < 1) ? 1 : mblength;
++ return iswblank (wc);
++}
++#endif
++
+ /* Clean up any remaining temporary files. */
+
+ static void
+@@ -978,7 +1047,7 @@
+ free (node);
+ }
+
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+
+ static int
+ struct_month_cmp (const void *m1, const void *m2)
+@@ -993,7 +1062,7 @@
+ /* Initialize the character class tables. */
+
+ static void
+-inittables (void)
++inittables_uni (void)
+ {
+ size_t i;
+
+@@ -1005,7 +1074,7 @@
+ fold_toupper[i] = toupper (i);
+ }
+
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ /* If we're not in the "C" locale, read different names for months. */
+ if (hard_LC_TIME)
+ {
+@@ -1031,6 +1100,64 @@
+ #endif
+ }
+
++#if HAVE_MBRTOWC
++static void
++inittables_mb (void)
++{
++ int i, j, k, l;
++ char *name, *s;
++ size_t s_len, mblength;
++ char mbc[MB_LEN_MAX];
++ wchar_t wc, pwc;
++ mbstate_t state_mb, state_wc;
++
++ for (i = 0; i < MONTHS_PER_YEAR; i++)
++ {
++ s = (char *) nl_langinfo (ABMON_1 + i);
++ s_len = strlen (s);
++ monthtab[i].name = name = (char *) xmalloc (s_len + 1);
++ monthtab[i].val = i + 1;
++
++ memset (&state_mb, '\0', sizeof (mbstate_t));
++ memset (&state_wc, '\0', sizeof (mbstate_t));
++
++ for (j = 0; j < s_len;)
++ {
++ if (!ismbblank (s + j, s_len - j, &mblength))
++ break;
++ j += mblength;
++ }
++
++ for (k = 0; j < s_len;)
++ {
++ mblength = mbrtowc (&wc, (s + j), (s_len - j), &state_mb);
++ assert (mblength != (size_t)-1 && mblength != (size_t)-2);
++ if (mblength == 0)
++ break;
++
++ pwc = towupper (wc);
++ if (pwc == wc)
++ {
++ memcpy (mbc, s + j, mblength);
++ j += mblength;
++ }
++ else
++ {
++ j += mblength;
++ mblength = wcrtomb (mbc, pwc, &state_wc);
++ assert (mblength != (size_t)0 && mblength != (size_t)-1);
++ }
++
++ for (l = 0; l < mblength; l++)
++ name[k++] = mbc[l];
++ }
++ name[k] = '\0';
++ }
++ qsort ((void *) monthtab, MONTHS_PER_YEAR,
++ sizeof (struct month), struct_month_cmp);
++}
++#endif
++
+ /* Specify the amount of main memory to use when sorting. */
+ static void
+ specify_sort_size (char const *s)
+@@ -1241,7 +1368,7 @@
+ by KEY in LINE. */
+
+ static char *
+-begfield (const struct line *line, const struct keyfield *key)
++begfield_uni (const struct line *line, const struct keyfield *key)
+ {
+ char *ptr = line->text, *lim = ptr + line->length - 1;
+ size_t sword = key->sword;
+@@ -1251,10 +1378,10 @@
+ /* The leading field separator itself is included in a field when -t
+ is absent. */
+
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ while (ptr < lim && sword--)
+ {
+- while (ptr < lim && *ptr != tab)
++ while (ptr < lim && *ptr != tab[0])
+ ++ptr;
+ if (ptr < lim)
+ ++ptr;
+@@ -1282,11 +1409,70 @@
+ return ptr;
+ }
+
++#if HAVE_MBRTOWC
++static char *
++begfield_mb (const struct line *line, const struct keyfield *key)
++{
++ int i;
++ char *ptr = line->text, *lim = ptr + line->length - 1;
++ size_t sword = key->sword;
++ size_t schar = key->schar;
++ size_t mblength;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ if (tab_length)
++ while (ptr < lim && sword--)
++ {
++ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ }
++ else
++ while (ptr < lim && sword--)
++ {
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ }
++
++ if (key->skipsblanks)
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++
++ for (i = 0; i < schar; i++)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++
++ if (ptr + mblength > lim)
++ break;
++ else
++ ptr += mblength;
++ }
++
++ return ptr;
++}
++#endif
++
+ /* Return the limit of (a pointer to the first character after) the field
+ in LINE specified by KEY. */
+
+ static char *
+-limfield (const struct line *line, const struct keyfield *key)
++limfield_uni (const struct line *line, const struct keyfield *key)
+ {
+ char *ptr = line->text, *lim = ptr + line->length - 1;
+ size_t eword = key->eword, echar = key->echar;
+@@ -1299,10 +1485,10 @@
+ `beginning' is the first character following the delimiting TAB.
+ Otherwise, leave PTR pointing at the first `blank' character after
+ the preceding field. */
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ while (ptr < lim && eword--)
+ {
+- while (ptr < lim && *ptr != tab)
++ while (ptr < lim && *ptr != tab[0])
+ ++ptr;
+ if (ptr < lim && (eword | echar))
+ ++ptr;
+@@ -1348,10 +1534,10 @@
+ */
+
+ /* Make LIM point to the end of (one byte past) the current field. */
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ {
+ char *newlim;
+- newlim = memchr (ptr, tab, lim - ptr);
++ newlim = memchr (ptr, tab[0], lim - ptr);
+ if (newlim)
+ lim = newlim;
+ }
+@@ -1384,6 +1570,107 @@
+ return ptr;
+ }
+
++#if HAVE_MBRTOWC
++static char *
++limfield_mb (const struct line *line, const struct keyfield *key)
++{
++ char *ptr = line->text, *lim = ptr + line->length - 1;
++ size_t eword = key->eword, echar = key->echar;
++ int i;
++ size_t mblength;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ if (tab_length)
++ while (ptr < lim && eword--)
++ {
++ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ if (ptr < lim && (eword | echar))
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ }
++ else
++ while (ptr < lim && eword--)
++ {
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ }
++
++
++# ifdef POSIX_UNSPECIFIED
++ /* Make LIM point to the end of (one byte past) the current field. */
++ if (tab_length)
++ {
++ char *newlim, *p;
++
++ newlim = NULL;
++ for (p = ptr; p < lim;)
++ {
++ if (memcmp (p, tab, tab_length) == 0)
++ {
++ newlim = p;
++ break;
++ }
++
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ p += mblength;
++ }
++ }
++ else
++ {
++ char *newlim;
++ newlim = ptr;
++
++ while (newlim < lim && ismbblank (newlim, lim - newlim, &mblength))
++ newlim += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (newlim < lim && !ismbblank (newlim, lim - newlim, &mblength))
++ newlim += mblength;
++ lim = newlim;
++ }
++# endif
++
++ /* If we're skipping leading blanks, don't start counting characters
++ * until after skipping past any leading blanks. */
++ if (key->skipsblanks)
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ /* Advance PTR by ECHAR (if possible), but no further than LIM. */
++ for (i = 0; i < echar; i++)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++
++ if (ptr + mblength > lim)
++ break;
++ else
++ ptr += mblength;
++ }
++
++ return ptr;
++}
++#endif
++
+ /* Fill BUF reading from FP, moving buf->left bytes from the end
+ of buf->buf to the beginning first. If EOF is reached and the
+ file wasn't terminated by a newline, supply one. Set up BUF's line
+@@ -1466,8 +1753,24 @@
+ else
+ {
+ if (key->skipsblanks)
+- while (blanks[to_uchar (*line_start)])
+- line_start++;
++ {
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ size_t mblength;
++ mbstate_t state;
++ memset (&state, '\0', sizeof(mbstate_t));
++ while (line_start < line->keylim &&
++ ismbblank (line_start,
++ line->keylim - line_start,
++ &mblength))
++ line_start += mblength;
++ }
++ else
++#endif
++ while (blanks[to_uchar (*line_start)])
++ line_start++;
++ }
+ line->keybeg = line_start;
+ }
+ }
+@@ -1500,7 +1803,7 @@
+ hideously fast. */
+
+ static int
+-numcompare (const char *a, const char *b)
++numcompare_uni (const char *a, const char *b)
+ {
+ while (blanks[to_uchar (*a)])
+ a++;
+@@ -1510,6 +1813,25 @@
+ return strnumcmp (a, b, decimal_point, thousands_sep);
+ }
+
++#if HAVE_MBRTOWC
++static int
++numcompare_mb (const char *a, const char *b)
++{
++ size_t mblength, len;
++ len = strlen (a); /* okay for UTF-8 */
++ while (*a && ismbblank (a, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
++ {
++ a += mblength;
++ len -= mblength;
++ }
++ len = strlen (b); /* okay for UTF-8 */
++ while (*b && ismbblank (b, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
++ b += mblength;
++
++ return strnumcmp (a, b, decimal_point, thousands_sep);
++}
++#endif /* HAV_EMBRTOWC */
++
+ static int
+ general_numcompare (const char *sa, const char *sb)
+ {
+@@ -1543,7 +1865,7 @@
+ Return 0 if the name in S is not recognized. */
+
+ static int
+-getmonth (char const *month, size_t len)
++getmonth_uni (char const *month, size_t len)
+ {
+ size_t lo = 0;
+ size_t hi = MONTHS_PER_YEAR;
+@@ -1698,11 +2020,79 @@
+ return diff;
+ }
+
++#if HAVE_MBRTOWC
++static int
++getmonth_mb (const char *s, size_t len)
++{
++ char *month;
++ register size_t i;
++ register int lo = 0, hi = MONTHS_PER_YEAR, result;
++ char *tmp;
++ size_t wclength, mblength;
++ const char **pp;
++ const wchar_t **wpp;
++ wchar_t *month_wcs;
++ mbstate_t state;
++
++ while (len > 0 && ismbblank (s, len, &mblength))
++ {
++ s += mblength;
++ len -= mblength;
++ }
++
++ if (len == 0)
++ return 0;
++
++ month = (char *) alloca (len + 1);
++
++ tmp = (char *) alloca (len + 1);
++ memcpy (tmp, s, len);
++ tmp[len] = '\0';
++ pp = (const char **)&tmp;
++ month_wcs = (wchar_t *) alloca ((len + 1) * sizeof (wchar_t));
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ wclength = mbsrtowcs (month_wcs, pp, len + 1, &state);
++ assert (wclength != (size_t)-1 && *pp == NULL);
++
++ for (i = 0; i < wclength; i++)
++ {
++ month_wcs[i] = towupper(month_wcs[i]);
++ if (iswblank (month_wcs[i]))
++ {
++ month_wcs[i] = L'\0';
++ break;
++ }
++ }
++
++ wpp = (const wchar_t **)&month_wcs;
++
++ mblength = wcsrtombs (month, wpp, len + 1, &state);
++ assert (mblength != (-1) && *wpp == NULL);
++
++ do
++ {
++ int ix = (lo + hi) / 2;
++
++ if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0)
++ hi = ix;
++ else
++ lo = ix;
++ }
++ while (hi - lo > 1);
++
++ result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name))
++ ? monthtab[lo].val : 0);
++
++ return result;
++}
++#endif
++
+ /* Compare two lines A and B trying every key in sequence until there
+ are no more keys or a difference is found. */
+
+ static int
+-keycompare (const struct line *a, const struct line *b)
++keycompare_uni (const struct line *a, const struct line *b)
+ {
+ struct keyfield const *key = keylist;
+
+@@ -1875,6 +2265,179 @@
+ return key->reverse ? -diff : diff;
+ }
+
++#if HAVE_MBRTOWC
++static int
++keycompare_mb (const struct line *a, const struct line *b)
++{
++ struct keyfield *key = keylist;
++
++ /* For the first iteration only, the key positions have been
++ precomputed for us. */
++ char *texta = a->keybeg;
++ char *textb = b->keybeg;
++ char *lima = a->keylim;
++ char *limb = b->keylim;
++
++ size_t mblength_a, mblength_b;
++ wchar_t wc_a, wc_b;
++ mbstate_t state_a, state_b;
++
++ int diff;
++
++ memset (&state_a, '\0', sizeof(mbstate_t));
++ memset (&state_b, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ unsigned char *translate = (unsigned char *) key->translate;
++ bool const *ignore = key->ignore;
++
++ /* Find the lengths. */
++ size_t lena = lima <= texta ? 0 : lima - texta;
++ size_t lenb = limb <= textb ? 0 : limb - textb;
++
++ /* Actually compare the fields. */
++ if (key->random)
++ diff = compare_random (texta, lena, textb, lenb);
++ else if (key->numeric | key->general_numeric)
++ {
++ char savea = *lima, saveb = *limb;
++
++ *lima = *limb = '\0';
++ if (force_general_numcompare)
++ diff = general_numcompare (texta, textb);
++ else
++ diff = ((key->numeric ? numcompare : general_numcompare)
++ (texta, textb));
++ *lima = savea, *limb = saveb;
++ }
++ else if (key->month)
++ diff = getmonth (texta, lena) - getmonth (textb, lenb);
++ else
++ {
++ if (ignore || translate)
++ {
++ char *copy_a = (char *) alloca (lena + 1 + lenb + 1);
++ char *copy_b = copy_a + lena + 1;
++ size_t new_len_a, new_len_b;
++ size_t i, j;
++
++ /* Ignore and/or translate chars before comparing. */
++# define IGNORE_CHARS(NEW_LEN, LEN, TEXT, COPY, WC, MBLENGTH, STATE) \
++ do \
++ { \
++ wchar_t uwc; \
++ char mbc[MB_LEN_MAX]; \
++ mbstate_t state_wc; \
++ \
++ for (NEW_LEN = i = 0; i < LEN;) \
++ { \
++ mbstate_t state_bak; \
++ \
++ state_bak = STATE; \
++ MBLENGTH = mbrtowc (&WC, TEXT + i, LEN - i, &STATE); \
++ \
++ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1 \
++ || MBLENGTH == 0) \
++ { \
++ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1) \
++ STATE = state_bak; \
++ if (!ignore) \
++ COPY[NEW_LEN++] = TEXT[i++]; \
++ continue; \
++ } \
++ \
++ if (ignore) \
++ { \
++ if ((ignore == nonprinting && !iswprint (WC)) \
++ || (ignore == nondictionary \
++ && !iswalnum (WC) && !iswblank (WC))) \
++ { \
++ i += MBLENGTH; \
++ continue; \
++ } \
++ } \
++ \
++ if (translate) \
++ { \
++ \
++ uwc = towupper(WC); \
++ if (WC == uwc) \
++ { \
++ memcpy (mbc, TEXT + i, MBLENGTH); \
++ i += MBLENGTH; \
++ } \
++ else \
++ { \
++ i += MBLENGTH; \
++ WC = uwc; \
++ memset (&state_wc, '\0', sizeof (mbstate_t)); \
++ \
++ MBLENGTH = wcrtomb (mbc, WC, &state_wc); \
++ assert (MBLENGTH != (size_t)-1 && MBLENGTH != 0); \
++ } \
++ \
++ for (j = 0; j < MBLENGTH; j++) \
++ COPY[NEW_LEN++] = mbc[j]; \
++ } \
++ else \
++ for (j = 0; j < MBLENGTH; j++) \
++ COPY[NEW_LEN++] = TEXT[i++]; \
++ } \
++ COPY[NEW_LEN] = '\0'; \
++ } \
++ while (0)
++ IGNORE_CHARS (new_len_a, lena, texta, copy_a,
++ wc_a, mblength_a, state_a);
++ IGNORE_CHARS (new_len_b, lenb, textb, copy_b,
++ wc_b, mblength_b, state_b);
++ diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b);
++ }
++ else if (lena == 0)
++ diff = - NONZERO (lenb);
++ else if (lenb == 0)
++ goto greater;
++ else
++ diff = xmemcoll (texta, lena, textb, lenb);
++ }
++
++ if (diff)
++ goto not_equal;
++
++ key = key->next;
++ if (! key)
++ break;
++
++ /* Find the beginning and limit of the next field. */
++ if (key->eword != -1)
++ lima = limfield (a, key), limb = limfield (b, key);
++ else
++ lima = a->text + a->length - 1, limb = b->text + b->length - 1;
++
++ if (key->sword != -1)
++ texta = begfield (a, key), textb = begfield (b, key);
++ else
++ {
++ texta = a->text, textb = b->text;
++ if (key->skipsblanks)
++ {
++ while (texta < lima && ismbblank (texta, lima - texta, &mblength_a))
++ texta += mblength_a;
++ while (textb < limb && ismbblank (textb, limb - textb, &mblength_b))
++ textb += mblength_b;
++ }
++ }
++ }
++
++ return 0;
++
++greater:
++ diff = 1;
++not_equal:
++ return key->reverse ? -diff : diff;
++}
++#endif
++
+ /* Compare two lines A and B, returning negative, zero, or positive
+ depending on whether A compares less than, equal to, or greater than B. */
+
+@@ -2744,7 +3305,7 @@
+ initialize_exit_failure (SORT_FAILURE);
+
+ hard_LC_COLLATE = hard_locale (LC_COLLATE);
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ hard_LC_TIME = hard_locale (LC_TIME);
+ #endif
+
+@@ -2765,6 +3326,27 @@
+ thousands_sep = -1;
+ }
+
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ inittables = inittables_mb;
++ begfield = begfield_mb;
++ limfield = limfield_mb;
++ getmonth = getmonth_mb;
++ keycompare = keycompare_mb;
++ numcompare = numcompare_mb;
++ }
++ else
++#endif
++ {
++ inittables = inittables_uni;
++ begfield = begfield_uni;
++ limfield = limfield_uni;
++ getmonth = getmonth_uni;
++ keycompare = keycompare_uni;
++ numcompare = numcompare_uni;
++ }
++
+ have_read_stdin = false;
+ inittables ();
+
+@@ -3015,13 +3597,35 @@
+
+ case 't':
+ {
+- char newtab = optarg[0];
+- if (! newtab)
++ char newtab[MB_LEN_MAX + 1];
++ size_t newtab_length = 1;
++ strncpy (newtab, optarg, MB_LEN_MAX);
++ if (! newtab[0])
+ error (SORT_FAILURE, 0, _("empty tab"));
+- if (optarg[1])
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ wchar_t wc;
++ mbstate_t state;
++ size_t i;
++
++ memset (&state, '\0', sizeof (mbstate_t));
++ newtab_length = mbrtowc (&wc, newtab, strnlen (newtab,
++ MB_LEN_MAX),
++ &state);
++ switch (newtab_length)
++ {
++ case (size_t) -1:
++ case (size_t) -2:
++ case 0:
++ newtab_length = 1;
++ }
++ }
++#endif
++ if (newtab_length == 1 && optarg[1])
+ {
+ if (STREQ (optarg, "\\0"))
+- newtab = '\0';
++ newtab[0] = '\0';
+ else
+ {
+ /* Provoke with `sort -txx'. Complain about
+@@ -3032,9 +3636,12 @@
+ quote (optarg));
+ }
+ }
+- if (tab != TAB_DEFAULT && tab != newtab)
++ if (tab_length
++ && (tab_length != newtab_length
++ || memcmp (tab, newtab, tab_length) != 0))
+ error (SORT_FAILURE, 0, _("incompatible tabs"));
+- tab = newtab;
++ memcpy (tab, newtab, newtab_length);
++ tab_length = newtab_length;
+ }
+ break;
+
+--- coreutils-6.8+/src/unexpand.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/unexpand.c 2007-03-01 15:08:24.000000000 +0000
+@@ -39,11 +39,28 @@
+ #include <stdio.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "unexpand"
+
+@@ -110,6 +127,208 @@
+ {NULL, 0, NULL, 0}
+ };
+
++static FILE *next_file (FILE *fp);
++
++#if HAVE_MBRTOWC
++static void
++unexpand_multibyte (void)
++{
++ FILE *fp; /* Input stream. */
++ mbstate_t i_state; /* Current shift state of the input stream. */
++ mbstate_t i_state_bak; /* Back up the I_STATE. */
++ mbstate_t o_state; /* Current shift state of the output stream. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character
++ which shows as same character as WC. */
++
++ /* Index in `tab_list' of next tabstop: */
++ int tab_index = 0; /* For calculating width of pending tabs. */
++ int print_tab_index = 0; /* For printing as many tabs as possible. */
++ unsigned int column = 0; /* Column on screen of next char. */
++ int next_tab_column; /* Column the next tab stop is on. */
++ int convert = 1; /* If nonzero, perform translations. */
++ unsigned int pending = 0; /* Pending columns of blanks. */
++
++ fp = next_file ((FILE *) NULL);
++ if (fp == NULL)
++ return;
++
++ memset (&o_state, '\0', sizeof(mbstate_t));
++ memset (&i_state, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
++ bufpos = buf;
++ }
++
++ /* Get a wide character. */
++ if (buflen < 1)
++ {
++ mblength = 1;
++ wc = WEOF;
++ }
++ else
++ {
++ i_state_bak = i_state;
++ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &i_state);
++ }
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ i_state = i_state_bak;
++ wc = L'\0';
++ }
++
++ if (wc == L' ' && convert && column < INT_MAX)
++ {
++ ++pending;
++ ++column;
++ }
++ else if (wc == L'\t' && convert)
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (tab_index < first_free_tab - 1
++ && column >= tab_list[tab_index])
++ tab_index++;
++ next_tab_column = tab_list[tab_index];
++ if (tab_index < first_free_tab - 1)
++ tab_index++;
++ if (column >= next_tab_column)
++ {
++ convert = 0; /* Ran out of tab stops. */
++ goto flush_pend_mb;
++ }
++ }
++ else
++ {
++ next_tab_column = column + tab_size - column % tab_size;
++ }
++ pending += next_tab_column - column;
++ column = next_tab_column;
++ }
++ else
++ {
++flush_pend_mb:
++ /* Flush pending spaces. Print as many tabs as possible,
++ then print the rest as spaces. */
++ if (pending == 1)
++ {
++ putchar (' ');
++ pending = 0;
++ }
++ column -= pending;
++ while (pending > 0)
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let print_tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (print_tab_index < first_free_tab - 1
++ && column >= tab_list[print_tab_index])
++ print_tab_index++;
++ next_tab_column = tab_list[print_tab_index];
++ if (print_tab_index < first_free_tab - 1)
++ print_tab_index++;
++ }
++ else
++ {
++ next_tab_column =
++ column + tab_size - column % tab_size;
++ }
++ if (next_tab_column - column <= pending)
++ {
++ putchar ('\t');
++ pending -= next_tab_column - column;
++ column = next_tab_column;
++ }
++ else
++ {
++ --print_tab_index;
++ column += pending;
++ while (pending != 0)
++ {
++ putchar (' ');
++ pending--;
++ }
++ }
++ }
++
++ if (wc == WEOF)
++ {
++ fp = next_file (fp);
++ if (fp == NULL)
++ break; /* No more files. */
++ else
++ {
++ memset (&i_state, '\0', sizeof(mbstate_t));
++ continue;
++ }
++ }
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ if (convert)
++ {
++ ++column;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ mblength = 1;
++ putchar (buf[0]);
++ }
++ else if (mblength == 0)
++ {
++ if (convert && convert_entire_line == 0)
++ convert = 0;
++ mblength = 1;
++ putchar ('\0');
++ }
++ else
++ {
++ if (convert)
++ {
++ if (wc == L'\b')
++ {
++ if (column > 0)
++ --column;
++ }
++ else
++ {
++ int width; /* The width of WC. */
++
++ width = wcwidth (wc);
++ column += (width > 0) ? width : 0;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ }
++
++ if (wc == L'\n')
++ {
++ tab_index = print_tab_index = 0;
++ column = pending = 0;
++ convert = 1;
++ }
++ fwrite (bufpos, sizeof(char), mblength, stdout);
++ }
++ }
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
++
+ void
+ usage (int status)
+ {
+@@ -531,7 +750,12 @@
+
+ file_list = (optind < argc ? &argv[optind] : stdin_argv);
+
+- unexpand ();
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ unexpand_multibyte ();
++ else
++#endif
++ unexpand ();
+
+ if (have_read_stdin && fclose (stdin) != 0)
+ error (EXIT_FAILURE, errno, "-");
+--- coreutils-6.8+/src/pr.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/pr.c 2007-03-01 15:08:24.000000000 +0000
+@@ -313,6 +313,32 @@
+
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get MB_LEN_MAX. */
++#include <limits.h>
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX == 1
++# define MB_LEN_MAX 16
++#endif
++
++/* Get MB_CUR_MAX. */
++#include <stdlib.h>
++
++/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswprint(). -- for wcwidth(). */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++#if !defined iswprint && !HAVE_ISWPRINT
++# define iswprint(wc) 1
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "hard-locale.h"
+@@ -324,6 +350,18 @@
+ #include "strftime.h"
+ #include "xstrtol.h"
+
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
++#ifndef HAVE_DECL_WCWIDTH
++"this configure-time declaration test was not run"
++#endif
++#if !HAVE_DECL_WCWIDTH
++extern int wcwidth ();
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "pr"
+
+@@ -416,7 +454,20 @@
+
+ #define NULLCOL (COLUMN *)0
+
+-static int char_to_clump (char c);
++/* Funtion pointers to switch functions for single byte locale or for
++ multibyte locale. If multibyte functions do not exist in your sysytem,
++ these pointers always point the function for single byte locale. */
++static void (*print_char) (char c);
++static int (*char_to_clump) (char c);
++
++/* Functions for single byte locale. */
++static void print_char_single (char c);
++static int char_to_clump_single (char c);
++
++/* Functions for multibyte locale. */
++static void print_char_multi (char c);
++static int char_to_clump_multi (char c);
++
+ static bool read_line (COLUMN *p);
+ static bool print_page (void);
+ static bool print_stored (COLUMN *p);
+@@ -426,6 +477,7 @@
+ static void pad_across_to (int position);
+ static void add_line_number (COLUMN *p);
+ static void getoptarg (char *arg, char switch_char, char *character,
++ int *character_length, int *character_width,
+ int *number);
+ void usage (int status);
+ static void print_files (int number_of_files, char **av);
+@@ -440,7 +492,6 @@
+ static void pad_down (int lines);
+ static void read_rest_of_line (COLUMN *p);
+ static void skip_read (COLUMN *p, int column_number);
+-static void print_char (char c);
+ static void cleanup (void);
+ static void print_sep_string (void);
+ static void separator_string (const char *optarg_S);
+@@ -455,7 +506,7 @@
+ we store the leftmost columns contiguously in buff.
+ To print a line from buff, get the index of the first character
+ from line_vector[i], and print up to line_vector[i + 1]. */
+-static char *buff;
++static unsigned char *buff;
+
+ /* Index of the position in buff where the next character
+ will be stored. */
+@@ -559,7 +610,7 @@
+ static bool untabify_input = false;
+
+ /* (-e) The input tab character. */
+-static char input_tab_char = '\t';
++static char input_tab_char[MB_LEN_MAX] = "\t";
+
+ /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ...
+ where the leftmost column is 1. */
+@@ -569,7 +620,10 @@
+ static bool tabify_output = false;
+
+ /* (-i) The output tab character. */
+-static char output_tab_char = '\t';
++static char output_tab_char[MB_LEN_MAX] = "\t";
++
++/* (-i) The byte length of output tab character. */
++static int output_tab_char_length = 1;
+
+ /* (-i) The width of the output tab. */
+ static int chars_per_output_tab = 8;
+@@ -643,7 +697,13 @@
+ static bool numbered_lines = false;
+
+ /* (-n) Character which follows each line number. */
+-static char number_separator = '\t';
++static char number_separator[MB_LEN_MAX] = "\t";
++
++/* (-n) The byte length of the character which follows each line number. */
++static int number_separator_length = 1;
++
++/* (-n) The character width of the character which follows each line number. */
++static int number_separator_width = 0;
+
+ /* (-n) line counting starts with 1st line of input file (not with 1st
+ line of 1st page printed). */
+@@ -696,6 +756,7 @@
+ -a|COLUMN|-m is a `space' and with the -J option a `tab'. */
+ static char *col_sep_string = "";
+ static int col_sep_length = 0;
++static int col_sep_width = 0;
+ static char *column_separator = " ";
+ static char *line_separator = "\t";
+
+@@ -852,6 +913,13 @@
+ col_sep_length = (int) strlen (optarg_S);
+ col_sep_string = xmalloc (col_sep_length + 1);
+ strcpy (col_sep_string, optarg_S);
++
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ col_sep_width = mbswidth (col_sep_string, 0);
++ else
++#endif
++ col_sep_width = col_sep_length;
+ }
+
+ int
+@@ -877,6 +945,21 @@
+
+ atexit (close_stdout);
+
++/* Define which functions are used, the ones for single byte locale or the ones
++ for multibyte locale. */
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ print_char = print_char_multi;
++ char_to_clump = char_to_clump_multi;
++ }
++ else
++#endif
++ {
++ print_char = print_char_single;
++ char_to_clump = char_to_clump_single;
++ }
++
+ n_files = 0;
+ file_names = (argc > 1
+ ? xmalloc ((argc - 1) * sizeof (char *))
+@@ -949,8 +1032,12 @@
+ break;
+ case 'e':
+ if (optarg)
+- getoptarg (optarg, 'e', &input_tab_char,
+- &chars_per_input_tab);
++ {
++ int dummy_length, dummy_width;
++
++ getoptarg (optarg, 'e', input_tab_char, &dummy_length,
++ &dummy_width, &chars_per_input_tab);
++ }
+ /* Could check tab width > 0. */
+ untabify_input = true;
+ break;
+@@ -963,8 +1050,12 @@
+ break;
+ case 'i':
+ if (optarg)
+- getoptarg (optarg, 'i', &output_tab_char,
+- &chars_per_output_tab);
++ {
++ int dummy_width;
++
++ getoptarg (optarg, 'i', output_tab_char, &output_tab_char_length,
++ &dummy_width, &chars_per_output_tab);
++ }
+ /* Could check tab width > 0. */
+ tabify_output = true;
+ break;
+@@ -991,8 +1082,8 @@
+ case 'n':
+ numbered_lines = true;
+ if (optarg)
+- getoptarg (optarg, 'n', &number_separator,
+- &chars_per_number);
++ getoptarg (optarg, 'n', number_separator, &number_separator_length,
++ &number_separator_width, &chars_per_number);
+ break;
+ case 'N':
+ skip_count = false;
+@@ -1031,7 +1122,7 @@
+ old_s = false;
+ /* Reset an additional input of -s, -S dominates -s */
+ col_sep_string = "";
+- col_sep_length = 0;
++ col_sep_length = col_sep_width = 0;
+ use_col_separator = true;
+ if (optarg)
+ separator_string (optarg);
+@@ -1188,10 +1279,45 @@
+ a number. */
+
+ static void
+-getoptarg (char *arg, char switch_char, char *character, int *number)
++getoptarg (char *arg, char switch_char, char *character, int *character_length,
++ int *character_width, int *number)
+ {
+ if (!ISDIGIT (*arg))
+- *character = *arg++;
++ {
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1) /* for multibyte locale. */
++ {
++ wchar_t wc;
++ size_t mblength;
++ int width;
++ mbstate_t state = {'\0'};
++
++ mblength = mbrtowc (&wc, arg, strnlen(arg, MB_LEN_MAX), &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ *character_length = 1;
++ *character_width = 1;
++ }
++ else
++ {
++ *character_length = (mblength < 1) ? 1 : mblength;
++ width = wcwidth (wc);
++ *character_width = (width < 0) ? 0 : width;
++ }
++
++ strncpy (character, arg, *character_length);
++ arg += *character_length;
++ }
++ else /* for single byte locale. */
++#endif
++ {
++ *character = *arg++;
++ *character_length = 1;
++ *character_width = 1;
++ }
++ }
++
+ if (*arg)
+ {
+ long int tmp_long;
+@@ -1256,7 +1382,7 @@
+ else
+ col_sep_string = column_separator;
+
+- col_sep_length = 1;
++ col_sep_length = col_sep_width = 1;
+ use_col_separator = true;
+ }
+ /* It's rather pointless to define a TAB separator with column
+@@ -1288,11 +1414,11 @@
+ TAB_WIDTH (chars_per_input_tab, chars_per_number); */
+
+ /* Estimate chars_per_text without any margin and keep it constant. */
+- if (number_separator == '\t')
++ if (number_separator[0] == '\t')
+ number_width = chars_per_number +
+ TAB_WIDTH (chars_per_default_tab, chars_per_number);
+ else
+- number_width = chars_per_number + 1;
++ number_width = chars_per_number + number_separator_width;
+
+ /* The number is part of the column width unless we are
+ printing files in parallel. */
+@@ -1307,7 +1433,7 @@
+ }
+
+ chars_per_column = (chars_per_line - chars_used_by_number -
+- (columns - 1) * col_sep_length) / columns;
++ (columns - 1) * col_sep_width) / columns;
+
+ if (chars_per_column < 1)
+ error (EXIT_FAILURE, 0, _("page width too narrow"));
+@@ -1432,7 +1558,7 @@
+
+ /* Enlarge p->start_position of first column to use the same form of
+ padding_not_printed with all columns. */
+- h = h + col_sep_length;
++ h = h + col_sep_width;
+
+ /* This loop takes care of all but the rightmost column. */
+
+@@ -1466,7 +1592,7 @@
+ }
+ else
+ {
+- h = h_next + col_sep_length;
++ h = h_next + col_sep_width;
+ h_next = h + chars_per_column;
+ }
+ }
+@@ -1756,9 +1882,9 @@
+ align_column (COLUMN *p)
+ {
+ padding_not_printed = p->start_position;
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2029,13 +2155,13 @@
+ /* May be too generous. */
+ buff = X2REALLOC (buff, &buff_allocated);
+ }
+- buff[buff_current++] = c;
++ buff[buff_current++] = (unsigned char) c;
+ }
+
+ static void
+ add_line_number (COLUMN *p)
+ {
+- int i;
++ int i, j;
+ char *s;
+ int left_cut;
+
+@@ -2058,22 +2184,24 @@
+ /* Tabification is assumed for multiple columns, also for n-separators,
+ but `default n-separator = TAB' hasn't been given priority over
+ equal column_width also specified by POSIX. */
+- if (number_separator == '\t')
++ if (number_separator[0] == '\t')
+ {
+ i = number_width - chars_per_number;
+ while (i-- > 0)
+ (p->char_func) (' ');
+ }
+ else
+- (p->char_func) (number_separator);
++ for (j = 0; j < number_separator_length; j++)
++ (p->char_func) (number_separator[j]);
+ }
+ else
+ /* To comply with POSIX, we avoid any expansion of default TAB
+ separator with a single column output. No column_width requirement
+ has to be considered. */
+ {
+- (p->char_func) (number_separator);
+- if (number_separator == '\t')
++ for (j = 0; j < number_separator_length; j++)
++ (p->char_func) (number_separator[j]);
++ if (number_separator[0] == '\t')
+ output_position = POS_AFTER_TAB (chars_per_output_tab,
+ output_position);
+ }
+@@ -2234,7 +2362,7 @@
+ while (goal - h_old > 1
+ && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
+ {
+- putchar (output_tab_char);
++ fwrite (output_tab_char, sizeof(char), output_tab_char_length, stdout);
+ h_old = h_new;
+ }
+ while (++h_old <= goal)
+@@ -2254,6 +2382,7 @@
+ {
+ char *s;
+ int l = col_sep_length;
++ int not_space_flag;
+
+ s = col_sep_string;
+
+@@ -2267,6 +2396,7 @@
+ {
+ for (; separators_not_printed > 0; --separators_not_printed)
+ {
++ not_space_flag = 0;
+ while (l-- > 0)
+ {
+ /* 3 types of sep_strings: spaces only, spaces and chars,
+@@ -2280,12 +2410,15 @@
+ }
+ else
+ {
++ not_space_flag = 1;
+ if (spaces_not_printed > 0)
+ print_white_space ();
+ putchar (*s++);
+- ++output_position;
+ }
+ }
++ if (not_space_flag)
++ output_position += col_sep_width;
++
+ /* sep_string ends with some spaces */
+ if (spaces_not_printed > 0)
+ print_white_space ();
+@@ -2313,7 +2446,7 @@
+ required number of tabs and spaces. */
+
+ static void
+-print_char (char c)
++print_char_single (char c)
+ {
+ if (tabify_output)
+ {
+@@ -2337,6 +2470,74 @@
+ putchar (c);
+ }
+
++#ifdef HAVE_MBRTOWC
++static void
++print_char_multi (char c)
++{
++ static size_t mbc_pos = 0;
++ static char mbc[MB_LEN_MAX] = {'\0'};
++ static mbstate_t state = {'\0'};
++ mbstate_t state_bak;
++ wchar_t wc;
++ size_t mblength;
++ int width;
++
++ if (tabify_output)
++ {
++ state_bak = state;
++ mbc[mbc_pos++] = c;
++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
++
++ while (mbc_pos > 0)
++ {
++ switch (mblength)
++ {
++ case (size_t)-2:
++ state = state_bak;
++ return;
++
++ case (size_t)-1:
++ state = state_bak;
++ ++output_position;
++ putchar (mbc[0]);
++ memmove (mbc, mbc + 1, MB_CUR_MAX - 1);
++ --mbc_pos;
++ break;
++
++ case 0:
++ mblength = 1;
++
++ default:
++ if (wc == L' ')
++ {
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ --mbc_pos;
++ ++spaces_not_printed;
++ return;
++ }
++ else if (spaces_not_printed > 0)
++ print_white_space ();
++
++ /* Nonprintables are assumed to have width 0, except L'\b'. */
++ if ((width = wcwidth (wc)) < 1)
++ {
++ if (wc == L'\b')
++ --output_position;
++ }
++ else
++ output_position += width;
++
++ fwrite (mbc, sizeof(char), mblength, stdout);
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ mbc_pos -= mblength;
++ }
++ }
++ return;
++ }
++ putchar (c);
++}
++#endif
++
+ /* Skip to page PAGE before printing.
+ PAGE may be larger than total number of pages. */
+
+@@ -2517,9 +2718,9 @@
+ align_empty_cols = false;
+ }
+
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2620,9 +2821,9 @@
+ }
+ }
+
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2635,8 +2836,8 @@
+ if (spaces_not_printed == 0)
+ {
+ output_position = p->start_position + end_vector[line];
+- if (p->start_position - col_sep_length == chars_per_margin)
+- output_position -= col_sep_length;
++ if (p->start_position - col_sep_width == chars_per_margin)
++ output_position -= col_sep_width;
+ }
+
+ return true;
+@@ -2655,7 +2856,7 @@
+ number of characters is 1.) */
+
+ static int
+-char_to_clump (char c)
++char_to_clump_single (char c)
+ {
+ unsigned char uc = c;
+ char *s = clump_buff;
+@@ -2665,10 +2866,10 @@
+ int chars;
+ int chars_per_c = 8;
+
+- if (c == input_tab_char)
++ if (c == input_tab_char[0])
+ chars_per_c = chars_per_input_tab;
+
+- if (c == input_tab_char || c == '\t')
++ if (c == input_tab_char[0] || c == '\t')
+ {
+ width = TAB_WIDTH (chars_per_c, input_position);
+
+@@ -2739,6 +2940,154 @@
+ return chars;
+ }
+
++#ifdef HAVE_MBRTOWC
++static int
++char_to_clump_multi (char c)
++{
++ static size_t mbc_pos = 0;
++ static char mbc[MB_LEN_MAX] = {'\0'};
++ static mbstate_t state = {'\0'};
++ mbstate_t state_bak;
++ wchar_t wc;
++ size_t mblength;
++ int wc_width;
++ register char *s = clump_buff;
++ register int i, j;
++ char esc_buff[4];
++ int width;
++ int chars;
++ int chars_per_c = 8;
++
++ state_bak = state;
++ mbc[mbc_pos++] = c;
++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
++
++ width = 0;
++ chars = 0;
++ while (mbc_pos > 0)
++ {
++ switch (mblength)
++ {
++ case (size_t)-2:
++ state = state_bak;
++ return 0;
++
++ case (size_t)-1:
++ state = state_bak;
++ mblength = 1;
++
++ if (use_esc_sequence || use_cntrl_prefix)
++ {
++ width = +4;
++ chars = +4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", mbc[0]);
++ for (i = 0; i <= 2; ++i)
++ *s++ = (int) esc_buff[i];
++ }
++ else
++ {
++ width += 1;
++ chars += 1;
++ *s++ = mbc[0];
++ }
++ break;
++
++ case 0:
++ mblength = 1;
++ /* Fall through */
++
++ default:
++ if (memcmp (mbc, input_tab_char, mblength) == 0)
++ chars_per_c = chars_per_input_tab;
++
++ if (memcmp (mbc, input_tab_char, mblength) == 0 || c == '\t')
++ {
++ int width_inc;
++
++ width_inc = TAB_WIDTH (chars_per_c, input_position);
++ width += width_inc;
++
++ if (untabify_input)
++ {
++ for (i = width_inc; i; --i)
++ *s++ = ' ';
++ chars += width_inc;
++ }
++ else
++ {
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ chars += mblength;
++ }
++ }
++ else if ((wc_width = wcwidth (wc)) < 1)
++ {
++ if (use_esc_sequence)
++ {
++ for (i = 0; i < mblength; i++)
++ {
++ width += 4;
++ chars += 4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", c);
++ for (j = 0; j <= 2; ++j)
++ *s++ = (int) esc_buff[j];
++ }
++ }
++ else if (use_cntrl_prefix)
++ {
++ if (wc < 0200)
++ {
++ width += 2;
++ chars += 2;
++ *s++ = '^';
++ *s++ = wc ^ 0100;
++ }
++ else
++ {
++ for (i = 0; i < mblength; i++)
++ {
++ width += 4;
++ chars += 4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", c);
++ for (j = 0; j <= 2; ++j)
++ *s++ = (int) esc_buff[j];
++ }
++ }
++ }
++ else if (wc == L'\b')
++ {
++ width += -1;
++ chars += 1;
++ *s++ = c;
++ }
++ else
++ {
++ width += 0;
++ chars += mblength;
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ }
++ }
++ else
++ {
++ width += wc_width;
++ chars += mblength;
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ }
++ }
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ mbc_pos -= mblength;
++ }
++
++ input_position += width;
++ return chars;
++}
++#endif
++
+ /* We've just printed some files and need to clean up things before
+ looking for more options and printing the next batch of files.
+
+--- coreutils-6.8+/src/cut.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/cut.c 2007-03-01 15:08:24.000000000 +0000
+@@ -29,6 +29,11 @@
+ #include <assert.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
+ #include "system.h"
+
+ #include "error.h"
+@@ -37,6 +42,18 @@
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# undef MB_LEN_MAX
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "cut"
+
+@@ -67,6 +84,52 @@
+ } \
+ while (0)
+
++/* Refill the buffer BUF to get a multibyte character. */
++#define REFILL_BUFFER(BUF, BUFPOS, BUFLEN, STREAM) \
++ do \
++ { \
++ if (BUFLEN < MB_LEN_MAX && !feof (STREAM) && !ferror (STREAM)) \
++ { \
++ memmove (BUF, BUFPOS, BUFLEN); \
++ BUFLEN += fread (BUF + BUFLEN, sizeof(char), BUFSIZ, STREAM); \
++ BUFPOS = BUF; \
++ } \
++ } \
++ while (0)
++
++/* Get wide character on BUFPOS. BUFPOS is not included after that.
++ If byte sequence is not valid as a character, CONVFAIL is 1. Otherwise 0. */
++#define GET_NEXT_WC_FROM_BUFFER(WC, BUFPOS, BUFLEN, MBLENGTH, STATE, CONVFAIL) \
++ do \
++ { \
++ mbstate_t state_bak; \
++ \
++ if (BUFLEN < 1) \
++ { \
++ WC = WEOF; \
++ break; \
++ } \
++ \
++ /* Get a wide character. */ \
++ CONVFAIL = 0; \
++ state_bak = STATE; \
++ MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-1: \
++ case (size_t)-2: \
++ CONVFAIL++; \
++ STATE = state_bak; \
++ /* Fall througn. */ \
++ \
++ case 0: \
++ MBLENGTH = 1; \
++ break; \
++ } \
++ } \
++ while (0)
++
+ struct range_pair
+ {
+ size_t lo;
+@@ -85,7 +148,7 @@
+ /* The number of bytes allocated for FIELD_1_BUFFER. */
+ static size_t field_1_bufsize;
+
+-/* The largest field or byte index used as an endpoint of a closed
++/* The largest byte, character or field index used as an endpoint of a closed
+ or degenerate range specification; this doesn't include the starting
+ index of right-open-ended ranges. For example, with either range spec
+ `2-5,9-', `2-3,5,9-' this variable would be set to 5. */
+@@ -97,10 +160,11 @@
+
+ /* This is a bit vector.
+ In byte mode, which bytes to output.
++ In character mode, which characters to output.
+ In field mode, which DELIM-separated fields to output.
+- Both bytes and fields are numbered starting with 1,
++ Bytes, characters and fields are numbered starting with 1,
+ so the zeroth bit of this array is unused.
+- A field or byte K has been selected if
++ A byte, character or field K has been selected if
+ (K <= MAX_RANGE_ENDPOINT and is_printable_field(K))
+ || (EOL_RANGE_START > 0 && K >= EOL_RANGE_START). */
+ static unsigned char *printable_field;
+@@ -109,9 +173,12 @@
+ {
+ undefined_mode,
+
+- /* Output characters that are in the given bytes. */
++ /* Output bytes that are at the given positions. */
+ byte_mode,
+
++ /* Output characters that are at the given positions. */
++ character_mode,
++
+ /* Output the given delimeter-separated fields. */
+ field_mode
+ };
+@@ -121,6 +188,13 @@
+
+ static enum operating_mode operating_mode;
+
++/* If nonzero, when in byte mode, don't split multibyte characters. */
++static int byte_mode_character_aware;
++
++/* If nonzero, the function for single byte locale is work
++ if this program runs on multibyte locale. */
++static int force_singlebyte_mode;
++
+ /* If true do not output lines containing no delimeter characters.
+ Otherwise, all such lines are printed. This option is valid only
+ with field mode. */
+@@ -132,6 +206,9 @@
+
+ /* The delimeter character for field mode. */
+ static unsigned char delim;
++#if HAVE_WCHAR_H
++static wchar_t wcdelim;
++#endif
+
+ /* True if the --output-delimiter=STRING option was specified. */
+ static bool output_delimiter_specified;
+@@ -205,7 +282,7 @@
+ -f, --fields=LIST select only these fields; also print any line\n\
+ that contains no delimiter character, unless\n\
+ the -s option is specified\n\
+- -n (ignored)\n\
++ -n with -b: don't split multibyte characters\n\
+ "), stdout);
+ fputs (_("\
+ --complement complement the set of selected bytes, characters\n\
+@@ -362,7 +439,7 @@
+ in_digits = false;
+ /* Starting a range. */
+ if (dash_found)
+- FATAL_ERROR (_("invalid byte or field list"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+ dash_found = true;
+ fieldstr++;
+
+@@ -387,14 +464,16 @@
+ if (!rhs_specified)
+ {
+ /* `n-'. From `initial' to end of line. */
+- eol_range_start = initial;
++ if (eol_range_start == 0 ||
++ (eol_range_start != 0 && eol_range_start > initial))
++ eol_range_start = initial;
+ field_found = true;
+ }
+ else
+ {
+ /* `m-n' or `-n' (1-n). */
+ if (value < initial)
+- FATAL_ERROR (_("invalid decreasing range"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+
+ /* Is there already a range going to end of line? */
+ if (eol_range_start != 0)
+@@ -467,6 +546,9 @@
+ if (operating_mode == byte_mode)
+ error (0, 0,
+ _("byte offset %s is too large"), quote (bad_num));
++ else if (operating_mode == character_mode)
++ error (0, 0,
++ _("character offset %s is too large"), quote (bad_num));
+ else
+ error (0, 0,
+ _("field number %s is too large"), quote (bad_num));
+@@ -477,7 +559,7 @@
+ fieldstr++;
+ }
+ else
+- FATAL_ERROR (_("invalid byte or field list"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+ }
+
+ max_range_endpoint = 0;
+@@ -570,6 +652,63 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++/* This function is in use for the following case.
++
++ 1. Read from the stream STREAM, printing to standard output any selected
++ characters.
++
++ 2. Read from stream STREAM, printing to standard output any selected bytes,
++ without splitting multibyte characters. */
++
++static void
++cut_characters_or_cut_bytes_no_split (FILE *stream)
++{
++ int idx; /* number of bytes or characters in the line so far. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen; /* The length of the byte sequence in buf. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ idx = 0;
++ buflen = 0;
++ bufpos = buf;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ {
++ if (idx > 0)
++ putchar ('\n');
++ break;
++ }
++ else if (wc == L'\n')
++ {
++ putchar ('\n');
++ idx = 0;
++ }
++ else
++ {
++ idx += (operating_mode == byte_mode) ? mblength : 1;
++ if (print_kth (idx, NULL))
++ fwrite (bufpos, mblength, sizeof(char), stdout);
++ }
++
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
+ /* Read from stream STREAM, printing to standard output any selected fields. */
+
+ static void
+@@ -692,13 +831,192 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++static void
++cut_fields_mb (FILE *stream)
++{
++ int c;
++ unsigned int field_idx;
++ int found_any_selected_field;
++ int buffer_first_field;
++ int empty_input;
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen; /* The length of the byte sequence in buf. */
++ wint_t wc = 0; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ found_any_selected_field = 0;
++ field_idx = 1;
++ bufpos = buf;
++ buflen = 0;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ c = getc (stream);
++ empty_input = (c == EOF);
++ if (c != EOF)
++ ungetc (c, stream);
++ else
++ wc = WEOF;
++
++ /* To support the semantics of the -s flag, we may have to buffer
++ all of the first field to determine whether it is `delimited.'
++ But that is unnecessary if all non-delimited lines must be printed
++ and the first field has been selected, or if non-delimited lines
++ must be suppressed and the first field has *not* been selected.
++ That is because a non-delimited line has exactly one field. */
++ buffer_first_field = (suppress_non_delimited ^ !print_kth (1, NULL));
++
++ while (1)
++ {
++ if (field_idx == 1 && buffer_first_field)
++ {
++ int len = 0;
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER
++ (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ break;
++
++ field_1_buffer = xrealloc (field_1_buffer, len + mblength);
++ memcpy (field_1_buffer + len, bufpos, mblength);
++ len += mblength;
++ buflen -= mblength;
++ bufpos += mblength;
++
++ if (!convfail && (wc == L'\n' || wc == wcdelim))
++ break;
++ }
++
++ if (wc == WEOF)
++ break;
++
++ /* If the first field extends to the end of line (it is not
++ delimited) and we are printing all non-delimited lines,
++ print this one. */
++ if (convfail || (!convfail && wc != wcdelim))
++ {
++ if (suppress_non_delimited)
++ {
++ /* Empty. */
++ }
++ else
++ {
++ fwrite (field_1_buffer, sizeof (char), len, stdout);
++ /* Make sure the output line is newline terminated. */
++ if (convfail || (!convfail && wc != L'\n'))
++ putchar ('\n');
++ }
++ continue;
++ }
++
++ if (print_kth (1, NULL))
++ {
++ /* Print the field, but not the trailing delimiter. */
++ fwrite (field_1_buffer, sizeof (char), len - 1, stdout);
++ found_any_selected_field = 1;
++ }
++ ++field_idx;
++ }
++
++ if (wc != WEOF)
++ {
++ if (print_kth (field_idx, NULL))
++ {
++ if (found_any_selected_field)
++ {
++ fwrite (output_delimiter_string, sizeof (char),
++ output_delimiter_length, stdout);
++ }
++ found_any_selected_field = 1;
++ }
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER
++ (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ break;
++ else if (!convfail && (wc == wcdelim || wc == L'\n'))
++ {
++ buflen -= mblength;
++ bufpos += mblength;
++ break;
++ }
++
++ if (print_kth (field_idx, NULL))
++ fwrite (bufpos, mblength, sizeof(char), stdout);
++
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++ }
++
++ if ((!convfail || wc == L'\n') && buflen < 1)
++ wc = WEOF;
++
++ if (!convfail && wc == wcdelim)
++ ++field_idx;
++ else if (wc == WEOF || (!convfail && wc == L'\n'))
++ {
++ if (found_any_selected_field
++ || (!empty_input && !(suppress_non_delimited && field_idx == 1)))
++ putchar ('\n');
++ if (wc == WEOF)
++ break;
++ field_idx = 1;
++ found_any_selected_field = 0;
++ }
++ }
++}
++#endif
++
+ static void
+ cut_stream (FILE *stream)
+ {
+- if (operating_mode == byte_mode)
+- cut_bytes (stream);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
++ {
++ switch (operating_mode)
++ {
++ case byte_mode:
++ if (byte_mode_character_aware)
++ cut_characters_or_cut_bytes_no_split (stream);
++ else
++ cut_bytes (stream);
++ break;
++
++ case character_mode:
++ cut_characters_or_cut_bytes_no_split (stream);
++ break;
++
++ case field_mode:
++ cut_fields_mb (stream);
++ break;
++
++ default:
++ abort ();
++ }
++ }
+ else
+- cut_fields (stream);
++#endif
++ {
++ if (operating_mode == field_mode)
++ cut_fields (stream);
++ else
++ cut_bytes (stream);
++ }
+ }
+
+ /* Process file FILE to standard output.
+@@ -748,6 +1066,8 @@
+ bool ok;
+ bool delim_specified = false;
+ char *spec_list_string IF_LINT(= NULL);
++ char mbdelim[MB_LEN_MAX + 1];
++ size_t delimlen = 0;
+
+ initialize_main (&argc, &argv);
+ program_name = argv[0];
+@@ -770,7 +1090,6 @@
+ switch (optc)
+ {
+ case 'b':
+- case 'c':
+ /* Build the byte list. */
+ if (operating_mode != undefined_mode)
+ FATAL_ERROR (_("only one type of list may be specified"));
+@@ -778,6 +1097,14 @@
+ spec_list_string = optarg;
+ break;
+
++ case 'c':
++ /* Build the character list. */
++ if (operating_mode != undefined_mode)
++ FATAL_ERROR (_("only one type of list may be specified"));
++ operating_mode = character_mode;
++ spec_list_string = optarg;
++ break;
++
+ case 'f':
+ /* Build the field list. */
+ if (operating_mode != undefined_mode)
+@@ -789,10 +1116,35 @@
+ case 'd':
+ /* New delimiter. */
+ /* Interpret -d '' to mean `use the NUL byte as the delimiter.' */
+- if (optarg[0] != '\0' && optarg[1] != '\0')
+- FATAL_ERROR (_("the delimiter must be a single character"));
+- delim = optarg[0];
+- delim_specified = true;
++ {
++#if HAVE_MBRTOWC
++ if(MB_CUR_MAX > 1)
++ {
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++ delimlen = mbrtowc (&wcdelim, optarg, strnlen(optarg, MB_LEN_MAX), &state);
++
++ if (delimlen == (size_t)-1 || delimlen == (size_t)-2)
++ ++force_singlebyte_mode;
++ else
++ {
++ delimlen = (delimlen < 1) ? 1 : delimlen;
++ if (wcdelim != L'\0' && *(optarg + delimlen) != '\0')
++ FATAL_ERROR (_("the delimiter must be a single character"));
++ memcpy (mbdelim, optarg, delimlen);
++ }
++ }
++
++ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
++#endif
++ {
++ if (optarg[0] != '\0' && optarg[1] != '\0')
++ FATAL_ERROR (_("the delimiter must be a single character"));
++ delim = (unsigned char) optarg[0];
++ }
++ delim_specified = true;
++ }
+ break;
+
+ case OUTPUT_DELIMITER_OPTION:
+@@ -805,6 +1157,7 @@
+ break;
+
+ case 'n':
++ byte_mode_character_aware = 1;
+ break;
+
+ case 's':
+@@ -827,7 +1180,7 @@
+ if (operating_mode == undefined_mode)
+ FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));
+
+- if (delim != '\0' && operating_mode != field_mode)
++ if (delim_specified && operating_mode != field_mode)
+ FATAL_ERROR (_("an input delimiter may be specified only\
+ when operating on fields"));
+
+@@ -854,15 +1207,34 @@
+ }
+
+ if (!delim_specified)
+- delim = '\t';
++ {
++ delim = '\t';
++#ifdef HAVE_MBRTOWC
++ wcdelim = L'\t';
++ mbdelim[0] = '\t';
++ mbdelim[1] = '\0';
++ delimlen = 1;
++#endif
++ }
+
+ if (output_delimiter_string == NULL)
+ {
+- static char dummy[2];
+- dummy[0] = delim;
+- dummy[1] = '\0';
+- output_delimiter_string = dummy;
+- output_delimiter_length = 1;
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
++ {
++ output_delimiter_string = xstrdup(mbdelim);
++ output_delimiter_length = delimlen;
++ }
++
++ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
++#endif
++ {
++ static char dummy[2];
++ dummy[0] = delim;
++ dummy[1] = '\0';
++ output_delimiter_string = dummy;
++ output_delimiter_length = 1;
++ }
+ }
+
+ if (optind == argc)
diff --git a/abs/core-testing/coreutils/coreutils-pam.patch b/abs/core-testing/coreutils/coreutils-pam.patch
new file mode 100644
index 0000000..8593ecc
--- /dev/null
+++ b/abs/core-testing/coreutils/coreutils-pam.patch
@@ -0,0 +1,413 @@
+--- coreutils-6.7/src/Makefile.am.pam 2006-11-24 21:28:10.000000000 +0000
++++ coreutils-6.7/src/Makefile.am 2007-01-09 17:00:01.000000000 +0000
+@@ -103,7 +103,7 @@
+ # If necessary, add -lm to resolve use of pow in lib/strtod.c.
+ uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
+
+-su_LDADD = $(LDADD) $(LIB_CRYPT)
++su_LDADD = $(LDADD) $(LIB_CRYPT) @LIB_PAM@
+
+ dir_LDADD += $(LIB_ACL)
+ ls_LDADD += $(LIB_ACL)
+--- coreutils-6.7/src/su.c.pam 2007-01-09 17:00:01.000000000 +0000
++++ coreutils-6.7/src/su.c 2007-01-09 17:16:43.000000000 +0000
+@@ -38,6 +38,16 @@
+ restricts who can su to UID 0 accounts. RMS considers that to
+ be fascist.
+
++#ifdef USE_PAM
++
++ Actually, with PAM, su has nothing to do with whether or not a
++ wheel group is enforced by su. RMS tries to restrict your access
++ to a su which implements the wheel group, but PAM considers that
++ to be fascist, and gives the user/sysadmin the opportunity to
++ enforce a wheel group by proper editing of /etc/pam.conf
++
++#endif
++
+ Compile-time options:
+ -DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
+ -DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
+@@ -59,6 +69,15 @@
+ prototype (returning `int') in <unistd.h>. */
+ #define getusershell _getusershell_sys_proto_
+
++#ifdef USE_PAM
++# include <signal.h>
++# include <sys/wait.h>
++# include <sys/fsuid.h>
++# include <unistd.h>
++# include <security/pam_appl.h>
++# include <security/pam_misc.h>
++#endif /* USE_PAM */
++
+ #include "system.h"
+ #include "getpass.h"
+
+@@ -128,15 +147,22 @@
+ /* The user to become if none is specified. */
+ #define DEFAULT_USER "root"
+
++#ifndef USE_PAM
+ char *crypt ();
++#endif
+ char *getusershell ();
+ void endusershell ();
+ void setusershell ();
+
+ extern char **environ;
+
+-static void run_shell (char const *, char const *, char **, size_t)
++static void run_shell (char const *, char const *, char **, size_t,
++ const struct passwd *)
++#ifdef USE_PAM
++ ;
++#else
+ ATTRIBUTE_NORETURN;
++#endif
+
+ /* The name this program was run with. */
+ char *program_name;
+@@ -225,7 +251,26 @@
+ }
+ #endif
+
++#ifdef USE_PAM
++static pam_handle_t *pamh = NULL;
++static int retval;
++static struct pam_conv conv = {
++ misc_conv,
++ NULL
++};
++
++#define PAM_BAIL_P if (retval) { \
++ pam_end(pamh, PAM_SUCCESS); \
++ return 0; \
++}
++#define PAM_BAIL_P_VOID if (retval) { \
++ pam_end(pamh, PAM_SUCCESS); \
++return; \
++}
++#endif
++
+ /* Ask the user for a password.
++ If PAM is in use, let PAM ask for the password if necessary.
+ Return true if the user gives the correct password for entry PW,
+ false if not. Return true without asking for a password if run by UID 0
+ or if PW has an empty password. */
+@@ -233,6 +278,44 @@
+ static bool
+ correct_password (const struct passwd *pw)
+ {
++#ifdef USE_PAM
++ struct passwd *caller;
++ char *tty_name, *ttyn;
++ retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
++ PAM_BAIL_P;
++
++ if (getuid() != 0 && !isatty(0)) {
++ fprintf(stderr, "standard in must be a tty\n");
++ exit(1);
++ }
++
++ caller = getpwuid(getuid());
++ if(caller != NULL && caller->pw_name != NULL) {
++ retval = pam_set_item(pamh, PAM_RUSER, caller->pw_name);
++ PAM_BAIL_P;
++ }
++
++ ttyn = ttyname(0);
++ if (ttyn) {
++ if (strncmp(ttyn, "/dev/", 5) == 0)
++ tty_name = ttyn+5;
++ else
++ tty_name = ttyn;
++ retval = pam_set_item(pamh, PAM_TTY, tty_name);
++ PAM_BAIL_P;
++ }
++ retval = pam_authenticate(pamh, 0);
++ PAM_BAIL_P;
++ retval = pam_acct_mgmt(pamh, 0);
++ if (retval == PAM_NEW_AUTHTOK_REQD) {
++ /* password has expired. Offer option to change it. */
++ retval = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
++ PAM_BAIL_P;
++ }
++ PAM_BAIL_P;
++ /* must be authenticated if this point was reached */
++ return 1;
++#else /* !USE_PAM */
+ char *unencrypted, *encrypted, *correct;
+ #if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
+ /* Shadow passwd stuff for SVR3 and maybe other systems. */
+@@ -257,6 +340,7 @@
+ encrypted = crypt (unencrypted, correct);
+ memset (unencrypted, 0, strlen (unencrypted));
+ return STREQ (encrypted, correct);
++#endif /* !USE_PAM */
+ }
+
+ /* Update `environ' for the new shell based on PW, with SHELL being
+@@ -270,12 +354,18 @@
+ /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
+ Unset all other environment variables. */
+ char const *term = getenv ("TERM");
++ char const *display = getenv ("DISPLAY");
++ char const *xauthority = getenv ("XAUTHORITY");
+ if (term)
+ term = xstrdup (term);
+ environ = xmalloc ((6 + !!term) * sizeof (char *));
+ environ[0] = NULL;
+ if (term)
+ xsetenv ("TERM", term);
++ if (display)
++ xsetenv ("DISPLAY", display);
++ if (xauthority)
++ xsetenv ("XAUTHORITY", xauthority);
+ xsetenv ("HOME", pw->pw_dir);
+ xsetenv ("SHELL", shell);
+ xsetenv ("USER", pw->pw_name);
+@@ -308,8 +398,13 @@
+ {
+ #ifdef HAVE_INITGROUPS
+ errno = 0;
+- if (initgroups (pw->pw_name, pw->pw_gid) == -1)
++ if (initgroups (pw->pw_name, pw->pw_gid) == -1) {
++#ifdef USE_PAM
++ pam_close_session(pamh, 0);
++ pam_end(pamh, PAM_ABORT);
++#endif
+ error (EXIT_FAILURE, errno, _("cannot set groups"));
++ }
+ endgrent ();
+ #endif
+ if (setgid (pw->pw_gid))
+@@ -318,6 +413,31 @@
+ error (EXIT_FAILURE, errno, _("cannot set user id"));
+ }
+
++#ifdef USE_PAM
++static int caught=0;
++/* Signal handler for parent process later */
++static void su_catch_sig(int sig)
++{
++ ++caught;
++}
++
++int
++pam_copyenv (pam_handle_t *pamh)
++{
++ char **env;
++
++ env = pam_getenvlist(pamh);
++ if(env) {
++ while(*env) {
++ if (putenv (*env))
++ xalloc_die ();
++ env++;
++ }
++ }
++ return(0);
++}
++#endif
++
+ /* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
+ If COMMAND is nonzero, pass it to the shell with the -c option.
+ Pass ADDITIONAL_ARGS to the shell as more arguments; there
+@@ -325,17 +445,49 @@
+
+ static void
+ run_shell (char const *shell, char const *command, char **additional_args,
+- size_t n_additional_args)
++ size_t n_additional_args, const struct passwd *pw)
+ {
+ size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
+ char const **args = xnmalloc (n_args, sizeof *args);
+ size_t argno = 1;
++#ifdef USE_PAM
++ int child;
++ sigset_t ourset;
++ int status;
++
++ retval = pam_open_session(pamh,0);
++ if (retval != PAM_SUCCESS) {
++ fprintf (stderr, "could not open session\n");
++ exit (1);
++ }
++
++/* do this at the last possible moment, because environment variables may
++ be passed even in the session phase
++*/
++ if(pam_copyenv(pamh) != PAM_SUCCESS)
++ fprintf (stderr, "error copying PAM environment\n");
++
++ /* Credentials should be set in the parent */
++ if (pam_setcred(pamh, PAM_ESTABLISH_CRED) != PAM_SUCCESS) {
++ pam_close_session(pamh, 0);
++ fprintf(stderr, "could not set PAM credentials\n");
++ exit(1);
++ }
++
++ child = fork();
++ if (child == 0) { /* child shell */
++ change_identity (pw);
++ pam_end(pamh, 0);
++#endif
+
+ if (simulate_login)
+ {
+ char *arg0;
+ char *shell_basename;
+
++ if(chdir(pw->pw_dir))
++ error(0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
++
+ shell_basename = last_component (shell);
+ arg0 = xmalloc (strlen (shell_basename) + 2);
+ arg0[0] = '-';
+@@ -360,6 +512,66 @@
+ error (0, errno, "%s", shell);
+ exit (exit_status);
+ }
++#ifdef USE_PAM
++ } else if (child == -1) {
++ fprintf(stderr, "can not fork user shell: %s", strerror(errno));
++ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
++ pam_close_session(pamh, 0);
++ pam_end(pamh, PAM_ABORT);
++ exit(1);
++ }
++ /* parent only */
++ sigfillset(&ourset);
++ if (sigprocmask(SIG_BLOCK, &ourset, NULL)) {
++ fprintf(stderr, "%s: signal malfunction\n", PROGRAM_NAME);
++ caught = 1;
++ }
++ if (!caught) {
++ struct sigaction action;
++ action.sa_handler = su_catch_sig;
++ sigemptyset(&action.sa_mask);
++ action.sa_flags = 0;
++ sigemptyset(&ourset);
++ if (sigaddset(&ourset, SIGTERM)
++ || sigaddset(&ourset, SIGALRM)
++ || sigaction(SIGTERM, &action, NULL)
++ || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
++ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
++ caught = 1;
++ }
++ }
++ if (!caught) {
++ do {
++ int pid;
++
++ pid = waitpid(-1, &status, WUNTRACED);
++
++ if (WIFSTOPPED(status)) {
++ kill(getpid(), SIGSTOP);
++ /* once we get here, we must have resumed */
++ kill(pid, SIGCONT);
++ }
++ } while (WIFSTOPPED(status));
++ }
++
++ if (caught) {
++ fprintf(stderr, "\nSession terminated, killing shell...");
++ kill (child, SIGTERM);
++ }
++ /* Not checking retval on this because we need to call close session */
++ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
++ retval = pam_close_session(pamh, 0);
++ PAM_BAIL_P_VOID;
++ retval = pam_end(pamh, PAM_SUCCESS);
++ PAM_BAIL_P_VOID;
++ if (caught) {
++ sleep(2);
++ kill(child, SIGKILL);
++ fprintf(stderr, " ...killed.\n");
++ exit(-1);
++ }
++ exit (WEXITSTATUS(status));
++#endif /* USE_PAM */
+ }
+
+ /* Return true if SHELL is a restricted shell (one not returned by
+@@ -527,9 +739,9 @@
+ shell = xstrdup (shell ? shell : pw->pw_shell);
+ modify_environment (pw, shell);
+
++#ifndef USE_PAM
+ change_identity (pw);
+- if (simulate_login && chdir (pw->pw_dir) != 0)
+- error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
++#endif
+
+- run_shell (shell, command, argv + optind, MAX (0, argc - optind));
++ run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw);
+ }
+--- coreutils-6.7/doc/coreutils.texi.pam 2006-10-27 15:30:48.000000000 +0100
++++ coreutils-6.7/doc/coreutils.texi 2007-01-09 17:00:01.000000000 +0000
+@@ -13395,8 +13395,11 @@
+ @findex syslog
+ @command{su} can optionally be compiled to use @code{syslog} to report
+ failed, and optionally successful, @command{su} attempts. (If the system
+-supports @code{syslog}.) However, GNU @command{su} does not check if the
+-user is a member of the @code{wheel} group; see below.
++supports @code{syslog}.)
++
++This version of @command{su} has support for using PAM for
++authentication. You can edit @file{/etc/pam.d/su} to customize its
++behaviour.
+
+ The program accepts the following options. Also see @ref{Common options}.
+
+@@ -13477,33 +13480,6 @@
+ the exit status of the subshell otherwise
+ @end display
+
+-@cindex wheel group, not supported
+-@cindex group wheel, not supported
+-@cindex fascism
+-@subsection Why GNU @command{su} does not support the @samp{wheel} group
+-
+-(This section is by Richard Stallman.)
+-
+-@cindex Twenex
+-@cindex MIT AI lab
+-Sometimes a few of the users try to hold total power over all the
+-rest. For example, in 1984, a few users at the MIT AI lab decided to
+-seize power by changing the operator password on the Twenex system and
+-keeping it secret from everyone else. (I was able to thwart this coup
+-and give power back to the users by patching the kernel, but I
+-wouldn't know how to do that in Unix.)
+-
+-However, occasionally the rulers do tell someone. Under the usual
+-@command{su} mechanism, once someone learns the root password who
+-sympathizes with the ordinary users, he or she can tell the rest. The
+-``wheel group'' feature would make this impossible, and thus cement the
+-power of the rulers.
+-
+-I'm on the side of the masses, not that of the rulers. If you are
+-used to supporting the bosses and sysadmins in whatever they do, you
+-might find this idea strange at first.
+-
+-
+ @node Process control
+ @chapter Process control
+
+--- coreutils-6.7/configure.ac.pam 2006-12-07 21:30:24.000000000 +0000
++++ coreutils-6.7/configure.ac 2007-01-09 17:18:04.000000000 +0000
+@@ -44,6 +44,13 @@
+ gl_INIT
+ coreutils_MACROS
+
++dnl Give the chance to enable PAM
++AC_ARG_ENABLE(pam, dnl
++[ --enable-pam Enable use of the PAM libraries],
++[AC_DEFINE(USE_PAM, 1, [Define if you want to use PAM])
++LIB_PAM="-ldl -lpam -lpam_misc"
++AC_SUBST(LIB_PAM)])
++
+ AC_FUNC_FORK
+
+ optional_bin_progs=
diff --git a/abs/core-testing/coreutils/coreutils-uname.patch b/abs/core-testing/coreutils/coreutils-uname.patch
new file mode 100644
index 0000000..93cb134
--- /dev/null
+++ b/abs/core-testing/coreutils/coreutils-uname.patch
@@ -0,0 +1,173 @@
+On linux platforms, grok /proc/cpuinfo for the CPU/vendor info.
+
+Prob not suitable for upstream seeing as how it's 100% linux-specific
+http://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
+
+Patch originally by Carlos E. Gorges <carlos@techlinux.com.br>, but
+heavily reworked to suck less.
+
+To add support for additional platforms, check out the show_cpuinfo()
+func in the linux/arch/<ARCH>/ source tree of the kernel.
+
+--- coreutils/src/uname.c
++++ coreutils/src/uname.c
+@@ -51,6 +51,11 @@
+ # include <mach-o/arch.h>
+ #endif
+
++#if defined (__linux__)
++# define USE_PROCINFO
++# define UNAME_HARDWARE_PLATFORM
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+@@ -138,6 +143,117 @@
+ exit (status);
+ }
+
++#if defined(USE_PROCINFO)
++
++# if defined(__s390__) || defined(__s390x__)
++# define CPUINFO_FILE "/proc/sysinfo"
++# define CPUINFO_FORMAT "%64[^\t :]%*[ :]%256[^\n]%c"
++# else
++# define CPUINFO_FILE "/proc/cpuinfo"
++# define CPUINFO_FORMAT "%64[^\t:]\t:%256[^\n]%c"
++# endif
++
++# define PROCINFO_PROCESSOR 0
++# define PROCINFO_HARDWARE_PLATFORM 1
++
++static void __eat_cpuinfo_space(char *buf)
++{
++ /* first eat trailing space */
++ char *tmp = buf + strlen(buf) - 1;
++ while (tmp > buf && isspace(*tmp))
++ *tmp-- = '\0';
++ /* then eat leading space */
++ tmp = buf;
++ while (*tmp && isspace(*tmp))
++ tmp++;
++ if (tmp != buf)
++ memmove(buf, tmp, strlen(tmp)+1);
++ /* finally collapse whitespace */
++ tmp = buf;
++ while (tmp[0] && tmp[1]) {
++ if (isspace(tmp[0]) && isspace(tmp[1])) {
++ memmove(tmp, tmp+1, strlen(tmp));
++ continue;
++ }
++ ++tmp;
++ }
++}
++
++static int __linux_procinfo (int x, char *fstr, size_t s)
++{
++ FILE *fp;
++
++ char *procinfo_keys[] = {
++ /* --processor --hardware-platform */
++ #if defined(__alpha__)
++ "cpu model", "system type"
++ #elif defined(__arm__)
++ "Processor", "Hardware"
++ #elif defined(__avr32__)
++ "processor", "cpu family"
++ #elif defined(__bfin__)
++ "CPU", "BOARD Name"
++ #elif defined(__cris__)
++ "cpu", "cpu model"
++ #elif defined(__frv__)
++ "CPU-Core", "System"
++ #elif defined(__i386__) || defined(__x86_64__)
++ "model name", "vendor_id"
++ #elif defined(__ia64__)
++ "family", "vendor"
++ #elif defined(__hppa__)
++ "cpu", "model"
++ #elif defined(__m68k__)
++ "CPU", "MMU"
++ #elif defined(__mips__)
++ "cpu model", "system type"
++ #elif defined(__powerpc__) || defined(__powerpc64__)
++ "cpu", "machine"
++ #elif defined(__s390__) || defined(__s390x__)
++ "Type", "Manufacturer"
++ #elif defined(__sh__)
++ "cpu type", "machine"
++ #elif defined(sparc) || defined(__sparc__)
++ "type", "cpu"
++ #elif defined(__vax__)
++ "cpu type", "cpu"
++ #else
++ "unknown", "unknown"
++ #endif
++ };
++
++ if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
++ char key[65], value[257], eol, *ret = NULL;
++
++ while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
++ __eat_cpuinfo_space(key);
++ if (!strcmp(key, procinfo_keys[x])) {
++ __eat_cpuinfo_space(value);
++ ret = value;
++ break;
++ }
++ if (eol != '\n') {
++ /* we need two fscanf's here in case the previous
++ * length limit caused us to read right up to the
++ * newline ... doing "%*[^\n]\n" wont eat the newline
++ */
++ fscanf(fp, "%*[^\n]");
++ fscanf(fp, "\n");
++ }
++ }
++ fclose(fp);
++
++ if (ret) {
++ strncpy(fstr, ret, s);
++ return 0;
++ }
++ }
++
++ return -1;
++}
++
++#endif
++
+ /* Print ELEMENT, preceded by a space if something has already been
+ printed. */
+
+@@ -250,10 +344,14 @@ main (int argc, char **argv)
+ if (toprint & PRINT_PROCESSOR)
+ {
+ char const *element = unknown;
+-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
++#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
+ {
+ static char processor[257];
++#if defined(USE_PROCINFO)
++ if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
++#else
+ if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
++#endif
+ element = processor;
+ }
+ #endif
+@@ -306,9 +404,13 @@ main (int argc, char **argv)
+ if (element == unknown)
+ {
+ static char hardware_platform[257];
++#if defined(USE_PROCINFO)
++ if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
++#else
+ size_t s = sizeof hardware_platform;
+ static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
+ if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
++#endif
+ element = hardware_platform;
+ }
+ #endif
diff --git a/abs/core-testing/coreutils/futimes.patch b/abs/core-testing/coreutils/futimes.patch
new file mode 100644
index 0000000..bb08384
--- /dev/null
+++ b/abs/core-testing/coreutils/futimes.patch
@@ -0,0 +1,47 @@
+--- coreutils-6.9/lib/utimens.h.futimens 2007-02-23 18:25:21.000000000 +0000
++++ coreutils-6.9/lib/utimens.h 2007-06-13 11:40:37.000000000 +0100
+@@ -1,3 +1,3 @@
+ #include <time.h>
+-int futimens (int, char const *, struct timespec const [2]);
++int gl_futimens (int, char const *, struct timespec const [2]);
+ int utimens (char const *, struct timespec const [2]);
+--- coreutils-6.9/lib/utimens.c.futimens 2007-01-18 08:33:34.000000000 +0000
++++ coreutils-6.9/lib/utimens.c 2007-06-13 11:40:37.000000000 +0100
+@@ -75,7 +75,7 @@ struct utimbuf
+ Return 0 on success, -1 (setting errno) on failure. */
+
+ int
+-futimens (int fd ATTRIBUTE_UNUSED,
++gl_futimens (int fd ATTRIBUTE_UNUSED,
+ char const *file, struct timespec const timespec[2])
+ {
+ /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+@@ -185,5 +185,5 @@ futimens (int fd ATTRIBUTE_UNUSED,
+ int
+ utimens (char const *file, struct timespec const timespec[2])
+ {
+- return futimens (-1, file, timespec);
++ return gl_futimens (-1, file, timespec);
+ }
+--- coreutils-6.9/src/copy.c.futimens 2007-06-13 11:56:44.000000000 +0100
++++ coreutils-6.9/src/copy.c 2007-06-13 11:57:00.000000000 +0100
+@@ -547,7 +547,7 @@ copy_reg (char const *src_name, char con
+ timespec[0] = get_stat_atime (src_sb);
+ timespec[1] = get_stat_mtime (src_sb);
+
+- if (futimens (dest_desc, dst_name, timespec) != 0)
++ if (gl_futimens (dest_desc, dst_name, timespec) != 0)
+ {
+ error (0, errno, _("preserving times for %s"), quote (dst_name));
+ if (x->require_preserve)
+--- coreutils-6.9/src/touch.c.futimens 2007-06-13 11:58:00.000000000 +0100
++++ coreutils-6.9/src/touch.c 2007-06-13 11:58:06.000000000 +0100
+@@ -182,7 +182,7 @@ touch (const char *file)
+ t = timespec;
+ }
+
+- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
++ ok = (gl_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
+
+ if (fd == STDIN_FILENO)
+ {
diff --git a/abs/core-testing/coreutils/su b/abs/core-testing/coreutils/su
new file mode 100644
index 0000000..cf15f40
--- /dev/null
+++ b/abs/core-testing/coreutils/su
@@ -0,0 +1,9 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+# Uncomment the following line to implicitly trust users in the "wheel" group.
+#auth sufficient pam_wheel.so trust use_uid
+# Uncomment the following line to require a user to be in the "wheel" group.
+#auth required pam_wheel.so use_uid
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
diff --git a/abs/core-testing/cpio/PKGBUILD b/abs/core-testing/cpio/PKGBUILD
new file mode 100644
index 0000000..9d1bbff
--- /dev/null
+++ b/abs/core-testing/cpio/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=cpio
+pkgver=2.9
+pkgrel=12
+pkgdesc="A tool to copy files into or out of a cpio or tar archive"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.gnu.org/software/cpio"
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/cpio/cpio-${pkgver}.tar.gz \
+ cpio-2.9-gcc43.patch)
+md5sums=('2bb997a33555d4dc79d45d0cdf02cedd' '214864365e72328f5a4fd822bba55d74')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i $startdir/src/cpio-2.9-gcc43.patch
+ ./configure --prefix=/usr --mandir=/usr/man
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/usr/bin/mt ${startdir}/pkg/usr/man/man1/mt.1
+ mv ${startdir}/pkg/usr/bin ${startdir}/pkg/bin
+ rm -rf ${startdir}/pkg/usr/libexec
+}
diff --git a/abs/core-testing/cpio/cpio-2.9-gcc43.patch b/abs/core-testing/cpio/cpio-2.9-gcc43.patch
new file mode 100644
index 0000000..da9004a
--- /dev/null
+++ b/abs/core-testing/cpio/cpio-2.9-gcc43.patch
@@ -0,0 +1,31 @@
+--- tar-1.19/lib/argp-fmtstream.h.gcc43 2007-09-28 15:11:36.000000000 +0200
++++ tar-1.19/lib/argp-fmtstream.h 2008-02-13 16:56:58.000000000 +0100
+@@ -198,7 +198,11 @@ extern int __argp_fmtstream_ensure (argp
+ #endif
+
+ #ifndef ARGP_FS_EI
+-#define ARGP_FS_EI extern inline
++# ifdef __GNUC_STDC_INLINE__
++# define ARGP_FS_EI extern inline __attribute__((__gnu_inline__))
++# else
++# define ARGP_FS_EI extern inline
++# endif
+ #endif
+
+ ARGP_FS_EI size_t
+diff -up tar-1.19/lib/argp.h.gcc43 tar-1.19/lib/argp.h
+--- tar-1.19/lib/argp.h.gcc43 2007-09-28 15:11:36.000000000 +0200
++++ tar-1.19/lib/argp.h 2008-02-13 16:55:36.000000000 +0100
+@@ -580,7 +580,11 @@ extern void *__argp_input (const struct
+ # endif
+
+ # ifndef ARGP_EI
+-# define ARGP_EI extern __inline__
++# if defined __GNUC_STDC_INLINE__
++# define ARGP_EI extern __inline__ __attribute__((__gnu_inline__))
++# else
++# define ARGP_EI extern __inline__
++# endif
+ # endif
+
+ ARGP_EI void
diff --git a/abs/core-testing/cracklib/PKGBUILD b/abs/core-testing/cracklib/PKGBUILD
new file mode 100644
index 0000000..597e160
--- /dev/null
+++ b/abs/core-testing/cracklib/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Federico Quagliata (quaqo) <quaqo@despammed.com>
+pkgname=cracklib
+pkgver=2.8.10
+pkgrel=14
+pkgdesc="Password Checking Library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://sourceforge.net/projects/cracklib"
+groups=('base')
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('555f7832b63ebc7fb70b0373500c2358')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ mkdir -p $startdir/pkg/usr/share/dict
+ make DESTDIR=$startdir/pkg install
+ cp dicts/cracklib-small $startdir/pkg/usr/share/dict
+ sh ./util/cracklib-format dicts/cracklib-small \
+ | sh ./util/cracklib-packer $startdir/pkg/usr/share/cracklib/pw_dict
+}
diff --git a/abs/core-testing/cryptsetup/PKGBUILD b/abs/core-testing/cryptsetup/PKGBUILD
new file mode 100644
index 0000000..ff5f83f
--- /dev/null
+++ b/abs/core-testing/cryptsetup/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=cryptsetup
+pkgver=1.0.6
+pkgrel=10
+pkgdesc="Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://luks.endorphin.org/dm-crypt"
+groups=('base')
+depends=('device-mapper' 'libgcrypt' 'popt' 'e2fsprogs')
+options=('!libtool' '!emptydirs')
+source=(http://luks.endorphin.org/source/cryptsetup-$pkgver.tar.bz2
+ encrypt_hook
+ encrypt_install
+ luksOpen-status.patch)
+md5sums=('00d452eb7a76e39f5749545d48934a10'
+ '40fee2419cd444cfb283c311f9555d2d'
+ '24b76e9cb938bc3c8dcff396cbab28c7'
+ 'd4be8d2059d5427c057be4de4e948887')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ # suppress "Command successful" message on luksOpen
+ patch -p1 -i $startdir/src/luksOpen-status.patch
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # include a static cryptsetup binary for initrd setups
+ make clean
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-static
+ make || return 1
+ # include a static cryptsetup binary for initrd setups
+ install -D -m755 src/cryptsetup $startdir/pkg/sbin/cryptsetup.static || return 1
+ # install hook
+ install -D -m644 $startdir/src/encrypt_hook $startdir/pkg/lib/initcpio/hooks/encrypt
+ install -D -m644 $startdir/src/encrypt_install $startdir/pkg/lib/initcpio/install/encrypt
+}
diff --git a/abs/core-testing/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch b/abs/core-testing/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch
new file mode 100644
index 0000000..28f85e6
--- /dev/null
+++ b/abs/core-testing/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch
@@ -0,0 +1,29 @@
+Index: cryptsetup-1.0.5/lib/libdevmapper.c
+===================================================================
+--- cryptsetup-1.0.5.orig/lib/libdevmapper.c
++++ cryptsetup-1.0.5/lib/libdevmapper.c
+@@ -18,6 +18,13 @@
+
+ #define CRYPT_TARGET "crypt"
+
++#define UDEVSETTLE "/sbin/udevsettle"
++
++static void run_udevsettle(void)
++{
++ system(UDEVSETTLE);
++}
++
+ static void set_dm_error(int level, const char *file, int line,
+ const char *f, ...)
+ {
+@@ -184,6 +191,9 @@ static int dm_create_device(int reload,
+ if (dmi.read_only)
+ options->flags |= CRYPT_FLAG_READONLY;
+
++ /* run udevsettle to avoid problems with busy dm devices */
++ run_udevsettle();
++
+ r = 0;
+
+ out:
+
diff --git a/abs/core-testing/cryptsetup/encrypt_hook b/abs/core-testing/cryptsetup/encrypt_hook
new file mode 100644
index 0000000..248f1f2
--- /dev/null
+++ b/abs/core-testing/cryptsetup/encrypt_hook
@@ -0,0 +1,122 @@
+# vim: set ft=sh:
+# TODO this one needs some work to work with lots of different
+# encryption schemes
+run_hook ()
+{
+ /sbin/modprobe -a -q dm-crypt >/dev/null 2>&1
+ if [ -e "/sys/class/misc/device-mapper" ]; then
+ if [ ! -c "/dev/mapper/control" ]; then
+ read dev_t < /sys/class/misc/device-mapper/dev
+ /bin/mknod "/dev/mapper/control" c $(/bin/replace "${dev_t}" ':')
+ fi
+ [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
+
+ # Get keyfile if specified
+ ckeyfile="/crypto_keyfile.bin"
+ if [ "x${cryptkey}" != "x" ]; then
+ set -- $(/bin/replace "${cryptkey}" ':'); ckdev=$1; ckarg1=$2; ckarg2=$3
+ try=10
+ echo "Waiting for ${ckdev} ..."
+ while [ ! -b ${ckdev} -a ${try} -gt 0 ]; do
+ sleep 1
+ try=$((${try}-1))
+ done
+ if [ -b ${ckdev} ]; then
+ case ${ckarg1} in
+ *[!0-9]*)
+ # Use a file on the device
+ # ckarg1 is not numeric: ckarg1=filesystem, ckarg2=path
+ mkdir /ckey
+ mount -r -t ${ckarg1} ${ckdev} /ckey
+ dd if=/ckey/${ckarg2} of=${ckeyfile} >/dev/null 2>&1
+ umount /ckey
+ ;;
+ *)
+ # Read raw data from the block device
+ # ckarg1 is numeric: ckarg1=offset, ckarg2=length
+ dd if=${ckdev} of=${ckeyfile} bs=1 skip=${ckarg1} count=${ckarg2} >/dev/null 2>&1
+ ;;
+ esac
+ fi
+ [ ! -f ${ckeyfile} ] && echo "Keyfile could not be opened. Reverting to passphrase."
+ fi
+
+ if [ -n "${cryptdevice}" ]; then
+ set -- $(/bin/replace "${cryptdevice}" ':'); cryptdev="$1"; cryptname="$2";
+ else
+ cryptdev="${root}"
+ cryptname="root"
+ fi
+
+ if /bin/cryptsetup isLuks ${cryptdev} >/dev/null 2>&1; then
+ dopassphrase=1
+ # If keyfile exists, try to use that
+ if [ -f ${ckeyfile} ]; then
+ if eval /bin/cryptsetup --key-file ${ckeyfile} luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; then
+ dopassphrase=0
+ else
+ echo "Invalid keyfile. Reverting to passphrase."
+ fi
+ fi
+ # Ask for a passphrase
+ if [ ${dopassphrase} -gt 0 ]; then
+ echo ""
+ echo "A password is required to access the ${cryptname} volume:"
+
+ #loop until we get a real password
+ while ! eval /bin/cryptsetup luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; do
+ sleep 2;
+ done
+ fi
+ if [ -e "/dev/mapper/${cryptname}" ]; then
+ if [ "${cryptname}" = "root" ]; then
+ export root="/dev/mapper/root"
+ fi
+ else
+ err "Password succeeded, but ${cryptname} creation failed, aborting..."
+ exit 1
+ fi
+ elif [ "x${crypto}" != "x" ]; then
+ do_oldcrypto ()
+ {
+ if [ $# -ne 5 ]; then
+ err "Verify parameter format: crypto=hash:cipher:keysize:offset:skip"
+ err "Non-LUKS decryption not attempted..."
+ return 1
+ fi
+ exe="/bin/cryptsetup create ${cryptname} ${cryptdev}"
+ [ "x$(eval echo ${1})" != "x" ] && exe="${exe} --hash \"$(eval echo ${1})\""
+ [ "x$(eval echo ${2})" != "x" ] && exe="${exe} --cipher \"$(eval echo ${2})\""
+ [ "x$(eval echo ${3})" != "x" ] && exe="${exe} --key-size \"$(eval echo ${3})\""
+ [ "x$(eval echo ${4})" != "x" ] && exe="${exe} --offset \"$(eval echo ${4})\""
+ [ "x$(eval echo ${5})" != "x" ] && exe="${exe} --skip \"$(eval echo ${5})\""
+ if [ -f ${ckeyfile} ]; then
+ exe="${exe} --key-file ${ckeyfile}"
+ else
+ exe="${exe} --verify-passphrase"
+ echo ""
+ echo "A password is required to access the ${cryptname} volume:"
+ fi
+ eval "${exe} ${CSQUIET}"
+ }
+
+ msg "Non-LUKS encrypted device found..."
+ do_oldcrypto $(/bin/replace -q "${crypto}" ':')
+
+ if [ $? -ne 0 ]; then
+ err "Non-LUKS device decryption failed. verify format: "
+ err " crypto=hash:cipher:keysize:offset:skip"
+ exit 1
+ fi
+ if [ -e "/dev/mapper/${cryptname}" ]; then
+ if [ "${cryptname}" = "root" ]; then
+ export root="/dev/mapper/root"
+ fi
+ else
+ err "Password succeeded, but ${cryptname} creation failed, aborting..."
+ exit 1
+ fi
+ fi
+ nuke ${ckeyfile}
+ fi
+}
diff --git a/abs/core-testing/cryptsetup/encrypt_install b/abs/core-testing/cryptsetup/encrypt_install
new file mode 100644
index 0000000..28cfa3f
--- /dev/null
+++ b/abs/core-testing/cryptsetup/encrypt_install
@@ -0,0 +1,22 @@
+# vim: set ft=sh:
+
+install ()
+{
+ if [ -z "${CRYPTO_MODULES}" ]; then
+ MODULES=" dm-crypt $(all_modules "/crypto/") "
+ else
+ MODULES=" dm-crypt ${CRYPTO_MODULES} "
+ fi
+ BINARIES=""
+ add_dir "/dev/mapper"
+ add_file "/sbin/cryptsetup.static" "/bin/cryptsetup"
+ FILES=""
+ SCRIPT="encrypt"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook allows for an encrypted root device.
+HELPEOF
+}
diff --git a/abs/core-testing/cryptsetup/luksOpen-status.patch b/abs/core-testing/cryptsetup/luksOpen-status.patch
new file mode 100644
index 0000000..d2e4004
--- /dev/null
+++ b/abs/core-testing/cryptsetup/luksOpen-status.patch
@@ -0,0 +1,13 @@
+diff -Nur cryptsetup-luks-1.0.4.orig/src/cryptsetup.c cryptsetup-luks-1.0.4/src/cryptsetup.c
+--- cryptsetup-luks-1.0.4.orig/src/cryptsetup.c 2006-10-04 15:47:00.000000000 +0200
++++ cryptsetup-luks-1.0.4/src/cryptsetup.c 2006-12-16 15:54:12.000000000 +0100
+@@ -249,7 +249,8 @@
+ if (opt_readonly)
+ options.flags |= CRYPT_FLAG_READONLY;
+ r = crypt_luksOpen(&options);
+- show_status(-r);
++ if(r)
++ show_status(-r);
+ return r;
+ }
+
diff --git a/abs/core-testing/curl/ChangeLog b/abs/core-testing/curl/ChangeLog
new file mode 100644
index 0000000..a508322
--- /dev/null
+++ b/abs/core-testing/curl/ChangeLog
@@ -0,0 +1,19 @@
+2008-06-04 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.2-1
+ * Upstream update
+ * Switched to the CA Root Certificates provided by the ca-certificates package (close FS#10569)
+ * Removed bundled certificates
+ * Removed perl-libwww makedepends
+
+2008-04-30 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.1-2
+ * Added CA Root Certificates (close FS#10129)
+ * Added perl-libwww makedepends
+
+2008-03-31 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.1-1
+ * Upstream update
+ * Added ChangeLog
diff --git a/abs/core-testing/curl/PKGBUILD b/abs/core-testing/curl/PKGBUILD
new file mode 100644
index 0000000..cfac1fe
--- /dev/null
+++ b/abs/core-testing/curl/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 2514 2008-06-05 23:10:19Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl>
+
+pkgname=curl
+pkgver=7.18.2
+pkgrel=1
+pkgdesc="An URL retrival utility and library"
+arch=('i686' 'x86_64')
+url="http://curl.haxx.se"
+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')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --without-libidn --disable-ldap \
+ --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt || 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
+}
diff --git a/abs/core-testing/damageproto/PKGBUILD b/abs/core-testing/damageproto/PKGBUILD
new file mode 100644
index 0000000..af6087a
--- /dev/null
+++ b/abs/core-testing/damageproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=damageproto
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X11 Damage extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xproto' 'fixesproto')
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('33ee591e0b1ca5ad7902934541db7d24')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/dash/PKGBUILD b/abs/core-testing/dash/PKGBUILD
new file mode 100644
index 0000000..eccfe5c
--- /dev/null
+++ b/abs/core-testing/dash/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=dash
+pkgver=0.5.4
+pkgrel=13
+pkgdesc="A POSIX compliant shell that aims to be as small as possible"
+arch=('i686' 'x86_64')
+url="http://gondor.apana.org.au/~herbert/dash/"
+license=('BSD')
+groups=('base')
+makedepends=('klibc>=1.5')
+#provides=('sh')
+source=("http://gondor.apana.org.au/~herbert/dash/files/dash-$pkgver.tar.gz")
+md5sums=('bc457e490a589d2f87f2333616b67931')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --mandir=/usr/share/man --exec-prefix="" CC=klcc LD=klcc LDFLAGS="-static"
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # license
+ install -m644 -D COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+
+ #static dash is our default /bin/sh
+ #cd ${startdir}/pkg/bin
+ #ln -s dash sh
+}
diff --git a/abs/core-testing/db/PKGBUILD b/abs/core-testing/db/PKGBUILD
new file mode 100644
index 0000000..e41aeac
--- /dev/null
+++ b/abs/core-testing/db/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 3741 2008-06-30 20:07:01Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=db
+pkgver=4.7.25
+pkgrel=10
+pkgdesc="The Berkeley DB embedded database system"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.oracle.com/technology/software/products/berkeley-db/index.html"
+groups=('base')
+depends=('gcc-libs' 'coreutils')
+options=('!libtool')
+source=(http://download-uk.oracle.com/berkeley-db/db-$pkgver.tar.gz)
+install=(db.install)
+md5sums=('ec2b87e833779681a0c3a814aa71359e')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver/build_unix
+ ../dist/configure --prefix=/usr --enable-compat185 \
+ --enable-shared --enable-static --enable-cxx
+ make LIBSO_LIBS=-lpthread || return 1
+ make DESTDIR=${pkgdir} install
+ rm -rf ${pkgdir}/usr/docs
+ mkdir -p ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/${pkgname}-${pkgver}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/db/db.install b/abs/core-testing/db/db.install
new file mode 100644
index 0000000..7c97ea0
--- /dev/null
+++ b/abs/core-testing/db/db.install
@@ -0,0 +1,29 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo "ATTENTION DB PACKAGE:"
+ echo "Please consider to run db_upgrade on Berkeley DB databases with a major db version number update."
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $* \ No newline at end of file
diff --git a/abs/core-testing/db4.5/PKGBUILD b/abs/core-testing/db4.5/PKGBUILD
new file mode 100644
index 0000000..db87a0d
--- /dev/null
+++ b/abs/core-testing/db4.5/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=db4.5
+pkgver=4.5.20
+pkgrel=2
+pkgdesc="The Berkeley DB embedded database system 4.5"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://www.oracle.com/technology/software/products/berkeley-db/index.html"
+depends=('gcc-libs')
+options=('!libtool' '!makeflags')
+source=(http://download-uk.oracle.com/berkeley-db/db-${pkgver}.tar.gz
+ http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.1
+ http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.2)
+md5sums=('b0f1c777708cb8e9d37fb47e7ed3312d'
+ 'a571e239b9041d7990df287cbc59ad6f'
+ 'b7a7086a067ba116f5a8464362c9a9a7')
+
+build() {
+ cd ${startdir}/src/db-${pkgver}/
+ patch -Np0 -i ${startdir}/src/patch.4.5.20.1 || return 1
+ patch -Np0 -i ${startdir}/src/patch.4.5.20.2 || return 1
+
+ cd build_unix
+ ../dist/configure --prefix=/usr --enable-compat185 \
+ --enable-shared --disable-static --enable-cxx
+ make LIBSO_LIBS=-lpthread || return 1
+ make prefix=${startdir}/pkg/usr \
+ includedir=${startdir}/pkg/usr/include/db4.5 install
+
+ rm -rf ${startdir}/pkg/usr/docs
+ rm -f ${startdir}/pkg/usr/lib/libdb{,_cxx}.so
+ rm -f ${startdir}/pkg/usr/lib/libdb{,_cxx}-4.so
+
+ cd ${startdir}/pkg/usr/bin
+ for i in *; do
+ mv $i db4.5_${i/db_/}
+ done
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/db-${pkgver}/LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/dbus-glib/PKGBUILD b/abs/core-testing/dbus-glib/PKGBUILD
new file mode 100644
index 0000000..4eb8838
--- /dev/null
+++ b/abs/core-testing/dbus-glib/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3474 2008-06-22 20:19:25Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=dbus-glib
+pkgver=0.76
+pkgrel=1
+pkgdesc="GLib bindings for DBUS"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.freedesktop.org/wiki/Software/DBusBindings"
+depends=('dbus>=1.2.1' 'glib2>=2.16.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://dbus.freedesktop.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('d3b716a7e798faa1c6a867675f00306a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-static=no || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/dbus/PKGBUILD b/abs/core-testing/dbus/PKGBUILD
new file mode 100644
index 0000000..dc747bc
--- /dev/null
+++ b/abs/core-testing/dbus/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 9899 2008-08-20 20:01:17Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Link Dupont <link@subpop.net>
+#
+pkgname=dbus
+pkgver=1.2.3
+pkgrel=1
+pkgdesc="Freedesktop.org message bus system"
+url="http://www.freedesktop.org/Software/dbus"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+depends=('expat>=2.0' 'libx11' 'libsm')
+options=(!libtool)
+install=dbus.install
+source=(http://dbus.freedesktop.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ dbus)
+md5sums=('f71641385768e99361bd298568207cee'
+ 'f3fd196cc278bd7b45a4ca01fb8f7894')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/dbus-1.0 --with-dbus-user=81 \
+ --with-system-pid-file=/var/run/dbus.pid \
+ --disable-verbose-mode --disable-static \
+ --disable-tests --disable-asserts || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ chown 81:81 ${startdir}/pkg/var/run/dbus || return 1
+
+ install -m755 -d ${startdir}/pkg/etc/rc.d || return 1
+ install -m 755 ${startdir}/dbus ${startdir}/pkg/etc/rc.d/ || return 1
+
+ #Fix configuration file
+ sed -i -e 's|<user>81</user>|<user>dbus</user>|' ${startdir}/pkg/etc/dbus-1/system.conf || return 1
+
+ #install .keep files so pacman doesn't delete empty dirs
+ touch ${startdir}/pkg/usr/share/dbus-1/services/.keep || return 1
+ touch ${startdir}/pkg/usr/share/dbus-1/system-services/.keep || return 1
+ touch ${startdir}/pkg/etc/dbus-1/session.d/.keep || return 1
+ touch ${startdir}/pkg/etc/dbus-1/system.d/.keep || return 1
+
+ rmdir ${startdir}/pkg/usr/lib/dbus-1.0/dbus-1 || return 1
+
+ install -d -m755 ${startdir}/pkg/usr/share/licenses/dbus
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/dbus/ || return 1
+}
diff --git a/abs/core-testing/dbus/dbus b/abs/core-testing/dbus/dbus
new file mode 100644
index 0000000..cd26db8
--- /dev/null
+++ b/abs/core-testing/dbus/dbus
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting D-BUS system messagebus"
+ if [ ! -x /var/run/dbus ] ; then
+ install -m755 -g 81 -o 81 -d /var/run/dbus
+ fi
+ if [ -x /usr/bin/dbus-uuidgen ] ; then
+ /usr/bin/dbus-uuidgen --ensure
+ fi
+
+ /usr/bin/dbus-daemon --system
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon dbus
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping D-BUS system messagebus"
+ [ -f /var/run/dbus.pid ] && kill `cat /var/run/dbus.pid`
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /var/run/dbus.pid
+ rm_daemon dbus
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ reload)
+ stat_busy "Reloading D-BUS configuration"
+ [ -f /var/run/dbus.pid ] && /usr/bin/dbus-send \
+ --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|reload}"
+ ;;
+esac
+exit 0
diff --git a/abs/core-testing/dbus/dbus.install b/abs/core-testing/dbus/dbus.install
new file mode 100644
index 0000000..85dd9a7
--- /dev/null
+++ b/abs/core-testing/dbus/dbus.install
@@ -0,0 +1,21 @@
+post_install() {
+ getent group dbus >/dev/null || usr/sbin/groupadd -g 81 dbus
+ getent passwd dbus >/dev/null || usr/sbin/useradd -c 'System message bus' -u 81 -g dbus -d '/' -s /bin/false dbus
+ usr/bin/passwd -l dbus &>/dev/null
+ dbus-uuidgen --ensure
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+
+ #Make sure new rc script can shutdown running dbus
+ [ -f var/run/dbus/pid ] && mv var/run/dbus/pid var/run/dbus.pid
+}
+
+# arg 1: the old package version
+pre_remove() {
+ usr/sbin/userdel dbus &>/dev/null
+ usr/sbin/groupdel dbus &>/dev/null
+}
diff --git a/abs/core-testing/dcron/PKGBUILD b/abs/core-testing/dcron/PKGBUILD
new file mode 100644
index 0000000..e5a46d8
--- /dev/null
+++ b/abs/core-testing/dcron/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=dcron
+pkgver=3.2
+pkgrel=12
+pkgdesc="Dillon's Cron Daemon"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+url="http://apollo.backplane.com/FreeSrc/"
+backup=(var/spool/cron/root)
+depends=('glibc')
+provides=('cron')
+source=(http://apollo.backplane.com/FreeSrc/dcron32.tgz
+ dcron-3.1.patch
+ root.crontab
+ crond
+ crond.logrotate
+ run-cron)
+md5sums=('c2c816deb389b4bfb00761f26afe3efd' '2f0c3f7497a12c8826c9be3f87843fcd'\
+ '7fcc06b13708ebd667711b1fbf62ee6e' 'd7edac165ef19ebb9d0089bdc218b53a'\
+ 'aeabcd5e4924d1a7593c8782d1068c86' '5ff0cdcb9ec99778938ac6ef26800327')
+
+build() {
+ cd $startdir/src/dcron
+ patch -Np1 -i ../dcron-3.1.patch || return 1
+ make || return 1
+ install -D -m4755 crontab $startdir/pkg/usr/bin/crontab
+ install -D -m755 crond $startdir/pkg/usr/sbin/crond
+ install -D -m644 crontab.1 $startdir/pkg/usr/man/man1/crontab.1
+ install -D -m644 crond.8 $startdir/pkg/usr/man/man8/crond.8
+ mkdir -p $startdir/pkg/var/spool/cron $startdir/pkg/etc/cron.d
+ mkdir -p $startdir/pkg/etc/{rc.d,cron.hourly,cron.daily,cron.weekly,cron.monthly}
+ install -D -m0600 ../root.crontab $startdir/pkg/var/spool/cron/root
+ install -D -m755 ../crond $startdir/pkg/etc/rc.d/crond
+ install -D -m644 ../crond.logrotate $startdir/pkg/etc/logrotate.d/crond
+ install -D -m755 ../run-cron $startdir/pkg/usr/sbin/run-cron
+}
diff --git a/abs/core-testing/dcron/crond b/abs/core-testing/dcron/crond
new file mode 100755
index 0000000..ef80db3
--- /dev/null
+++ b/abs/core-testing/dcron/crond
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/crond`
+case "$1" in
+ start)
+ stat_busy "Starting Cron Daemon"
+ [ -z "$PID" ] && /usr/sbin/crond >>/var/log/crond 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ PID=`pidof -o %PPID /usr/sbin/crond`
+ echo $PID >/var/run/crond.pid
+ add_daemon crond
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Cron Daemon"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon crond
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/dcron/crond.logrotate b/abs/core-testing/dcron/crond.logrotate
new file mode 100644
index 0000000..38299d6
--- /dev/null
+++ b/abs/core-testing/dcron/crond.logrotate
@@ -0,0 +1,5 @@
+/var/log/crond {
+ sharedscripts
+ copytruncate
+ missingok
+}
diff --git a/abs/core-testing/dcron/dcron-3.1.patch b/abs/core-testing/dcron/dcron-3.1.patch
new file mode 100644
index 0000000..975d51c
--- /dev/null
+++ b/abs/core-testing/dcron/dcron-3.1.patch
@@ -0,0 +1,33 @@
+diff -Naur dcron-orig/defs.h dcron/defs.h
+--- dcron-orig/defs.h 2006-04-29 10:20:58.000000000 -0700
++++ dcron/defs.h 2006-05-04 18:40:05.000000000 -0700
+@@ -28,7 +28,7 @@
+ #define arysize(ary) (sizeof(ary)/sizeof((ary)[0]))
+
+ #ifndef CRONTABS
+-#define CRONTABS "/var/spool/cron/crontabs"
++#define CRONTABS "/var/spool/cron"
+ #endif
+ #ifndef SCRONTABS
+ #define SCRONTABS "/etc/cron.d"
+@@ -44,7 +44,7 @@
+ #if defined(__DragonFly__)
+ #define SENDMAIL "/usr/sbin/sendmail"
+ #else
+-#define SENDMAIL "/usr/lib/sendmail"
++#define SENDMAIL "/usr/sbin/sendmail"
+ #endif
+ #endif
+
+diff -Naur dcron-orig/subs.c dcron/subs.c
+--- dcron-orig/subs.c 2006-04-27 10:29:56.000000000 -0700
++++ dcron/subs.c 2006-05-04 18:40:19.000000000 -0700
+@@ -79,7 +79,7 @@
+
+ buf[0] = 0;
+ if (useDate)
+- strftime(buf, 128, "%d-%b-%y %H:%M ", tp);
++ strftime(buf, 128, "%d-%b-%Y %H:%M ", tp);
+ vsnprintf(buf + strlen(buf), nmax, ctl, va);
+ return(strlen(buf));
+ }
diff --git a/abs/core-testing/dcron/root.crontab b/abs/core-testing/dcron/root.crontab
new file mode 100644
index 0000000..726558f
--- /dev/null
+++ b/abs/core-testing/dcron/root.crontab
@@ -0,0 +1,12 @@
+#
+# DO NOT EDIT THIS FILE MANUALLY!! USE crontab -e INSTEAD.
+#
+
+# <minute> <hour> <day> <month> <dow> <command>
+
+
+01 * * * * /usr/sbin/run-cron /etc/cron.hourly
+02 00 * * * /usr/sbin/run-cron /etc/cron.daily
+22 00 * * 0 /usr/sbin/run-cron /etc/cron.weekly
+42 00 1 * * /usr/sbin/run-cron /etc/cron.monthly
+
diff --git a/abs/core-testing/dcron/run-cron b/abs/core-testing/dcron/run-cron
new file mode 100755
index 0000000..51007a1
--- /dev/null
+++ b/abs/core-testing/dcron/run-cron
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+
+if [ -z $1 ]; then
+ echo "Usage: $0 crondir"
+ exit 1
+fi
+
+for cron in $1/* ; do
+ if [ -x $cron ]; then
+ $cron
+ fi
+done
+unset cron
diff --git a/abs/core-testing/device-mapper/PKGBUILD b/abs/core-testing/device-mapper/PKGBUILD
new file mode 100644
index 0000000..7c2cd46
--- /dev/null
+++ b/abs/core-testing/device-mapper/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=device-mapper
+pkgver=1.02.27
+pkgrel=10
+pkgdesc="Device mapper userspace library and tools."
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://sourceware.org/dm/"
+groups=('base')
+depends=('glibc')
+source=(ftp://sources.redhat.com/pub/dm/device-mapper.$pkgver.tgz
+ device-mapper.rules)
+md5sums=('6074f2c2035c2a526422e691c7457277'
+ '065f32a36947e6183722ed9aef13dc0c')
+
+build() {
+ cd $startdir/src/$pkgname.$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg sbindir=$startdir/pkg/sbin \
+ libdir=$startdir/pkg/lib install
+
+ # install the static library as well
+ install -D -m644 lib/ioctl/libdevmapper.a $startdir/pkg/usr/lib/libdevmapper.a
+ # install udev rule
+ install -D -m644 $startdir/src/device-mapper.rules $startdir/pkg/etc/udev/rules.d/device-mapper.rules
+ # fix device-mapper link bug
+ ln -sf /lib/libdevmapper.so $startdir/pkg/usr/lib/libdevmapper.so
+}
diff --git a/abs/core-testing/device-mapper/device-mapper.rules b/abs/core-testing/device-mapper/device-mapper.rules
new file mode 100644
index 0000000..66204d4
--- /dev/null
+++ b/abs/core-testing/device-mapper/device-mapper.rules
@@ -0,0 +1 @@
+ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", PROGRAM="/sbin/dmsetup info -c --noopencount --noheadings -o name -j %M -m %m", NAME="mapper/%c", MODE="0600", SYMLINK+="disk/by-name/%c"
diff --git a/abs/core-testing/dhcpcd/PKGBUILD b/abs/core-testing/dhcpcd/PKGBUILD
new file mode 100644
index 0000000..dfc1914
--- /dev/null
+++ b/abs/core-testing/dhcpcd/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=dhcpcd
+pkgver=3.2.1
+pkgrel=10
+pkgdesc="A DHCP client daemon"
+arch=(i686 x86_64)
+license=('BSD')
+url="http://roy.marples.name/dhcpcd"
+groups=('base')
+depends=('glibc')
+backup=('etc/conf.d/dhcpcd')
+source=(http://roy.marples.name/dhcpcd/$pkgname-$pkgver.tar.bz2
+ dhcpcd.conf.d)
+md5sums=('5a437882b6b9eb29bde323dc411be4a4'
+ '12d866a78d9f5fa5f31ca18b3940d847')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #disable DUID usage
+ echo "#undef ENABLE_DUID" >> config.h
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mkdir -p $startdir/pkg/usr/sbin
+ ln -sf /sbin/dhcpcd $startdir/pkg/usr/sbin/dhcpcd
+ install -D -m644 ../dhcpcd.conf.d $startdir/pkg/etc/conf.d/dhcpcd
+}
diff --git a/abs/core-testing/dhcpcd/dhcpcd.conf.d b/abs/core-testing/dhcpcd/dhcpcd.conf.d
new file mode 100644
index 0000000..9f5a80b
--- /dev/null
+++ b/abs/core-testing/dhcpcd/dhcpcd.conf.d
@@ -0,0 +1,6 @@
+#
+# Arguments to be passed to the DHCP client daemon
+#
+
+DHCPCD_ARGS="-t 30 -h $HOSTNAME"
+
diff --git a/abs/core-testing/dialog/PKGBUILD b/abs/core-testing/dialog/PKGBUILD
new file mode 100644
index 0000000..0299f6d
--- /dev/null
+++ b/abs/core-testing/dialog/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1369 2008-05-06 16:13:12Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=dialog
+pkgver=1.1_20080316
+_pkgver=1.1-20080316
+pkgrel=12
+pkgdesc="A tool to display dialog boxes from shell scripts"
+arch=('i686' 'x86_64')
+license=('GPL')
+groups=('base')
+depends=('ncurses>=5.6-6')
+url="http://packages.debian.org/dialog"
+source=(ftp://ftp.debian.org/debian/pool/main/d/${pkgname}/${pkgname}_$_pkgver.orig.tar.gz)
+md5sums=('3d262cbc41e4db23251e7be924c4a28b')
+
+build() {
+ cd $startdir/src/$pkgname-$_pkgver
+ ./configure --prefix=/usr --with-ncursesw --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/dialog/timeout.patch b/abs/core-testing/dialog/timeout.patch
new file mode 100644
index 0000000..257f275
--- /dev/null
+++ b/abs/core-testing/dialog/timeout.patch
@@ -0,0 +1,11 @@
+--- dialog-1.1-20070514/ui_getc.c 2007-05-15 00:24:00.000000000 +0200
++++ dialog-1.1-20070514_fixed/ui_getc.c 2007-05-29 20:20:27.000000000 +0200
+@@ -252,6 +252,8 @@
+ ch = wgetch(win);
+ /* if error from resizing, wait and try again */
+ if (ch == ERR) {
++ current = time((time_t *) 0);
++ if (interval > 0 && current >= expired) dlg_exiterr("timeout");
+ napms(50);
+ continue;
+ }
diff --git a/abs/core-testing/diffutils/PKGBUILD b/abs/core-testing/diffutils/PKGBUILD
new file mode 100644
index 0000000..8b075bc
--- /dev/null
+++ b/abs/core-testing/diffutils/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=diffutils
+pkgver=2.8.1
+pkgrel=5
+pkgdesc="Utility programs used for creating patch files"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base-devel')
+url="http://www.gnu.org/software/diffutils"
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('71f9c5ae19b60608f6c7f162da86a428')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/dmapi/PKGBUILD b/abs/core-testing/dmapi/PKGBUILD
new file mode 100644
index 0000000..0f5d015
--- /dev/null
+++ b/abs/core-testing/dmapi/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=dmapi
+pkgver=2.2.8
+pkgrel=12
+pkgdesc="Data migration API"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+makedepends=('xfsprogs')
+provides=('xfsdmapi')
+conflicts=('xfsdmapi')
+replaces=('xfsdmapi')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/dmapi_$pkgver-1.tar.gz)
+md5sums=('1265828fabc6e3ec4b70696db331fb8a')
+
+build() {
+ cd $startdir/src/dmapi-$pkgver
+ [ "$CARCH" = "x86_64" ] && export CFLAGS="$CLFAGS -fPIC"
+ autoconf
+ ./configure --prefix=$startdir/pkg/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr/ install install-lib install-dev
+ # the static lib
+ install -D -m644 libdm/.libs/libdm.a $startdir/pkg/usr/lib/libdm.a
+ # and the header file, please
+ install -D -m644 include/dmapi.h $startdir/pkg/usr/include/xfs/dmapi.h
+}
diff --git a/abs/core-testing/dmidecode/PKGBUILD b/abs/core-testing/dmidecode/PKGBUILD
new file mode 100644
index 0000000..c29957a
--- /dev/null
+++ b/abs/core-testing/dmidecode/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=dmidecode
+pkgver=2.9
+pkgrel=2
+pkgdesc="Desktop Management Interface table related utilities"
+arch=('i686')
+url="http://www.nongnu.org/dmidecode"
+license=('GPL')
+depends=('glibc')
+source=(http://download.savannah.nongnu.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3dac4b1817012ffebd78671473d8f56c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ make prefix=/usr || return 1
+ make prefix=/usr DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/dmxproto/PKGBUILD b/abs/core-testing/dmxproto/PKGBUILD
new file mode 100644
index 0000000..1ccffd6
--- /dev/null
+++ b/abs/core-testing/dmxproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=dmxproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Distributed Multihead X extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d80acad88411e7944b9b085463d53302')
+sha1sums=('80c573166ec3b9f17893e2fff84ce0107045faac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/dnsutils/PKGBUILD b/abs/core-testing/dnsutils/PKGBUILD
new file mode 100644
index 0000000..672613e
--- /dev/null
+++ b/abs/core-testing/dnsutils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5888 2008-07-21 19:29:16Z kevin $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: mario <mario_vazq@hotmail.com>
+pkgname=dnsutils
+pkgver=9.5.0
+_pkgver=9.5.0-P1
+pkgrel=4
+pkgdesc="Various DNS utilities - dig host nslookup nsupdate"
+arch=(i686 x86_64)
+url="http://www.isc.org/index.pl?/sw/bind/"
+license=('custom:ISC')
+depends=('openssl>=0.9.8e')
+replaces=('bind-tools')
+source=(ftp://ftp.isc.org/isc/bind9/${_pkgver}/bind-${_pkgver}.tar.gz
+ bind.so_bsdcompat.diff tools-only.patch)
+md5sums=('a4f9dd6d205d24ec89fa4e44d8188197' '447d58721cfee0e1e377b46f7d50b327'
+ '329f7e15b8c45d3efefdf5b559bb878a')
+
+build() {
+ export MAKEFLAGS="-j1"
+
+ cd ${startdir}/src/bind-${_pkgver}
+ patch -Np0 -i ${startdir}/src/bind.so_bsdcompat.diff || return 1
+ patch -Np1 -i ${startdir}/src/tools-only.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-openssl=yes --disable-linux-caps --without-libxml2
+ make || return 1
+ cd bin
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -D -m644 ../COPYRIGHT $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core-testing/dnsutils/bind.so_bsdcompat.diff b/abs/core-testing/dnsutils/bind.so_bsdcompat.diff
new file mode 100644
index 0000000..5d78031
--- /dev/null
+++ b/abs/core-testing/dnsutils/bind.so_bsdcompat.diff
@@ -0,0 +1,11 @@
+--- ./lib/isc/unix/socket.c.orig 2005-11-03 17:08:42.000000000 -0600
++++ ./lib/isc/unix/socket.c 2006-02-18 13:09:15.000000000 -0600
+@@ -245,6 +245,8 @@
+
+ #define SOCK_DEAD(s) ((s)->references == 0)
+
++#undef SO_BSDCOMPAT
++
+ static void
+ manager_log(isc_socketmgr_t *sockmgr,
+ isc_logcategory_t *category, isc_logmodule_t *module, int level,
diff --git a/abs/core-testing/dnsutils/tools-only.patch b/abs/core-testing/dnsutils/tools-only.patch
new file mode 100644
index 0000000..f777282
--- /dev/null
+++ b/abs/core-testing/dnsutils/tools-only.patch
@@ -0,0 +1,22 @@
+--- bind-9.3.1/bin/Makefile.in.orig 2005-05-06 01:52:36.000000000 -0400
++++ bind-9.3.1/bin/Makefile.in 2005-05-06 01:53:24.000000000 -0400
+@@ -19,7 +19,7 @@
+ VPATH = @srcdir@
+ top_srcdir = @top_srcdir@
+
+-SUBDIRS = named rndc dig dnssec tests nsupdate check
++SUBDIRS = dig nsupdate
+ TARGETS =
+
+ @BIND9_MAKE_RULES@
+--- bind-9.3.1/lib/Makefile.in.orig 2005-05-06 02:05:12.000000000 -0400
++++ bind-9.3.1/lib/Makefile.in 2005-05-06 02:05:35.000000000 -0400
+@@ -23,7 +23,7 @@
+ # Attempt to disable parallel processing.
+ .NOTPARALLEL:
+ .NO_PARALLEL:
+-SUBDIRS = isc isccc dns isccfg bind9 lwres tests
++SUBDIRS = isc dns isccfg bind9 lwres
+ TARGETS =
+
+ @BIND9_MAKE_RULES@
diff --git a/abs/core-testing/dosfstools/PKGBUILD b/abs/core-testing/dosfstools/PKGBUILD
new file mode 100644
index 0000000..488cab5
--- /dev/null
+++ b/abs/core-testing/dosfstools/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 9911 2008-08-21 00:29:06Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=dosfstools
+pkgver=2.11
+pkgrel=2
+pkgdesc="DOS filesystem utilities"
+arch=(i686 x86_64)
+depends=('glibc')
+source=(ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/$pkgname/$pkgname-$pkgver.src.tar.gz linux-2.6.patch)
+md5sums=('407d405ade410f7597d364ab5dc8c9f6' '6689fb7693ed213e6c3289b533b4f66d')
+url="ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/"
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -p1 -i $startdir/src/linux-2.6.patch
+ patch -Np0 -i $startdir/src/dosfstools_$pkgver-1.diff
+ make || return 1
+ make PREFIX=$startdir/pkg install
+}
diff --git a/abs/core-testing/dosfstools/linux-2.6.patch b/abs/core-testing/dosfstools/linux-2.6.patch
new file mode 100644
index 0000000..e21e94c
--- /dev/null
+++ b/abs/core-testing/dosfstools/linux-2.6.patch
@@ -0,0 +1,64 @@
+diff -Nur dosfstools-2.10/dosfsck/boot.c dosfstools-2.10-fixed/dosfsck/boot.c
+--- dosfstools-2.10/dosfsck/boot.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/boot.c 2004-02-11 21:15:48.000000000 +0100
+@@ -14,6 +14,9 @@
+ #include "io.h"
+ #include "boot.h"
+
++#ifndef MSDOS_FAT12
++# define MSDOS_FAT12 4084 /* taken from 2.4 linux/msdos_fs.h */
++#endif
+
+ #define ROUND_TO_MULTIPLE(n,m) ((n) && (m) ? (n)+(m)-1-((n)-1)%(m) : 0)
+ /* don't divide by zero */
+diff -Nur dosfstools-2.10/dosfsck/common.h dosfstools-2.10-fixed/dosfsck/common.h
+--- dosfstools-2.10/dosfsck/common.h 1998-04-28 13:14:25.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/common.h 2004-02-11 21:15:01.000000000 +0100
+@@ -6,6 +6,9 @@
+ #ifndef _COMMON_H
+ #define _COMMON_H
+
++#include <asm/types.h>
++#include <asm/byteorder.h>
++
+ void die(char *msg,...) __attribute((noreturn));
+
+ /* Displays a prinf-style message and terminates the program. */
+diff -Nur dosfstools-2.10/dosfsck/file.c dosfstools-2.10-fixed/dosfsck/file.c
+--- dosfstools-2.10/dosfsck/file.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/file.c 2004-02-11 21:13:53.000000000 +0100
+@@ -15,9 +15,9 @@
+ #define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
+ #define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h>*/
+ #define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
++#include "common.h"
+ #include <linux/msdos_fs.h>
+
+-#include "common.h"
+ #include "file.h"
+
+
+diff -Nur dosfstools-2.10/dosfsck/io.c dosfstools-2.10-fixed/dosfsck/io.c
+--- dosfstools-2.10/dosfsck/io.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/io.c 2004-02-11 21:14:24.000000000 +0100
+@@ -21,8 +21,8 @@
+ #include <fcntl.h>
+ #include <linux/fd.h>
+
+-#include "dosfsck.h"
+ #include "common.h"
++#include "dosfsck.h"
+ #include "io.h"
+
+
+diff -Nur dosfstools-2.10/mkdosfs/mkdosfs.c dosfstools-2.10-fixed/mkdosfs/mkdosfs.c
+--- dosfstools-2.10/mkdosfs/mkdosfs.c 2003-06-14 22:07:08.000000000 +0200
++++ dosfstools-2.10-fixed/mkdosfs/mkdosfs.c 2004-02-11 21:13:09.000000000 +0100
+@@ -62,6 +62,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <asm/types.h>
+ #include <unistd.h>
+ #include <time.h>
+ #include <errno.h>
diff --git a/abs/core-testing/dvd+rw-tools/PKGBUILD b/abs/core-testing/dvd+rw-tools/PKGBUILD
new file mode 100644
index 0000000..7f7597b
--- /dev/null
+++ b/abs/core-testing/dvd+rw-tools/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=dvd+rw-tools
+pkgver=7.1
+origver=7.1 # sometimes it is not the same as pkgver and has '-' in it
+pkgrel=1
+[ "$CARCH" = "x86_64" ] && force=y
+pkgdesc="dvd burning tools"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://fy.chalmers.se/~appro/linux/DVD+RW"
+depends=('cdrkit' 'gcc-libs')
+source=("http://fy.chalmers.se/~appro/linux/DVD+RW/tools/${pkgname}-$origver.tar.gz"
+ "buildpatch-7.0-3-20080108-karolina.patch")
+md5sums=('8acb3c885c87f6838704a0025e435871' '54b4dc52f5380216d4d9fc2dd2086d31')
+
+build() {
+ # fix build, thank you Karolina
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/buildpatch-7.0-3-20080108-karolina.patch
+
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ make || return 1
+ mkdir -p ${startdir}/pkg/usr/bin
+ for bin in growisofs dvd+rw-booktype dvd+rw-format dvd+rw-mediainfo dvd-ram-control; do
+ install -D -m755 $bin ${startdir}/pkg/usr/bin/$bin || return 1
+ done
+ install -D -m644 growisofs.1 ${startdir}/pkg/usr/share/man/man1/growisofs.1 || return 1
+}
+
+
diff --git a/abs/core-testing/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch b/abs/core-testing/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch
new file mode 100644
index 0000000..0b7951f
--- /dev/null
+++ b/abs/core-testing/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch
@@ -0,0 +1,22 @@
+diff -Naur dvd+rw-tools-7.0/growisofs.c dvd+rw-tools-7.0_new/growisofs.c
+--- dvd+rw-tools-7.0/growisofs.c 2006-09-24 19:28:53.000000000 +0200
++++ dvd+rw-tools-7.0_new/growisofs.c 2008-01-08 00:56:57.000000000 +0100
+@@ -418,6 +418,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <assert.h>
++#include <limits.h>
+ #include "mp.h"
+
+ #if defined(__unix) || defined(__unix__)
+diff -Naur dvd+rw-tools-7.0/transport.hxx dvd+rw-tools-7.0_new/transport.hxx
+--- dvd+rw-tools-7.0/transport.hxx 2006-09-23 13:29:07.000000000 +0200
++++ dvd+rw-tools-7.0_new/transport.hxx 2008-01-08 00:57:36.000000000 +0100
+@@ -137,6 +137,7 @@
+ #include <sys/wait.h>
+ #include <sys/utsname.h>
+ #include <scsi/sg.h>
++#include <limits.h>
+ #if !defined(SG_FLAG_LUN_INHIBIT)
+ # if defined(SG_FLAG_UNUSED_LUN_INHIBIT)
+ # define SG_FLAG_LUN_INHIBIT SG_FLAG_UNUSED_LUN_INHIBIT
diff --git a/abs/core-testing/dvdauthor/PKGBUILD b/abs/core-testing/dvdauthor/PKGBUILD
new file mode 100644
index 0000000..6066d7f
--- /dev/null
+++ b/abs/core-testing/dvdauthor/PKGBUILD
@@ -0,0 +1,21 @@
+# Maintainer: Travis Willard <travisw@wmpub.ca>
+# Contributor: Jaroslaw Swierczynski <swiergot@juvepoland.com>
+# Contributor: Nicolai Lissner <nlissne@linux01.gwdg.de>
+
+pkgname=dvdauthor
+pkgver=0.6.14
+pkgrel=2
+pkgdesc="DVD authoring tools"
+arch=('i686' 'x86_64')
+url="http://dvdauthor.sourceforge.net/"
+license=('GPL')
+depends=('libdvdread' 'fribidi' 'imagemagick>=6.4.0.2')
+source=(http://dl.sourceforge.net/sourceforge/dvdauthor/${pkgname}-${pkgver}.tar.gz)
+md5sums=('bd646b47950c4091ffd781d43fd2c5e9')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+}
diff --git a/abs/core-testing/e2fsprogs/Makefile-fsck.static.patch b/abs/core-testing/e2fsprogs/Makefile-fsck.static.patch
new file mode 100644
index 0000000..a006443
--- /dev/null
+++ b/abs/core-testing/e2fsprogs/Makefile-fsck.static.patch
@@ -0,0 +1,13 @@
+--- e2fsprogs-1.40.4/misc/Makefile 2008-01-16 14:52:53.000000000 +0000
++++ e2fsprogs-1.40.4/misc/Makefile.neu 2008-01-16 14:53:43.000000000 +0000
+@@ -376,6 +376,10 @@
+ @echo " LD $@"
+ @$(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBS_BLKID) $(LIBINTL)
+
++fsck.static: $(FSCK_OBJS) $(DEPSTATIC_LIBBLKID)
++ @echo " LD $@"
++ @$(CC) $(ALL_LDFLAGS) -static -o fsck.static $(FSCK_OBJS) $(STATIC_LIBBLKID) $(DEPSTATIC_LIBUUID) $(LIBINTL)
++
+ badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
+ @echo " LD $@"
+ @$(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
diff --git a/abs/core-testing/e2fsprogs/PKGBUILD b/abs/core-testing/e2fsprogs/PKGBUILD
new file mode 100644
index 0000000..b85652b
--- /dev/null
+++ b/abs/core-testing/e2fsprogs/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=e2fsprogs
+pkgver=1.40.8
+pkgrel=10
+pkgdesc="Ext2 filesystem utilities"
+arch=('i686' 'x86_64')
+license=('GPL' 'LGPL' 'MIT')
+url="http://e2fsprogs.sourceforge.net"
+groups=('base')
+depends=('glibc')
+makedepends=('bc')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ Makefile-fsck.static.patch
+ mke2fs.conf)
+md5sums=('450e2fb2461b2296fec770ff8fc147ed'
+ 'ce2b0daf84e17e8c7880ba3d43020ea3'
+ '4ebb30bdb5951f1fc86c1470e4d81532')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ # Remove unnecessary init.d directory
+ sed -i '/init\.d/s|^|#|' misc/Makefile.in
+ ./configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs
+ # add fsck.static for mkinitrd use
+ patch -Np1 -i ../Makefile-fsck.static.patch || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install install-libs
+ make -C ${startdir}/src/${pkgname}-${pkgver}/misc fsck.static || return 1
+ install -D -m755 ${startdir}/src/${pkgname}-${pkgver}/misc/fsck.static ${startdir}/pkg/sbin/fsck.static
+ sed -i -e 's/^AWK=.*/AWK=awk/' ${startdir}/pkg/usr/bin/compile_et || return 1
+ install -m644 ${startdir}/src/mke2fs.conf ${startdir}/pkg/etc/ || return 1
+}
diff --git a/abs/core-testing/e2fsprogs/mke2fs.conf b/abs/core-testing/e2fsprogs/mke2fs.conf
new file mode 100644
index 0000000..92464e3
--- /dev/null
+++ b/abs/core-testing/e2fsprogs/mke2fs.conf
@@ -0,0 +1,26 @@
+[defaults]
+ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ blocksize = 4096
+ inode_size = 128
+ inode_ratio = 16384
+
+[fs_types]
+ small = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 4096
+ }
+ floppy = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 8192
+ }
+ news = {
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ }
+ largefile4 = {
+ inode_ratio = 4194304
+ }
diff --git a/abs/core-testing/eject/PKGBUILD b/abs/core-testing/eject/PKGBUILD
new file mode 100644
index 0000000..b2ba852
--- /dev/null
+++ b/abs/core-testing/eject/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=eject
+pkgver=2.1.5
+pkgrel=3
+pkgdesc="Eject is a program for ejecting removable media under software control"
+arch=(i686 x86_64)
+source=(http://www.pobox.com/~tranter/$pkgname-$pkgver.tar.gz eject-2.1.5-handle-spaces.patch)
+url="http://ca.geocities.com/jefftranter@rogers.com/eject.html"
+md5sums=('b96a6d4263122f1711db12701d79f738' '595b97c3bd56fd41e3b01b07885f81dc')
+
+build() {
+ cd $startdir/src/$pkgname
+ patch -Np0 -i ../eject-2.1.5-handle-spaces.patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/eject/eject-2.1.5-handle-spaces.patch b/abs/core-testing/eject/eject-2.1.5-handle-spaces.patch
new file mode 100644
index 0000000..692368f
--- /dev/null
+++ b/abs/core-testing/eject/eject-2.1.5-handle-spaces.patch
@@ -0,0 +1,57 @@
+http://bugs.gentoo.org/151257
+
+--- eject.c
++++ eject.c
+@@ -370,6 +370,30 @@ static int FileExists(const char *name,
+
+
+ /*
++ * Linux mangles spaces in mount points by changing them to an octal string
++ * of '\040'. So lets scan the mount point and fix it up by replacing all
++ * occurrences off '\0##' with the ASCII value of 0##. Requires a writable
++ * string as input as we mangle in place. Some of this was taken from the
++ * util-linux package.
++ */
++#define octalify(a) ((a) & 7)
++#define tooctal(s) (64*octalify(s[1]) + 8*octalify(s[2]) + octalify(s[3]))
++#define isoctal(a) (((a) & ~7) == '0')
++static char *DeMangleMount(char *s)
++{
++ char *tmp = s;
++ while ((tmp = strchr(tmp, '\\')) != NULL) {
++ if (isoctal(tmp[1]) && isoctal(tmp[2]) && isoctal(tmp[3])) {
++ tmp[0] = tooctal(tmp);
++ memmove(tmp+1, tmp+4, strlen(tmp)-3);
++ }
++ ++tmp;
++ }
++ return s;
++}
++
++
++/*
+ * Given name, such as foo, see if any of the following exist:
+ *
+ * foo (if foo starts with '.' or '/')
+@@ -884,8 +908,8 @@ static int MountedDevice(const char *nam
+ if (((strcmp(s1, name) == 0) || (strcmp(s2, name) == 0)) ||
+ ((maj != -1) && (maj == mtabmaj) && (min == mtabmin))) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
+@@ -928,8 +952,8 @@ static int MountableDevice(const char *n
+ rc = sscanf(line, "%1023s %1023s", s1, s2);
+ if (rc >= 2 && s1[0] != '#' && strcmp(s2, name) == 0) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
diff --git a/abs/core-testing/etcnet/10-defaults b/abs/core-testing/etcnet/10-defaults
new file mode 100644
index 0000000..42a7879
--- /dev/null
+++ b/abs/core-testing/etcnet/10-defaults
@@ -0,0 +1,6 @@
+DHCP_CLIENT=/sbin/dhcpcd
+IP=/usr/sbin/ip
+TC=/usr/sbin/tc
+LSMOD=/bin/lsmod
+IFGROUP[1]='eth wlan plip usb dvb bnep tuntap'
+
diff --git a/abs/core-testing/etcnet/PKGBUILD b/abs/core-testing/etcnet/PKGBUILD
new file mode 100755
index 0000000..798213e
--- /dev/null
+++ b/abs/core-testing/etcnet/PKGBUILD
@@ -0,0 +1,39 @@
+pkgname=etcnet
+pkgver=0.9.7
+pkgrel=2
+pkgdesc="/etc/net network configuration subsystem"
+url="http://etcnet.org/"
+depends=('bash' 'grep' 'sed' 'iproute' 'wireless_tools' 'iptables' 'dhcpcd')
+arch=i686
+install=etcnet.install
+source=(http://etcnet.org/files/$pkgname-$pkgver.tar.gz 10-defaults network functions.patch options ipv4route ipv4address )
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/var/lib/etcnet
+ mkdir -p $startdir/pkg/etc/sysconfig
+
+
+
+
+
+ #cp $startdir/src/functions.patch ./etc/net
+ cd etc/net
+ patch -p0 < $startdir/src/functions.patch
+
+
+ install -D -m 644 $startdir/src/10-defaults $startdir/pkg/etc/net/options.d/10-defaults
+ install -D -m 644 $startdir/src/network $startdir/pkg/etc/sysconfig/network
+# install -D -m 644 ../options $startdir/pkg/etc/net/ifaces/default/options
+
+#setup default for eth0
+ mkdir -p $startdir/pkg/etc/net/ifaces/eth0
+ cp $startdir/src/options $startdir/pkg/etc/net/ifaces/eth0/options
+ cp $startdir/src/ipv4route $startdir/pkg/etc/net/ifaces/eth0/ipv4route
+ cp $startdir/src/ipv4address $startdir/pkg/etc/net/ifaces/eth0/ipv4address
+
+ cd $startdir/src/$pkgname-$pkgver
+ rm -Rf etc/sysconfig etc/net/{README.ALT,TODO,ChangeLog,ifaces/unknown}
+ cp -Rf etc $startdir/pkg
+
+}
diff --git a/abs/core-testing/etcnet/adddhcp.patch b/abs/core-testing/etcnet/adddhcp.patch
new file mode 100755
index 0000000..ee7b782
--- /dev/null
+++ b/abs/core-testing/etcnet/adddhcp.patch
@@ -0,0 +1,51 @@
+diff -ruN etc/net/ifaces/default/options /etc/net/ifaces/default/options
+--- etc/net/ifaces/default/options 2005-08-02 08:26:44.000000000 +0000
++++ /etc/net/ifaces/default/options 2005-10-24 16:20:07.000000000 +0000
+@@ -24,7 +24,7 @@
+ # /etc/net will try to configure interface at the first succeeding
+ # method. Note that etcnet will process routes and rules despite of
+ # BOOTPROTO.
+-BOOTPROTO=static
++BOOTPROTO=dhcp
+
+ # Defines if the interface will be automatically brought up during
+ # system startup or 'service network start' invocation.
+diff -ruN etc/net/scripts/config-ipv4 /etc/net/scripts/config-ipv4
+--- etc/net/scripts/config-ipv4 2005-08-10 08:08:40.000000000 +0000
++++ /etc/net/scripts/config-ipv4 2005-10-24 16:48:49.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ . $SCRIPTDIR/functions
+ pickup_options
+
+diff -ruN etc/net/scripts/ifup /etc/net/scripts/ifup
+--- etc/net/scripts/ifup 2005-09-16 18:38:01.000000000 +0000
++++ /etc/net/scripts/ifup 2005-10-24 16:42:12.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ # This script is intended to be run from command-line or etcnet
+ # initscript. It determines if the iface should be created, then
+ # creates the device and calls ifup-common to do the rest.
+diff -ruN etc/net/scripts/ifup-common /etc/net/scripts/ifup-common
+--- etc/net/scripts/ifup-common 2005-08-03 09:03:26.000000000 +0000
++++ /etc/net/scripts/ifup-common 2005-10-24 16:42:51.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ # This script continues configuration of an interface started by ifup,
+ # ifup-removable or ifup-ifplugd scripts. We assume that all necessary
+ # checks are done yet.
+diff -ruN etc/net/scripts/network.init /etc/net/scripts/network.init
+--- etc/net/scripts/network.init 2005-09-29 12:54:32.000000000 +0000
++++ /etc/net/scripts/network.init 2005-10-24 16:41:17.000000000 +0000
+@@ -1,4 +1,5 @@
+ #!/bin/bash
++#set -x
+ #
+ # network
+ # chkconfig: 2345 10 90
diff --git a/abs/core-testing/etcnet/etcnet.install b/abs/core-testing/etcnet/etcnet.install
new file mode 100755
index 0000000..2605e95
--- /dev/null
+++ b/abs/core-testing/etcnet/etcnet.install
@@ -0,0 +1,42 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ /bin/cp -Rf /etc/net /etc/net.pacsave >/dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+post_install() {
+ /bin/true
+ touch /etc/net/
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/cp -Rf /etc/net /etc/net.pacsave >/dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ /bin/true
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
+
diff --git a/abs/core-testing/etcnet/functions.patch b/abs/core-testing/etcnet/functions.patch
new file mode 100644
index 0000000..c2321b6
--- /dev/null
+++ b/abs/core-testing/etcnet/functions.patch
@@ -0,0 +1,12 @@
+--- scripts/functions.orig 2008-09-02 03:10:21.000000000 +0000
++++ scripts/functions 2008-09-02 03:10:49.000000000 +0000
+@@ -16,7 +16,8 @@
+ DEFAULT_IFPLUGSTATUS=/usr/sbin/ifplugstatus
+ DEFAULT_IFPLUGD=/usr/sbin/ifplugd
+ DEFAULT_IWPRIV=/sbin/iwpriv
+-DEFAULT_IWCONFIG=/sbin/iwconfig
++#DEFAULT_IWCONFIG=/sbin/iwconfig
++DEFAULT_IWCONFIG=/usr/sbin/iwconfig
+ DEFAULT_WPA_SUPPLICANT=/usr/sbin/wpa_supplicant
+ DEFAULT_WPA_CLI=/usr/sbin/wpa_cli
+ DEFAULT_PLIPCONFIG=/sbin/plipconfig
diff --git a/abs/core-testing/etcnet/ipv4address b/abs/core-testing/etcnet/ipv4address
new file mode 100755
index 0000000..39a5dd4
--- /dev/null
+++ b/abs/core-testing/etcnet/ipv4address
@@ -0,0 +1 @@
+192.168.1.5/24
diff --git a/abs/core-testing/etcnet/ipv4route b/abs/core-testing/etcnet/ipv4route
new file mode 100755
index 0000000..b0dbb61
--- /dev/null
+++ b/abs/core-testing/etcnet/ipv4route
@@ -0,0 +1 @@
+default via 192.168.1.1
diff --git a/abs/core-testing/etcnet/network b/abs/core-testing/etcnet/network
new file mode 100644
index 0000000..a0a17ab
--- /dev/null
+++ b/abs/core-testing/etcnet/network
@@ -0,0 +1,6 @@
+# When set to no, this may cause most daemons' initscripts skip starting.
+NETWORKING=yes
+# Used by hotplug/pcmcia/ifplugd scripts to detect current network config
+# subsystem.
+CONFMETHOD=etcnet
+
diff --git a/abs/core-testing/etcnet/options b/abs/core-testing/etcnet/options
new file mode 100755
index 0000000..23bb8bf
--- /dev/null
+++ b/abs/core-testing/etcnet/options
@@ -0,0 +1,62 @@
+# 0.4.0: now we don't have to specify TYPE for disabled interfaces
+DISABLED=no
+
+# BOOTPROTO can be any of the following: static, dhcp, ipv4ll.
+# * "static": use ipv4address/ipv6address
+# 'static' has the same meaning as 'none' in initscripts/net-scripts sense.
+# IF you don't want to assing any address to an interface, but still keep
+# it up and running, you can just use 'static' and have no ipv4address file.
+# * "dhcp": run DHCP client
+# * "ipv4ll": run IPv4LL client (zcip)
+# As far as I know, there are no working IPv6 DHCP
+# implementations. IPv4LL is not required for IPv6 because of
+# link-scope addresses.
+# Additional feature is multi-method configurations (methods
+# can be delimited by ' ', ',' or '-':
+# * "dhcp-static": try DHCP, if it fails, configure static address(es)
+# * "dhcp-ipv4ll": same, but fallback to IPv4LL
+# * "dhcp-ipv4ll-static": try DHCP, fallback to IPv4LL (very unlikely to fail),
+# fallback to static
+# /etc/net will try to configure interface at the first succeeding
+# method. Note that etcnet will process routes and rules despite of
+# BOOTPROTO.
+BOOTPROTO=dhcp-static
+
+# Defines if the interface will be automatically brought up during
+# system startup or 'service network start' invocation.
+ONBOOT=yes
+USE_HOTPLUG=no
+USE_PCMCIA=no
+CONFIG_IPV4=yes
+CONFIG_IPV6=no
+CONFIG_IPX=no
+CONFIG_QOS=yes
+CONFIG_WIRELESS=no
+CONFIG_FW=no
+
+# If set to yes, interface will not be set UP, but configured.
+KEEP_DOWN=no
+# IPv4/IPv6. Don't flush existing addresses from interface before assigning new.
+DONT_FLUSH=no
+
+# ****************** Interface dependencies ******************
+# If interface A has REQUIRES=B in it's options file, A is the child, B is the parent.
+# I don't recommend changing defaults here. See also: README/3.5
+
+# If set to yes, this variable will cause ifup call for all child (having current
+# interface in their REQUIRES list) after the current interface is set up.
+IFUP_CHILDREN=no
+
+# If set to yes, this variable will cause ifup call for all parent (listed in current
+# REQUIRES list) before the current interface is set up.
+# Note: this will not work for ifplugd-controlled interfaces.
+IFUP_PARENTS=yes
+
+# If set to yes, this variable will cause ifdown call for all child (having current
+# interface in their REQUIRES list) before the current interface is shut down.
+IFDOWN_CHILDREN=yes
+
+# If set to yes, this variable will cause ifdown call for all parent (listed in current
+# REQUIRES list) after the current interface is shut down.
+# Note: this will not work for ifplugd-controlled interfaces.
+IFDOWN_PARENTS=no
diff --git a/abs/core-testing/expat/PKGBUILD b/abs/core-testing/expat/PKGBUILD
new file mode 100644
index 0000000..0d63ac7
--- /dev/null
+++ b/abs/core-testing/expat/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=expat
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="An XML Parser library written in C"
+arch=(i686 x86_64)
+license=('custom')
+depends=('glibc')
+options=('!libtool')
+source=(http://heanet.dl.sourceforge.net/sourceforge/expat/${pkgname}-${pkgver}.tar.gz)
+url="http://expat.sourceforge.net/"
+md5sums=('ee8b492592568805593f81f8cdf2a04c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m644 -D COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core-testing/expect/PKGBUILD b/abs/core-testing/expect/PKGBUILD
new file mode 100644
index 0000000..c8705c6
--- /dev/null
+++ b/abs/core-testing/expect/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+
+pkgname=expect
+pkgver=5.44.1.4
+pkgrel=1
+pkgdesc="A tool for automating interactive applications"
+arch=(i686 x86_64)
+depends=('tcl>=8.5.0')
+makedepends=('tk>=8.5.0')
+tcltkver=8.5.0
+source=(ftp://ftp.archlinux.org/other/expect/expect-$pkgver.tar.bz2
+#http://expect.nist.gov/src/expect-$pkgver.tar.bz2
+http://heanet.dl.sourceforge.net/sourceforge/tcl/tk$tcltkver-src.tar.gz
+http://heanet.dl.sourceforge.net/sourceforge/tcl/tcl$tcltkver-src.tar.gz)
+url="http://expect.nist.gov/"
+
+build() {
+ cd $startdir/src/expect-5.44.1.4
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-tcl=/usr/lib --with-tk=/usr/lib --without-x \
+ --with-tclinclude=$startdir/src/tcl$tcltkver/generic \
+ --with-tkinclude=$startdir/src/tk$tcltkver/generic
+ # Keep $startdir/pkg out of library search paths.
+ sed -e 's/-rpath,${LIB_RUNTIME_DIR}:/-rpath,/' -i Makefile
+ make || return 1
+ make prefix=$startdir/pkg/usr exec_prefix=$startdir/pkg/usr sysconfdir=$startdir/pkg/etc \
+ localstatedir=$startdir/pkg/var install
+ # Remove X related stuff.
+ rm -f $startdir/pkg/usr/bin/{multixterm,tknewsbiff,tkpasswd,xpstat}
+ rm -f $startdir/pkg/usr/man/man1/{multixterm.1,tknewsbiff.1}
+}
+md5sums=('bbfd5ef50f3c1df4fe79e5a20a947d41'
+ 'bc217c45ed6b2f5b8d3120df63fa13bd'
+ 'd890c505465411b25050b6cd95971d2c')
diff --git a/abs/core-testing/faac/PKGBUILD b/abs/core-testing/faac/PKGBUILD
new file mode 100644
index 0000000..3d7ce11
--- /dev/null
+++ b/abs/core-testing/faac/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+# Contributor: dorphell <dorphell@archlinux.org>
+pkgname=faac
+pkgver=1.26
+pkgrel=1
+pkgdesc="FAAC is an AAC audio encoder."
+arch=(i686 x86_64)
+url="http://www.audiocoding.com/"
+license=('GPL' 'custom')
+depends=('libmp4v2' 'glibc')
+makedepends=('automake' 'autoconf' 'libtool')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+
+build() {
+ cd ${startdir}/src/${pkgname}
+ find . -type f -print0 | xargs -0 sed -i 's/\r//g'
+ ./bootstrap
+ ./configure --prefix=/usr --with-mp4v2
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ install -D -m644 ${startdir}/src/${pkgname}/libfaac/kiss_fft/COPYING \
+ ${startdir}/pkg/usr/share/licenses/faac/COPYING.kiss_fft
+}
+md5sums=('1d7c019bd2dbb4f3101b8937ebc59cf6')
diff --git a/abs/core-testing/faac/libmp4v2.patch b/abs/core-testing/faac/libmp4v2.patch
new file mode 100644
index 0000000..b2c0165
--- /dev/null
+++ b/abs/core-testing/faac/libmp4v2.patch
@@ -0,0 +1,11 @@
+--- faac/configure.in 2006-08-13 14:17:26.000000000 +0000
++++ faac-patched/configure.in 2007-01-29 19:18:45.000000000 +0000
+@@ -35,6 +35,8 @@
+
+ if test x$external_mp4v2 = xyes; then
+ AC_MSG_NOTICE([*** Building with external mp4v2 ***])
++ MY_DEFINE(HAVE_LIBMP4V2)
++ LIBS="-lmp4v2 $LIBS"
+ else
+ if test x$WITHMP4V2 = xyes; then
+ AC_MSG_NOTICE([*** Building with internal mp4v2 ***])
diff --git a/abs/core-testing/faac/pipe-output.patch b/abs/core-testing/faac/pipe-output.patch
new file mode 100644
index 0000000..a8581f3
--- /dev/null
+++ b/abs/core-testing/faac/pipe-output.patch
@@ -0,0 +1,18 @@
+--- faac/frontend/main.c 2004-12-08 11:07:17.000000000 +0000
++++ faac-patched/frontend/main.c 2007-01-29 19:17:26.000000000 +0000
+@@ -918,7 +918,14 @@
+ {
+ #endif
+ /* open the aac output file */
+- outfile = fopen(aacFileName, "wb");
++ if (aacFileName[0] == '-')
++ {
++ outfile = stdout;
++ }
++ else
++ {
++ outfile = fopen(aacFileName, "wb");
++ }
+ if (!outfile)
+ {
+ fprintf(stderr, "Couldn't create output file %s\n", aacFileName);
diff --git a/abs/core-testing/faad2/ChangeLog b/abs/core-testing/faad2/ChangeLog
new file mode 100644
index 0000000..b4073ba
--- /dev/null
+++ b/abs/core-testing/faad2/ChangeLog
@@ -0,0 +1,14 @@
+2008-07-19 Eric Belanger <eric@archlinux.org>
+
+ * faad2 2.6.1-1
+ * Upstream update
+ * Patched to fix libtool build problem :
+ faad2-2.6.1-libtool22.patch
+ * Patched to make faad2 exit if output pipe breaks :
+ faad2-2.6.1-broken-pipe.patch
+ * Patched to fix include file implicit declaration :
+ faad2-2.6.1-implicitdeclar.patch
+ * Patched to bump soname (symbols have been changed) :
+ faad2-2.6.1-abi_has_changed.patch
+ * Updated license
+ * Added ChangeLog
diff --git a/abs/core-testing/faad2/LICENSE b/abs/core-testing/faad2/LICENSE
new file mode 100644
index 0000000..ecb2c75
--- /dev/null
+++ b/abs/core-testing/faad2/LICENSE
@@ -0,0 +1,28 @@
+/*
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.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.
+**
+** Any non-GPL usage of this software or parts of this software is strictly
+** forbidden.
+**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
+**
+*/
diff --git a/abs/core-testing/faad2/PKGBUILD b/abs/core-testing/faad2/PKGBUILD
new file mode 100644
index 0000000..227cc3b
--- /dev/null
+++ b/abs/core-testing/faad2/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 5668 2008-07-20 05:06:05Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+
+pkgname=faad2
+pkgver=2.6.1
+pkgrel=1
+pkgdesc="ISO AAC audio decoder"
+arch=('i686' 'x86_64')
+url="http://www.audiocoding.com/"
+license=('custom:GPL')
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/faac/${pkgname}-${pkgver}.tar.gz
+ faad2-2.6.1-libtool22.patch
+ faad2-2.6.1-broken-pipe.patch
+ faad2-2.6.1-implicitdeclar.patch
+ faad2-2.6.1-abi_has_changed.patch
+ LICENSE)
+md5sums=('74e92df40c270f216a8305fc87603c8a' 'ca9515b6617d7fd060d0d172616eb192'\
+ 'bb6a345dd2e6c4df6609e6a374134066' 'bc43fd3f8cd582a8bc092b9b5e611865'\
+ '06e83633c609d20436794b62a382b3dc' 'b6a1c72534807b8a038b71e784f57e32')
+sha1sums=('b4ad33d3c4dfa6dbf3011a3da34c631926cabfad'
+ 'ca4ee04aa1757b8f9deeef52b5bf35dc823da844'
+ '0b03728f40d00e552f738900e2f6215177af5417'
+ 'd4ab5d38c9b75ed6417529c4d1a7ca204293c224'
+ 'f7e9d89fc551e0b61a7b7555749ed7a3129a4ce8'
+ '6225fd997671206f5222c4a86d9e092359552c43')
+
+build() {
+ cd ${srcdir}/${pkgname}
+ patch -p1 < ../faad2-2.6.1-libtool22.patch || return 1
+ patch -p1 < ../faad2-2.6.1-broken-pipe.patch || return 1
+ patch -p1 < ../faad2-2.6.1-implicitdeclar.patch || return 1
+ patch -p1 < ../faad2-2.6.1-abi_has_changed.patch || return 1
+
+ autoreconf -vif || return 1
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff.h ${pkgdir}/usr/include/ || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff_int_types.h ${pkgdir}/usr/include/ || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/.libs/*.a ${pkgdir}/usr/lib/ || return 1
+ install -D -m644 ${srcdir}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+}
diff --git a/abs/core-testing/faad2/faad2-2.6.1-abi_has_changed.patch b/abs/core-testing/faad2/faad2-2.6.1-abi_has_changed.patch
new file mode 100644
index 0000000..7206e38
--- /dev/null
+++ b/abs/core-testing/faad2/faad2-2.6.1-abi_has_changed.patch
@@ -0,0 +1,14 @@
+Index: faad2/libfaad/Makefile.am
+===================================================================
+--- faad2.orig/libfaad/Makefile.am
++++ faad2/libfaad/Makefile.am
+@@ -3,7 +3,8 @@ lib_LTLIBRARIES = libfaad.la
+ include_HEADERS = $(top_srcdir)/include/faad.h \
+ $(top_srcdir)/include/neaacdec.h
+
+-libfaad_la_LDFLAGS = -lm
++libfaad_la_LDFLAGS = -version-info 1:0:0
++libfaad_la_LIBADD = -lm
+
+ libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \
+ drm_dec.c error.c filtbank.c \
diff --git a/abs/core-testing/faad2/faad2-2.6.1-broken-pipe.patch b/abs/core-testing/faad2/faad2-2.6.1-broken-pipe.patch
new file mode 100644
index 0000000..428d7dd
--- /dev/null
+++ b/abs/core-testing/faad2/faad2-2.6.1-broken-pipe.patch
@@ -0,0 +1,22 @@
+--- faad2/frontend/main.c~ 2007-11-01 06:33:29.000000000 -0600
++++ faad2/frontend/main.c 2008-01-03 18:05:10.000000000 -0700
+@@ -640,7 +640,8 @@
+
+ if ((frameInfo.error == 0) && (frameInfo.samples > 0) && (!adts_out))
+ {
+- write_audio_file(aufile, sample_buffer, frameInfo.samples, 0);
++ if (write_audio_file(aufile, sample_buffer, frameInfo.samples, 0) == 0)
++ break;
+ }
+
+ /* fill buffer */
+@@ -976,7 +977,8 @@
+
+ if ((frameInfo.error == 0) && (sample_count > 0) && (!adts_out))
+ {
+- write_audio_file(aufile, sample_buffer, sample_count, delay);
++ if (write_audio_file(aufile, sample_buffer, sample_count, delay) == 0)
++ break;
+ }
+
+ if (frameInfo.error > 0)
diff --git a/abs/core-testing/faad2/faad2-2.6.1-implicitdeclar.patch b/abs/core-testing/faad2/faad2-2.6.1-implicitdeclar.patch
new file mode 100644
index 0000000..9379329
--- /dev/null
+++ b/abs/core-testing/faad2/faad2-2.6.1-implicitdeclar.patch
@@ -0,0 +1,11 @@
+diff -aur faad2-orig/frontend/main.c faad2/frontend/main.c
+--- faad2-orig/frontend/main.c 2007-11-01 08:33:29.000000000 -0400
++++ faad2/frontend/main.c 2008-06-21 19:33:08.000000000 -0400
+@@ -41,6 +41,7 @@
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <getopt.h>
++#include <string.h>
+
+ #include <neaacdec.h>
+ #include <mp4ff.h>
diff --git a/abs/core-testing/faad2/faad2-2.6.1-libtool22.patch b/abs/core-testing/faad2/faad2-2.6.1-libtool22.patch
new file mode 100644
index 0000000..4eab084
--- /dev/null
+++ b/abs/core-testing/faad2/faad2-2.6.1-libtool22.patch
@@ -0,0 +1,13 @@
+Index: faad2/configure.in
+===================================================================
+--- faad2.orig/configure.in
++++ faad2/configure.in
+@@ -18,7 +18,7 @@ dnl Checks for programs.
+ AC_PROG_CC
+ AC_PROG_CPP
+ dnl disable for mpeg4ip plugin
+-dnl AC_PROG_CXX
++AC_PROG_CXX
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+ AC_PROG_MAKE_SET
diff --git a/abs/core-testing/feh/PKGBUILD b/abs/core-testing/feh/PKGBUILD
new file mode 100644
index 0000000..23a2627
--- /dev/null
+++ b/abs/core-testing/feh/PKGBUILD
@@ -0,0 +1,17 @@
+
+pkgname=feh
+pkgver=1.3.4
+pkgrel=3
+pkgdesc="feh is a fast, lightweight image viewer which uses imlib2"
+depends=('libpng' 'libxinerama' 'giblib')
+#source=(http://linuxbrit.co.uk/downloads/$pkgname-$pkgver.tar.gz)
+source=(http://ftp.gva.es/mirror/debian/pool/main/f/feh/feh_1.3.4.orig.tar.gz)
+url="http://www.linuxbrit.co.uk/feh/"
+arch=('i686')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+}
diff --git a/abs/core-testing/ffmpeg/PKGBUILD b/abs/core-testing/ffmpeg/PKGBUILD
new file mode 100644
index 0000000..463fa98
--- /dev/null
+++ b/abs/core-testing/ffmpeg/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 5671 2008-07-20 05:09:25Z eric $
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=ffmpeg
+pkgver=20080715
+pkgrel=3
+pkgdesc="Complete and free Internet live audio and video broadcasting solution for Linux/Unix"
+arch=(i686 x86_64)
+url="http://ffmpeg.mplayerhq.hu/"
+license=('LGPL')
+depends=('lame' 'sdl' 'libvorbis' 'a52dec' 'faad2>=2.6.1' 'faac' 'xvidcore' 'zlib' 'imlib2' 'x264>=20080625' 'libtheora')
+#remake snapshot with: svn export svn://svn.mplayerhq.hu/ffmpeg/trunk@14236
+source=(ftp://ftp.archlinux.org/other/ffmpeg/ffmpeg-20080715-14236.tar.bz2)
+md5sums=('899ee3dd56a779b1152e48a94fde69f0')
+
+build() {
+ cd "$srcdir/$pkgname" || return 1
+
+ ./configure \
+ --prefix=/usr \
+ --enable-gpl \
+ --enable-libmp3lame \
+ --enable-libvorbis \
+ --enable-libfaac \
+ --enable-libfaad \
+ --enable-liba52 \
+ --enable-libxvid \
+ --enable-libx264 \
+ --enable-libtheora \
+ --enable-postproc \
+ --enable-shared \
+ --enable-pthreads \
+ --enable-x11grab \
+ --enable-swscale \
+ || return 1
+
+ make -j 2 || return 1
+ make doc/ff{mpeg,play,server}.1 || return 1
+
+ make DESTDIR="$pkgdir" install || return 1
+ make DESTDIR="$pkgdir" install-man || return 1
+
+ # since makepkg currently declines to strip .a files, do this for now
+ strip --strip-debug $startdir/pkg/usr/lib/*.a || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/fftw2/PKGBUILD b/abs/core-testing/fftw2/PKGBUILD
new file mode 100644
index 0000000..4198e96
--- /dev/null
+++ b/abs/core-testing/fftw2/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=fftw2
+pkgver=2.1.5
+pkgrel=4
+pkgdesc="FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of both real and complex data, and of arbitrary input size. This is package is offering backwards compatibility version 2.x.y. of fftw."
+arch=(i686 x86_64)
+url="http://www.fftw.org/"
+license=('GPL2')
+depends=('glibc')
+options=(!libtool)
+source=(http://www.fftw.org/fftw-${pkgver}.tar.gz)
+md5sums=('8d16a84f3ca02a785ef9eb36249ba433')
+
+build() {
+ cd ${startdir}/src/fftw-${pkgver}
+ # build + install double precision
+ ./configure F77=gfortran --prefix=/usr \
+ --enable-type-prefix --enable-shared \
+ --enable-threads
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ make clean
+
+ # build + install single precision
+ ./configure F77=gfortran --prefix=/usr \
+ --enable-float --enable-type-prefix --enable-shared \
+ --enable-threads
+ make || return 1
+ #make prefix=$startdir/pkg/usr install || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/file/PKGBUILD b/abs/core-testing/file/PKGBUILD
new file mode 100644
index 0000000..63a224f
--- /dev/null
+++ b/abs/core-testing/file/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4745 2008-07-09 19:17:02Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=file
+pkgver=4.25
+pkgrel=10
+pkgdesc="File type identification utility"
+arch=('i686' 'x86_64')
+license=('custom')
+groups=('base')
+url="http://www.darwinsys.com/file/"
+depends=('glibc' 'zlib')
+options=('!libtool')
+source=(ftp://ftp.astron.com/pub/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('cdf1f90d2704e71118353c16c19898ba')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+ ./configure --prefix=/usr --datadir=/usr/share/misc
+ make || return 1
+ make DESTDIR=${pkgdir} install
+ install -D -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core-testing/filesystem/PKGBUILD b/abs/core-testing/filesystem/PKGBUILD
new file mode 100644
index 0000000..4dee201
--- /dev/null
+++ b/abs/core-testing/filesystem/PKGBUILD
@@ -0,0 +1,90 @@
+# $Id: PKGBUILD 4675 2008-07-08 19:16:06Z pierre $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=filesystem
+pkgver=2008.07
+pkgrel=10
+pkgdesc="Base filesystem"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.archlinux.org"
+groups=('base')
+install=filesystem.install
+#depends=('sh' 'coreutils')
+backup=(etc/fstab etc/crypttab etc/group etc/hosts etc/ld.so.conf etc/passwd \
+ etc/shadow etc/gshadow etc/resolv.conf etc/motd etc/nsswitch.conf \
+ etc/shells etc/host.conf etc/securetty etc/profile etc/issue)
+source=(group issue nsswitch.conf securetty host.conf ld.so.conf \
+ passwd shadow fstab crypttab hosts motd resolv.conf shells \
+ gshadow services protocols profile)
+
+build()
+{
+ cd $startdir/pkg
+ mkdir -p bin boot dev etc home lib mnt proc root sbin tmp usr var opt srv sys
+ chmod 555 proc
+ mkdir -p media/{fl,cd,dvd}
+ mkdir -p usr/{bin,include,lib,sbin,share/misc,src,man}
+
+ mkdir -p usr/share/man/man{1,2,3,4,5,6,7,8}
+ ln -s man3 $startdir/pkg/usr/share/man/man3x
+
+ # fhs compliance
+ mkdir -p usr/local/{bin,games,include,lib,man,sbin,share,src}
+ ln -s ../man $startdir/pkg/usr/local/share/man
+ mkdir -p var/{cache/man,local,lock,opt,run,spool/mail,tmp,games}
+ chmod 1777 var/lock
+ mkdir -p var/log/old
+ mkdir -p etc/{skel,profile.d}
+ mkdir -p lib/modules
+ (cd $startdir/pkg/usr; ln -s ../var var)
+ (cd $startdir/pkg/var; ln -s spool/mail mail)
+
+ # vsftpd won't run with write perms on /srv/ftp
+ mkdir -p srv/ftp
+ chown root.ftp srv/ftp
+ chmod 555 srv/ftp
+
+ install -d -o root -g root -m 755 srv/http
+
+ chmod 1777 var/spool/mail tmp var/tmp
+ chmod 0750 root
+
+ #Allow setgid games to write scores:
+ chmod 775 ${startdir}/pkg/var/games
+ chown root:50 ${startdir}/pkg/var/games
+
+ cd $startdir/src
+ cp fstab crypttab group host.conf hosts issue 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
+ chmod 600 $startdir/pkg/etc/shadow
+ chmod 600 $startdir/pkg/etc/crypttab
+
+ # no version any more
+ #cat issue | sed "s/#VERSION#/$pkgver/" >$startdir/pkg/etc/issue
+
+ # re-add /etc/arch-release, some software uses it
+ # to check whether arch is running
+ touch $startdir/pkg/etc/arch-release
+}
+md5sums=('f64f86c4a6356961b69ead0471294145'
+ '1bdc5dba66947d74866a5df8ce9ef3b1'
+ '775464ba7588b4976e0c2a02b83123f4'
+ '655071da46d2ac03e0fb8a071bf193ea'
+ 'f28150d4c0b22a017be51b9f7f9977ed'
+ '2c24792d97ef3cf0d73b60d4c429730b'
+ '8a9042a2cedf6b6b47eb8973f14289cb'
+ '019e5c24f9befef395a28e7ef2e4e5b9'
+ '4e2f238bae5cbf716ff73c9404404269'
+ 'e5d8323a4dbee7a6d0d2a19cbf4b819f'
+ '81b3cb42a6ddabc2ed2310511ee9c859'
+ 'd41d8cd98f00b204e9800998ecf8427e'
+ '6f48288b6fcaf0065fcb7b0e525413e0'
+ '40dac0de4c6b99c8ca97effbd7527c84'
+ 'ab9c2a40eba287b2918589ab8e0b2fbf'
+ 'f436d2e0ed02b7b73bd10c6693e95ac3'
+ '65d78e621ed69eed69f854c3ee2e5942'
+ 'f2a88eacb5c37201368c916d9e594440')
diff --git a/abs/core-testing/filesystem/crypttab b/abs/core-testing/filesystem/crypttab
new file mode 100644
index 0000000..dd6994b
--- /dev/null
+++ b/abs/core-testing/filesystem/crypttab
@@ -0,0 +1,33 @@
+# crypttab: Mappings for encrypted partitions
+#
+# Each mapped device will be created in /dev/mapper, so your /etc/fstab
+# should use the /dev/mapper/{NAME} paths for encrypted devices.
+#
+# Each PASSWORD field can be an absolute pathname to a key file (starting
+# with a slash, recommended) or a literal string that will be used as
+# a passphrase. To use special characters in the passphrase, surround it
+# by quotes, the usual bash quoting rules apply.
+# There are two special keywords that cannot be used as passphrases:
+# - ASK ask for a passphrase on boot
+# - SWAP use a random key and create a swapspace afterwards
+# WARNING: use the SWAP keyword carefully, as it overwrites the data
+# on the specified partition
+#
+# To create a key file:
+# hashalot -n 32 ripemd160 >/etc/crytfs.key
+# or
+# dd if=/dev/urandom of=/etc/cryptfs.key bs=256 count=1
+#
+# To pass additional options to cryptsetup for non-LUKS partitions, use the
+# fourth column.
+#
+# NOTE: Do not list your root (/) partition here, it must be set up
+# beforehand by the initramfs (/etc/mkinitcpio.conf).
+
+
+# NAME SOURCE DEVICE PASSWORD OPTIONS
+#home /dev/hda4 mypassword
+#data1 /dev/hda3 "my \"password\""
+#data2 /dev/hda5 /etc/cryptfs.key
+#swap /dev/hdx4 SWAP -c aes-cbc-essiv:sha256 -s 256
+#vol /dev/hdb7 ASK
diff --git a/abs/core-testing/filesystem/filesystem.install b/abs/core-testing/filesystem/filesystem.install
new file mode 100644
index 0000000..92b336f
--- /dev/null
+++ b/abs/core-testing/filesystem/filesystem.install
@@ -0,0 +1,60 @@
+# arg 1: the new package version
+post_install() {
+ [ -f var/log/lastlog ] || : >var/log/lastlog
+ [ -f var/log/wtmp ] || : >var/log/wtmp
+ [ -f var/run/utmp ] || : >var/run/utmp
+ [ -f var/log/btmp ] || (: >var/log/btmp && bin/chmod 600 var/log/btmp)
+ # workaround for bug #7194
+ # readded due to bug #9465
+ # please do not remove!
+ chmod 1777 var/spool/mail tmp var/tmp var/lock
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+ if [ ! "`grep ^optical: etc/group`" ]; then
+ echo "adding new groups: audio optical"
+ usr/sbin/groupadd -g 92 audio >/dev/null
+ usr/sbin/groupadd -g 93 optical >/dev/null
+ fi
+ if [ ! "`grep ^video: etc/group`" ]; then
+ echo "adding new groups: video floppy storage"
+ usr/sbin/groupadd -g 91 video >/dev/null
+ usr/sbin/groupadd -g 94 floppy >/dev/null
+ usr/sbin/groupadd -g 95 storage >/dev/null
+ fi
+ if [ ! "`grep ^log: etc/group`" ]; then
+ echo "adding new group: log"
+ usr/sbin/groupadd -g 19 log >/dev/null
+ fi
+ if [ ! "`grep ^power: etc/group`" ]; then
+ echo "adding new group: power"
+ usr/sbin/groupadd -g 98 power >/dev/null
+ fi
+ if [ ! "`grep ^network: etc/group`" ]; then
+ echo "adding new group: network"
+ usr/sbin/groupadd -g 90 network >/dev/null
+ fi
+ if [ ! "`grep ^games: etc/group`" ]; then
+ echo "adding new group: games"
+ usr/sbin/groupadd -g 50 games >/dev/null
+ fi
+ if [ ! "`grep ^uucp: etc/group`" ]; then
+ echo "adding new group: uucp"
+ usr/sbin/groupadd -g 14 uucp >/dev/null
+ fi
+ if [ ! "`grep ^http: etc/group`" ]; then
+ echo "adding new group: http"
+ usr/sbin/groupadd -g 33 http >/dev/null
+ fi
+ if [ ! "`grep ^http: etc/passwd`" ]; then
+ echo "adding new user http"
+ usr/sbin/useradd -u 33 -d /srv/http -g http -s /bin/false http >/dev/null
+ fi
+ if [ ! "`grep ^scanner: etc/group`" ]; then
+ echo "adding new group: scanner"
+ usr/sbin/groupadd -g 96 scanner >/dev/null
+ fi
+}
diff --git a/abs/core-testing/filesystem/fstab b/abs/core-testing/filesystem/fstab
new file mode 100644
index 0000000..a609a32
--- /dev/null
+++ b/abs/core-testing/filesystem/fstab
@@ -0,0 +1,11 @@
+#
+# /etc/fstab: static file system information
+#
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+
+/dev/cdrom /media/cd auto ro,user,noauto,unhide 0 0
+/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0
+/dev/fd0 /media/fl auto user,noauto 0 0
+
diff --git a/abs/core-testing/filesystem/group b/abs/core-testing/filesystem/group
new file mode 100644
index 0000000..f0d4712
--- /dev/null
+++ b/abs/core-testing/filesystem/group
@@ -0,0 +1,28 @@
+root::0:root
+bin::1:root,bin,daemon
+daemon::2:root,bin,daemon
+sys::3:root,bin
+adm::4:root,daemon
+tty::5:
+disk::6:root
+lp::7:daemon
+mem::8:
+kmem::9:
+wheel::10:root
+ftp::11:
+mail::12:
+uucp::14:
+log::19:root
+smmsp::25:
+http::33:
+games::50:
+network:x:90:
+video:x:91:
+audio::92:
+optical::93:
+floppy:x:94:
+storage:x:95:
+scanner:x:96:
+power:x:98:
+nobody::99:
+users::100:
diff --git a/abs/core-testing/filesystem/gshadow b/abs/core-testing/filesystem/gshadow
new file mode 100644
index 0000000..30733e3
--- /dev/null
+++ b/abs/core-testing/filesystem/gshadow
@@ -0,0 +1,27 @@
+root:::root
+bin:::root,bin,daemon
+daemon:::root,bin,daemon
+sys:::root,bin
+adm:::root,daemon
+tty:::
+disk:::root
+lp:::daemon
+mem:::
+kmem:::
+wheel:::root
+ftp:::
+mail:::
+log:::root
+smmsp:::
+http:::
+games:::
+network:x::
+video:x::
+audio:::
+optical:::
+floppy:x::
+storage:x::
+scanner:x::
+power:x::
+nobody:::
+users:::
diff --git a/abs/core-testing/filesystem/host.conf b/abs/core-testing/filesystem/host.conf
new file mode 100644
index 0000000..cf52fe5
--- /dev/null
+++ b/abs/core-testing/filesystem/host.conf
@@ -0,0 +1,8 @@
+#
+# /etc/host.conf
+#
+
+order hosts,bind
+multi on
+
+# End of file
diff --git a/abs/core-testing/filesystem/hosts b/abs/core-testing/filesystem/hosts
new file mode 100644
index 0000000..ec12849
--- /dev/null
+++ b/abs/core-testing/filesystem/hosts
@@ -0,0 +1,8 @@
+#
+# /etc/hosts: static lookup table for host names
+#
+
+#<ip-address> <hostname.domain.org> <hostname>
+127.0.0.1 localhost.localdomain localhost
+
+# End of file
diff --git a/abs/core-testing/filesystem/issue b/abs/core-testing/filesystem/issue
new file mode 100644
index 0000000..3db753d
--- /dev/null
+++ b/abs/core-testing/filesystem/issue
@@ -0,0 +1,3 @@
+
+Arch Linux \r (\n) (\l)
+
diff --git a/abs/core-testing/filesystem/ld.so.conf b/abs/core-testing/filesystem/ld.so.conf
new file mode 100644
index 0000000..2227e1e
--- /dev/null
+++ b/abs/core-testing/filesystem/ld.so.conf
@@ -0,0 +1,5 @@
+#
+# /etc/ld.so.conf
+#
+
+# End of file
diff --git a/abs/core-testing/filesystem/motd b/abs/core-testing/filesystem/motd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core-testing/filesystem/motd
diff --git a/abs/core-testing/filesystem/nsswitch.conf b/abs/core-testing/filesystem/nsswitch.conf
new file mode 100644
index 0000000..7d86691
--- /dev/null
+++ b/abs/core-testing/filesystem/nsswitch.conf
@@ -0,0 +1,19 @@
+# Begin /etc/nsswitch.conf
+
+passwd: files
+group: files
+shadow: files
+
+publickey: files
+
+hosts: files dns
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: db files
+
+# End /etc/nsswitch.conf
diff --git a/abs/core-testing/filesystem/passwd b/abs/core-testing/filesystem/passwd
new file mode 100644
index 0000000..a4a24e3
--- /dev/null
+++ b/abs/core-testing/filesystem/passwd
@@ -0,0 +1,7 @@
+root:x:0:0:root:/root:/bin/bash
+bin:x:1:1:bin:/bin:/bin/false
+daemon:x:2:2:daemon:/sbin:/bin/false
+mail:x:8:12:mail:/var/spool/mail:/bin/false
+ftp:x:14:11:ftp:/srv/ftp:/bin/false
+http:x:33:33:http:/srv/http:/bin/false
+nobody:x:99:99:nobody:/:/bin/false
diff --git a/abs/core-testing/filesystem/profile b/abs/core-testing/filesystem/profile
new file mode 100644
index 0000000..d18b99a
--- /dev/null
+++ b/abs/core-testing/filesystem/profile
@@ -0,0 +1,57 @@
+#
+# /etc/profile
+#
+# This file is intended to be used for ALL common
+# Bourne-compatible shells. Shell specifics should be
+# handled in /etc/profile.$SHELL where $SHELL is the name
+# of the binary being run (discounting symlinks)
+#
+# Sections taken from SuSe's /etc/profile
+# Note the explicit use of 'test' to cover all bases
+# and potentially incompatible shells
+
+#Determine our shell without using $SHELL, which may lie
+shell="sh"
+if test -f /proc/mounts; then
+ case $(/bin/ls -l /proc/$$/exe) in
+ *bash) shell=bash ;;
+ *dash) shell=dash ;;
+ *ash) shell=ash ;;
+ *ksh) shell=ksh ;;
+ *zsh) shell=zsh ;;
+ esac
+fi
+
+# Load shell specific profile settings
+test -f "/etc/profile.$shell" && . "/etc/profile.$shell"
+
+#Set our umask
+umask 022
+
+# Set our default path
+PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+export PATH
+
+# Some readline stuff that is fairly common
+HISTSIZE=1000
+HISTCONTROL="erasedups"
+
+INPUTRC="/etc/inputrc"
+LESS="-R"
+LC_COLLATE="C"
+
+export HISTSIZE HISTCONTROL INPUTRC LESS LC_COLLATE
+
+# Load profiles from /etc/profile.d
+if test -d /etc/profile.d/; then
+ for profile in /etc/profile.d/*.sh; do
+ test -x $profile && . $profile
+ done
+ unset profile
+fi
+
+# Termcap is outdated, old, and crusty, kill it.
+unset TERMCAP
+
+# Man is much better than us at figuring this out
+unset MANPATH
diff --git a/abs/core-testing/filesystem/protocols b/abs/core-testing/filesystem/protocols
new file mode 100644
index 0000000..670728e
--- /dev/null
+++ b/abs/core-testing/filesystem/protocols
@@ -0,0 +1,57 @@
+# Internet (IP) protocols
+#
+# Updated from http://www.iana.org/assignments/protocol-numbers and other
+# sources.
+# New protocols will be added on request if they have been officially
+# assigned by IANA and are not historical.
+# If you need a huge list of used numbers please install the nmap package.
+
+ip 0 IP # internet protocol, pseudo protocol number
+#hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # Internet Group Management
+ggp 3 GGP # gateway-gateway protocol
+ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
+st 5 ST # ST datagram mode
+tcp 6 TCP # transmission control protocol
+egp 8 EGP # exterior gateway protocol
+igp 9 IGP # any private interior gateway (Cisco)
+pup 12 PUP # PARC universal packet protocol
+udp 17 UDP # user datagram protocol
+hmp 20 HMP # host monitoring protocol
+xns-idp 22 XNS-IDP # Xerox NS IDP
+rdp 27 RDP # "reliable datagram" protocol
+iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905]
+xtp 36 XTP # Xpress Transfer Protocol
+ddp 37 DDP # Datagram Delivery Protocol
+idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
+ipv6 41 IPv6 # Internet Protocol, version 6
+ipv6-route 43 IPv6-Route # Routing Header for IPv6
+ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
+idrp 45 IDRP # Inter-Domain Routing Protocol
+rsvp 46 RSVP # Reservation Protocol
+gre 47 GRE # General Routing Encapsulation
+esp 50 IPSEC-ESP # Encap Security Payload [RFC2406]
+ah 51 IPSEC-AH # Authentication Header [RFC2402]
+skip 57 SKIP # SKIP
+ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
+ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
+ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
+rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB)
+vmtp 81 VMTP # Versatile Message Transport
+eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco)
+ospf 89 OSPFIGP # Open Shortest Path First IGP
+ax.25 93 AX.25 # AX.25 frames
+ipip 94 IPIP # IP-within-IP Encapsulation Protocol
+etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378]
+encap 98 ENCAP # Yet Another IP encapsulation [RFC1241]
+# 99 # any private encryption scheme
+pim 103 PIM # Protocol Independent Multicast
+ipcomp 108 IPCOMP # IP Payload Compression Protocol
+vrrp 112 VRRP # Virtual Router Redundancy Protocol
+l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661]
+isis 124 ISIS # IS-IS over IPv4
+sctp 132 SCTP # Stream Control Transmission Protocol
+fc 133 FC # Fibre Channel
+udplite 136 UDPLite # UDP-Lite
+
diff --git a/abs/core-testing/filesystem/resolv.conf b/abs/core-testing/filesystem/resolv.conf
new file mode 100644
index 0000000..cecafba
--- /dev/null
+++ b/abs/core-testing/filesystem/resolv.conf
@@ -0,0 +1,8 @@
+#
+# /etc/resolv.conf
+#
+
+#search <yourdomain.tld>
+#nameserver <ip>
+
+# End of file
diff --git a/abs/core-testing/filesystem/securetty b/abs/core-testing/filesystem/securetty
new file mode 100644
index 0000000..af01d2e
--- /dev/null
+++ b/abs/core-testing/filesystem/securetty
@@ -0,0 +1,13 @@
+#
+# /etc/securetty
+#
+
+console
+vc/1
+vc/2
+vc/3
+vc/4
+vc/5
+vc/6
+
+# End of file
diff --git a/abs/core-testing/filesystem/services b/abs/core-testing/filesystem/services
new file mode 100644
index 0000000..2f1f99c
--- /dev/null
+++ b/abs/core-testing/filesystem/services
@@ -0,0 +1,557 @@
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, officially ports have two entries
+# even if the protocol doesn't support UDP operations.
+#
+# Updated from http://www.iana.org/assignments/port-numbers and other
+# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
+# New ports will be added on request if they have been officially assigned
+# by IANA and used in the real-world or are needed by a debian package.
+# If you need a huge list of used numbers please install the nmap package.
+
+tcpmux 1/tcp # TCP port service multiplexer
+echo 7/tcp
+echo 7/udp
+discard 9/tcp sink null
+discard 9/udp sink null
+systat 11/tcp users
+daytime 13/tcp
+daytime 13/udp
+netstat 15/tcp
+qotd 17/tcp quote
+msp 18/tcp # message send protocol
+msp 18/udp
+chargen 19/tcp ttytst source
+chargen 19/udp ttytst source
+ftp-data 20/tcp
+ftp 21/tcp
+fsp 21/udp fspd
+ssh 22/tcp # SSH Remote Login Protocol
+ssh 22/udp
+telnet 23/tcp
+smtp 25/tcp mail
+time 37/tcp timserver
+time 37/udp timserver
+rlp 39/udp resource # resource location
+nameserver 42/tcp name # IEN 116
+whois 43/tcp nicname
+tacacs 49/tcp # Login Host Protocol (TACACS)
+tacacs 49/udp
+re-mail-ck 50/tcp # Remote Mail Checking Protocol
+re-mail-ck 50/udp
+domain 53/tcp # name-domain server
+domain 53/udp
+mtp 57/tcp # deprecated
+tacacs-ds 65/tcp # TACACS-Database Service
+tacacs-ds 65/udp
+bootps 67/tcp # BOOTP server
+bootps 67/udp
+bootpc 68/tcp # BOOTP client
+bootpc 68/udp
+tftp 69/udp
+gopher 70/tcp # Internet Gopher
+gopher 70/udp
+rje 77/tcp netrjs
+finger 79/tcp
+www 80/tcp http # WorldWideWeb HTTP
+www 80/udp # HyperText Transfer Protocol
+link 87/tcp ttylink
+kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5
+kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5
+supdup 95/tcp
+hostnames 101/tcp hostname # usually from sri-nic
+iso-tsap 102/tcp tsap # part of ISODE
+acr-nema 104/tcp dicom # Digital Imag. & Comm. 300
+acr-nema 104/udp dicom # Digital Imag. & Comm. 300
+csnet-ns 105/tcp cso-ns # also used by CSO name server
+csnet-ns 105/udp cso-ns
+rtelnet 107/tcp # Remote Telnet
+rtelnet 107/udp
+pop2 109/tcp postoffice pop-2 # POP version 2
+pop2 109/udp pop-2
+pop3 110/tcp pop-3 # POP version 3
+pop3 110/udp pop-3
+sunrpc 111/tcp portmapper # RPC 4.0 portmapper
+sunrpc 111/udp portmapper
+auth 113/tcp authentication tap ident
+sftp 115/tcp
+uucp-path 117/tcp
+nntp 119/tcp readnews untp # USENET News Transfer Protocol
+ntp 123/tcp
+ntp 123/udp # Network Time Protocol
+pwdgen 129/tcp # PWDGEN service
+pwdgen 129/udp # PWDGEN service
+loc-srv 135/tcp epmap # Location Service
+loc-srv 135/udp epmap
+netbios-ns 137/tcp # NETBIOS Name Service
+netbios-ns 137/udp
+netbios-dgm 138/tcp # NETBIOS Datagram Service
+netbios-dgm 138/udp
+netbios-ssn 139/tcp # NETBIOS session service
+netbios-ssn 139/udp
+imap2 143/tcp imap # Interim Mail Access P 2 and 4
+imap2 143/udp imap
+snmp 161/tcp # Simple Net Mgmt Protocol
+snmp 161/udp # Simple Net Mgmt Protocol
+snmp-trap 162/tcp snmptrap # Traps for SNMP
+snmp-trap 162/udp snmptrap # Traps for SNMP
+cmip-man 163/tcp # ISO mgmt over IP (CMOT)
+cmip-man 163/udp
+cmip-agent 164/tcp
+cmip-agent 164/udp
+mailq 174/tcp # Mailer transport queue for Zmailer
+mailq 174/udp # Mailer transport queue for Zmailer
+xdmcp 177/tcp # X Display Mgr. Control Proto
+xdmcp 177/udp
+nextstep 178/tcp NeXTStep NextStep # NeXTStep window
+nextstep 178/udp NeXTStep NextStep # server
+bgp 179/tcp # Border Gateway Protocol
+bgp 179/udp
+prospero 191/tcp # Cliff Neuman's Prospero
+prospero 191/udp
+irc 194/tcp # Internet Relay Chat
+irc 194/udp
+smux 199/tcp # SNMP Unix Multiplexer
+smux 199/udp
+at-rtmp 201/tcp # AppleTalk routing
+at-rtmp 201/udp
+at-nbp 202/tcp # AppleTalk name binding
+at-nbp 202/udp
+at-echo 204/tcp # AppleTalk echo
+at-echo 204/udp
+at-zis 206/tcp # AppleTalk zone information
+at-zis 206/udp
+qmtp 209/tcp # Quick Mail Transfer Protocol
+qmtp 209/udp # Quick Mail Transfer Protocol
+z3950 210/tcp wais # NISO Z39.50 database
+z3950 210/udp wais
+ipx 213/tcp # IPX
+ipx 213/udp
+imap3 220/tcp # Interactive Mail Access
+imap3 220/udp # Protocol v3
+pawserv 345/tcp # Perf Analysis Workbench
+pawserv 345/udp
+zserv 346/tcp # Zebra server
+zserv 346/udp
+fatserv 347/tcp # Fatmen Server
+fatserv 347/udp
+rpc2portmap 369/tcp
+rpc2portmap 369/udp # Coda portmapper
+codaauth2 370/tcp
+codaauth2 370/udp # Coda authentication server
+clearcase 371/tcp Clearcase
+clearcase 371/udp Clearcase
+ulistserv 372/tcp # UNIX Listserv
+ulistserv 372/udp
+ldap 389/tcp # Lightweight Directory Access Protocol
+ldap 389/udp
+imsp 406/tcp # Interactive Mail Support Protocol
+imsp 406/udp
+https 443/tcp # http protocol over TLS/SSL
+https 443/udp
+snpp 444/tcp # Simple Network Paging Protocol
+snpp 444/udp
+microsoft-ds 445/tcp # Microsoft Naked CIFS
+microsoft-ds 445/udp
+kpasswd 464/tcp
+kpasswd 464/udp
+saft 487/tcp # Simple Asynchronous File Transfer
+saft 487/udp
+isakmp 500/tcp # IPsec - Internet Security Association
+isakmp 500/udp # and Key Management Protocol
+rtsp 554/tcp # Real Time Stream Control Protocol
+rtsp 554/udp # Real Time Stream Control Protocol
+nqs 607/tcp # Network Queuing system
+nqs 607/udp
+npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS
+npmp-local 610/udp dqs313_qmaster
+npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS
+npmp-gui 611/udp dqs313_execd
+hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS
+hmmp-ind 612/udp dqs313_intercell
+ipp 631/tcp # Internet Printing Protocol
+ipp 631/udp
+#
+# UNIX specific services
+#
+exec 512/tcp
+biff 512/udp comsat
+login 513/tcp
+who 513/udp whod
+shell 514/tcp cmd # no passwords used
+syslog 514/udp
+printer 515/tcp spooler # line printer spooler
+talk 517/udp
+ntalk 518/udp
+route 520/udp router routed # RIP
+timed 525/udp timeserver
+tempo 526/tcp newdate
+courier 530/tcp rpc
+conference 531/tcp chat
+netnews 532/tcp readnews
+netwall 533/udp # for emergency broadcasts
+gdomap 538/tcp # GNUstep distributed objects
+gdomap 538/udp
+uucp 540/tcp uucpd # uucp daemon
+klogin 543/tcp # Kerberized `rlogin' (v5)
+kshell 544/tcp krcmd # Kerberized `rsh' (v5)
+afpovertcp 548/tcp # AFP over TCP
+afpovertcp 548/udp
+remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
+nntps 563/tcp snntp # NNTP over SSL
+nntps 563/udp snntp
+submission 587/tcp # Submission [RFC2476]
+submission 587/udp
+ldaps 636/tcp # LDAP over SSL
+ldaps 636/udp
+tinc 655/tcp # tinc control port
+tinc 655/udp
+silc 706/tcp
+silc 706/udp
+kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
+#
+webster 765/tcp # Network dictionary
+webster 765/udp
+rsync 873/tcp
+rsync 873/udp
+ftps-data 989/tcp # FTP over SSL (data)
+ftps 990/tcp
+telnets 992/tcp # Telnet over SSL
+telnets 992/udp
+imaps 993/tcp # IMAP over SSL
+imaps 993/udp
+ircs 994/tcp # IRC over SSL
+ircs 994/udp
+pop3s 995/tcp # POP-3 over SSL
+pop3s 995/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations. For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined. This list specifies the port used by the server process as its
+#> contact port. While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+socks 1080/tcp # socks proxy server
+socks 1080/udp
+proofd 1093/tcp
+proofd 1093/udp
+rootd 1094/tcp
+rootd 1094/udp
+openvpn 1194/tcp
+openvpn 1194/udp
+rmiregistry 1099/tcp # Java RMI Registry
+rmiregistry 1099/udp
+kazaa 1214/tcp
+kazaa 1214/udp
+nessus 1241/tcp # Nessus vulnerability
+nessus 1241/udp # assessment scanner
+lotusnote 1352/tcp lotusnotes # Lotus Note
+lotusnote 1352/udp lotusnotes
+ms-sql-s 1433/tcp # Microsoft SQL Server
+ms-sql-s 1433/udp
+ms-sql-m 1434/tcp # Microsoft SQL Monitor
+ms-sql-m 1434/udp
+ingreslock 1524/tcp
+ingreslock 1524/udp
+prospero-np 1525/tcp # Prospero non-privileged
+prospero-np 1525/udp
+datametrics 1645/tcp old-radius
+datametrics 1645/udp old-radius
+sa-msg-port 1646/tcp old-radacct
+sa-msg-port 1646/udp old-radacct
+kermit 1649/tcp
+kermit 1649/udp
+l2f 1701/tcp l2tp
+l2f 1701/udp l2tp
+radius 1812/tcp
+radius 1812/udp
+radius-acct 1813/tcp radacct # Radius Accounting
+radius-acct 1813/udp radacct
+msnp 1863/tcp # MSN Messenger
+msnp 1863/udp
+unix-status 1957/tcp # remstats unix-status server
+log-server 1958/tcp # remstats log server
+remoteping 1959/tcp # remstats remoteping server
+nfs 2049/tcp # Network File System
+nfs 2049/udp # Network File System
+rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99
+rtcm-sc104 2101/udp
+cvspserver 2401/tcp # CVS client/server operations
+cvspserver 2401/udp
+venus 2430/tcp # codacon port
+venus 2430/udp # Venus callback/wbc interface
+venus-se 2431/tcp # tcp side effects
+venus-se 2431/udp # udp sftp side effect
+codasrv 2432/tcp # not used
+codasrv 2432/udp # server port
+codasrv-se 2433/tcp # tcp side effects
+codasrv-se 2433/udp # udp sftp side effect
+mon 2583/tcp # MON
+mon 2583/udp
+dict 2628/tcp # Dictionary server
+dict 2628/udp
+gpsd 2947/tcp
+gpsd 2947/udp
+gds_db 3050/tcp # InterBase server
+gds_db 3050/udp
+icpv2 3130/tcp icp # Internet Cache Protocol
+icpv2 3130/udp icp
+mysql 3306/tcp
+mysql 3306/udp
+nut 3493/tcp # Network UPS Tools
+nut 3493/udp
+distcc 3632/tcp # distributed compiler
+distcc 3632/udp
+daap 3689/tcp # Digital Audio Access Protocol
+daap 3689/udp
+svn 3690/tcp subversion # Subversion protocol
+svn 3690/udp subversion
+suucp 4013/tcp # UUCP over SSL
+suucp 4013/udp # UUCP over SSL
+sysrqd 4094/tcp # sysrq daemon
+sysrqd 4094/udp # sysrq daemon
+iax 4569/tcp # Inter-Asterisk eXchange
+iax 4569/udp
+radmin-port 4899/tcp # RAdmin Port
+radmin-port 4899/udp
+rfe 5002/udp # Radio Free Ethernet
+rfe 5002/tcp
+mmcc 5050/tcp # multimedia conference control tool (Yahoo IM)
+mmcc 5050/udp
+sip 5060/tcp # Session Initiation Protocol
+sip 5060/udp
+sip-tls 5061/tcp
+sip-tls 5061/udp
+aol 5190/tcp # AIM
+aol 5190/udp
+xmpp-client 5222/tcp jabber-client # Jabber Client Connection
+xmpp-client 5222/udp jabber-client
+xmpp-server 5269/tcp jabber-server # Jabber Server Connection
+xmpp-server 5269/udp jabber-server
+cfengine 5308/tcp
+cfengine 5308/udp
+mdns 5353/tcp # Multicast DNS
+mdns 5353/udp # Multicast DNS
+postgresql 5432/tcp postgres # PostgreSQL Database
+postgresql 5432/udp postgres
+ggz 5688/tcp # GGZ Gaming Zone
+ggz 5688/udp # GGZ Gaming Zone
+x11 6000/tcp x11-0 # X Window System
+x11 6000/udp x11-0
+x11-1 6001/tcp
+x11-1 6001/udp
+x11-2 6002/tcp
+x11-2 6002/udp
+x11-3 6003/tcp
+x11-3 6003/udp
+x11-4 6004/tcp
+x11-4 6004/udp
+x11-5 6005/tcp
+x11-5 6005/udp
+x11-6 6006/tcp
+x11-6 6006/udp
+x11-7 6007/tcp
+x11-7 6007/udp
+gnutella-svc 6346/tcp # gnutella
+gnutella-svc 6346/udp
+gnutella-rtr 6347/tcp # gnutella
+gnutella-rtr 6347/udp
+sge_qmaster 6444/tcp # Grid Engine Qmaster Service
+sge_qmaster 6444/udp # Grid Engine Qmaster Service
+sge_execd 6445/tcp # Grid Engine Execution Service
+sge_execd 6445/udp # Grid Engine Execution Service
+afs3-fileserver 7000/tcp bbs # file server itself
+afs3-fileserver 7000/udp bbs
+afs3-callback 7001/tcp # callbacks to cache managers
+afs3-callback 7001/udp
+afs3-prserver 7002/tcp # users & groups database
+afs3-prserver 7002/udp
+afs3-vlserver 7003/tcp # volume location database
+afs3-vlserver 7003/udp
+afs3-kaserver 7004/tcp # AFS/Kerberos authentication
+afs3-kaserver 7004/udp
+afs3-volser 7005/tcp # volume managment server
+afs3-volser 7005/udp
+afs3-errors 7006/tcp # error interpretation service
+afs3-errors 7006/udp
+afs3-bos 7007/tcp # basic overseer process
+afs3-bos 7007/udp
+afs3-update 7008/tcp # server-to-server updater
+afs3-update 7008/udp
+afs3-rmtsys 7009/tcp # remote cache manager service
+afs3-rmtsys 7009/udp
+font-service 7100/tcp xfs # X Font Service
+font-service 7100/udp xfs
+bacula-dir 9101/tcp # Bacula Director
+bacula-dir 9101/udp
+bacula-fd 9102/tcp # Bacula File Daemon
+bacula-fd 9102/udp
+bacula-sd 9103/tcp # Bacula Storage Daemon
+bacula-sd 9103/udp
+amanda 10080/tcp # amanda backup services
+amanda 10080/udp
+hkp 11371/tcp # OpenPGP HTTP Keyserver
+hkp 11371/udp # OpenPGP HTTP Keyserver
+bprd 13720/tcp # VERITAS NetBackup
+bprd 13720/udp
+bpdbm 13721/tcp # VERITAS NetBackup
+bpdbm 13721/udp
+bpjava-msvc 13722/tcp # BP Java MSVC Protocol
+bpjava-msvc 13722/udp
+vnetd 13724/tcp # Veritas Network Utility
+vnetd 13724/udp
+bpcd 13782/tcp # VERITAS NetBackup
+bpcd 13782/udp
+vopied 13783/tcp # VERITAS NetBackup
+vopied 13783/udp
+wnn6 22273/tcp # wnn6
+wnn6 22273/udp
+
+#
+# Datagram Delivery Protocol services
+#
+rtmp 1/ddp # Routing Table Maintenance Protocol
+nbp 2/ddp # Name Binding Protocol
+echo 4/ddp # AppleTalk Echo Protocol
+zip 6/ddp # Zone Information Protocol
+
+#=========================================================================
+# The remaining port numbers are not as allocated by IANA.
+#=========================================================================
+
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial. Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+kerberos4 750/udp kerberos-iv kdc # Kerberos (server)
+kerberos4 750/tcp kerberos-iv kdc
+kerberos_master 751/udp # Kerberos authentication
+kerberos_master 751/tcp
+passwd_server 752/udp # Kerberos passwd server
+krb_prop 754/tcp krb5_prop hprop # Kerberos slave propagation
+krbupdate 760/tcp kreg # Kerberos registration
+swat 901/tcp # swat
+kpop 1109/tcp # Pop with Kerberos
+knetd 2053/tcp # Kerberos de-multiplexor
+zephyr-srv 2102/udp # Zephyr server
+zephyr-clt 2103/udp # Zephyr serv-hm connection
+zephyr-hm 2104/udp # Zephyr hostmanager
+eklogin 2105/tcp # Kerberos encrypted rlogin
+# Hmmm. Are we using Kv4 or Kv5 now? Worrying.
+# The following is probably Kerberos v5 --- ajt@debian.org (11/02/2000)
+kx 2111/tcp # X over Kerberos
+iprop 2121/tcp # incremental propagation
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv 871/tcp # SUP server
+supfiledbg 1127/tcp # SUP debugging
+
+#
+# Services added for the Debian GNU/Linux distribution
+#
+linuxconf 98/tcp # LinuxConf
+poppassd 106/tcp # Eudora
+poppassd 106/udp
+ssmtp 465/tcp smtps # SMTP over SSL
+moira_db 775/tcp # Moira database
+moira_update 777/tcp # Moira update protocol
+moira_ureg 779/udp # Moira user registration
+spamd 783/tcp # spamassassin daemon
+omirr 808/tcp omirrd # online mirror
+omirr 808/udp omirrd
+customs 1001/tcp # pmake customs server
+customs 1001/udp
+skkserv 1178/tcp # skk jisho server port
+predict 1210/udp # predict -- satellite tracking
+rmtcfg 1236/tcp # Gracilis Packeten remote config server
+wipld 1300/tcp # Wipl network monitor
+xtel 1313/tcp # french minitel
+xtelw 1314/tcp # french minitel
+support 1529/tcp # GNATS
+sieve 2000/tcp # Sieve mail filter daemon
+cfinger 2003/tcp # GNU Finger
+ndtp 2010/tcp # Network dictionary transfer protocol
+frox 2121/tcp # frox: caching ftp proxy
+ninstall 2150/tcp # ninstall service
+ninstall 2150/udp
+zebrasrv 2600/tcp # zebra service
+zebra 2601/tcp # zebra vty
+ripd 2602/tcp # ripd vty (zebra)
+ripngd 2603/tcp # ripngd vty (zebra)
+ospfd 2604/tcp # ospfd vty (zebra)
+bgpd 2605/tcp # bgpd vty (zebra)
+ospf6d 2606/tcp # ospf6d vty (zebra)
+ospfapi 2607/tcp # OSPF-API
+isisd 2608/tcp # ISISd vty (zebra)
+afbackup 2988/tcp # Afbackup system
+afbackup 2988/udp
+afmbackup 2989/tcp # Afmbackup system
+afmbackup 2989/udp
+xtell 4224/tcp # xtell server
+fax 4557/tcp # FAX transmission service (old)
+hylafax 4559/tcp # HylaFAX client-server protocol (new)
+distmp3 4600/tcp # distmp3host daemon
+munin 4949/tcp lrrd # Munin
+enbd-cstatd 5051/tcp # ENBD client statd
+enbd-sstatd 5052/tcp # ENBD server statd
+pcrd 5151/tcp # PCR-1000 Daemon
+noclog 5354/tcp # noclogd with TCP (nocol)
+noclog 5354/udp # noclogd with UDP (nocol)
+hostmon 5355/tcp # hostmon uses TCP (nocol)
+hostmon 5355/udp # hostmon uses UDP (nocol)
+rplay 5555/udp # RPlay audio service
+rplay 5555/tcp
+rptp 5556/udp # Remote Play Transfer Protocol
+rptp 5556/tcp
+nsca 5667/tcp # Nagios Agent - NSCA
+mrtd 5674/tcp # MRT Routing Daemon
+bgpsim 5675/tcp # MRT Routing Simulator
+canna 5680/tcp # cannaserver
+sane-port 6566/tcp sane saned # SANE network scanner daemon
+ircd 6667/tcp # Internet Relay Chat
+zope-ftp 8021/tcp # zope management by ftp
+webcache 8080/tcp # WWW caching service
+tproxy 8081/tcp # Transparent Proxy
+omniorb 8088/tcp # OmniORB
+omniorb 8088/udp
+clc-build-daemon 8990/tcp # Common lisp build daemon
+xinetd 9098/tcp
+mandelspawn 9359/udp mandelbrot # network mandelbrot
+git 9418/tcp # Git Version Control System
+zope 9673/tcp # zope server
+webmin 10000/tcp
+kamanda 10081/tcp # amanda backup services (Kerberos)
+kamanda 10081/udp
+amandaidx 10082/tcp # amanda backup services
+amidxtape 10083/tcp # amanda backup services
+smsqp 11201/tcp # Alamin SMS gateway
+smsqp 11201/udp
+xpilot 15345/tcp # XPilot Contact Port
+xpilot 15345/udp
+sgi-cmsd 17001/udp # Cluster membership services daemon
+sgi-crsd 17002/udp
+sgi-gcd 17003/udp # SGI Group membership daemon
+sgi-cad 17004/tcp # Cluster Admin daemon
+isdnlog 20011/tcp # isdn logging system
+isdnlog 20011/udp
+vboxd 20012/tcp # voice box system
+vboxd 20012/udp
+binkp 24554/tcp # binkp fidonet protocol
+asp 27374/tcp # Address Search Protocol
+asp 27374/udp
+csync2 30865/tcp # cluster synchronization tool
+dircproxy 57000/tcp # Detachable IRC Proxy
+tfido 60177/tcp # fidonet EMSI over telnet
+fido 60179/tcp # fidonet EMSI over TCP
+
+# Local services
diff --git a/abs/core-testing/filesystem/shadow b/abs/core-testing/filesystem/shadow
new file mode 100644
index 0000000..6d4a8be
--- /dev/null
+++ b/abs/core-testing/filesystem/shadow
@@ -0,0 +1,7 @@
+root::99999::::::
+bin:x:0::::::
+daemon:x:0::::::
+mail:x:0::::::
+ftp:x:0::::::
+http:x:0::::::
+nobody:x:0::::::
diff --git a/abs/core-testing/filesystem/shells b/abs/core-testing/filesystem/shells
new file mode 100644
index 0000000..ff9e383
--- /dev/null
+++ b/abs/core-testing/filesystem/shells
@@ -0,0 +1,9 @@
+#
+# /etc/shells
+#
+
+/bin/sh
+/bin/bash
+/bin/dash
+
+# End of file
diff --git a/abs/core-testing/findutils/PKGBUILD b/abs/core-testing/findutils/PKGBUILD
new file mode 100644
index 0000000..0027aca
--- /dev/null
+++ b/abs/core-testing/findutils/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 2673 2008-06-11 02:45:30Z eric $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=findutils
+pkgver=4.4.0
+pkgrel=10
+pkgdesc="GNU utilities to locate files"
+arch=(i686 x86_64)
+license=('GPL3')
+groups=('base')
+depends=('glibc>=2.8')
+url="http://www.gnu.org/software/findutils"
+source=(ftp://ftp.gnu.org/pub/gnu/findutils/findutils-$pkgver.tar.gz)
+md5sums=('49e769ac4382fae6f104f99d54d0a112')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ # believe it or not, the Makefile really wants to remove /usr/var, so
+ # we let it...
+ mkdir -p $startdir/pkg/usr/var
+ make DESTDIR=$startdir/pkg install
+ rm -rf $startdir/pkg/usr/libexec
+
+ # remove locate utils (we use slocate instead)
+ rm -f $startdir/pkg/usr/bin/{locate,updatedb}
+ rm -f $startdir/pkg/usr/share/man/man1/{updatedb.1,locate.1}
+ rm -f $startdir/pkg/usr/share/man/man5/locatedb.5
+ rmdir $startdir/pkg/usr/var
+}
diff --git a/abs/core-testing/fixesproto/PKGBUILD b/abs/core-testing/fixesproto/PKGBUILD
new file mode 100644
index 0000000..2f77d60
--- /dev/null
+++ b/abs/core-testing/fixesproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fixesproto
+pkgver=4.0
+pkgrel=2
+pkgdesc="X11 Fixes extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xproto xextproto)
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(8b298cc3424597f8138c7faf7763dce9)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/flac/PKGBUILD b/abs/core-testing/flac/PKGBUILD
new file mode 100644
index 0000000..ce31e8b
--- /dev/null
+++ b/abs/core-testing/flac/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=flac
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="Free Lossless Audio Codec"
+license=('custom:Xiph' 'LGPL' 'GPL' 'FDL')
+url="http://flac.sourceforge.net/"
+arch=(i686 x86_64)
+options=('!libtool')
+depends=('glibc' 'libogg')
+makedepends=('nasm' 'xmms')
+source=(http://downloads.sf.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz \
+ flac-1.2.1-gcc43.patch)
+md5sums=('153c8b15a54da428d1f0fadc756c22c7' '4922379f33c86792630b624ddc83b236')
+
+build() {
+ # -j1 to get the xmms plugin working (from gentoo)
+ export MAKEFLAGS="-j1"
+ cd $startdir/src/$pkgname-$pkgver || return 1
+ patch -Np1 -i $startdir/src/flac-1.2.1-gcc43.patch
+ ./configure --prefix=/usr --enable-shared --disable-sse \
+ --disable-rpath --with-pic || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # install license
+ install -Dm0644 $startdir/src/$pkgname-$pkgver/COPYING.Xiph \
+ $startdir/pkg/usr/share/licenses/$pkgname/COPYING.Xiph
+}
+
diff --git a/abs/core-testing/flac/flac-1.2.1-gcc43.patch b/abs/core-testing/flac/flac-1.2.1-gcc43.patch
new file mode 100644
index 0000000..d8e8ab9
--- /dev/null
+++ b/abs/core-testing/flac/flac-1.2.1-gcc43.patch
@@ -0,0 +1,10 @@
+--- flac-1.2.1/examples/cpp/encode/file/main.cpp.gcc43 2007-09-13 17:58:03.000000000 +0200
++++ flac-1.2.1/examples/cpp/encode/file/main.cpp 2008-01-08 10:27:39.000000000 +0100
+@@ -29,6 +29,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <string.h>
+ #include <stdlib.h>
+ #include "FLAC++/metadata.h"
+ #include "FLAC++/encoder.h"
diff --git a/abs/core-testing/flac/flac-linking.diff b/abs/core-testing/flac/flac-linking.diff
new file mode 100644
index 0000000..3f9f595
--- /dev/null
+++ b/abs/core-testing/flac/flac-linking.diff
@@ -0,0 +1,12 @@
+diff -ur flac-1.1.2-orig/configure flac-1.1.2/configure
+--- flac-1.1.2-orig/configure 2005-07-24 17:58:19.180907080 +0100
++++ flac-1.1.2/configure 2005-07-24 17:58:59.139832400 +0100
+@@ -3462,7 +3462,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* | x86_64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
diff --git a/abs/core-testing/flac/xmms-plugin.patch b/abs/core-testing/flac/xmms-plugin.patch
new file mode 100644
index 0000000..e5fcf2e
--- /dev/null
+++ b/abs/core-testing/flac/xmms-plugin.patch
@@ -0,0 +1,11 @@
+--- src/plugin_xmms/configure.c.old 2005-04-08 12:16:17.000000000 +0200
++++ src/plugin_xmms/configure.c 2005-04-08 12:16:41.000000000 +0200
+@@ -61,7 +61,7 @@
+ "", /* proxy_user */
+ "", /* proxy_pass */
+ FALSE, /* save_http_stream */
+- "", /* save_http_path */
++ FALSE, /* save_http_path */
+ FALSE, /* cast_title_streaming */
+ FALSE /* use_udp_channel */
+ },
diff --git a/abs/core-testing/fltk/PKGBUILD b/abs/core-testing/fltk/PKGBUILD
new file mode 100644
index 0000000..f1bbbb1
--- /dev/null
+++ b/abs/core-testing/fltk/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 1248 2008-05-02 22:01:06Z tobias $
+# Maintainer: roberto <roberto@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Updated to produce shared libs: Andrew Rose <ody@netrux.com>
+
+pkgname=fltk
+pkgver=1.1.9
+pkgrel=1
+pkgdesc="Graphical user interface toolkit for X"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://www.fltk.org/"
+depends=('libjpeg' 'libpng' 'gcc-libs' 'libxft' 'libxext')
+makedepends=('mesa')
+source=(http://ftp.easysw.com/pub/$pkgname/$pkgver/$pkgname-$pkgver-source.tar.bz2)
+md5sums=('e146fd264e1001b1313acfd41ef75552')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-threads --enable-xft --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/fluxbox/PKGBUILD b/abs/core-testing/fluxbox/PKGBUILD
new file mode 100644
index 0000000..9d09c63
--- /dev/null
+++ b/abs/core-testing/fluxbox/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 1350 2008-05-05 22:19:58Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=fluxbox
+pkgver=1.0.0
+pkgrel=1
+pkgdesc="A lightweight and highly-configurable window manager"
+arch=('i686' 'x86_64')
+url="http://www.fluxbox.org"
+license=('MIT')
+depends=('libxft' 'libxpm' 'libxinerama' 'libxrandr' 'gcc-libs' 'bash' 'imlib2')
+makedepends=('pkgconfig')
+options=('!makeflags')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ $pkgname.desktop fluxbox-1.0.0-gcc43.patch)
+md5sums=('990e276ead0d04421dce4080f485caca' 'eeae9c88a2526ac0bd8afcd9ce97f9ed'\
+ '9ddb3fcd5f080574a44f394282132b3c')
+sha1sums=('7985e35fbb170fda24b9e04610690cd04c7a8748'
+ 'f3f83b8ce84d79c2f8670ef687e0dd89ab0552b8'
+ '51de3957bacfc4848529ba7df80bddca59b1a20b')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}
+ patch -p1 < ../fluxbox-1.0.0-gcc43.patch || return 1
+ ./configure --prefix=/usr \
+ --enable-kde --enable-gnome \
+ --enable-xft --enable-xinerama \
+ --enable-imlib2 --enable-nls
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # this is a fix to allow fluxbox to shutdown, but this can be changed by the user :-(
+ sed -i 's|^.*slit\.autoHide.*$|session.screen0.slit.autoHide: True|' \
+ $startdir/pkg/usr/share/fluxbox/init
+ install -D -m644 ../$pkgname.desktop \
+ $startdir/pkg/etc/X11/sessions/$pkgname.desktop
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core-testing/fluxbox/fluxbox-1.0.0-gcc43.patch b/abs/core-testing/fluxbox/fluxbox-1.0.0-gcc43.patch
new file mode 100644
index 0000000..2e7db28
--- /dev/null
+++ b/abs/core-testing/fluxbox/fluxbox-1.0.0-gcc43.patch
@@ -0,0 +1,10 @@
+--- fluxbox-1.0.0-orig/src/main.cc 2007-08-11 14:22:20.000000000 -0400
++++ fluxbox-1.0.0/src/main.cc 2008-05-05 15:14:59.000000000 -0400
+@@ -49,6 +49,7 @@
+ #include <fstream>
+ #include <stdexcept>
+ #include <typeinfo>
++#include <cstring>
+
+ using std::cout;
+ using std::cerr;
diff --git a/abs/core-testing/fluxbox/fluxbox.desktop b/abs/core-testing/fluxbox/fluxbox.desktop
new file mode 100644
index 0000000..418d29a
--- /dev/null
+++ b/abs/core-testing/fluxbox/fluxbox.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=XSession
+Exec=/usr/bin/startfluxbox
+TryExec=/usr/bin/startfluxbox
+Name=fluxbox
diff --git a/abs/core-testing/fontcacheproto/PKGBUILD b/abs/core-testing/fontcacheproto/PKGBUILD
new file mode 100644
index 0000000..5bc123b
--- /dev/null
+++ b/abs/core-testing/fontcacheproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fontcacheproto
+pkgver=0.1.2
+pkgrel=1
+pkgdesc="X11 font cache extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('60df6b625074a9790e28543dcea71651')
+sha1sums=('6a531ef505ba2f7c1aa884bb4efdac3e32dfd99b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/fontconfig/29-replace-bitmap-fonts.conf b/abs/core-testing/fontconfig/29-replace-bitmap-fonts.conf
new file mode 100644
index 0000000..7ac4483
--- /dev/null
+++ b/abs/core-testing/fontconfig/29-replace-bitmap-fonts.conf
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <!-- Replace generic bitmap font names by generic font families.
+ These font-families will get replaced by other rules and
+ default to scaled ones. -->
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Helvetica</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Arial</string>
+ <string>Liberation Sans</string>
+ <string>sans-serif</string>
+ </edit>
+ </match>
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Courier</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Courier New</string>
+ <string>Liberation Mono</string>
+ <string>monospace</string>
+ </edit>
+ </match>
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Times</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Times New Roman</string>
+ <string>Liberation Serif</string>
+ <string>serif</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/abs/core-testing/fontconfig/PKGBUILD b/abs/core-testing/fontconfig/PKGBUILD
new file mode 100644
index 0000000..7abdf6d
--- /dev/null
+++ b/abs/core-testing/fontconfig/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 4424 2008-07-06 22:09:03Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=fontconfig
+pkgver=2.6.0
+pkgrel=2
+pkgdesc="A library for configuring and customizing font access"
+arch=(i686 x86_64)
+url="http://www.fontconfig.org/release/"
+license=('custom')
+depends=('expat>=2.0' 'freetype2>=2.3.7')
+options=('!libtool')
+install=fontconfig.install
+source=(http://www.fontconfig.org/release/${pkgname}-${pkgver}.tar.gz
+ 29-replace-bitmap-fonts.conf)
+md5sums=('ab54ec1d4ddd836313fdbc0cd5299d6d'
+ 'f6b67e8cc79197ed6abd4701911e83da')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ # enable Position Independent Code for prelinking
+ export CFLAGS="${CFLAGS} -fPIC"
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 ${startdir}/src/29-replace-bitmap-fonts.conf \
+ ${startdir}/pkg/etc/fonts/conf.avail || return 1
+ rm -f ${startdir}/pkg/etc/fonts/conf.d/*.conf
+
+ #Install license
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/fontconfig/fontconfig.install b/abs/core-testing/fontconfig/fontconfig.install
new file mode 100644
index 0000000..6608834
--- /dev/null
+++ b/abs/core-testing/fontconfig/fontconfig.install
@@ -0,0 +1,100 @@
+configs=('20-fix-globaladvance.conf'
+ '20-unhint-small-vera.conf'
+ '29-replace-bitmap-fonts.conf'
+ '30-metric-aliases.conf'
+ '30-urw-aliases.conf'
+ '40-nonlatin.conf'
+ '45-latin.conf'
+ '49-sansserif.conf'
+ '50-user.conf'
+ '51-local.conf'
+ '60-latin.conf'
+ '65-fonts-persian.conf'
+ '65-nonlatin.conf'
+ '69-unifont.conf'
+ '80-delicious.conf'
+ '90-synthetic.conf')
+
+post_install() {
+ echo -n "updating font cache... "
+ /sbin/ldconfig -r .
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ ln -sf ../conf.avail/${config} .
+ done
+ popd > /dev/null
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+post_upgrade() {
+ rm -f /etc/fonts/conf.d/10-bitmaps.conf
+ cat << _EOF
+
+===> Important Fontconfig configuration change <===
+
+ The way fontconfig is configured has been changed.
+ Configuration is done via /etc/fonts/conf.avail and conf.d.
+ Read /etc/fonts/conf.avail/README for more information.
+
+ Configuration via /etc/fonts/local.conf is still possible,
+ but is no longer recommended for options available in conf.avail.
+
+_EOF
+
+ if [ `vercmp 2.4.1-1 $2` -gt 0 ]; then
+ # Upgrade from old version, place all symlinks. pre-symlink package version
+ echo -n "Linking configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ ln -sf ../conf.avail/${config} .
+ done
+ popd > /dev/null
+ echo "done."
+ fi
+
+ if [ `vercmp 2.6.0-1 $2` -gt 0 ]; then
+ # pre-2.6.0 versions have missing config
+ echo -n "Adding missing configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ ln -sf ../conf.avail/30-metric-aliases.conf .
+ ln -sf ../conf.avail/40-nonlatin.conf .
+ ln -sf ../conf.avail/45-latin.conf .
+ popd > /dev/null
+ echo "done."
+ fi
+
+ # Remove dead links
+ echo -n "Removing outdated configuration files... "
+ for config in /etc/fonts/conf.d/*; do
+ if [ ! -f ${config} ]; then
+ rm -f ${config}
+ fi
+ done
+ echo "done."
+
+ echo -n "updating font cache... "
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+pre_upgrade() {
+ # Link new config files not present on system yet
+ echo -n "Symlinking new configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ if [ ! -f ../conf.avail/${config} ]; then
+ ln -sf ../conf.avail/${config} .
+ fi
+ done
+ popd > /dev/null
+ echo "done."
+}
+
+post_remove() {
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ rm -f ${config}
+ done
+ popd > /dev/null
+}
diff --git a/abs/core-testing/fontsproto/PKGBUILD b/abs/core-testing/fontsproto/PKGBUILD
new file mode 100644
index 0000000..7847a5c
--- /dev/null
+++ b/abs/core-testing/fontsproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fontsproto
+pkgver=2.0.2
+pkgrel=1
+pkgdesc="X11 font extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('c946f166107b016a21cc7a02e1132724')
+sha1sums=('1244f63bd90668c7ddc88febbf4a220fd83ea492')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/freeglut/PKGBUILD b/abs/core-testing/freeglut/PKGBUILD
new file mode 100644
index 0000000..402ef70
--- /dev/null
+++ b/abs/core-testing/freeglut/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=freeglut
+pkgver=2.4.0
+pkgrel=3
+pkgdesc="Provides functionality for small OpenGL programs"
+arch=('i686' 'x86_64')
+url="http://freeglut.sourceforge.net/"
+license=('custom')
+depends=('libxxf86vm' 'mesa')
+replaces=('glut')
+provides=('glut')
+conflicts=('glut')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/freeglut/${pkgname}-${pkgver}.tar.gz \
+ glut-cursor-inherit.patch)
+md5sums=('6d16873bd876fbf4980a927cfbc496a1' 'd6ba7e22ebb0fd7904b8e18c97475ba6')
+sha1sums=('91a528aa72758b7288a0d69a964b1b7e3f322a12' '9353d7b811fdfd6f0c5766f0e93924ca63e9d6a9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/glut-cursor-inherit.patch || return 1
+ sed -i 's/-Werror//' configure
+ ./configure --prefix=/usr
+ make all || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core-testing/freeglut/glut-cursor-inherit.patch b/abs/core-testing/freeglut/glut-cursor-inherit.patch
new file mode 100644
index 0000000..b56a37c
--- /dev/null
+++ b/abs/core-testing/freeglut/glut-cursor-inherit.patch
@@ -0,0 +1,23 @@
+--- freeglut-2.4.0.orig/src/freeglut_cursor.c
++++ freeglut-2.4.0/src/freeglut_cursor.c
+@@ -130,7 +130,9 @@
+ XCreateFontCursor( fgDisplay.Display, entry->cursorShape );
+ }
+ cursor = entry->cachedCursor;
+- } else {
++ if (cursor == None)
++ fgError( "Failed to create cursor" );
++ } else {
+ switch( cursorIDToUse )
+ {
+ case GLUT_CURSOR_NONE:
+@@ -147,9 +149,6 @@
+ }
+ }
+
+- if ( ( cursorIDToUse != GLUT_CURSOR_NONE ) && ( cursor == None ) ) {
+- fgError( "Failed to create cursor" );
+- }
+ XDefineCursor( fgDisplay.Display,
+ window->Window.Handle, cursor );
+ }
diff --git a/abs/core-testing/freetype2/PKGBUILD b/abs/core-testing/freetype2/PKGBUILD
new file mode 100644
index 0000000..177f421
--- /dev/null
+++ b/abs/core-testing/freetype2/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 4337 2008-07-06 17:43:50Z jgc $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=freetype2
+pkgver=2.3.7
+pkgrel=1
+pkgdesc="TrueType font rendering library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://freetype.sourceforge.net"
+depends=('zlib')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/freetype/freetype-${pkgver}.tar.bz2
+ bytecode.patch
+ freetype-2.3.0-enable-spr.patch
+ freetype-2.2.1-enable-valid.patch
+ freetype-2.2.1-memcpy-fix.patch)
+md5sums=('83306194817ebdea554133b4232a34aa'
+ '9ff19e742968c29e3ba52b08d6bf0a50'
+ '816dc8619a6904a7385769433c0a8653'
+ '214119610444c9b02766ccee5e220680'
+ '6fb6606d28082ecb8e0c6d986b0b26aa')
+
+build() {
+ cd ${startdir}/src/freetype-${pkgver}
+ patch -Np0 -i ${startdir}/src/bytecode.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.3.0-enable-spr.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.2.1-enable-valid.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.2.1-memcpy-fix.patch || return 1
+
+ ./configure --prefix=/usr --disable-static || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/freetype2/bytecode.patch b/abs/core-testing/freetype2/bytecode.patch
new file mode 100644
index 0000000..dd901ad
--- /dev/null
+++ b/abs/core-testing/freetype2/bytecode.patch
@@ -0,0 +1,29 @@
+--- include/freetype/config/ftoption.h.old 2006-05-12 02:05:49.000000000 +0800
++++ include/freetype/config/ftoption.h 2006-10-02 01:22:50.000000000 +0800
+@@ -436,7 +436,7 @@
+ /* Do not #undef this macro here, since the build system might */
+ /* define it for certain configurations only. */
+ /* */
+-/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
++#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+
+ /*************************************************************************/
+@@ -448,7 +448,7 @@
+ /* FT_PARAM_TAG_UNPATENTED_HINTING; or when the debug hook */
+ /* FT_DEBUG_HOOK_UNPATENTED_HINTING is globally activated. */
+ /* */
+-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
++#undef TT_CONFIG_OPTION_UNPATENTED_HINTING
+
+
+ /*************************************************************************/
+@@ -480,7 +480,7 @@
+ /* http://partners.adobe.com/asn/developer/opentype/glyf.html */
+ /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* */
+-#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
++#define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+ /*************************************************************************/
diff --git a/abs/core-testing/freetype2/freetype-2.2.1-enable-valid.patch b/abs/core-testing/freetype2/freetype-2.2.1-enable-valid.patch
new file mode 100644
index 0000000..c78b6b7
--- /dev/null
+++ b/abs/core-testing/freetype2/freetype-2.2.1-enable-valid.patch
@@ -0,0 +1,20 @@
+--- freetype-2.2.1/modules.cfg.orig 2006-07-07 21:01:09.000000000 -0400
++++ freetype-2.2.1/modules.cfg 2006-07-07 21:01:54.000000000 -0400
+@@ -110,7 +110,7 @@
+ AUX_MODULES += cache
+
+ # TrueType GX/AAT table validation. Needs ftgxval.c below.
+-# AUX_MODULES += gxvalid
++AUX_MODULES += gxvalid
+
+ # Support for streams compressed with gzip (files with suffix .gz).
+ #
+@@ -124,7 +124,7 @@
+
+ # OpenType table validation. Needs ftotval.c below.
+ #
+-# AUX_MODULES += otvalid
++AUX_MODULES += otvalid
+
+ # Auxiliary PostScript driver component to share common code.
+ #
diff --git a/abs/core-testing/freetype2/freetype-2.2.1-memcpy-fix.patch b/abs/core-testing/freetype2/freetype-2.2.1-memcpy-fix.patch
new file mode 100644
index 0000000..67a1c07
--- /dev/null
+++ b/abs/core-testing/freetype2/freetype-2.2.1-memcpy-fix.patch
@@ -0,0 +1,14 @@
+--- freetype-2.2.1/src/psaux/psobjs.c~ 2006-04-26 16:38:17.000000000 +0200
++++ freetype-2.2.1/src/psaux/psobjs.c 2006-09-10 15:01:13.000000000 +0200
+@@ -165,6 +165,11 @@
+ return PSaux_Err_Invalid_Argument;
+ }
+
++ if ( length < 0 ) {
++ FT_ERROR(( "ps_table_add: invalid length\n" ));
++ return PSaux_Err_Invalid_Argument;
++ }
++
+ /* grow the base block if needed */
+ if ( table->cursor + length > table->capacity )
+ {
diff --git a/abs/core-testing/freetype2/freetype-2.3.0-enable-spr.patch b/abs/core-testing/freetype2/freetype-2.3.0-enable-spr.patch
new file mode 100644
index 0000000..8432e28
--- /dev/null
+++ b/abs/core-testing/freetype2/freetype-2.3.0-enable-spr.patch
@@ -0,0 +1,11 @@
+--- freetype-2.3.0/include/freetype/config/ftoption.h.spf 2007-01-18 14:27:34.000000000 -0500
++++ freetype-2.3.0/include/freetype/config/ftoption.h 2007-01-18 14:27:48.000000000 -0500
+@@ -92,7 +92,7 @@
+ /* This is done to allow FreeType clients to run unmodified, forcing */
+ /* them to display normal gray-level anti-aliased glyphs. */
+ /* */
+-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
++#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+
+ /*************************************************************************/
diff --git a/abs/core-testing/freetype2/freetype-2.3.3-ftbitmap.patch b/abs/core-testing/freetype2/freetype-2.3.3-ftbitmap.patch
new file mode 100644
index 0000000..bbb8b2b
--- /dev/null
+++ b/abs/core-testing/freetype2/freetype-2.3.3-ftbitmap.patch
@@ -0,0 +1,25 @@
+===================================================================
+RCS file: /var/lib/cvs/sources/freetype/freetype2/src/base/ftbitmap.c,v
+retrieving revision 1.17
+retrieving revision 1.18
+diff -u -r1.17 -r1.18
+--- freetype/freetype2/src/base/ftbitmap.c 2007/03/29 11:56:21 1.17
++++ freetype/freetype2/src/base/ftbitmap.c 2007/04/06 08:19:04 1.18
+@@ -149,15 +149,15 @@
+ if ( bit_last < bit_width )
+ {
+ FT_Byte* line = bitmap->buffer + ( bit_last >> 3 );
++ FT_Byte* end = bitmap->buffer + pitch;
+ FT_Int shift = bit_last & 7;
+ FT_UInt mask = 0xFF00U >> shift;
+ FT_Int count = height;
+
+
+- for ( ; count > 0; count--, line += pitch )
++ for ( ; count > 0; count--, line += pitch, end += pitch )
+ {
+ FT_Byte* write = line;
+- FT_Byte* end = line + pitch;
+
+
+ if ( shift > 0 )
diff --git a/abs/core-testing/freetype2/freetype2.install b/abs/core-testing/freetype2/freetype2.install
new file mode 100644
index 0000000..704adac
--- /dev/null
+++ b/abs/core-testing/freetype2/freetype2.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ echo -n "updating font cache... "
+ /sbin/ldconfig -r .
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/fribidi/ChangeLog b/abs/core-testing/fribidi/ChangeLog
new file mode 100644
index 0000000..43b17a5
--- /dev/null
+++ b/abs/core-testing/fribidi/ChangeLog
@@ -0,0 +1,5 @@
+2008-02-16 Travis Willard <travis@archlinux.org>
+
+ * 0.10.9
+ Added ChangeLog
+ New upstream release.
diff --git a/abs/core-testing/fribidi/PKGBUILD b/abs/core-testing/fribidi/PKGBUILD
new file mode 100644
index 0000000..f8ecb19
--- /dev/null
+++ b/abs/core-testing/fribidi/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Travis Willard <travis@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=fribidi
+pkgver=0.10.9
+pkgrel=1
+pkgdesc="A Free Implementation of the Unicode Bidirectional Algorithm"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://fribidi.org"
+depends=('glibc')
+options=('!libtool')
+source=(http://fribidi.org/download/fribidi-${pkgver}.tar.gz)
+md5sums=('647aee89079b056269ff0918dc1c6d28')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
+
diff --git a/abs/core-testing/fuse/PKGBUILD b/abs/core-testing/fuse/PKGBUILD
new file mode 100644
index 0000000..62d8f81
--- /dev/null
+++ b/abs/core-testing/fuse/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Mark Rosenstand <mark@archlinux.org>
+pkgname=fuse
+pkgver=2.7.3
+pkgrel=1
+pkgdesc="A library that makes it possible to implement a filesystem in a userspace program."
+arch=(i686 x86_64)
+url="http://fuse.sourceforge.net/"
+license="GPL2"
+depends=('glibc')
+makedepends=('pkgconfig')
+install=fuse.install
+source=(http://mesh.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz)
+options=(!libtool)
+md5sums=('98563fc7b265b7479a3178181cbcf59a')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-kernel-module --enable-lib \
+ --enable-util --bindir=/bin
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # static device nodes will cause collision.
+ rm -rf $startdir/pkg/dev
+ # Remove init script in wrong path
+ # Don't add our own for now, as fusectl fs oopses on 2.6.18
+ rm -rf $startdir/pkg/etc/init.d
+ #install -D -m755 $startdir/src/fuse.rc.d $startdir/pkg/etc/rc.d/fuse
+
+ mkdir -p $startdir/pkg/lib
+ mv $startdir/pkg/usr/lib/libfuse.so.${pkgver} $startdir/pkg/lib/ || return 1
+ ln -s ../../lib/libfuse.so.${pkgver} $startdir/pkg/usr/lib/libfuse.so.${pkgver} || return 1
+ ln -s libfuse.so.${pkgver} $startdir/pkg/lib/libfuse.so.2 || return 1
+ mv $startdir/pkg/usr/lib/libulockmgr.so.1.0.1 $startdir/pkg/lib/ || return 1
+ ln -s ../../lib/libulockmgr.so.1.0.1 $startdir/pkg/usr/lib/libulockmgr.so.1.0.1 || return 1
+ ln -s libulockmgr.so.1.0.1 $startdir/pkg/lib/libulockmgr.so.1 || return 1
+}
diff --git a/abs/core-testing/fuse/fuse.install b/abs/core-testing/fuse/fuse.install
new file mode 100644
index 0000000..595ac7c
--- /dev/null
+++ b/abs/core-testing/fuse/fuse.install
@@ -0,0 +1,14 @@
+post_install() {
+ cat << 'EOM'
+==> You must load the fuse kernel module to use FUSE.
+ -> Run 'modprobe fuse' to load the module now.
+ -> Add fuse to $MODULES in /etc/rc.conf to load on every boot.
+==> You will need a /dev/fuse device node to use FUSE.
+ -> If you use udev, nothing needs to be done
+ -> For a static /dev, run: mknod /dev/fuse -m 0666 c 10 229
+EOM
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/fuse/fuse.rc.d b/abs/core-testing/fuse/fuse.rc.d
new file mode 100755
index 0000000..768da5b
--- /dev/null
+++ b/abs/core-testing/fuse/fuse.rc.d
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# fuse Init script for Filesystem in Userspace
+# Based on the script by Miklos Szeredi <miklos@szeredi.hu>
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+FUSECTL=/sys/fs/fuse/connections
+
+case "$1" in
+ start)
+ stat_busy "Starting fuse"
+ if ! grep -qw fuse /proc/filesystems; then
+ modprobe fuse >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ fi
+ fi
+ if grep -qw fusectl /proc/filesystems && ! grep -qw $FUSECTL /proc/mounts; then
+ mount -t fusectl none $FUSECTL >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ fi
+ fi
+ add_daemon fuse
+ stat_done
+ ;;
+ stop)
+ stat_busy "Stopping fuse"
+ umount $FUSECTL >/dev/null 2>&1
+ rmmod fuse >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon fuse
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/fxload/PKGBUILD b/abs/core-testing/fxload/PKGBUILD
new file mode 100644
index 0000000..d27f525
--- /dev/null
+++ b/abs/core-testing/fxload/PKGBUILD
@@ -0,0 +1,20 @@
+# Contributor: Jochen Immend�fer <jochen dot immendoerfer at gmail dot com>
+pkgname=fxload
+pkgver=2002_04_11
+pkgrel=4
+pkgdesc="fxload firmware loader. Used with udev or devfs/hotplug."
+url="http://linux-hotplug.sourceforge.net/"
+depends=('glibc')
+makedepends=('sed')
+source=(http://easynews.dl.sourceforge.net/sourceforge/linux-hotplug/$pkgname-$pkgver.tar.gz)
+ arch=('i686')
+build() {
+C_INCLUDE_PATH=/usr/src/linux-2.6.24-STB
+
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i 's|CFLAGS =.*-O -Wall $(RPM_OPT_FLAGS)||' Makefile
+ sed -i 's/\linux\/usb.h/linux\/usb\/ch9.h/' ezusb.c ||return 1
+ make || return 1
+ sed -i 's|/usr/bin/install|/bin/install|' Makefile
+ make exec_prefix=$startdir/pkg/ prefix=$startdir/pkg/ install
+}
diff --git a/abs/core-testing/gawk/PKGBUILD b/abs/core-testing/gawk/PKGBUILD
new file mode 100644
index 0000000..976a574
--- /dev/null
+++ b/abs/core-testing/gawk/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=gawk
+pkgver=3.1.6
+pkgrel=11
+pkgdesc="Gnu version of awk"
+arch=(i686 x86_64)
+url="http://www.gnu.org/directory/GNU/gawk.html"
+license=('GPL')
+groups=('base')
+provides=('awk')
+replaces=('mawk')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+depends=('bash' 'glibc')
+md5sums=('b237751aef53c9ead9644e376bc53386')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/libexec $startdir/pkg/usr/lib
+ mkdir $startdir/pkg/bin
+ mv $startdir/pkg/usr/bin/gawk* $startdir/pkg/bin/
+ mv $startdir/pkg/usr/bin/awk $startdir/pkg/bin/
+ # don't use hardlinks to manpages, it messes up our compression stuff
+ rm $startdir/pkg/usr/share/man/man1/pgawk.1
+ ln -s gawk.1 $startdir/pkg/usr/share/man/man1/pgawk.1
+ ln -s gawk.1 $startdir/pkg/usr/share/man/man1/awk.1
+}
diff --git a/abs/core-testing/gawk/gawk-3.1.5-segfault_fix-1.patch b/abs/core-testing/gawk/gawk-3.1.5-segfault_fix-1.patch
new file mode 100644
index 0000000..aa2f17b
--- /dev/null
+++ b/abs/core-testing/gawk/gawk-3.1.5-segfault_fix-1.patch
@@ -0,0 +1,43 @@
+Submitted By: Matthew Burgess <matthew@linuxfromscratch.org>
+Date: 2005-09-24
+Initial Package Version: 3.1.5
+Upstream Status: From Upstream
+Origin: http://lists.gnu.org/archive/html/bug-gnu-utils/2005-08/msg00047.html
+Description: Fixes a bug which causes gawk to segfault when operating on a non-existent file.
+
+diff -Naur gawk-3.1.5.orig/io.c gawk-3.1.5/io.c
+--- gawk-3.1.5.orig/io.c 2005-07-26 18:07:43.000000000 +0000
++++ gawk-3.1.5/io.c 2005-09-24 14:43:13.771380264 +0000
+@@ -2480,9 +2480,12 @@
+ {
+ struct stat sbuf;
+ struct open_hook *oh;
++ int iop_malloced = FALSE;
+
+- if (iop == NULL)
++ if (iop == NULL) {
+ emalloc(iop, IOBUF *, sizeof(IOBUF), "iop_alloc");
++ iop_malloced = TRUE;
++ }
+ memset(iop, '\0', sizeof(IOBUF));
+ iop->flag = 0;
+ iop->fd = fd;
+@@ -2495,7 +2498,8 @@
+ }
+
+ if (iop->fd == INVALID_HANDLE) {
+- free(iop);
++ if (iop_malloced)
++ free(iop);
+ return NULL;
+ }
+ if (isatty(iop->fd))
+@@ -2503,7 +2507,7 @@
+ iop->readsize = iop->size = optimal_bufsize(iop->fd, & sbuf);
+ iop->sbuf = sbuf;
+ if (do_lint && S_ISREG(sbuf.st_mode) && sbuf.st_size == 0)
+- lintwarn(_("data file `%s' is empty"), name);
++ lintwarn(_("data file `%s' is empty"), name);
+ errno = 0;
+ iop->count = iop->scanoff = 0;
+ emalloc(iop->buf, char *, iop->size += 2, "iop_alloc");
diff --git a/abs/core-testing/gcc-libs/PKGBUILD b/abs/core-testing/gcc-libs/PKGBUILD
new file mode 100644
index 0000000..7bca5de
--- /dev/null
+++ b/abs/core-testing/gcc-libs/PKGBUILD
@@ -0,0 +1,65 @@
+# $Id: PKGBUILD 6599 2008-07-25 17:11:14Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=gcc-libs
+pkgver=4.3.1
+pkgrel=12
+_snapshot=4.3-20080724
+pkgdesc="Runtime libraries shipped by GCC for C and C++ languages"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+groups=('base')
+url="http://gcc.gnu.org"
+depends=('glibc>=2.8-2')
+makedepends=('binutils>=2.18-8' 'gcc>=4.3.1' 'mpfr>=2.3.1' 'texinfo')
+conflicts=('gcc-fortran' 'gcc-objc')
+provides=("gcc-objc=${pkgver}")
+options=('!libtool' '!emptydirs')
+source=(#ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-{core,g++,fortran,objc}-${pkgver}.tar.bz2
+ ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-{core,g++,fortran,objc}-${_snapshot}.tar.bz2
+ gcc_pure64.patch
+ gcc-hash-style-both.patch)
+md5sums=('99ce6170e379779fe9c0971f9e27c704'
+ 'e39db43584ec603b314348405c753bd5'
+ '76b9d6a71eb2cd778cd6ad3e9d576c64'
+ '2b2456702ca6362b01583160e888be14'
+ '4030ee1c08dd1e843c0225b772360e76'
+ 'bb420bc84b1104455b7230b1cd4b96c2')
+
+build() {
+ if ! locale -a | grep ^de_DE; then
+ echo "You need the de_DE locale to build gcc."
+ return 1
+ fi
+
+ #cd ${srcdir}/gcc-${pkgver}
+ cd ${srcdir}/gcc-${_snapshot}
+ # Don't install libiberty
+ sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ patch -Np1 -i ../gcc_pure64.patch || return 1
+ fi
+ patch -Np0 -i ${srcdir}/gcc-hash-style-both.patch || return 1
+
+ # Don't run fixincludes
+ sed -i -e 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
+
+ echo ${pkgver} > gcc/BASE-VER
+
+ mkdir build
+ cd build
+ ../configure --prefix=/usr --enable-shared \
+ --enable-languages=c,c++,fortran,objc,obj-c++,treelang --enable-threads=posix \
+ --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib \
+ --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch \
+ --with-tune=generic
+ make || return 1
+ make -j1 DESTDIR=${pkgdir} install-target-libstdc++-v3 install-target-libmudflap install-target-libgomp install-target-libssp install-target-libgfortran install-target-libobjc install-target-libgcc || return 1
+
+ # Cleanup, libgomp installs the whole compiler it seems...
+ rm -rf ${pkgdir}/usr/include
+ rm -rf ${pkgdir}/usr/lib/gcc
+ rm -rf ${pkgdir}/usr/bin
+ rm -rf ${pkgdir}/usr{,share}/man
+ find ${pkgdir} -name gcc.mo -delete
+}
diff --git a/abs/core-testing/gcc-libs/gcc-hash-style-both.patch b/abs/core-testing/gcc-libs/gcc-hash-style-both.patch
new file mode 100644
index 0000000..8fea758
--- /dev/null
+++ b/abs/core-testing/gcc-libs/gcc-hash-style-both.patch
@@ -0,0 +1,163 @@
+#! /bin/sh -e
+
+# DP: Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+ pdir="-d $3"
+ dir="$3/"
+elif [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch)
+ patch $pdir -f --no-backup-if-mismatch -p0 < $0
+ #cd ${dir}gcc && autoconf
+ ;;
+ -unpatch)
+ patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+ #rm ${dir}gcc/configure
+ ;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+2006-07-11 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
+ * config/i386/linux64.h (LINK_SPEC): Likewise.
+ * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+ * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+ LINK_OS_LINUX_SPEC64): Likewise.
+ * config/s390/linux.h (LINK_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+ LINK_ARCH64_SPEC): Likewise.
+ * config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+--- gcc/config/alpha/linux-elf.h.orig 2007-08-04 08:55:58.000000000 +0200
++++ gcc/config/alpha/linux-elf.h 2007-09-01 15:47:26.605865578 +0200
+@@ -39,7 +39,7 @@
+
+ #define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
+
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+--- gcc/config/s390/linux.h.orig 2007-08-04 08:55:59.000000000 +0200
++++ gcc/config/s390/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -77,7 +77,7 @@
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{static:-static} \
+--- gcc/config/sparc/linux.h.orig 2007-08-04 08:56:01.000000000 +0200
++++ gcc/config/sparc/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -132,7 +132,7 @@
+
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!ibcs: \
+--- gcc/config/sparc/linux64.h.orig 2007-08-04 08:56:01.000000000 +0200
++++ gcc/config/sparc/linux64.h 2007-09-01 15:47:26.605865578 +0200
+@@ -166,7 +166,7 @@
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
+-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+@@ -175,7 +175,7 @@
+ %{static:-static}}} \
+ "
+
+-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+@@ -256,7 +256,7 @@
+ #else /* !SPARC_BI_ARCH */
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+--- gcc/config/i386/linux.h.orig 2007-08-04 08:56:07.000000000 +0200
++++ gcc/config/i386/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -108,7 +108,7 @@
+ { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+--- gcc/config/i386/linux64.h.orig 2007-08-04 08:56:07.000000000 +0200
++++ gcc/config/i386/linux64.h 2007-09-01 15:48:27.336781690 +0200
+@@ -65,7 +65,7 @@
+ #endif
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- gcc/config/ia64/linux.h.orig 2006-12-12 18:59:53.000000000 +0100
++++ gcc/config/ia64/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -40,7 +40,7 @@
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- gcc/config/rs6000/sysv4.h.orig 2007-08-08 23:37:49.000000000 +0200
++++ gcc/config/rs6000/sysv4.h 2007-09-01 15:47:26.615865729 +0200
+@@ -901,7 +901,7 @@
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+
+--- gcc/config/rs6000/linux64.h.orig 2007-08-04 08:56:12.000000000 +0200
++++ gcc/config/rs6000/linux64.h 2007-09-01 15:47:26.615865729 +0200
+@@ -354,11 +354,11 @@
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
+
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
+
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
+
diff --git a/abs/core-testing/gcc-libs/gcc_pure64.patch b/abs/core-testing/gcc-libs/gcc_pure64.patch
new file mode 100644
index 0000000..8c0baf8
--- /dev/null
+++ b/abs/core-testing/gcc-libs/gcc_pure64.patch
@@ -0,0 +1,26 @@
+diff -Naur gcc-4.2.0.orig/gcc/config/i386/linux64.h gcc-4.2.0/gcc/config/i386/linux64.h
+--- gcc-4.2.0.orig/gcc/config/i386/linux64.h 2007-05-16 19:21:19.000000000 -0400
++++ gcc-4.2.0/gcc/config/i386/linux64.h 2007-05-18 17:04:05.000000000 -0400
+@@ -49,8 +49,8 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
+-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
++#define GLIBC_DYNAMIC_LINKER32 "/lib32/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+diff -Naur gcc-4.2.0.orig/gcc/config/i386/t-linux64 gcc-4.2.0/gcc/config/i386/t-linux64
+--- gcc-4.2.0.orig/gcc/config/i386/t-linux64 2007-05-16 19:21:19.000000000 -0400
++++ gcc-4.2.0/gcc/config/i386/t-linux64 2007-05-18 17:04:36.000000000 -0400
+@@ -6,7 +6,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib ../lib32
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
diff --git a/abs/core-testing/gdbm/PKGBUILD b/abs/core-testing/gdbm/PKGBUILD
new file mode 100644
index 0000000..1154818
--- /dev/null
+++ b/abs/core-testing/gdbm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gdbm
+pkgver=1.8.3
+pkgrel=14
+pkgdesc="GNU database library"
+url="http://www.gnu.org/software/gdbm/gdbm.html"
+license=('GPL')
+arch=(i686 x86_64)
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/gdbm/$pkgname-$pkgver.tar.gz)
+md5sums=('1d1b1d5c0245b1c00aff92da751e9aa1')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make prefix=/usr || return 1
+ make prefix=$startdir/pkg/usr install
+ make prefix=$startdir/pkg/usr install-compat
+ chown root.root $startdir/pkg/usr/include/{dbm.h,gdbm.h,ndbm.h}
+ chown root.root $startdir/pkg/usr/man/man3/gdbm.3
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/gen-init-cpio/Makefile b/abs/core-testing/gen-init-cpio/Makefile
new file mode 100644
index 0000000..1ebe763
--- /dev/null
+++ b/abs/core-testing/gen-init-cpio/Makefile
@@ -0,0 +1,42 @@
+
+DESTDIR =
+PREFIX = /
+
+MKDIR = /bin/mkdir
+INSTALL = /bin/install -c -m 755
+
+CC = /usr/bin/gcc
+LD = /usr/bin/gcc
+
+CFLAGS += -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+ -Wpointer-arith -Wcast-align -Wsign-compare
+
+#pretty print!
+E = @echo
+Q = @
+
+all: gen_init_cpio
+.PHONY: all
+.DEFAULT: all
+
+%.o: %.c
+ $(E) " compile " $@
+ $(Q) $(CC) -c $(CFLAGS) $< -o $@
+
+gen_init_cpio: gen_init_cpio.o
+ $(E) ">>build " $@
+ $(Q) $(LD) $(LDFLAGS) $@.o -o $@ $(LIB_OBJS)
+
+clean:
+ $(E) " clean "
+ $(Q) rm -f gen_init_cpio *.o
+.PHONY: clean
+
+install: all
+ $(MKDIR) -p $(DESTDIR)$(PREFIX)sbin/
+ $(INSTALL) gen_init_cpio $(DESTDIR)$(PREFIX)sbin/
+.PHONY: install
+
+uninstall:
+ rm $(DESTDIR)$(PREFIX)sbin/gen_init_cpio
+.PHONY: uninstall
diff --git a/abs/core-testing/gen-init-cpio/PKGBUILD b/abs/core-testing/gen-init-cpio/PKGBUILD
new file mode 100644
index 0000000..ca1fa2e
--- /dev/null
+++ b/abs/core-testing/gen-init-cpio/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=gen-init-cpio
+pkgver=2.6.17
+pkgrel=12
+pkgdesc="Program to compress initramfs images"
+arch=(i686 x86_64)
+license=('custom:none')
+groups=('base')
+url="http://www.kernel.org/"
+depends=('glibc')
+source=(Makefile gen_init_cpio.c)
+md5sums=('8e3a142a522d65121c3bead41013be98' 'fe53a05f5fcfca9e4dd8d67d29190f6e')
+
+build()
+{
+ cd $startdir/src/
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/gen-init-cpio/gen_init_cpio.c b/abs/core-testing/gen-init-cpio/gen_init_cpio.c
new file mode 100644
index 0000000..83acd6c
--- /dev/null
+++ b/abs/core-testing/gen-init-cpio/gen_init_cpio.c
@@ -0,0 +1,514 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+#include <limits.h>
+
+/*
+ * Original work by Jeff Garzik
+ *
+ * External file lists, symlink, pipe and fifo support by Thayne Harbaugh
+ */
+
+#define xstr(s) #s
+#define str(s) xstr(s)
+
+static unsigned int offset;
+static unsigned int ino = 721;
+
+struct file_handler {
+ const char *type;
+ int (*handler)(const char *line);
+};
+
+static void push_string(const char *name)
+{
+ unsigned int name_len = strlen(name) + 1;
+
+ fputs(name, stdout);
+ putchar(0);
+ offset += name_len;
+}
+
+static void push_pad (void)
+{
+ while (offset & 3) {
+ putchar(0);
+ offset++;
+ }
+}
+
+static void push_rest(const char *name)
+{
+ unsigned int name_len = strlen(name) + 1;
+ unsigned int tmp_ofs;
+
+ fputs(name, stdout);
+ putchar(0);
+ offset += name_len;
+
+ tmp_ofs = name_len + 110;
+ while (tmp_ofs & 3) {
+ putchar(0);
+ offset++;
+ tmp_ofs++;
+ }
+}
+
+static void push_hdr(const char *s)
+{
+ fputs(s, stdout);
+ offset += 110;
+}
+
+static void cpio_trailer(void)
+{
+ char s[256];
+ const char name[] = "TRAILER!!!";
+
+ sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ 0, /* ino */
+ 0, /* mode */
+ (long) 0, /* uid */
+ (long) 0, /* gid */
+ 1, /* nlink */
+ (long) 0, /* mtime */
+ 0, /* filesize */
+ 0, /* major */
+ 0, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name)+1, /* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+
+ while (offset % 512) {
+ putchar(0);
+ offset++;
+ }
+}
+
+static int cpio_mkslink(const char *name, const char *target,
+ unsigned int mode, uid_t uid, gid_t gid)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ S_IFLNK | mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) mtime, /* mtime */
+ (unsigned)strlen(target)+1, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_string(name);
+ push_pad();
+ push_string(target);
+ push_pad();
+ return 0;
+}
+
+static int cpio_mkslink_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ char target[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d", name, target, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized dir format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mkslink(name, target, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+static int cpio_mkgeneric(const char *name, unsigned int mode,
+ uid_t uid, gid_t gid)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 2, /* nlink */
+ (long) mtime, /* mtime */
+ 0, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+ return 0;
+}
+
+enum generic_types {
+ GT_DIR,
+ GT_PIPE,
+ GT_SOCK
+};
+
+struct generic_type {
+ const char *type;
+ mode_t mode;
+};
+
+static struct generic_type generic_type_table[] = {
+ [GT_DIR] = {
+ .type = "dir",
+ .mode = S_IFDIR
+ },
+ [GT_PIPE] = {
+ .type = "pipe",
+ .mode = S_IFIFO
+ },
+ [GT_SOCK] = {
+ .type = "sock",
+ .mode = S_IFSOCK
+ }
+};
+
+static int cpio_mkgeneric_line(const char *line, enum generic_types gt)
+{
+ char name[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (4 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d", name, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized %s format '%s'",
+ line, generic_type_table[gt].type);
+ goto fail;
+ }
+ mode |= generic_type_table[gt].mode;
+ rc = cpio_mkgeneric(name, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+static int cpio_mkdir_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_DIR);
+}
+
+static int cpio_mkpipe_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_PIPE);
+}
+
+static int cpio_mksock_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_SOCK);
+}
+
+static int cpio_mknod(const char *name, unsigned int mode,
+ uid_t uid, gid_t gid, char dev_type,
+ unsigned int maj, unsigned int min)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ if (dev_type == 'b')
+ mode |= S_IFBLK;
+ else
+ mode |= S_IFCHR;
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) mtime, /* mtime */
+ 0, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ maj, /* rmajor */
+ min, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+ return 0;
+}
+
+static int cpio_mknod_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ char dev_type;
+ unsigned int maj;
+ unsigned int min;
+ int rc = -1;
+
+ if (7 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d %c %u %u",
+ name, &mode, &uid, &gid, &dev_type, &maj, &min)) {
+ fprintf(stderr, "Unrecognized nod format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mknod(name, mode, uid, gid, dev_type, maj, min);
+ fail:
+ return rc;
+}
+
+/* Not marked static to keep the compiler quiet, as no one uses this yet... */
+static int cpio_mkfile(const char *name, const char *location,
+ unsigned int mode, uid_t uid, gid_t gid)
+{
+ char s[256];
+ char *filebuf = NULL;
+ struct stat buf;
+ int file = -1;
+ int retval;
+ int rc = -1;
+
+ mode |= S_IFREG;
+
+ retval = stat (location, &buf);
+ if (retval) {
+ fprintf (stderr, "File %s could not be located\n", location);
+ goto error;
+ }
+
+ file = open (location, O_RDONLY);
+ if (file < 0) {
+ fprintf (stderr, "File %s could not be opened for reading\n", location);
+ goto error;
+ }
+
+ filebuf = malloc(buf.st_size);
+ if (!filebuf) {
+ fprintf (stderr, "out of memory\n");
+ goto error;
+ }
+
+ retval = read (file, filebuf, buf.st_size);
+ if (retval < 0) {
+ fprintf (stderr, "Can not read %s file\n", location);
+ goto error;
+ }
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) buf.st_mtime, /* mtime */
+ (int) buf.st_size, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_string(name);
+ push_pad();
+
+ fwrite(filebuf, buf.st_size, 1, stdout);
+ offset += buf.st_size;
+ push_pad();
+ rc = 0;
+
+error:
+ if (filebuf) free(filebuf);
+ if (file >= 0) close(file);
+ return rc;
+}
+
+static int cpio_mkfile_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ char location[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d", name, location, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized file format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mkfile(name, location, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+void usage(const char *prog)
+{
+ fprintf(stderr, "Usage:\n"
+ "\t%s <cpio_list>\n"
+ "\n"
+ "<cpio_list> is a file containing newline separated entries that\n"
+ "describe the files to be included in the initramfs archive:\n"
+ "\n"
+ "# a comment\n"
+ "file <name> <location> <mode> <uid> <gid>\n"
+ "dir <name> <mode> <uid> <gid>\n"
+ "nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>\n"
+ "slink <name> <target> <mode> <uid> <gid>\n"
+ "pipe <name> <mode> <uid> <gid>\n"
+ "sock <name> <mode> <uid> <gid>\n"
+ "\n"
+ "<name> name of the file/dir/nod/etc in the archive\n"
+ "<location> location of the file in the current filesystem\n"
+ "<target> link target\n"
+ "<mode> mode/permissions of the file\n"
+ "<uid> user id (0=root)\n"
+ "<gid> group id (0=root)\n"
+ "<dev_type> device type (b=block, c=character)\n"
+ "<maj> major number of nod\n"
+ "<min> minor number of nod\n"
+ "\n"
+ "example:\n"
+ "# A simple initramfs\n"
+ "dir /dev 0755 0 0\n"
+ "nod /dev/console 0600 0 0 c 5 1\n"
+ "dir /root 0700 0 0\n"
+ "dir /sbin 0755 0 0\n"
+ "file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n",
+ prog);
+}
+
+struct file_handler file_handler_table[] = {
+ {
+ .type = "file",
+ .handler = cpio_mkfile_line,
+ }, {
+ .type = "nod",
+ .handler = cpio_mknod_line,
+ }, {
+ .type = "dir",
+ .handler = cpio_mkdir_line,
+ }, {
+ .type = "slink",
+ .handler = cpio_mkslink_line,
+ }, {
+ .type = "pipe",
+ .handler = cpio_mkpipe_line,
+ }, {
+ .type = "sock",
+ .handler = cpio_mksock_line,
+ }, {
+ .type = NULL,
+ .handler = NULL,
+ }
+};
+
+#define LINE_SIZE (2 * PATH_MAX + 50)
+
+int main (int argc, char *argv[])
+{
+ FILE *cpio_list;
+ char line[LINE_SIZE];
+ char *args, *type;
+ int ec = 0;
+ int line_nr = 0;
+
+ if (2 != argc) {
+ usage(argv[0]);
+ exit(1);
+ }
+
+ if (! (cpio_list = fopen(argv[1], "r"))) {
+ fprintf(stderr, "ERROR: unable to open '%s': %s\n\n",
+ argv[1], strerror(errno));
+ usage(argv[0]);
+ exit(1);
+ }
+
+ while (fgets(line, LINE_SIZE, cpio_list)) {
+ int type_idx;
+ size_t slen = strlen(line);
+
+ line_nr++;
+
+ if ('#' == *line) {
+ /* comment - skip to next line */
+ continue;
+ }
+
+ if (! (type = strtok(line, " \t"))) {
+ fprintf(stderr,
+ "ERROR: incorrect format, could not locate file type line %d: '%s'\n",
+ line_nr, line);
+ ec = -1;
+ break;
+ }
+
+ if ('\n' == *type) {
+ /* a blank line */
+ continue;
+ }
+
+ if (slen == strlen(type)) {
+ /* must be an empty line */
+ continue;
+ }
+
+ if (! (args = strtok(NULL, "\n"))) {
+ fprintf(stderr,
+ "ERROR: incorrect format, newline required line %d: '%s'\n",
+ line_nr, line);
+ ec = -1;
+ }
+
+ for (type_idx = 0; file_handler_table[type_idx].type; type_idx++) {
+ int rc;
+ if (! strcmp(line, file_handler_table[type_idx].type)) {
+ if ((rc = file_handler_table[type_idx].handler(args))) {
+ ec = rc;
+ fprintf(stderr, " line %d\n", line_nr);
+ }
+ break;
+ }
+ }
+
+ if (NULL == file_handler_table[type_idx].type) {
+ fprintf(stderr, "unknown file type line %d: '%s'\n",
+ line_nr, line);
+ }
+ }
+ if (ec == 0)
+ cpio_trailer();
+
+ exit(ec);
+}
diff --git a/abs/core-testing/gettext/PKGBUILD b/abs/core-testing/gettext/PKGBUILD
new file mode 100644
index 0000000..fab83f2
--- /dev/null
+++ b/abs/core-testing/gettext/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gettext
+pkgver=0.17
+pkgrel=10
+pkgdesc="GNU internationalization library"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/gettext"
+license=('GPL')
+groups=('base')
+depends=('gcc-libs' 'acl')
+options=(!libtool)
+source=(ftp://ftp.gnu.org/pub/gnu/gettext/${pkgname}-${pkgver}.tar.gz)
+md5sums=('58a2bc6d39c0ba57823034d55d65d606')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/libexpat.so.0/libexpat.so.1/' gettext-tools/src/x-glade.c
+ ./configure --prefix=/usr --enable-csharp
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/ghostscript/PKGBUILD b/abs/core-testing/ghostscript/PKGBUILD
new file mode 100644
index 0000000..2cf5416
--- /dev/null
+++ b/abs/core-testing/ghostscript/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 7626 2008-08-03 15:52:01Z jgc $
+# Maintainer: AndyRTR <andyrtr@archlinux.org>
+
+pkgname=ghostscript
+pkgver=8.63
+pkgrel=3
+pkgdesc="An interpreter for the PostScript language"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+depends=('libxext' 'libxt' 'libcups>=1.3.8-2' 'fontconfig>=2.6.0' 'gtk2>=2.12.11' 'gnutls>=2.4.1')
+makedepends=('automake' 'autoconf')
+replaces=('ghostscript-lrpng')
+provides=('ghostscript-lprng')
+url="http://www.cs.wisc.edu/~ghost/"
+#url="http://www.cups.org/espgs/"
+install=ghostscript.install
+source=(ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs863/ghostscript-${pkgver}.tar.bz2
+ ghostscript-fPIC.patch)
+options=('!libtool' '!makeflags')
+md5sums=('c770eedfdd846a53e211e3ba5339de21'
+ '29540cd88aad9a3a788d68193523080d')
+
+build() {
+ cd ${srcdir}/ghostscript-${pkgver}
+ if [ "$CARCH" = "x86_64" ]; then
+ patch -Np1 -i ${srcdir}/ghostscript-fPIC.patch || return 1
+ fi
+
+ # Build IJS
+ cd ${srcdir}/ghostscript-${pkgver}/ijs
+ ./autogen.sh
+ ./configure --prefix=/usr --enable-shared --disable-static
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+
+ cd ..
+ ./configure --prefix=/usr --enable-dynamic --enable-threads --with-ijs \
+ --with-jbig2dec --with-omni --with-x --with-drivers=ALL\
+ --with-fontpath=/usr/share/fonts/Type1:/usr/share/fonts
+ make || return 1
+ make DESTDIR=${pkgdir} \
+ cups_serverroot=${pkgdir}/etc/cups \
+ cups_serverbin=${pkgdir}/usr/lib/cups install soinstall
+
+ mkdir -p ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/
+
+ # remove unwanted localized man-pages
+ rm -rf $pkgdir/usr/share/man/[^man1]*
+}
diff --git a/abs/core-testing/ghostscript/ghostscript-fPIC.patch b/abs/core-testing/ghostscript/ghostscript-fPIC.patch
new file mode 100644
index 0000000..9b4deb2
--- /dev/null
+++ b/abs/core-testing/ghostscript/ghostscript-fPIC.patch
@@ -0,0 +1,31 @@
+--- ghostscript-8.60-r8112/src/lib.mak.fPIC 2007-07-10 17:03:11.000000000 +0100
++++ ghostscript-8.60-r8112/src/lib.mak 2007-07-10 17:05:56.000000000 +0100
+@@ -874,7 +874,7 @@
+ $(GLOBJ)gsparamx.$(OBJ) : $(GLSRC)gsparamx.c $(string__h)\
+ $(gserror_h) $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gsparamx_h)\
+ $(gstypes_h)
+- $(GLCC) $(GLO_)gsparamx.$(OBJ) $(C_) $(GLSRC)gsparamx.c
++ $(GLCCSHARED) $(GLO_)gsparamx.$(OBJ) $(C_) $(GLSRC)gsparamx.c
+
+ # Future replacement for gsparams.c
+ $(GLOBJ)gsparam2.$(OBJ) : $(GLSRC)gsparam2.c $(GXERR) $(memory__h)\
+@@ -1077,7 +1077,7 @@
+
+ # Provide a mapping between StandardEncoding and ISOLatin1Encoding.
+ $(GLOBJ)gdevemap.$(OBJ) : $(GLSRC)gdevemap.c $(AK) $(std_h)
+- $(GLCC) $(GLO_)gdevemap.$(OBJ) $(C_) $(GLSRC)gdevemap.c
++ $(GLCCSHARED) $(GLO_)gdevemap.$(OBJ) $(C_) $(GLSRC)gdevemap.c
+
+ ###### Create a pseudo-"feature" for the entire graphics library.
+
+--- ghostscript-8.60-r8112/src/devs.mak.fPIC 2007-07-10 17:05:00.000000000 +0100
++++ ghostscript-8.60-r8112/src/devs.mak 2007-07-10 17:05:07.000000000 +0100
+@@ -464,7 +464,7 @@
+ $(GLCCSHARED) $(XINCLUDE) $(GLO_)gdevx.$(OBJ) $(C_) $(GLSRC)gdevx.c
+
+ $(GLOBJ)gdevxcmp.$(OBJ) : $(GLSRC)gdevxcmp.c $(GDEVX) $(math__h)
+- $(GLCC) $(XINCLUDE) $(GLO_)gdevxcmp.$(OBJ) $(C_) $(GLSRC)gdevxcmp.c
++ $(GLCCSHARED) $(XINCLUDE) $(GLO_)gdevxcmp.$(OBJ) $(C_) $(GLSRC)gdevxcmp.c
+
+ $(GLOBJ)gdevxini.$(OBJ) : $(GLSRC)gdevxini.c $(GDEVX) $(memory__h)\
+ $(gserrors_h) $(gsparamx_h) $(gxdevmem_h) $(gdevbbox_h)
diff --git a/abs/core-testing/ghostscript/ghostscript.install b/abs/core-testing/ghostscript/ghostscript.install
new file mode 100644
index 0000000..10d2d7a
--- /dev/null
+++ b/abs/core-testing/ghostscript/ghostscript.install
@@ -0,0 +1,14 @@
+post_install() {
+cat << EOF
+==> To use dvipdf, you need to install tetex:
+==> # pacman -S tetex
+EOF
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/giblib/PKGBUILD b/abs/core-testing/giblib/PKGBUILD
new file mode 100644
index 0000000..413711c
--- /dev/null
+++ b/abs/core-testing/giblib/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=giblib
+pkgver=1.2.4
+pkgrel=3
+pkgdesc="Giblib is a library that feh uses as a wrapper to imlib2"
+depends=('imlib2' 'libxext' 'freetype2')
+#source=(http://linuxbrit.co.uk/downloads/$pkgname-$pkgver.tar.gz)
+source=(http://ftp.gva.es/mirror/debian/pool/main/g/giblib/giblib_1.2.4.orig.tar.gz)
+url="http://linuxbrit.co.uk/giblib/"
+ arch=('i686')
+build() {
+cd $startdir/src/$pkgname-$pkgver.orig
+./configure --prefix=/usr
+make || return 1
+make prefix=$startdir/pkg/usr install
+find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/giflib/PKGBUILD b/abs/core-testing/giflib/PKGBUILD
new file mode 100644
index 0000000..6bc0de0
--- /dev/null
+++ b/abs/core-testing/giflib/PKGBUILD
@@ -0,0 +1,35 @@
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Baptiste Daroussin <baptiste.daroussin@gmail.com>
+# Contributor: Grigorios Bouzakis <grbzks[at]gmail[dot]com>
+# Contributor: mightyjaym <jm.ambrosino@free.fr>
+
+pkgname=giflib
+pkgver=4.1.6
+pkgrel=3
+pkgdesc="A library for reading and writing gif images"
+url="http://sourceforge.net/projects/giflib/"
+arch=('i686' 'x86_64')
+license=('MIT')
+depends=('libx11' 'libsm')
+provides=("libungif=${pkgver}")
+conflicts=('libungif')
+replaces=('libungif')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/giflib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('7125644155ae6ad33dbc9fc15a14735f')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+
+ # libungif compatibility - instructions taken from Redhat specfile
+ MAJOR=`echo ${pkgver} | sed 's/\([0-9]\+\)\..*/\1/'`
+ gcc -shared -Wl,-soname,libungif.so.${MAJOR} -Llib/.libs -lgif -o libungif.so.${pkgver} || return 1
+ install -m755 libungif.so.${pkgver} ${pkgdir}/usr/lib/ || return 1
+ ln -sf libungif.so.${pkgver} ${pkgdir}/usr/lib/libungif.so.4 || return 1
+ ln -sf libungif.so.4 ${pkgdir}/usr/lib/libungif.so || return 1
+}
diff --git a/abs/core-testing/glib2/PKGBUILD b/abs/core-testing/glib2/PKGBUILD
new file mode 100644
index 0000000..3e4abd7
--- /dev/null
+++ b/abs/core-testing/glib2/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7524 2008-08-02 20:27:35Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=glib2
+pkgver=2.16.5
+pkgrel=1
+pkgdesc="Common C routines used by GTK+ 2.4 and other libs"
+url="http://www.gtk.org/"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('pcre>=7.7')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/GNOME/sources/glib/2.16/glib-${pkgver}.tar.bz2
+ gkeyfile-bool-nocase.patch
+ glib2.sh
+ glib2.csh)
+md5sums=('039f02d47d4071322a3f00abf031e5d9'
+ '5ca65611e824662146369e814d49ad06'
+ '803017b365bd35dc20b092ce43b8c8c5'
+ '90c7b830bef4baf225c2eb8b7ead0cab')
+
+build() {
+ cd ${startdir}/src/glib-${pkgver}
+ patch -Np0 -i ${startdir}/src/gkeyfile-bool-nocase.patch || return 1
+ ./configure --prefix=/usr --enable-static --enable-shared --with-pcre=system --disable-fam || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -d -m755 ${startdir}/pkg/etc/profile.d
+ install -m755 ${startdir}/src/glib2.{csh,sh} ${startdir}/pkg/etc/profile.d/ || return 1
+}
diff --git a/abs/core-testing/glib2/gkeyfile-bool-nocase.patch b/abs/core-testing/glib2/gkeyfile-bool-nocase.patch
new file mode 100644
index 0000000..133f135
--- /dev/null
+++ b/abs/core-testing/glib2/gkeyfile-bool-nocase.patch
@@ -0,0 +1,16 @@
+Index: glib/gkeyfile.c
+===================================================================
+--- glib/gkeyfile.c (revision 5714)
++++ glib/gkeyfile.c (working copy)
+@@ -3639,9 +3639,9 @@
+ {
+ gchar *value_utf8;
+
+- if (strcmp (value, "true") == 0 || strcmp (value, "1") == 0)
++ if (g_ascii_strcasecmp (value, "true") == 0 || strcmp (value, "1") == 0)
+ return TRUE;
+- else if (strcmp (value, "false") == 0 || strcmp (value, "0") == 0)
++ else if (g_ascii_strcasecmp (value, "false") == 0 || strcmp (value, "0") == 0)
+ return FALSE;
+
+ value_utf8 = _g_utf8_make_valid (value);
diff --git a/abs/core-testing/glib2/glib2.csh b/abs/core-testing/glib2/glib2.csh
new file mode 100644
index 0000000..7aa3a2f
--- /dev/null
+++ b/abs/core-testing/glib2/glib2.csh
@@ -0,0 +1 @@
+setenv G_BROKEN_FILENAMES 1
diff --git a/abs/core-testing/glib2/glib2.sh b/abs/core-testing/glib2/glib2.sh
new file mode 100644
index 0000000..96a056e
--- /dev/null
+++ b/abs/core-testing/glib2/glib2.sh
@@ -0,0 +1 @@
+export G_BROKEN_FILENAMES=1
diff --git a/abs/core-testing/glibc/ChangeLog b/abs/core-testing/glibc/ChangeLog
new file mode 100644
index 0000000..79a44e7
--- /dev/null
+++ b/abs/core-testing/glibc/ChangeLog
@@ -0,0 +1,28 @@
+glibc 2.8-2
+- fix an old memory issue again
+
+glibc 2.8-1
+- no more tarballs
+- we checkout the current release branch incl. libidn
+- cleanup the patches
+
+glibc 2.7-6
+- fix broken locales with upstream changes
+- disable the whole weekday patch, fixes #8530
+
+glibc 2.7-5
+- fix a regression: http://sourceware.org/bugzilla/show_bug.cgi?id=4781
+ mainly for x86_64 where using gcc-gcj eats all memory
+
+glibc 2.7-4
+- extract /etc/locale.gen from sources to have all new locales supported
+- mask other broken locales / added a comment to post.install message
+- apply changes from Debian 2.7-exp7 pkg
+ to fix some broken locales
+
+glibc 2.7-3
+- removed locale/check-unknown-symbols.diff
+ localedata/tailor-iso14651_t1.diff partly
+ to fix broken et_EE locale
+- switch to compressed patches
+- added ChangeLog \ No newline at end of file
diff --git a/abs/core-testing/glibc/PKGBUILD b/abs/core-testing/glibc/PKGBUILD
new file mode 100644
index 0000000..68df516
--- /dev/null
+++ b/abs/core-testing/glibc/PKGBUILD
@@ -0,0 +1,100 @@
+# $Id: PKGBUILD 2685 2008-06-11 13:30:43Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=glibc
+pkgver=2.8
+pkgrel=11
+_glibcdate=20080610
+install=glibc.install
+backup=(etc/locale.gen)
+pkgdesc="GNU C Library"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://www.gnu.org/software/libc"
+groups=('base')
+depends=('sh' 'kernel-headers>=2.6.25.6' 'tzdata')
+makedepends=('gcc>=4.3.1-1')
+replaces=('glibc-xen')
+source=(ftp://ftp.archlinux.org/other/glibc/${pkgname}-2.8_${_glibcdate}.tar.bz2
+ ftp://ftp.archlinux.org/other/glibc/glibc-patches-${pkgver}-2.tar.bz2
+ nscd
+ locale.gen.txt
+ locale-gen)
+md5sums=('63def58972f0e8429247916154c21323'
+ '3ec00d9aa3f2fec046bc3e615dfb723a'
+ 'b587ee3a70c9b3713099295609afde49'
+ '07ac979b6ab5eeb778d55f041529d623'
+ '476e9113489f93b348b21e144b6a8fcf')
+
+build() {
+
+ # for cvs checkout
+# mkdir ${startdir}/src/glibc-${_glibcdate}
+# cd ${startdir}/src/glibc-${_glibcdate}
+# export _TAG=glibc-2_8-branch
+# export 'CVSROOT=:pserver:anoncvs@sources.redhat.com:/cvs/glibc'
+# cvs -z9 co -r $_TAG libc || return 1
+# tar -cvjf glibc-2.8_${_glibcdate}.tar.bz2 libc
+# return 1
+
+ cd ${startdir}/src/libc
+
+ # patch from Debian
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-2.5-localedef_segfault-1.patch || return 1 # still needed?
+
+ # Upstream fixes. See sources.redhat.com bugzilla
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-2.7-bz4781.patch || return 1
+
+ # Gentoo fixes
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-dont-build-timezone.patch || return 1
+
+ install -m755 -d ${startdir}/pkg/etc
+ touch ${startdir}/pkg/etc/ld.so.conf
+
+ mkdir glibc-build
+ cd glibc-build
+
+ if [ "${CARCH}" = "i686" ]; then
+ # Hack to fix NPTL issues with Xen, only required on 32bit platforms
+ export CFLAGS="${CFLAGS} -mno-tls-direct-seg-refs"
+ fi
+
+ echo "slibdir=/lib" >> configparms
+
+ ../configure --prefix=/usr \
+ --enable-add-ons=nptl,libidn --without-cvs \
+ --enable-kernel=2.6.16 --disable-profile \
+ --with-headers=/usr/include --libexecdir=/usr/lib \
+ --enable-bind-now --with-tls --with-__thread \
+ --libdir=/usr/lib --without-gd
+
+ make || return 1
+ make install_root=${startdir}/pkg install || return 1
+
+ rm -f ${startdir}/pkg/etc/ld.so.cache ${startdir}/pkg/etc/ld.so.conf ${startdir}/pkg/etc/localtime
+
+ install -m755 -d ${startdir}/pkg/etc/rc.d
+ install -m755 -d ${startdir}/pkg/usr/sbin
+ install -m755 -d ${startdir}/pkg/usr/lib/locale
+ install -m644 ${startdir}/src/libc/nscd/nscd.conf ${startdir}/pkg/etc/nscd.conf
+ install -m755 ${startdir}/src/nscd ${startdir}/pkg/etc/rc.d/nscd
+ install -m755 ${startdir}/src/locale-gen ${startdir}/pkg/usr/sbin
+
+ sed -i -e 's/^\tserver-user/#\tserver-user/' ${startdir}/pkg/etc/nscd.conf || return 1
+
+ # create /etc/locale.gen
+ install -m644 ${startdir}/src/locale.gen.txt ${startdir}/pkg/etc/locale.gen
+ sed -i "s|/| |g" ${startdir}/src/libc/localedata/SUPPORTED
+ sed -i 's|\\| |g' ${startdir}/src/libc/localedata/SUPPORTED
+ sed -i "s|SUPPORTED-LOCALES=||" ${startdir}/src/libc/localedata/SUPPORTED
+ cat ${startdir}/src/libc/localedata/SUPPORTED >> ${startdir}/pkg/etc/locale.gen
+ sed -i "s|^|#|g" ${startdir}/pkg/etc/locale.gen
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # fix for the linker
+ sed -i '/RTLDLIST/s%/ld-linux.so.2 /lib64%%' ${startdir}/pkg/usr/bin/ldd
+ #Comply with multilib binaries, they look for the linker in /lib64
+ mkdir ${startdir}/pkg/lib64
+ cd ${startdir}/pkg/lib64
+ ln -v -s ../lib/ld* .
+ fi
+}
diff --git a/abs/core-testing/glibc/fix-makecontext.patch b/abs/core-testing/glibc/fix-makecontext.patch
new file mode 100644
index 0000000..f507b7a
--- /dev/null
+++ b/abs/core-testing/glibc/fix-makecontext.patch
@@ -0,0 +1,33 @@
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/makecontext.S,v
+retrieving revision 1.8
+retrieving revision 1.9
+diff -u -r1.8 -r1.9
+--- libc/sysdeps/unix/sysv/linux/i386/makecontext.S 2007/12/03 04:56:56 1.8
++++ libc/sysdeps/unix/sysv/linux/i386/makecontext.S 2008/01/09 19:35:15 1.9
+@@ -1,5 +1,5 @@
+ /* Create new context.
+- Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
++ Copyright (C) 2001, 2002, 2005, 2007, 2008 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+@@ -41,13 +41,15 @@
+ movl 12(%esp), %ecx
+ movl %ecx, oEBX(%eax)
+
+- /* Make room on the new stack for the parameters. */
++ /* Make room on the new stack for the parameters.
++ Room for the arguments, return address (== L(exitcode)) and
++ oLINK pointer is needed. One of the pointer sizes is subtracted
++ after aligning the stack. */
+ negl %ecx
+- leal -8(%edx,%ecx,4), %edx
++ leal -4(%edx,%ecx,4), %edx
+ negl %ecx
+
+ /* Align the stack. */
+- addl $16, %edx
+ andl $0xfffffff0, %edx
+ subl $4, %edx
+
diff --git a/abs/core-testing/glibc/glibc.install b/abs/core-testing/glibc/glibc.install
new file mode 100644
index 0000000..2a35040
--- /dev/null
+++ b/abs/core-testing/glibc/glibc.install
@@ -0,0 +1,122 @@
+pre_upgrade() {
+if [ "`uname -m`" = "x86_64" ]; then
+ if [ "`vercmp $2 2.4`" -lt 0 ]; then
+ cat << _EOF
+ ==> glibc oldpkgver < 2.4 detected!
+ ==>
+ ==> ATTENTION x86_64 USERS:
+ ==>
+ ==> We now switch from the former lib-linking to pure /lib support. To get rid
+ ==> of all lib64 directories we have removed the link /lib -> /lib64 and
+ ==> /usr/lib -> /usr/lib64.
+ ==>
+ ==> We have also rebuilt all packages we know that still used lib64 directories.
+ ==> Now all should go to /lib directories.
+ ==>
+ ==> Internally we have removed the link and then mv /lib64 /lib. Same to /usr/lib64.
+ ==> /lib64 and /usr/lib64 shouldn't exist anymore. If any package still installs to
+ ==> /lib64 or /usr/lib64 let us know.
+ ==>
+_EOF
+
+# now the moving
+rm -rf /lib/tls && echo "/lib/tls removed"
+ldconfig -r .
+rm -f /usr/lib
+mv /usr/lib64 /usr/lib && echo "/usr/lib64 moved"
+rm -f /lib
+mv /lib64 /lib && echo "/lib64 moved"
+
+ fi
+fi
+}
+
+
+post_upgrade() {
+ echo -n "reloading init: "
+ ldconfig -r .
+ init u
+ echo "done."
+ cat << _EOF
+ ==> ATTENTION INTERNATIONAL USERS:
+ ==>
+ ==> Locales are no longer included in the glibc package.
+ ==> They are generated by /usr/sbin/locale-gen depending on the contents
+ ==> of /etc/locale.gen.
+ ==> glibc will try to autodetect the required locales now, if you need
+ ==> additional locales, please enable them in /etc/locale.gen and run
+ ==> /usr/sbin/locale-gen
+ ==>
+ ==> Check /etc/locale.gen.pacnew for new supported locales
+ ==>
+_EOF
+ # Check active locales, enable the ones that are in use
+ loc=("$LANG"
+ "`grep '^LOCALE=' etc/rc.conf | awk -F '=' '{ print $2 }'`")
+ for l in "${loc[@]}"; do
+ if [ ! -z "${l}" ]; then
+ line="`grep -i "^#${l}[[:space:]]" etc/locale.gen`"
+ if [ ! -z "${line}" ]; then
+ sed -i -e "s|${line}|${line/\#/}|" etc/locale.gen
+ fi
+ fi
+ done
+
+ usr/sbin/locale-gen
+
+# fix CHOST for arch64
+if [ "`uname -m`" = "x86_64" ]; then
+ if [ "`vercmp $2 2.4`" -lt 0 ]; then
+ sed -i s/'x86_64-pc-linux-gnu'/'x86_64-unknown-linux-gnu'/ /etc/makepkg.conf && \
+ echo "in /etc/makepkg.conf CHOST has been changed to \"x86_64-unknown-linux-gnu\""
+
+ # we remove files from glibc 2.3.6 that are not removed automatically
+ rm -f /lib/ld-2.3.* && echo "removing unneeded old files"
+ rm -f /lib/libBrokenLocale-2.3.*
+ rm -f /lib/libNoVersion*
+ rm -f /lib/libanl-2.3.*
+ rm -f /lib/libc-2.3.*
+ rm -f /lib/libcidn-2.3.*
+ rm -f /lib/libcrypt-2.3.*
+ rm -f /lib/libdl-2.3.*
+ rm -f /lib/libm-2.3.*
+ rm -f /lib/libnsl-2.3.*
+ rm -f /lib/libnss1*
+ rm -f /lib/libnss_compat-2.3.*
+ rm -f /lib/libnss_dns-2.3.*
+ rm -f /lib/libnss_dns.so.1
+ rm -f /lib/libnss_files-2.3.*
+ rm -f /lib/libnss_files.so.1
+ rm -f /lib/libnss_hesiod-2.3.*
+ rm -f /lib/libnss_nis-2.3.*
+ rm -f /lib/libnss_nis.so.1
+ rm -f /lib/libnss_nisplus-2.3.*
+ rm -f /lib/libpthread-0.10.so
+ rm -f /lib/libresolv-2.3.*
+ rm -f /lib/librt-2.3.*
+ rm -f /lib/libutil-2.3.*
+ rm -fR /lib/nosegneg
+ #rm -fR /usr/include/asm
+ #rm -fR /usr/include/linux
+ rm -fR /usr/include/ntpl
+ rm -f /usr/lib/libNoVersion*
+ rm -f /usr/lib/libc_stubs.a
+ rm -f /usr/lib/libnss1*
+ rm -f /usr/lib/libnss_compat.so.1
+ rm -f /usr/lib/libnss_dns.so.1
+ rm -f /usr/lib/libnss_files.so.1
+ rm -f /usr/lib/libnss_nis.so.1
+ rm -fR /usr/lib/nptl
+ rm -f /usr/sbin/nscd_nischeck
+ rm -fR /usr/share/zoneinfo/SystemV
+ rm -fR /usr/share/zoneinfo/posix/SystemV
+ rm -fR /usr/share/zoneinfo/right/SystemV
+ ldconfig -r .
+ fi
+fi
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/glibc/locale-gen b/abs/core-testing/glibc/locale-gen
new file mode 100755
index 0000000..5aff344
--- /dev/null
+++ b/abs/core-testing/glibc/locale-gen
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+set -e
+
+LOCALEGEN=/etc/locale.gen
+LOCALES=/usr/share/i18n/locales
+if [ -n "$POSIXLY_CORRECT" ]; then
+ unset POSIXLY_CORRECT
+fi
+
+
+[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0;
+
+# Remove all old locale dir and locale-archive before generating new
+# locale data.
+rm -rf /usr/lib/locale/* || true
+
+umask 022
+
+is_entry_ok() {
+ if [ -n "$locale" -a -n "$charset" ] ; then
+ true
+ else
+ echo "error: Bad entry '$locale $charset'"
+ false
+ fi
+}
+
+echo "Generating locales..."
+while read locale charset; do \
+ case $locale in \#*) continue;; "") continue;; esac; \
+ is_entry_ok || continue
+ echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \
+ echo -n ".$charset"; \
+ echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \
+ echo -n '...'; \
+ if [ -f $LOCALES/$locale ]; then input=$locale; else \
+ input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \
+ localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale; \
+ echo ' done'; \
+done < $LOCALEGEN
+echo "Generation complete."
diff --git a/abs/core-testing/glibc/locale.gen b/abs/core-testing/glibc/locale.gen
new file mode 100644
index 0000000..c739380
--- /dev/null
+++ b/abs/core-testing/glibc/locale.gen
@@ -0,0 +1,438 @@
+# Configuration file for locale-gen
+#
+# lists of locales that are to be generated by the locale-gen command.
+#
+# Each line is of the form:
+#
+# <locale> <charset>
+#
+# where <locale> is one of the locales given in /usr/share/i18n/locales
+# and <charset> is one of the character sets listed in /usr/share/i18n/charmaps
+#
+# Examples:
+# en_US ISO-8859-1
+# en_US.UTF-8 UTF-8
+# de_DE ISO-8859-1
+# de_DE@euro ISO-8859-15
+#
+# The locale-gen command will generate all the locales,
+# placing them in /usr/lib/locale.
+#
+# A list of supported locales is included in this file.
+# Uncomment the ones you need.
+#
+#aa_DJ.UTF-8 UTF-8
+#aa_DJ ISO-8859-1
+#aa_ER UTF-8
+#aa_ER@saaho UTF-8
+#aa_ET UTF-8
+#af_ZA.UTF-8 UTF-8
+#af_ZA ISO-8859-1
+#am_ET UTF-8
+#an_ES.UTF-8 UTF-8
+#an_ES ISO-8859-15
+#ar_AE.UTF-8 UTF-8
+#ar_AE ISO-8859-6
+#ar_BH.UTF-8 UTF-8
+#ar_BH ISO-8859-6
+#ar_DZ.UTF-8 UTF-8
+#ar_DZ ISO-8859-6
+#ar_EG.UTF-8 UTF-8
+#ar_EG ISO-8859-6
+#ar_IN UTF-8
+#ar_IQ.UTF-8 UTF-8
+#ar_IQ ISO-8859-6
+#ar_JO.UTF-8 UTF-8
+#ar_JO ISO-8859-6
+#ar_KW.UTF-8 UTF-8
+#ar_KW ISO-8859-6
+#ar_LB.UTF-8 UTF-8
+#ar_LB ISO-8859-6
+#ar_LY.UTF-8 UTF-8
+#ar_LY ISO-8859-6
+#ar_MA.UTF-8 UTF-8
+#ar_MA ISO-8859-6
+#ar_OM.UTF-8 UTF-8
+#ar_OM ISO-8859-6
+#ar_QA.UTF-8 UTF-8
+#ar_QA ISO-8859-6
+#ar_SA.UTF-8 UTF-8
+#ar_SA ISO-8859-6
+#ar_SD.UTF-8 UTF-8
+#ar_SD ISO-8859-6
+#ar_SY.UTF-8 UTF-8
+#ar_SY ISO-8859-6
+#ar_TN.UTF-8 UTF-8
+#ar_TN ISO-8859-6
+#ar_YE.UTF-8 UTF-8
+#ar_YE ISO-8859-6
+#az_AZ.UTF-8 UTF-8
+#as_IN.UTF-8 UTF-8
+#ast_ES.UTF-8 UTF-8
+#ast_ES ISO-8859-15
+#be_BY.UTF-8 UTF-8
+#be_BY CP1251
+#be_BY@latin UTF-8
+#ber_DZ UTF-8
+#ber_MA UTF-8
+#bg_BG.UTF-8 UTF-8
+#bg_BG CP1251
+#bn_BD UTF-8
+#bn_IN UTF-8
+#br_FR.UTF-8 UTF-8
+#br_FR ISO-8859-1
+#br_FR@euro ISO-8859-15
+#bs_BA.UTF-8 UTF-8
+#bs_BA ISO-8859-2
+#byn_ER UTF-8
+#ca_AD.UTF-8 UTF-8
+#ca_AD ISO-8859-15
+#ca_ES.UTF-8 UTF-8
+#ca_ES ISO-8859-1
+#ca_ES@euro ISO-8859-15
+#ca_ES.UTF-8@valencia UTF-8
+#ca_ES@valencia ISO-8859-15
+#ca_FR.UTF-8 UTF-8
+#ca_FR ISO-8859-15
+#ca_IT.UTF-8 UTF-8
+#ca_IT ISO-8859-15
+#crh_UA UTF-8
+#cs_CZ.UTF-8 UTF-8
+#cs_CZ ISO-8859-2
+#csb_PL UTF-8
+#cy_GB.UTF-8 UTF-8
+#cy_GB ISO-8859-14
+#da_DK.UTF-8 UTF-8
+#da_DK ISO-8859-1
+#da_DK.ISO-8859-15 ISO-8859-15
+#de_AT.UTF-8 UTF-8
+#de_AT ISO-8859-1
+#de_AT@euro ISO-8859-15
+#de_BE.UTF-8 UTF-8
+#de_BE ISO-8859-1
+#de_BE@euro ISO-8859-15
+#de_CH.UTF-8 UTF-8
+#de_CH ISO-8859-1
+#de_DE.UTF-8 UTF-8
+#de_DE ISO-8859-1
+#de_DE@euro ISO-8859-15
+#de_LU.UTF-8 UTF-8
+#de_LU ISO-8859-1
+#de_LU@euro ISO-8859-15
+#dz_BT UTF-8
+#el_GR.UTF-8 UTF-8
+#el_GR ISO-8859-7
+#el_CY.UTF-8 UTF-8
+#el_CY ISO-8859-7
+#en_AU.UTF-8 UTF-8
+#en_AU ISO-8859-1
+#en_BW.UTF-8 UTF-8
+#en_BW ISO-8859-1
+#en_CA.UTF-8 UTF-8
+#en_CA ISO-8859-1
+#en_DK.UTF-8 UTF-8
+#en_DK.ISO-8859-15 ISO-8859-15
+#en_DK ISO-8859-1
+#en_GB.UTF-8 UTF-8
+#en_GB ISO-8859-1
+#en_GB.ISO-8859-15 ISO-8859-15
+#en_HK.UTF-8 UTF-8
+#en_HK ISO-8859-1
+#en_IE.UTF-8 UTF-8
+#en_IE ISO-8859-1
+#en_IE@euro ISO-8859-15
+#en_IN UTF-8
+#en_NG UTF-8
+#en_NZ.UTF-8 UTF-8
+#en_NZ ISO-8859-1
+#en_PH.UTF-8 UTF-8
+#en_PH ISO-8859-1
+#en_SG.UTF-8 UTF-8
+#en_SG ISO-8859-1
+#en_US.UTF-8 UTF-8
+#en_US ISO-8859-1
+#en_US.ISO-8859-15 ISO-8859-15
+#en_ZA.UTF-8 UTF-8
+#en_ZA ISO-8859-1
+#en_ZW.UTF-8 UTF-8
+#en_ZW ISO-8859-1
+#eo.UTF-8 UTF-8
+#eo ISO-8859-3
+#es_AR.UTF-8 UTF-8
+#es_AR ISO-8859-1
+#es_BO.UTF-8 UTF-8
+#es_BO ISO-8859-1
+#es_CL.UTF-8 UTF-8
+#es_CL ISO-8859-1
+#es_CO.UTF-8 UTF-8
+#es_CO ISO-8859-1
+#es_CR.UTF-8 UTF-8
+#es_CR ISO-8859-1
+#es_DO.UTF-8 UTF-8
+#es_DO ISO-8859-1
+#es_EC.UTF-8 UTF-8
+#es_EC ISO-8859-1
+#es_ES.UTF-8 UTF-8
+#es_ES ISO-8859-1
+#es_ES@euro ISO-8859-15
+#es_GT.UTF-8 UTF-8
+#es_GT ISO-8859-1
+#es_HN.UTF-8 UTF-8
+#es_HN ISO-8859-1
+#es_MX.UTF-8 UTF-8
+#es_MX ISO-8859-1
+#es_NI.UTF-8 UTF-8
+#es_NI ISO-8859-1
+#es_PA.UTF-8 UTF-8
+#es_PA ISO-8859-1
+#es_PE.UTF-8 UTF-8
+#es_PE ISO-8859-1
+#es_PR.UTF-8 UTF-8
+#es_PR ISO-8859-1
+#es_PY.UTF-8 UTF-8
+#es_PY ISO-8859-1
+#es_SV.UTF-8 UTF-8
+#es_SV ISO-8859-1
+#es_US.UTF-8 UTF-8
+#es_US ISO-8859-1
+#es_UY.UTF-8 UTF-8
+#es_UY ISO-8859-1
+#es_VE.UTF-8 UTF-8
+#es_VE ISO-8859-1
+#et_EE.UTF-8 UTF-8
+#et_EE ISO-8859-1
+#et_EE.ISO-8859-15 ISO-8859-15
+#eu_ES.UTF-8 UTF-8
+#eu_ES ISO-8859-1
+#eu_ES@euro ISO-8859-15
+#eu_FR.UTF-8 UTF-8
+#eu_FR ISO-8859-1
+#eu_FR@euro ISO-8859-15
+#fa_IR UTF-8
+#fi_FI.UTF-8 UTF-8
+#fi_FI ISO-8859-1
+#fi_FI@euro ISO-8859-15
+#fil_PH UTF-8
+#fo_FO.UTF-8 UTF-8
+#fo_FO ISO-8859-1
+#fr_BE.UTF-8 UTF-8
+#fr_BE ISO-8859-1
+#fr_BE@euro ISO-8859-15
+#fr_CA.UTF-8 UTF-8
+#fr_CA ISO-8859-1
+#fr_CH.UTF-8 UTF-8
+#fr_CH ISO-8859-1
+#fr_FR.UTF-8 UTF-8
+#fr_FR ISO-8859-1
+#fr_FR@euro ISO-8859-15
+#fr_LU.UTF-8 UTF-8
+#fr_LU ISO-8859-1
+#fr_LU@euro ISO-8859-15
+#fur_IT UTF-8
+#fy_NL UTF-8
+#fy_DE UTF-8
+#ga_IE.UTF-8 UTF-8
+#ga_IE ISO-8859-1
+#ga_IE@euro ISO-8859-15
+#gd_GB.UTF-8 UTF-8
+#gd_GB ISO-8859-15
+#gez_ER UTF-8
+#gez_ER@abegede UTF-8
+#gez_ET UTF-8
+#gez_ET@abegede UTF-8
+#gl_ES.UTF-8 UTF-8
+#gl_ES ISO-8859-1
+#gl_ES@euro ISO-8859-15
+#gu_IN UTF-8
+#gv_GB.UTF-8 UTF-8
+#gv_GB ISO-8859-1
+#ha_NG UTF-8
+#he_IL.UTF-8 UTF-8
+#he_IL ISO-8859-8
+#hi_IN UTF-8
+#hr_HR.UTF-8 UTF-8
+#hr_HR ISO-8859-2
+#hsb_DE.UTF-8 UTF-8
+#hsb_DE ISO-8859-2
+#hu_HU.UTF-8 UTF-8
+#hu_HU ISO-8859-2
+#hy_AM UTF-8
+#hy_AM.ARMSCII-8 ARMSCII-8
+#ia UTF-8
+#id_ID.UTF-8 UTF-8
+#id_ID ISO-8859-1
+#ig_NG UTF-8
+#ik_CA UTF-8
+#is_IS.UTF-8 UTF-8
+#is_IS ISO-8859-1
+#it_CH.UTF-8 UTF-8
+#it_CH ISO-8859-1
+#it_IT.UTF-8 UTF-8
+#it_IT ISO-8859-1
+#it_IT@euro ISO-8859-15
+#iu_CA UTF-8
+#iw_IL.UTF-8 UTF-8
+#iw_IL ISO-8859-8
+#ja_JP.UTF-8 UTF-8
+#ja_JP.EUC-JP EUC-JP
+#ka_GE.UTF-8 UTF-8
+#ka_GE GEORGIAN-PS
+#kk_KZ.UTF-8 UTF-8
+#kk_KZ PT154
+#kl_GL.UTF-8 UTF-8
+#kl_GL ISO-8859-1
+#km_KH UTF-8
+#kn_IN UTF-8
+#ko_KR.UTF-8 UTF-8
+#ko_KR.EUC-KR EUC-KR
+#ku_TR.UTF-8 UTF-8
+#ku_TR ISO-8859-9
+#kw_GB.UTF-8 UTF-8
+#kw_GB ISO-8859-1
+#ky_KG UTF-8
+#lg_UG.UTF-8 UTF-8
+#lg_UG ISO-8859-10
+#li_BE UTF-8
+#li_NL UTF-8
+#lo_LA UTF-8
+#lt_LT.UTF-8 UTF-8
+#lt_LT ISO-8859-13
+#lv_LV.UTF-8 UTF-8
+#lv_LV ISO-8859-13
+#mai_IN UTF-8
+#mg_MG.UTF-8 UTF-8
+#mg_MG ISO-8859-15
+#mi_NZ.UTF-8 UTF-8
+#mi_NZ ISO-8859-13
+#mk_MK.UTF-8 UTF-8
+#mk_MK ISO-8859-5
+#ml_IN UTF-8
+#mn_MN UTF-8
+#mr_IN UTF-8
+#ms_MY.UTF-8 UTF-8
+#ms_MY ISO-8859-1
+#mt_MT.UTF-8 UTF-8
+#mt_MT ISO-8859-3
+#nb_NO.UTF-8 UTF-8
+#nb_NO ISO-8859-1
+#nds_DE UTF-8
+#nds_NL UTF-8
+#ne_NP UTF-8
+#nl_BE.UTF-8 UTF-8
+#nl_BE ISO-8859-1
+#nl_BE@euro ISO-8859-15
+#nl_NL.UTF-8 UTF-8
+#nl_NL ISO-8859-1
+#nl_NL@euro ISO-8859-15
+#nn_NO.UTF-8 UTF-8
+#nn_NO ISO-8859-1
+#nr_ZA UTF-8
+#nso_ZA UTF-8
+#oc_FR.UTF-8 UTF-8
+#oc_FR ISO-8859-1
+#om_ET UTF-8
+#om_KE.UTF-8 UTF-8
+#om_KE ISO-8859-1
+#or_IN UTF-8
+#pa_IN UTF-8
+#pa_PK UTF-8
+#pap_AN UTF-8
+#pl_PL.UTF-8 UTF-8
+#pl_PL ISO-8859-2
+#pt_BR.UTF-8 UTF-8
+#pt_BR ISO-8859-1
+#pt_PT.UTF-8 UTF-8
+#pt_PT ISO-8859-1
+#pt_PT@euro ISO-8859-15
+#ro_RO.UTF-8 UTF-8
+#ro_RO ISO-8859-2
+#ru_RU.UTF-8 UTF-8
+#ru_RU.KOI8-R KOI8-R
+#ru_RU ISO-8859-5
+#ru_RU.CP1251 CP1251
+#ru_UA.UTF-8 UTF-8
+#ru_UA KOI8-U
+#rw_RW UTF-8
+#sa_IN UTF-8
+#sc_IT UTF-8
+#se_NO UTF-8
+#si_LK UTF-8
+#sid_ET UTF-8
+#sk_SK.UTF-8 UTF-8
+#sk_SK ISO-8859-2
+#sl_SI.UTF-8 UTF-8
+#sl_SI ISO-8859-2
+#so_DJ.UTF-8 UTF-8
+#so_DJ ISO-8859-1
+#so_ET UTF-8
+#so_KE.UTF-8 UTF-8
+#so_KE ISO-8859-1
+#so_SO.UTF-8 UTF-8
+#so_SO ISO-8859-1
+#sq_AL.UTF-8 UTF-8
+#sq_AL ISO-8859-1
+#sr_ME UTF-8
+#sr_RS UTF-8
+#sr_RS@latin UTF-8
+#ss_ZA UTF-8
+#st_ZA.UTF-8 UTF-8
+#st_ZA ISO-8859-1
+#sv_FI.UTF-8 UTF-8
+#sv_FI ISO-8859-1
+#sv_FI@euro ISO-8859-15
+#sv_SE.UTF-8 UTF-8
+#sv_SE ISO-8859-1
+#sv_SE.ISO-8859-15 ISO-8859-15
+#ta_IN UTF-8
+#te_IN UTF-8
+#tg_TJ.UTF-8 UTF-8
+#tg_TJ KOI8-T
+#th_TH.UTF-8 UTF-8
+#th_TH TIS-620
+#ti_ER UTF-8
+#ti_ET UTF-8
+#tig_ER UTF-8
+#tk_TM UTF-8
+#tl_PH.UTF-8 UTF-8
+#tl_PH ISO-8859-1
+#tn_ZA UTF-8
+#tr_CY.UTF-8 UTF-8
+#tr_CY ISO-8859-9
+#tr_TR.UTF-8 UTF-8
+#tr_TR ISO-8859-9
+#ts_ZA UTF-8
+#tt_RU.UTF-8 UTF-8
+#tt_RU@iqtelif.UTF-8 UTF-8
+#ug_CN UTF-8
+#uk_UA.UTF-8 UTF-8
+#uk_UA KOI8-U
+#ur_PK UTF-8
+#uz_UZ.UTF-8 UTF-8
+#uz_UZ ISO-8859-1
+#uz_UZ@cyrillic UTF-8
+#ve_ZA UTF-8
+#vi_VN UTF-8
+#vi_VN.TCVN TCVN5712-1
+#wa_BE.UTF-8 UTF-8
+#wa_BE ISO-8859-1
+#wa_BE@euro ISO-8859-15
+#wo_SN UTF-8
+#xh_ZA.UTF-8 UTF-8
+#xh_ZA ISO-8859-1
+#yi_US.UTF-8 UTF-8
+#yi_US CP1255
+#yo_NG UTF-8
+#zh_CN.UTF-8 UTF-8
+#zh_CN.GB18030 GB18030
+#zh_CN.GBK GBK
+#zh_CN GB2312
+#zh_HK.UTF-8 UTF-8
+#zh_HK BIG5-HKSCS
+#zh_SG.UTF-8 UTF-8
+#zh_SG.GBK GBK
+#zh_SG GB2312
+#zh_TW.UTF-8 UTF-8
+#zh_TW BIG5
+#zh_TW.EUC-TW EUC-TW
+#zu_ZA.UTF-8 UTF-8
+#zu_ZA ISO-8859-1
diff --git a/abs/core-testing/glibc/locale.gen.txt b/abs/core-testing/glibc/locale.gen.txt
new file mode 100644
index 0000000..ccdd817
--- /dev/null
+++ b/abs/core-testing/glibc/locale.gen.txt
@@ -0,0 +1,23 @@
+# Configuration file for locale-gen
+#
+# lists of locales that are to be generated by the locale-gen command.
+#
+# Each line is of the form:
+#
+# <locale> <charset>
+#
+# where <locale> is one of the locales given in /usr/share/i18n/locales
+# and <charset> is one of the character sets listed in /usr/share/i18n/charmaps
+#
+# Examples:
+# en_US ISO-8859-1
+# en_US.UTF-8 UTF-8
+# de_DE ISO-8859-1
+# de_DE@euro ISO-8859-15
+#
+# The locale-gen command will generate all the locales,
+# placing them in /usr/lib/locale.
+#
+# A list of supported locales is included in this file.
+# Uncomment the ones you need.
+#
diff --git a/abs/core-testing/glibc/nscd b/abs/core-testing/glibc/nscd
new file mode 100755
index 0000000..8b14f2a
--- /dev/null
+++ b/abs/core-testing/glibc/nscd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/nscd`
+case "$1" in
+ start)
+ stat_busy "Starting nscd"
+ # create necessary directories if they don't already exist
+ mkdir -p /var/run/nscd /var/db/nscd 2>/dev/null
+ # remove stale files
+ rm -f /var/db/nscd/* /var/run/nscd/* 2>/dev/null
+ [ -z "$PID" ] && /usr/sbin/nscd
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon nscd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping nscd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon nscd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/glproto/PKGBUILD b/abs/core-testing/glproto/PKGBUILD
new file mode 100644
index 0000000..fe75df2
--- /dev/null
+++ b/abs/core-testing/glproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=glproto
+pkgver=1.4.9
+pkgrel=1
+pkgdesc="X11 OpenGL extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+license=('custom')
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('e60951628422663e60faeb400f27bac1')
diff --git a/abs/core-testing/gnutls/PKGBUILD b/abs/core-testing/gnutls/PKGBUILD
new file mode 100644
index 0000000..ec50f98
--- /dev/null
+++ b/abs/core-testing/gnutls/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 8715 2008-08-16 04:25:59Z eric $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+# Notice:
+# When building a new major version, build, install, build again.
+#
+pkgname=gnutls
+pkgver=2.4.1
+pkgrel=1
+pkgdesc="A library which provides a secure layer over a reliable transport layer"
+arch=(i686 x86_64)
+license=('GPL3' 'LGPL')
+url="http://www.gnu.org/software/gnutls/"
+options=('libtool')
+depends=('gcc-libs' 'libtasn1>=1.4' 'readline' 'zlib' 'libgcrypt>=1.4')
+source=(ftp://ftp.gnutls.org/pub/gnutls/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('573db36cb3f8472b0293cfa1f52c607a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --with-zlib --disable-guile || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/gpm/ChangeLog b/abs/core-testing/gpm/ChangeLog
new file mode 100644
index 0000000..c6c6a14
--- /dev/null
+++ b/abs/core-testing/gpm/ChangeLog
@@ -0,0 +1,11 @@
+2008-06-16 Eric Belanger <eric@archlinux.org>
+
+ * gpm 1.20.5-1
+ * Upstream update
+ * Added sanity checks
+
+2008-04-17 Eric Belanger <eric@archlinux.org>
+
+ * gpm 1.20.3-1
+ * Upstream update
+ * Added missing /usr/lib/libgpm.so.1 symlink (close FS#9949)
diff --git a/abs/core-testing/gpm/PKGBUILD b/abs/core-testing/gpm/PKGBUILD
new file mode 100644
index 0000000..7a7c571
--- /dev/null
+++ b/abs/core-testing/gpm/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 3002 2008-06-18 01:56:59Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=gpm
+pkgver=1.20.5
+pkgrel=1
+pkgdesc="A mouse server for the console and xterm"
+arch=('i686' 'x86_64')
+url="http://unix.schottelius.org/gpm/"
+license=('GPL')
+depends=('ncurses')
+backup=('etc/conf.d/gpm')
+options=('!makeflags')
+source=(http://unix.schottelius.org/gpm/archives/${pkgname}-${pkgver}.tar.bz2 \
+ gpm gpm.conf.d)
+md5sums=('e55473932e4052f3b74c730dfefe0d15' 'c4d42a4725503a5524cae060a959a3d3'\
+ '5f109341a7d1bb18c59d7c3a395d848a')
+sha1sums=('4a8c2109167da8e60055c25dadc383d02ba32538'
+ 'c13ad1422d24af320e2abb9786c7eacef39b293c'
+ '3bcb67027f0ad7dc393388fb02c261126671f9f5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -D -m755 ../gpm ${startdir}/pkg/etc/rc.d/gpm || return 1
+ install -D -m644 ../gpm.conf.d ${startdir}/pkg/etc/conf.d/gpm || return 1
+
+# library fixes
+ cd ${startdir}/pkg/usr/lib/
+ ln -s libgpm.so.2.* libgpm.so || return 1
+ chmod 755 ${startdir}/pkg/usr/lib/libgpm.so.* || return 1
+}
diff --git a/abs/core-testing/gpm/gpm b/abs/core-testing/gpm/gpm
new file mode 100755
index 0000000..4acc908
--- /dev/null
+++ b/abs/core-testing/gpm/gpm
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# source application-specific settings
+GPM_ARGS=
+[ -f /etc/conf.d/gpm ] && . /etc/conf.d/gpm
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/gpm`
+case "$1" in
+ start)
+ stat_busy "Starting GPM Daemon"
+ [ -z "$PID" ] && /usr/sbin/gpm ${GPM_ARGS}
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon gpm
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping GPM Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon gpm
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/gpm/gpm.conf.d b/abs/core-testing/gpm/gpm.conf.d
new file mode 100644
index 0000000..ed84f91
--- /dev/null
+++ b/abs/core-testing/gpm/gpm.conf.d
@@ -0,0 +1,4 @@
+#
+# Parameters to be passed to gpm
+#
+GPM_ARGS="-m /dev/misc/psaux"
diff --git a/abs/core-testing/grep/01-fgrep.patch b/abs/core-testing/grep/01-fgrep.patch
new file mode 100644
index 0000000..c7f8f96
--- /dev/null
+++ b/abs/core-testing/grep/01-fgrep.patch
@@ -0,0 +1,145 @@
+--- grep-2.5.1/src/search.c.fgrep 2001-04-19 04:42:14.000000000 +0100
++++ grep-2.5.1/src/search.c 2004-02-26 13:09:32.000000000 +0000
+@@ -360,13 +360,7 @@
+ /* Find a possible match using the KWset matcher. */
+ size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+- {
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free(mb_properties);
+-#endif
+- return (size_t)-1;
+- }
++ goto failure;
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+@@ -379,7 +373,7 @@
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ if (kwsm.index < kwset_exact_matches)
+- goto success;
++ goto success_in_beg_and_end;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+ }
+@@ -398,7 +392,7 @@
+ }
+ /* Successful, no backreferences encountered! */
+ if (!backref)
+- goto success;
++ goto success_in_beg_and_end;
+ }
+ else
+ end = beg + size;
+@@ -413,14 +407,11 @@
+ end - beg - 1, &(patterns[i].regs))))
+ {
+ len = patterns[i].regs.end[0] - start;
+- if (exact)
+- {
+- *match_size = len;
+- return start;
+- }
++ if (exact && !match_words)
++ goto success_in_start_and_len;
+ if ((!match_lines && !match_words)
+ || (match_lines && len == end - beg - 1))
+- goto success;
++ goto success_in_beg_and_end;
+ /* If -w, check if the match aligns with word boundaries.
+ We do this iteratively because:
+ (a) the line may contain more than one occurence of the
+@@ -434,7 +425,7 @@
+ if ((start == 0 || !WCHAR ((unsigned char) beg[start - 1]))
+ && (len == end - beg - 1
+ || !WCHAR ((unsigned char) beg[start + len])))
+- goto success;
++ goto success_in_beg_and_end;
+ if (len > 0)
+ {
+ /* Try a shorter length anchored at the same place. */
+@@ -461,19 +452,26 @@
+ }
+ } /* for Regex patterns. */
+ } /* for (beg = end ..) */
++
++ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties)
+ free (mb_properties);
+ #endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+- success:
++ success_in_beg_and_end:
++ len = end - beg;
++ start = beg - buf;
++ /* FALLTHROUGH */
++
++ success_in_start_and_len:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties)
+ free (mb_properties);
+ #endif /* MBS_SUPPORT */
+- *match_size = end - beg;
+- return beg - buf;
++ *match_size = len;
++ return start;
+ }
+
+ static void
+@@ -516,28 +514,15 @@
+ {
+ size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
+ if (offset == (size_t) -1)
+- {
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free(mb_properties);
+-#endif /* MBS_SUPPORT */
+- return offset;
+- }
++ goto failure;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+ continue; /* It is a part of multibyte character. */
+ #endif /* MBS_SUPPORT */
+ beg += offset;
+ len = kwsmatch.size[0];
+- if (exact)
+- {
+- *match_size = len;
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free (mb_properties);
+-#endif /* MBS_SUPPORT */
+- return beg - buf;
+- }
++ if (exact && !match_words)
++ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+@@ -551,6 +536,7 @@
+ goto success;
+ }
+
++ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+ free (mb_properties);
+@@ -583,7 +569,11 @@
+ end++;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+- *match_size = end - beg;
++ len = end - beg;
++ /* FALLTHROUGH */
++
++ success_in_beg_and_len:
++ *match_size = len;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+ free (mb_properties);
diff --git a/abs/core-testing/grep/02-bracket.patch b/abs/core-testing/grep/02-bracket.patch
new file mode 100644
index 0000000..f99571c
--- /dev/null
+++ b/abs/core-testing/grep/02-bracket.patch
@@ -0,0 +1,11 @@
+--- grep-2.5.1/src/dfa.c.bracket 2003-10-30 16:21:14.000000000 +0000
++++ grep-2.5.1/src/dfa.c 2003-10-30 16:22:38.000000000 +0000
+@@ -586,7 +586,7 @@
+ work_mbc->coll_elems[work_mbc->ncoll_elems++] = elem;
+ }
+ }
+- wc = -1;
++ wc1 = wc = -1;
+ }
+ else
+ /* We treat '[' as a normal character here. */
diff --git a/abs/core-testing/grep/03-i18n.patch b/abs/core-testing/grep/03-i18n.patch
new file mode 100644
index 0000000..8dc3dfe
--- /dev/null
+++ b/abs/core-testing/grep/03-i18n.patch
@@ -0,0 +1,303 @@
+--- grep-2.5.1/src/dfa.c 2004-02-26 13:09:54.000000000 +0000
++++ grep-2.5.1/src/dfa.c 2004-05-18 16:43:31.189200479 +0100
+@@ -414,7 +414,7 @@
+
+ /* This function fetch a wide character, and update cur_mb_len,
+ used only if the current locale is a multibyte environment. */
+-static wchar_t
++static wint_t
+ fetch_wc (char const *eoferr)
+ {
+ wchar_t wc;
+@@ -423,7 +423,7 @@
+ if (eoferr != 0)
+ dfaerror (eoferr);
+ else
+- return -1;
++ return WEOF;
+ }
+
+ cur_mb_len = mbrtowc(&wc, lexptr, lexleft, &mbs);
+@@ -459,7 +459,7 @@
+ static void
+ parse_bracket_exp_mb ()
+ {
+- wchar_t wc, wc1, wc2;
++ wint_t wc, wc1, wc2;
+
+ /* Work area to build a mb_char_classes. */
+ struct mb_char_classes *work_mbc;
+@@ -496,7 +496,7 @@
+ work_mbc->invert = 0;
+ do
+ {
+- wc1 = -1; /* mark wc1 is not initialized". */
++ wc1 = WEOF; /* mark wc1 is not initialized". */
+
+ /* Note that if we're looking at some other [:...:] construct,
+ we just treat it as a bunch of ordinary characters. We can do
+@@ -586,7 +586,7 @@
+ work_mbc->coll_elems[work_mbc->ncoll_elems++] = elem;
+ }
+ }
+- wc1 = wc = -1;
++ wc1 = wc = WEOF;
+ }
+ else
+ /* We treat '[' as a normal character here. */
+@@ -600,7 +600,7 @@
+ wc = fetch_wc(("Unbalanced ["));
+ }
+
+- if (wc1 == -1)
++ if (wc1 == WEOF)
+ wc1 = fetch_wc(_("Unbalanced ["));
+
+ if (wc1 == L'-')
+@@ -630,17 +630,17 @@
+ }
+ REALLOC_IF_NECESSARY(work_mbc->range_sts, wchar_t,
+ range_sts_al, work_mbc->nranges + 1);
+- work_mbc->range_sts[work_mbc->nranges] = wc;
++ work_mbc->range_sts[work_mbc->nranges] = (wchar_t)wc;
+ REALLOC_IF_NECESSARY(work_mbc->range_ends, wchar_t,
+ range_ends_al, work_mbc->nranges + 1);
+- work_mbc->range_ends[work_mbc->nranges++] = wc2;
++ work_mbc->range_ends[work_mbc->nranges++] = (wchar_t)wc2;
+ }
+- else if (wc != -1)
++ else if (wc != WEOF)
+ /* build normal characters. */
+ {
+ REALLOC_IF_NECESSARY(work_mbc->chars, wchar_t, chars_al,
+ work_mbc->nchars + 1);
+- work_mbc->chars[work_mbc->nchars++] = wc;
++ work_mbc->chars[work_mbc->nchars++] = (wchar_t)wc;
+ }
+ }
+ while ((wc = wc1) != L']');
+@@ -2552,6 +2552,8 @@
+ }
+
+ /* match with a character? */
++ if (case_fold)
++ wc = towlower (wc);
+ for (i = 0; i<work_mbc->nchars; i++)
+ {
+ if (wc == work_mbc->chars[i])
+--- grep-2.5.1/src/grep.c.i18n 2002-03-26 15:54:12.000000000 +0000
++++ grep-2.5.1/src/grep.c 2004-02-26 13:09:54.000000000 +0000
+@@ -30,6 +30,12 @@
+ # include <sys/time.h>
+ # include <sys/resource.h>
+ #endif
++#if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H && defined HAVE_MBRTOWC
++/* We can handle multibyte string. */
++# define MBS_SUPPORT
++# include <wchar.h>
++# include <wctype.h>
++#endif
+ #include <stdio.h>
+ #include "system.h"
+ #include "getopt.h"
+@@ -1697,6 +1703,37 @@
+ if (!install_matcher (matcher) && !install_matcher ("default"))
+ abort ();
+
++#ifdef MBS_SUPPORT
++ if (MB_CUR_MAX != 1 && match_icase)
++ {
++ wchar_t wc;
++ mbstate_t cur_state, prev_state;
++ int i, len = strlen(keys);
++
++ memset(&cur_state, 0, sizeof(mbstate_t));
++ for (i = 0; i <= len ;)
++ {
++ size_t mbclen;
++ mbclen = mbrtowc(&wc, keys + i, len - i, &cur_state);
++ if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
++ {
++ /* An invalid sequence, or a truncated multibyte character.
++ We treat it as a singlebyte character. */
++ mbclen = 1;
++ }
++ else
++ {
++ if (iswupper((wint_t)wc))
++ {
++ wc = towlower((wint_t)wc);
++ wcrtomb(keys + i, wc, &cur_state);
++ }
++ }
++ i += mbclen;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
+ (*compile)(keys, keycc);
+
+ if ((argc - optind > 1 && !no_filenames) || with_filenames)
+--- grep-2.5.1/src/search.c.i18n 2004-02-26 13:09:54.000000000 +0000
++++ grep-2.5.1/src/search.c 2004-02-26 13:17:12.000000000 +0000
+@@ -149,15 +149,16 @@
+ static char*
+ check_multibyte_string(char const *buf, size_t size)
+ {
+- char *mb_properties = malloc(size);
++ char *mb_properties = xmalloc(size);
+ mbstate_t cur_state;
++ wchar_t wc;
+ int i;
+ memset(&cur_state, 0, sizeof(mbstate_t));
+ memset(mb_properties, 0, sizeof(char)*size);
+ for (i = 0; i < size ;)
+ {
+ size_t mbclen;
+- mbclen = mbrlen(buf + i, size - i, &cur_state);
++ mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+
+ if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+ {
+@@ -165,6 +166,14 @@
+ We treat it as a singlebyte character. */
+ mbclen = 1;
+ }
++ else if (match_icase)
++ {
++ if (iswupper((wint_t)wc))
++ {
++ wc = towlower((wint_t)wc);
++ wcrtomb(buf + i, wc, &cur_state);
++ }
++ }
+ mb_properties[i] = mbclen;
+ i += mbclen;
+ }
+@@ -233,7 +242,7 @@
+ static char const line_end[] = "\\)$";
+ static char const word_beg[] = "\\(^\\|[^[:alnum:]_]\\)\\(";
+ static char const word_end[] = "\\)\\([^[:alnum:]_]\\|$\\)";
+- char *n = malloc (sizeof word_beg - 1 + size + sizeof word_end);
++ char *n = xmalloc (sizeof word_beg - 1 + size + sizeof word_end);
+ size_t i;
+ strcpy (n, match_lines ? line_beg : word_beg);
+ i = strlen (n);
+@@ -316,7 +325,7 @@
+ static char const line_end[] = ")$";
+ static char const word_beg[] = "(^|[^[:alnum:]_])(";
+ static char const word_end[] = ")([^[:alnum:]_]|$)";
+- char *n = malloc (sizeof word_beg - 1 + size + sizeof word_end);
++ char *n = xmalloc (sizeof word_beg - 1 + size + sizeof word_end);
+ size_t i;
+ strcpy (n, match_lines ? line_beg : word_beg);
+ i = strlen(n);
+@@ -339,14 +348,20 @@
+ char eol = eolbyte;
+ int backref, start, len;
+ struct kwsmatch kwsm;
+- size_t i;
++ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+ char *mb_properties = NULL;
+-#endif /* MBS_SUPPORT */
+-
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && kwset)
+- mb_properties = check_multibyte_string(buf, size);
++ if (MB_CUR_MAX > 1)
++ {
++ if (match_icase)
++ {
++ char *case_buf = xmalloc(size);
++ memcpy(case_buf, buf, size);
++ buf = case_buf;
++ }
++ if (kwset)
++ mb_properties = check_multibyte_string(buf, size);
++ }
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -455,8 +470,13 @@
+
+ failure:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties)
+- free (mb_properties);
++ if (MB_CUR_MAX > 1)
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+@@ -467,8 +487,13 @@
+
+ success_in_start_and_len:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties)
+- free (mb_properties);
++ if (MB_CUR_MAX > 1)
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ *match_size = len;
+ return start;
+@@ -504,10 +529,19 @@
+ register size_t len;
+ char eol = eolbyte;
+ struct kwsmatch kwsmatch;
++ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties;
++ char *mb_properties = NULL;
+ if (MB_CUR_MAX > 1)
+- mb_properties = check_multibyte_string (buf, size);
++ {
++ if (match_icase)
++ {
++ char *case_buf = xmalloc(size);
++ memcpy(case_buf, buf, size);
++ buf = case_buf;
++ }
++ mb_properties = check_multibyte_string(buf, size);
++ }
+ #endif /* MBS_SUPPORT */
+
+ for (beg = buf; beg <= buf + size; ++beg)
+@@ -565,7 +599,12 @@
+ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ {
++ if (match_icase)
++ free((char *) buf);
++ if (mb_properties)
++ free(mb_properties);
++ }
+ #endif /* MBS_SUPPORT */
+ return -1;
+
+@@ -581,7 +620,12 @@
+ *match_size = len;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ return beg - buf;
+ }
diff --git a/abs/core-testing/grep/04-oi.patch b/abs/core-testing/grep/04-oi.patch
new file mode 100644
index 0000000..eb997ad
--- /dev/null
+++ b/abs/core-testing/grep/04-oi.patch
@@ -0,0 +1,48 @@
+--- grep-2.5.1/lib/posix/regex.h.oi 2004-01-05 12:09:12.984391131 +0000
++++ grep-2.5.1/lib/posix/regex.h 2004-01-05 12:09:24.717990622 +0000
+@@ -109,6 +109,10 @@
+ If not set, \{, \}, {, and } are literals. */
+ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
++/* If this bit is set, then ignore case when matching.
++ If not set, then case is significant. */
++#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
++
+ /* If this bit is set, +, ? and | aren't recognized as operators.
+ If not set, they are. */
+ #define RE_LIMITED_OPS (RE_INTERVALS << 1)
+--- grep-2.5.1/src/search.c.oi 2004-01-05 12:07:00.550199415 +0000
++++ grep-2.5.1/src/search.c 2004-01-05 12:07:00.566197505 +0000
+@@ -31,7 +31,7 @@
+
+ #include "system.h"
+ #include "grep.h"
+-#include "regex.h"
++#include <regex.h>
+ #include "dfa.h"
+ #include "kwset.h"
+ #include "error.h"
+@@ -190,7 +190,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
+- re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE);
++ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE, match_icase, eolbyte);
+
+ /* For GNU regex compiler we have to pass the patterns separately to detect
+@@ -268,12 +268,12 @@
+
+ if (strcmp (matcher, "awk") == 0)
+ {
+- re_set_syntax (RE_SYNTAX_AWK);
++ re_set_syntax (RE_SYNTAX_AWK | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_AWK, match_icase, eolbyte);
+ }
+ else
+ {
+- re_set_syntax (RE_SYNTAX_POSIX_EGREP);
++ re_set_syntax (RE_SYNTAX_POSIX_EGREP | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_POSIX_EGREP, match_icase, eolbyte);
+ }
+
diff --git a/abs/core-testing/grep/05-manpage.patch b/abs/core-testing/grep/05-manpage.patch
new file mode 100644
index 0000000..284f0c4
--- /dev/null
+++ b/abs/core-testing/grep/05-manpage.patch
@@ -0,0 +1,19 @@
+--- grep-2.5.1/doc/grep.1.manpage 2002-01-22 13:20:04.000000000 +0000
++++ grep-2.5.1/doc/grep.1 2003-10-08 09:37:32.000000000 +0100
+@@ -191,6 +191,7 @@
+ .I PATTERN
+ as a list of fixed strings, separated by newlines,
+ any of which is to be matched.
++.TP
+ .BR \-P ", " \-\^\-perl-regexp
+ Interpret
+ .I PATTERN
+@@ -302,7 +303,7 @@
+ This is especially useful for tools like zgrep, e.g.
+ .B "gzip -cd foo.gz |grep --label=foo something"
+ .TP
+-.BR \-\^\-line-buffering
++.BR \-\^\-line-buffered
+ Use line buffering, it can be a performance penality.
+ .TP
+ .BR \-q ", " \-\^\-quiet ", " \-\^\-silent
diff --git a/abs/core-testing/grep/06-color.patch b/abs/core-testing/grep/06-color.patch
new file mode 100644
index 0000000..f54c258
--- /dev/null
+++ b/abs/core-testing/grep/06-color.patch
@@ -0,0 +1,10 @@
+--- grep-2.5.1/src/grep.c.color 2004-11-16 16:46:22.845505847 +0000
++++ grep-2.5.1/src/grep.c 2004-11-16 16:46:27.961530537 +0000
+@@ -607,6 +607,7 @@
+ fputs ("\33[00m", stdout);
+ beg = b + match_size;
+ }
++ fputs ("\33[K", stdout);
+ }
+ fwrite (beg, 1, lim - beg, stdout);
+ if (ferror (stdout))
diff --git a/abs/core-testing/grep/07-icolor.patch b/abs/core-testing/grep/07-icolor.patch
new file mode 100644
index 0000000..14b2617
--- /dev/null
+++ b/abs/core-testing/grep/07-icolor.patch
@@ -0,0 +1,36 @@
+--- grep-2.5.1a/src/grep.c.icolor 2005-01-07 12:05:20.877785250 +0000
++++ grep-2.5.1a/src/grep.c 2005-01-07 12:05:44.690194388 +0000
+@@ -564,33 +564,6 @@
+ {
+ size_t match_size;
+ size_t match_offset;
+- if(match_icase)
+- {
+- /* Yuck, this is tricky */
+- char *buf = (char*) xmalloc (lim - beg);
+- char *ibeg = buf;
+- char *ilim = ibeg + (lim - beg);
+- int i;
+- for (i = 0; i < lim - beg; i++)
+- ibeg[i] = tolower (beg[i]);
+- while ((match_offset = (*execute) (ibeg, ilim-ibeg, &match_size, 1))
+- != (size_t) -1)
+- {
+- char const *b = beg + match_offset;
+- if (b == lim)
+- break;
+- fwrite (beg, sizeof (char), match_offset, stdout);
+- printf ("\33[%sm", grep_color);
+- fwrite (b, sizeof (char), match_size, stdout);
+- fputs ("\33[00m", stdout);
+- beg = b + match_size;
+- ibeg = ibeg + match_offset + match_size;
+- }
+- fwrite (beg, 1, lim - beg, stdout);
+- free (buf);
+- lastout = lim;
+- return;
+- }
+ while (lim-beg && (match_offset = (*execute) (beg, lim - beg, &match_size, 1))
+ != (size_t) -1)
+ {
diff --git a/abs/core-testing/grep/08-skip.patch b/abs/core-testing/grep/08-skip.patch
new file mode 100644
index 0000000..fb6645f
--- /dev/null
+++ b/abs/core-testing/grep/08-skip.patch
@@ -0,0 +1,42 @@
+--- grep-2.5.1a/src/grep.c.skip 2006-05-31 09:26:58.000000000 +0100
++++ grep-2.5.1a/src/grep.c 2006-05-31 09:28:24.000000000 +0100
+@@ -261,19 +261,6 @@
+ bufbeg[-1] = eolbyte;
+ bufdesc = fd;
+
+- if (fstat (fd, &stats->stat) != 0)
+- {
+- error (0, errno, "fstat");
+- return 0;
+- }
+- if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
+- return 0;
+-#ifndef DJGPP
+- if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode)))
+-#else
+- if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
+-#endif
+- return 0;
+ if (S_ISREG (stats->stat.st_mode))
+ {
+ if (file)
+@@ -875,6 +862,19 @@
+ }
+ else
+ {
++ if (stat (file, &stats->stat) != 0)
++ {
++ suppressible_error (file, errno);
++ return 1;
++ }
++ if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
++ return 1;
++#ifndef DJGPP
++ if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode) || S_ISFIFO(stats->stat.st_mode)))
++#else
++ if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
++#endif
++ return 1;
+ while ((desc = open (file, O_RDONLY)) < 0 && errno == EINTR)
+ continue;
+
diff --git a/abs/core-testing/grep/09-egf-speedup.patch b/abs/core-testing/grep/09-egf-speedup.patch
new file mode 100644
index 0000000..08e92c7
--- /dev/null
+++ b/abs/core-testing/grep/09-egf-speedup.patch
@@ -0,0 +1,823 @@
+--- grep-2.5.1/src/search.c 2004-12-31 15:28:35.720391036 +0000
++++ grep-2.5.1a/src/search.c 2005-01-07 14:53:10.308860193 +0000
+@@ -18,9 +18,13 @@
+
+ /* Written August 1992 by Mike Haertel. */
+
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
++#include <assert.h>
+ #include <sys/types.h>
+ #if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H && defined HAVE_MBRTOWC
+ /* We can handle multibyte string. */
+@@ -39,6 +43,9 @@
+ #ifdef HAVE_LIBPCRE
+ # include <pcre.h>
+ #endif
++#ifdef HAVE_LANGINFO_CODESET
++# include <langinfo.h>
++#endif
+
+ #define NCHAR (UCHAR_MAX + 1)
+
+@@ -70,9 +77,10 @@
+ call the regexp matcher at all. */
+ static int kwset_exact_matches;
+
+-#if defined(MBS_SUPPORT)
+-static char* check_multibyte_string PARAMS ((char const *buf, size_t size));
+-#endif
++/* UTF-8 encoding allows some optimizations that we can't otherwise
++ assume in a multibyte encoding. */
++static int using_utf8;
++
+ static void kwsinit PARAMS ((void));
+ static void kwsmusts PARAMS ((void));
+ static void Gcompile PARAMS ((char const *, size_t));
+@@ -84,6 +92,15 @@
+ static size_t Pexecute PARAMS ((char const *, size_t, size_t *, int));
+
+ void
++check_utf8 (void)
++{
++#ifdef HAVE_LANGINFO_CODESET
++ if (strcmp (nl_langinfo (CODESET), "UTF-8") == 0)
++ using_utf8 = 1;
++#endif
++}
++
++void
+ dfaerror (char const *mesg)
+ {
+ error (2, 0, mesg);
+@@ -141,47 +158,6 @@
+ }
+ }
+
+-#ifdef MBS_SUPPORT
+-/* This function allocate the array which correspond to "buf".
+- Then this check multibyte string and mark on the positions which
+- are not singlebyte character nor the first byte of a multibyte
+- character. Caller must free the array. */
+-static char*
+-check_multibyte_string(char const *buf, size_t size)
+-{
+- char *mb_properties = xmalloc(size);
+- mbstate_t cur_state;
+- wchar_t wc;
+- int i;
+- memset(&cur_state, 0, sizeof(mbstate_t));
+- memset(mb_properties, 0, sizeof(char)*size);
+- for (i = 0; i < size ;)
+- {
+- size_t mbclen;
+- mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+-
+- if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+- {
+- /* An invalid sequence, or a truncated multibyte character.
+- We treat it as a singlebyte character. */
+- mbclen = 1;
+- }
+- else if (match_icase)
+- {
+- if (iswupper((wint_t)wc))
+- {
+- wc = towlower((wint_t)wc);
+- wcrtomb(buf + i, wc, &cur_state);
+- }
+- }
+- mb_properties[i] = mbclen;
+- i += mbclen;
+- }
+-
+- return mb_properties;
+-}
+-#endif
+-
+ static void
+ Gcompile (char const *pattern, size_t size)
+ {
+@@ -190,6 +166,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE, match_icase, eolbyte);
+
+@@ -266,6 +243,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ if (strcmp (matcher, "awk") == 0)
+ {
+ re_set_syntax (RE_SYNTAX_AWK | (match_icase ? RE_ICASE : 0));
+@@ -350,18 +328,9 @@
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- buf = case_buf;
+- }
+- if (kwset)
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -373,21 +342,63 @@
+ if (kwset)
+ {
+ /* Find a possible match using the KWset matcher. */
+- size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
++ size_t offset;
++#ifdef MBS_SUPPORT
++ /* kwsexec doesn't work with match_icase and multibyte input. */
++ if (match_icase && mb_cur_max > 1)
++ /* Avoid kwset */
++ offset = 0;
++ else
++#endif /* MBS_SUPPORT */
++ offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+ goto failure;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+ end = memchr(beg, eol, buflim - beg);
+ end++;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[beg - buf] == 0)
++ if (mb_cur_max > 1 && bytes_left)
+ continue;
+-#endif
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+- if (kwsm.index < kwset_exact_matches)
++ if (
++#ifdef MBS_SUPPORT
++ !(match_icase && mb_cur_max > 1) &&
++#endif /* MBS_SUPPORT */
++ (kwsm.index < kwset_exact_matches))
+ goto success_in_beg_and_end;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+@@ -395,13 +406,47 @@
+ else
+ {
+ /* No good fixed strings; start with DFA. */
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
+ size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ end = memchr (beg, eol, buflim - beg);
+ end++;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && bytes_left)
++ continue;
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ }
+@@ -469,15 +514,6 @@
+ } /* for (beg = end ..) */
+
+ failure:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+ success_in_beg_and_end:
+@@ -486,24 +522,144 @@
+ /* FALLTHROUGH */
+
+ success_in_start_and_len:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ *match_size = len;
+ return start;
+ }
+
++#ifdef MBS_SUPPORT
++static int f_i_multibyte; /* whether we're using the new -Fi MB method */
++static struct
++{
++ wchar_t **patterns;
++ size_t count, maxlen;
++ unsigned char *match;
++} Fimb;
++#endif
++
+ static void
+ Fcompile (char const *pattern, size_t size)
+ {
++ int mb_cur_max = MB_CUR_MAX;
+ char const *beg, *lim, *err;
+
++ check_utf8 ();
++#ifdef MBS_SUPPORT
++ /* Support -F -i for UTF-8 input. */
++ if (match_icase && mb_cur_max > 1)
++ {
++ mbstate_t mbs;
++ wchar_t *wcpattern = xmalloc ((size + 1) * sizeof (wchar_t));
++ const char *patternend = pattern;
++ size_t wcsize;
++ kwset_t fimb_kwset = NULL;
++ char *starts = NULL;
++ wchar_t *wcbeg, *wclim;
++ size_t allocated = 0;
++
++ memset (&mbs, '\0', sizeof (mbs));
++# ifdef __GNU_LIBRARY__
++ wcsize = mbsnrtowcs (wcpattern, &patternend, size, size, &mbs);
++ if (patternend != pattern + size)
++ wcsize = (size_t) -1;
++# else
++ {
++ char *patterncopy = xmalloc (size + 1);
++
++ memcpy (patterncopy, pattern, size);
++ patterncopy[size] = '\0';
++ patternend = patterncopy;
++ wcsize = mbsrtowcs (wcpattern, &patternend, size, &mbs);
++ if (patternend != patterncopy + size)
++ wcsize = (size_t) -1;
++ free (patterncopy);
++ }
++# endif
++ if (wcsize + 2 <= 2)
++ {
++fimb_fail:
++ free (wcpattern);
++ free (starts);
++ if (fimb_kwset)
++ kwsfree (fimb_kwset);
++ free (Fimb.patterns);
++ Fimb.patterns = NULL;
++ }
++ else
++ {
++ if (!(fimb_kwset = kwsalloc (NULL)))
++ error (2, 0, _("memory exhausted"));
++
++ starts = xmalloc (mb_cur_max * 3);
++ wcbeg = wcpattern;
++ do
++ {
++ int i;
++ size_t wclen;
++
++ if (Fimb.count >= allocated)
++ {
++ if (allocated == 0)
++ allocated = 128;
++ else
++ allocated *= 2;
++ Fimb.patterns = xrealloc (Fimb.patterns,
++ sizeof (wchar_t *) * allocated);
++ }
++ Fimb.patterns[Fimb.count++] = wcbeg;
++ for (wclim = wcbeg;
++ wclim < wcpattern + wcsize && *wclim != L'\n'; ++wclim)
++ *wclim = towlower (*wclim);
++ *wclim = L'\0';
++ wclen = wclim - wcbeg;
++ if (wclen > Fimb.maxlen)
++ Fimb.maxlen = wclen;
++ if (wclen > 3)
++ wclen = 3;
++ if (wclen == 0)
++ {
++ if ((err = kwsincr (fimb_kwset, "", 0)) != 0)
++ error (2, 0, err);
++ }
++ else
++ for (i = 0; i < (1 << wclen); i++)
++ {
++ char *p = starts;
++ int j, k;
++
++ for (j = 0; j < wclen; ++j)
++ {
++ wchar_t wc = wcbeg[j];
++ if (i & (1 << j))
++ {
++ wc = towupper (wc);
++ if (wc == wcbeg[j])
++ continue;
++ }
++ k = wctomb (p, wc);
++ if (k <= 0)
++ goto fimb_fail;
++ p += k;
++ }
++ if ((err = kwsincr (fimb_kwset, starts, p - starts)) != 0)
++ error (2, 0, err);
++ }
++ if (wclim < wcpattern + wcsize)
++ ++wclim;
++ wcbeg = wclim;
++ }
++ while (wcbeg < wcpattern + wcsize);
++ f_i_multibyte = 1;
++ kwset = fimb_kwset;
++ free (starts);
++ Fimb.match = xmalloc (Fimb.count);
++ if ((err = kwsprep (kwset)) != 0)
++ error (2, 0, err);
++ return;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
++
+ kwsinit ();
+ beg = pattern;
+ do
+@@ -522,6 +678,76 @@
+ error (2, 0, err);
+ }
+
++#ifdef MBS_SUPPORT
++static int
++Fimbexec (const char *buf, size_t size, size_t *plen, int exact)
++{
++ size_t len, letter, i;
++ int ret = -1;
++ mbstate_t mbs;
++ wchar_t wc;
++ int patterns_left;
++
++ assert (match_icase && f_i_multibyte == 1);
++ assert (MB_CUR_MAX > 1);
++
++ memset (&mbs, '\0', sizeof (mbs));
++ memset (Fimb.match, '\1', Fimb.count);
++ letter = len = 0;
++ patterns_left = 1;
++ while (patterns_left && len <= size)
++ {
++ size_t c;
++
++ patterns_left = 0;
++ if (len < size)
++ {
++ c = mbrtowc (&wc, buf + len, size - len, &mbs);
++ if (c + 2 <= 2)
++ return ret;
++
++ wc = towlower (wc);
++ }
++ else
++ {
++ c = 1;
++ wc = L'\0';
++ }
++
++ for (i = 0; i < Fimb.count; i++)
++ {
++ if (Fimb.match[i])
++ {
++ if (Fimb.patterns[i][letter] == L'\0')
++ {
++ /* Found a match. */
++ *plen = len;
++ if (!exact && !match_words)
++ return 0;
++ else
++ {
++ /* For -w or exact look for longest match. */
++ ret = 0;
++ Fimb.match[i] = '\0';
++ continue;
++ }
++ }
++
++ if (Fimb.patterns[i][letter] == wc)
++ patterns_left = 1;
++ else
++ Fimb.match[i] = '\0';
++ }
++ }
++
++ len += c;
++ letter++;
++ }
++
++ return ret;
++}
++#endif /* MBS_SUPPORT */
++
+ static size_t
+ Fexecute (char const *buf, size_t size, size_t *match_size, int exact)
+ {
+@@ -531,80 +757,258 @@
+ struct kwsmatch kwsmatch;
+ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- buf = case_buf;
+- }
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ const char *last_char = NULL;
+ #endif /* MBS_SUPPORT */
+
+ for (beg = buf; beg <= buf + size; ++beg)
+ {
+- size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
++ size_t offset;
++ offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
++
+ if (offset == (size_t) -1)
+ goto failure;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+- continue; /* It is a part of multibyte character. */
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character: no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ continue;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+ beg += offset;
++#ifdef MBS_SUPPORT
++ /* For f_i_multibyte, the string at beg now matches first 3 chars of
++ one of the search strings (less if there are shorter search strings).
++ See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, buf + size - beg, &kwsmatch.size[0], exact))
++ goto next_char;
++#endif /* MBS_SUPPORT */
+ len = kwsmatch.size[0];
+ if (exact && !match_words)
+ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+- continue;
++ goto next_char;
+ if (beg + len < buf + size && beg[len] != eol)
+- continue;
++ goto next_char;
+ goto success;
+ }
+ else if (match_words)
+- for (try = beg; len; )
+- {
+- if (try > buf && WCHAR((unsigned char) try[-1]))
+- break;
+- if (try + len < buf + size && WCHAR((unsigned char) try[len]))
+- {
+- offset = kwsexec (kwset, beg, --len, &kwsmatch);
+- if (offset == (size_t) -1)
+- {
++ {
++ while (len)
++ {
++ int word_match = 0;
++ if (beg > buf)
++ {
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ int mr;
++ wchar_t pwc;
++
++ if (using_utf8)
++ {
++ s = beg - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ s = last_char;
++ mr = mbtowc (&pwc, s, beg - s);
++ if (mr <= 0)
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ else if ((iswalnum (pwc) || pwc == L'_')
++ && mr == (int) (beg - s))
++ goto next_char;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+- return offset;
+- }
+- try = beg + offset;
+- len = kwsmatch.size[0];
+- }
+- else
+- goto success;
+- }
++ if (WCHAR ((unsigned char) beg[-1]))
++ goto next_char;
++ }
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
++
++ mr = mbtowc (&nwc, beg + len, buf + size - beg - len);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ word_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ word_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (beg + len >= buf + size || !WCHAR ((unsigned char) beg[len]))
++ word_match = 1;
++ if (word_match)
++ {
++ if (!exact)
++ /* Returns the whole line now we know there's a word match. */
++ goto success;
++ else
++ /* Returns just this word match. */
++ goto success_in_beg_and_len;
++ }
++ if (len > 0)
++ {
++ /* Try a shorter length anchored at the same place. */
++ --len;
++ offset = kwsexec (kwset, beg, len, &kwsmatch);
++
++ if (offset == -1)
++ goto next_char; /* Try a different anchor. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ {
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++ }
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ goto next_char; /* Try a different anchor. */
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
++ beg += offset;
++#ifdef MBS_SUPPORT
++ /* The string at beg now matches first 3 chars of one of
++ the search strings (less if there are shorter search
++ strings). See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, len - offset, &kwsmatch.size[0],
++ exact))
++ goto next_char;
++#endif /* MBS_SUPPORT */
++ len = kwsmatch.size[0];
++ }
++ }
++ }
+ else
+ goto success;
++next_char:;
++#ifdef MBS_SUPPORT
++ /* Advance to next character. For MB_CUR_MAX == 1 case this is handled
++ by ++beg above. */
++ if (mb_cur_max > 1)
++ {
++ if (using_utf8)
++ {
++ unsigned char c = *beg;
++ if (c >= 0xc2)
++ {
++ if (c < 0xe0)
++ ++beg;
++ else if (c < 0xf0)
++ beg += 2;
++ else if (c < 0xf8)
++ beg += 3;
++ else if (c < 0xfc)
++ beg += 4;
++ else if (c < 0xfe)
++ beg += 5;
++ }
++ }
++ else
++ {
++ size_t l = mbrlen (beg, buf + size - beg, &mbs);
++
++ last_char = beg;
++ if (l + 2 >= 2)
++ beg += l - 1;
++ else
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ }
++ }
++#endif /* MBS_SUPPORT */
+ }
+
+ failure:
++ return -1;
++
++ success:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
++ if (mb_cur_max > 1 && !using_utf8)
+ {
+- if (match_icase)
+- free((char *) buf);
+- if (mb_properties)
+- free(mb_properties);
++ end = beg + len;
++ while (end < buf + size)
++ {
++ size_t mlen = mbrlen (end, buf + size - end, &mbs);
++ if (mlen == (size_t) -1 || mlen == (size_t) -2 || mlen == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ mlen = 1;
++ }
++ if (mlen == 1 && *end == eol)
++ break;
++
++ end += mlen;
++ }
+ }
++ else
+ #endif /* MBS_SUPPORT */
+- return -1;
+-
+- success:
+ end = memchr (beg + len, eol, (buf + size) - (beg + len));
++
+ end++;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+@@ -613,15 +1017,6 @@
+
+ success_in_beg_and_len:
+ *match_size = len;
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ return beg - buf;
+ }
+
diff --git a/abs/core-testing/grep/10-dfa-optional.patch b/abs/core-testing/grep/10-dfa-optional.patch
new file mode 100644
index 0000000..784eba9
--- /dev/null
+++ b/abs/core-testing/grep/10-dfa-optional.patch
@@ -0,0 +1,67 @@
+--- grep-2.5.1a/src/search.c.dfa-optional 2005-01-07 14:58:45.714869815 +0000
++++ grep-2.5.1a/src/search.c 2005-01-07 14:58:45.725867716 +0000
+@@ -327,12 +327,34 @@
+ int backref, start, len;
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
++ static int use_dfa;
++ static int use_dfa_checked = 0;
+ #ifdef MBS_SUPPORT
+ int mb_cur_max = MB_CUR_MAX;
+ mbstate_t mbs;
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
++ if (!use_dfa_checked)
++ {
++ char *grep_use_dfa = getenv ("GREP_USE_DFA");
++ if (!grep_use_dfa)
++ {
++#ifdef MBS_SUPPORT
++ /* Turn off DFA when processing multibyte input. */
++ use_dfa = (MB_CUR_MAX == 1);
++#else
++ use_dfa = 1;
++#endif /* MBS_SUPPORT */
++ }
++ else
++ {
++ use_dfa = atoi (grep_use_dfa);
++ }
++
++ use_dfa_checked = 1;
++ }
++
+ buflim = buf + size;
+
+ for (beg = end = buf; end < buflim; beg = end)
+@@ -400,7 +422,8 @@
+ #endif /* MBS_SUPPORT */
+ (kwsm.index < kwset_exact_matches))
+ goto success_in_beg_and_end;
+- if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
++ if (use_dfa &&
++ dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+ }
+ else
+@@ -409,7 +432,9 @@
+ #ifdef MBS_SUPPORT
+ size_t bytes_left = 0;
+ #endif /* MBS_SUPPORT */
+- size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
++ size_t offset = 0;
++ if (use_dfa)
++ offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
+@@ -451,7 +476,7 @@
+ --beg;
+ }
+ /* Successful, no backreferences encountered! */
+- if (!backref)
++ if (use_dfa && !backref)
+ goto success_in_beg_and_end;
+ }
+ else
diff --git a/abs/core-testing/grep/11-tests.patch b/abs/core-testing/grep/11-tests.patch
new file mode 100644
index 0000000..2934a21
--- /dev/null
+++ b/abs/core-testing/grep/11-tests.patch
@@ -0,0 +1,138 @@
+--- grep-2.5.1/tests/Makefile.am.jj 2001-03-07 05:11:27.000000000 +0100
++++ grep-2.5.1/tests/Makefile.am 2004-12-31 11:42:41.595492300 +0100
+@@ -3,7 +3,8 @@
+ AWK=@AWK@
+
+ TESTS = warning.sh khadafy.sh spencer1.sh bre.sh ere.sh \
+- status.sh empty.sh options.sh backref.sh file.sh
++ status.sh empty.sh options.sh backref.sh file.sh \
++ fmbtest.sh
+ EXTRA_DIST = $(TESTS) \
+ khadafy.lines khadafy.regexp \
+ spencer1.awk spencer1.tests \
+--- grep-2.5.1/tests/fmbtest.sh 2004-12-31 13:30:23.942871250 +0100
++++ grep-2.5.1/tests/fmbtest.sh 2004-12-31 14:09:13.219463855 +0100
+@@ -0,0 +1,111 @@
++#!/bin/sh
++
++: ${srcdir=.}
++
++# If cs_CZ.UTF-8 locale doesn't work, skip this test silently
++LC_ALL=cs_CZ.UTF-8 locale -k LC_CTYPE 2>/dev/null | ${GREP} -q charmap.*UTF-8 \
++ || exit 77
++
++failures=0
++
++cat > csinput <<EOF
++01 ŽluÅ¥ouÄká Äíše
++ČíŠE 02
++03 Z Äíší ÄŒiší cosi
++04 Čí
++Å e 05
++06 ČČČČČČČíšČÃÅ Äíš
++07 ČČČ ČČČČíšČÃÅ ÄíšEEEE
++ÄAs 08
++09ÄŒapka
++10ÄŒaSy se mÄ›nÃ
++ÄŒÃÅ¡E11
++ÄŒas12
++ð‡•ÄŒÃÅ¡Eð‡“13
++ŽČÃÅ¡Eð‡“14
++ð‡•ÄŒÃÅ¡EŽ15
++ŽČÃÅ¡EŽ16
++ÄŒÃÅ¡Eð‡“17
++ÄŒÃÅ¡EŽ18
++19ð‡•ÄŒÃÅ¡e
++20ŽČÃÅ¡e
++EOF
++cat > cspatfile <<EOF
++ÄŒÃÅ¡E
++ÄŒas
++EOF
++
++for mode in F G E; do
++
++test1="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode} -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test1" != "11 12 13 14 15 16 17 18"; then
++ echo "Test #1 ${mode} failed: $test1"
++ failures=1
++fi
++
++test2="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test2" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #2 ${mode} failed: $test2"
++ failures=1
++fi
++
++test3="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -e 'ÄŒÃÅ¡E' -e 'ÄŒas' csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test3" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #3 ${mode} failed: $test3"
++ failures=1
++fi
++
++test4="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}iw -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test4" != "01 02 08 13 17 19"; then
++ echo "Test #4 ${mode} failed: $test4"
++ failures=1
++fi
++
++done
++
++# Test that -F --color=always prefers longer matches.
++test5="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -Fi -e 'ÄiÅ¡' -e 'Äiší'`"
++if echo "$test5" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡Ã.*\[.*m\(.\[K\)\?\.\.\.'; then
++ :
++else
++ echo "Test #5 F failed: $test5"
++ failures=1
++fi
++
++for mode in G E; do
++
++# Test that -{G,E} --color=always prefers earlier pattern matches.
++test6="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -${mode}i -e 'ÄiÅ¡' -e 'Äiší'`"
++if echo "$test6" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡.*\[.*m\(.\[K\)\?Ã\.\.\.'; then
++ :
++else
++ echo "Test #6 ${mode} failed: $test6"
++ failures=1
++fi
++
++# Test that -{G,E} --color=always prefers earlier pattern matches.
++test7="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -${mode}i -e 'Äiší' -e 'ÄiÅ¡'`"
++if echo "$test7" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡Ã.*\[.*m\(.\[K\)\?\.\.\.'; then
++ :
++else
++ echo "Test #7 ${mode} failed: $test7"
++ failures=1
++fi
++
++test8="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -e 'Č.šE' -e 'Č[a-f]s' csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test8" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #8 ${mode} failed: $test8"
++ failures=1
++fi
++
++done
++
++exit $failures
+--- grep-2.5.1/tests/Makefile.in.jj 2004-12-31 11:42:53.000000000 +0100
++++ grep-2.5.1/tests/Makefile.in 2004-12-31 11:43:36.871514505 +0100
+@@ -97,7 +97,8 @@ install_sh = @install_sh@
+ AWK = @AWK@
+
+ TESTS = warning.sh khadafy.sh spencer1.sh bre.sh ere.sh \
+- status.sh empty.sh options.sh backref.sh file.sh
++ status.sh empty.sh options.sh backref.sh file.sh \
++ fmbtest.sh
+
+ EXTRA_DIST = $(TESTS) \
+ khadafy.lines khadafy.regexp \
diff --git a/abs/core-testing/grep/12-w.patch b/abs/core-testing/grep/12-w.patch
new file mode 100644
index 0000000..79ae2ae
--- /dev/null
+++ b/abs/core-testing/grep/12-w.patch
@@ -0,0 +1,121 @@
+--- grep-2.5.1a/src/search.c.w 2006-02-20 14:27:27.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-02-20 14:32:07.000000000 +0000
+@@ -507,10 +507,114 @@
+ if (match_words)
+ while (start >= 0)
+ {
+- if ((start == 0 || !WCHAR ((unsigned char) beg[start - 1]))
+- && (len == end - beg - 1
+- || !WCHAR ((unsigned char) beg[start + len])))
+- goto success_in_beg_and_end;
++ int lword_match = 0;
++ if (start == 0)
++ lword_match = 1;
++ else
++ {
++ assert (start > 0);
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ size_t mr;
++ wchar_t pwc;
++
++ /* Locate the start of the multibyte character
++ before the match position (== beg + start). */
++ if (using_utf8)
++ {
++ /* UTF-8 is a special case: scan backwards
++ until we find a 7-bit character or a
++ lead byte. */
++ s = beg + start - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ {
++ /* Scan forwards to find the start of the
++ last complete character before the
++ match position. */
++ size_t bytes_left = start - 1;
++ s = beg;
++ while (bytes_left > 0)
++ {
++ mr = mbrlen (s, bytes_left, &mbs);
++ if (mr == (size_t) -1 || mr == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbs));
++ s++;
++ bytes_left--;
++ continue;
++ }
++ if (mr == (size_t) -2)
++ {
++ memset (&mbs, '\0', sizeof (mbs));
++ break;
++ }
++ s += mr;
++ bytes_left -= mr;
++ }
++ }
++ mr = mbrtowc (&pwc, s, beg + start - s, &mbs);
++ if (mr == (size_t) -2 || mr == (size_t) -1 ||
++ mr == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ lword_match = 1;
++ }
++ else if (!(iswalnum (pwc) || pwc == L'_')
++ && mr == beg + start - s)
++ lword_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (!WCHAR ((unsigned char) beg[start - 1]))
++ lword_match = 1;
++ }
++
++ if (lword_match)
++ {
++ int rword_match = 0;
++ if (start + len == end - beg - 1)
++ rword_match = 1;
++ else
++ {
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
++
++ mr = mbtowc (&nwc, beg + start + len,
++ end - beg - start - len - 1);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ rword_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ rword_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (!WCHAR ((unsigned char) beg[start + len]))
++ rword_match = 1;
++ }
++
++ if (rword_match)
++ {
++ if (!exact)
++ /* Returns the whole line. */
++ goto success_in_beg_and_end;
++ else
++ /* Returns just this word match. */
++ goto success_in_start_and_len;
++ }
++ }
+ if (len > 0)
+ {
+ /* Try a shorter length anchored at the same place. */
diff --git a/abs/core-testing/grep/13-P.patch b/abs/core-testing/grep/13-P.patch
new file mode 100644
index 0000000..9dca4ad
--- /dev/null
+++ b/abs/core-testing/grep/13-P.patch
@@ -0,0 +1,14 @@
+--- grep-2.5.1a/src/search.c.P 2006-02-03 14:08:00.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-02-03 14:11:20.000000000 +0000
+@@ -1234,8 +1234,9 @@
+ char eol = eolbyte;
+ if (!exact)
+ {
+- end = memchr (end, eol, buflim - end);
+- end++;
++ while (end < buflim)
++ if (*end++ == eol)
++ break;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+ }
diff --git a/abs/core-testing/grep/14-mem-exhausted.patch b/abs/core-testing/grep/14-mem-exhausted.patch
new file mode 100644
index 0000000..d6a996d
--- /dev/null
+++ b/abs/core-testing/grep/14-mem-exhausted.patch
@@ -0,0 +1,15 @@
+--- grep-2.5.1a/src/grep.c.mem-exhausted 2006-11-22 14:49:35.000000000 +0000
++++ grep-2.5.1a/src/grep.c 2006-11-22 14:53:12.000000000 +0000
+@@ -299,6 +299,12 @@
+ int cc = 1;
+ char *readbuf;
+ size_t readsize;
++ const size_t max_save = 200 * 1024 * 1024;
++
++ /* Limit the amount of saved data to 200Mb so we don't fail on
++ * large files. */
++ if (save > max_save)
++ save = max_save;
+
+ /* Offset from start of buffer to start of old stuff
+ that we want to save. */
diff --git a/abs/core-testing/grep/15-empty-pattern.patch b/abs/core-testing/grep/15-empty-pattern.patch
new file mode 100644
index 0000000..acb702a
--- /dev/null
+++ b/abs/core-testing/grep/15-empty-pattern.patch
@@ -0,0 +1,36 @@
+--- grep-2.5.1a/src/grep.c.empty-pattern 2006-11-22 19:05:43.000000000 +0000
++++ grep-2.5.1a/src/grep.c 2006-11-22 19:22:04.000000000 +0000
+@@ -1667,9 +1667,6 @@
+ out_invert ^= 1;
+ match_lines = match_words = 0;
+ }
+- else
+- /* Strip trailing newline. */
+- --keycc;
+ }
+ else
+ if (optind < argc)
+--- grep-2.5.1a/src/search.c.empty-pattern 2006-11-22 19:21:11.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-11-22 19:35:06.000000000 +0000
+@@ -204,6 +204,10 @@
+ motif = sep;
+ } while (sep && total != 0);
+
++ /* Strip trailing newline. */
++ if (size && pattern[size - 1] == '\n')
++ size--;
++
+ /* In the match_words and match_lines cases, we use a different pattern
+ for the DFA matcher that will quickly throw out cases that won't work.
+ Then if DFA succeeds we do some hairy stuff using the regex matcher
+@@ -288,6 +292,10 @@
+ motif = sep;
+ } while (sep && total != 0);
+
++ /* Strip trailing newline. */
++ if (size && pattern[size - 1] == '\n')
++ size--;
++
+ /* In the match_words and match_lines cases, we use a different pattern
+ for the DFA matcher that will quickly throw out cases that won't work.
+ Then if DFA succeeds we do some hairy stuff using the regex matcher
diff --git a/abs/core-testing/grep/64-egf-speedup.patch b/abs/core-testing/grep/64-egf-speedup.patch
new file mode 100644
index 0000000..a1fa024
--- /dev/null
+++ b/abs/core-testing/grep/64-egf-speedup.patch
@@ -0,0 +1,791 @@
+--- a/src/search.c.orig
++++ b/src/search.c
+@@ -18,10 +18,15 @@
+
+ /* Written August 1992 by Mike Haertel. */
+
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+
++#include <assert.h>
++
+ #include <sys/types.h>
+
+ #include "mbsupport.h"
+@@ -43,6 +48,9 @@
+ #ifdef HAVE_LIBPCRE
+ # include <pcre.h>
+ #endif
++#ifdef HAVE_LANGINFO_CODESET
++# include <langinfo.h>
++#endif
+
+ #define NCHAR (UCHAR_MAX + 1)
+
+@@ -68,6 +76,19 @@
+ error (2, 0, _("memory exhausted"));
+ }
+
++/* UTF-8 encoding allows some optimizations that we can't otherwise
++ assume in a multibyte encoding. */
++static int using_utf8;
++
++void
++check_utf8 (void)
++{
++#ifdef HAVE_LANGINFO_CODESET
++ if (strcmp (nl_langinfo (CODESET), "UTF-8") == 0)
++ using_utf8 = 1;
++#endif
++}
++
+ #ifndef FGREP_PROGRAM
+ /* DFA compiled regexp. */
+ static struct dfa dfa;
+@@ -134,49 +155,6 @@
+ }
+ #endif /* !FGREP_PROGRAM */
+
+-#ifdef MBS_SUPPORT
+-/* This function allocate the array which correspond to "buf".
+- Then this check multibyte string and mark on the positions which
+- are not single byte character nor the first byte of a multibyte
+- character. Caller must free the array. */
+-static char*
+-check_multibyte_string(char const *buf, size_t size)
+-{
+- char *mb_properties = xmalloc(size);
+- mbstate_t cur_state;
+- wchar_t wc;
+- int i;
+-
+- memset(&cur_state, 0, sizeof(mbstate_t));
+- memset(mb_properties, 0, sizeof(char)*size);
+-
+- for (i = 0; i < size ;)
+- {
+- size_t mbclen;
+- mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+-
+- if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+- {
+- /* An invalid sequence, or a truncated multibyte character.
+- We treat it as a single byte character. */
+- mbclen = 1;
+- }
+- else if (match_icase)
+- {
+- if (iswupper((wint_t)wc))
+- {
+- wc = towlower((wint_t)wc);
+- wcrtomb(buf + i, wc, &cur_state);
+- }
+- }
+- mb_properties[i] = mbclen;
+- i += mbclen;
+- }
+-
+- return mb_properties;
+-}
+-#endif /* MBS_SUPPORT */
+-
+ #if defined(GREP_PROGRAM) || defined(EGREP_PROGRAM)
+ #ifdef EGREP_PROGRAM
+ COMPILE_FCT(Ecompile)
+@@ -193,6 +171,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ #if 0
+ if (match_icase)
+ syntax_bits |= RE_ICASE;
+@@ -303,20 +282,9 @@ hunk6
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- if (start_ptr)
+- start_ptr = case_buf + (start_ptr - buf);
+- buf = case_buf;
+- }
+- if (kwset)
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -329,21 +282,63 @@ hunk6
+ if (kwset)
+ {
+ /* Find a possible match using the KWset matcher. */
+- size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
++ size_t offset;
++#ifdef MBS_SUPPORT
++ /* kwsexec doesn't work with match_icase and multibyte input. */
++ if (match_icase && mb_cur_max > 1)
++ /* Avoid kwset */
++ offset = 0;
++ else
++#endif /* MBS_SUPPORT */
++ offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+- goto failure;
++ return (size_t)-1;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+ end = memchr(beg, eol, buflim - beg);
+ end++;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[beg - buf] == 0)
++ if (mb_cur_max > 1 && bytes_left)
+ continue;
+ #endif
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+- if (kwsm.index < kwset_exact_matches)
++ if (
++#ifdef MBS_SUPPORT
++ !(match_icase && mb_cur_max > 1) &&
++#endif /* MBS_SUPPORT */
++ (kwsm.index < kwset_exact_matches))
+ goto success;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+@@ -351,13 +363,47 @@
+ else
+ {
+ /* No good fixed strings; start with DFA. */
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
+ size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ end = memchr (beg, eol, buflim - beg);
+ end++;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && bytes_left)
++ continue;
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ }
+@@ -475,24 +521,144 @@
+ *match_size = len;
+ ret_val = beg - buf;
+ out:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- free((char*)buf);
+- if (mb_properties)
+- free(mb_properties);
+- }
+-#endif /* MBS_SUPPORT */
+ return ret_val;
+ }
+ #endif /* defined(GREP_PROGRAM) || defined(EGREP_PROGRAM) */
+
++#ifdef MBS_SUPPORT
++static int f_i_multibyte; /* whether we're using the new -Fi MB method */
++static struct
++{
++ wchar_t **patterns;
++ size_t count, maxlen;
++ unsigned char *match;
++} Fimb;
++#endif
++
+ #if defined(GREP_PROGRAM) || defined(FGREP_PROGRAM)
+ COMPILE_FCT(Fcompile)
+ {
++ int mb_cur_max = MB_CUR_MAX;
+ char const *beg, *lim, *err;
+
++ check_utf8 ();
++#ifdef MBS_SUPPORT
++ /* Support -F -i for UTF-8 input. */
++ if (match_icase && mb_cur_max > 1)
++ {
++ mbstate_t mbs;
++ wchar_t *wcpattern = xmalloc ((size + 1) * sizeof (wchar_t));
++ const char *patternend = pattern;
++ size_t wcsize;
++ kwset_t fimb_kwset = NULL;
++ char *starts = NULL;
++ wchar_t *wcbeg, *wclim;
++ size_t allocated = 0;
++
++ memset (&mbs, '\0', sizeof (mbs));
++# ifdef __GNU_LIBRARY__
++ wcsize = mbsnrtowcs (wcpattern, &patternend, size, size, &mbs);
++ if (patternend != pattern + size)
++ wcsize = (size_t) -1;
++# else
++ {
++ char *patterncopy = xmalloc (size + 1);
++
++ memcpy (patterncopy, pattern, size);
++ patterncopy[size] = '\0';
++ patternend = patterncopy;
++ wcsize = mbsrtowcs (wcpattern, &patternend, size, &mbs);
++ if (patternend != patterncopy + size)
++ wcsize = (size_t) -1;
++ free (patterncopy);
++ }
++# endif
++ if (wcsize + 2 <= 2)
++ {
++fimb_fail:
++ free (wcpattern);
++ free (starts);
++ if (fimb_kwset)
++ kwsfree (fimb_kwset);
++ free (Fimb.patterns);
++ Fimb.patterns = NULL;
++ }
++ else
++ {
++ if (!(fimb_kwset = kwsalloc (NULL)))
++ error (2, 0, _("memory exhausted"));
++
++ starts = xmalloc (mb_cur_max * 3);
++ wcbeg = wcpattern;
++ do
++ {
++ int i;
++ size_t wclen;
++
++ if (Fimb.count >= allocated)
++ {
++ if (allocated == 0)
++ allocated = 128;
++ else
++ allocated *= 2;
++ Fimb.patterns = xrealloc (Fimb.patterns,
++ sizeof (wchar_t *) * allocated);
++ }
++ Fimb.patterns[Fimb.count++] = wcbeg;
++ for (wclim = wcbeg;
++ wclim < wcpattern + wcsize && *wclim != L'\n'; ++wclim)
++ *wclim = towlower (*wclim);
++ *wclim = L'\0';
++ wclen = wclim - wcbeg;
++ if (wclen > Fimb.maxlen)
++ Fimb.maxlen = wclen;
++ if (wclen > 3)
++ wclen = 3;
++ if (wclen == 0)
++ {
++ if ((err = kwsincr (fimb_kwset, "", 0)) != 0)
++ error (2, 0, err);
++ }
++ else
++ for (i = 0; i < (1 << wclen); i++)
++ {
++ char *p = starts;
++ int j, k;
++
++ for (j = 0; j < wclen; ++j)
++ {
++ wchar_t wc = wcbeg[j];
++ if (i & (1 << j))
++ {
++ wc = towupper (wc);
++ if (wc == wcbeg[j])
++ continue;
++ }
++ k = wctomb (p, wc);
++ if (k <= 0)
++ goto fimb_fail;
++ p += k;
++ }
++ if ((err = kwsincr (fimb_kwset, starts, p - starts)) != 0)
++ error (2, 0, err);
++ }
++ if (wclim < wcpattern + wcsize)
++ ++wclim;
++ wcbeg = wclim;
++ }
++ while (wcbeg < wcpattern + wcsize);
++ f_i_multibyte = 1;
++ kwset = fimb_kwset;
++ free (starts);
++ Fimb.match = xmalloc (Fimb.count);
++ if ((err = kwsprep (kwset)) != 0)
++ error (2, 0, err);
++ return;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
++
+ kwsinit ();
+ beg = pattern;
+ do
+@@ -511,6 +677,76 @@
+ error (2, 0, err);
+ }
+
++#ifdef MBS_SUPPORT
++static int
++Fimbexec (const char *buf, size_t size, size_t *plen, int exact)
++{
++ size_t len, letter, i;
++ int ret = -1;
++ mbstate_t mbs;
++ wchar_t wc;
++ int patterns_left;
++
++ assert (match_icase && f_i_multibyte == 1);
++ assert (MB_CUR_MAX > 1);
++
++ memset (&mbs, '\0', sizeof (mbs));
++ memset (Fimb.match, '\1', Fimb.count);
++ letter = len = 0;
++ patterns_left = 1;
++ while (patterns_left && len <= size)
++ {
++ size_t c;
++
++ patterns_left = 0;
++ if (len < size)
++ {
++ c = mbrtowc (&wc, buf + len, size - len, &mbs);
++ if (c + 2 <= 2)
++ return ret;
++
++ wc = towlower (wc);
++ }
++ else
++ {
++ c = 1;
++ wc = L'\0';
++ }
++
++ for (i = 0; i < Fimb.count; i++)
++ {
++ if (Fimb.match[i])
++ {
++ if (Fimb.patterns[i][letter] == L'\0')
++ {
++ /* Found a match. */
++ *plen = len;
++ if (!exact && !match_words)
++ return 0;
++ else
++ {
++ /* For -w or exact look for longest match. */
++ ret = 0;
++ Fimb.match[i] = '\0';
++ continue;
++ }
++ }
++
++ if (Fimb.patterns[i][letter] == wc)
++ patterns_left = 1;
++ else
++ Fimb.match[i] = '\0';
++ }
++ }
++
++ len += c;
++ letter++;
++ }
++
++ return ret;
++}
++#endif /* MBS_SUPPORT */
++
+ EXECUTE_FCT(Fexecute)
+ {
+ register char const *beg, *try, *end;
+@@ -519,69 +755,256 @@
+ struct kwsmatch kwsmatch;
+ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- if (start_ptr)
+- start_ptr = case_buf + (start_ptr - buf);
+- buf = case_buf;
+- }
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ const char *last_char = NULL;
+ #endif /* MBS_SUPPORT */
+
+ for (beg = start_ptr ? start_ptr : buf; beg <= buf + size; beg++)
+ {
+ size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
+ if (offset == (size_t) -1)
+- goto failure;
++ return offset;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+- continue; /* It is a part of multibyte character. */
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character: no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ continue;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+ beg += offset;
++#ifdef MBS_SUPPORT
++ /* For f_i_multibyte, the string at beg now matches first 3 chars of
++ one of the search strings (less if there are shorter search strings).
++ See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, buf + size - beg, &kwsmatch.size[0], start_ptr == NULL))
++ goto next_char;
++#endif /* MBS_SUPPORT */
+ len = kwsmatch.size[0];
+ if (start_ptr && !match_words)
+ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+- continue;
++ goto next_char;
+ if (beg + len < buf + size && beg[len] != eol)
+- continue;
++ goto next_char;
+ goto success;
+ }
+ else if (match_words)
+- for (try = beg; len; )
+- {
+- if (try > buf && WCHAR((unsigned char) try[-1]))
+- break;
+- if (try + len < buf + size && WCHAR((unsigned char) try[len]))
+- {
+- offset = kwsexec (kwset, beg, --len, &kwsmatch);
+- if (offset == (size_t) -1)
+- break;
+- try = beg + offset;
+- len = kwsmatch.size[0];
+- }
+- else if (!start_ptr)
+- goto success;
+- else
+- goto success_in_beg_and_len;
+- } /* for (try) */
+- else
+- goto success;
+- } /* for (beg in buf) */
++ {
++ while (len)
++ {
++ int word_match = 0;
++ if (beg > buf)
++ {
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ int mr;
++ wchar_t pwc;
++
++ if (using_utf8)
++ {
++ s = beg - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ s = last_char;
++ mr = mbtowc (&pwc, s, beg - s);
++ if (mr <= 0)
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ else if ((iswalnum (pwc) || pwc == L'_')
++ && mr == (int) (beg - s))
++ goto next_char;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (WCHAR ((unsigned char) beg[-1]))
++ goto next_char;
++ }
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
+
+- failure:
+- ret_val = -1;
+- goto out;
++ mr = mbtowc (&nwc, beg + len, buf + size - beg - len);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ word_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ word_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (beg + len >= buf + size || !WCHAR ((unsigned char) beg[len]))
++ word_match = 1;
++ if (word_match)
++ {
++ if (start_ptr == NULL)
++ /* Returns the whole line now we know there's a word match. */
++ goto success;
++ else {
++ /* Returns just this word match. */
++ *match_size = len;
++ return beg - buf;
++ }
++ }
++ if (len > 0)
++ {
++ /* Try a shorter length anchored at the same place. */
++ --len;
++ offset = kwsexec (kwset, beg, len, &kwsmatch);
++
++ if (offset == -1)
++ goto next_char; /* Try a different anchor. */
++#ifdef MBS_SUPPORT
++
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ {
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++ }
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ goto next_char; /* Try a different anchor. */
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
++ beg += offset;
++#ifdef MBS_SUPPORT
++ /* The string at beg now matches first 3 chars of one of
++ the search strings (less if there are shorter search
++ strings). See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, len - offset, &kwsmatch.size[0],
++ start_ptr == NULL))
++ goto next_char;
++#endif /* MBS_SUPPORT */
++ len = kwsmatch.size[0];
++ }
++ }
++ }
++ else
++ goto success;
++next_char:;
++#ifdef MBS_SUPPORT
++ /* Advance to next character. For MB_CUR_MAX == 1 case this is handled
++ by ++beg above. */
++ if (mb_cur_max > 1)
++ {
++ if (using_utf8)
++ {
++ unsigned char c = *beg;
++ if (c >= 0xc2)
++ {
++ if (c < 0xe0)
++ ++beg;
++ else if (c < 0xf0)
++ beg += 2;
++ else if (c < 0xf8)
++ beg += 3;
++ else if (c < 0xfc)
++ beg += 4;
++ else if (c < 0xfe)
++ beg += 5;
++ }
++ }
++ else
++ {
++ size_t l = mbrlen (beg, buf + size - beg, &mbs);
++
++ last_char = beg;
++ if (l + 2 >= 2)
++ beg += l - 1;
++ else
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ }
++ }
++#endif /* MBS_SUPPORT */
++ }
++
++ return -1;
+
+ success:
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ end = beg + len;
++ while (end < buf + size)
++ {
++ size_t mlen = mbrlen (end, buf + size - end, &mbs);
++ if (mlen == (size_t) -1 || mlen == (size_t) -2 || mlen == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ mlen = 1;
++ }
++ if (mlen == 1 && *end == eol)
++ break;
++
++ end += mlen;
++ }
++ }
++ else
++ #endif /* MBS_SUPPORT */
+ end = memchr (beg + len, eol, (buf + size) - (beg + len));
+ end++;
+ while (buf < beg && beg[-1] != eol)
+@@ -591,15 +1016,6 @@
+ *match_size = len;
+ ret_val = beg - buf;
+ out:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- free((char*)buf);
+- if (mb_properties)
+- free(mb_properties);
+- }
+-#endif /* MBS_SUPPORT */
+ return ret_val;
+ }
+ #endif /* defined(GREP_PROGRAM) || defined(FGREP_PROGRAM) */
diff --git a/abs/core-testing/grep/PKGBUILD b/abs/core-testing/grep/PKGBUILD
new file mode 100644
index 0000000..168d2d3
--- /dev/null
+++ b/abs/core-testing/grep/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=grep
+pkgver=2.5.3
+pkgrel=12
+pkgdesc="A string search utility"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/grep/grep.html"
+groups=('base')
+depends=('glibc' 'pcre')
+makedepends=('texinfo>=4.8a')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz
+ # patches from fedora cvs
+ #01-fgrep.patch
+ #02-bracket.patch
+ #03-i18n.patch
+ #04-oi.patch
+ #05-manpage.patch
+ #06-color.patch
+ #07-icolor.patch
+ #08-skip.patch
+ #09-egf-speedup.patch
+ #10-dfa-optional.patch
+ #11-tests.patch
+ #12-w.patch
+ #13-P.patch
+ 14-mem-exhausted.patch
+ 15-empty-pattern.patch
+ 64-egf-speedup.patch
+)
+md5sums=('4f371f25f413f700fb1984b878421f9d'
+ 'bc937da562d468f32c1fef2894610283'
+ 'f421415b679ebcc9152797caaa0b1d51'
+ 'efbe9d49d71a74092db6b86224b09fdd')
+
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ for i in ../*.patch; do
+ patch -Np1 -i ../$i
+ done
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mkdir $startdir/pkg/bin
+ mv $startdir/pkg/usr/bin/*grep $startdir/pkg/bin/
+ rmdir $startdir/pkg/usr/bin
+}
diff --git a/abs/core-testing/groff/PKGBUILD b/abs/core-testing/groff/PKGBUILD
new file mode 100644
index 0000000..5183acc
--- /dev/null
+++ b/abs/core-testing/groff/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=groff
+pkgver=1.19.2
+pkgrel=13
+pkgdesc="GNU troff text-formatting system"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/groff/groff.html"
+license=('GPL')
+groups=('base')
+depends=('perl' 'gcc-libs')
+source=(ftp://ftp.gnu.org/gnu/groff/groff-$pkgver.tar.gz
+ man-utf8.tmac)
+md5sums=('f7c9cf2e4b9967d3af167d7c9fadaae4'
+ 'faefbef2b05ee5438b632464607c6cc4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --without-x
+ mkdir -p $startdir/pkg/usr
+ make -j1 || return 1
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin
+ # needed for xman
+ ln -s eqn geqn
+ ln -s tbl gtbl
+ ln -s soelim zsoelim
+ rm -rf $startdir/pkg/usr/lib
+
+ # Fix some issues when encoding to utf8 man pages
+ # The output chars don't match keyboard chars...
+ cat $startdir/src/man-utf8.tmac >> \
+ $startdir/pkg/usr/share/groff/site-tmac/man.local
+}
diff --git a/abs/core-testing/groff/man-utf8.tmac b/abs/core-testing/groff/man-utf8.tmac
new file mode 100644
index 0000000..17c0983
--- /dev/null
+++ b/abs/core-testing/groff/man-utf8.tmac
@@ -0,0 +1,9 @@
+.\" This file is loaded after an-old.tmac.
+.\" Put any local modifications to an-old.tmac here.
+
+.if '\*[.T]'utf8' \
+. char \- \N'45'
+. char - \N'45'
+. char ' \N'39'
+..
+
diff --git a/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch b/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch
new file mode 100644
index 0000000..121941c
--- /dev/null
+++ b/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch
@@ -0,0 +1,623 @@
+Fix NX segfaulting on amd64.
+
+Patch by Peter Jones.
+
+http://lists.gnu.org/archive/html/bug-grub/2005-03/msg00011.html
+
+--- grub-0.97/grub/asmstub.c
++++ grub-0.97/grub/asmstub.c
+@@ -42,6 +42,7 @@
+ #include <sys/time.h>
+ #include <termios.h>
+ #include <signal.h>
++#include <sys/mman.h>
+
+ #ifdef __linux__
+ # include <sys/ioctl.h> /* ioctl */
+@@ -79,7 +80,7 @@
+ struct apm_info apm_bios_info;
+
+ /* Emulation requirements. */
+-char *grub_scratch_mem = 0;
++void *grub_scratch_mem = 0;
+
+ struct geometry *disks = 0;
+
+@@ -103,14 +104,62 @@
+ static unsigned int serial_speed;
+ #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
+
++/* This allocates page-aligned storage of the specified size, which must be
++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
++ */
++#ifdef __linux__
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE;
++
++#ifdef MAP_32BIT
++ mmap_flags |= MAP_32BIT;
++#endif
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
++}
++#else /* !defined(__linux__) */
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int fd = 0, offset = 0, ret = 0;
++ void *pa = MAP_FAILED;
++ char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
++ errno_t e;
++
++ fd = mkstemp(template);
++ if (fd < 0)
++ return pa;
++
++ unlink(template);
++
++ ret = ftruncate(fd, len);
++ if (ret < 0)
++ return pa;
++
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
++ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset);
++
++ e = errno;
++ close(fd);
++ errno = e;
++ return pa;
++}
++#endif /* defined(__linux__) */
++
+ /* The main entry point into this mess. */
+ int
+ grub_stage2 (void)
+ {
+ /* These need to be static, because they survive our stack transitions. */
+ static int status = 0;
+- static char *realstack;
+- char *scratch, *simstack;
++ static void *realstack;
++ void *simstack_alloc_base, *simstack;
++ size_t simstack_size, page_size;
+ int i;
+
+ /* We need a nested function so that we get a clean stack frame,
+@@ -140,9 +189,35 @@
+ }
+
+ assert (grub_scratch_mem == 0);
+- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
+- assert (scratch);
+- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
++
++ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
++ * make sure the memory is aligned to a multiple of the system's
++ * page size */
++ page_size = sysconf (_SC_PAGESIZE);
++ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
++ if (simstack_size % page_size)
++ {
++ /* If we're not on a page_size boundary, round up to the next one */
++ simstack_size &= ~(page_size-1);
++ simstack_size += page_size;
++ }
++
++ /* Add one for a PROT_NONE boundary page at each end. */
++ simstack_size += 2 * page_size;
++
++ simstack_alloc_base = grub_mmap_alloc(simstack_size);
++ assert (simstack_alloc_base != MAP_FAILED);
++
++ /* mark pages above and below our simstack area as innaccessable.
++ * If the implementation we're using doesn't support that, then the
++ * new protection modes are undefined. It's safe to just ignore
++ * them, though. It'd be nice if we knew that we'd get a SEGV for
++ * touching the area, but that's all. it'd be nice to have. */
++ mprotect (simstack_alloc_base, page_size, PROT_NONE);
++ mprotect ((void *)((unsigned long)simstack_alloc_base +
++ simstack_size - page_size), page_size, PROT_NONE);
++
++ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
+
+ /* FIXME: simulate the memory holes using mprot, if available. */
+
+@@ -215,7 +290,7 @@
+ device_map = 0;
+ free (disks);
+ disks = 0;
+- free (scratch);
++ munmap(simstack_alloc_base, simstack_size);
+ grub_scratch_mem = 0;
+
+ if (serial_device)
+--- grub-0.97/stage2/builtins.c
++++ grub-0.97/stage2/builtins.c
+@@ -131,63 +131,98 @@
+ }
+
+
++/* blocklist_read_helper nee disk_read_blocklist_func was a nested
++ * function, to which pointers were taken and exposed globally. Even
++ * in the GNU-C nested functions extension, they have local linkage,
++ * and aren't guaranteed to be accessable *at all* outside of their
++ * containing scope.
++ *
++ * Above and beyond all of that, the variables within blocklist_func_context
++ * are originally local variables, with local (not even static) linkage,
++ * from within blocklist_func. These were each referenced by
++ * disk_read_blocklist_func, which is only called from other functions
++ * through a globally scoped pointer.
++ *
++ * The documentation in GCC actually uses the words "all hell will break
++ * loose" to describe this scenario.
++ *
++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
++ * about it (possibly because of the scoping madness?)
++ */
++
++static struct {
++ int start_sector;
++ int num_sectors;
++ int num_entries;
++ int last_length;
++} blocklist_func_context = {
++ .start_sector = 0,
++ .num_sectors = 0,
++ .num_entries = 0,
++ .last_length = 0
++};
++
++/* Collect contiguous blocks into one entry as many as possible,
++ and print the blocklist notation on the screen. */
++static void
++blocklist_read_helper (int sector, int offset, int length)
++{
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++ int *last_length = &blocklist_func_context.last_length;
++
++ if (*num_sectors > 0)
++ {
++ if (*start_sector + *num_sectors == sector
++ && offset == 0 && *last_length == SECTOR_SIZE)
++ {
++ *num_sectors++;
++ *last_length = length;
++ return;
++ }
++ else
++ {
++ if (*last_length == SECTOR_SIZE)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
++ else if (*num_sectors > 1)
++ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors-1,
++ *start_sector + *num_sectors-1 - part_start,
++ *last_length);
++ else
++ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *last_length);
++ *num_entries++;
++ *num_sectors = 0;
++ }
++ }
++
++ if (offset > 0)
++ {
++ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
++ sector-part_start, offset, offset+length);
++ *num_entries++;
++ }
++ else
++ {
++ *start_sector = sector;
++ *num_sectors = 1;
++ *last_length = length;
++ }
++}
++
+ /* blocklist */
+ static int
+ blocklist_func (char *arg, int flags)
+ {
+ char *dummy = (char *) RAW_ADDR (0x100000);
+- int start_sector;
+- int num_sectors = 0;
+- int num_entries = 0;
+- int last_length = 0;
+-
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Collect contiguous blocks into one entry as many as possible,
+- and print the blocklist notation on the screen. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (num_sectors > 0)
+- {
+- if (start_sector + num_sectors == sector
+- && offset == 0 && last_length == SECTOR_SIZE)
+- {
+- num_sectors++;
+- last_length = length;
+- return;
+- }
+- else
+- {
+- if (last_length == SECTOR_SIZE)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
+- else if (num_sectors > 1)
+- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, num_sectors-1,
+- start_sector + num_sectors-1 - part_start,
+- last_length);
+- else
+- grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, last_length);
+- num_entries++;
+- num_sectors = 0;
+- }
+- }
+-
+- if (offset > 0)
+- {
+- grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
+- sector-part_start, offset, offset+length);
+- num_entries++;
+- }
+- else
+- {
+- start_sector = sector;
+- num_sectors = 1;
+- last_length = length;
+- }
+- }
+
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++
+ /* Open the file. */
+ if (! grub_open (arg))
+ return 1;
+@@ -204,15 +241,15 @@
+ grub_printf (")");
+
+ /* Read in the whole file to DUMMY. */
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = blocklist_read_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+ /* The last entry may not be printed yet. Don't check if it is a
+ * full sector, since it doesn't matter if we read too much. */
+- if (num_sectors > 0)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
++ if (*num_sectors > 0)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
+
+ grub_printf ("\n");
+
+@@ -1868,6 +1905,77 @@
+
+
+ /* install */
++static struct {
++ int saved_sector;
++ int installaddr;
++ int installlist;
++ char *stage2_first_buffer;
++} install_func_context = {
++ .saved_sector = 0,
++ .installaddr = 0,
++ .installlist = 0,
++ .stage2_first_buffer = NULL,
++};
++
++/* Save the first sector of Stage2 in STAGE2_SECT. */
++/* Formerly disk_read_savesect_func with local scope inside install_func */
++static void
++install_savesect_helper(int sector, int offset, int length)
++{
++ if (debug)
++ printf ("[%d]", sector);
++
++ /* ReiserFS has files which sometimes contain data not aligned
++ on sector boundaries. Returning an error is better than
++ silently failing. */
++ if (offset != 0 || length != SECTOR_SIZE)
++ errnum = ERR_UNALIGNED;
++
++ install_func_context.saved_sector = sector;
++}
++
++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */
++/* Formerly disk_read_blocklist_func with local scope inside install_func */
++static void
++install_blocklist_helper (int sector, int offset, int length)
++{
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* Was the last sector full? */
++ static int last_length = SECTOR_SIZE;
++
++ if (debug)
++ printf("[%d]", sector);
++
++ if (offset != 0 || last_length != SECTOR_SIZE)
++ {
++ /* We found a non-sector-aligned data block. */
++ errnum = ERR_UNALIGNED;
++ return;
++ }
++
++ last_length = length;
++
++ if (*((unsigned long *) (*installlist - 4))
++ + *((unsigned short *) *installlist) != sector
++ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
++ {
++ *installlist -= 8;
++
++ if (*((unsigned long *) (*installlist - 8)))
++ errnum = ERR_WONT_FIT;
++ else
++ {
++ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
++ *((unsigned long *) (*installlist - 4)) = sector;
++ }
++ }
++
++ *((unsigned short *) *installlist) += 1;
++ *installaddr += 512;
++}
++
+ static int
+ install_func (char *arg, int flags)
+ {
+@@ -1875,8 +1983,12 @@
+ char *stage1_buffer = (char *) RAW_ADDR (0x100000);
+ char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
+ char *old_sect = stage2_buffer + SECTOR_SIZE;
+- char *stage2_first_buffer = old_sect + SECTOR_SIZE;
+- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
++ /* stage2_first_buffer used to be defined as:
++ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* and stage2_second_buffer was:
++ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
++ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
+ /* XXX: Probably SECTOR_SIZE is reasonable. */
+ char *config_filename = stage2_second_buffer + SECTOR_SIZE;
+ char *dummy = config_filename + SECTOR_SIZE;
+@@ -1885,10 +1997,11 @@
+ int src_drive, src_partition, src_part_start;
+ int i;
+ struct geometry dest_geom, src_geom;
+- int saved_sector;
++ int *saved_sector = &install_func_context.saved_sector;
+ int stage2_first_sector, stage2_second_sector;
+ char *ptr;
+- int installaddr, installlist;
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
+ /* Point to the location of the name of a configuration file in Stage 2. */
+ char *config_file_location;
+ /* If FILE is a Stage 1.5? */
+@@ -1897,67 +2010,13 @@
+ int is_open = 0;
+ /* If LBA is forced? */
+ int is_force_lba = 0;
+- /* Was the last sector full? */
+- int last_length = SECTOR_SIZE;
+-
++
++ *stage2_first_buffer = old_sect + SECTOR_SIZE;
+ #ifdef GRUB_UTIL
+ /* If the Stage 2 is in a partition mounted by an OS, this will store
+ the filename under the OS. */
+ char *stage2_os_file = 0;
+ #endif /* GRUB_UTIL */
+-
+- auto void disk_read_savesect_func (int sector, int offset, int length);
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Save the first sector of Stage2 in STAGE2_SECT. */
+- auto void disk_read_savesect_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf ("[%d]", sector);
+-
+- /* ReiserFS has files which sometimes contain data not aligned
+- on sector boundaries. Returning an error is better than
+- silently failing. */
+- if (offset != 0 || length != SECTOR_SIZE)
+- errnum = ERR_UNALIGNED;
+-
+- saved_sector = sector;
+- }
+-
+- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
+- INSTALLSECT. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf("[%d]", sector);
+-
+- if (offset != 0 || last_length != SECTOR_SIZE)
+- {
+- /* We found a non-sector-aligned data block. */
+- errnum = ERR_UNALIGNED;
+- return;
+- }
+-
+- last_length = length;
+-
+- if (*((unsigned long *) (installlist - 4))
+- + *((unsigned short *) installlist) != sector
+- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
+- {
+- installlist -= 8;
+-
+- if (*((unsigned long *) (installlist - 8)))
+- errnum = ERR_WONT_FIT;
+- else
+- {
+- *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
+- *((unsigned long *) (installlist - 4)) = sector;
+- }
+- }
+-
+- *((unsigned short *) installlist) += 1;
+- installaddr += 512;
+- }
+
+ /* First, check the GNU-style long option. */
+ while (1)
+@@ -1987,10 +2049,10 @@
+ addr = skip_to (0, file);
+
+ /* Get the installation address. */
+- if (! safe_parse_maxint (&addr, &installaddr))
++ if (! safe_parse_maxint (&addr, installaddr))
+ {
+ /* ADDR is not specified. */
+- installaddr = 0;
++ *installaddr = 0;
+ ptr = addr;
+ errnum = 0;
+ }
+@@ -2084,17 +2146,17 @@
+ = (dest_drive & BIOS_FLAG_FIXED_DISK);
+
+ /* Read the first sector of Stage 2. */
+- disk_read_hook = disk_read_savesect_func;
+- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++ disk_read_hook = install_savesect_helper;
++ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_first_sector = saved_sector;
++ stage2_first_sector = *saved_sector;
+
+ /* Read the second sector of Stage 2. */
+ if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_second_sector = saved_sector;
++ stage2_second_sector = *saved_sector;
+
+ /* Check for the version of Stage 2. */
+ if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
+@@ -2110,27 +2172,27 @@
+
+ /* If INSTALLADDR is not specified explicitly in the command-line,
+ determine it by the Stage 2 id. */
+- if (! installaddr)
++ if (! *installaddr)
+ {
+ if (! is_stage1_5)
+ /* Stage 2. */
+- installaddr = 0x8000;
++ *installaddr = 0x8000;
+ else
+ /* Stage 1.5. */
+- installaddr = 0x2000;
++ *installaddr = 0x2000;
+ }
+
+ *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
+ = stage2_first_sector;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
+- = installaddr;
++ = *installaddr;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
+- = installaddr >> 4;
++ = *installaddr >> 4;
+
+- i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
++ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
+ while (*((unsigned long *) i))
+ {
+- if (i < (int) stage2_first_buffer
++ if (i < (int) *stage2_first_buffer
+ || (*((int *) (i - 4)) & 0x80000000)
+ || *((unsigned short *) i) >= 0xA00
+ || *((short *) (i + 2)) == 0)
+@@ -2144,13 +2206,13 @@
+ i -= 8;
+ }
+
+- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
+- installaddr += SECTOR_SIZE;
++ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
++ *installaddr += SECTOR_SIZE;
+
+ /* Read the whole of Stage2 except for the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = install_blocklist_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+@@ -2233,7 +2295,7 @@
+ /* Skip the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_savesect_func;
++ disk_read_hook = install_savesect_helper;
+ if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+@@ -2303,7 +2365,7 @@
+ else
+ #endif /* GRUB_UTIL */
+ {
+- if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
++ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
+ goto fail;
+ }
+ }
+@@ -2325,7 +2387,7 @@
+ goto fail;
+ }
+
+- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
+ {
+ fclose (fp);
+ errnum = ERR_WRITE;
+@@ -2352,7 +2414,7 @@
+ goto fail;
+
+ if (! devwrite (stage2_first_sector - src_part_start, 1,
+- stage2_first_buffer))
++ *stage2_first_buffer))
+ goto fail;
+
+ if (! devwrite (stage2_second_sector - src_part_start, 1,
+--- grub-0.97/stage2/shared.h
++++ grub-0.97/stage2/shared.h
+@@ -36,8 +36,8 @@
+
+ /* Maybe redirect memory requests through grub_scratch_mem. */
+ #ifdef GRUB_UTIL
+-extern char *grub_scratch_mem;
+-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
++extern void *grub_scratch_mem;
++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
+ # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
+ #else
+ # define RAW_ADDR(x) (x)
diff --git a/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff b/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff
new file mode 100644
index 0000000..ccf5f3e
--- /dev/null
+++ b/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff
@@ -0,0 +1,16 @@
+--- grub-0.96/stage2/boot.c
++++ grub-0.96/stage2/boot.c
+@@ -824,8 +824,11 @@
+ moveto = (mbi.mem_upper + 0x400) << 10;
+
+ moveto = (moveto - len) & 0xfffff000;
+- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
+- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
++ max_addr = LINUX_INITRD_MAX_ADDRESS;
++ if (lh->header == LINUX_MAGIC_SIGNATURE &&
++ lh->version >= 0x0203 &&
++ lh->initrd_addr_max < max_addr)
++ max_addr = lh->initrd_addr_max;
+ if (moveto + len >= max_addr)
+ moveto = (max_addr - len) & 0xfffff000;
+
diff --git a/abs/core-testing/grub/PKGBUILD b/abs/core-testing/grub/PKGBUILD
new file mode 100644
index 0000000..398d782
--- /dev/null
+++ b/abs/core-testing/grub/PKGBUILD
@@ -0,0 +1,81 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=grub
+pkgver=0.97
+pkgrel=21
+pkgdesc="A GNU multiboot boot loader"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/grub/"
+groups=('base')
+depends=('ncurses' 'diffutils' 'sed')
+source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz
+ menu.lst
+ install-grub
+ 040_all_grub-0.96-nxstack.patch
+ 05-grub-0.97-initrdaddr.diff
+ i2o.patch
+ special-devices.patch
+ more-raid.patch
+ intelmac.patch
+ grub-inode-size.patch
+ grub-0.97-gpt.patch)
+backup=('boot/grub/menu.lst')
+md5sums=('cd3f3eb54446be6003156158d51f4884'
+ 'cce52ae9ee1f8686cd700b3c967e78f9'
+ '3182c4ae4963a16930bc772bba89dacf'
+ 'eb9d69c46af3a0667c1f651817d7f075'
+ 'ccd2d757e79e3a03dc19ede7391ed328'
+ '826fdbf446067f9861baf9f6a69a4583'
+ '49f6d4bcced0bc8bbcff273f3254bbfa'
+ 'f41f702014a064918d7afc6fc23baa6e'
+ '175dc6b9f4ab94e8056c3afb3e34460a'
+ 'ada26cbc681907823cc4ff2a55b97866'
+ '52cd09a6966f12961d11f7b3b7e76bd2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ #set destination architecture here
+ DESTARCH="i686"
+ #DESTARCH="x86_64"
+
+ # optimizations break the build -- disable them
+ # adding special devices to grub, patches are from fedora
+ patch -Np1 -i ../special-devices.patch || return 1
+ patch -Np1 -i ../i2o.patch || return 1
+ patch -Np1 -i ../more-raid.patch || return 1
+ patch -Np1 -i ../intelmac.patch || return 1
+ # Add support for bigger inode size to e2fs_stage1_5
+ patch -Np1 -i ../grub-inode-size.patch || return 1
+ # Add gpt support
+ # http://bugs.archlinux.org/task/9864
+ patch -Np1 -i ../grub-0.97-gpt.patch || return 1
+
+ #arch64 fixes for static build
+ if [ "$CARCH" = "x86_64" ]; then
+ echo "this package has to be built on i686, won't compile on x86_64"
+ sleep 5
+ else
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # patch from gentoo for fixing a segfault
+ patch -Np1 -i ../040_all_grub-0.96-nxstack.patch || return 1
+ # patch from frugalware to make it boot when more than 2GB ram installed
+ patch -Np1 -i ../05-grub-0.97-initrdaddr.diff || return 1
+ CFLAGS="-static" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin
+ else
+ CFLAGS= ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin
+ fi
+ fi
+
+ CFLAGS= make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../menu.lst $startdir/pkg/boot/grub/menu.lst
+ install -D -m755 ../install-grub $startdir/pkg/sbin/install-grub
+
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # fool makepkg into building a x86_64 package
+ export CARCH="x86_64"
+ fi
+}
diff --git a/abs/core-testing/grub/grub-0.97-gpt.patch b/abs/core-testing/grub/grub-0.97-gpt.patch
new file mode 100644
index 0000000..7b1a55c
--- /dev/null
+++ b/abs/core-testing/grub/grub-0.97-gpt.patch
@@ -0,0 +1,315 @@
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/builtins.c grub-0.96-patched/stage2/builtins.c
+--- grub-0.96/stage2/builtins.c 2004-06-20 09:33:04.000000000 -0400
++++ grub-0.96-patched/stage2/builtins.c 2007-01-04 13:56:06.000000000 -0500
+@@ -1229,14 +1229,15 @@
+ for (drive = 0x80; drive < 0x88; drive++)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int type, entry;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int type, entry, gpt_count, gpt_size;
+ char buf[SECTOR_SIZE];
+
+ current_drive = drive;
+ while (next_partition (drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, buf))
++ &ext_offset, &gpt_offset,
++ &gpt_count, &gpt_size, buf))
+ {
+ if (type != PC_SLICE_TYPE_NONE
+ && ! IS_PC_SLICE_TYPE_BSD (type)
+@@ -2806,8 +2807,8 @@
+ {
+ int new_type;
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* Get the drive and the partition. */
+@@ -2844,7 +2845,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/disk_io.c grub-0.96-patched/stage2/disk_io.c
+--- grub-0.96/stage2/disk_io.c 2004-05-23 12:35:24.000000000 -0400
++++ grub-0.96-patched/stage2/disk_io.c 2007-01-04 14:01:08.000000000 -0500
+@@ -21,6 +21,7 @@
+
+ #include <shared.h>
+ #include <filesys.h>
++#include <gpt.h>
+
+ #ifdef SUPPORT_NETBOOT
+ # define GRUB 1
+@@ -502,8 +503,8 @@
+ set_partition_hidden_flag (int hidden)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* The drive must be a hard disk. */
+@@ -524,7 +525,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+@@ -577,11 +585,14 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf)
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf)
+ {
+ /* Forward declarations. */
+ auto int next_bsd_partition (void);
+ auto int next_pc_slice (void);
++ auto int next_gpt_slice(void);
+
+ /* Get next BSD partition in current PC slice. */
+ int next_bsd_partition (void)
+@@ -666,6 +677,40 @@
+ return 0;
+ }
+
++ /* If this is a GPT partition table, read it as such. */
++ if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT)
++ {
++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
++
++ /* Read in the GPT Partition table header. */
++ if (! rawread (drive, 1, 0, SECTOR_SIZE, buf))
++ return 0;
++
++ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
++ {
++ /* Let gpt_offset point to the first entry in the GPT
++ partition table. This can also be used by callers of
++ next_partition to determine if a entry comes from a
++ GPT partition table or not. */
++ *gpt_offset = hdr->partitions;
++ *gpt_count = hdr->maxpart;
++ *gpt_size = hdr->partentry_size;
++
++ return next_gpt_slice();
++ }
++ else
++ {
++ /* This is not a valid header for a GPT partition table.
++ Re-read the MBR or the boot sector of the extended
++ partition. */
++ if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
++ return 0;
++ }
++ }
++
++ /* Not a GPT partition. */
++ *gpt_offset = 0;
++
+ /* Increase the entry number. */
+ (*entry)++;
+
+@@ -710,6 +755,43 @@
+ return 1;
+ }
+
++ /* Get the next GPT slice. */
++ int next_gpt_slice (void)
++ {
++ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
++ /* Make GPT partitions show up as PC slices. */
++ int pc_slice_no = (*partition & 0xFF0000) >> 16;
++
++ /* If this is the first time... */
++ if (pc_slice_no == 0xFF)
++ {
++ pc_slice_no = -1;
++ *entry = -1;
++ }
++
++ do {
++ (*entry)++;
++
++ if (*entry >= *gpt_count)
++ {
++ errnum = ERR_NO_PART;
++ return 0;
++ }
++ /* Read in the GPT Partition table entry. */
++ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf))
++ return 0;
++ } while (! (gptentry->type1 && gptentry->type2));
++
++ pc_slice_no++;
++ *start = gptentry->start;
++ *len = gptentry->end - gptentry->start + 1;
++ *type = PC_SLICE_TYPE_EXT2FS;
++ *entry = pc_slice_no;
++ *partition = (*entry << 16) | 0xFFFF;
++
++ return 1;
++ }
++
+ /* Start the body of this function. */
+
+ #ifndef STAGE1_5
+@@ -717,6 +799,9 @@
+ return 0;
+ #endif
+
++ if (*partition != 0xFFFFFF && *gpt_offset != 0)
++ return next_gpt_slice ();
++
+ /* If previous partition is a BSD partition or a PC slice which
+ contains BSD partitions... */
+ if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
+@@ -755,6 +840,9 @@
+ unsigned long dest_partition = current_partition;
+ unsigned long part_offset;
+ unsigned long ext_offset;
++ unsigned long gpt_offset;
++ int gpt_count;
++ int gpt_size;
+ int entry;
+ char buf[SECTOR_SIZE];
+ int bsd_part, pc_slice;
+@@ -766,7 +854,8 @@
+ int ret = next_partition (current_drive, dest_partition,
+ &current_partition, &current_slice,
+ &part_start, &part_length,
+- &part_offset, &entry, &ext_offset, buf);
++ &part_offset, &entry, &ext_offset,
++ &gpt_offset, &gpt_count, &gpt_size, buf);
+ bsd_part = (current_partition >> 8) & 0xFF;
+ pc_slice = current_partition >> 16;
+ return ret;
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/gpt.h grub-0.96-patched/stage2/gpt.h
+--- grub-0.96/stage2/gpt.h 1969-12-31 19:00:00.000000000 -0500
++++ grub-0.96-patched/stage2/gpt.h 2007-01-04 13:52:14.000000000 -0500
+@@ -0,0 +1,68 @@
++/*
++ * GRUB -- GRand Unified Bootloader
++ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc.
++ *
++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef _GPT_H
++#define _GPT_H
++
++typedef signed char grub_int8_t;
++typedef signed short grub_int16_t;
++typedef signed int grub_int32_t;
++typedef signed long long int grub_int64_t;
++typedef unsigned char grub_uint8_t;
++typedef unsigned short grub_uint16_t;
++typedef unsigned int grub_uint32_t;
++typedef unsigned long long int grub_uint64_t;
++
++struct grub_gpt_header
++{
++ grub_uint64_t magic;
++ grub_uint32_t version;
++ grub_uint32_t headersize;
++ grub_uint32_t crc32;
++ grub_uint32_t unused1;
++ grub_uint64_t primary;
++ grub_uint64_t backup;
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t guid[16];
++ grub_uint64_t partitions;
++ grub_uint32_t maxpart;
++ grub_uint32_t partentry_size;
++ grub_uint32_t partentry_crc32;
++} __attribute__ ((packed));
++
++struct grub_gpt_partentry
++{
++ grub_uint64_t type1;
++ grub_uint64_t type2;
++ grub_uint8_t guid[16];
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t attrib;
++ char name[72];
++} __attribute__ ((packed));
++
++#define GPT_HEADER_MAGIC 0x5452415020494645UL
++
++#define GPT_ENTRY_SECTOR(size,entry) \
++ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS)
++#define GPT_ENTRY_INDEX(size,entry) \
++ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1)
++
++#endif /* _GPT_H */
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/pc_slice.h grub-0.96-patched/stage2/pc_slice.h
+--- grub-0.96/stage2/pc_slice.h 2003-07-09 07:45:53.000000000 -0400
++++ grub-0.96-patched/stage2/pc_slice.h 2007-01-04 13:52:14.000000000 -0500
+@@ -115,6 +115,7 @@
+ #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85
+ #define PC_SLICE_TYPE_VSTAFS 0x9e
+ #define PC_SLICE_TYPE_DELL_UTIL 0xde
++#define PC_SLICE_TYPE_GPT 0xee
+ #define PC_SLICE_TYPE_LINUX_RAID 0xfd
+
+
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/shared.h grub-0.96-patched/stage2/shared.h
+--- grub-0.96/stage2/shared.h 2004-06-19 12:40:09.000000000 -0400
++++ grub-0.96-patched/stage2/shared.h 2007-01-04 13:52:15.000000000 -0500
+@@ -934,7 +934,9 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf);
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf);
+
+ /* Sets device to the one represented by the SAVED_* parameters. */
+ int make_saved_active (void);
diff --git a/abs/core-testing/grub/grub-inode-size.patch b/abs/core-testing/grub/grub-inode-size.patch
new file mode 100644
index 0000000..bef3bc1
--- /dev/null
+++ b/abs/core-testing/grub/grub-inode-size.patch
@@ -0,0 +1,94 @@
+diff -Nrup a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c
+--- a/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200
++++ b/stage2/fsys_ext2fs.c 2008-01-30 14:27:20.000000000 +0100
+@@ -79,7 +79,52 @@ struct ext2_super_block
+ __u32 s_rev_level; /* Revision level */
+ __u16 s_def_resuid; /* Default uid for reserved blocks */
+ __u16 s_def_resgid; /* Default gid for reserved blocks */
+- __u32 s_reserved[235]; /* Padding to the end of the block */
++ /*
++ * These fields are for EXT2_DYNAMIC_REV superblocks only.
++ *
++ * Note: the difference between the compatible feature set and
++ * the incompatible feature set is that if there is a bit set
++ * in the incompatible feature set that the kernel doesn't
++ * know about, it should refuse to mount the filesystem.
++ *
++ * e2fsck's requirements are more strict; if it doesn't know
++ * about a feature in either the compatible or incompatible
++ * feature set, it must abort and not try to meddle with
++ * things it doesn't understand...
++ */
++ __u32 s_first_ino; /* First non-reserved inode */
++ __u16 s_inode_size; /* size of inode structure */
++ __u16 s_block_group_nr; /* block group # of this superblock */
++ __u32 s_feature_compat; /* compatible feature set */
++ __u32 s_feature_incompat; /* incompatible feature set */
++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */
++ __u8 s_uuid[16]; /* 128-bit uuid for volume */
++ char s_volume_name[16]; /* volume name */
++ char s_last_mounted[64]; /* directory where last mounted */
++ __u32 s_algorithm_usage_bitmap; /* For compression */
++ /*
++ * Performance hints. Directory preallocation should only
++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++ */
++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
++ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
++ /*
++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++ */
++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
++ __u32 s_journal_inum; /* inode number of journal file */
++ __u32 s_journal_dev; /* device number of journal file */
++ __u32 s_last_orphan; /* start of list of inodes to delete */
++ __u32 s_hash_seed[4]; /* HTREE hash seed */
++ __u8 s_def_hash_version; /* Default hash version to use */
++ __u8 s_jnl_backup_type; /* Default type of journal backup */
++ __u16 s_reserved_word_pad;
++ __u32 s_default_mount_opts;
++ __u32 s_first_meta_bg; /* First metablock group */
++ __u32 s_mkfs_time; /* When the filesystem was created */
++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
++ __u32 s_reserved[172]; /* Padding to the end of the block */
+ };
+
+ struct ext2_group_desc
+@@ -218,6 +263,9 @@ struct ext2_dir_entry
+ #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
+ #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s)))
+
++#define EXT2_INODE_SIZE(s) (SUPERBLOCK->s_inode_size)
++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++
+ /* linux/ext2_fs.h */
+ #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
+ /* kind of from ext2/super.c */
+@@ -553,7 +601,7 @@ ext2fs_dir (char *dirname)
+ gdp = GROUP_DESC;
+ ino_blk = gdp[desc].bg_inode_table +
+ (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
+- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
++ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
+ #ifdef E2DEBUG
+ printf ("inode table fsblock=%d\n", ino_blk);
+ #endif /* E2DEBUG */
+@@ -565,13 +613,12 @@ ext2fs_dir (char *dirname)
+ /* reset indirect blocks! */
+ mapblock2 = mapblock1 = -1;
+
+- raw_inode = INODE +
+- ((current_ino - 1)
+- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
++ raw_inode = (struct ext2_inode *)((char *)INODE +
++ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
++ EXT2_INODE_SIZE (SUPERBLOCK));
+ #ifdef E2DEBUG
+ printf ("ipb=%d, sizeof(inode)=%d\n",
+- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
+- sizeof (struct ext2_inode));
++ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
+ printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
+ printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
+ for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
diff --git a/abs/core-testing/grub/i2o.patch b/abs/core-testing/grub/i2o.patch
new file mode 100644
index 0000000..2af846c
--- /dev/null
+++ b/abs/core-testing/grub/i2o.patch
@@ -0,0 +1,45 @@
+Only in grub-0.94/docs: grub.info
+Only in grub-0.94/docs: multiboot.info
+diff -ur grub-0.94/lib/device.c grub-0.94.new/lib/device.c
+--- grub-0.94/lib/device.c 2004-05-07 04:50:36.375238696 +0200
++++ grub-0.94.new/lib/device.c 2004-05-07 04:48:57.611253104 +0200
+@@ -419,6 +419,12 @@
+ {
+ sprintf (name, "/dev/rd/c%dd%d", controller, drive);
+ }
++
++static void
++get_i2o_disk_name (char *name, int unit)
++{
++ sprintf (name, "/dev/i2o/hd%c", unit + 'a');
++}
+ #endif
+
+ /* Check if DEVICE can be read. If an error occurs, return zero,
+@@ -789,6 +795,26 @@
+ }
+ }
+ }
++
++ /* I2O disks. */
++ for (i = 0; i < 8; i++)
++ {
++ char name[16];
++
++ get_i2o_disk_name (name, i);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++
+ #endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
diff --git a/abs/core-testing/grub/install-grub b/abs/core-testing/grub/install-grub
new file mode 100755
index 0000000..3eb7ce5
--- /dev/null
+++ b/abs/core-testing/grub/install-grub
@@ -0,0 +1,187 @@
+#!/bin/bash
+
+#
+# This is a little helper script that tries to convert linux-style device
+# names to grub-style. It's not very smart, so it
+# probably won't work for more complicated setups.
+#
+# If it doesn't work for you, try installing grub manually:
+#
+# # mkdir -p /boot/grub
+# # cp /usr/lib/grub/i386-pc/* /boot/grub/
+#
+# Then start up the 'grub' shell and run something like the following:
+#
+# grub> root(hd0,0)
+# grub> setup(hd0)
+#
+# The "root" line should point to the partition your kernel is located on,
+# /boot if you have a separate boot partition, otherwise your root (/).
+#
+# The "setup" line tells grub which disc/partition to install the
+# bootloader to. In the example above, it will install to the MBR of the
+# primary master hard drive.
+#
+
+usage() {
+ echo "usage: install-grub <install_device> [boot_device]"
+ echo
+ echo "where <install_device> is the device where Grub will be installed"
+ echo "and [boot_device] is the partition that contains the /boot"
+ echo "directory (auto-detected if omitted)"
+ echo
+ echo "examples: install-grub /dev/hda"
+ echo " install-grub /dev/hda /dev/hda1"
+ echo
+ exit 0
+}
+
+## new install-grub, code was taken from setup script
+ROOTDEV=$1
+PART_ROOT=$2
+VMLINUZ=vmlinuz26
+
+if [ "$ROOTDEV" = "" ]; then
+ usage
+fi
+if [ "$PART_ROOT" = "" ]; then
+ PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1)
+fi
+if [ "$PART_ROOT" = "" ]; then
+ PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1)
+fi
+if [ "$PART_ROOT" = "" ]; then
+ echo "error: could not determine BOOT_DEVICE, please specify manually" >&2
+ exit 1
+fi
+
+
+get_grub_map() {
+ [ -e /tmp/dev.map ] && rm /tmp/dev.map
+ /sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF
+quit
+EOF
+}
+
+mapdev() {
+ partition_flag=0
+ device_found=0
+ devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g')
+ linuxdevice=$(echo $1 | cut -b1-8)
+ if [ "$(echo $1 | egrep '[0-9]$')" ]; then
+ # /dev/hdXY
+ pnum=$(echo $1 | cut -b9-)
+ pnum=$(($pnum-1))
+ partition_flag=1
+ fi
+ for dev in $devs
+ do
+ if [ "(" = $(echo $dev | cut -b1) ]; then
+ grubdevice="$dev"
+ else
+ if [ "$dev" = "$linuxdevice" ]; then
+ device_found=1
+ break
+ fi
+ fi
+ done
+ if [ "$device_found" = "1" ]; then
+ if [ "$partition_flag" = "0" ]; then
+ echo "$grubdevice"
+ else
+ grubdevice_stringlen=${#grubdevice}
+ let grubdevice_stringlen--
+ grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen)
+ echo "$grubdevice,$pnum)"
+ fi
+ else
+ echo " DEVICE NOT FOUND"
+ fi
+}
+
+dogrub() {
+ get_grub_map
+ if [ ! -f /boot/grub/menu.lst ]; then
+ echo "Error: Couldn't find /boot/grub/menu.lst. Is GRUB installed?"
+ exit 1
+ fi
+ # try to auto-configure GRUB...
+ if [ "$PART_ROOT" != "" -a "$S_GRUB" != "1" ]; then
+ grubdev=$(mapdev $PART_ROOT)
+ # look for a separately-mounted /boot partition
+ bootdev=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "$grubdev" != "" -o "$bootdev" != "" ]; then
+ cp /boot/grub/menu.lst /tmp/.menu.lst
+ # remove the default entries by truncating the file at our little tag (#-*)
+ head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst
+ rm -f /tmp/.menu.lst
+ echo "" >>/boot/grub/menu.lst
+ echo "# (0) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux" >>/boot/grub/menu.lst
+ subdir=
+ if [ "$bootdev" != "" ]; then
+ grubdev=$(mapdev $bootdev)
+ else
+ subdir="/boot"
+ fi
+ echo "root $grubdev" >>/boot/grub/menu.lst
+ echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
+ if [ "$VMLINUZ" = "vmlinuz26" ]; then
+ echo "initrd $subdir/kernel26.img" >>/boot/grub/menu.lst
+ fi
+ echo "" >>/boot/grub/menu.lst
+ # adding fallback/full image
+ echo "# (1) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux Fallback" >>/boot/grub/menu.lst
+ echo "root $grubdev" >>/boot/grub/menu.lst
+ echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
+ if [ "$VMLINUZ" = "vmlinuz26" ]; then
+ echo "initrd $subdir/kernel26-fallback.img" >>/boot/grub/menu.lst
+ fi
+ echo "" >>/boot/grub/menu.lst
+ fi
+ fi
+
+ echo "Installing the GRUB bootloader..."
+ cp -a /usr/lib/grub/i386-pc/* /boot/grub/
+ sync
+ # freeze xfs filesystems to enable grub installation on xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -f / > /dev/null 2>&1
+ fi
+ # look for a separately-mounted /boot partition
+ bootpart=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "$bootpart" = "" ]; then
+ bootpart=$PART_ROOT
+ fi
+ bootpart=$(mapdev $bootpart)
+ bootdev=$(mapdev $ROOTDEV)
+ if [ "$bootpart" = "" ]; then
+ echo "Error: Missing/Invalid root device: $bootpart"
+ exit 1
+ fi
+ /sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF
+root $bootpart
+setup $bootdev
+quit
+EOF
+cat /tmp/grub.log
+ # unfreeze xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -u / > /dev/null 2>&1
+ fi
+
+ if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then
+ echo "Error installing GRUB. (see /tmp/grub.log for output)"
+ exit 1
+ fi
+ echo "GRUB was successfully installed."
+
+rm -f /tmp/grub.log
+
+exit 0
+}
+
+dogrub \ No newline at end of file
diff --git a/abs/core-testing/grub/intelmac.patch b/abs/core-testing/grub/intelmac.patch
new file mode 100644
index 0000000..a3fabc7
--- /dev/null
+++ b/abs/core-testing/grub/intelmac.patch
@@ -0,0 +1,67 @@
+--- grub-0.97.orig/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200
++++ grub-0.97/stage2/asm.S 2006-04-21 11:10:52.000000000 +0200
+@@ -1651,7 +1651,29 @@
+ jnz 3f
+ ret
+
+-3: /* use keyboard controller */
++3: /*
++ * try to switch gateA20 using PORT92, the "Fast A20 and Init"
++ * register
++ */
++ mov $0x92, %dx
++ inb %dx, %al
++ /* skip the port92 code if it's unimplemented (read returns 0xff) */
++ cmpb $0xff, %al
++ jz 6f
++
++ /* set or clear bit1, the ALT_A20_GATE bit */
++ movb 4(%esp), %ah
++ testb %ah, %ah
++ jz 4f
++ orb $2, %al
++ jmp 5f
++4: and $0xfd, %al
++
++ /* clear the INIT_NOW bit don't accidently reset the machine */
++5: and $0xfe, %al
++ outb %al, %dx
++
++6: /* use keyboard controller */
+ pushl %eax
+
+ call gloop1
+@@ -1661,9 +1683,12 @@
+
+ gloopint1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloopint1_done
+ andb $K_IBUF_FUL, %al
+ jnz gloopint1
+
++gloopint1_done:
+ movb $KB_OUTPUT_MASK, %al
+ cmpb $0, 0x8(%esp)
+ jz gdoit
+@@ -1684,6 +1709,8 @@
+
+ gloop1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloop2ret
+ andb $K_IBUF_FUL, %al
+ jnz gloop1
+
+@@ -1991,6 +2018,11 @@
+ ENTRY(console_getkey)
+ push %ebp
+
++wait_for_key:
++ call EXT_C(console_checkkey)
++ incl %eax
++ jz wait_for_key
++
+ call EXT_C(prot_to_real)
+ .code16
+
diff --git a/abs/core-testing/grub/menu.lst b/abs/core-testing/grub/menu.lst
new file mode 100644
index 0000000..57fcf0d
--- /dev/null
+++ b/abs/core-testing/grub/menu.lst
@@ -0,0 +1,46 @@
+# Config file for GRUB - The GNU GRand Unified Bootloader
+# /boot/grub/menu.lst
+
+# DEVICE NAME CONVERSIONS
+#
+# Linux Grub
+# -------------------------
+# /dev/fd0 (fd0)
+# /dev/hda (hd0)
+# /dev/hdb2 (hd1,1)
+# /dev/hda3 (hd0,2)
+#
+
+# FRAMEBUFFER RESOLUTION SETTINGS
+# +-------------------------------------------------+
+# | 640x480 800x600 1024x768 1280x1024
+# ----+--------------------------------------------
+# 256 | 0x301=769 0x303=771 0x305=773 0x307=775
+# 32K | 0x310=784 0x313=787 0x316=790 0x319=793
+# 64K | 0x311=785 0x314=788 0x317=791 0x31A=794
+# 16M | 0x312=786 0x315=789 0x318=792 0x31B=795
+# +-------------------------------------------------+
+
+# general configuration:
+timeout 5
+default 0
+color light-blue/black light-cyan/blue
+
+# boot sections follow
+# each is implicitly numbered from 0 in the order of appearance below
+#
+# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
+#
+#-*
+
+# (0) Arch Linux
+title Arch Linux [/boot/vmlinuz26]
+root (hd0,0)
+kernel /vmlinuz26 root=/dev/hda3 ro
+initrd /kernel26.img
+
+# (1) Windows
+#title Windows
+#rootnoverify (hd0,0)
+#makeactive
+#chainloader +1
diff --git a/abs/core-testing/grub/more-raid.patch b/abs/core-testing/grub/more-raid.patch
new file mode 100644
index 0000000..39db234
--- /dev/null
+++ b/abs/core-testing/grub/more-raid.patch
@@ -0,0 +1,100 @@
+--- grub-0.95/lib/device.c.moreraid 2004-11-30 17:09:36.736099360 -0500
++++ grub-0.95/lib/device.c 2004-11-30 17:12:17.319686944 -0500
+@@ -544,6 +544,17 @@
+ }
+
+ static void
++get_cciss_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
++}
++
++static void
++get_cpqarray_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/ida/c%dd%d", controller, drive);
++}
++static void
+ get_ataraid_disk_name (char *name, int unit)
+ {
+ sprintf (name, "/dev/ataraid/d%c", unit + '0');
+@@ -920,7 +931,7 @@
+
+ for (controller = 0; controller < 8; controller++)
+ {
+- for (drive = 0; drive < 15; drive++)
++ for (drive = 0; drive < 32; drive++)
+ {
+ char name[24];
+
+@@ -940,6 +951,70 @@
+ }
+ }
+ #endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cciss - we have
++ /dev/cciss/c<controller>d<logical drive>p<partition>.
++
++ cciss driver currently supports up to 8 controllers, 16 logical
++ drives, and 7 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 16; drive++)
++ {
++ char name[24];
++
++ get_cciss_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cpqarray - we have
++ /dev/ida/c<controller>d<logical drive>p<partition>.
++
++ cpqarray driver currently supports up to 8 controllers, 16 logical
++ drives, and 15 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 15; drive++)
++ {
++ char name[24];
++
++ get_cpqarray_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
+ if (fp)
diff --git a/abs/core-testing/grub/special-devices.patch b/abs/core-testing/grub/special-devices.patch
new file mode 100644
index 0000000..894f3e8
--- /dev/null
+++ b/abs/core-testing/grub/special-devices.patch
@@ -0,0 +1,18 @@
+--- grub-0.93/lib/device.c.raid 2002-05-20 05:53:46.000000000 -0400
++++ grub-0.93/lib/device.c 2002-12-28 23:24:10.000000000 -0500
+@@ -689,7 +689,14 @@
+ if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
+ strcpy (dev + strlen(dev) - 5, "/part");
+ }
+- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
++
++ sprintf (dev + strlen(dev), "%s%d",
++ /* Compaq smart and others */
++ (strncmp(dev, "/dev/ida/", 9) == 0 ||
++ strncmp(dev, "/dev/ataraid/", 13) == 0 ||
++ strncmp(dev, "/dev/cciss/", 11) == 0 ||
++ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "",
++ ((partition >> 16) & 0xFF) + 1);
+
+ /* Open the partition. */
+ fd = open (dev, O_RDWR);
diff --git a/abs/core-testing/gsfonts/PKGBUILD b/abs/core-testing/gsfonts/PKGBUILD
new file mode 100644
index 0000000..5294731
--- /dev/null
+++ b/abs/core-testing/gsfonts/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=gsfonts
+pkgver=8.11
+pkgrel=4
+pkgdesc="Ghostscript standard Type1 fonts"
+arch=(i686 x86_64)
+depends=('xorg-font-utils' 'fontconfig')
+install=xfonts.install
+url="http://sourceforge.net/projects/ghostscript"
+source=(http://switch.dl.sourceforge.net/ghostscript/ghostscript-fonts-std-8.11.tar.gz)
+md5sums=('6865682b095f8c4500c54b285ff05ef6')
+
+build() {
+ mkdir -p ${startdir}/pkg/usr/share/fonts/Type1
+ install -m644 ${startdir}/src/fonts/*.{pfb,pfm,afm} \
+ ${startdir}/pkg/usr/share/fonts/Type1/ || return 1
+}
diff --git a/abs/core-testing/gsfonts/xfonts.install b/abs/core-testing/gsfonts/xfonts.install
new file mode 100644
index 0000000..3eb0455
--- /dev/null
+++ b/abs/core-testing/gsfonts/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/Type1
+ mkfontdir /usr/share/fonts/Type1
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/gtk2/PKGBUILD b/abs/core-testing/gtk2/PKGBUILD
new file mode 100644
index 0000000..7cab655
--- /dev/null
+++ b/abs/core-testing/gtk2/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7635 2008-08-03 15:54:30Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gtk2
+pkgver=2.12.11
+pkgrel=3
+pkgdesc="The GTK+ Toolkit (v2)"
+arch=(i686 x86_64)
+url="http://www.gtk.org/"
+install=gtk2.install
+depends=('atk>=1.22.0' 'pango>=1.20.5' 'libxcursor' 'libxinerama' 'libxrandr>=1.2.1' 'libxi' 'libcups>=1.3.8-2' 'libxcomposite' 'libxdamage' 'heimdal>=1.2' 'gnutls>=2.4.1')
+makedepends=('pkgconfig')
+replaces=('gtkprint-cups')
+conflicts=('gtkprint-cups')
+options=('!libtool')
+backup=(etc/gtk-2.0/gtkrc)
+license=('LGPL')
+source=(http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-${pkgver}.tar.bz2
+ gtkclipboard-check.patch)
+md5sums=('f7aab88e856a813386f797aade5867ad'
+ '4025d3c15d6c6f73a032f403ffd4ff1c')
+
+build() {
+ cd ${startdir}/src/gtk+-${pkgver}
+ # Workaround patch for flash
+ patch -Np1 -i ${startdir}/src/gtkclipboard-check.patch || return 1
+
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --with-xinput=xfree \
+ --with-included-loaders=png || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ echo 'gtk-fallback-icon-theme = "gnome"' > ${startdir}/pkg/etc/gtk-2.0/gtkrc || return 1
+}
diff --git a/abs/core-testing/gtk2/gtk2.install b/abs/core-testing/gtk2/gtk2.install
new file mode 100644
index 0000000..3b4a881
--- /dev/null
+++ b/abs/core-testing/gtk2/gtk2.install
@@ -0,0 +1,27 @@
+# arg 1: the new package version
+post_install() {
+ # we need to ldconfig first, in case xfree86's libs aren't
+ # in ld.so.cache yet
+ sbin/ldconfig -r .
+ mkdir -p etc/gtk-2.0 &>/dev/null
+ usr/bin/gtk-query-immodules-2.0 >etc/gtk-2.0/gtk.immodules
+ usr/bin/gdk-pixbuf-query-loaders >etc/gtk-2.0/gdk-pixbuf.loaders
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ rm -f etc/gtk-2.0/gtk.immodules &>/dev/null
+ rm -f etc/gtk-2.0/gdk-pixbuf.loaders &>/dev/null
+ rmdir etc/gtk-2.0 &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/gtk2/gtkclipboard-check.patch b/abs/core-testing/gtk2/gtkclipboard-check.patch
new file mode 100644
index 0000000..48894fb
--- /dev/null
+++ b/abs/core-testing/gtk2/gtkclipboard-check.patch
@@ -0,0 +1,11 @@
+--- gtk+-2.11.6/gtk/gtkclipboard.c.orig 2007-08-18 13:48:22.000000000 +0000
++++ gtk+-2.11.6/gtk/gtkclipboard.c 2007-08-18 13:49:08.000000000 +0000
+@@ -287,6 +287,8 @@
+ gtk_clipboard_get_for_display (GdkDisplay *display,
+ GdkAtom selection)
+ {
++ if (display == NULL)
++ return NULL;
+ g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+ g_return_val_if_fail (!display->closed, NULL);
+
diff --git a/abs/core-testing/gzip/PKGBUILD b/abs/core-testing/gzip/PKGBUILD
new file mode 100644
index 0000000..dea881c
--- /dev/null
+++ b/abs/core-testing/gzip/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gzip
+pkgver=1.3.12
+pkgrel=13
+pkgdesc="GNU compression utility"
+arch=(i686 x86_64)
+url="http://www.gzip.org"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'bash')
+makedepends=('patch')
+source=(ftp://ftp.gnu.org/pub/gnu/gzip/gzip-$pkgver.tar.gz
+ gzip-fixutimens.patch)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ${startdir}/src/gzip-fixutimens.patch || return 1
+
+ ./configure --prefix=/usr
+ make || return 1
+ mkdir -p $startdir/pkg/bin $startdir/pkg/usr/bin
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin
+ mv $pkgname $startdir/pkg/bin
+ mv gunzip zcat uncompress $startdir/pkg/bin
+ cd $startdir/pkg/bin
+ ln -sf $pkgname compress
+}
+md5sums=('b5bac2d21840ae077e0217bc5e4845b1'
+ 'cb592761476921018386031d91625153')
diff --git a/abs/core-testing/gzip/gzip-fixpaths.patch b/abs/core-testing/gzip/gzip-fixpaths.patch
new file mode 100644
index 0000000..c95dc67
--- /dev/null
+++ b/abs/core-testing/gzip/gzip-fixpaths.patch
@@ -0,0 +1,37 @@
+diff -Naur gzip-1.2.4a-orig/Makefile.in gzip-1.2.4a/Makefile.in
+--- gzip-1.2.4a-orig/Makefile.in 1993-08-17 10:12:40.000000000 -0700
++++ gzip-1.2.4a/Makefile.in 2005-04-21 11:45:27.000000000 -0700
+@@ -348,27 +348,27 @@
+ rm -f _match.s
+
+ $(G)zdiff: zdiff.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zdiff.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zdiff.in > $@
+ chmod 755 $@
+
+ $(G)zgrep: zgrep.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zgrep.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zgrep.in > $@
+ chmod 755 $@
+
+ $(G)zmore: zmore.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zmore.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zmore.in > $@
+ chmod 755 $@
+
+ $(G)znew: znew.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/znew.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/znew.in > $@
+ chmod 755 $@
+
+ $(G)zforce: zforce.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zforce.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zforce.in > $@
+ chmod 755 $@
+
+ gzexe: gzexe.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/gzexe.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/gzexe.in > $@
+ chmod 755 $@
+
+ gzip.info: gzip.texi
diff --git a/abs/core-testing/gzip/gzip-fixutimens.patch b/abs/core-testing/gzip/gzip-fixutimens.patch
new file mode 100644
index 0000000..a78aa79
--- /dev/null
+++ b/abs/core-testing/gzip/gzip-fixutimens.patch
@@ -0,0 +1,36 @@
+--- gzip-1.3.12.orig/gzip.c
++++ gzip-1.3.12/gzip.c
+@@ -1637,7 +1642,7 @@
+ }
+ }
+
+- if (futimens (ofd, ofname, timespec) != 0)
++ if (gz_futimens (ofd, ofname, timespec) != 0)
+ {
+ int e = errno;
+ WARN ((stderr, "%s: ", program_name));
+--- gzip-1.3.12.orig/lib/utimens.h
++++ gzip-1.3.12/lib/utimens.h
+@@ -1,3 +1,3 @@
+ #include <time.h>
+-int futimens (int, char const *, struct timespec const [2]);
++int gz_futimens (int, char const *, struct timespec const [2]);
+ int utimens (char const *, struct timespec const [2]);
+--- gzip-1.3.12.orig/lib/utimens.c
++++ gzip-1.3.12/lib/utimens.c
+@@ -75,7 +75,7 @@
+ Return 0 on success, -1 (setting errno) on failure. */
+
+ int
+-futimens (int fd ATTRIBUTE_UNUSED,
++gz_futimens (int fd ATTRIBUTE_UNUSED,
+ char const *file, struct timespec const timespec[2])
+ {
+ /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+@@ -185,5 +185,5 @@
+ int
+ utimens (char const *file, struct timespec const timespec[2])
+ {
+- return futimens (-1, file, timespec);
++ return gz_futimens (-1, file, timespec);
+ }
diff --git a/abs/core-testing/gzip/gzip-security-update.patch b/abs/core-testing/gzip/gzip-security-update.patch
new file mode 100644
index 0000000..2fff599
--- /dev/null
+++ b/abs/core-testing/gzip/gzip-security-update.patch
@@ -0,0 +1,186 @@
+Only in gzip-1.3.5: cscope.out
+diff -ru gzip-1.3.5.orig/gzip.h gzip-1.3.5/gzip.h
+--- gzip-1.3.5.orig/gzip.h 2001-10-01 07:53:41.000000000 +0100
++++ gzip-1.3.5/gzip.h 2006-08-18 22:44:38.755598000 +0100
+@@ -198,6 +198,8 @@
+ extern int to_stdout; /* output to stdout (-c) */
+ extern int save_orig_name; /* set if original name must be saved */
+
++#define MIN(a,b) ((a) <= (b) ? (a) : (b))
++
+ #define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(0))
+ #define try_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(1))
+
+diff -ru gzip-1.3.5.orig/inflate.c gzip-1.3.5/inflate.c
+--- gzip-1.3.5.orig/inflate.c 2002-09-25 22:20:13.000000000 +0100
++++ gzip-1.3.5/inflate.c 2006-07-21 09:10:43.350376000 +0100
+@@ -337,7 +337,7 @@
+ {
+ *t = (struct huft *)NULL;
+ *m = 0;
+- return 0;
++ return 2;
+ }
+
+
+Only in gzip-1.3.5: testcases
+diff -ru gzip-1.3.5.orig/unlzh.c gzip-1.3.5/unlzh.c
+--- gzip-1.3.5.orig/unlzh.c 1999-10-06 06:00:00.000000000 +0100
++++ gzip-1.3.5/unlzh.c 2006-08-18 22:56:19.446997000 +0100
+@@ -149,13 +149,17 @@
+ unsigned i, k, len, ch, jutbits, avail, nextcode, mask;
+
+ for (i = 1; i <= 16; i++) count[i] = 0;
+- for (i = 0; i < (unsigned)nchar; i++) count[bitlen[i]]++;
++ for (i = 0; i < (unsigned)nchar; i++) {
++ if (bitlen[i] > 16)
++ error("Bad table (case a)\n");
++ else count[bitlen[i]]++;
++ }
+
+ start[1] = 0;
+ for (i = 1; i <= 16; i++)
+ start[i + 1] = start[i] + (count[i] << (16 - i));
+- if ((start[17] & 0xffff) != 0)
+- error("Bad table\n");
++ if ((start[17] & 0xffff) != 0 || tablebits > 16) /* 16 for weight below */
++ error("Bad table (case b)\n");
+
+ jutbits = 16 - tablebits;
+ for (i = 1; i <= (unsigned)tablebits; i++) {
+@@ -169,15 +173,15 @@
+
+ i = start[tablebits + 1] >> jutbits;
+ if (i != 0) {
+- k = 1 << tablebits;
+- while (i != k) table[i++] = 0;
++ k = MIN(1 << tablebits, DIST_BUFSIZE);
++ while (i < k) table[i++] = 0;
+ }
+
+ avail = nchar;
+ mask = (unsigned) 1 << (15 - tablebits);
+ for (ch = 0; ch < (unsigned)nchar; ch++) {
+ if ((len = bitlen[ch]) == 0) continue;
+- nextcode = start[len] + weight[len];
++ nextcode = MIN(start[len] + weight[len], DIST_BUFSIZE);
+ if (len <= (unsigned)tablebits) {
+ for (i = start[len]; i < nextcode; i++) table[i] = ch;
+ } else {
+@@ -218,7 +222,7 @@
+ for (i = 0; i < 256; i++) pt_table[i] = c;
+ } else {
+ i = 0;
+- while (i < n) {
++ while (i < MIN(n,NPT)) {
+ c = bitbuf >> (BITBUFSIZ - 3);
+ if (c == 7) {
+ mask = (unsigned) 1 << (BITBUFSIZ - 1 - 3);
+@@ -228,7 +232,7 @@
+ pt_len[i++] = c;
+ if (i == i_special) {
+ c = getbits(2);
+- while (--c >= 0) pt_len[i++] = 0;
++ while (--c >= 0 && i < NPT) pt_len[i++] = 0;
+ }
+ }
+ while (i < nn) pt_len[i++] = 0;
+@@ -248,7 +252,7 @@
+ for (i = 0; i < 4096; i++) c_table[i] = c;
+ } else {
+ i = 0;
+- while (i < n) {
++ while (i < MIN(n,NC)) {
+ c = pt_table[bitbuf >> (BITBUFSIZ - 8)];
+ if (c >= NT) {
+ mask = (unsigned) 1 << (BITBUFSIZ - 1 - 8);
+@@ -256,14 +260,14 @@
+ if (bitbuf & mask) c = right[c];
+ else c = left [c];
+ mask >>= 1;
+- } while (c >= NT);
++ } while (c >= NT && (mask || c != left[c]));
+ }
+ fillbuf((int) pt_len[c]);
+ if (c <= 2) {
+ if (c == 0) c = 1;
+ else if (c == 1) c = getbits(4) + 3;
+ else c = getbits(CBIT) + 20;
+- while (--c >= 0) c_len[i++] = 0;
++ while (--c >= 0 && i < NC) c_len[i++] = 0;
+ } else c_len[i++] = c - 2;
+ }
+ while (i < NC) c_len[i++] = 0;
+@@ -292,7 +296,7 @@
+ if (bitbuf & mask) j = right[j];
+ else j = left [j];
+ mask >>= 1;
+- } while (j >= NC);
++ } while (j >= NC && (mask || j != left[j]));
+ }
+ fillbuf((int) c_len[j]);
+ return j;
+@@ -309,7 +313,7 @@
+ if (bitbuf & mask) j = right[j];
+ else j = left [j];
+ mask >>= 1;
+- } while (j >= NP);
++ } while (j >= NP && (mask || j != left[j]));
+ }
+ fillbuf((int) pt_len[j]);
+ if (j != 0) j = ((unsigned) 1 << (j - 1)) + getbits((int) (j - 1));
+@@ -356,7 +360,7 @@
+ while (--j >= 0) {
+ buffer[r] = buffer[i];
+ i = (i + 1) & (DICSIZ - 1);
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ }
+ for ( ; ; ) {
+ c = decode_c();
+@@ -366,14 +370,14 @@
+ }
+ if (c <= UCHAR_MAX) {
+ buffer[r] = c;
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ } else {
+ j = c - (UCHAR_MAX + 1 - THRESHOLD);
+ i = (r - decode_p() - 1) & (DICSIZ - 1);
+ while (--j >= 0) {
+ buffer[r] = buffer[i];
+ i = (i + 1) & (DICSIZ - 1);
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ }
+ }
+ }
+diff -ru gzip-1.3.5.orig/unpack.c gzip-1.3.5/unpack.c
+--- gzip-1.3.5.orig/unpack.c 1999-10-06 06:00:00.000000000 +0100
++++ gzip-1.3.5/unpack.c 2006-07-21 15:49:48.615190000 +0100
+@@ -13,7 +13,6 @@
+ #include "gzip.h"
+ #include "crypt.h"
+
+-#define MIN(a,b) ((a) <= (b) ? (a) : (b))
+ /* The arguments must not have side effects. */
+
+ #define MAX_BITLEN 25
+@@ -133,7 +132,7 @@
+ /* Remember where the literals of this length start in literal[] : */
+ lit_base[len] = base;
+ /* And read the literals: */
+- for (n = leaves[len]; n > 0; n--) {
++ for (n = leaves[len]; n > 0 && base < LITERALS; n--) {
+ literal[base++] = (uch)get_byte();
+ }
+ }
+@@ -169,7 +168,7 @@
+ prefixp = &prefix_len[1<<peek_bits];
+ for (len = 1; len <= peek_bits; len++) {
+ int prefixes = leaves[len] << (peek_bits-len); /* may be 0 */
+- while (prefixes--) *--prefixp = (uch)len;
++ while (prefixes-- && prefixp > prefix_len) *--prefixp = (uch)len;
+ }
+ /* The length of all other codes is unknown: */
+ while (prefixp > prefix_len) *--prefixp = 0;
diff --git a/abs/core-testing/hal-info/PKGBUILD b/abs/core-testing/hal-info/PKGBUILD
new file mode 100644
index 0000000..7f697c8
--- /dev/null
+++ b/abs/core-testing/hal-info/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 2153 2008-05-27 14:12:39Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=hal-info
+_date=20080508
+pkgver=0.20080508
+pkgrel=1
+pkgdesc="Hardware Abstraction Layer information files"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+url="http://www.freedesktop.org/wiki/Software/hal"
+source=(http://hal.freedesktop.org/releases/hal-info-${_date}.tar.gz)
+md5sums=('6fc99d15d38945c17a291ea93e664664')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${_date}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/hal/PKGBUILD b/abs/core-testing/hal/PKGBUILD
new file mode 100644
index 0000000..f1a3b3f
--- /dev/null
+++ b/abs/core-testing/hal/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 8861 2008-08-16 22:34:13Z eric $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Link Dupont <link@subpop.net>
+
+pkgname=hal
+pkgver=0.5.11
+pkgrel=1
+pkgdesc="Hardware Abstraction Layer"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+url="http://www.freedesktop.org/wiki/Software/hal"
+depends=('dbus-glib>=0.74' 'dbus>=1.2.1' 'libusb>=0.1.12' 'udev>=118' 'filesystem>=0.7.1-5' 'hal-info>=0.20080508' 'eject' 'libsmbios>=2.0.2' 'dmidecode' 'pciutils>=2.2.8-3' 'usbutils>=0.73-5' 'pm-utils>=1.1.2')
+makedepends=('pkgconfig' 'gperf')
+options=('!libtool')
+install=hal.install
+source=(http://hal.freedesktop.org/releases/${pkgname}-${pkgver}.tar.bz2
+ hal
+ hal-policy.patch
+ cryptsetup_location.patch
+ hal-0.5.9-hide-diagnostic.patch
+ ntfs3g-valid-options.patch)
+md5sums=('5e8935ab61bcb14afd2d4548084aace0' '277e96ac130d7bfce0b30f0b80db8782'\
+ '18dcdaa79952e2057c2e4745fbc8ad52' 'c688a3c6574699365926f4fef7441545'\
+ '4d4b6801a1cedca22b8bdd9db73b16fb' '4242a2c78885e396f639d0cd5e33218c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/hal-policy.patch || return 1
+ patch -Np1 -i ${startdir}/src/cryptsetup_location.patch || return 1
+ patch -Np1 -i ${startdir}/src/hal-0.5.9-hide-diagnostic.patch || return 1
+ patch -Np0 -i ${startdir}/src/ntfs3g-valid-options.patch || return 1
+
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/hal --enable-static=no \
+ --enable-acpi-ibm --enable-acpi-toshiba \
+ --disable-docbook-docs --disable-doxygen-docs \
+ --with-hal-user=hal --with-hal-group=hal \
+ --with-pid-file=/var/run/hald.pid \
+ --enable-policy-kit=no || return 1
+ sed -e 's/device-manager//' -i tools/Makefile || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${startdir}/pkg/etc/rc.d
+ install -m755 -d ${startdir}/pkg/media || return 1
+ install -m 755 ${startdir}/src/hal ${startdir}/pkg/etc/rc.d/hal || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/hal/cryptsetup_location.patch b/abs/core-testing/hal/cryptsetup_location.patch
new file mode 100644
index 0000000..1e4f5ef
--- /dev/null
+++ b/abs/core-testing/hal/cryptsetup_location.patch
@@ -0,0 +1,36 @@
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-remove-linux hal-0.5.8.1-new/tools/linux/hal-luks-remove-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-remove-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-remove-linux 2007-02-11 13:04:46.000000000 +0100
+@@ -6,7 +6,7 @@
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License version 2.
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ echo LUKS cryptotext device $HAL_PROP_INFO_UDI is going away
+
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-setup-linux hal-0.5.8.1-new/tools/linux/hal-luks-setup-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-setup-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-setup-linux 2007-02-11 13:04:45.000000000 +0100
+@@ -9,7 +9,7 @@
+ read password
+ PASSWORD=${PASSWORD//[^[:alnum:]_=[:space:]:.+-]/@}
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ if [ ! -f $CRYPTSETUP ]; then
+ echo org.freedesktop.Hal.Device.Volume.Crypto.SetupError >&2
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-teardown-linux hal-0.5.8.1-new/tools/linux/hal-luks-teardown-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-teardown-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-teardown-linux 2007-02-11 13:04:44.000000000 +0100
+@@ -6,7 +6,7 @@
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License version 2.
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ if [ ! -f $CRYPTSETUP ]; then
+ echo org.freedesktop.Hal.Device.Volume.Crypto.TeardownError >&2
diff --git a/abs/core-testing/hal/hal b/abs/core-testing/hal/hal
new file mode 100644
index 0000000..012d456
--- /dev/null
+++ b/abs/core-testing/hal/hal
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ #Check for running dbus, start when not running
+ ck_daemon dbus && /etc/rc.d/dbus start
+ if [ -x /etc/rc.d/acpid ]; then
+ ck_daemon acpid && /etc/rc.d/acpid start
+ fi
+ stat_busy "Starting Hardware Abstraction Layer"
+ if [ ! -x /var/cache/hald ] ; then
+ install -m755 -g 82 -o 82 -d /var/cache/hald
+ fi
+ if [ ! -x /var/run/hald ]; then
+ install -m755 -g 82 -o 82 -d /var/run/hald
+ fi
+ if [ ! -x /var/run/hald/hald-local ]; then
+ install -m755 -g 0 -o 0 -d /var/run/hald/hald-local
+ fi
+ if [ ! -x /var/run/hald/hald-runner ]; then
+ install -m755 -g 0 -o 0 -d /var/run/hald/hald-runner
+ fi
+ /usr/sbin/hald
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon hal
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Hardware Abstraction Layer"
+ [ -f /var/run/hald.pid ] && kill `cat /var/run/hald.pid` &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon hal
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core-testing/hal/hal-0.5.9-hide-diagnostic.patch b/abs/core-testing/hal/hal-0.5.9-hide-diagnostic.patch
new file mode 100644
index 0000000..58c882d
--- /dev/null
+++ b/abs/core-testing/hal/hal-0.5.9-hide-diagnostic.patch
@@ -0,0 +1,14 @@
+--- hal-0.5.9/fdi/policy/10osvendor/20-storage-methods.fdi.orig 2007-05-01 21:39:31.000000000 +0000
++++ hal-0.5.9/fdi/policy/10osvendor/20-storage-methods.fdi 2007-05-01 21:51:14.000000000 +0000
+@@ -100,6 +100,11 @@
+ </match>
+ </match>
+
++ <!-- Hide partitions marked as Compaq Diagnostics -->
++ <match key="volume.partition.type" string="0x12">
++ <merge key="volume.ignore" type="bool">true</merge>
++ </match>
++
+ <!-- EFI firmware partitions -->
+ <match key="volume.fstype" string="vfat">
+ <match key="volume.label" string="EFI">
diff --git a/abs/core-testing/hal/hal-policy.patch b/abs/core-testing/hal/hal-policy.patch
new file mode 100644
index 0000000..96528b5
--- /dev/null
+++ b/abs/core-testing/hal/hal-policy.patch
@@ -0,0 +1,32 @@
+--- hal-0.5.11/hal.conf.in 2008-05-27 16:09:25.000000000 +0200
++++ hal-0.5.11/hal.conf.in 2008-05-27 16:21:28.000000000 +0200
+@@ -37,9 +37,27 @@
+ receive_sender="org.freedesktop.Hal"/>
+ </policy>
+
+- <!-- Default policy for the exported interfaces; if PolicyKit is not used
+- for access control you will need to modify this -->
++ <!-- Default policy for the exported interfaces -->
+ <policy context="default">
++ <deny send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
++ <deny send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
++ <deny send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
++ <deny send_interface="org.freedesktop.Hal.Device.Volume"/>
++ <deny send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
++ </policy>
++
++ <policy group="power">
++ <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
++ <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
++ </policy>
++
++ <policy group="storage">
++ <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
++ <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
++ </policy>
++
++ <!-- You can change this to a more suitable user, or make per-group -->
++ <policy user="0">
+ <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
+ <allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
+ <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
diff --git a/abs/core-testing/hal/hal.install b/abs/core-testing/hal/hal.install
new file mode 100644
index 0000000..d3f3686
--- /dev/null
+++ b/abs/core-testing/hal/hal.install
@@ -0,0 +1,25 @@
+post_install() {
+ getent group hal >/dev/null || usr/sbin/groupadd -g 82 hal
+ getent group optical >/dev/null || usr/sbin/groupadd -g 93 optical
+ getent group floppy >/dev/null || usr/sbin/groupadd -g 94 floppy
+ getent group storage >/dev/null || usr/sbin/groupadd -g 95 storage
+ getent passwd hal >/dev/null || usr/sbin/useradd -c 'HAL daemon' -u 82 -g hal -G optical,floppy,storage -d '/' -s /bin/false hal
+ usr/bin/passwd -l hal &>/dev/null
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ usr/sbin/userdel hal &>/dev/null
+ usr/sbin/groupdel hal &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/hal/ntfs3g-valid-options.patch b/abs/core-testing/hal/ntfs3g-valid-options.patch
new file mode 100644
index 0000000..4731442
--- /dev/null
+++ b/abs/core-testing/hal/ntfs3g-valid-options.patch
@@ -0,0 +1,11 @@
+--- fdi/policy/10osvendor/20-storage-methods.fdi.orig 2007-10-28 19:40:22.000000000 +0000
++++ fdi/policy/10osvendor/20-storage-methods.fdi 2007-10-28 19:40:58.000000000 +0000
+@@ -240,6 +240,8 @@
+ <append key="volume.mount.valid_options" type="strlist">uid=</append>
+ <append key="volume.mount.valid_options" type="strlist">gid=</append>
+ <append key="volume.mount.valid_options" type="strlist">umask=</append>
++ <append key="volume.mount.valid_options" type="strlist">dmask=</append>
++ <append key="volume.mount.valid_options" type="strlist">fmask=</append>
+ <append key="volume.mount.valid_options" type="strlist">locale=</append>
+ <append key="volume.mount.valid_options" type="strlist">utf8</append>
+ </match>
diff --git a/abs/core-testing/hdparm/PKGBUILD b/abs/core-testing/hdparm/PKGBUILD
new file mode 100644
index 0000000..de29521
--- /dev/null
+++ b/abs/core-testing/hdparm/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 7862 2008-08-04 20:16:21Z tpowa $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=hdparm
+pkgver=8.9
+pkgrel=10
+pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
+arch=(i686 x86_64)
+depends=('glibc')
+groups=('base')
+source=(http://heanet.dl.sourceforge.net/sourceforge/hdparm/${pkgname}-${pkgver}.tar.gz)
+license=('BSD')
+url="http://sourceforge.net/projects/hdparm/"
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver} || return 1
+
+ # build
+ make || return 1
+
+ # install
+ mkdir -p ${startdir}/pkg/{usr,sbin} || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 contrib/idectl ${startdir}/pkg/sbin || return 1
+ install -m755 contrib/ultrabayd ${startdir}/pkg/sbin || return 1
+
+ #install license file
+ install -D -m 644 LICENSE.TXT $startdir/pkg/usr/share/licenses/hdparm/LICENSE.TXT
+
+ # installs empty /usr/share, which we let it do since it causes
+ # no harm and it might put something there someday
+}
+md5sums=('19fa013956612581af7d00907990ac84')
diff --git a/abs/core-testing/heimdal/002_all_heimdal-no_libedit.patch b/abs/core-testing/heimdal/002_all_heimdal-no_libedit.patch
new file mode 100644
index 0000000..7806597
--- /dev/null
+++ b/abs/core-testing/heimdal/002_all_heimdal-no_libedit.patch
@@ -0,0 +1,10 @@
+--- cf/krb-readline.m4 2004-09-15 13:24:15.000000000 +0000
++++ cf/krb-readline.m4 2004-09-17 16:11:39.610756024 +0000
+@@ -6,7 +6,6 @@
+ dnl el_init
+
+ AC_DEFUN([KRB_READLINE],[
+-AC_FIND_FUNC_NO_LIBS(el_init, edit, [], [], [$LIB_tgetent])
+ if test "$ac_cv_func_el_init" = yes ; then
+ AC_CACHE_CHECK(for four argument el_init, ac_cv_func_el_init_four,[
+ AC_TRY_COMPILE([#include <stdio.h>
diff --git a/abs/core-testing/heimdal/003_all_heimdal-fPIC.patch b/abs/core-testing/heimdal/003_all_heimdal-fPIC.patch
new file mode 100644
index 0000000..ee01e34
--- /dev/null
+++ b/abs/core-testing/heimdal/003_all_heimdal-fPIC.patch
@@ -0,0 +1,12 @@
+--- lib/editline/Makefile.am 2004-05-10 09:27:21.442490749 +0000
++++ lib/editline/Makefile.am 2004-05-10 09:27:38.876209101 +0000
+@@ -47,6 +47,9 @@
+
+ EXTRA_DIST = $(man_MANS)
+
++$(libeditline_la_OBJECTS): %.lo: %.c
++ $(LTCOMPILE) -fPIC -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
++
+ snprintf.c:
+ $(LN_S) $(srcdir)/../roken/snprintf.c .
+ strdup.c:
diff --git a/abs/core-testing/heimdal/004_all_heimdal-rxapps.patch b/abs/core-testing/heimdal/004_all_heimdal-rxapps.patch
new file mode 100644
index 0000000..d6142a7
--- /dev/null
+++ b/abs/core-testing/heimdal/004_all_heimdal-rxapps.patch
@@ -0,0 +1,19 @@
+--- appl/kx/rxterm.in 2004-02-21 21:49:23.893934354 +0000
++++ appl/kx/rxterm.in 2004-02-21 21:49:34.617299076 +0000
+@@ -2,6 +2,6 @@
+ #
+ usage="Usage: $0 [-l username] [-k] [-f] [-r rsh_args] [-x xterm_args] [-K kx_args] [-w term_emulator] [-b rsh_binary][-v] [-h | --help] [--version] host"
+-binary=rsh
++binary=krsh
+ term=xterm
+ while true
+ do
+--- appl/kx/rxtelnet.in 2005-06-16 16:29:10.000000000 +0000
++++ appl/kx/rxtelnet.in 2005-07-11 20:33:10.000000000 +0000
+@@ -2,7 +2,7 @@
+ #
+ usage="Usage: $0 [-l username] [-k] [-fF] [-t args_to_telnet] [-x args_to_xterm] [-K args_to_kx] [-w term_emulator] [-b telnet_binary] [-n] [-v] [-h | --help] [--version] host [port]"
+-binary=telnet
++binary=ktelnet
+ term=
+ kx_args=-P
diff --git a/abs/core-testing/heimdal/006_all_heimdal-suid_fix.patch b/abs/core-testing/heimdal/006_all_heimdal-suid_fix.patch
new file mode 100644
index 0000000..0f7d281
--- /dev/null
+++ b/abs/core-testing/heimdal/006_all_heimdal-suid_fix.patch
@@ -0,0 +1,20 @@
+--- appl/otp/Makefile.am 2004-09-17 22:22:54.046301075 +0000
++++ appl/otp/Makefile.am 2004-09-17 22:23:15.293145945 +0000
+@@ -8,6 +8,7 @@
+ bin_SUIDS = otp
+ otp_SOURCES = otp.c otp_locl.h
+ otpprint_SOURCES = otpprint.c otp_locl.h
++otp_LDFLAGS = -Wl,-z,now
+
+ man_MANS = otp.1 otpprint.1
+
+--- appl/su/Makefile.am 2005-06-16 16:27:46.000000000 +0000
++++ appl/su/Makefile.am 2005-07-11 20:34:21.000000000 +0000
+@@ -7,6 +7,7 @@
+ bin_PROGRAMS = su
+ bin_SUIDS = su
+ su_SOURCES = su.c
++su_LDFLAGS = -Wl,-z,now
+ man_MANS = su.1
+
+ LDADD = $(LIB_kafs) \
diff --git a/abs/core-testing/heimdal/010_all_heimdal-system-libss.patch b/abs/core-testing/heimdal/010_all_heimdal-system-libss.patch
new file mode 100644
index 0000000..5cd4d9d
--- /dev/null
+++ b/abs/core-testing/heimdal/010_all_heimdal-system-libss.patch
@@ -0,0 +1,40 @@
+--- lib/sl/Makefile.am~ 2007-06-01 09:48:09.000000000 +0200
++++ lib/sl/Makefile.am 2007-06-01 09:49:30.000000000 +0200
+@@ -12,36 +12,24 @@
+
+ include_HEADERS = sl.h
+
+-lib_LTLIBRARIES = libsl.la libss.la
++lib_LTLIBRARIES = libsl.la
+ libsl_la_LDFLAGS = -version-info 2:0:2
+-libss_la_LDFLAGS = -version-info 1:5:1
+
+ libsl_la_LIBADD = @LIB_readline@
+-libss_la_LIBADD = @LIB_readline@ @LIB_com_err@
+
+ libsl_la_SOURCES = sl_locl.h sl.c $(ES)
+-libss_la_SOURCES = $(libsl_la_SOURCES) ss.c ss.h
+
+ TESTS = test_sl
+ check_PROGRAMS = $(TESTS)
+
+ # install these?
+
+-bin_PROGRAMS = mk_cmds
+ noinst_PROGRAMS = slc
+
+-mk_cmds_SOURCES = make_cmds.c make_cmds.h parse.y lex.l
+-mk_cmds_LDADD = libsl.la $(LDADD)
+-
+ slc_SOURCES = slc-gram.y slc-lex.l slc.h
+
+-ssincludedir = $(includedir)/ss
+-ssinclude_HEADERS = ss.h
+-
+ CLEANFILES = lex.c parse.c parse.h snprintf.c strtok_r.c strdup.c strupr.c getprogname.c
+
+-$(mk_cmds_OBJECTS): parse.h parse.c
+-
+ LDADD = \
+ libsl.la \
+ $(LIB_roken) \
diff --git a/abs/core-testing/heimdal/PKGBUILD b/abs/core-testing/heimdal/PKGBUILD
new file mode 100644
index 0000000..4c79af6
--- /dev/null
+++ b/abs/core-testing/heimdal/PKGBUILD
@@ -0,0 +1,103 @@
+# $Id: PKGBUILD 3738 2008-06-30 20:03:06Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+#
+### Attention: build it 2 times - it links against itself! ###
+# ^ better remove old pkg before ;)
+
+pkgname=heimdal
+pkgver=1.2
+pkgrel=1
+pkgdesc="Heimdal Kerberos V5 libraries"
+arch=(i686 x86_64)
+url="http://www.pdc.kth.se/heimdal/"
+license=('custom')
+depends=('db>=4.7' 'openssl' 'e2fsprogs')
+options=('!libtool' '!emptydirs')
+backup=(etc/krb5.conf)
+source=(http://www.h5l.org/dist/src/heimdal-$pkgver.tar.gz \
+ 002_all_heimdal-no_libedit.patch \
+ 003_all_heimdal-fPIC.patch \
+ 004_all_heimdal-rxapps.patch \
+ #006_all_heimdal-suid_fix.patch \
+ heimdal-kdc.rc \
+ kadmind.rc \
+ kpasswd.rc)
+md5sums=('8d6b690069acd2ae8ada1315174f52f9'
+ '1199c4a4a38e9c2b2c0a99bd5781767a'
+ '3d0262aa218e1611500de735d3581e28'
+ '0fe81cb1e33b2a2e60edaf47dfdfe4de'
+ #'30372b1581e4d49a76688e450fd42443'
+ 'e59650992b9541a30dfce727a194f6e0'
+ '1f2f86a67bbfddb7af581d35fdca9627'
+ 'f8f1eca95b9d3f2b4ebf2417b71b81cf')
+
+build() {
+ [ -e /usr/lib/libasn1.so ] && echo "## remove old heimdal pkg first ##" && return 1
+
+ cd ${srcdir}/heimdal-${pkgver}
+ patch -Np0 -i ${srcdir}/002_all_heimdal-no_libedit.patch || return 1
+ patch -Np0 -i ${srcdir}/003_all_heimdal-fPIC.patch || return 1
+ patch -Np0 -i ${srcdir}/004_all_heimdal-rxapps.patch || return 1
+# patch -Np0 -i ${srcdir}/006_all_heimdal-suid_fix.patch || return 1
+
+# libtoolize -f -c || return 1
+# aclocal -I cf || return 1
+# autoheader || return 1
+# automake -a || return 1
+# autoconf || return 1
+# libtoolize -f -c || return 1
+
+# autoreconf || return 1
+# libtoolize -f -c || return 1
+
+ sed -i -e 's|var/heimdal|var/lib/heimdal|g' configure.in configure \
+ doc/setup.texi doc/heimdal.info kadmin/kadmind.8 kdc/kdc.8 \
+ lib/hdb/hdb.h lib/krb5/krb5.conf.5 lib/krb5/krb5.conf.cat5
+
+ ./configure --prefix=/usr --enable-shared=yes --without-x \
+ --sysconfdir=/etc --mandir=/usr/man \
+ --datadir=/var/lib/heimdal \
+ --localstatedir=/var/lib/heimdal \
+ --with-openssl=/usr \
+ --with-readline-lib=/usr/lib \
+ --with-readline-include=/usr/include/readline \
+ --libexecdir=/usr/sbin --with-berkeley-db \
+ --disable-krb4
+
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+
+ for i in telnetd ftpd rshd; do
+ mv ${pkgdir}/usr/man/man8/${i}.8 ${pkgdir}/usr/man/man8/k${i}.8
+ mv ${pkgdir}/usr/sbin/${i} ${pkgdir}/usr/sbin/k${i}
+ done
+
+ for i in rcp rsh telnet ftp su login; do
+ if [ -f ${pkgdir}/usr/man/man1/${i}.1 ]; then
+ mv ${pkgdir}/usr/man/man1/${i}.1 ${pkgdir}/usr/man/man1/k${i}.1
+ fi
+ mv ${pkgdir}/usr/bin/${i} ${pkgdir}/usr/bin/k${i}
+ done
+ rm -rf ${pkgdir}/usr/man/cat{1,3,5,8}
+
+ #Arch could be a KDC too
+ mkdir -p ${pkgdir}/etc/rc.d
+ install -m644 ${srcdir}/heimdal-${pkgver}/krb5.conf ${pkgdir}/etc
+ for i in heimdal-kdc kadmind kpasswd; do
+ install -m755 ${srcdir}/${i}.rc ${pkgdir}/etc/rc.d/${i}
+ done
+
+ #Remove some conflicts
+ rm ${pkgdir}/usr/man/man5/ftpusers.5*
+ rm ${pkgdir}/usr/man/man5/login.access.5*
+ # and some more
+ rm ${pkgdir}/usr/bin/mk_cmds
+ rm ${pkgdir}/usr/include/ss/ss.h
+ rm ${pkgdir}/usr/lib/libss.a
+ rm ${pkgdir}/usr/lib/libss.so
+
+ # install the license
+ install -D -m644 ${srcdir}/${pkgname}-${pkgver}/LICENSE \
+ ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/heimdal/heimdal-kdc.rc b/abs/core-testing/heimdal/heimdal-kdc.rc
new file mode 100644
index 0000000..b2a3b5f
--- /dev/null
+++ b/abs/core-testing/heimdal/heimdal-kdc.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kdc`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal kdc"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kdc --detach
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon heimdal-kdc
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal kdc"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon heimdal-kdc
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core-testing/heimdal/kadmind.rc b/abs/core-testing/heimdal/kadmind.rc
new file mode 100644
index 0000000..0f3b8c7
--- /dev/null
+++ b/abs/core-testing/heimdal/kadmind.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kadmind`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal admin server"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kadmind &
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon kadmind
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal admin server"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon kadmind
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core-testing/heimdal/kpasswd.rc b/abs/core-testing/heimdal/kpasswd.rc
new file mode 100644
index 0000000..3697322
--- /dev/null
+++ b/abs/core-testing/heimdal/kpasswd.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kpasswdd`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal kpasswdd"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kpasswdd &
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon kpasswd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal kpasswdd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon kpasswd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core-testing/hwdetect/PKGBUILD b/abs/core-testing/hwdetect/PKGBUILD
new file mode 100644
index 0000000..14fd6a9
--- /dev/null
+++ b/abs/core-testing/hwdetect/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=hwdetect
+pkgver=0.9
+pkgrel=10
+pkgdesc="Hardware detection script with loading modules and mkinitcpio.conf / rc.conf support"
+arch=(i686 x86_64)
+license=('custom:none')
+groups=('base')
+backup=()
+depends=('sh' 'awk' 'grep' 'coreutils' 'sed')
+source=(hwdetect)
+md5sums=('bae2a26062c1ae8036b3a2173c8e3b51')
+
+build() {
+ install -D -m 755 $startdir/src/hwdetect $startdir/pkg/sbin/hwdetect
+}
+
diff --git a/abs/core-testing/hwdetect/hwdetect b/abs/core-testing/hwdetect/hwdetect
new file mode 100755
index 0000000..4991210
--- /dev/null
+++ b/abs/core-testing/hwdetect/hwdetect
@@ -0,0 +1,482 @@
+#! /bin/sh
+# Autodetection script for scanning /sys for hardware
+# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+usage () {
+ echo "$0 [options]"
+ echo ""
+ echo " This is a tool that detects/lists modules that are exported by /sys"
+ echo ""
+ echo " Options:"
+ echo " --kernel_version= use kernel version (no autodetect)"
+ echo " --ide-legacy use old ide modules instead of pata"
+ echo " --load-modules load all detected modules"
+ echo " --unload-modules unload all detected modules"
+ echo " --show-modules show all detected modules"
+ echo " --show-modules-order shows load order of detected modules"
+ echo " --show-agp show AGP modules"
+ echo " --show-acpi show ACPI modules"
+ echo " --show-ide show IDE modules"
+ echo " --show-scsi show SCSI modules"
+ echo " --show-sata show SATA modules"
+ echo " --show-usb show USB modules"
+ echo " --show-fw show FIREWIRE modules"
+ echo " --show-net show NETWORK modules"
+ echo " --show-input show INPUT modules"
+ echo " --show-irda show IRDA modules"
+ echo " --show-isdn show ISDN modules"
+ echo " --show-pcmcia show PCMCIA modules"
+ echo " --show-sound show SOUND modules"
+ echo " --show-video show VIDEO modules"
+ echo " --show-other show OTHER modules"
+ echo ""
+ echo " For /etc/mkinitcpio.conf use:"
+ echo " --hostcontroller show MODULES= for all hostcontrollers"
+ echo " --vmware add BusLogic to MODULES for vmware"
+ echo ""
+ echo " --hooks show HOOKS="
+ echo " --hooks-dir use this directory for HOOKS check"
+ echo " --dsdt add dsdt to HOOKS="
+ echo " --raid add raid to HOOKS="
+ echo " --raid-partitions add raid-partitions to HOOKS="
+ echo " --encrypt add encrypt to HOOKS="
+ echo " --lvm2 add lvm2 to HOOKS="
+ echo " --keymap add keymap to HOOKS="
+ echo " --usb add usb to HOOKS="
+ echo " --fw add fw to HOOKS="
+ echo " --pcmcia add pcmcia to HOOKS="
+ echo " --nfs add net to HOOKS="
+ echo ""
+ echo " For /etc/rc.conf use:"
+ echo " --net show network MODULES"
+ echo " --sound show sound MODULES"
+ echo " --modules show all detected MODULES"
+ echo ""
+ exit 1
+}
+
+[ "$1" = "" ] && usage
+[ "$1" = "--help" ] && usage
+[ "$1" = "-h" ] && usage
+
+# setting kernel version
+case $1 in
+ --kernel_version=*)
+ KERNEL_VERSION="`echo $1 | awk -F= '{print $2;}'`"
+ ;;
+esac
+
+if [ "$KERNEL_VERSION" = "" ]; then
+ KERNEL_VERSION="`uname -r`"
+fi
+
+# IDE/PATA switch
+[ "$(echo $* | grep '\-ide-legacy')" ] && IDE_LEGACY=1
+
+# dsdt switch
+[ "$(echo $* | grep '\-dsdt')" ] && DSDT=1
+
+# raid switch
+[ "$(echo $* | grep '\-raid-partition')" ] && RAID_PARTITIONS=1
+if ! [ "$RAID_PARTITIONS" = "1" ]; then
+ [ "$(echo $* | grep '\-raid')" ] && RAID=1
+fi
+
+# encrypt switch
+[ "$(echo $* | grep '\-encrypt')" ] && ENCRYPT=1
+
+# lvm2 switch
+[ "$(echo $* | grep '\-lvm2')" ] && LVM2=1
+
+# keymap switch
+[ "$(echo $* | grep '\-keymap')" ] && KEYMAP=1
+
+# usb switch
+[ "$(echo $* | grep '\-usb')" ] && USB=1
+
+# fw switch
+[ "$(echo $* | grep '\-fw')" ] && FW=1
+
+# pcmcia switch
+[ "$(echo $* | grep '\-pcmcia')" ] && PCMCIA=1
+
+# nfs switch
+[ "$(echo $* | grep '\-nfs')" ] && NFS=1
+
+# vmware switch
+[ "$(echo $* | grep '\-vmware')" ] && VMWARE=1
+
+# checking /sys
+if ! [ -d /sys/ ]; then
+ echo "/sys/ is not present -- mount /sys first" >&2
+ exit 1
+fi
+
+: >/tmp/modules-plain
+: >/tmp/modules-stripped
+: >/tmp/modules-sorted
+: >/tmp/moduleslist
+
+# find pci aliases
+aliases=`find /sys/ -noleaf -name modalias -exec cat {} +`
+
+# check for empty aliases
+if [ "$aliases" = "" ]; then
+ echo "hwdetect aborted -- you need a kernel >= 2.6.12" >&2
+ exit 1
+fi
+
+# generate files for the different actions
+modprobe -a --set-version=$KERNEL_VERSION --show-depends $aliases >> /tmp/modules-plain 2>/dev/null
+
+# fix evdev detection
+#if [ "`echo $aliases | grep 'serio:ty06pr*[id]*[ex]*'`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends evdev >> /tmp/modules-plain 2>/dev/null
+#fi
+# fix Intel536ep detection
+#if [ "`echo $aliases | grep 'pci:v00008086d00001040sv000016BEsd00001040bc07sc80i00'`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends Intel536 >> /tmp/modules-plain 2>/dev/null
+#fi
+
+# fix ide cdrom detection on proliant 1600
+if [ "`echo $aliases | grep 'pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00'`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-generic >> /tmp/modules-plain 2>/dev/null
+fi
+
+# find PNP devices like parports, soundcards etc.
+# (workaround for rtc, pcspkr, irtty-sir and analog are included)
+if [ "`find /sys/devices -noleaf -name 'id' | grep /pnp`" ]; then
+ for i in `find /sys/devices -noleaf -name "id" | grep /pnp`; do
+ devid=`cat $i | grep PNP`
+ [ "$devid" ] || continue
+
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends pnp:d${devid} >> /tmp/modules-plain 2>/dev/null
+
+ [ "$devid" = "PNP0800" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends pcspkr 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ #[ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_proc 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_sysfs 2>/dev/null >> /tmp/modules-plain
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_dev 2>/dev/null >> /tmp/modules-plain
+ [ "$devid" = "PNP0510" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0511" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNPb02f" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends analog 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+
+ # load ppp-generic if serial ports are detected for modems
+ [ "$devid" = "PNP0501" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ done
+fi
+
+# IDE disks/cdroms/floppy/tape
+#if [ "`find /proc/ide -noleaf -name 'media'`" ]; then
+# for i in $(cat `find /proc/ide -noleaf -name "media"`); do
+# case $i in
+# cdrom) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-cd >> /tmp/modules-plain 2>/dev/null ;;
+# floppy) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-floppy >> /tmp/modules-plain 2>/dev/null ;;
+# disk) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-disk >> /tmp/modules-plain 2>/dev/null ;;
+# tape) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-tape >> /tmp/modules-plain 2>/dev/null ;;
+# esac
+# done
+#fi
+
+# SCSI disks/cdroms/tapes/generic devices
+if [ "`find /sys/devices -noleaf -name 'type'`" ]; then
+ for i in $(cat `find /sys/devices -noleaf -name "type"`); do
+ case $i in (4|5) modprobe -i --set-version=$KERNEL_VERSION --show-depends sr-mod >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (2|3|6|8|9) modprobe -i --set-version=$KERNEL_VERSION --show-depends sg >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (0|7|14) modprobe -i --set-version=$KERNEL_VERSION --show-depends sd-mod >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (1) modprobe -i --set-version=$KERNEL_VERSION --show-depends st >> /tmp/modules-plain 2>/dev/null ;; esac
+ done
+fi
+
+# add Buslogic for vmware
+if [ "$VMWARE" = "1" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends BusLogic >> /tmp/modules-plain 2>/dev/null
+fi
+
+# Firewire disks/cdroms/network
+#if [ "`grep 'ohci1394' /tmp/modules-plain`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends sbp2 >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends eth1394 >> /tmp/modules-plain 2>/dev/null
+#fi
+
+# Modem devices
+#case $i in (Intel536|Intel537|ltmodem|ltserial|slamr|slusb) \
+# grep "$i" /tmp/modules-plain && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic >> /tmp/modules-plain 2>/dev/null ;; \
+# esac
+
+# Parport modules
+if [ "`grep 'parport' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends lp >> /tmp/modules-plain 2>/dev/null
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends ppdev >> /tmp/modules-plain 2>/dev/null
+fi
+
+# Sound OSS compat modules
+if [ "`grep 'snd-pcm' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-pcm-oss >> /tmp/modules-plain 2>/dev/null
+fi
+if [ "`grep 'snd-seq' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-seq-oss >> /tmp/modules-plain 2>/dev/null
+fi
+
+# USB modules
+#if [ "`grep 'usb/' /tmp/modules-plain`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usbhid >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usb-storage >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usblp >> /tmp/modules-plain 2>/dev/null
+#fi
+
+sort -u /tmp/modules-plain >> /tmp/modules-stripped
+
+# OTHER modules loading first for speed up!
+grep -v "ide/" /tmp/modules-stripped | grep -v "scsi/" | grep -v "fusion/" | grep -v "block/sx8" | grep -v "message/fusion" | \
+ grep -v "block/cciss" | grep -v "block/cpqarray" | grep -v "block/DAC960" | grep -v "ata/" | \
+ grep -v "net/" | grep -v "pcmcia/" | grep -v "usb/" | \
+ grep -v "ieee1394/" >> /tmp/modules-sorted
+# make a correct order for the modules, internal devices have priority!
+# only use old ide modules if boot parameter 'ide-legacy' is given
+if [ "$IDE_LEGACY" = "1" ]; then
+ grep "ide/" /tmp/modules-stripped >> /tmp/modules-sorted
+else
+ grep "ata/pata" /tmp/modules-stripped >> /tmp/modules-sorted
+ grep "ata/ata_generic" /tmp/modules-stripped >> /tmp/modules-sorted
+fi
+grep "scsi/" /tmp/modules-stripped | grep -v "sd_mod" | grep -v "sr_mod" | grep -v "/sg.ko" | grep -v "/st.ko" >> /tmp/modules-sorted
+grep "block/" /tmp/modules-stripped | grep -v "sx8" | grep -v "nbd" | grep -v "pktcdvd" | grep -v "floppy" >> /tmp/modules-sorted
+grep "fusion/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "ata/" /tmp/modules-stripped| grep -v "pata" | grep -v "ata_generic" | grep -v "libata" >> /tmp/modules-sorted
+grep "block/" /tmp/modules-stripped | grep "sx8" >> /tmp/modules-sorted
+grep "net/" /tmp/modules-stripped | grep -v "wireless/" | grep -v "usb/" >> /tmp/modules-sorted
+grep "wireless/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "pcmcia/" /tmp/modules-stripped >> /tmp/modules-sorted
+
+# speed up usb module loading
+grep "usb-storage" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usblp" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usbhid" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usb/" /tmp/modules-stripped | grep -v "usb-storage" | grep -v "usbhid" | grep -v "usblp" >> /tmp/modules-sorted
+grep "firewire/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "ieee1394/" /tmp/modules-stripped >> /tmp/modules-sorted
+
+# add scsi device modules at the end
+grep "sd_mod" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "sr_mod" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "/st.ko" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "/sg.ko" /tmp/modules-stripped >> /tmp/modules-sorted
+
+
+sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" /tmp/modules-sorted >> /tmp/moduleslist
+
+# blacklist framebuffer modules
+for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*/*fb*); do
+ BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)"
+done
+for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*fb*); do
+ BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)"
+done
+# delete modules that are blacklisted
+BLACKLIST="${BLACKLIST} $(echo ${disablemodules} | sed 's|-|_|g' | sed 's|,| |g')"
+for i in $BLACKLIST; do
+ [ "$i" ] || continue
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ # since '-' and '_' are interchangeable, we have to cover both
+ if [ "`echo $i | grep '-'`" ]; then
+ i="`echo $i | sed 's|-|_|g'`"
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ elif [ "`echo $i | grep '_'`" ]; then
+ i="`echo $i | sed 's|_|-|g'`"
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ fi
+done
+
+listmods() {
+ key=$1 ; shift
+ ex=
+ while [ "$1" ]; do
+ [ "$ex" ] && ex="$ex|$1" || ex="$1"
+ shift
+ done
+ for ln in `grep "$key" /tmp/modules-sorted | sed 's|^insmod ||g'`; do
+ if [ "$ex" ]; then
+ echo $ln | egrep -v "$ex" | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p"
+ else
+ echo $ln | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p"
+ fi
+ done
+}
+showlist() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ echo -n "$cat: "
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+showlist2() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ echo -n "$cat="
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+showlist3() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+# starting different actions
+while [ $# -gt 0 ]; do
+ case $1 in
+ -hooks-dir=*|--hooks-dir=*)
+ HOOKS_DIR="$(echo $1 | awk -F= '{print $2;}')"
+ ;;
+ --load-modules)
+ # load all detected pci modules
+ for i in `cat /tmp/moduleslist`; do
+ modprobe $i > /dev/null 2>&1
+ done
+ ;;
+
+ --unload-modules)
+ # load all detected pci modules
+ for i in `cat /tmp/moduleslist`; do
+ modprobe -r $i > /dev/null 2>&1
+ done
+ ;;
+
+ --show-modules)
+ showlist "AGP " `listmods agp/`
+ showlist "ACPI " `listmods acpi/`
+ showlist "IDE " `listmods ide/`
+ showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic`
+ showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy`
+ showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8`
+ showlist "USB " `listmods usb/ usb/input`
+ showlist "FW " `listmods firewire/` `listmods ieee1394/`
+ showlist "NET " `listmods net/ irda/`
+ showlist "INPUT " `listmods input/` `listmods hid/`
+ showlist "IRDA " `listmods irda/`
+ showlist "ISDN " `listmods isdn/`
+ showlist "PCMCIA " `listmods pcmcia/`
+ showlist "SOUND " `listmods sound/`
+ showlist "VIDEO " `listmods video/`
+ showlist "OTHER " `listmods modules/ agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/`
+ ;;
+
+ --show-modules-order)
+ showlist "MODULES ORDER" `listmods modules/`
+ ;;
+
+ --show-agp) showlist "AGP " `listmods agp/` ;;
+ --show-acpi) showlist "ACPI " `listmods acpi/` ;;
+ --show-ide) showlist "IDE " `listmods ide/` ;;
+ --show-pata) showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic`;;
+ --show-scsi) showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy`;;
+ --show-sata) showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8` ;;
+ --show-usb) showlist "USB " `listmods usb/ usb/input` ;;
+ --show-fw) showlist "FW " `listmods firewire/` `listmods ieee1394/` ;;
+ --show-net) showlist "NET " `listmods net/ irda/` ;;
+ --show-input) showlist "INPUT " `listmods input/` `listmods hid/` ;;
+ --show-irda) showlist "IRDA " `listmods irda/` ;;
+ --show-isdn) showlist "ISDN " `listmods isdn/` ;;
+ --show-pcmcia) showlist "PCMCIA " `listmods pcmcia/` ;;
+ --show-sound) showlist "SOUND " `listmods sound/` ;;
+ --show-video) showlist "VIDEO " `listmods video/` ;;
+ --show-other) showlist "OTHER " `listmods .ko agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/` ;;
+ --hostcontroller) showlist2 "MODULES" \"`listmods ide/pci` `listmods ata/pata` `listmods ata/ata_generic` `listmods scsi/ /sg.ko /st.ko sr_mod sd_mod` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy` `listmods ata/ pata ata_generic` `listmods drivers/block/sx8`\" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g'
+ ;;
+ --net) if [ "$(showlist2 "MODULES" \(`listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' | grep '8139cp')" ] ; then
+ if [ "$(dmesg | grep '"8139too"')" ]; then
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139cp//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ else
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139too//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ fi
+ else
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ fi
+ ;;
+ --sound) MODULES_EXPORTED="$MODULES_EXPORTED $(listmods sound/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ ;;
+ --modules) showlist2 "MODULES" \(`listmods modules/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ ;;
+ --hooks)
+ if [ "$HOOKS_DIR" = "" ]; then
+ HOOKS_DIR="/lib/initcpio/install"
+ fi
+ START_HOOKS="base udev dsdt autodetect ide pata scsi sata usb fw pcmcia net raid raid-partitions usbinput keymap encrypt lvm2 filesystems"
+ # remove the ones that don't exist on the system
+ for i in ${START_HOOKS}; do
+ if ! [ -e "${HOOKS_DIR}/$i" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/${i}\ //g")
+ fi
+ done
+ # ide/pata check
+ if [ "${IDE_LEGACY}" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/pata//g")
+ else
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/ide//g")
+ fi
+ # usbinput, check for usbhid
+ if ! [ "$(cat /proc/modules | grep usbhid)" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/usbinput//g")
+ fi
+ # keymap, check rc.conf for KEYMAP="us"
+ if [ "$(grep '^KEYMAP="us"' /etc/rc.conf)" ]; then
+ if ! [ "${KEYMAP}" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/keymap//g")
+ fi
+ fi
+ ### TODO raid, check for presence of md devices in /dev
+ #if ! [ "$(ls /dev/md* > /dev/null 2>&1 )" ]; then
+ # START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid//g")
+ #fi
+ if ! [ "$RAID" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid\ //g")
+ fi
+ if ! [ "$RAID_PARTITIONS" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid-partitions\ //g")
+ fi
+ ### TODO lvm2, encrypt check
+ # encrypt, check for presence of mapper/root
+ #if ! [ "$(ls /dev/mapper/root > /dev/null 2>&1 )" ]; then
+ # START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g")
+ #fi
+ if ! [ "$ENCRYPT" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g")
+ fi
+ if ! [ "$LVM2" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/lvm2//g")
+ fi
+ if ! [ "$USB" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/usb\ //g")
+ fi
+ if ! [ "$FW" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/fw//g")
+ fi
+ if ! [ "$PCMCIA" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/pcmcia//g")
+ fi
+ if ! [ "$NFS" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/net//g")
+ fi
+ if ! [ "$DSDT" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/dsdt//g")
+ fi
+ echo "HOOKS=\"$START_HOOKS\"" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g'
+ ;;
+ esac
+ shift
+done
+
+# cleanup
+rm /tmp/modules-plain
+rm /tmp/modules-sorted
+rm /tmp/modules-stripped
+rm /tmp/moduleslist
+
+# vim: set ts=2 sw=2 noet:
diff --git a/abs/core-testing/imagemagick/ChangeLog b/abs/core-testing/imagemagick/ChangeLog
new file mode 100644
index 0000000..8b3a5fb
--- /dev/null
+++ b/abs/core-testing/imagemagick/ChangeLog
@@ -0,0 +1,44 @@
+2008-08-19 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.10-1
+ * Upstream update
+
+2008-08-11 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.7-1
+ * Upstream update
+ * Added bzip2 and libxml2 depends
+ * Disabled docs
+
+2008-07-18 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.4-1
+ * Upstream update
+
+2008-06-23 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.1-1
+ * Upstream update
+ * Fixed linking problem (close FS#10574)
+
+2008-05-19 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.1.3-1
+ * Upstream update
+
+2008-04-30 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.1.0-1
+ * Upstream update
+
+2008-04-24 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.0.9-1
+ * Upstream update
+
+2008-03-29 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.0.2-1
+ * Upstream update
+ * Added dvips to delegates list for dvi support (close FS#8914)
+ * Added ChangeLog
diff --git a/abs/core-testing/imagemagick/PKGBUILD b/abs/core-testing/imagemagick/PKGBUILD
new file mode 100644
index 0000000..79555bf
--- /dev/null
+++ b/abs/core-testing/imagemagick/PKGBUILD
@@ -0,0 +1,56 @@
+# $Id: PKGBUILD 9867 2008-08-20 05:56:48Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+
+# NOTE: ImageMagick builds against an existing installation
+# uninstall ImageMagick before building, or build it, install it, build it.
+
+# NOTE 2: To circumvent linking problems (FS#10574), this package must now be built the following way:
+# install old package, build new package, install new package, rebuild
+
+pkgname=imagemagick
+pkgver=6.4.2.10
+pkgrel=1
+pkgdesc="An image viewing/manipulation program"
+arch=('i686' 'x86_64')
+url="http://www.imagemagick.org/"
+license=('custom')
+depends=('lcms' 'libwmf' 'librsvg' 'libxt' 'gcc-libs' 'ghostscript' 'openexr' 'libtool>=2.2' 'bzip2' 'libxml2')
+#makedepends=('ghostscript' 'openexr')
+options=('!makeflags' '!docs')
+source=(ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-${pkgver%.*}-${pkgver##*.}.tar.bz2 \
+ libpng_mmx_patch_x86_64.patch add_delegate.patch)
+md5sums=('f60ae313a2cc2fcc980543165e7ebaf4' '069980fc2590c02aed86420996259302'\
+ '7f5851c4450b73d52df55c7e806cc316')
+sha1sums=('0c45712a07b0d337ac4130c3ad605566d013ea3f'
+ 'e42f3acbe85b6098af75c5cecc9a254baaa0482c'
+ '19b40dcbc5bf8efb8ce7190fed17e2921de32ea5')
+
+build() {
+ cd ${srcdir}/ImageMagick-${pkgver%.*}
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ patch -Np1 < ../libpng_mmx_patch_x86_64.patch || return 1
+ fi
+
+ patch -p0 < ../add_delegate.patch || return 1
+
+ #LIBS=-lMagickWand ./configure --prefix=/usr --without-modules --disable-static --disable-openmp \
+ ./configure --prefix=/usr --without-modules --disable-static --disable-openmp \
+ --with-x --with-wmf --with-openexr \
+ --with-gslib --with-gs-font-dir=/usr/share/fonts/Type1 \
+ --with-perl --with-perl-options="INSTALLDIRS=vendor" \
+ --without-gvc --without-djvu --without-jp2 \
+ --without-fpx --without-dps || return 1
+
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -D -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+ install -D -m644 NOTICE ${pkgdir}/usr/share/licenses/${pkgname}/NOTICE || return 1
+
+ #Cleaning
+ find ${pkgdir} -name '*.bs' -exec rm {} \; || return 1
+ find ${pkgdir} -name '.packlist' -exec rm {} \; || return 1
+ find ${pkgdir} -name 'perllocal.pod' -exec rm {} \; || return 1
+
+ rm -f ${pkgdir}/usr/lib/*.la || return 1
+}
diff --git a/abs/core-testing/imagemagick/add_delegate.patch b/abs/core-testing/imagemagick/add_delegate.patch
new file mode 100644
index 0000000..6ba6009
--- /dev/null
+++ b/abs/core-testing/imagemagick/add_delegate.patch
@@ -0,0 +1,8 @@
+--- config/delegates.xml.in.orig 2008-03-29 23:25:03.000000000 -0400
++++ config/delegates.xml.in 2008-03-29 23:27:35.000000000 -0400
+@@ -103,4 +103,5 @@
+ <delegate decode="xps:color" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSColorDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
+ <delegate decode="xps:cmyk" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSCMYKDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
+ <delegate decode="xps:mono" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSMonoDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
++ <delegate decode="dvi" command="&quot;dvips&quot; -q -o &quot;%o&quot; &quot;%i&quot;"/>
+ </delegatemap>
diff --git a/abs/core-testing/imagemagick/libpng_mmx_patch_x86_64.patch b/abs/core-testing/imagemagick/libpng_mmx_patch_x86_64.patch
new file mode 100644
index 0000000..d86449a
--- /dev/null
+++ b/abs/core-testing/imagemagick/libpng_mmx_patch_x86_64.patch
@@ -0,0 +1,12 @@
+diff -Naur ImageMagick-6.2.7.orig/coders/png.c ImageMagick-6.2.7/coders/png.c
+--- ImageMagick-6.2.7.orig/coders/png.c 2006-05-21 12:35:55.784852536 +0200
++++ ImageMagick-6.2.7/coders/png.c 2006-05-21 12:36:50.698504392 +0200
+@@ -164,6 +164,8 @@
+ #define PNG_MAX_UINT (png_uint_32) 0x7fffffffL
+ #endif
+
++#undef PNG_ASSEMBLER_CODE_SUPPORTED
++
+ /*
+ Constant strings for known chunk types. If you need to add a chunk,
+ add a string holding the name here. To make the code more
diff --git a/abs/core-testing/imlib2/PKGBUILD b/abs/core-testing/imlib2/PKGBUILD
new file mode 100644
index 0000000..1fd9f74
--- /dev/null
+++ b/abs/core-testing/imlib2/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 2921 2008-06-15 20:14:02Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=imlib2
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="Imlib2 is the successor to Imlib. It is NOT a newer version -- Imlib 2 can be installed alongside Imlib 1.x"
+arch=(i686 x86_64)
+url="http://sourceforge.net/projects/enlightenment"
+license=('BSD')
+depends=('libtiff' 'giflib' 'bzip2' 'freetype2' 'libxext' 'libpng' 'libid3tag')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/enlightenment/$pkgname-$pkgver.tar.gz)
+md5sums=('16a3d885e523303be794282c0ed90841')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # Enable x86 MMX optimizations for i686 (32-bit assembler code not compatible with x86_64)
+ [ "${CARCH}" = "i686" ] && EXTRAOPTS="--disable-mmx"
+ # Disable AMD64 optimizations due to bug in assembler code
+ [ "${CARCH}" = "x86_64" ] && EXTRAOPTS="--disable-amd64"
+
+ ./configure --prefix=/usr --sysconfdir=/etc/imlib2 --x-libraries=/usr/lib $EXTRAOPTS
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/LICENSE.txt
+}
diff --git a/abs/core-testing/initscripts/ChangeLog b/abs/core-testing/initscripts/ChangeLog
new file mode 100644
index 0000000..1ba9dc8
--- /dev/null
+++ b/abs/core-testing/initscripts/ChangeLog
@@ -0,0 +1,2083 @@
+commit d2ae38c8b06d057c7593b7ba836bf24a1f8f6c4f
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Aug 5 14:34:53 2008 -0400
+
+ Set kbd_mode on all virtual consoles
+
+ Previous behavior only set the mode for vc0.
+ See FS#11093
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b7d66decca5117aaba3b73d2eccb97594ef1ea98
+Author: Daniel Kaminski <maniel.rulez@gmail.com>
+Date: Tue Jul 22 17:50:02 2008 -0400
+
+ ipv6 over ipv4 tunneling support in /etc/rc.d/network
+
+ This is done by checking the route config for a double colon
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 04899c1b829f1a4708a04e2188b256901845770f
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Jul 18 11:47:22 2008 -0400
+
+ Remount filesystems RO if umounting fails
+
+ Just a safeguard, suggested by FS#10947
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit e13ee23fd2d0035150d178fc683079696fb446fc
+Author: James Rayner <james@archlinux.org>
+Date: Mon Jul 14 21:24:33 2008 +1000
+
+ Add some useful error messages to wireless code
+
+ Additionally add optional WIRELESS_TIMEOUT parameter
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 84f76aafc5f6d7f3d2c2141d2930e42dcb82def0
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Jun 30 12:35:21 2008 -0400
+
+ Decouple ISO release name from initscripts
+
+ This should aleviate some gripes
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9dcd7a9fed510dacd14e4cf4497e73a98f847fac
+Author: Natanael Copa <natanael.copa@gmail.com>
+Date: Fri Jun 20 13:46:10 2008 -0400
+
+ Minor simplication for /etc/rc.d/functions.d/
+
+ Trivial simplification to make code more readable.
+ Removes one fork so booting should be "faster". Probably not mesureable
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit fa73767d19ea505ec32533b8856122968207db2f
+Author: Anton Fiuman <llexiw@gmail.com>
+Date: Sun May 25 00:55:56 2008 +0200
+
+ Allow users to ovverride daemon start and stop in rc.multi and rc.shutdown
+
+ Signed-off-by: Anton Fiuman <llexiw@gmail.com>
+
+commit 63db98c2a8e256f9219c5c6501b40846040bf089
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu May 22 13:02:55 2008 -0400
+
+ Remove source_functions in favor of always sourcing the dir
+
+ This is an obvious oversight on my part - this change allows
+ the overridden functions to work in daemon scripts and
+ anything else that uses /etc/rc.d/functions by itself.
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit de031161e02772aaeaefed1398f8ad59621bd8bc
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Wed May 14 13:49:16 2008 +0200
+
+ Fix commit 521d7678cecb3018923f7c869bc8a5f74dc29268, this makes more sense
+
+commit af36e8dd3c025d7593bda4f310612989927149d1
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 13 18:32:43 2008 +0200
+
+ Always quote $TIMEZONE to fix FS#10178
+
+commit 521d7678cecb3018923f7c869bc8a5f74dc29268
+Author: Pierre Schmitz <pierre@archlinux.de>
+Date: Sat Apr 12 13:37:22 2008 +0200
+
+ fixing udev hotplugging Some devices like scanners do not work with recent udev/initscript changes. This patch seems to fix such issues.
+
+commit 42c5f304ad361fd9e16d08a5230043e47437c399
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Tue Apr 8 20:12:55 2008 +0200
+
+ Just some whitespace fixes
+
+commit 391cfa71285cfca49aed0d6d2a05c9a949cb9857
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Apr 7 15:33:20 2008 +0200
+
+ Remove setterm screen blanking from rc.sysinit
+ Contrary to what one may think, screen blanking not only affects the
+ console, but also the X server. This line may lead to unwanted blank screens
+ although one has DPMS disabled in X. Furthermore, it adds a hardcoded,
+ non-configurable default setting to Arch.
+ This should either be made configurable (but IMO, we don't need more stuff
+ in rc.conf) or added to rc.local by the user if needed. As this is a
+ one-liner, the second solution sounds good to me.
+
+commit a58228bfe3764008ecf971d420fb7fa0bb704b54
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:37:17 2008 +0200
+
+ Remove extra newline from udev status output
+
+commit 307c850a0c345a092a21fff50da2f0658c3c03c4
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:30:48 2008 +0200
+
+ Remove the "interface is already up" check from ifup
+ As stated in commit f589387f0b9ef56de8ab30f50a3c562e010baeeb, even an
+ interface that is 'UP' may need configuring. However, the check introduced
+ in this commit is nonsense (causing bug #9960, possibly others). The best
+ idea is to remove the check altogether: This may cause duplicate dhcpcd
+ processes to run (should be fixed), but otherwise ensures the interface is
+ brought up when it should be.
+
+commit 89355a468670983476d29b415c12e097d5d79ca5
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:20:37 2008 +0200
+
+ Fix USEDIRECTISA in rc.shutdown as well
+
+commit b55845f7d0e3c81f1936d471370dcb40822463b0
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:55:23 2008 +0200
+
+ Remove old initrd hacks
+ We haven't been using initrd for a while, so these hacks are unnecessary.
+ The "encrypted root device hack" was obsoleted by proper udev rules long
+ ago. The code to umount and free the initrd is not critical, so if somebody
+ insists on using initrd, it can be done in rc.local.
+
+commit 4c493ec5599b1a30dadc51567e2546a63feb87ef
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:50:57 2008 +0200
+
+ Make USEDIRECTISA default to no, which is a sane default according to hwlock's manpage. This is contrary to the behaviour in older initscripts.
+
+commit 4a4cb51a138d73753bb967c27a9f7ea8bf9f88b3
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:48:22 2008 +0200
+
+ Move /sys mounting to the beginning, together with /proc and /dev and clean up some comments
+
+commit f3e064ec822b3dae191e1ae5d2bb921a970af86e
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:40:08 2008 +0200
+
+ Remove any special handling of usbfs from rc.sysinit
+ libusb has migrated to /dev/bus/usb, which is managed by udev and thus more
+ flexible. Some legacy applications (like VirtualBox) still use it. However,
+ since users need special permissions to access usbfs, they have to be
+ specified via mount options in fstab. So there are two cases:
+ 1) a user does not need usbfs
+ 2) a user needs it, but must add it to fstab to force the right permissions
+ Our old special handling in rc.sysinit is thus obsolete (and it was ugly
+ anyway).
+
+commit 5386d7332dd77ecf4113dfc10773b529f583e797
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Mar 19 11:12:19 2008 +0200
+
+ Use actual device number for creating /dev/misc/rtc0
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 6e37620983c107e13120d1e249a37b3be6d0b12d
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Tue Mar 18 22:43:38 2008 +0200
+
+ Do not try to create /dev/pts and /dev/shm twice
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit a71b075e90154073e3ba331de9b74b8bc088ec45
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Mar 18 12:33:24 2008 -0500
+
+ Fix a directory typo
+
+ Looks like a 'bin/' slipped in there somewhere. Whoops
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 52a6990bc7ab0b48d6d227a8dcb782cb1d419dd5
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Mar 17 11:34:12 2008 -0500
+
+ Variable expansion quoting
+
+ This was missed, and caused some gross output if a user
+ mistakenly had a space in their timezone (we should fail
+ gracefully here, not let bash error).
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 15647a9f42a00406ec1c1c02515fe1e90825bd9b
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Tue Mar 11 00:02:22 2008 +0200
+
+ Remove the 'makedevs' script
+
+ * last touched somewhere in 2005
+ * not used by anything
+ * sits in /sbin but uses software from /usr/bin
+ * makedev in Extra exists
+ * if one wants a static /dev - just use mknod
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 12ee0a4fe0108fe952dc31c5f42648037b9c5cde
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Mon Mar 10 17:58:48 2008 +0200
+
+ Fix a typo in /dev/rtc creation steps
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 7526db5d0405188fee94d16fbcfbdf13a17e6a45
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Mar 9 17:22:11 2008 +0200
+
+ More full-path fixes
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 2c9681f461a0cde98a88de65e232369df68ed859
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 20:02:09 2008 +0200
+
+ Add basic support for dependencies in rc.d scripts
+
+ Example of use:
+ DEPENDS=('dbus' 'acpid')
+ . . .
+ ck_depends ${DEPENDS[@]}
+ and those daemons will be started if not running already
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 45e331302268490cfb532ea6fe827cba1351ec5b
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 19:22:48 2008 +0200
+
+ Use full path to binaries everywhere
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 6214a05ea023b8bc3014d8032af18b2404276d00
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 18:45:24 2008 +0200
+
+ Create /dev/rtc before running hwclock (FS#9636)
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 973c1b65ad9fb92c6a0e017a7b8bfb40c38b3bcd
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 19:28:08 2008 +0200
+
+ Fix indentation in rc.d/functions
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 646862aa989d82c35d267d5771c6cc620275bf4c
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Mar 7 14:35:31 2008 -0600
+
+ Additional /dev/ setup that udev doesn't do
+
+ These nodes are not covered by default udev, so lets make
+ sure they're added properly.
+
+ Ref: FS#9726
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit abe6dcb83d16c6e40fed99c202085c78cb356fa1
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Mar 7 14:34:26 2008 -0600
+
+ Add my name to the copyright output
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 91b86efedd70e6b83232057fbf2b089a47b76333
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Mar 6 00:24:20 2008 +0200
+
+ Revert back to not loading defkeymap
+
+ * There is a patch for the kernel now, so no need to workaround the bug
+ * Add a missing check for an empty KEYMAP
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 56fffa9954db654c1731e07f753c3de105896455
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Mar 2 16:31:34 2008 +0200
+
+ Always load defkeymap
+
+ It seems that there's a bug in the kernel 2.6.24,
+ which makes the built-in defkeymap to produce incorrect composite chars.
+ Thus keymaps that don't have 'include "compose.latin1"' have issues (FS#9593).
+ While it is better to fix this bug in kernel and all affected keymaps
+ loading defkeymaps before other keymaps seems to not hurt anyway.
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit f94f52e5ab877ffc3160d0bf20c70be9865d45b2
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 1 00:40:02 2008 +0200
+
+ Set up vc/0 as well
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 1b5eeefa5a859a9c26a717603bd4c0e9fb74de82
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 1 00:04:01 2008 +0200
+
+ Do not mount /proc/bus/usb if commented in fstab
+
+ Fixes FS#9451
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 4d0920ede7ce9c3d67e03c67b9ee584cf1a3fe9d
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 28 13:55:41 2008 +0200
+
+ Make non-UTF-8 consoles work correctly in .24+ kernels
+
+ * Since 2.6.24 the virtual terminal is in UTF-8 mode
+ and the keyboard is in Unicode mode by default,
+ and configurable only at run-time.
+
+ * To make non-UTF-8 consoles work correctly:
+ - the non-UTF-8 mode is set for the virtual terminal,
+ - the XLATE mode is set for the keyboard.
+
+ * UTF-8 mode is still set explicitly (not relying on default),
+ so console works correctly even in a case when user set vt.default_utf8=0
+ in kernel commandline, but LOCALE in rc.conf is *.UTF-8.
+
+ * % is a special symbol for printf, so it should be written twice.
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit ef86e38e9fd750db35e23aa949aa60e4c9f60f0c
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 21 18:07:44 2008 +0200
+
+ Remove trailing whitespaces and do some little reformatting
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit bb639b33167e13602aacf34bab6032992e7b3d6a
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Wed Feb 20 23:46:57 2008 -0600
+
+ Add some udev stats output
+
+ So we can see timing and all that jazz
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit e658f681e1d36a75b527d182ce28ee0781ed4492
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 20:16:49 2008 -0600
+
+ rc.shutdown: Fix hwclock double calls
+
+ Commit 9673449ac0af77751eab62423114f27e7dbc497c added --directisa
+ configuration to rc.shutdown, but didn't remove the old hwclock calls and
+ instead just added a second call. Remove the original calls.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit e16e2d17c97f91cdb9eda0ad3525ee7977ad40a6
+Merge: 626037f... fbb8d26...
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 19:56:02 2008 -0600
+
+ Merge branch 'posix' into working
+
+commit 626037f6043596f21511b76b088dca86fc079f42
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 19:53:03 2008 -0600
+
+ functions:source_functions(): don't fail on empty dir
+
+ Instead of using globbing which will fail on an empty directory, use an ls
+ call similar to other places in the initscripts which is not prone to
+ failure. (See rc.single in the daemon shutdown for example.)
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit fbb8d26a81dc220d7795be871e09c89fd0e03a76
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:30:05 2007 -0600
+
+ Remove echo -e usage from rc.sysinit
+
+ Use the always available (in sh) printf method instead.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit 7b6fddfb12106c9485a9ceb8fa1876a501d1f181
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:23:02 2007 -0600
+
+ Remove some bashisms from network, even though we cannot convert it
+
+ Since netfs and network source rc.conf, we cannot fully convert it to an sh
+ script. However, we can get rid of a few things that are not sh compatible.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit e3985084056bb80c886ea649674c3da5b906ccab
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:18:26 2007 -0600
+
+ Make install.sh sh compatible
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit 980791fd888b6efff6319c77363aab473166ca6b
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:17:15 2007 -0600
+
+ Make functions sh compatible
+
+ There is no reason to use bashisms in functions, so eliminate any and use
+ printf instead of echo options which are not guaranteed to be implemented in
+ a POSIX sh.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit dc4cee8f5987098a07a8b272573424b599a52598
+Author: Dan McGee <dan@archlinux.org>
+Date: Sat Nov 17 12:03:59 2007 -0600
+
+ Don't assume sh == bash
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit ccc90d4d211a61a21c835c1e51c807ddd485a136
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 14 14:51:40 2008 -0600
+
+ Add support for (un)mounting nfs4
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9673449ac0af77751eab62423114f27e7dbc497c
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Jan 23 17:46:03 2008 -0600
+
+ Use --directisa configuration in rc.shutdown as well
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit f589387f0b9ef56de8ab30f50a3c562e010baeeb
+Author: Loic Nageleisen <lloeki@gmail.com>
+Date: Tue Jan 8 09:14:42 2008 -0600
+
+ Enhance interface 'up' state checking
+
+ Using the 'UP' state to imply operational status is wrong and even if a
+ device is 'UP' we may still need to run ifconfig/dhcp
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9e341d31cd15172941268412d258c38591ff4988
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 09:09:46 2008 -0600
+
+ network script logic cleanups/enhancements
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 7719cd7c0ac6d3f316ed8595becf29ef418d9af9
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 09:07:05 2008 -0600
+
+ Remove the hotplug functionality from the network script
+
+ Hotplug hasn't been supported in Arch for ages
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit c2d7f40b2e0837f5544e6e2bfc22dc12e994ed16
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 03:35:05 2008 -0600
+
+ Create some basic device nodes on initialization
+
+ We need, at the very least, these three device nodes
+ (null, console, and zero) created before we get udev
+ up and running
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit cd0b3911131ee0eddc32c5e3992036c2e769948f
+Author: Jonathan Frazier <eyeswide@gmail.com>
+Date: Tue Jan 8 03:26:12 2008 -0600
+
+ minilogd cleanup and warning fixes
+
+ gcc gives a warning about signed/unsigned ints, and it tries to write to
+ syslog's /dev/log with a dgram socket which gives an EPROTOCOL error.
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9bf2014b750579d9720c13c9dfb9d358e0c27665
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 03:06:56 2008 -0600
+
+ Allow --directisa configuration for hwclock calls
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit ab5595c4f8cdea8e6b1813701828576cbfee2fc2
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:32:12 2007 -0600
+
+ Deprecate MOD_BLACKLIST via some comments
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 2694f1224dfb5b5c734a781fc813e639139feb39
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:19:56 2007 -0600
+
+ Mount our ram /dev as soon as possible
+
+ On readonly root systems, lots of fdup calls fail on device nodes, for
+ instance in minilogd. So we'll mount /dev as early as we can
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 25811badce84cd157a8b66c84e78f931cad1d129
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:15:26 2007 -0600
+
+ Set hwclock *before* udev is loaded
+
+ This prevents /dev/ timestamps from being 'in the future' when the hwclock
+ is not in UTC.
+
+ Closes FS#8665
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b82f9d580d1ab70e78de4c81c180c5a308bd1238
+Author: James Rayner <james@archlinux.org>
+Date: Thu Dec 20 10:53:25 2007 -0600
+
+ Tidy up rc.conf
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit a4a35bda6ef3fd3e444e90ab362369f0b1f511dc
+Author: Simo Leone <simo@archlinux.org>
+Date: Thu Dec 20 01:30:59 2007 -0600
+
+ Make the background black on all status text
+
+ This is the easiest way to cleanup the script output on white terminals
+ without resorting to shutting off color.
+
+ It won't make everyone happy, though.
+
+ Ref: FS#1186
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 5ccb8edb591213e03fc3909aa7db7242b9f54b30
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Dec 17 16:16:38 2007 -0600
+
+ Modify comment above MOD_AUTOLOAD to indicate that it autoloads
+
+ Some people thought the comment was unclear
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 20d6e1081ec7105207c01e9d8d2a58bb4a145331
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Dec 17 16:08:05 2007 -0600
+
+ Save dmesg output at the end of the boot process
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9d86b8814583509069ad6707688e2b41fc0d292f
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Dec 12 10:28:37 2007 -0600
+
+ Fix FS#8843 (no colors in rc.sysinit output with separate /usr)
+
+ when tput returns exit code 3 - assume it output '8'
+ (as written in the /usr/share/terminfo/l/linux file)
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+ Converted to if/elsif form
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 662a52c15343338e9d843c6f70d39acefd3a2c4c
+Author: Dan McGee <dan@archlinux.org>
+Date: Sun Nov 18 11:47:54 2007 -0600
+
+ Move start_udev actions to rc.sysinit
+
+ start_udev has been deprecated upstream for some time. We shouldn't use
+ some hacked up version of it either.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b1d0ec7cb6e8cea9f2fd7b0c11a0b607467615bd
+Author: James Rayner <james@archlinux.org>
+Date: Sat Nov 10 13:26:39 2007 +1100
+
+ Removing netcfg from initscripts
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b8e558d5784c8054a91dcefd8495b739a664dbae
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Wed Nov 28 14:47:09 2007 -0600
+
+ Source /etc/rc.d/functions.d/ for additional initscript functions
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 57879c6d6c51918b8106142e70643b53a9a8c7da
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Fri Nov 9 16:47:44 2007 +0200
+
+ Improve error handling and allow multiple keymaps to be loaded
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 9af6022b841c84283a061d6a7a5be943057ac3ae
+Author: Dan McGee <dan@archlinux.org>
+Date: Sun Oct 21 20:29:16 2007 -0500
+
+ Add a few more comments and examples to inittab
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit c5cffb501763c355299e593d16089fa5e56097b2
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 18:51:51 2007 +0200
+
+ Fix broken terminal detection, disable colors when the terminal is unknown.
+
+commit e3f7fc94d40e13f65e00adb3d7c48fb6f790c7d7
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Oct 21 16:39:24 2007 +0300
+
+ make non-ASCII chars work before login too
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit bbc2f945cb5df2ff103759ccb6de5183a87487b7
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 15:11:20 2007 +0200
+
+ yes, I fixed a trailing whitespace
+
+commit 59f89b4a25fbc100551a814f5bcf81aa05b6c2e7
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Oct 21 15:24:57 2007 +0300
+
+ Fix locale handling
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 956e12f7f57a38ed382032d361ac22196d015170
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:45:43 2007 +0200
+
+ change install.sh to exit on failure with return code 1
+
+commit 7d018e6ba90b1b006068502f443b69e258795061
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:40:50 2007 +0200
+
+ Added install script
+
+commit affd2bf9f3f84d507ab4c4a9998b4d1c2697300c
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:31:45 2007 +0200
+
+ Make daemon shutdown fix more consistent with the other init scripts and simplify it a bit
+
+commit 1b8636ed76e4bf5ef23c3b357e991c66e18714c5
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:06:07 2007 +0200
+
+ fixing second part of #6959
+
+commit bc1b5289228e74641a61cff3bb8b3751713dcf54
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:53:28 2007 +0200
+
+ replace all remaining backticks with $(...)
+
+commit 1828938d4406d5a95b7c89828f61600f9e6975a6
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:41:21 2007 +0200
+
+ fix the utf8 activating code: there are 63 virtual terminals, not 12
+
+commit c8030f33082229530ef2f0ed699eddea4465dad9
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:18:36 2007 +0200
+
+ Release name: "Don't Panic" -> "Core Dump"
+
+commit e064575e7842d55371db39991593f3ea0bf03b9b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:15:47 2007 +0200
+
+ Remove hwdetect as it is maintained as a separate package and this version isn't up to date anyway.
+
+commit cfab94bc71dc2e072c691122df82f4b6f2bdef29
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:05:28 2007 +0200
+
+ disable colors on stupid terminals
+ (fixes #7369)
+
+commit bb0984ad899ab3ae85ef8bf2c0e178a2b485885c
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Fri Oct 19 22:22:52 2007 +0000
+
+ added (barely tested) improvement of ASK keyword in crypttab
+
+commit 39a8c53bd8c2b82e824d9299a4a18d81c9e530bd
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Oct 19 07:02:14 2007 +0000
+
+ 'upgpkg: removed double entry of ifconfig lo'
+
+commit 31dbcc786457dd92d9f56618e7c946b94ec04646
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Oct 19 06:08:19 2007 +0000
+
+ 'upgpkg: added /sys/class/net/lo check'
+
+commit 24e468641b51e5e0a05e631d62ad706b5c0a2dd7
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 16:50:26 2007 +0000
+
+ 'upgpkg: added loopbackhardcoded to rc.sysinit and remove it from rc.conf'
+
+commit 6f35411f5ee1db8db1e27faf91c7b03e900c5bee
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Oct 18 16:15:58 2007 +0000
+
+ removing unnecessary isatty.c, replaced by shell test -t option
+
+commit a7c1404def678e27e0ac808397f46f81a1d2c8d4
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 14:27:56 2007 +0000
+
+ 'upgpkg: fixed utf typo'
+
+commit fa4866f0adce9c3e0bfc09fb878eebb99797c338
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 08:43:28 2007 +0000
+
+ 'upgpkg: trying to fix #6237,7554,7165,7641,5740'
+
+commit 8649f79e8e0027bd46da8b13f6d8ac5465471c35
+Author: Dan McGee <dan@archlinux.org>
+Date: Wed Aug 15 04:01:59 2007 +0000
+
+ upgpkg: initscripts 2007.08-2
+
+commit e3c06e981af869d6a00ec8cde34bde1e15cb53ad
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jul 30 20:24:42 2007 +0000
+
+ 'upgpgk: fixed nocpfs netfs bug and bump to don't panic release'
+
+commit 6852a33372052c1374248f6727e6f7755aeadd30
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun May 13 13:40:40 2007 +0000
+
+ upgpkg: initscripts 0.8-11
+
+commit aca95b25037ee1085c70a2e73b609a5d8cdff44b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun May 13 12:01:11 2007 +0000
+
+ upgpkg: initscripts 0.8-10
+
+commit cc2c8b1fa2a709b405e3efc65222b984a63e13c6
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat May 12 12:55:37 2007 +0000
+
+ 'upgpkg: bump to Duke and cleanup rc.sysinit and netds'
+
+commit 352dda7e7ba2c62686579e2c58b519ebb961b8be
+Author: James Rayner <james@archlinux.org>
+Date: Thu May 10 00:18:05 2007 +0000
+
+ upgpkg: initscripts 0.8-8
+ fixing flyspray #7004 #6859, change in dhcpcd state directory.
+
+commit 3fc84b485213763335a5b820f8a4b4d6483be20d
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Apr 22 13:37:53 2007 +0000
+
+ 'upgpkg: added autoloading of standard acpi modules during boot, with the possibility to blacklist by default methods'
+
+commit b04f18c15cef8f6d48aa0aa63fa8104b551fe1db
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Feb 10 09:14:34 2007 +0000
+
+ fixed typo, fixed verbose booting
+
+commit fff26e7f1fecaec1bf4c07cc07d1a426b160168b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Tue Jan 30 18:56:37 2007 +0000
+
+ forgot to add rc.local.shutdown
+
+commit 36e129004f1dfb2e890edc55f99c8eb0df89c668
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jan 29 21:51:35 2007 +0000
+
+ 'upgpkg: added network listing help to rc.conf'
+
+commit 78b5f6beee0453dd938f1a3c6a6ab5776e6d78f3
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Jan 29 20:45:25 2007 +0000
+
+ fix 6038
+
+commit 1bad30cc17f6cec15668f2bae9d6b72dd44788ee
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jan 22 21:52:41 2007 +0000
+
+ 'upgpkg: fixed verbose boot option'
+
+commit bced30e91fea71c05e3e521aa7cf04583f0dadbb
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Jan 18 19:21:26 2007 +0000
+
+ 'upgpkg: fixed usb removal'
+
+commit 221f3c66ca47ccf283f8ebbe7f8799cc24176def
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Dec 31 16:11:52 2006 +0000
+
+ 'added a bunch of new options'
+
+commit c323a4ae268d20d293351dc5e195e34d19ed28e7
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Dec 18 21:54:53 2006 +0000
+
+ upgpkg: initscripts 0.8-2
+ finally fixed 5445
+
+commit f9b90969a7669044f098b90babe203b145bf55a9
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Dec 18 19:24:54 2006 +0000
+
+ 'upgpkg: added --keymap option'
+
+commit 4b00503d2d25e40b0e962df08005d749cf3a4c87
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Dec 17 12:53:22 2006 +0000
+
+ added stat_append to functions, fixed fsck bugs when clock is not set
+
+commit 779bd2abb1b67431b6e353eaba569779fb718833
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Dec 16 23:49:35 2006 +0000
+
+ let lvm start quietly
+
+commit 9b58da29d7ce93bf3dc258a28d2fae00eb181f7e
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Dec 16 22:03:29 2006 +0000
+
+ rc.sysinit, rc.shutdown:
+ - Code cleanup
+ - Added "verbose" commandline option for debugging
+ - Fixed #5968
+ - Fixed #4648
+
+commit 567edd5aa95d5728b50f9fff6d71c368a7f3966a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Dec 16 13:31:00 2006 +0000
+
+ 'upgpkg: readded rc.sysinit and hwdetect for 0.8 package'
+
+commit 9a73b01bb6ea96b81b9ed887f8808b47b4fc5f19
+Author: Andreas Radke <andyrtr@archlinux.org>
+Date: Sun Dec 10 21:21:20 2006 +0000
+
+ cuurent x86_64 updated
+
+commit 3fcefcf13b87883216dd5331b2aed84db473de04
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Dec 10 14:34:46 2006 +0000
+
+ 'upgpkg: added voodoo tag and new hwdetect'
+
+commit 6b671f7901477d36fca5f8901731e4c0d5e7948f
+Author: Aaron Griffin <aaron@archlinux.org>
+Date: Thu Nov 16 01:01:16 2006 +0000
+
+ upgpkg: initscripts 0.7.3-1
+ Bugfix #5529: Set timezone before hwclock calls
+
+commit c632bec83a37945e5bb4e7cedf4f4d96f0a955ec
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 13 00:00:27 2006 +0000
+
+ FS#5385: Fixed RAID setup code
+
+commit ef6a41ebd7e2ab216e4b950df2a6d0826aef39b7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 8 20:01:06 2006 +0000
+
+ patch from Paul to disable NIS domainname before shutting down (syslog-ng was hanging). Also added a 2>/dev/null to fsck during startup
+
+commit 01f15f89c1cf4cdb77c7d0a8ddb37ddabd7df012
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Oct 2 14:50:41 2006 +0000
+
+ 'upgpkg: added psmouse workaround for new broken lappies'
+
+commit 9c34c7c5c8c525ce17a5bf447e40d78741ee15ba
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 28 19:25:16 2006 +0000
+
+ added CONSOLE check to UTF-8/Locale stuff to avoid doing it when running scripts from cron
+
+commit 00081d09b7ab18b8672a299d61a1281819904890
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Sep 26 06:34:35 2006 +0000
+
+ Added --directisa switch to hwclock in rc.shutdown
+
+commit 2f49e1bb285fc9ad7259caf5edb957d7c891c974
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Sep 20 10:36:16 2006 +0000
+
+ 'upgpkg: added udev persistent rules check'
+
+commit 8d399cf84d6d6192a13286e33258aaa369eee1bb
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Aug 4 07:54:32 2006 +0000
+
+ 'upgpkg: added kexec support to rc.shutdown'
+
+commit 977797d7a67033d03c4be04dba5b789ecdf2a36f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jul 25 22:36:42 2006 +0000
+
+ set a default for LOCALE so it's no longer needed in /etc/profile
+
+commit 87132356080924e00822a4b24d593e94bb18e24a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 21 19:40:00 2006 +0000
+
+ added --directisa to hwclock calls, support for additional options in crypttab for non-LUKS partitions, fixed the WPA_OPTS varname typo in netcfg
+
+commit 8d214daab85c043f87ed21912b68172cc0e33635
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Jul 7 15:17:34 2006 +0000
+
+ 'upgpkg: fixed usbfs mounting again'
+
+commit 93ba858cb8f3684506bcc5854ce32b637e108d00
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jun 30 19:40:10 2006 +0000
+
+ various fixes -- netcfg fixes, md device node creation fixes w/ mkinitcpio, 2.4 kernel support removed
+
+commit 4d91b544b6f666a12b84f82576b4309622806e83
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jun 30 15:54:33 2006 +0000
+
+ Fixed --menu when using gpm (#4916)
+
+commit 09bb556bf07b89130d27dc137190ff354beadecc
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 28 17:27:47 2006 +0000
+
+ handle ESSID fields that contain spaces
+
+commit 6cc15eeb857f9a01e7199c4c665866c7728244aa
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Jun 15 21:54:12 2006 +0000
+
+ added patch from James Rayner to auto-configure WPA through netcfg
+
+commit 96971f91453600f1d94d3e333dfb8773d1e4f596
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jun 12 17:36:12 2006 +0000
+
+ fixed the path to the console maps in the comment area of rc.conf
+
+commit 5d708a122229e99d1f09f9cfd8297370e1778732
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Jun 7 17:12:17 2006 +0000
+
+ 'upgpkg: removed the rest of 2.4 kernel'
+
+commit b4306a3ede324f6bdbfa5c7b80d0cff15f22c1be
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Jun 7 16:49:32 2006 +0000
+
+ 'upgpkg: removed kernel24 stuff eg. devfsd support and lvm1'
+
+commit ddac836cdbb67ba5b89d21aa3b25a67919efeb88
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 9 18:23:41 2006 +0000
+
+ upgpkg: initscripts 0.7.2
+
+commit dfb74ab60c8bb84f3e02d89cfe8127e55aeb7984
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 27 18:13:56 2006 +0000
+
+ fix for #4296
+
+commit 7cc268dcf5d2e64a3f10b808e8b1b90a8f6fec4a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 26 19:15:58 2006 +0000
+
+ Additional fix for locale stuff, re-enabled the depmod -A call at bootup
+
+commit befe253687d69267cac5e5953e0ca55d18bef000
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Feb 24 06:57:54 2006 +0000
+
+ 'upgpkg: added depmod -A again'
+
+commit 7ad516d1a7bf6fb5eed4e43669a7fb2a0832a552
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Tue Feb 21 07:35:10 2006 +0000
+
+ 'upgpkg: fixed module loading and udev startup'
+
+commit e0074ab78392be117c4cc63b4e0832fef95f2009
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 20 05:33:27 2006 +0000
+
+ default LOCALE is now en_US.utf8
+
+commit d4bd7c245c018d9de3f25eca580515cfc3048217
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 20 05:26:07 2006 +0000
+
+ fix for terminal/locale bug (3996)
+
+commit a33f5477d845f3919cd746ab2be1180cb025b415
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 16 17:56:33 2006 +0000
+
+ hwdetect->udev, removed default usbserial blacklist
+
+commit 655d3db463145facd994e5e3cfd0c0a911b30297
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 16 17:12:06 2006 +0000
+
+ added note about disallowed hyphens in bash variable names
+
+commit 207256890573ce867d4391c362b34f31a1a60865
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Feb 16 10:23:38 2006 +0000
+
+ 'upgpkg: put loading modules in front of udev and disabled depmod -A during boot'
+
+commit 9058c034c77ab62b91f2cd7d3637a2cb04f7c7d7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 13 04:47:51 2006 +0000
+
+ removed unnecessary line from netfs
+
+commit 6411dc721549d99335367f5643c0887095fc7818
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 9 18:48:17 2006 +0000
+
+ added note about dialog package required for netcfg menus
+
+commit 0d286b02f2c425d28c1908a82d99f266d3549919
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 6 19:38:45 2006 +0000
+
+ moved swap activation after local filesystem mounting, so people can use swap files
+
+commit 8172dd9403fa216479c458e222c9d01c5b293437
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Feb 6 18:13:03 2006 +0000
+
+ 'upgpkg: fixed weird scsi raid controllers'
+
+commit f137bbe79f4249a296c0e9064a29f5c76f38273d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Feb 1 21:24:08 2006 +0000
+
+ utf8 little fix
+
+commit affcb39fd921774f48b79fb9d48d68f3a917fd4f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 31 01:30:55 2006 +0000
+
+ added --mknodes switch to the vgscan call (LVM)
+
+commit bd6701616508c5bb21de9166e9b1daa6fe1de769
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 21 20:58:24 2006 +0000
+
+ fixed random-seed restoration
+
+commit e4af7e36ba40ab49993fcc4232dcebdedc1763b9
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Jan 19 16:25:38 2006 +0000
+
+ 'upgpkg: update to new udev module loading'
+
+commit 8f67fcb5f1fb15d67f024f16bf3249da85375418
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 14 08:34:09 2006 +0000
+
+ added hook for rc.local.shutdown
+
+commit cef7bab5145b923577aeea7431d7b19f2dd3946b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 3 09:06:09 2006 +0000
+
+ changed xdm path in inittab
+
+commit 33d5e65a50fa302f6863277c52c061af721a3c44
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Dec 19 18:43:03 2005 +0000
+
+ final touches for utf8 stuff (Thanks Roman\!)
+
+commit e4439a61bca626d05d3c6073ac94740db5c446c4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 18:33:46 2005 +0000
+
+ re-fixed my utf fix (yea, that's right, i fell down a lot when i was a kid)
+
+commit 00b620075a21e293db4b55a8d451ecd2930dbce1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 02:16:47 2005 +0000
+
+ added sr link to makedevs
+
+commit 0d08cad43172cc04df237a4a4271525ad1d527b3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 00:59:04 2005 +0000
+
+ final utf8 fixes, a couple small fixes for hwdetect and netcfg
+
+commit cee3cbb3a261ce0ba812618493e9bd253424ea3f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 15 18:56:19 2005 +0000
+
+ added scsi CD nodes
+
+commit f14a9cc609ce341ef2327c3ae93aa2695b58b392
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Tue Dec 13 21:43:08 2005 +0000
+
+ 'upgpkg: added kernel_verion=, cleaned up some parts added --modules for MODULES= generation for rc.conf use'
+
+commit c4c551a2f870f579438ae38b07ff9c14008cd6c9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 04:12:28 2005 +0000
+
+ makedevs fix
+
+commit a8db77d46d74fa3a8a0e13870b94c916a60358b8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 04:06:46 2005 +0000
+
+ latest utf fixes
+
+commit fcdcb21e2c33b1d3e359dc847638b936caf2aeee
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 01:55:31 2005 +0000
+
+ makedevs: added ternary and quaternary ide/scsi devices
+
+commit 675e9d69d02233e0079672f6c10cbe07da3027ad
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Dec 12 10:40:15 2005 +0000
+
+ 'upgpkg: removed unneeded utf stuff, umlauts in user names do not work, you even cannot create them,
+ added quiet option to filsystem check, fixed garbeled fonts if no framebuffer is used'
+
+commit d768a9c95a254e09a34c39aa86840c01cb6d97dd
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Dec 7 00:21:45 2005 +0000
+
+ changed both network scripts to use good ol' /bin/kill instead of dhcpcd's -k switch (I forgot about #2942)
+
+commit f45c3abd5697fa89d1a6431d8dbf5e96e6804ca8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 6 06:45:42 2005 +0000
+
+ Added interface param to dhcpcd -k calls in network and netcfg
+
+commit cfaa5552fcbe964a172138e5e6c87e54abb6ce4c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Dec 5 18:59:11 2005 +0000
+
+ dhcpcd fix in rc.d/network
+
+commit cec2d46513c7cd557f219fa2ede3c7a816a526dc
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Dec 3 13:25:37 2005 +0000
+
+ 'upgpkg: fixed ide check'
+
+commit 7e18ec8806c28d52c771cacda045aa3bd81ba0b2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 1 21:04:15 2005 +0000
+
+ fixed wpa_cli path in netcfg
+
+commit 78365fe57d61645c1b8282784d863a0cd8537eb5
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 29 01:26:11 2005 +0000
+
+ finished crypttab work, fixed a bug in hwdetect related to custom kernels
+
+commit 0d7cb77c48fc6232a8342fba9056a1896898b066
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Nov 28 22:32:00 2005 +0000
+
+ 'upgpkg: fixed custom kernels'
+
+commit 2c90c8af7bee4f06cf05c481e658406df35fe401
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 28 19:36:56 2005 +0000
+
+ added USEWPA to template to enable/disable wpa_supplicant
+
+commit 15c49deac15f97e647afc081c7b5e210ad4bdcd3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 28 19:14:53 2005 +0000
+
+ moved sysctl config stuff to precede daemon startup (#3530)
+
+commit fb8a47586d0c5c5833a6bee2adc162a22b646d5a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Nov 27 18:55:30 2005 +0000
+
+ 'upgpkg: fixed lock on kernels <= 2.6.12'
+
+commit 66779d909c3a08f2c3fa0811de12f0e3b5c54bc0
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 26 15:55:36 2005 +0000
+
+ 'upgpkg: fixed non ide systems, fixed usb modules'
+
+commit b087f41b86014ba5dfc0b23ea79d6897573fb562
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Nov 23 12:54:55 2005 +0000
+
+ 'upgpkg: fixed hwdetect syntax for rc.sysinit'
+
+commit a03faeb98fbe82a01977a9900b0d1b6974aac3c6
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Nov 23 12:45:41 2005 +0000
+
+ 'upgpkg: fixed mtp modules, added modules-order option, changes options to -- syntax'
+
+commit d8df29152b8401e4c56a07b8920f34fdf9252bc1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 23 01:58:50 2005 +0000
+
+ added check for /sys/devices
+
+commit fca87ebae05b19c0da51c1b996f4bddad82c3115
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Nov 21 08:52:49 2005 +0000
+
+ 'upgpkg: hwdetect fixed module order, added load_modules=off to rc.sysinit'
+
+commit d7695ef38916be8e806b84f8e195a45a7b2ec217
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 19 15:44:02 2005 +0000
+
+ 'upgpkg: added more modules'
+
+commit 561ff8a3abbda0a86cc2a479d8e1a9e1b965b0d1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Nov 19 01:47:31 2005 +0000
+
+ added crypttab stuff
+
+commit 23f08df5cb31d38347582e4d62f9279385c612ba
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Nov 18 19:00:25 2005 +0000
+
+ 'upgpkg : added full ide,scsi detection to hwdetect'
+
+commit 6931feb5463b3ce9119753bda74279ec87ed447a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Nov 17 07:52:21 2005 +0000
+
+ 'upgpkg: added new PNP software and some workarounds'
+
+commit 0cddbac760aa1b38e5fb68d54b315cb01c67b7b6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 09:07:13 2005 +0000
+
+ cosmetics
+
+commit 2dc0038155b978eb70be482313cc8535dadc436d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 02:51:52 2005 +0000
+
+ added variables for autoloading modules, cleaned up rc.conf a bit
+
+commit abdeaf8051aaadb9f5270a14e45481a8d61e0b95
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 01:18:14 2005 +0000
+
+ added tpowa's changes, cleaned up output and removed redundant code
+
+commit 684a99329e37924e84344cb340e5022628d6777c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 14 17:46:46 2005 +0000
+
+ more thorough cleaning of /var/run at bootup
+
+commit e3315ad97c60b8cbad31aff8500d269d9176a9b5
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 12 15:00:08 2005 +0000
+
+ 'upgpkg: added more text to show modules, to make it more readable :) "
+
+commit 9e02c37ccd310844c919f27af64c901979c4105d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 11 18:49:54 2005 +0000
+
+ updated hwdetect
+
+commit 9683aeadd86569b69ad44d270e006284e565dfd5
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 11 18:46:12 2005 +0000
+
+ changed ifup() to skip interfaces that are already up
+
+commit 78ce45a497753e2be061e29a6464fcd969041895
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 21:56:55 2005 +0000
+
+ added nocifs to pre-network mounts, fixed mdadm.conf missing errors
+
+commit 0daa0d11302e16ba26d7518c1edf0e4887aade9c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 19:21:59 2005 +0000
+
+ little bugfix
+
+commit d87c9749651741249b4c7cbf5f18b7ab1b3300fb
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 19:06:51 2005 +0000
+
+ tpowa's hardware detection script
+
+commit d7e23b7ef7c92f7c9529c65a255b524b26648cc3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 02:34:20 2005 +0000
+
+ added more intelligence for RAID/LVM setups from the initrd
+
+commit 0e992c0464125a0cb0207171a053dbf64c593833
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 9 21:22:44 2005 +0000
+
+ added logic to free up initrd memory once it's not needed anymore
+
+commit 71468248567e6bf1e794094d9b5f87ac61de033a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 9 21:21:17 2005 +0000
+
+ added logic to free up initrd memory once it's not needed anymore
+
+commit f947ecffc4a9109d0790e5b2853e2a835b4cf81b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 18:29:25 2005 +0000
+
+ fixed a syntax bug in locale setting
+
+commit 826e8af03cdfc3edec0dfc382a4f4308748a08f7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 09:50:36 2005 +0000
+
+ added support for encrypted root filesystems through the initrd
+
+commit e00744e1d385f80f44618baea869136dcf64c88c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 01:44:56 2005 +0000
+
+ dm changes
+
+commit 3f2fb1767eb2c8167a4f78999e431da73b9c8e8d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 00:54:22 2005 +0000
+
+ makedevs helper script -- not added to package yet
+
+commit c8a4f09b7943a7fe9a875d9fc7af7decd29db6a2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Oct 22 21:23:47 2005 +0000
+
+ added patch for wpa_supplicant support
+
+commit f22d7a53b09ad0e28911117412c1cd0ab5c7bb68
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 21 23:35:39 2005 +0000
+
+ upgpkg: initscripts 0.7.1
+
+commit fa6d682d8bb1d95525e9f6540917446ad1247ea6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Oct 12 16:53:43 2005 +0000
+
+ another quick fix for netcfg stuff (no rebuild yet)
+
+commit 14886e1bf20897e2efbc677d6bd1846db0201cbb
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Oct 6 17:00:31 2005 +0000
+
+ added WIFI_WAIT parameter (no rebuild yet)
+
+commit 79142a38d91eaf27a6c677e0a6511f855e57e30d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Oct 3 17:58:51 2005 +0000
+
+ added ability to use the netcfg menu from the NET env var
+
+commit 39f5db6e89fd04da3979c11c3b2761ea031cd94d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 29 07:22:25 2005 +0000
+
+ added tpowa's fix for locale stuff
+
+commit e772aeae76f2ad704a834dc17df02dbc137a6573
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 15 20:05:07 2005 +0000
+
+ modified netcfg/network scripts -- you can list multiple entries in NET_PROFILES that use the same INTERFACE. They will be started one at a time, and the first successful one will be kept.
+
+commit 0be8f5b2d33fc6160e2a62d33fc1f828218fa90a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jul 18 19:17:14 2005 +0000
+
+ fixed netcfg to remove stale dhcpcd .pid files (#2973)
+
+commit 00945333dc1dd08d893a6c42f395e7d3c81dad0d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 6 05:15:37 2005 +0000
+
+ fixed a netcfg bug where disabled profiles were being started
+
+commit 0fa1f0eeb3422ba0e84a346a20437172f26859da
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 1 02:54:50 2005 +0000
+
+ fixed a --stopall bug in netcfg
+
+commit a440a006d7dc42ad072b13986f1f737e8f7e1719
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 1 00:13:38 2005 +0000
+
+ fixed some spacing in rc.multi -- cosmetic
+
+commit 863e8311cfc2ec7dc98fdb43abaa8499dd3414a4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Jun 30 23:57:54 2005 +0000
+
+ added new netcfg stuff for roaming network profiles
+
+commit 47ca58301f0bf0680baf59465202c4209b1ac112
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jun 5 20:30:12 2005 +0000
+
+ rc.sysinit now sets the NIS domain name, if configured. Also fixed a /var/locks typo
+
+commit 0ad54a5ba99d95c9b5dfe02f567e1f349de6a720
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 1 17:36:42 2005 +0000
+
+ added -q switch to sysctl
+
+commit b5d692b639b9e4a47cd6ba920b91a6d2ff50dc3d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 31 18:31:01 2005 +0000
+
+ moved usb setup above the Loading Modules stage, so sane and other usb things will work correctly (#2770)
+
+commit cc6648d06dba085b903db820ad581dd94eb669ef
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun May 22 17:40:33 2005 +0000
+
+ added sysctl call from rc.sysinit
+
+commit 41e115b5973f6498ce4bfce6fe772b8d0b459700
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 18 06:59:02 2005 +0000
+
+ added a /proc/modules check before running modprobe, just in case the user is running a non-modular kernel
+
+commit c4a367e15b1bf0c9814a674c0a55084aa714245a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Mar 24 18:53:37 2005 +0000
+
+ added CIFS to netfs script
+
+commit 8b862a2073ad6fe7303a4dbbe7d7316a60db1147
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Mar 16 17:31:30 2005 +0000
+
+ updated copyright year in rc.sysinit
+
+commit 8aff6add70fd50b3febe363a0002098f21e2679b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Mar 11 20:02:08 2005 +0000
+
+ added support for backgrounding daemons at startup with a '@' prefix, commented out the ldconfig call at startup, added support for unicode console maps, added a hotplug_ifup() function rc.d/network for hotplug's net.agent to use
+
+commit 22805e822d4e9fee9c1f4331dee31bccd1db45d2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 6 20:08:29 2005 +0000
+
+ added logic to handle shutdown -F (forcefsck)
+
+commit 92d43c54f0bd5142a2a844b1910d15c808d86992
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 11 01:21:43 2005 +0000
+
+ added ethernet bonding support (still untested)
+
+commit e8a2e4663543d16fcafa4c62c75f42fdab32ff28
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jan 2 23:52:40 2005 +0000
+
+ fixed a typo in the rc.conf comments
+
+commit 45d3c546ee36b28c6808fb4330669b1c23437c26
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 30 07:33:19 2004 +0000
+
+ fixed the missing /dev/initctl problem with udev in runlevel 1
+
+commit 4c1c59be80c29f73655913ff139717268ff1f50f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 23 22:58:25 2004 +0000
+
+ made rc.d/network pay attention to the new conf.d files (dhcpcd and wireless). also modified rc.sysinit to wait til after modules are loaded before attempting to mount /proc/bus/usb. If the user uses hotplug, then the usb host modules may not be loaded yet, but that's okay -- hotplug will mount /proc/bus/usb for them
+
+commit 2822ea48f2e7609232d4e4b47285d60097de2828
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Sep 28 06:24:03 2004 +0000
+
+ used depmod -A in rc.sysinit to update module deps
+
+commit 85c899a1ca88c088aaeb679dc009687670e30ac7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 24 17:22:34 2004 +0000
+
+ updated rc.single to pay attention to udev and syslog-ng
+
+commit 8784d3a487b1613759e871c8f8b4a4530509bdd3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Sep 12 19:40:51 2004 +0000
+
+ added fix for xorg temp directories (bug #1408)
+
+commit 20dceb289f61b69a98c6377921ee2a009aeefd98
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 23 01:03:08 2004 +0000
+
+ re-mounted / after removing /etc/mtab, so it's written to mtab properly
+
+commit 9f5d7b15d7b58b7a3d80a8923a2ff1952c90966a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 21 22:15:59 2004 +0000
+
+ re-mount /sys and /proc once / is rw so the entries can be written to /etc/mtab
+
+commit ef0a365fc88fd1b02883dd42e0afb0929fbfa3f4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jul 18 21:28:41 2004 +0000
+
+ fixed the sysfs problem with 2.4
+
+commit 5ef7c1839eed06599d615380dae4447fe43dfb34
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 03:03:26 2004 +0000
+
+ modified ifdown to bring a dhcp'd eth0 down even if the .pid file is not found (#756)
+
+commit 2881e158d80e1203d2fae41ff2ce0f122b132e45
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 01:03:51 2004 +0000
+
+ made syslog-ng Arch's new default logger
+
+commit 3280eeff177ecf79c32213303c9eb320b579d040
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 00:27:57 2004 +0000
+
+ updated version header to 0.7, added support for udev and static /dev trees
+
+commit 2c20f4d5637da88e983b65db9c97373aa79d8a37
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jul 3 19:40:02 2004 +0000
+
+ added iflist and rtlist functions and made ifup,ifdown,rtup,rtdown accessible from outside the script
+
+commit cd0e2c63acc50d080edba54b797f7f1c58da1312
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu May 27 00:30:15 2004 +0000
+
+ fixed the lvm2 segfault on shutdown
+
+commit f396331a675e17ef282b56ea228e66383d401400
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed May 19 16:56:48 2004 +0000
+
+ added sysfs mounting to fix LVM2 segfaults
+
+commit 446e095bdfb1d4d9c31f729d4169aa4a9f44797f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 18 23:40:53 2004 +0000
+
+ added better LVM handling
+
+commit e555d5efc43f7e8597dd90482e145f6d1936faf8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 11 21:34:59 2004 +0000
+
+ added hotplug to the DAEMONS array (disabled by default)
+
+commit 262af2251dd4675e3664435068d4a96b21ab7d74
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Mar 26 20:01:07 2004 +0000
+
+ added -h arg to poweroff to park the hard drives
+
+commit abbe7921517e87dcf3fa61036d26d72bc714257a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 29 23:09:37 2004 +0000
+
+ added --ignorelockingfailure during startup vgchange (LVM2)
+
+commit 0d76f45bffddced00c83b0c06f1be796a780366b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 29 07:03:00 2004 +0000
+
+ updated for LVM2
+
+commit d9f8f3c07bcf1ab349fa6484980a04ef57c7212c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 23 03:32:36 2004 +0000
+
+ added setup commands for LVM2
+
+commit d4a5c5ef402ca7315e5429eaccb0748e38b964af
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 19 18:50:09 2004 +0000
+
+ added cleanups by Leif Askeland
+
+commit 45ede7cf9dd872c580e9c2a57a00b0350f035371
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Feb 18 19:35:17 2004 +0000
+
+ updated copyright
+
+commit b6fab06a33cb0c829731c3123ef35444c6909d72
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jan 30 18:30:06 2004 +0000
+
+ added a rc.d/netfs script to mount network-based filesystems from DAEMONS
+
+commit 4abccbdf439817f1328547f1f22db969fe6d8591
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 10 00:46:13 2004 +0000
+
+ fixed a kernel 2.6 bug re: console fonts
+
+commit a7768b2ae842c55413b1dce8a3f19e7c730885fa
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:42:18 2003 +0000
+
+ network-based mounts are not mounted til rc.multi runs
+
+commit 9009002d949745ec8824662680c06cf34040dba8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:37:50 2003 +0000
+
+ removed a debug comment
+
+commit 4fa550ea84f951b4afe5c2e4af4aad32b7a901f6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:23:36 2003 +0000
+
+ added a cosmetic fix to ifdown() in rc.d/network
+
+commit e9b62e0418df5ce6db98de36837bab2922154229
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Dec 21 08:58:37 2003 +0000
+
+ removed a leftover debugging statement
+
+commit a71e42c461da1672582143a829654049399616e7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Dec 21 00:48:23 2003 +0000
+
+ upgpkg: initscripts 0.6
+
+commit 53ae13821436183990e40cffefa8c9cff4b4f2ae
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 22:24:34 2003 +0000
+
+ fixed the licensing line
+
+commit 93dd5710cf2273c228135959c22f9e4f33d78477
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:26:53 2003 +0000
+
+ added a missing space
+
+commit 065e944539ec9b527fa163317c0a633c872c809b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:16:08 2003 +0000
+
+ a little formatting improvement
+
+commit 7f4117b05f9e4730657779ec7d4b3b08ba12616c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:10:18 2003 +0000
+
+ added color to rc messages and fixed bug #168
+
+commit be8b6f59470b8779c3d4e10b3045507920931896
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Oct 4 07:41:42 2003 +0000
+
+ added -x check to /sbin/fsck, so reiserfs users can uninstall e2fsprogs without script errors
+
+commit 3a161b0240eb8eedcc8affb5e0c5b92d058619d9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 05:16:21 2003 +0000
+
+ added consolefont setting to rc.conf
+
+commit 6ea51dec01002c6b392c374fa70a62020edffd84
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 04:57:20 2003 +0000
+
+ added timeout to dhcp startup
+
+commit 2a48c5bd8db694cfe3a26cc3ef92e36050859b31
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 04:29:34 2003 +0000
+
+ modified network script to not bail out on error
+
+commit 25223b3c0c1be7d320299af4e31062295694098a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Aug 25 19:15:49 2003 +0000
+
+ improved lvm detection/activation
+
+commit da04ddf1b88b62ad77db29b8efa33649a0871b58
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jul 12 19:21:26 2003 +0000
+
+ added a check for lvmtab before activating LVM groups
+
+commit e39affb13f412f21a93205431c2abc625b4238a4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 9 02:13:45 2003 +0000
+
+ removed the conf.d stuff -- conf.d files will be parsed individually by the rc.d scripts to avoid name collisions
+
+commit d69b11e73a70c9c0ed6cd888ff4ac4eb3e877ec2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 4 00:22:45 2003 +0000
+
+ fixed a rc.sysinit bug and moved conf.d parsing to the top of rc.conf
+
+commit 18c7679d90ca5c1c9508548c35c0a4ea14ca4d6f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 27 18:29:39 2003 +0000
+
+ fixed a small typo
+
+commit 2e25861ad03003273707fa604522e3390c24f895
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 27 17:14:50 2003 +0000
+
+ moved nfsmount to nfs-utils
+
+commit ba769985bf38b1eb4e54f0e19d8b3502216646d6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon May 26 22:22:04 2003 +0000
+
+ added lvm handling
+
+commit df91d849d2c19bd070473da49dd8befc7aae978c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri May 23 23:58:57 2003 +0000
+
+ upgpkg: initscripts 0.5
+
+commit ead9f8db5fe817f019512681d5169dffad705357
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu May 8 18:12:46 2003 +0000
+
+ added -D, -H, and -h to the dhcp line
+
+commit a85df6abb081d7a7d51b00e7e301d1497fede30a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 7 17:05:02 2003 +0000
+
+ updated PKGBUILD release
+
+commit e4398c2e693441b8844645ee69fd3b7e483b3530
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 7 16:58:42 2003 +0000
+
+ added the MODULES=() line to rc.conf, with loading in rc.sysinit
+
+commit f6081f262419c2a4880d372636e391a52e148782
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 7 01:48:51 2003 +0000
+
+ updated rc.single to shutdown daemons correctly
+
+commit 6c4a6fc1938f12ee85b4f593de64a8776e5c1ba0
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jan 6 23:23:41 2003 +0000
+
+ kill dhcpcd pid files before running the client daemon
+
+commit 19c04471ce76a3f803fdf47b964880266b529070
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 14 00:13:55 2002 +0000
+
+ fixed the location of adjtime
+
+commit 96cb8c51e0ddb57f382c958ebb7808baaa258765
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 12 22:27:36 2002 +0000
+
+ modified to stat_fail to return a $retval
+
+commit 81da8c411f590b436e0cffcae9dd4c30598d35b2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 29 09:06:45 2002 +0000
+
+ fixed a syntax bug in rc.sysinit
+
+commit c5f67416f3250e0d16eb2e588fc2b62435727d3c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 27 00:36:14 2002 +0000
+
+ fix
+
+commit 43cda626dbc05e92dffc0027ef19db9d3cc44d37
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 26 23:26:48 2002 +0000
+
+ added nfsmount (from jk)
+
+commit c8cd508809408a0be9f1fbeb65775ab7fb083f3b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 26 18:17:31 2002 +0000
+
+ Added utf hwclock support (from user patch)
+
+commit 914b0b3b572a3d5d311682a88424d165589798f1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Nov 23 20:37:55 2002 +0000
+
+ added jk's changes: system clock is set earlier on, and modules.dep is only
+ updated if new modules are present.
+
+commit dd4248ed74b9adce32910ee95274719249220757
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Aug 28 21:43:10 2002 +0000
+
+ removed PROFILES array
+
+commit eb2f42cba2d8134e83321810dcad897cc88e4716
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Aug 24 20:54:22 2002 +0000
+
+ rc.sysinit removes /var/run/daemons/* on bootup
+
+commit fd8fde036ab46b593590b362bc94b051e432a295
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 24 02:57:16 2002 +0000
+
+ Upgraded initscripts to 0.3
+
+commit 2b503065569fa2ffedf5eafc76158c74062ac49b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jun 11 05:07:54 2002 +0000
+
+ nada
+
+commit efa9a6d681b87fa4b8e321173690144b17a08d35
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Apr 27 21:04:15 2002 +0000
+
+ Added DHCP handling to initscripts
+
+commit 30277f5e1ce30a10ed08ae2529282718c86ac826
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:16:37 2002 +0000
+
+ *** empty log message ***
+
+commit f7a1c1ba6c35069ed6086e41146471fe97856325
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:15:35 2002 +0000
+
+ *** empty log message ***
+
+commit 3a3db1e368443447d7eaec461110bb122d026d83
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:13:21 2002 +0000
+
+ Cleaned up networking in initscripts
+
+commit cd5a839558fa3e5b10423fa33e621be2f27acf12
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 07:28:04 2002 +0000
+
+ Updated for /etc/profile.d
+
+commit f5e0fa814e1f31279509645a25057dcefa5eaadc
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Apr 16 03:59:06 2002 +0000
+
+ Updated network rc script with jproctor's disable-eth changes
+
+commit 8bc78f134bf719b16a3b3b2a7cea947fbf526e3b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 16:45:38 2002 +0000
+
+ Added arch-release to filesystem
+ Fixed initscripts (again)
+
+commit b840b6f59bfa39bceb663ad1b40f4c0ff5984366
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 07:00:55 2002 +0000
+
+ *** empty log message ***
+
+commit 9a59bb9539dacac884b9c3b0088e22ba762f2b9b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:53:10 2002 +0000
+
+ Updated initscripts
+
+commit 2f4936aec49df2c681ae0862103cee8376c5ab57
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:47:05 2002 +0000
+
+ Bugfix for initscripts
+
+commit 5b61b6c2bf49d75df992a4dc39757e66a536dbcd
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:41:16 2002 +0000
+
+ Updated initscripts for multiple ethernet interfaces
+
+commit 91fd2beff99c9e623a201c8221964353c8669044
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Apr 11 05:06:15 2002 +0000
+
+ Updated installer script
+ Added package dhcpcd
+ Took ash job control out of busybox for bootdisk
+
+commit 2cb34b31712bf72ae6c30e5029572463152a082f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 24 08:50:48 2002 +0000
+
+ Fixed a runlevel bug in initscripts
+
+commit 65405267704892a9bcb42186c95adcf4566cbf8c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 24 08:40:40 2002 +0000
+
+ Added rc.d network script to initscripts
+
+commit eea6fee11ad792708d6b8fbf0cb5b42b00ea1c91
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Mar 14 08:34:49 2002 +0000
+
+ Removed all filelist files from repository
+
+commit 57d51e9a853fc21be0e733253ac56f2d9756d3a7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Mar 13 08:05:47 2002 +0000
+
+ Updated inittab for X11
+
+commit d0ea35d522f7e68b198afe01bf369463af56259f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Mar 12 05:37:01 2002 +0000
+
+ Rebuild package pcmcia-cs for 2.4.18
+ Tweaked initscripts/filesystem
+ Added doc/install.txt and misc/cdboot/etc/issue and scripts/makerelease
+
+commit 14e3f9480a7364200b999477fa4ab9da16884831
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 11 00:58:34 2002 +0000
+
+ Removed rc.proto, updated rc.single
+
+commit 325b46a6b02aee695658eafe6b714d0e02810e1a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Mar 9 10:07:16 2002 +0000
+
+ Added some rudimentary networking stuff
+
+commit 897380f9b8071b8df0dcdb85cc9e1424640762b9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Mar 5 04:59:03 2002 +0000
+
+ Changed name to Arch Linux
+
+commit 98c76a453222169f12b0e95f8a7ed0175e182598
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 4 07:28:25 2002 +0000
+
+ Initial revision
diff --git a/abs/core-testing/initscripts/PKGBUILD b/abs/core-testing/initscripts/PKGBUILD
new file mode 100644
index 0000000..b62fcaa
--- /dev/null
+++ b/abs/core-testing/initscripts/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8634 2008-08-14 09:53:14Z pierre $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=initscripts
+pkgver=2008.08
+pkgrel=1
+pkgdesc="System initialization/bootup scripts"
+arch=('i686' 'x86_64')
+url="http://www.archlinux.org"
+license=('GPL')
+groups=('base')
+backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown)
+depends=('glibc' 'bash' 'awk' 'grep' 'coreutils' 'sed' 'udev>=118' 'net-tools' 'ncurses' 'kbd' 'findutils')
+install=initscripts.install
+source=(ftp://ftp.archlinux.org/other/initscripts/${pkgname}-${pkgver}-${pkgrel}.tar.gz)
+md5sums=('317ddba5c41ac61905fd8289805e00cd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}-${pkgrel}/
+ DESTDIR=$startdir/pkg ./install.sh
+}
diff --git a/abs/core-testing/initscripts/initscripts.install b/abs/core-testing/initscripts/initscripts.install
new file mode 100644
index 0000000..9fffa9b
--- /dev/null
+++ b/abs/core-testing/initscripts/initscripts.install
@@ -0,0 +1,25 @@
+post_upgrade() {
+ cat << "EOF"
+-----------------------------------------------------------
+IMPORTANT NOTICE FOR ENCRYPTION USERS
+
+The "password" column in /etc/crypttab has now
+two special keywords:
+- ASK ask for a passphrase on boot
+- SWAP use a random key and create swapspace
+ This is particularly dangerous, as the
+ volume in question will be overwritten
+ If you use SWAP as your passphrase (which
+ is insecure anyway), be sure to remove it
+ from /etc/crypttab to avoid dataloss!
+
+See /etc/crypttab(.pacnew) for more information.
+-----------------------------------------------------------
+Attention netcfg users: netcfg is no longer included as
+part of the initscripts package.
+Be aware that rc.conf's NET_PROFILES has changed to
+NETWORKS, and that netcfg must be installed separately.
+For more info, see the netcfg man page.
+-----------------------------------------------------------
+EOF
+}
diff --git a/abs/core-testing/inputproto/PKGBUILD b/abs/core-testing/inputproto/PKGBUILD
new file mode 100644
index 0000000..ddd445c
--- /dev/null
+++ b/abs/core-testing/inputproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 670 2008-04-21 13:49:33Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=inputproto
+pkgver=1.4.3
+pkgrel=1
+pkgdesc="X11 Input extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('a0f0d8cf6fbf0db8ba3937d0cc16138d')
diff --git a/abs/core-testing/intel-dri/PKGBUILD b/abs/core-testing/intel-dri/PKGBUILD
new file mode 100644
index 0000000..167f4e4
--- /dev/null
+++ b/abs/core-testing/intel-dri/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=intel-dri
+pkgver=7.0.3
+pkgrel=1
+pkgdesc="Mesa DRI drivers for Intel chipsets"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('imake' 'mesa>=7.0.3' 'glproto>=1.4.9')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = i810 i915 i915tex i965" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${pkgver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/iproute/PKGBUILD b/abs/core-testing/iproute/PKGBUILD
new file mode 100644
index 0000000..ae0f9f0
--- /dev/null
+++ b/abs/core-testing/iproute/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3746 2008-06-30 20:09:01Z andyrtr $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=iproute
+#_dlver=2.6.24-rc7
+#pkgver=$(echo ${_dlver} | sed 's|-|_|g')
+pkgver=2.6.25
+pkgrel=1
+pkgdesc="IP Routing Utilities"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.linux-foundation.org/en/Net:Iproute2"
+depends=('db>=4.7')
+source=(#http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-${_dlver}.tar.bz2
+ http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-${pkgver}.tar.bz2)
+options=('force')
+md5sums=('5737bade2f5e03fad0e2c81da91e551e')
+
+build() {
+ #cd $srcdir/iproute2-${_dlver}
+ cd $srcdir/iproute2-${pkgver}
+ sed -i 's|/usr/local/lib/iptables|/usr/lib/iptables|' include/iptables.h || return 1
+ ./configure
+ make || return 1
+ make DESTDIR=$pkgdir install || return 1
+ chmod 755 $pkgdir/usr/sbin/ifcfg
+}
diff --git a/abs/core-testing/iproute/iproute2-2.4.7-now-ss020116.patch b/abs/core-testing/iproute/iproute2-2.4.7-now-ss020116.patch
new file mode 100644
index 0000000..0e37865
--- /dev/null
+++ b/abs/core-testing/iproute/iproute2-2.4.7-now-ss020116.patch
@@ -0,0 +1,9823 @@
+diff -Naur iproute2-orig/Makefile iproute2/Makefile
+--- iproute2-orig/Makefile 2002-01-15 15:30:32.000000000 -0800
++++ iproute2/Makefile 2004-05-21 00:16:36.000000000 -0700
+@@ -4,8 +4,6 @@
+ CONFDIR=/etc/iproute2
+ DOCDIR=/usr/doc/iproute2
+
+-KERNEL_INCLUDE=/usr/src/linux/include
+-LIBC_INCLUDE=/usr/include
+
+ DEFINES= -DRESOLVE_HOSTNAMES
+
+@@ -23,19 +21,11 @@
+ #options for ipx
+ ADDLIB+=ipx_ntop.o ipx_pton.o
+
+-ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
+- ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
+- GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
+- endif
+-endif
+-ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
+- GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
+-endif
+
+
+ CC = gcc
+ CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
++CFLAGS = $(CCOPTS) -I../include $(DEFINES)
+
+ LDLIBS += -L../lib -lnetlink -lutil
+
+@@ -43,19 +33,11 @@
+
+ LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
+
+-all: check-kernel
++all:
+ @set -e; \
+ for i in $(SUBDIRS); \
+ do $(MAKE) -C $$i; done
+
+-check-kernel:
+-ifeq ($(KERNEL_INCLUDE),)
+- @echo "Please, set correct KERNEL_INCLUDE"; false
+-else
+- @set -e; \
+- if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
+- echo "Please, compile the kernel first"; false; fi
+-endif
+
+ install: all
+ install -m 0755 -d $(DESTDIR)$(SBINDIR)
+diff -Naur iproute2-orig/Makefile~ iproute2/Makefile~
+--- iproute2-orig/Makefile~ 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/Makefile~ 2002-01-15 15:30:32.000000000 -0800
+@@ -0,0 +1,77 @@
++# Path to parent kernel include files directory
++DESTDIR=
++SBINDIR=/sbin
++CONFDIR=/etc/iproute2
++DOCDIR=/usr/doc/iproute2
++
++KERNEL_INCLUDE=/usr/src/linux/include
++LIBC_INCLUDE=/usr/include
++
++DEFINES= -DRESOLVE_HOSTNAMES
++
++#options if you have a bind>=4.9.4 libresolv (or, maybe, glibc)
++LDLIBS=-lresolv
++ADDLIB=
++
++#options if you compile with libc5, and without a bind>=4.9.4 libresolv
++#LDLIBS=
++#ADDLIB=inet_ntop.o inet_pton.o
++
++#options for decnet
++ADDLIB+=dnet_ntop.o dnet_pton.o
++
++#options for ipx
++ADDLIB+=ipx_ntop.o ipx_pton.o
++
++ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
++ ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
++ GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
++ endif
++endif
++ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
++ GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
++endif
++
++
++CC = gcc
++CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
++CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
++
++LDLIBS += -L../lib -lnetlink -lutil
++
++SUBDIRS=lib ip tc misc
++
++LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
++
++all: check-kernel
++ @set -e; \
++ for i in $(SUBDIRS); \
++ do $(MAKE) -C $$i; done
++
++check-kernel:
++ifeq ($(KERNEL_INCLUDE),)
++ @echo "Please, set correct KERNEL_INCLUDE"; false
++else
++ @set -e; \
++ if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
++ echo "Please, compile the kernel first"; false; fi
++endif
++
++install: all
++ install -m 0755 -d $(DESTDIR)$(SBINDIR)
++ install -m 0755 -d $(DESTDIR)$(CONFDIR)
++ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples
++ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples/diffserv
++ install -m 0644 README.iproute2+tc $(shell find examples -type f -maxdepth 1) $(DESTDIR)$(DOCDIR)/examples
++ install -m 0644 $(shell echo examples/diffserv/*) $(DESTDIR)$(DOCDIR)/examples/diffserv
++ @for i in $(SUBDIRS) doc; do $(MAKE) -C $$i install; done
++ @cd etc/iproute2; for i in *; do \
++ if [ ! -e $(DESTDIR)$(CONFDIR)/$$i ]; then \
++ echo install -m 0644 $$i $(DESTDIR)$(CONFDIR); \
++ install -m 0644 $$i $(DESTDIR)$(CONFDIR); fi; done
++
++clean:
++ for i in $(SUBDIRS) doc; \
++ do $(MAKE) -C $$i clean; done
++
++.EXPORT_ALL_VARIABLES:
+diff -Naur iproute2-orig/debian/README.Debian iproute2/debian/README.Debian
+--- iproute2-orig/debian/README.Debian 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/README.Debian 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,4 @@
++This version of "iproute" includes the HTB Linux queuing discipline
++explained in http://luxik.cdi.cz/~devik/qos/htb/
++
++You need kernel version 2.4.21 or newer in order to use it.
+diff -Naur iproute2-orig/debian/changelog iproute2/debian/changelog
+--- iproute2-orig/debian/changelog 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/changelog 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,207 @@
++iproute (20010824-13) unstable; urgency=low
++
++ * debian/rules: Run dpkg-shlibdeps with all the executables,
++ to fix dependency problem (closes: Bug#224063)
++ * Really removed references to obsolete include files
++ (Bug#223165 was not fixed properly)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 25 Jan 2004 23:04:20 +0100
++
++iproute (20010824-12) unstable; urgency=low
++
++ * Updated README.Debian and copyright file
++ * Added two new manpages from http://lartc.org/manpages/:
++ ip(8) and tc-cbq-details(8).
++ * Removed references to obsolete include files which made
++ compilation fail (closes: Bug#223165)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 14 Dec 2003 00:40:10 +0100
++
++iproute (20010824-11) unstable; urgency=low
++
++ * Changed priority to "optional"
++ * Fixed "tc -s qdisc" on sparc (patch by "Nicolas S. Dade"
++ <ndade@nsd.dyndns.org>) (closes: Bug#194128)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 17 Aug 2003 00:22:47 +0200
++
++iproute (20010824-10) unstable; urgency=low
++
++ * Updated manual pages from http://www.lartc.org/manpages/
++ (closes: Bug#156353, Bug#175313, Bug#176989, Bug#189095)
++ * New Standards-Version
++ * Don't "rm -rf /etc/iproute2" on purge (closes: Bug#202862)
++ * Include "iproute2" in the description (closes: Bug#182999)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 16 Aug 2003 18:29:27 +0200
++
++iproute (20010824-9) unstable; urgency=medium
++
++ * Added patch for HTB v3.6 to be able to work with kernel 2.4.20
++ (from http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz)
++ (closes: Bug#147550, Bug#167149, Bug#167597, Bug#171277)
++
++ -- Juan Cespedes <cespedes@debian.org> Thu, 05 Dec 2002 13:44:10 +0100
++
++iproute (20010824-8) unstable; urgency=medium
++
++ * Added support for HTB queuing discipline (closes: Bug#133381)
++ NOTE: you need a patched kernel in order to use it
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 2 Apr 2002 20:29:40 +0200
++
++iproute (20010824-7) unstable; urgency=medium
++
++ * Move `ip' binary to /bin to fix FHS violation (closes: Bug#134812)
++
++ -- Juan Cespedes <cespedes@debian.org> Mon, 4 Mar 2002 00:20:30 +0100
++
++iproute (20010824-6) unstable; urgency=low
++
++ * Added a couple of #ifdef's to be able to compile with older
++ kernel headers (needed for arm) (closes: Bug#131695)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 16 Feb 2002 19:27:15 +0100
++
++iproute (20010824-5) unstable; urgency=low
++
++ * Really fix Bug#121589 (dead gateway bug); apparently I
++ forgot to include the patch in 20010824-2
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 29 Jan 2002 23:22:24 +0100
++
++iproute (20010824-4) unstable; urgency=low
++
++ * Added support for DIFFSERV and ATM in tc
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 13 Jan 2002 03:01:47 +0100
++
++iproute (20010824-3) unstable; urgency=low
++
++ * Updated tc* man pages (thanks to bert hubert <ahu@ds9a.nl>)
++ * Fixed spurious space in `tc -s qdisc' output (closes: Bug#128501)
++
++ -- Juan Cespedes <cespedes@debian.org> Thu, 10 Jan 2002 22:18:25 +0100
++
++iproute (20010824-2) unstable; urgency=low
++
++ * Fixed the following important and serious bugs:
++ + iproute doesn't compile on Alpha (closes: Bug#118113, Bug#123224)
++ + iproute doesn't compile on MIPS (closes: Bug#118424)
++ + iproute doesn't compile on powerpc (closes: Bug#119601)
++ * Added man pages for tc (closes: Bug#124230), tc-cbq, tc-red, tc-tbf,
++ tc-prio and tc-sfq
++ * Removed references to old programs from iproute(7) (closes: Bug#99536)
++ * Fixed bug which presented first hop as dead in equal cost multipath
++ (closes: Bug#121589)
++ * Do not process .ps with through `psnup' (closes: Bug#119820)
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 8 Jan 2002 16:07:27 +0100
++
++iproute (20010824-1) unstable; urgency=low
++
++ * New upstream version
++ * Make ingress qdisc work again with tc (closes: Bug#84444)
++ * Make it compile properly with new include files (closes: Bug#113112)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 28 Oct 2001 16:38:00 +0100
++
++iproute (20001007-1) unstable; urgency=low
++
++ * New upstream version (closes: Bug#63701)
++ * Remove /etc/iproute2 on purge (closes: Bug#72743)
++ * Fixed Lintian warnings (no-priority-field and no-section-field)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 14 Oct 2000 19:27:12 +0200
++
++iproute (991023-2) unstable; urgency=low
++
++ * New Standards-Version (3.1.1) (closes: Bug#47923)
++ * Modified description of package to show which kernel options are
++ necessary to use the package (closes: Bug#47922)
++ * Updated manual page to point at /usr/share/doc/iproute (closes: Bug#47924)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 19 Dec 1999 04:00:21 +0100
++
++iproute (991023-1) unstable; urgency=low
++
++ * New upstream version (closes: Bug#48733)
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 2 Nov 1999 16:29:37 +0100
++
++iproute (990824-1) unstable; urgency=low
++
++ * New maintainer
++ * New upstream version
++ * New Standards-Version: 3.1.0
++ * Minor fix in "ip rule list": mask in "from" address was not shown
++ correctly
++ * Removed obsoleted documentation from "debian/" directory
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 24 Oct 1999 19:02:56 +0200
++
++iproute (990630-1) unstable; urgency=low
++
++ * New upstream version.
++ * FHS and standards 3.0.1.0.
++
++ -- Roberto Lumbreras <rover@debian.org> Tue, 3 Aug 1999 02:49:28 +0200
++
++iproute (990530-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.2.10 kernel headers.
++ * Install new scripts ip/routef ip/routel, but not ip/ifcfg ip/rtpr by
++ now, I don't know who/what needs rtpr; ifcfg uses arping, and it isn't
++ available in debian for now.
++
++ -- Roberto Lumbreras <rover@debian.org> Tue, 22 Jun 1999 02:28:53 +0200
++
++iproute (990329-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.2.5 kernel headers.
++
++ -- Roberto Lumbreras <rover@debian.org> Sun, 4 Apr 1999 18:50:39 +0200
++
++iproute (980630-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.1.112 kernel headers.
++ * Rewrote the rules file.
++
++ -- Roberto Lumbreras <rover@debian.org> Wed, 29 Jul 1998 23:37:52 +0200
++
++iproute (980119-1) unstable; urgency=low
++
++ * Outdated documentation. Upstream docs are scarce.
++ * Non-Maintainer release
++ * This package has no correct copyright file!
++ * Include all the README.* docs from the upstream site.
++ * Modified to build under glibc
++ * Build with 2.1.85 kernel headers.
++ * produce a correct diff.
++ * Reworked the rules file to utilize debmake fully
++ * Newest upstream release
++ * glibc compilation
++
++ -- Christoph Lameter <christoph@lameter.com> Wed, 4 Feb 1998 13:37:28 -0800
++
++iproute (961225-2) unstable frozen; urgency=low
++
++ * Added a man page for iproute. (Fixes #8080).
++ * Removed out-of-date patches.
++ * Added routing.txt from /usr/src/linux/Documentation/networking/routing.txt
++ * Newer version of debmake.
++
++ -- Tom Lees <tom@lpsg.demon.co.uk> Mon, 17 Apr 1997 17:00:36 +0100
++
++iproute (961225-1) unstable; urgency=low
++
++ * Initial Release.
++
++ -- Tom Lees <tom@lpsg.demon.co.uk> Mon, 30 Dec 1996 11:12:23 +0000
++
++Local variables:
++mode: debian-changelog
++End:
+diff -Naur iproute2-orig/debian/conffiles iproute2/debian/conffiles
+--- iproute2-orig/debian/conffiles 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/conffiles 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,5 @@
++/etc/iproute2/rt_dsfield
++/etc/iproute2/rt_protos
++/etc/iproute2/rt_realms
++/etc/iproute2/rt_scopes
++/etc/iproute2/rt_tables
+diff -Naur iproute2-orig/debian/control iproute2/debian/control
+--- iproute2-orig/debian/control 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/control 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,19 @@
++Source: iproute
++Section: net
++Priority: optional
++Maintainer: Juan Cespedes <cespedes@debian.org>
++Standards-Version: 3.6.0
++Build-Depends: tetex-bin, atm-dev
++
++Package: iproute
++Architecture: any
++Depends: ${shlibs:Depends}
++Description: Professional tools to control the networking in Linux kernels
++ This is `iproute', the professional set of tools to control the
++ networking behavior in kernels 2.2.x and later.
++ .
++ At least, the options CONFIG_NETLINK and CONFIG_RTNETLINK must
++ be compiled in the running kernel
++ .
++ This package is also known as iproute2 upstream and in some
++ documentation.
+diff -Naur iproute2-orig/debian/copyright iproute2/debian/copyright
+--- iproute2-orig/debian/copyright 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/copyright 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,42 @@
++This is the Debian GNU/Linux's prepackaged version of the
++Linux Traffic Control engine and related utils, "iproute"
++
++This package was put together from sources obtained from:
++ ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.4.7-now-ss010824.tar.gz
++
++Changes for Debian:
++ * added Debian GNU/Linux package maintenance system files
++ * Added HTB v3.6 from
++ <http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz>
++
++
++Copyrights
++----------
++Copyright (C) 1996-2001 Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
++
++Modifications for Debian:
++ Copyright (C) 1996 Tom Lees <tom@lpsg.demon.co.uk>
++ Copyright (C) 1998 Christoph Lameter <christoph@lameter.com>
++ Copyright (C) 1998-1999 Roberto Lumbreras <rover@debian.org>
++ Copyright (C) 1999-2003 Juan Cespedes <cespedes@debian.org>
++
++
++License
++-------
++
++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, 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.
++
++A copy of the GNU General Public License is available as
++`/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
++or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
++You can also obtain it by writing to the Free Software Foundation,
++Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
++
+diff -Naur iproute2-orig/debian/manpages/ip.8 iproute2/debian/manpages/ip.8
+--- iproute2-orig/debian/manpages/ip.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/ip.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,1809 @@
++.TH IP 8 "17 January 2002" "iproute2" "Linux"
++.SH NAME
++ip \- show / manipulate routing, devices, policy routing and tunnels
++.SH SYNOPSIS
++
++.ad l
++.in +8
++.ti -8
++.B ip
++.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
++.BR help " }"
++.sp
++
++.ti -8
++.IR OBJECT " := { "
++.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
++maddr " | " mroute " | " monitor " }"
++.sp
++
++.ti -8
++.IR OPTIONS " := { "
++\fB\-V\fR[\fIersion\fR] |
++\fB\-s\fR[\fItatistics\fR] |
++\fB\-r\fR[\fIesolve\fR] |
++\fB\-f\fR[\fIamily\fR] {
++.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
++\fB\-o\fR[\fIneline\fR] }
++
++.ti -8
++.BI "ip link set " DEVICE
++.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
++.br
++.BR promisc " { " on " | " off " } |"
++.br
++.BR allmulti " { " on " | " off " } |"
++.br
++.BR dynamic " { " on " | " off " } |"
++.br
++.BR multicast " { " on " | " off " } |"
++.br
++.B txqueuelen
++.IR PACKETS " |"
++.br
++.B name
++.IR NEWNAME " |"
++.br
++.B address
++.IR LLADDR " |"
++.B broadcast
++.IR LLADDR " |"
++.br
++.B mtu
++.IR MTU " }"
++
++.ti -8
++.B ip link show
++.RI "[ " DEVICE " ]"
++
++.ti -8
++.BR "ip addr" " { " add " | " del " } "
++.IB IFADDR " dev " STRING
++
++.ti -8
++.BR "ip addr" " { " show " | " flush " } [ " dev
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ] [ "
++.B to
++.IR PREFIX " ] [ " FLAG-LIST " ] [ "
++.B label
++.IR PATTERN " ]"
++
++.ti -8
++.IR IFADDR " := " PREFIX " | " ADDR
++.B peer
++.IR PREFIX " [ "
++.B broadcast
++.IR ADDR " ] [ "
++.B anycast
++.IR ADDR " ] [ "
++.B label
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ]"
++
++.ti -8
++.IR SCOPE-ID " := "
++.RB "[ " host " | " link " | " global " | "
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
++
++.ti -8
++.IR FLAG " := "
++.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
++tentative " | " deprecated " ]"
++
++.ti -8
++.BR "ip route" " { "
++.BR list " | " flush " } "
++.I SELECTOR
++
++.ti -8
++.B ip route get
++.IR ADDRESS " [ "
++.BI from " ADDRESS " iif " STRING"
++.RB " ] [ " oif
++.IR STRING " ] [ "
++.B tos
++.IR TOS " ]"
++
++.ti -8
++.BR "ip route" " { " add " | " del " | " change " | " append " | "\
++replace " | " monitor " } "
++.I ROUTE
++
++.ti -8
++.IR SELECTOR " := "
++.RB "[ " root
++.IR PREFIX " ] [ "
++.B match
++.IR PREFIX " ] [ "
++.B exact
++.IR PREFIX " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B type
++.IR TYPE " ] [ "
++.B scope
++.IR SCOPE " ]"
++
++.ti -8
++.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
++
++.ti -8
++.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
++.B tos
++.IR TOS " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B scope
++.IR SCOPE " ] [ "
++.B metric
++.IR METRIC " ]"
++
++.ti -8
++.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
++.B nexthop
++.IR NH " ] ..."
++
++.ti -8
++.IR NH " := [ "
++.B via
++.IR ADDRESS " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B weight
++.IR NUMBER " ] " NHFLAGS
++
++.ti -8
++.IR OPTIONS " := " FLAGS " [ "
++.B mtu
++.IR NUMBER " ] [ "
++.B advmss
++.IR NUMBER " ] [ "
++.B rtt
++.IR NUMBER " ] [ "
++.B rttvar
++.IR NUMBER " ] [ "
++.B window
++.IR NUMBER " ] [ "
++.B cwnd
++.IR NUMBER " ] [ "
++.B ssthresh
++.IR REALM " ] [ "
++.B realms
++.IR REALM " ]"
++
++.ti -8
++.IR TYPE " := [ "
++.BR unicast " | " local " | " broadcast " | " multicast " | "\
++throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local "| " main " | " default " | " all " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR SCOPE " := [ "
++.BR host " | " link " | " global " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAGS " := [ "
++.BR equalize " ]"
++
++.ti -8
++.IR NHFLAGS " := [ "
++.BR onlink " | " pervasive " ]"
++
++.ti -8
++.IR RTPROTO " := [ "
++.BR kernel " | " boot " | " static " |"
++.IR NUMBER " ]"
++
++.ti -8
++.B ip rule
++.RB " [ " list " | " add " | " del " ]"
++.I SELECTOR ACTION
++
++.ti -8
++.IR SELECTOR " := [ "
++.B from
++.IR PREFIX " ] [ "
++.B to
++.IR PREFIX " ] [ "
++.B tos
++.IR TOS " ] [ "
++.B fwmark
++.IR FWMARK " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B pref
++.IR NUMBER " ]"
++
++.ti -8
++.IR ACTION " := [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B nat
++.IR ADDRESS " ] [ "
++.BR prohibit " | " reject " | " unreachable " ] [ " realms
++.RI "[" SRCREALM "/]" DSTREALM " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local " | " main " | " default " |"
++.IR NUMBER " ]"
++
++.ti -8
++.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
++.IR ADDR " [ "
++.B lladdr
++.IR LLADDR " ] [ "
++.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
++.IR ADDR " } [ "
++.B dev
++.IR DEV " ]"
++
++.ti -8
++.BR "ip neigh" " { " show " | " flush " } [ " to
++.IR PREFIX " ] [ "
++.B dev
++.IR DEV " ] [ "
++.B nud
++.IR STATE " ]"
++
++.ti -8
++.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
++.RI "[ " NAME " ]"
++.br
++.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
++.br
++.RB "[ " remote
++.IR ADDR " ] [ "
++.B local
++.IR ADDR " ]"
++.br
++.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
++.IR KEY " ] [ "
++.RB "[" i "|" o "]" csum " ] ]"
++.br
++.RB "[ " ttl
++.IR TTL " ] [ "
++.B tos
++.IR TOS " ] [ "
++.RB "[" no "]" pmtudisc " ]"
++.br
++.RB "[ " dev
++.IR PHYS_DEV " ]"
++
++.ti -8
++.IR ADDR " := { " IP_ADDRESS " |"
++.BR any " }"
++
++.ti -8
++.IR TOS " := { " NUMBER " |"
++.BR inherit " }"
++
++.ti -8
++.IR TTL " := { " 1 ".." 255 " | "
++.BR inherit " }"
++
++.ti -8
++.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
++
++.ti -8
++.BR "ip maddr" " [ " add " | " del " ]"
++.IB MULTIADDR " dev " STRING
++
++.ti -8
++.BR "ip maddr show" " [ " dev
++.IR STRING " ]"
++
++.ti -8
++.BR "ip mroute show" " ["
++.IR PREFIX " ] [ "
++.B from
++.IR PREFIX " ] [ "
++.B iif
++.IR DEVICE " ]"
++
++.ti -8
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++.in -8
++.ad b
++
++.SH OPTIONS
++
++.TP
++.BR "\-V" , " -Version"
++print the version of the
++.B ip
++utility and exit.
++
++.TP
++.BR "\-s" , " \-stats", " \-statistics"
++output more information. If the option
++appears twice or more, the amount of information increases.
++As a rule, the information is statistics or some time values.
++
++.TP
++.BR "\-f" , " \-family"
++followed by protocol family identifier:
++.BR "inet" , " inet6"
++or
++.B link
++,enforce the protocol family to use. If the option is not present,
++the protocol family is guessed from other arguments. If the rest
++of the command line does not give enough information to guess the
++family,
++.B ip
++falls back to the default one, usually
++.B inet
++or
++.BR "any" .
++.B link
++is a special family identifier meaning that no networking protocol
++is involved.
++
++.TP
++.B \-4
++shortcut for
++.BR "-family inet" .
++
++.TP
++.B \-6
++shortcut for
++.BR "\-family inet6" .
++
++.TP
++.B \-0
++shortcut for
++.BR "\-family link" .
++
++.TP
++.BR "\-o" , " \-oneline"
++output each record on a single line, replacing line feeds
++with the
++.B '\'
++character. This is convenient when you want to count records
++with
++.BR wc (1)
++ or to
++.BR grep (1)
++the output.
++
++.TP
++.BR "\-r" , " \-resolve"
++use the system's name resolver to print DNS names instead of
++host addresses.
++
++.SH IP - COMMAND SYNTAX
++
++.SS
++.I OBJECT
++
++.TP
++.B link
++- network device.
++
++.TP
++.B address
++- protocol (IP or IPv6) address on a device.
++.TP
++.B neighbour
++- ARP or NDISC cache entry.
++
++.TP
++.B route
++- routing table entry.
++
++.TP
++.B rule
++- rule in routing policy database.
++
++.TP
++.B maddress
++- multicast address.
++
++.TP
++.B mroute
++- multicast routing cache entry.
++
++.TP
++.B tunnel
++- tunnel over IP.
++
++.PP
++The names of all objects may be written in full or
++abbreviated form, f.e.
++.B address
++is abbreviated as
++.B addr
++or just
++.B a.
++
++.SS
++.I COMMAND
++
++Specifies the action to perform on the object.
++The set of possible actions depends on the object type.
++As a rule, it is possible to
++.BR "add" , " delete"
++and
++.B show
++(or
++.B list
++) objects, but some objects do not allow all of these operations
++or have some additional commands. The
++.B help
++command is available for all objects. It prints
++out a list of available commands and argument syntax conventions.
++.sp
++If no command is given, some default command is assumed.
++Usually it is
++.B list
++or, if the objects of this class cannot be listed,
++.BR "help" .
++
++.SH ip link - network device configuration
++
++.B link
++is a network device and the corresponding commands
++display and change the state of devices.
++
++.SS ip link set - change device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies network device to operate on.
++
++.TP
++.BR up " and " down
++change the state of the device to
++.B UP
++or
++.BR "DOWN" .
++
++.TP
++.BR "arp on " or " arp off"
++change the
++.B NOARP
++flag on the device.
++
++.TP
++.BR "multicast on " or " multicast off"
++change the
++.B MULTICAST
++flag on the device.
++
++.TP
++.BR "dynamic on " or " dynamic off"
++change the
++.B DYNAMIC
++flag on the device.
++
++.TP
++.BI name " NAME"
++change the name of the device. This operation is not
++recommended if the device is running or has some addresses
++already configured.
++
++.TP
++.BI txqueuelen " NUMBER"
++.TP
++.BI txqlen " NUMBER"
++change the transmit queue length of the device.
++
++.TP
++.BI mtu " NUMBER"
++change the
++.I MTU
++of the device.
++
++.TP
++.BI address " LLADDRESS"
++change the station address of the interface.
++
++.TP
++.BI broadcast " LLADDRESS"
++.TP
++.BI brd " LLADDRESS"
++.TP
++.BI peer " LLADDRESS"
++change the link layer broadcast address or the peer address when
++the interface is
++.IR "POINTOPOINT" .
++
++.PP
++.B Warning:
++If multiple parameter changes are requested,
++.B ip
++aborts immediately after any of the changes have failed.
++This is the only case when
++.B ip
++can move the system to an unpredictable state. The solution
++is to avoid changing several parameters with one
++.B ip link set
++call.
++
++.SS ip link show - display device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies the network device to show.
++If this argument is omitted all devices are listed.
++
++.TP
++.B up
++only display running interfaces.
++
++.SH ip address - protocol address management.
++
++The
++.B address
++is a protocol (IP or IPv6) address attached
++to a network device. Each device must have at least one address
++to use the corresponding protocol. It is possible to have several
++different addresses attached to one device. These addresses are not
++discriminated, so that the term
++.B alias
++is not quite appropriate for them and we do not use it in this document.
++.sp
++The
++.B ip addr
++command displays addresses and their properties, adds new addresses
++and deletes old ones.
++
++.SS ip address add - add new protocol address.
++
++.TP
++.BI dev " NAME"
++the name of the device to add the address to.
++
++.TP
++.BI local " ADDRESS " (default)
++the address of the interface. The format of the address depends
++on the protocol. It is a dotted quad for IP and a sequence of
++hexadecimal halfwords separated by colons for IPv6. The
++.I ADDRESS
++may be followed by a slash and a decimal number which encodes
++the network prefix length.
++
++.TP
++.BI peer " ADDRESS"
++the address of the remote endpoint for pointopoint interfaces.
++Again, the
++.I ADDRESS
++may be followed by a slash and a decimal number, encoding the network
++prefix length. If a peer address is specified, the local address
++cannot have a prefix length. The network prefix is associated
++with the peer rather than with the local address.
++
++.TP
++.BI broadcast " ADDRESS"
++the broadcast address on the interface.
++.sp
++It is possible to use the special symbols
++.B '+'
++and
++.B '-'
++instead of the broadcast address. In this case, the broadcast address
++is derived by setting/resetting the host bits of the interface prefix.
++
++.TP
++.BI label " NAME"
++Each address may be tagged with a label string.
++In order to preserve compatibility with Linux-2.0 net aliases,
++this string must coincide with the name of the device or must be prefixed
++with the device name followed by colon.
++
++.TP
++.BI scope " SCOPE_VALUE"
++the scope of the area where this address is valid.
++The available scopes are listed in file
++.BR "/etc/iproute2/rt_scopes" .
++Predefined scope values are:
++
++.in +8
++.B global
++- the address is globally valid.
++.sp
++.B site
++- (IPv6 only) the address is site local, i.e. it is
++valid inside this site.
++.sp
++.B link
++- the address is link local, i.e. it is valid only on this device.
++.sp
++.B host
++- the address is valid only inside this host.
++.in -8
++
++.SS ip address delete - delete protocol address
++.B Arguments:
++coincide with the arguments of
++.B ip addr add.
++The device name is a required argument. The rest are optional.
++If no arguments are given, the first address is deleted.
++
++.SS ip address show - look at protocol addresses
++
++.TP
++.BI dev " NAME " (default)
++name of device.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list addresses with this scope.
++
++.TP
++.BI to " PREFIX"
++only list addresses matching this prefix.
++
++.TP
++.BI label " PATTERN"
++only list addresses with labels matching the
++.IR "PATTERN" .
++.I PATTERN
++is a usual shell style pattern.
++
++.TP
++.BR dynamic " and " permanent
++(IPv6 only) only list addresses installed due to stateless
++address configuration or only list permanent (not dynamic)
++addresses.
++
++.TP
++.B tentative
++(IPv6 only) only list addresses which did not pass duplicate
++address detection.
++
++.TP
++.B deprecated
++(IPv6 only) only list deprecated addresses.
++
++.TP
++.BR primary " and " secondary
++only list primary (or secondary) addresses.
++
++.SS ip address flush - flush protocol addresses
++This command flushes the protocol addresses selected by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The difference is that it does not run when no arguments are given.
++
++.PP
++.B Warning:
++This command (and other
++.B flush
++commands described below) is pretty dangerous. If you make a mistake,
++it will not forgive it, but will cruelly purge all the addresses.
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of deleted
++addresses and the number of rounds made to flush the address list. If
++this option is given twice,
++.B ip addr flush
++also dumps all the deleted addresses in the format described in the
++previous subsection.
++
++.SH ip neighbour - neighbour/arp tables management.
++
++.B neighbour
++objects establish bindings between protocol addresses and
++link layer addresses for hosts sharing the same link.
++Neighbour entries are organized into tables. The IPv4 neighbour table
++is known by another name - the ARP table.
++
++.P
++The corresponding commands display neighbour bindings
++and their properties, add new neighbour entries and delete old ones.
++
++.SS ip neighbour add - add a new neighbour entry
++.SS ip neighbour change - change an existing entry
++.SS ip neighbour replace - add a new entry or change an existing one
++
++These commands create new neighbour records or update existing ones.
++
++.TP
++.BI to " ADDRESS " (default)
++the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
++
++.TP
++.BI dev " NAME"
++the interface to which this neighbour is attached.
++
++.TP
++.BI lladdr " LLADDRESS"
++the link layer address of the neighbour.
++.I LLADDRESS
++can also be
++.BR "null" .
++
++.TP
++.BI nud " NUD_STATE"
++the state of the neighbour entry.
++.B nud
++is an abbreviation for 'Neigh bour Unreachability Detection'.
++The state can take one of the following values:
++
++.in +8
++.B permanent
++- the neighbour entry is valid forever and can be only
++be removed administratively.
++.sp
++
++.B noarp
++- the neighbour entry is valid. No attempts to validate
++this entry will be made but it can be removed when its lifetime expires.
++.sp
++
++.B reachable
++- the neighbour entry is valid until the reachability
++timeout expires.
++.sp
++
++.B stale
++- the neighbour entry is valid but suspicious.
++This option to
++.B ip neigh
++does not change the neighbour state if it was valid and the address
++is not changed by this command.
++.in -8
++
++.SS ip neighbour delete - delete a neighbour entry
++This command invalidates a neighbour entry.
++
++.PP
++The arguments are the same as with
++.BR "ip neigh add" ,
++except that
++.B lladdr
++and
++.B nud
++are ignored.
++
++.PP
++.B Warning:
++Attempts to delete or manually change a
++.B noarp
++entry created by the kernel may result in unpredictable behaviour.
++Particularly, the kernel may try to resolve this address even
++on a
++.B NOARP
++interface or if the address is multicast or broadcast.
++
++.SS ip neighbour show - list neighbour entries
++
++This commands displays neighbour tables.
++
++.TP
++.BI to " ADDRESS " (default)
++the prefix selecting the neighbours to list.
++
++.TP
++.BI dev " NAME"
++only list the neighbours attached to this device.
++
++.TP
++.B unused
++only list neighbours which are not currently in use.
++
++.TP
++.BI nud " NUD_STATE"
++only list neighbour entries in this state.
++.I NUD_STATE
++takes values listed below or the special value
++.B all
++which means all states. This option may occur more than once.
++If this option is absent,
++.B ip
++lists all entries except for
++.B none
++and
++.BR "noarp" .
++
++.SS ip neighbour flush - flush neighbour entries
++This command flushes neighbour tables, selecting
++entries to flush by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The differences are that it does not run when no arguments are given,
++and that the default neighbour states to be flushed do not include
++.B permanent
++and
++.BR "noarp" .
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted neighbours and the number of rounds made to flush the
++neighbour table. If the option is given
++twice,
++.B ip neigh flush
++also dumps all the deleted neighbours.
++
++.SH ip route - routing table management
++Manipulate route entries in the kernel routing tables keep
++information about paths to other networked nodes.
++.sp
++.B Route types:
++
++.in +8
++.B unicast
++- the route entry describes real paths to the destinations covered
++by the route prefix.
++
++.sp
++.B unreachable
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I host unreachable
++is generated.
++The local senders get an
++.I EHOSTUNREACH
++error.
++
++.sp
++.B blackhole
++- these destinations are unreachable. Packets are discarded silently.
++The local senders get an
++.I EINVAL
++error.
++
++.sp
++.B prohibit
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I communication administratively prohibited
++is generated. The local senders get an
++.I EACCES
++error.
++
++.sp
++.B local
++- the destinations are assigned to this host. The packets are looped
++back and delivered locally.
++
++.sp
++.B broadcast
++- the destinations are broadcast addresses. The packets are sent as
++link broadcasts.
++
++.sp
++.B throw
++- a special control route used together with policy rules. If such a
++route is selected, lookup in this table is terminated pretending that
++no route was found. Without policy routing it is equivalent to the
++absence of the route in the routing table. The packets are dropped
++and the ICMP message
++.I net unreachable
++is generated. The local senders get an
++.I ENETUNREACH
++error.
++
++.sp
++.B nat
++- a special NAT route. Destinations covered by the prefix
++are considered to be dummy (or external) addresses which require translation
++to real (or internal) ones before forwarding. The addresses to translate to
++are selected with the attribute
++.BR "via" .
++
++.sp
++.B anycast
++.RI "- " "not implemented"
++the destinations are
++.I anycast
++addresses assigned to this host. They are mainly equivalent
++to
++.B local
++with one difference: such addresses are invalid when used
++as the source address of any packet.
++
++.sp
++.B multicast
++- a special type used for multicast routing. It is not present in
++normal routing tables.
++.in -8
++
++.P
++.B Route tables:
++Linux-2.x can pack routes into several routing
++tables identified by a number in the range from 1 to 255 or by
++name from the file
++.B /etc/iproute2/rt_tables
++. By default all normal routes are inserted into the
++.B main
++table (ID 254) and the kernel only uses this table when calculating routes.
++
++.sp
++Actually, one other table always exists, which is invisible but
++even more important. It is the
++.B local
++table (ID 255). This table
++consists of routes for local and broadcast addresses. The kernel maintains
++this table automatically and the administrator usually need not modify it
++or even look at it.
++
++The multiple routing tables enter the game when
++.I policy routing
++is used.
++
++.SS ip route add - add new route
++.SS ip route change - change route
++.SS ip route replace - change or add new one
++
++.TP
++.BI to " TYPE PREFIX " (default)
++the destination prefix of the route. If
++.I TYPE
++is omitted,
++.B ip
++assumes type
++.BR "unicast" .
++Other values of
++.I TYPE
++are listed above.
++.I PREFIX
++is an IP or IPv6 address optionally followed by a slash and the
++prefix length. If the length of the prefix is missing,
++.B ip
++assumes a full-length host route. There is also a special
++.I PREFIX
++.B default
++- which is equivalent to IP
++.B 0/0
++or to IPv6
++.BR "::/0" .
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service (TOS) key. This key has no associated mask and
++the longest match is understood as: First, compare the TOS
++of the route and of the packet. If they are not equal, then the packet
++may still match a route with a zero TOS.
++.I TOS
++is either an 8 bit hexadecimal number or an identifier
++from
++.BR "/etc/iproute2/rt_dsfield" .
++
++.TP
++.BI metric " NUMBER"
++.TP
++.BI preference " NUMBER"
++the preference value of the route.
++.I NUMBER
++is an arbitrary 32bit number.
++
++.TP
++.BI table " TABLEID"
++the table to add this route to.
++.I TABLEID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_tables" .
++If this parameter is omitted,
++.B ip
++assumes the
++.B main
++table, with the exception of
++.BR local " , " broadcast " and " nat
++routes, which are put into the
++.B local
++table by default.
++
++.TP
++.BI dev " NAME"
++the output device name.
++
++.TP
++.BI via " ADDRESS"
++the address of the nexthop router. Actually, the sense of this field
++depends on the route type. For normal
++.B unicast
++routes it is either the true next hop router or, if it is a direct
++route installed in BSD compatibility mode, it can be a local address
++of the interface. For NAT routes it is the first address of the block
++of translated IP destinations.
++
++.TP
++.BI src " ADDRESS"
++the source address to prefer when sending to the destinations
++covered by the route prefix.
++
++.TP
++.BI realm " REALMID"
++the realm to which this route is assigned.
++.I REALMID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_realms" .
++
++.TP
++.BI mtu " MTU"
++.TP
++.BI "mtu lock" " MTU"
++the MTU along the path to the destination. If the modifier
++.B lock
++is not used, the MTU may be updated by the kernel due to
++Path MTU Discovery. If the modifier
++.B lock
++is used, no path MTU discovery will be tried, all packets
++will be sent without the DF bit in IPv4 case or fragmented
++to MTU for IPv6.
++
++.TP
++.BI window " NUMBER"
++the maximal window for TCP to advertise to these destinations,
++measured in bytes. It limits maximal data bursts that our TCP
++peers are allowed to send to us.
++
++.TP
++.BI rtt " NUMBER"
++the initial RTT ('Round Trip Time') estimate.
++
++.TP
++.BI rttvar " NUMBER " "(2.3.15+ only)"
++the initial RTT variance estimate.
++
++.TP
++.BI ssthresh " NUMBER " "(2.3.15+ only)"
++an estimate for the initial slow start threshold.
++
++.TP
++.BI cwnd " NUMBER " "(2.3.15+ only)"
++the clamp for congestion window. It is ignored if the
++.B lock
++flag is not used.
++
++.TP
++.BI advmss " NUMBER " "(2.3.15+ only)"
++the MSS ('Maximal Segment Size') to advertise to these
++destinations when establishing TCP connections. If it is not given,
++Linux uses a default value calculated from the first hop device MTU.
++(If the path to these destination is asymmetric, this guess may be wrong.)
++
++.TP
++.BI reordering " NUMBER " "(2.3.15+ only)"
++Maximal reordering on the path to this destination.
++If it is not given, Linux uses the value selected with
++.B sysctl
++variable
++.BR "net/ipv4/tcp_reordering" .
++
++.TP
++.BI nexthop " NEXTHOP"
++the nexthop of a multipath route.
++.I NEXTHOP
++is a complex value with its own syntax similar to the top level
++argument lists:
++
++.in +8
++.BI via " ADDRESS"
++- is the nexthop router.
++.sp
++
++.BI dev " NAME"
++- is the output device.
++.sp
++
++.BI weight " NUMBER"
++- is a weight for this element of a multipath
++route reflecting its relative bandwidth or quality.
++.in -8
++
++.TP
++.BI scope " SCOPE_VAL"
++the scope of the destinations covered by the route prefix.
++.I SCOPE_VAL
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_scopes" .
++If this parameter is omitted,
++.B ip
++assumes scope
++.B global
++for all gatewayed
++.B unicast
++routes, scope
++.B link
++for direct
++.BR unicast " and " broadcast
++routes and scope
++.BR host " for " local
++routes.
++
++.TP
++.BI protocol " RTPROTO"
++the routing protocol identifier of this route.
++.I RTPROTO
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_protos" .
++If the routing protocol ID is not given,
++.B ip assumes protocol
++.B boot
++(i.e. it assumes the route was added by someone who doesn't
++understand what they are doing). Several protocol values have
++a fixed interpretation.
++Namely:
++
++.in +8
++.B redirect
++- the route was installed due to an ICMP redirect.
++.sp
++
++.B kernel
++- the route was installed by the kernel during autoconfiguration.
++.sp
++
++.B boot
++- the route was installed during the bootup sequence.
++If a routing daemon starts, it will purge all of them.
++.sp
++
++.B static
++- the route was installed by the administrator
++to override dynamic routing. Routing daemon will respect them
++and, probably, even advertise them to its peers.
++.sp
++
++.B ra
++- the route was installed by Router Discovery protocol.
++.in -8
++
++.sp
++The rest of the values are not reserved and the administrator is free
++to assign (or not to assign) protocol tags.
++
++.TP
++.B onlink
++pretend that the nexthop is directly attached to this link,
++even if it does not match any interface prefix.
++
++.TP
++.B equalize
++allow packet by packet randomization on multipath routes.
++Without this modifier, the route will be frozen to one selected
++nexthop, so that load splitting will only occur on per-flow base.
++.B equalize
++only works if the kernel is patched.
++
++.SS ip route delete - delete route
++
++.B ip route del
++has the same arguments as
++.BR "ip route add" ,
++but their semantics are a bit different.
++
++Key values
++.RB "(" to ", " tos ", " preference " and " table ")"
++select the route to delete. If optional attributes are present,
++.B ip
++verifies that they coincide with the attributes of the route to delete.
++If no route with the given key and attributes was found,
++.B ip route del
++fails.
++
++.SS ip route show - list routes
++the command displays the contents of the routing tables or the route(s)
++selected by some criteria.
++
++.TP
++.BI to " SELECTOR " (default)
++only select routes from the given range of destinations.
++.I SELECTOR
++consists of an optional modifier
++.RB "(" root ", " match " or " exact ")"
++and a prefix.
++.BI root " PREFIX"
++selects routes with prefixes not shorter than
++.IR PREFIX "."
++F.e.
++.BI root " 0/0"
++selects the entire routing table.
++.BI match " PREFIX"
++selects routes with prefixes not longer than
++.IR PREFIX "."
++F.e.
++.BI match " 10.0/16"
++selects
++.IR 10.0/16 ","
++.IR 10/8 " and " 0/0 ,
++but it does not select
++.IR 10.1/16 " and " 10.0.0/24 .
++And
++.BI exact " PREFIX"
++(or just
++.IR PREFIX ")"
++selects routes with this exact prefix. If neither of these options
++are present,
++.B ip
++assumes
++.BI root " 0/0"
++i.e. it lists the entire table.
++
++.TP
++.BI tos " TOS"
++.BI dsfield " TOS"
++only select routes with the given TOS.
++
++.TP
++.BI table " TABLEID"
++show the routes from this table(s). The default setting is to show
++.BR table main "."
++.I TABLEID
++may either be the ID of a real table or one of the special values:
++.sp
++.in +8
++.B all
++- list all of the tables.
++.sp
++.B cache
++- dump the routing cache.
++.in -8
++
++.TP
++.B cloned
++.TP
++.B cached
++list cloned routes i.e. routes which were dynamically forked from
++other routes because some route attribute (f.e. MTU) was updated.
++Actually, it is equivalent to
++.BR "table cache" "."
++
++.TP
++.BI from " SELECTOR"
++the same syntax as for
++.BR to ","
++but it binds the source address range rather than destinations.
++Note that the
++.B from
++option only works with cloned routes.
++
++.TP
++.BI protocol " RTPROTO"
++only list routes of this protocol.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list routes with this scope.
++
++.TP
++.BI type " TYPE"
++only list routes of this type.
++
++.TP
++.BI dev " NAME"
++only list routes going via this device.
++
++.TP
++.BI via " PREFIX"
++only list routes going via the nexthop routers selected by
++.IR PREFIX "."
++
++.TP
++.BI src " PREFIX"
++only list routes with preferred source addresses selected
++by
++.IR PREFIX "."
++
++.TP
++.BI realm " REALMID"
++.TP
++.BI realms " FROMREALM/TOREALM"
++only list routes with these realms.
++
++.SS ip route flush - flush routing tables
++this command flushes routes selected by some criteria.
++
++.sp
++The arguments have the same syntax and semantics as the arguments of
++.BR "ip route show" ,
++but routing tables are not listed but purged. The only difference is
++the default action:
++.B show
++dumps all the IP main routing table but
++.B flush
++prints the helper page.
++
++.sp
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted routes and the number of rounds made to flush the routing
++table. If the option is given
++twice,
++.B ip route flush
++also dumps all the deleted routes in the format described in the
++previous subsection.
++
++.SS ip route get - get a single route
++this command gets a single route to a destination and prints its
++contents exactly as the kernel sees it.
++
++.TP
++.BI to " ADDRESS " (default)
++the destination address.
++
++.TP
++.BI from " ADDRESS"
++the source address.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service.
++
++.TP
++.BI iif " NAME"
++the device from which this packet is expected to arrive.
++
++.TP
++.BI oif " NAME"
++force the output device on which this packet will be routed.
++
++.TP
++.B connected
++if no source address
++.RB "(option " from ")"
++was given, relookup the route with the source set to the preferred
++address received from the first lookup.
++If policy routing is used, it may be a different route.
++
++.P
++Note that this operation is not equivalent to
++.BR "ip route show" .
++.B show
++shows existing routes.
++.B get
++resolves them and creates new clones if necessary. Essentially,
++.B get
++is equivalent to sending a packet along this path.
++If the
++.B iif
++argument is not given, the kernel creates a route
++to output packets towards the requested destination.
++This is equivalent to pinging the destination
++with a subsequent
++.BR "ip route ls cache" ,
++however, no packets are actually sent. With the
++.B iif
++argument, the kernel pretends that a packet arrived from this interface
++and searches for a path to forward the packet.
++
++.SH ip rule - routing policy database management
++
++.BR "Rule" s
++in the routing policy database control the route selection algorithm.
++
++.P
++Classic routing algorithms used in the Internet make routing decisions
++based only on the destination address of packets (and in theory,
++but not in practice, on the TOS field).
++
++.P
++In some circumstances we want to route packets differently depending not only
++on destination addresses, but also on other packet fields: source address,
++IP protocol, transport protocol ports or even packet payload.
++This task is called 'policy routing'.
++
++.P
++To solve this task, the conventional destination based routing table, ordered
++according to the longest match rule, is replaced with a 'routing policy
++database' (or RPDB), which selects routes by executing some set of rules.
++
++.P
++Each policy routing rule consists of a
++.B selector
++and an
++.B action predicate.
++The RPDB is scanned in the order of increasing priority. The selector
++of each rule is applied to {source address, destination address, incoming
++interface, tos, fwmark} and, if the selector matches the packet,
++the action is performed. The action predicate may return with success.
++In this case, it will either give a route or failure indication
++and the RPDB lookup is terminated. Otherwise, the RPDB program
++continues on the next rule.
++
++.P
++Semantically, natural action is to select the nexthop and the output device.
++
++.P
++At startup time the kernel configures the default RPDB consisting of three
++rules:
++
++.TP
++1.
++Priority: 0, Selector: match anything, Action: lookup routing
++table
++.B local
++(ID 255).
++The
++.B local
++table is a special routing table containing
++high priority control routes for local and broadcast addresses.
++.sp
++Rule 0 is special. It cannot be deleted or overridden.
++
++.TP
++2.
++Priority: 32766, Selector: match anything, Action: lookup routing
++table
++.B main
++(ID 254).
++The
++.B main
++table is the normal routing table containing all non-policy
++routes. This rule may be deleted and/or overridden with other
++ones by the administrator.
++
++.TP
++3.
++Priority: 32767, Selector: match anything, Action: lookup routing
++table
++.B default
++(ID 253).
++The
++.B default
++table is empty. It is reserved for some post-processing if no previous
++default rules selected the packet.
++This rule may also be deleted.
++
++.P
++Each RPDB entry has additional
++attributes. F.e. each rule has a pointer to some routing
++table. NAT and masquerading rules have an attribute to select new IP
++address to translate/masquerade. Besides that, rules have some
++optional attributes, which routes have, namely
++.BR "realms" .
++These values do not override those contained in the routing tables. They
++are only used if the route did not select any attributes.
++
++.sp
++The RPDB may contain rules of the following types:
++
++.in +8
++.B unicast
++- the rule prescribes to return the route found
++in the routing table referenced by the rule.
++
++.B blackhole
++- the rule prescribes to silently drop the packet.
++
++.B unreachable
++- the rule prescribes to generate a 'Network is unreachable' error.
++
++.B prohibit
++- the rule prescribes to generate 'Communication is administratively
++prohibited' error.
++
++.B nat
++- the rule prescribes to translate the source address
++of the IP packet into some other value.
++.in -8
++
++.SS ip rule add - insert a new rule
++.SS ip rule delete - delete a rule
++
++.TP
++.BI type " TYPE " (default)
++the type of this rule. The list of valid types was given in the previous
++subsection.
++
++.TP
++.BI from " PREFIX"
++select the source prefix to match.
++
++.TP
++.BI to " PREFIX"
++select the destination prefix to match.
++
++.TP
++.BI iif " NAME"
++select the incoming device to match. If the interface is loopback,
++the rule only matches packets originating from this host. This means
++that you may create separate routing tables for forwarded and local
++packets and, hence, completely segregate them.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++select the TOS value to match.
++
++.TP
++.BI fwmark " MARK"
++select the
++.B fwmark
++value to match.
++
++.TP
++.BI priority " PREFERENCE"
++the priority of this rule. Each rule should have an explicitly
++set
++.I unique
++priority value.
++
++.TP
++.BI table " TABLEID"
++the routing table identifier to lookup if the rule selector matches.
++
++.TP
++.BI realms " FROM/TO"
++Realms to select if the rule matched and the routing table lookup
++succeeded. Realm
++.I TO
++is only used if the route did not select any realm.
++
++.TP
++.BI nat " ADDRESS"
++The base of the IP address block to translate (for source addresses).
++The
++.I ADDRESS
++may be either the start of the block of NAT addresses (selected by NAT
++routes) or a local host address (or even zero).
++In the last case the router does not translate the packets, but
++masquerades them to this address.
++
++.B Warning:
++Changes to the RPDB made with these commands do not become active
++immediately. It is assumed that after a script finishes a batch of
++updates, it flushes the routing cache with
++.BR "ip route flush cache" .
++
++.SS ip rule show - list rules
++This command has no arguments.
++
++.SH ip maddress - multicast addresses management
++
++.B maddress
++objects are multicast addresses.
++
++.SS ip maddress show - list multicast addresses
++
++.TP
++.BI dev " NAME " (default)
++the device name.
++
++.SS ip maddress add - add a multicast address
++.SS ip maddress delete - delete a multicast address
++these commands attach/detach a static link layer multicast address
++to listen on the interface.
++Note that it is impossible to join protocol multicast groups
++statically. This command only manages link layer addresses.
++
++.TP
++.BI address " LLADDRESS " (default)
++the link layer multicast address.
++
++.TP
++.BI dev " NAME"
++the device to join/leave this multicast address.
++
++.SH ip mroute - multicast routing cache management
++.B mroute
++objects are multicast routing cache entries created by a user level
++mrouting daemon (f.e.
++.B pimd
++or
++.B mrouted
++).
++
++Due to the limitations of the current interface to the multicast routing
++engine, it is impossible to change
++.B mroute
++objects administratively, so we may only display them. This limitation
++will be removed in the future.
++
++.SS ip mroute show - list mroute cache entries
++
++.TP
++.BI to " PREFIX " (default)
++the prefix selecting the destination multicast addresses to list.
++
++.TP
++.BI iif " NAME"
++the interface on which multicast packets are received.
++
++.TP
++.BI from " PREFIX"
++the prefix selecting the IP source addresses of the multicast route.
++
++.SH ip tunnel - tunnel configuration
++.B tunnel
++objects are tunnels, encapsulating packets in IPv4 packets and then
++sending them over the IP infrastructure.
++
++.SS ip tunnel add - add a new tunnel
++.SS ip tunnel change - change an existing tunnel
++.SS ip tunnel delete - destroy a tunnel
++
++.TP
++.BI name " NAME " (default)
++select the tunnel device name.
++
++.TP
++.BI mode " MODE"
++set the tunnel mode. Three modes are currently available:
++.BR ipip ", " sit " and " gre "."
++
++.TP
++.BI remote " ADDRESS"
++set the remote endpoint of the tunnel.
++
++.TP
++.BI local " ADDRESS"
++set the fixed local address for tunneled packets.
++It must be an address on another interface of this host.
++
++.TP
++.BI ttl " N"
++set a fixed TTL
++.I N
++on tunneled packets.
++.I N
++is a number in the range 1--255. 0 is a special value
++meaning that packets inherit the TTL value.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI tos " T"
++.TP
++.BI dsfield " T"
++set a fixed TOS
++.I T
++on tunneled packets.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI dev " NAME"
++bind the tunnel to the device
++.I NAME
++so that tunneled packets will only be routed via this device and will
++not be able to escape to another device when the route to endpoint
++changes.
++
++.TP
++.B nopmtudisc
++disable Path MTU Discovery on this tunnel.
++It is enabled by default. Note that a fixed ttl is incompatible
++with this option: tunnelling with a fixed ttl always makes pmtu
++discovery.
++
++.TP
++.BI key " K"
++.TP
++.BI ikey " K"
++.TP
++.BI okey " K"
++.RB ( " only GRE tunnels " )
++use keyed GRE with key
++.IR K ". " K
++is either a number or an IP address-like dotted quad.
++The
++.B key
++parameter sets the key to use in both directions.
++The
++.BR ikey " and " okey
++parameters set different keys for input and output.
++
++.TP
++.BR csum ", " icsum ", " ocsum
++.RB ( " only GRE tunnels " )
++generate/require checksums for tunneled packets.
++The
++.B ocsum
++flag calculates checksums for outgoing packets.
++The
++.B icsum
++flag requires that all input packets have the correct
++checksum. The
++.B csum
++flag is equivalent to the combination
++.BR "icsum ocsum" .
++
++.TP
++.BR seq ", " iseq ", " oseq
++.RB ( " only GRE tunnels " )
++serialize packets.
++The
++.B oseq
++flag enables sequencing of outgoing packets.
++The
++.B iseq
++flag requires that all input packets are serialized.
++The
++.B seq
++flag is equivalent to the combination
++.BR "iseq oseq" .
++.B It isn't work. Don't use it.
++
++.SS ip tunnel show - list tunnels
++This command has no arguments.
++
++.SH ip monitor and rtmon - state monitoring
++
++The
++.B ip
++utility can monitor the state of devices, addresses
++and routes continuously. This option has a slightly different format.
++Namely, the
++.B monitor
++command is the first in the command line and then the object list follows:
++
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++
++.I OBJECT-LIST
++is the list of object types that we want to monitor.
++It may contain
++.BR link ", " address " and " route "."
++If no
++.B file
++argument is given,
++.B ip
++opens RTNETLINK, listens on it and dumps state changes in the format
++described in previous sections.
++
++.P
++If a file name is given, it does not listen on RTNETLINK,
++but opens the file containing RTNETLINK messages saved in binary format
++and dumps them. Such a history file can be generated with the
++.B rtmon
++utility. This utility has a command line syntax similar to
++.BR "ip monitor" .
++Ideally,
++.B rtmon
++should be started before the first network configuration command
++is issued. F.e. if you insert:
++.sp
++.in +8
++rtmon file /var/log/rtmon.log
++.in -8
++.sp
++in a startup script, you will be able to view the full history
++later.
++
++.P
++Certainly, it is possible to start
++.B rtmon
++at any time.
++It prepends the history with the state snapshot dumped at the moment
++of starting.
++
++.SH HISTORY
++
++.B ip
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc (8)
++.br
++.RB "IP Command reference " ip-cref.ps
++.br
++.RB "IP tunnels " ip-cref.ps
++
++.SH AUTHOR
++
++Manpage maintained by Michail Litvak <mci@owl.openwall.com>
+diff -Naur iproute2-orig/debian/manpages/old/ip.8 iproute2/debian/manpages/old/ip.8
+--- iproute2-orig/debian/manpages/old/ip.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/ip.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,1809 @@
++.TH IP 8 "17 January 2002" "iproute2" "Linux"
++.SH NAME
++ip \- show / manipulate routing, devices, policy routing and tunnels
++.SH SYNOPSIS
++
++.ad l
++.in +8
++.ti -8
++.B ip
++.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
++.BR help " }"
++.sp
++
++.ti -8
++.IR OBJECT " := { "
++.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
++maddr " | " mroute " | " monitor " }"
++.sp
++
++.ti -8
++.IR OPTIONS " := { "
++\fB\-V\fR[\fIersion\fR] |
++\fB\-s\fR[\fItatistics\fR] |
++\fB\-r\fR[\fIesolve\fR] |
++\fB\-f\fR[\fIamily\fR] {
++.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
++\fB\-o\fR[\fIneline\fR] }
++
++.ti -8
++.BI "ip link set " DEVICE
++.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
++.br
++.BR promisc " { " on " | " off " } |"
++.br
++.BR allmulti " { " on " | " off " } |"
++.br
++.BR dynamic " { " on " | " off " } |"
++.br
++.BR multicast " { " on " | " off " } |"
++.br
++.B txqueuelen
++.IR PACKETS " |"
++.br
++.B name
++.IR NEWNAME " |"
++.br
++.B address
++.IR LLADDR " |"
++.B broadcast
++.IR LLADDR " |"
++.br
++.B mtu
++.IR MTU " }"
++
++.ti -8
++.B ip link show
++.RI "[ " DEVICE " ]"
++
++.ti -8
++.BR "ip addr" " { " add " | " del " } "
++.IB IFADDR " dev " STRING
++
++.ti -8
++.BR "ip addr" " { " show " | " flush " } [ " dev
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ] [ "
++.B to
++.IR PREFIX " ] [ " FLAG-LIST " ] [ "
++.B label
++.IR PATTERN " ]"
++
++.ti -8
++.IR IFADDR " := " PREFIX " | " ADDR
++.B peer
++.IR PREFIX " [ "
++.B broadcast
++.IR ADDR " ] [ "
++.B anycast
++.IR ADDR " ] [ "
++.B label
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ]"
++
++.ti -8
++.IR SCOPE-ID " := "
++.RB "[ " host " | " link " | " global " | "
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
++
++.ti -8
++.IR FLAG " := "
++.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
++tentative " | " deprecated " ]"
++
++.ti -8
++.BR "ip route" " { "
++.BR list " | " flush " } "
++.I SELECTOR
++
++.ti -8
++.B ip route get
++.IR ADDRESS " [ "
++.BI from " ADDRESS " iif " STRING"
++.RB " ] [ " oif
++.IR STRING " ] [ "
++.B tos
++.IR TOS " ]"
++
++.ti -8
++.BR "ip route" " { " add " | " del " | " change " | " append " | "\
++replace " | " monitor " } "
++.I ROUTE
++
++.ti -8
++.IR SELECTOR " := "
++.RB "[ " root
++.IR PREFIX " ] [ "
++.B match
++.IR PREFIX " ] [ "
++.B exact
++.IR PREFIX " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B type
++.IR TYPE " ] [ "
++.B scope
++.IR SCOPE " ]"
++
++.ti -8
++.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
++
++.ti -8
++.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
++.B tos
++.IR TOS " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B scope
++.IR SCOPE " ] [ "
++.B metric
++.IR METRIC " ]"
++
++.ti -8
++.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
++.B nexthop
++.IR NH " ] ..."
++
++.ti -8
++.IR NH " := [ "
++.B via
++.IR ADDRESS " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B weight
++.IR NUMBER " ] " NHFLAGS
++
++.ti -8
++.IR OPTIONS " := " FLAGS " [ "
++.B mtu
++.IR NUMBER " ] [ "
++.B advmss
++.IR NUMBER " ] [ "
++.B rtt
++.IR NUMBER " ] [ "
++.B rttvar
++.IR NUMBER " ] [ "
++.B window
++.IR NUMBER " ] [ "
++.B cwnd
++.IR NUMBER " ] [ "
++.B ssthresh
++.IR REALM " ] [ "
++.B realms
++.IR REALM " ]"
++
++.ti -8
++.IR TYPE " := [ "
++.BR unicast " | " local " | " broadcast " | " multicast " | "\
++throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local "| " main " | " default " | " all " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR SCOPE " := [ "
++.BR host " | " link " | " global " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAGS " := [ "
++.BR equalize " ]"
++
++.ti -8
++.IR NHFLAGS " := [ "
++.BR onlink " | " pervasive " ]"
++
++.ti -8
++.IR RTPROTO " := [ "
++.BR kernel " | " boot " | " static " |"
++.IR NUMBER " ]"
++
++.ti -8
++.B ip rule
++.RB " [ " list " | " add " | " del " ]"
++.I SELECTOR ACTION
++
++.ti -8
++.IR SELECTOR " := [ "
++.B from
++.IR PREFIX " ] [ "
++.B to
++.IR PREFIX " ] [ "
++.B tos
++.IR TOS " ] [ "
++.B fwmark
++.IR FWMARK " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B pref
++.IR NUMBER " ]"
++
++.ti -8
++.IR ACTION " := [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B nat
++.IR ADDRESS " ] [ "
++.BR prohibit " | " reject " | " unreachable " ] [ " realms
++.RI "[" SRCREALM "/]" DSTREALM " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local " | " main " | " default " |"
++.IR NUMBER " ]"
++
++.ti -8
++.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
++.IR ADDR " [ "
++.B lladdr
++.IR LLADDR " ] [ "
++.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
++.IR ADDR " } [ "
++.B dev
++.IR DEV " ]"
++
++.ti -8
++.BR "ip neigh" " { " show " | " flush " } [ " to
++.IR PREFIX " ] [ "
++.B dev
++.IR DEV " ] [ "
++.B nud
++.IR STATE " ]"
++
++.ti -8
++.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
++.RI "[ " NAME " ]"
++.br
++.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
++.br
++.RB "[ " remote
++.IR ADDR " ] [ "
++.B local
++.IR ADDR " ]"
++.br
++.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
++.IR KEY " ] [ "
++.RB "[" i "|" o "]" csum " ] ]"
++.br
++.RB "[ " ttl
++.IR TTL " ] [ "
++.B tos
++.IR TOS " ] [ "
++.RB "[" no "]" pmtudisc " ]"
++.br
++.RB "[ " dev
++.IR PHYS_DEV " ]"
++
++.ti -8
++.IR ADDR " := { " IP_ADDRESS " |"
++.BR any " }"
++
++.ti -8
++.IR TOS " := { " NUMBER " |"
++.BR inherit " }"
++
++.ti -8
++.IR TTL " := { " 1 ".." 255 " | "
++.BR inherit " }"
++
++.ti -8
++.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
++
++.ti -8
++.BR "ip maddr" " [ " add " | " del " ]"
++.IB MULTIADDR " dev " STRING
++
++.ti -8
++.BR "ip maddr show" " [ " dev
++.IR STRING " ]"
++
++.ti -8
++.BR "ip mroute show" " ["
++.IR PREFIX " ] [ "
++.B from
++.IR PREFIX " ] [ "
++.B iif
++.IR DEVICE " ]"
++
++.ti -8
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++.in -8
++.ad b
++
++.SH OPTIONS
++
++.TP
++.BR "\-V" , " -Version"
++print the version of the
++.B ip
++utility and exit.
++
++.TP
++.BR "\-s" , " \-stats", " \-statistics"
++output more information. If the option
++appears twice or more, the amount of information increases.
++As a rule, the information is statistics or some time values.
++
++.TP
++.BR "\-f" , " \-family"
++followed by protocol family identifier:
++.BR "inet" , " inet6"
++or
++.B link
++,enforce the protocol family to use. If the option is not present,
++the protocol family is guessed from other arguments. If the rest
++of the command line does not give enough information to guess the
++family,
++.B ip
++falls back to the default one, usually
++.B inet
++or
++.BR "any" .
++.B link
++is a special family identifier meaning that no networking protocol
++is involved.
++
++.TP
++.B \-4
++shortcut for
++.BR "-family inet" .
++
++.TP
++.B \-6
++shortcut for
++.BR "\-family inet6" .
++
++.TP
++.B \-0
++shortcut for
++.BR "\-family link" .
++
++.TP
++.BR "\-o" , " \-oneline"
++output each record on a single line, replacing line feeds
++with the
++.B '\'
++character. This is convenient when you want to count records
++with
++.BR wc (1)
++ or to
++.BR grep (1)
++the output.
++
++.TP
++.BR "\-r" , " \-resolve"
++use the system's name resolver to print DNS names instead of
++host addresses.
++
++.SH IP - COMMAND SYNTAX
++
++.SS
++.I OBJECT
++
++.TP
++.B link
++- network device.
++
++.TP
++.B address
++- protocol (IP or IPv6) address on a device.
++.TP
++.B neighbour
++- ARP or NDISC cache entry.
++
++.TP
++.B route
++- routing table entry.
++
++.TP
++.B rule
++- rule in routing policy database.
++
++.TP
++.B maddress
++- multicast address.
++
++.TP
++.B mroute
++- multicast routing cache entry.
++
++.TP
++.B tunnel
++- tunnel over IP.
++
++.PP
++The names of all objects may be written in full or
++abbreviated form, f.e.
++.B address
++is abbreviated as
++.B addr
++or just
++.B a.
++
++.SS
++.I COMMAND
++
++Specifies the action to perform on the object.
++The set of possible actions depends on the object type.
++As a rule, it is possible to
++.BR "add" , " delete"
++and
++.B show
++(or
++.B list
++) objects, but some objects do not allow all of these operations
++or have some additional commands. The
++.B help
++command is available for all objects. It prints
++out a list of available commands and argument syntax conventions.
++.sp
++If no command is given, some default command is assumed.
++Usually it is
++.B list
++or, if the objects of this class cannot be listed,
++.BR "help" .
++
++.SH ip link - network device configuration
++
++.B link
++is a network device and the corresponding commands
++display and change the state of devices.
++
++.SS ip link set - change device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies network device to operate on.
++
++.TP
++.BR up " and " down
++change the state of the device to
++.B UP
++or
++.BR "DOWN" .
++
++.TP
++.BR "arp on " or " arp off"
++change the
++.B NOARP
++flag on the device.
++
++.TP
++.BR "multicast on " or " multicast off"
++change the
++.B MULTICAST
++flag on the device.
++
++.TP
++.BR "dynamic on " or " dynamic off"
++change the
++.B DYNAMIC
++flag on the device.
++
++.TP
++.BI name " NAME"
++change the name of the device. This operation is not
++recommended if the device is running or has some addresses
++already configured.
++
++.TP
++.BI txqueuelen " NUMBER"
++.TP
++.BI txqlen " NUMBER"
++change the transmit queue length of the device.
++
++.TP
++.BI mtu " NUMBER"
++change the
++.I MTU
++of the device.
++
++.TP
++.BI address " LLADDRESS"
++change the station address of the interface.
++
++.TP
++.BI broadcast " LLADDRESS"
++.TP
++.BI brd " LLADDRESS"
++.TP
++.BI peer " LLADDRESS"
++change the link layer broadcast address or the peer address when
++the interface is
++.IR "POINTOPOINT" .
++
++.PP
++.B Warning:
++If multiple parameter changes are requested,
++.B ip
++aborts immediately after any of the changes have failed.
++This is the only case when
++.B ip
++can move the system to an unpredictable state. The solution
++is to avoid changing several parameters with one
++.B ip link set
++call.
++
++.SS ip link show - display device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies the network device to show.
++If this argument is omitted all devices are listed.
++
++.TP
++.B up
++only display running interfaces.
++
++.SH ip address - protocol address management.
++
++The
++.B address
++is a protocol (IP or IPv6) address attached
++to a network device. Each device must have at least one address
++to use the corresponding protocol. It is possible to have several
++different addresses attached to one device. These addresses are not
++discriminated, so that the term
++.B alias
++is not quite appropriate for them and we do not use it in this document.
++.sp
++The
++.B ip addr
++command displays addresses and their properties, adds new addresses
++and deletes old ones.
++
++.SS ip address add - add new protocol address.
++
++.TP
++.BI dev " NAME"
++the name of the device to add the address to.
++
++.TP
++.BI local " ADDRESS " (default)
++the address of the interface. The format of the address depends
++on the protocol. It is a dotted quad for IP and a sequence of
++hexadecimal halfwords separated by colons for IPv6. The
++.I ADDRESS
++may be followed by a slash and a decimal number which encodes
++the network prefix length.
++
++.TP
++.BI peer " ADDRESS"
++the address of the remote endpoint for pointopoint interfaces.
++Again, the
++.I ADDRESS
++may be followed by a slash and a decimal number, encoding the network
++prefix length. If a peer address is specified, the local address
++cannot have a prefix length. The network prefix is associated
++with the peer rather than with the local address.
++
++.TP
++.BI broadcast " ADDRESS"
++the broadcast address on the interface.
++.sp
++It is possible to use the special symbols
++.B '+'
++and
++.B '-'
++instead of the broadcast address. In this case, the broadcast address
++is derived by setting/resetting the host bits of the interface prefix.
++
++.TP
++.BI label " NAME"
++Each address may be tagged with a label string.
++In order to preserve compatibility with Linux-2.0 net aliases,
++this string must coincide with the name of the device or must be prefixed
++with the device name followed by colon.
++
++.TP
++.BI scope " SCOPE_VALUE"
++the scope of the area where this address is valid.
++The available scopes are listed in file
++.BR "/etc/iproute2/rt_scopes" .
++Predefined scope values are:
++
++.in +8
++.B global
++- the address is globally valid.
++.sp
++.B site
++- (IPv6 only) the address is site local, i.e. it is
++valid inside this site.
++.sp
++.B link
++- the address is link local, i.e. it is valid only on this device.
++.sp
++.B host
++- the address is valid only inside this host.
++.in -8
++
++.SS ip address delete - delete protocol address
++.B Arguments:
++coincide with the arguments of
++.B ip addr add.
++The device name is a required argument. The rest are optional.
++If no arguments are given, the first address is deleted.
++
++.SS ip address show - look at protocol addresses
++
++.TP
++.BI dev " NAME " (default)
++name of device.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list addresses with this scope.
++
++.TP
++.BI to " PREFIX"
++only list addresses matching this prefix.
++
++.TP
++.BI label " PATTERN"
++only list addresses with labels matching the
++.IR "PATTERN" .
++.I PATTERN
++is a usual shell style pattern.
++
++.TP
++.BR dynamic " and " permanent
++(IPv6 only) only list addresses installed due to stateless
++address configuration or only list permanent (not dynamic)
++addresses.
++
++.TP
++.B tentative
++(IPv6 only) only list addresses which did not pass duplicate
++address detection.
++
++.TP
++.B deprecated
++(IPv6 only) only list deprecated addresses.
++
++.TP
++.BR primary " and " secondary
++only list primary (or secondary) addresses.
++
++.SS ip address flush - flush protocol addresses
++This command flushes the protocol addresses selected by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The difference is that it does not run when no arguments are given.
++
++.PP
++.B Warning:
++This command (and other
++.B flush
++commands described below) is pretty dangerous. If you make a mistake,
++it will not forgive it, but will cruelly purge all the addresses.
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of deleted
++addresses and the number of rounds made to flush the address list. If
++this option is given twice,
++.B ip addr flush
++also dumps all the deleted addresses in the format described in the
++previous subsection.
++
++.SH ip neighbour - neighbour/arp tables management.
++
++.B neighbour
++objects establish bindings between protocol addresses and
++link layer addresses for hosts sharing the same link.
++Neighbour entries are organized into tables. The IPv4 neighbour table
++is known by another name - the ARP table.
++
++.P
++The corresponding commands display neighbour bindings
++and their properties, add new neighbour entries and delete old ones.
++
++.SS ip neighbour add - add a new neighbour entry
++.SS ip neighbour change - change an existing entry
++.SS ip neighbour replace - add a new entry or change an existing one
++
++These commands create new neighbour records or update existing ones.
++
++.TP
++.BI to " ADDRESS " (default)
++the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
++
++.TP
++.BI dev " NAME"
++the interface to which this neighbour is attached.
++
++.TP
++.BI lladdr " LLADDRESS"
++the link layer address of the neighbour.
++.I LLADDRESS
++can also be
++.BR "null" .
++
++.TP
++.BI nud " NUD_STATE"
++the state of the neighbour entry.
++.B nud
++is an abbreviation for 'Neigh bour Unreachability Detection'.
++The state can take one of the following values:
++
++.in +8
++.B permanent
++- the neighbour entry is valid forever and can be only
++be removed administratively.
++.sp
++
++.B noarp
++- the neighbour entry is valid. No attempts to validate
++this entry will be made but it can be removed when its lifetime expires.
++.sp
++
++.B reachable
++- the neighbour entry is valid until the reachability
++timeout expires.
++.sp
++
++.B stale
++- the neighbour entry is valid but suspicious.
++This option to
++.B ip neigh
++does not change the neighbour state if it was valid and the address
++is not changed by this command.
++.in -8
++
++.SS ip neighbour delete - delete a neighbour entry
++This command invalidates a neighbour entry.
++
++.PP
++The arguments are the same as with
++.BR "ip neigh add" ,
++except that
++.B lladdr
++and
++.B nud
++are ignored.
++
++.PP
++.B Warning:
++Attempts to delete or manually change a
++.B noarp
++entry created by the kernel may result in unpredictable behaviour.
++Particularly, the kernel may try to resolve this address even
++on a
++.B NOARP
++interface or if the address is multicast or broadcast.
++
++.SS ip neighbour show - list neighbour entries
++
++This commands displays neighbour tables.
++
++.TP
++.BI to " ADDRESS " (default)
++the prefix selecting the neighbours to list.
++
++.TP
++.BI dev " NAME"
++only list the neighbours attached to this device.
++
++.TP
++.B unused
++only list neighbours which are not currently in use.
++
++.TP
++.BI nud " NUD_STATE"
++only list neighbour entries in this state.
++.I NUD_STATE
++takes values listed below or the special value
++.B all
++which means all states. This option may occur more than once.
++If this option is absent,
++.B ip
++lists all entries except for
++.B none
++and
++.BR "noarp" .
++
++.SS ip neighbour flush - flush neighbour entries
++This command flushes neighbour tables, selecting
++entries to flush by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The differences are that it does not run when no arguments are given,
++and that the default neighbour states to be flushed do not include
++.B permanent
++and
++.BR "noarp" .
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted neighbours and the number of rounds made to flush the
++neighbour table. If the option is given
++twice,
++.B ip neigh flush
++also dumps all the deleted neighbours.
++
++.SH ip route - routing table management
++Manipulate route entries in the kernel routing tables keep
++information about paths to other networked nodes.
++.sp
++.B Route types:
++
++.in +8
++.B unicast
++- the route entry describes real paths to the destinations covered
++by the route prefix.
++
++.sp
++.B unreachable
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I host unreachable
++is generated.
++The local senders get an
++.I EHOSTUNREACH
++error.
++
++.sp
++.B blackhole
++- these destinations are unreachable. Packets are discarded silently.
++The local senders get an
++.I EINVAL
++error.
++
++.sp
++.B prohibit
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I communication administratively prohibited
++is generated. The local senders get an
++.I EACCES
++error.
++
++.sp
++.B local
++- the destinations are assigned to this host. The packets are looped
++back and delivered locally.
++
++.sp
++.B broadcast
++- the destinations are broadcast addresses. The packets are sent as
++link broadcasts.
++
++.sp
++.B throw
++- a special control route used together with policy rules. If such a
++route is selected, lookup in this table is terminated pretending that
++no route was found. Without policy routing it is equivalent to the
++absence of the route in the routing table. The packets are dropped
++and the ICMP message
++.I net unreachable
++is generated. The local senders get an
++.I ENETUNREACH
++error.
++
++.sp
++.B nat
++- a special NAT route. Destinations covered by the prefix
++are considered to be dummy (or external) addresses which require translation
++to real (or internal) ones before forwarding. The addresses to translate to
++are selected with the attribute
++.BR "via" .
++
++.sp
++.B anycast
++.RI "- " "not implemented"
++the destinations are
++.I anycast
++addresses assigned to this host. They are mainly equivalent
++to
++.B local
++with one difference: such addresses are invalid when used
++as the source address of any packet.
++
++.sp
++.B multicast
++- a special type used for multicast routing. It is not present in
++normal routing tables.
++.in -8
++
++.P
++.B Route tables:
++Linux-2.x can pack routes into several routing
++tables identified by a number in the range from 1 to 255 or by
++name from the file
++.B /etc/iproute2/rt_tables
++. By default all normal routes are inserted into the
++.B main
++table (ID 254) and the kernel only uses this table when calculating routes.
++
++.sp
++Actually, one other table always exists, which is invisible but
++even more important. It is the
++.B local
++table (ID 255). This table
++consists of routes for local and broadcast addresses. The kernel maintains
++this table automatically and the administrator usually need not modify it
++or even look at it.
++
++The multiple routing tables enter the game when
++.I policy routing
++is used.
++
++.SS ip route add - add new route
++.SS ip route change - change route
++.SS ip route replace - change or add new one
++
++.TP
++.BI to " TYPE PREFIX " (default)
++the destination prefix of the route. If
++.I TYPE
++is omitted,
++.B ip
++assumes type
++.BR "unicast" .
++Other values of
++.I TYPE
++are listed above.
++.I PREFIX
++is an IP or IPv6 address optionally followed by a slash and the
++prefix length. If the length of the prefix is missing,
++.B ip
++assumes a full-length host route. There is also a special
++.I PREFIX
++.B default
++- which is equivalent to IP
++.B 0/0
++or to IPv6
++.BR "::/0" .
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service (TOS) key. This key has no associated mask and
++the longest match is understood as: First, compare the TOS
++of the route and of the packet. If they are not equal, then the packet
++may still match a route with a zero TOS.
++.I TOS
++is either an 8 bit hexadecimal number or an identifier
++from
++.BR "/etc/iproute2/rt_dsfield" .
++
++.TP
++.BI metric " NUMBER"
++.TP
++.BI preference " NUMBER"
++the preference value of the route.
++.I NUMBER
++is an arbitrary 32bit number.
++
++.TP
++.BI table " TABLEID"
++the table to add this route to.
++.I TABLEID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_tables" .
++If this parameter is omitted,
++.B ip
++assumes the
++.B main
++table, with the exception of
++.BR local " , " broadcast " and " nat
++routes, which are put into the
++.B local
++table by default.
++
++.TP
++.BI dev " NAME"
++the output device name.
++
++.TP
++.BI via " ADDRESS"
++the address of the nexthop router. Actually, the sense of this field
++depends on the route type. For normal
++.B unicast
++routes it is either the true next hop router or, if it is a direct
++route installed in BSD compatibility mode, it can be a local address
++of the interface. For NAT routes it is the first address of the block
++of translated IP destinations.
++
++.TP
++.BI src " ADDRESS"
++the source address to prefer when sending to the destinations
++covered by the route prefix.
++
++.TP
++.BI realm " REALMID"
++the realm to which this route is assigned.
++.I REALMID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_realms" .
++
++.TP
++.BI mtu " MTU"
++.TP
++.BI "mtu lock" " MTU"
++the MTU along the path to the destination. If the modifier
++.B lock
++is not used, the MTU may be updated by the kernel due to
++Path MTU Discovery. If the modifier
++.B lock
++is used, no path MTU discovery will be tried, all packets
++will be sent without the DF bit in IPv4 case or fragmented
++to MTU for IPv6.
++
++.TP
++.BI window " NUMBER"
++the maximal window for TCP to advertise to these destinations,
++measured in bytes. It limits maximal data bursts that our TCP
++peers are allowed to send to us.
++
++.TP
++.BI rtt " NUMBER"
++the initial RTT ('Round Trip Time') estimate.
++
++.TP
++.BI rttvar " NUMBER " "(2.3.15+ only)"
++the initial RTT variance estimate.
++
++.TP
++.BI ssthresh " NUMBER " "(2.3.15+ only)"
++an estimate for the initial slow start threshold.
++
++.TP
++.BI cwnd " NUMBER " "(2.3.15+ only)"
++the clamp for congestion window. It is ignored if the
++.B lock
++flag is not used.
++
++.TP
++.BI advmss " NUMBER " "(2.3.15+ only)"
++the MSS ('Maximal Segment Size') to advertise to these
++destinations when establishing TCP connections. If it is not given,
++Linux uses a default value calculated from the first hop device MTU.
++(If the path to these destination is asymmetric, this guess may be wrong.)
++
++.TP
++.BI reordering " NUMBER " "(2.3.15+ only)"
++Maximal reordering on the path to this destination.
++If it is not given, Linux uses the value selected with
++.B sysctl
++variable
++.BR "net/ipv4/tcp_reordering" .
++
++.TP
++.BI nexthop " NEXTHOP"
++the nexthop of a multipath route.
++.I NEXTHOP
++is a complex value with its own syntax similar to the top level
++argument lists:
++
++.in +8
++.BI via " ADDRESS"
++- is the nexthop router.
++.sp
++
++.BI dev " NAME"
++- is the output device.
++.sp
++
++.BI weight " NUMBER"
++- is a weight for this element of a multipath
++route reflecting its relative bandwidth or quality.
++.in -8
++
++.TP
++.BI scope " SCOPE_VAL"
++the scope of the destinations covered by the route prefix.
++.I SCOPE_VAL
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_scopes" .
++If this parameter is omitted,
++.B ip
++assumes scope
++.B global
++for all gatewayed
++.B unicast
++routes, scope
++.B link
++for direct
++.BR unicast " and " broadcast
++routes and scope
++.BR host " for " local
++routes.
++
++.TP
++.BI protocol " RTPROTO"
++the routing protocol identifier of this route.
++.I RTPROTO
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_protos" .
++If the routing protocol ID is not given,
++.B ip assumes protocol
++.B boot
++(i.e. it assumes the route was added by someone who doesn't
++understand what they are doing). Several protocol values have
++a fixed interpretation.
++Namely:
++
++.in +8
++.B redirect
++- the route was installed due to an ICMP redirect.
++.sp
++
++.B kernel
++- the route was installed by the kernel during autoconfiguration.
++.sp
++
++.B boot
++- the route was installed during the bootup sequence.
++If a routing daemon starts, it will purge all of them.
++.sp
++
++.B static
++- the route was installed by the administrator
++to override dynamic routing. Routing daemon will respect them
++and, probably, even advertise them to its peers.
++.sp
++
++.B ra
++- the route was installed by Router Discovery protocol.
++.in -8
++
++.sp
++The rest of the values are not reserved and the administrator is free
++to assign (or not to assign) protocol tags.
++
++.TP
++.B onlink
++pretend that the nexthop is directly attached to this link,
++even if it does not match any interface prefix.
++
++.TP
++.B equalize
++allow packet by packet randomization on multipath routes.
++Without this modifier, the route will be frozen to one selected
++nexthop, so that load splitting will only occur on per-flow base.
++.B equalize
++only works if the kernel is patched.
++
++.SS ip route delete - delete route
++
++.B ip route del
++has the same arguments as
++.BR "ip route add" ,
++but their semantics are a bit different.
++
++Key values
++.RB "(" to ", " tos ", " preference " and " table ")"
++select the route to delete. If optional attributes are present,
++.B ip
++verifies that they coincide with the attributes of the route to delete.
++If no route with the given key and attributes was found,
++.B ip route del
++fails.
++
++.SS ip route show - list routes
++the command displays the contents of the routing tables or the route(s)
++selected by some criteria.
++
++.TP
++.BI to " SELECTOR " (default)
++only select routes from the given range of destinations.
++.I SELECTOR
++consists of an optional modifier
++.RB "(" root ", " match " or " exact ")"
++and a prefix.
++.BI root " PREFIX"
++selects routes with prefixes not shorter than
++.IR PREFIX "."
++F.e.
++.BI root " 0/0"
++selects the entire routing table.
++.BI match " PREFIX"
++selects routes with prefixes not longer than
++.IR PREFIX "."
++F.e.
++.BI match " 10.0/16"
++selects
++.IR 10.0/16 ","
++.IR 10/8 " and " 0/0 ,
++but it does not select
++.IR 10.1/16 " and " 10.0.0/24 .
++And
++.BI exact " PREFIX"
++(or just
++.IR PREFIX ")"
++selects routes with this exact prefix. If neither of these options
++are present,
++.B ip
++assumes
++.BI root " 0/0"
++i.e. it lists the entire table.
++
++.TP
++.BI tos " TOS"
++.BI dsfield " TOS"
++only select routes with the given TOS.
++
++.TP
++.BI table " TABLEID"
++show the routes from this table(s). The default setting is to show
++.BR table main "."
++.I TABLEID
++may either be the ID of a real table or one of the special values:
++.sp
++.in +8
++.B all
++- list all of the tables.
++.sp
++.B cache
++- dump the routing cache.
++.in -8
++
++.TP
++.B cloned
++.TP
++.B cached
++list cloned routes i.e. routes which were dynamically forked from
++other routes because some route attribute (f.e. MTU) was updated.
++Actually, it is equivalent to
++.BR "table cache" "."
++
++.TP
++.BI from " SELECTOR"
++the same syntax as for
++.BR to ","
++but it binds the source address range rather than destinations.
++Note that the
++.B from
++option only works with cloned routes.
++
++.TP
++.BI protocol " RTPROTO"
++only list routes of this protocol.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list routes with this scope.
++
++.TP
++.BI type " TYPE"
++only list routes of this type.
++
++.TP
++.BI dev " NAME"
++only list routes going via this device.
++
++.TP
++.BI via " PREFIX"
++only list routes going via the nexthop routers selected by
++.IR PREFIX "."
++
++.TP
++.BI src " PREFIX"
++only list routes with preferred source addresses selected
++by
++.IR PREFIX "."
++
++.TP
++.BI realm " REALMID"
++.TP
++.BI realms " FROMREALM/TOREALM"
++only list routes with these realms.
++
++.SS ip route flush - flush routing tables
++this command flushes routes selected by some criteria.
++
++.sp
++The arguments have the same syntax and semantics as the arguments of
++.BR "ip route show" ,
++but routing tables are not listed but purged. The only difference is
++the default action:
++.B show
++dumps all the IP main routing table but
++.B flush
++prints the helper page.
++
++.sp
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted routes and the number of rounds made to flush the routing
++table. If the option is given
++twice,
++.B ip route flush
++also dumps all the deleted routes in the format described in the
++previous subsection.
++
++.SS ip route get - get a single route
++this command gets a single route to a destination and prints its
++contents exactly as the kernel sees it.
++
++.TP
++.BI to " ADDRESS " (default)
++the destination address.
++
++.TP
++.BI from " ADDRESS"
++the source address.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service.
++
++.TP
++.BI iif " NAME"
++the device from which this packet is expected to arrive.
++
++.TP
++.BI oif " NAME"
++force the output device on which this packet will be routed.
++
++.TP
++.B connected
++if no source address
++.RB "(option " from ")"
++was given, relookup the route with the source set to the preferred
++address received from the first lookup.
++If policy routing is used, it may be a different route.
++
++.P
++Note that this operation is not equivalent to
++.BR "ip route show" .
++.B show
++shows existing routes.
++.B get
++resolves them and creates new clones if necessary. Essentially,
++.B get
++is equivalent to sending a packet along this path.
++If the
++.B iif
++argument is not given, the kernel creates a route
++to output packets towards the requested destination.
++This is equivalent to pinging the destination
++with a subsequent
++.BR "ip route ls cache" ,
++however, no packets are actually sent. With the
++.B iif
++argument, the kernel pretends that a packet arrived from this interface
++and searches for a path to forward the packet.
++
++.SH ip rule - routing policy database management
++
++.BR "Rule" s
++in the routing policy database control the route selection algorithm.
++
++.P
++Classic routing algorithms used in the Internet make routing decisions
++based only on the destination address of packets (and in theory,
++but not in practice, on the TOS field).
++
++.P
++In some circumstances we want to route packets differently depending not only
++on destination addresses, but also on other packet fields: source address,
++IP protocol, transport protocol ports or even packet payload.
++This task is called 'policy routing'.
++
++.P
++To solve this task, the conventional destination based routing table, ordered
++according to the longest match rule, is replaced with a 'routing policy
++database' (or RPDB), which selects routes by executing some set of rules.
++
++.P
++Each policy routing rule consists of a
++.B selector
++and an
++.B action predicate.
++The RPDB is scanned in the order of increasing priority. The selector
++of each rule is applied to {source address, destination address, incoming
++interface, tos, fwmark} and, if the selector matches the packet,
++the action is performed. The action predicate may return with success.
++In this case, it will either give a route or failure indication
++and the RPDB lookup is terminated. Otherwise, the RPDB program
++continues on the next rule.
++
++.P
++Semantically, natural action is to select the nexthop and the output device.
++
++.P
++At startup time the kernel configures the default RPDB consisting of three
++rules:
++
++.TP
++1.
++Priority: 0, Selector: match anything, Action: lookup routing
++table
++.B local
++(ID 255).
++The
++.B local
++table is a special routing table containing
++high priority control routes for local and broadcast addresses.
++.sp
++Rule 0 is special. It cannot be deleted or overridden.
++
++.TP
++2.
++Priority: 32766, Selector: match anything, Action: lookup routing
++table
++.B main
++(ID 254).
++The
++.B main
++table is the normal routing table containing all non-policy
++routes. This rule may be deleted and/or overridden with other
++ones by the administrator.
++
++.TP
++3.
++Priority: 32767, Selector: match anything, Action: lookup routing
++table
++.B default
++(ID 253).
++The
++.B default
++table is empty. It is reserved for some post-processing if no previous
++default rules selected the packet.
++This rule may also be deleted.
++
++.P
++Each RPDB entry has additional
++attributes. F.e. each rule has a pointer to some routing
++table. NAT and masquerading rules have an attribute to select new IP
++address to translate/masquerade. Besides that, rules have some
++optional attributes, which routes have, namely
++.BR "realms" .
++These values do not override those contained in the routing tables. They
++are only used if the route did not select any attributes.
++
++.sp
++The RPDB may contain rules of the following types:
++
++.in +8
++.B unicast
++- the rule prescribes to return the route found
++in the routing table referenced by the rule.
++
++.B blackhole
++- the rule prescribes to silently drop the packet.
++
++.B unreachable
++- the rule prescribes to generate a 'Network is unreachable' error.
++
++.B prohibit
++- the rule prescribes to generate 'Communication is administratively
++prohibited' error.
++
++.B nat
++- the rule prescribes to translate the source address
++of the IP packet into some other value.
++.in -8
++
++.SS ip rule add - insert a new rule
++.SS ip rule delete - delete a rule
++
++.TP
++.BI type " TYPE " (default)
++the type of this rule. The list of valid types was given in the previous
++subsection.
++
++.TP
++.BI from " PREFIX"
++select the source prefix to match.
++
++.TP
++.BI to " PREFIX"
++select the destination prefix to match.
++
++.TP
++.BI iif " NAME"
++select the incoming device to match. If the interface is loopback,
++the rule only matches packets originating from this host. This means
++that you may create separate routing tables for forwarded and local
++packets and, hence, completely segregate them.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++select the TOS value to match.
++
++.TP
++.BI fwmark " MARK"
++select the
++.B fwmark
++value to match.
++
++.TP
++.BI priority " PREFERENCE"
++the priority of this rule. Each rule should have an explicitly
++set
++.I unique
++priority value.
++
++.TP
++.BI table " TABLEID"
++the routing table identifier to lookup if the rule selector matches.
++
++.TP
++.BI realms " FROM/TO"
++Realms to select if the rule matched and the routing table lookup
++succeeded. Realm
++.I TO
++is only used if the route did not select any realm.
++
++.TP
++.BI nat " ADDRESS"
++The base of the IP address block to translate (for source addresses).
++The
++.I ADDRESS
++may be either the start of the block of NAT addresses (selected by NAT
++routes) or a local host address (or even zero).
++In the last case the router does not translate the packets, but
++masquerades them to this address.
++
++.B Warning:
++Changes to the RPDB made with these commands do not become active
++immediately. It is assumed that after a script finishes a batch of
++updates, it flushes the routing cache with
++.BR "ip route flush cache" .
++
++.SS ip rule show - list rules
++This command has no arguments.
++
++.SH ip maddress - multicast addresses management
++
++.B maddress
++objects are multicast addresses.
++
++.SS ip maddress show - list multicast addresses
++
++.TP
++.BI dev " NAME " (default)
++the device name.
++
++.SS ip maddress add - add a multicast address
++.SS ip maddress delete - delete a multicast address
++these commands attach/detach a static link layer multicast address
++to listen on the interface.
++Note that it is impossible to join protocol multicast groups
++statically. This command only manages link layer addresses.
++
++.TP
++.BI address " LLADDRESS " (default)
++the link layer multicast address.
++
++.TP
++.BI dev " NAME"
++the device to join/leave this multicast address.
++
++.SH ip mroute - multicast routing cache management
++.B mroute
++objects are multicast routing cache entries created by a user level
++mrouting daemon (f.e.
++.B pimd
++or
++.B mrouted
++).
++
++Due to the limitations of the current interface to the multicast routing
++engine, it is impossible to change
++.B mroute
++objects administratively, so we may only display them. This limitation
++will be removed in the future.
++
++.SS ip mroute show - list mroute cache entries
++
++.TP
++.BI to " PREFIX " (default)
++the prefix selecting the destination multicast addresses to list.
++
++.TP
++.BI iif " NAME"
++the interface on which multicast packets are received.
++
++.TP
++.BI from " PREFIX"
++the prefix selecting the IP source addresses of the multicast route.
++
++.SH ip tunnel - tunnel configuration
++.B tunnel
++objects are tunnels, encapsulating packets in IPv4 packets and then
++sending them over the IP infrastructure.
++
++.SS ip tunnel add - add a new tunnel
++.SS ip tunnel change - change an existing tunnel
++.SS ip tunnel delete - destroy a tunnel
++
++.TP
++.BI name " NAME " (default)
++select the tunnel device name.
++
++.TP
++.BI mode " MODE"
++set the tunnel mode. Three modes are currently available:
++.BR ipip ", " sit " and " gre "."
++
++.TP
++.BI remote " ADDRESS"
++set the remote endpoint of the tunnel.
++
++.TP
++.BI local " ADDRESS"
++set the fixed local address for tunneled packets.
++It must be an address on another interface of this host.
++
++.TP
++.BI ttl " N"
++set a fixed TTL
++.I N
++on tunneled packets.
++.I N
++is a number in the range 1--255. 0 is a special value
++meaning that packets inherit the TTL value.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI tos " T"
++.TP
++.BI dsfield " T"
++set a fixed TOS
++.I T
++on tunneled packets.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI dev " NAME"
++bind the tunnel to the device
++.I NAME
++so that tunneled packets will only be routed via this device and will
++not be able to escape to another device when the route to endpoint
++changes.
++
++.TP
++.B nopmtudisc
++disable Path MTU Discovery on this tunnel.
++It is enabled by default. Note that a fixed ttl is incompatible
++with this option: tunnelling with a fixed ttl always makes pmtu
++discovery.
++
++.TP
++.BI key " K"
++.TP
++.BI ikey " K"
++.TP
++.BI okey " K"
++.RB ( " only GRE tunnels " )
++use keyed GRE with key
++.IR K ". " K
++is either a number or an IP address-like dotted quad.
++The
++.B key
++parameter sets the key to use in both directions.
++The
++.BR ikey " and " okey
++parameters set different keys for input and output.
++
++.TP
++.BR csum ", " icsum ", " ocsum
++.RB ( " only GRE tunnels " )
++generate/require checksums for tunneled packets.
++The
++.B ocsum
++flag calculates checksums for outgoing packets.
++The
++.B icsum
++flag requires that all input packets have the correct
++checksum. The
++.B csum
++flag is equivalent to the combination
++.BR "icsum ocsum" .
++
++.TP
++.BR seq ", " iseq ", " oseq
++.RB ( " only GRE tunnels " )
++serialize packets.
++The
++.B oseq
++flag enables sequencing of outgoing packets.
++The
++.B iseq
++flag requires that all input packets are serialized.
++The
++.B seq
++flag is equivalent to the combination
++.BR "iseq oseq" .
++.B It isn't work. Don't use it.
++
++.SS ip tunnel show - list tunnels
++This command has no arguments.
++
++.SH ip monitor and rtmon - state monitoring
++
++The
++.B ip
++utility can monitor the state of devices, addresses
++and routes continuously. This option has a slightly different format.
++Namely, the
++.B monitor
++command is the first in the command line and then the object list follows:
++
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++
++.I OBJECT-LIST
++is the list of object types that we want to monitor.
++It may contain
++.BR link ", " address " and " route "."
++If no
++.B file
++argument is given,
++.B ip
++opens RTNETLINK, listens on it and dumps state changes in the format
++described in previous sections.
++
++.P
++If a file name is given, it does not listen on RTNETLINK,
++but opens the file containing RTNETLINK messages saved in binary format
++and dumps them. Such a history file can be generated with the
++.B rtmon
++utility. This utility has a command line syntax similar to
++.BR "ip monitor" .
++Ideally,
++.B rtmon
++should be started before the first network configuration command
++is issued. F.e. if you insert:
++.sp
++.in +8
++rtmon file /var/log/rtmon.log
++.in -8
++.sp
++in a startup script, you will be able to view the full history
++later.
++
++.P
++Certainly, it is possible to start
++.B rtmon
++at any time.
++It prepends the history with the state snapshot dumped at the moment
++of starting.
++
++.SH HISTORY
++
++.B ip
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc (8)
++.br
++.RB "IP Command reference " ip-cref.ps
++.br
++.RB "IP tunnels " ip-cref.ps
++
++.SH AUTHOR
++
++Manpage maintained by Michail Litvak <mci@owl.openwall.com>
+diff -Naur iproute2-orig/debian/manpages/old/tc-cbq-details.8 iproute2/debian/manpages/old/tc-cbq-details.8
+--- iproute2-orig/debian/manpages/old/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,425 @@
++.TH CBQ 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++Shaping is done using link idle time calculations, and actions taken if
++these calculations deviate from set limits.
++
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++From the kernel's perspective, this is hard to measure, so CBQ instead
++derives the idle time from the number of microseconds (in fact, jiffies)
++that elapse between requests from the device driver for more data. Combined
++with the knowledge of packet sizes, this is used to approximate how full or
++empty the link is.
++
++This is rather circumspect and doesn't always arrive at proper
++results. For example, what is the actual link speed of an interface
++that is not really able to transmit the full 100mbit/s of data,
++perhaps because of a badly implemented driver? A PCMCIA network card
++will also never achieve 100mbit/s because of the way the bus is
++designed - again, how do we calculate the idle time?
++
++The physical link bandwidth may be ill defined in case of not-quite-real
++network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
++bandwidth in that case is probably determined by the efficiency of pipes
++to userspace - which not defined.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data. If a verdict is reached, this
++process is repeated for the recipient class which might have further
++means of classifying traffic to its children, if any.
++
++CBQ has the following methods available to classify a packet to any child
++classes.
++.TP
++(i)
++.B skb->priority class encoding.
++Can be set from userspace by an application with the
++.B SO_PRIORITY
++setsockopt.
++The
++.B skb->priority class encoding
++only applies if the skb->priority holds a major:minor handle of an existing
++class within this qdisc.
++.TP
++(ii)
++tc filters attached to the class.
++.TP
++(iii)
++The defmap of a class, as set with the
++.B split & defmap
++parameters. The defmap may contain instructions for each possible Linux packet
++priority.
++
++.P
++Each class also has a
++.B level.
++Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
++.SH CLASSIFICATION ALGORITHM
++
++Classification is a loop, which terminates when a leaf class is found. At any
++point the loop may jump to the fallback algorithm.
++
++The loop consists of the following steps:
++.TP
++(i)
++If the packet is generated locally and has a valid classid encoded within its
++.B skb->priority,
++choose it and terminate.
++
++.TP
++(ii)
++Consult the tc filters, if any, attached to this child. If these return
++a class which is not a leaf class, restart loop from the class returned.
++If it is a leaf, choose it and terminate.
++.TP
++(iii)
++If the tc filters did not return a class, but did return a classid,
++try to find a class with that id within this qdisc.
++Check if the found class is of a lower
++.B level
++than the current class. If so, and the returned class is not a leaf node,
++restart the loop at the found class. If it is a leaf node, terminate.
++If we found an upward reference to a higher level, enter the fallback
++algorithm.
++.TP
++(iv)
++If the tc filters did not return a class, nor a valid reference to one,
++consider the minor number of the reference to be the priority. Retrieve
++a class from the defmap of this class for the priority. If this did not
++contain a class, consult the defmap of this class for the
++.B BEST_EFFORT
++class. If this is an upward reference, or no
++.B BEST_EFFORT
++class was defined,
++enter the fallback algorithm. If a valid class was found, and it is not a
++leaf node, restart the loop at this class. If it is a leaf, choose it and
++terminate. If
++neither the priority distilled from the classid, nor the
++.B BEST_EFFORT
++priority yielded a class, enter the fallback algorithm.
++.P
++The fallback algorithm resides outside of the loop and is as follows.
++.TP
++(i)
++Consult the defmap of the class at which the jump to fallback occured. If
++the defmap contains a class for the
++.B
++priority
++of the class (which is related to the TOS field), choose this class and
++terminate.
++.TP
++(ii)
++Consult the map for a class for the
++.B BEST_EFFORT
++priority. If found, choose it, and terminate.
++.TP
++(iii)
++Choose the class at which break out to the fallback algorithm occured. Terminate.
++.P
++The packet is enqueued to the class which was chosen when either algorithm
++terminated. It is therefore possible for a packet to be enqueued *not* at a
++leaf node, but in the middle of the hierarchy.
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++.B CERTAINTY ENDS HERE, ANK PLEASE HELP
++
++Each class is not allowed to send at length though - they can only dequeue a
++configurable amount of data during each round.
++
++If a class is about to go overlimit, and it is not
++.B bounded
++it will try to borrow avgidle from siblings that are not
++.B isolated.
++This process is repeated from the bottom upwards. If a class is unable
++to borrow enough avgidle to send a packet, it is throttled and not asked
++for a packet for enough time for the avgidle to increase above zero.
++
++.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
++.B AGAIN.
++
++.SH QDISC
++The root qdisc of a CBQ class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional.
++.TP
++avpkt bytes
++For calculations, the average packet size must be known. It is silently capped
++at a minimum of 2/3 of the interface MTU. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Defaults
++to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above.
++
++.TP
++priority priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc. Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guarantee Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-cbq.8 iproute2/debian/manpages/old/tc-cbq.8
+--- iproute2-orig/debian/manpages/old/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-htb.8 iproute2/debian/manpages/old/tc-htb.8
+--- iproute2-orig/debian/manpages/old/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,150 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a HTB qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the HTB instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the HTB can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-pbfifo.8 iproute2/debian/manpages/old/tc-pbfifo.8
+--- iproute2-orig/debian/manpages/old/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 iproute2/debian/manpages/old/tc-pfifo_fast.8
+--- iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-prio.8 iproute2/debian/manpages/old/tc-prio.8
+--- iproute2-orig/debian/manpages/old/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-red.8 iproute2/debian/manpages/old/tc-red.8
+--- iproute2-orig/debian/manpages/old/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on if ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-sfq.8 iproute2/debian/manpages/old/tc-sfq.8
+--- iproute2-orig/debian/manpages/old/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-tbf.8 iproute2/debian/manpages/old/tc-tbf.8
+--- iproute2-orig/debian/manpages/old/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc.8 iproute2/debian/manpages/old/tc.8
+--- iproute2-orig/debian/manpages/old/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bytes per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/debian/manpages/tc-cbq-details.8 iproute2/debian/manpages/tc-cbq-details.8
+--- iproute2-orig/debian/manpages/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,425 @@
++.TH CBQ 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++Shaping is done using link idle time calculations, and actions taken if
++these calculations deviate from set limits.
++
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++From the kernel's perspective, this is hard to measure, so CBQ instead
++derives the idle time from the number of microseconds (in fact, jiffies)
++that elapse between requests from the device driver for more data. Combined
++with the knowledge of packet sizes, this is used to approximate how full or
++empty the link is.
++
++This is rather circumspect and doesn't always arrive at proper
++results. For example, what is the actual link speed of an interface
++that is not really able to transmit the full 100mbit/s of data,
++perhaps because of a badly implemented driver? A PCMCIA network card
++will also never achieve 100mbit/s because of the way the bus is
++designed - again, how do we calculate the idle time?
++
++The physical link bandwidth may be ill defined in case of not-quite-real
++network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
++bandwidth in that case is probably determined by the efficiency of pipes
++to userspace - which not defined.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data. If a verdict is reached, this
++process is repeated for the recipient class which might have further
++means of classifying traffic to its children, if any.
++
++CBQ has the following methods available to classify a packet to any child
++classes.
++.TP
++(i)
++.B skb->priority class encoding.
++Can be set from userspace by an application with the
++.B SO_PRIORITY
++setsockopt.
++The
++.B skb->priority class encoding
++only applies if the skb->priority holds a major:minor handle of an existing
++class within this qdisc.
++.TP
++(ii)
++tc filters attached to the class.
++.TP
++(iii)
++The defmap of a class, as set with the
++.B split & defmap
++parameters. The defmap may contain instructions for each possible Linux packet
++priority.
++
++.P
++Each class also has a
++.B level.
++Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
++.SH CLASSIFICATION ALGORITHM
++
++Classification is a loop, which terminates when a leaf class is found. At any
++point the loop may jump to the fallback algorithm.
++
++The loop consists of the following steps:
++.TP
++(i)
++If the packet is generated locally and has a valid classid encoded within its
++.B skb->priority,
++choose it and terminate.
++
++.TP
++(ii)
++Consult the tc filters, if any, attached to this child. If these return
++a class which is not a leaf class, restart loop from the class returned.
++If it is a leaf, choose it and terminate.
++.TP
++(iii)
++If the tc filters did not return a class, but did return a classid,
++try to find a class with that id within this qdisc.
++Check if the found class is of a lower
++.B level
++than the current class. If so, and the returned class is not a leaf node,
++restart the loop at the found class. If it is a leaf node, terminate.
++If we found an upward reference to a higher level, enter the fallback
++algorithm.
++.TP
++(iv)
++If the tc filters did not return a class, nor a valid reference to one,
++consider the minor number of the reference to be the priority. Retrieve
++a class from the defmap of this class for the priority. If this did not
++contain a class, consult the defmap of this class for the
++.B BEST_EFFORT
++class. If this is an upward reference, or no
++.B BEST_EFFORT
++class was defined,
++enter the fallback algorithm. If a valid class was found, and it is not a
++leaf node, restart the loop at this class. If it is a leaf, choose it and
++terminate. If
++neither the priority distilled from the classid, nor the
++.B BEST_EFFORT
++priority yielded a class, enter the fallback algorithm.
++.P
++The fallback algorithm resides outside of the loop and is as follows.
++.TP
++(i)
++Consult the defmap of the class at which the jump to fallback occured. If
++the defmap contains a class for the
++.B
++priority
++of the class (which is related to the TOS field), choose this class and
++terminate.
++.TP
++(ii)
++Consult the map for a class for the
++.B BEST_EFFORT
++priority. If found, choose it, and terminate.
++.TP
++(iii)
++Choose the class at which break out to the fallback algorithm occured. Terminate.
++.P
++The packet is enqueued to the class which was chosen when either algorithm
++terminated. It is therefore possible for a packet to be enqueued *not* at a
++leaf node, but in the middle of the hierarchy.
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++.B CERTAINTY ENDS HERE, ANK PLEASE HELP
++
++Each class is not allowed to send at length though - they can only dequeue a
++configurable amount of data during each round.
++
++If a class is about to go overlimit, and it is not
++.B bounded
++it will try to borrow avgidle from siblings that are not
++.B isolated.
++This process is repeated from the bottom upwards. If a class is unable
++to borrow enough avgidle to send a packet, it is throttled and not asked
++for a packet for enough time for the avgidle to increase above zero.
++
++.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
++.B AGAIN.
++
++.SH QDISC
++The root qdisc of a CBQ class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional.
++.TP
++avpkt bytes
++For calculations, the average packet size must be known. It is silently capped
++at a minimum of 2/3 of the interface MTU. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Defaults
++to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above.
++
++.TP
++priority priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc. Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guarantee Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-cbq.8 iproute2/debian/manpages/tc-cbq.8
+--- iproute2-orig/debian/manpages/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-htb.8 iproute2/debian/manpages/tc-htb.8
+--- iproute2-orig/debian/manpages/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,150 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a HTB qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the HTB instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the HTB can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-pbfifo.8 iproute2/debian/manpages/tc-pbfifo.8
+--- iproute2-orig/debian/manpages/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-pfifo_fast.8 iproute2/debian/manpages/tc-pfifo_fast.8
+--- iproute2-orig/debian/manpages/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-prio.8 iproute2/debian/manpages/tc-prio.8
+--- iproute2-orig/debian/manpages/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-red.8 iproute2/debian/manpages/tc-red.8
+--- iproute2-orig/debian/manpages/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on if ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-sfq.8 iproute2/debian/manpages/tc-sfq.8
+--- iproute2-orig/debian/manpages/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-tbf.8 iproute2/debian/manpages/tc-tbf.8
+--- iproute2-orig/debian/manpages/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc.8 iproute2/debian/manpages/tc.8
+--- iproute2-orig/debian/manpages/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bytes per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/debian/postinst iproute2/debian/postinst
+--- iproute2-orig/debian/postinst 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/postinst 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,6 @@
++#!/bin/sh -e
++
++# FHS:
++if [ "$1" = "configure" -a -d /usr/doc -a ! -e /usr/doc/iproute ]; then
++ ln -sf ../share/doc/iproute /usr/doc/iproute
++fi
+diff -Naur iproute2-orig/debian/postrm iproute2/debian/postrm
+--- iproute2-orig/debian/postrm 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/postrm 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,6 @@
++#!/bin/sh
++
++if [ "$1" = "purge" ]
++then
++ rm -rf /etc/iproute2
++fi
+diff -Naur iproute2-orig/debian/prerm iproute2/debian/prerm
+--- iproute2-orig/debian/prerm 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/prerm 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,5 @@
++#!/bin/sh -e
++
++if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/iproute ]; then
++ rm -f /usr/doc/iproute
++fi
+diff -Naur iproute2-orig/debian/rules iproute2/debian/rules
+--- iproute2-orig/debian/rules 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/rules 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,85 @@
++#!/usr/bin/make -f
++#
++# Copyright (C) 1999 Roberto Lumbreras <rover@debian.org>
++# Copyright (C) 1999-2002 Juan Cespedes <cespedes@debian.org>
++# Copying: GPL
++
++SHELL = bash
++
++PACKAGE = $(shell perl -e 'print <> =~ /^(.*) \(.*\)/' debian/changelog)
++PKG_VER = $(shell perl -e 'print <> =~ /\((.*)\)/' debian/changelog)
++PKG_UPVER= $(shell perl -e 'print <> =~ /\((.*)-[^-]*\)/' debian/changelog)
++
++BINS = ip/ip
++SBINS = ip/rtmon ip/rtacct tc/tc
++SHBINS = ip/routef ip/routel # ip/ifcfg ip/rtpr
++DOCS = README* doc/Plan debian/README.Debian
++MAN8 = debian/manpages/*.8
++MANLINKS= rtmon rtacct routef routel
++TEXDOCS = ip-cref ip-tunnels api-ip6-flowlabels
++
++build: stamp-build
++
++stamp-build:
++ test -f include-glibc/netinet/in.h.orig || \
++ mv include-glibc/netinet/in.h \
++ include-glibc/netinet/in.h.orig
++ $(MAKE) KERNEL_INCLUDE=/usr/include
++ $(MAKE) -C doc
++ touch stamp-build
++
++binary: binary-indep binary-arch
++
++binary-indep:
++
++binary-arch: checkroot stamp-build
++ $(RM) -r debian/tmp
++ install -d -m0755 debian/tmp/{DEBIAN,bin,sbin,usr/{bin,share/doc/$(PACKAGE),share/man/man{7,8}}}
++ install -s -m0755 $(BINS) debian/tmp/bin/
++ install -s -m0755 $(SBINS) debian/tmp/sbin/
++ ln -s /bin/ip debian/tmp/sbin/ip
++ install -m0755 $(SHBINS) debian/tmp/usr/bin/
++ cp -p $(DOCS) debian/tmp/usr/share/doc/$(PACKAGE)/
++ cp -rp examples debian/tmp/usr/share/doc/$(PACKAGE)/
++ find debian/tmp/usr/share/doc/$(PACKAGE)/examples -type f -exec chmod -x {} \;
++ install -m0644 debian/changelog debian/tmp/usr/share/doc/$(PACKAGE)/changelog.Debian
++ cp -p RELNOTES debian/tmp/usr/share/doc/$(PACKAGE)/changelog
++ for i in $(TEXDOCS); do \
++ install -m0644 doc/$$i.tex debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ install -m0644 doc/$$i.dvi debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ install -m0644 doc/$$i.ps debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ done
++ install -m0644 $(MAN8) debian/tmp/usr/share/man/man8/
++ gzip -9fr debian/tmp/usr/share || true
++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-pfifo.8.gz
++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-bfifo.8.gz
++ for i in $(MANLINKS); do \
++ ln -s ../man7/undocumented.7.gz debian/tmp/usr/share/man/man8/$$i.8.gz; \
++ done
++ cp -p debian/copyright debian/tmp/usr/share/doc/$(PACKAGE)/
++ cp -rp etc debian/tmp/
++ install -m0644 debian/conffiles debian/tmp/DEBIAN/
++
++ dpkg-shlibdeps $(BINS) $(SBINS)
++ dpkg-gencontrol -isp
++ chown -R root.root debian/tmp
++ chmod -R u=rwX,go=rX debian/tmp
++ dpkg --build debian/tmp ..
++
++checkdir:
++ @test -f debian/rules
++
++checkroot: checkdir
++ @test 0 = `id -u` || { echo "Error: not super-user"; exit 1; }
++
++clean: checkdir debian/control
++ $(RM) stamp-build debian/files debian/substvars
++ $(MAKE) clean
++ $(MAKE) -C doc clean
++ $(RM) `find . -name "*~" -o -name core`
++ $(RM) -r debian/tmp
++ test -f include-glibc/netinet/in.h.orig && \
++ mv include-glibc/netinet/in.h.orig \
++ include-glibc/netinet/in.h || true
++
++.PHONY: build binary binary-arch binary-indep checkdir checkroot clean
+diff -Naur iproute2-orig/debian/tc-cbq.8 iproute2/debian/tc-cbq.8
+--- iproute2-orig/debian/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-htb.8 iproute2/debian/tc-htb.8
+--- iproute2-orig/debian/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,153 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH BUGS
++Not in the stock kernel yet.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-pbfifo.8 iproute2/debian/tc-pbfifo.8
+--- iproute2-orig/debian/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-pfifo_fast.8 iproute2/debian/tc-pfifo_fast.8
+--- iproute2-orig/debian/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-prio.8 iproute2/debian/tc-prio.8
+--- iproute2-orig/debian/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-red.8 iproute2/debian/tc-red.8
+--- iproute2-orig/debian/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on 08 ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-sfq.8 iproute2/debian/tc-sfq.8
+--- iproute2-orig/debian/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-tbf.8 iproute2/debian/tc-tbf.8
+--- iproute2-orig/debian/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc.8 iproute2/debian/tc.8
+--- iproute2-orig/debian/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bits per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/include/rt_names.h iproute2/include/rt_names.h
+--- iproute2-orig/include/rt_names.h 2000-04-16 10:42:50.000000000 -0700
++++ iproute2/include/rt_names.h 2004-05-21 00:16:36.000000000 -0700
+@@ -1,6 +1,8 @@
+ #ifndef RT_NAMES_H_
+ #define RT_NAMES_H_ 1
+
++#include <asm/byteorder.h>
++
+ const char* rtnl_rtprot_n2a(int id, char *buf, int len);
+ const char* rtnl_rtscope_n2a(int id, char *buf, int len);
+ const char* rtnl_rttable_n2a(int id, char *buf, int len);
+diff -Naur iproute2-orig/lib/rt_names.c iproute2/lib/rt_names.c
+--- iproute2-orig/lib/rt_names.c 2000-04-16 10:42:52.000000000 -0700
++++ iproute2/lib/rt_names.c 2004-05-21 00:16:36.000000000 -0700
+@@ -16,6 +16,7 @@
+ #include <fcntl.h>
+ #include <string.h>
+ #include <sys/time.h>
++#include <asm/byteorder.h>
+
+ static void rtnl_tab_initialize(char *file, char **tab, int size)
+ {
+diff -Naur iproute2-orig/misc/arpd.c iproute2/misc/arpd.c
+--- iproute2-orig/misc/arpd.c 2002-01-09 20:02:26.000000000 -0800
++++ iproute2/misc/arpd.c 2004-05-21 00:16:36.000000000 -0700
+@@ -16,7 +16,7 @@
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <netdb.h>
+-#include <db.h>
++#include <db_185.h>
+ #include <sys/ioctl.h>
+ #include <sys/poll.h>
+ #include <errno.h>
+@@ -28,6 +28,7 @@
+ #include <signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <linux/if_packet.h>
diff --git a/abs/core-testing/iptables/PKGBUILD b/abs/core-testing/iptables/PKGBUILD
new file mode 100644
index 0000000..c796285
--- /dev/null
+++ b/abs/core-testing/iptables/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=iptables
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="A Linux kernel packet control tool"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.netfilter.org/"
+depends=('glibc')
+source=(http://www.iptables.org/projects/iptables/files/iptables-$pkgver.tar.bz2 \
+ iptables ip6tables empty.rules simple_firewall.rules iptables.conf.d)
+md5sums=('e628f033b95741266a315d54fe73db9c'
+ '89401d6f0cf1de46a455b7be6720a58b'
+ '6e0e88c2ed0c3715d1409ee3258a0046'
+ '14186bbafe21bb0638c0cb8e0903c829'
+ 'e53a83bb4d8ac8b7eadd7bd58294751d'
+ 'c7cf6e4455c228e50d20ce3edd75ee59')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m755 ../iptables $startdir/pkg/etc/rc.d/iptables
+ install -D -m755 ../ip6tables $startdir/pkg/etc/rc.d/ip6tables
+ install -D -m644 ../empty.rules $startdir/pkg/etc/iptables/empty.rules
+ install -D -m644 ../simple_firewall.rules $startdir/pkg/etc/iptables/simple_firewall.rules
+ install -D -m644 ../iptables.conf.d $startdir/pkg/etc/conf.d/iptables
+}
diff --git a/abs/core-testing/iptables/PKGBUILD.orig b/abs/core-testing/iptables/PKGBUILD.orig
new file mode 100644
index 0000000..b0182d8
--- /dev/null
+++ b/abs/core-testing/iptables/PKGBUILD.orig
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=iptables
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="A Linux kernel packet control tool"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.netfilter.org/"
+depends=('glibc')
+source=(http://www.iptables.org/projects/iptables/files/iptables-$pkgver.tar.bz2 \
+ iptables ip6tables empty.rules simple_firewall.rules iptables.conf.d)
+md5sums=('e628f033b95741266a315d54fe73db9c'
+ '89401d6f0cf1de46a455b7be6720a58b'
+ '6e0e88c2ed0c3715d1409ee3258a0046'
+ '14186bbafe21bb0638c0cb8e0903c829'
+ 'e53a83bb4d8ac8b7eadd7bd58294751d'
+ 'c7cf6e4455c228e50d20ce3edd75ee59')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i 's|/usr/local|/usr|' Makefile
+ sed -i 's|MANDIR:=$(PREFIX)/man|MANDIR:=$(PREFIX)/share/man|' Makefile
+ # this seems to cause more problems than help
+ # sed -i "s:/usr/src/linux:/usr/src/linux\*:" Makefile
+ make KERNEL_DIR=/usr/src/linux-$(uname -r) || return 1
+ make KERNEL_DIR=/usr/src/linux-$(uname -r) experimental || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install-devel || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install-experimental || return 1
+ install -D -m755 ../iptables $startdir/pkg/etc/rc.d/iptables
+ install -D -m755 ../ip6tables $startdir/pkg/etc/rc.d/ip6tables
+ install -D -m644 ../empty.rules $startdir/pkg/etc/iptables/empty.rules
+ install -D -m644 ../simple_firewall.rules $startdir/pkg/etc/iptables/simple_firewall.rules
+ install -D -m644 ../iptables.conf.d $startdir/pkg/etc/conf.d/iptables
+}
diff --git a/abs/core-testing/iptables/empty.rules b/abs/core-testing/iptables/empty.rules
new file mode 100644
index 0000000..e24e1aa
--- /dev/null
+++ b/abs/core-testing/iptables/empty.rules
@@ -0,0 +1,6 @@
+# Empty iptables rule file
+*filter
+:INPUT ACCEPT [0:0]
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [0:0]
+COMMIT
diff --git a/abs/core-testing/iptables/ip6tables b/abs/core-testing/iptables/ip6tables
new file mode 100755
index 0000000..1733db2
--- /dev/null
+++ b/abs/core-testing/iptables/ip6tables
@@ -0,0 +1,97 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/iptables ] && . /etc/conf.d/iptables
+
+# Set defaults if settings are missing
+[ -z "$IP6TABLES" ] && IP6TABLES=/usr/sbin/ip6tables
+[ -z "$IP6TABLES_CONF" ] && IP6TABLES_CONF=/etc/iptables/ip6tables.rules
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ if [ ! -f $IP6TABLES_CONF ]; then
+ echo "Cannot load iptables rules: $IP6TABLES_CONF is missing!" >&2
+ exit 1
+ fi
+ stat_busy "Starting IP6 Tables"
+ if [ "$IPTABLES_FORWARD" = "1" ]; then
+ echo 1 >/proc/sys/net/ipv6/conf/default/forwarding
+ echo 1 >/proc/sys/net/ipv6/conf/all/forwarding
+ fi
+ if ck_daemon ip6tables; then
+ /usr/sbin/ip6tables-restore < $IP6TABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon ip6tables
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping IP6 Tables"
+ echo 0 >/proc/sys/net/ipv6/conf/all/forwarding
+ echo 0 >/proc/sys/net/ipv6/conf/default/forwarding
+ if ! ck_daemon ip6tables; then
+ fail=0
+ for table in $(cat /proc/net/ip6_tables_names); do
+ $IP6TABLES -t $table -F &>/dev/null && \
+ $IP6TABLES -t $table -X &>/dev/null && \
+ $IP6TABLES -t $table -Z &>/dev/null
+ [ $? -gt 0 ] && fail=1
+ done
+ if [ $fail -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ip6tables
+ # reset policies
+ for table in filter mangle raw; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P OUTPUT ACCEPT
+ fi
+ done
+ for table in filter mangle; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P INPUT ACCEPT
+ $IP6TABLES -t $table -P FORWARD ACCEPT
+ fi
+ done
+ for table in mangle raw; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P PREROUTING ACCEPT
+ fi
+ done
+ for table in mangle; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P POSTROUTING ACCEPT
+ fi
+ done
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ save)
+ stat_busy "Saving IP6 Tables"
+ /usr/sbin/ip6tables-save >$IP6TABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|save}"
+esac
+exit 0
diff --git a/abs/core-testing/iptables/iptables b/abs/core-testing/iptables/iptables
new file mode 100755
index 0000000..50c13d5
--- /dev/null
+++ b/abs/core-testing/iptables/iptables
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/iptables ] && . /etc/conf.d/iptables
+
+# Set defaults if settings are missing
+[ -z "$IPTABLES" ] && IPTABLES=/usr/sbin/iptables
+[ -z "$IPTABLES_CONF" ] && IPTABLES_CONF=/etc/iptables/iptables.rules
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ if [ ! -f $IPTABLES_CONF ]; then
+ echo "Cannot load iptables rules: $IPTABLES_CONF is missing!" >&2
+ exit 1
+ fi
+ stat_busy "Starting IP Tables"
+ if [ "$IPTABLES_FORWARD" = "1" ]; then
+ echo 1 >/proc/sys/net/ipv4/ip_forward
+ fi
+ if ck_daemon iptables; then
+ /usr/sbin/iptables-restore < $IPTABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon iptables
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping IP Tables"
+ echo 0 >/proc/sys/net/ipv4/ip_forward
+ if ! ck_daemon iptables; then
+ fail=0
+ for table in $(cat /proc/net/ip_tables_names); do
+ $IPTABLES -t $table -F &>/dev/null && \
+ $IPTABLES -t $table -X &>/dev/null && \
+ $IPTABLES -t $table -Z &>/dev/null
+ [ $? -gt 0 ] && fail=1
+ done
+ if [ $fail -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon iptables
+ # reset policies
+ for table in filter nat mangle raw; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P OUTPUT ACCEPT
+ fi
+ done
+ for table in filter mangle; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P INPUT ACCEPT
+ $IPTABLES -t $table -P FORWARD ACCEPT
+ fi
+ done
+ for table in nat mangle raw; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P PREROUTING ACCEPT
+ fi
+ done
+ for table in nat mangle; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P POSTROUTING ACCEPT
+ fi
+ done
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ save)
+ stat_busy "Saving IP Tables"
+ /usr/sbin/iptables-save >$IPTABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|save}"
+esac
+exit 0
diff --git a/abs/core-testing/iptables/iptables.conf.d b/abs/core-testing/iptables/iptables.conf.d
new file mode 100644
index 0000000..e9afea2
--- /dev/null
+++ b/abs/core-testing/iptables/iptables.conf.d
@@ -0,0 +1,8 @@
+# Configuration for iptables rules
+
+IPTABLES=/usr/sbin/iptables
+IP6TABLES=/usr/sbin/ip6tables
+
+IPTABLES_CONF=/etc/iptables/iptables.rules
+IP6TABLES_CONF=/etc/iptables/ip6tables.rules
+IPTABLES_FORWARD=1 # enable IP forwarding?
diff --git a/abs/core-testing/iptables/simple_firewall.rules b/abs/core-testing/iptables/simple_firewall.rules
new file mode 100644
index 0000000..e1604cc
--- /dev/null
+++ b/abs/core-testing/iptables/simple_firewall.rules
@@ -0,0 +1,11 @@
+*filter
+:INPUT DROP [0:0]
+:FORWARD DROP [0:0]
+:OUTPUT ACCEPT [0:0]
+-A INPUT -p icmp -j ACCEPT
+-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+-A INPUT -i lo -j ACCEPT
+-A INPUT -p tcp -j REJECT --reject-with tcp-reset
+-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
+-A INPUT -j REJECT --reject-with icmp-proto-unreachable
+COMMIT
diff --git a/abs/core-testing/iputils/PKGBUILD b/abs/core-testing/iputils/PKGBUILD
new file mode 100644
index 0000000..341158b
--- /dev/null
+++ b/abs/core-testing/iputils/PKGBUILD
@@ -0,0 +1,72 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=iputils
+pkgver=20070202
+_traceroutever=1.4a12
+pkgrel=13
+pkgdesc="IP Configuration Utilities (and Ping)"
+arch=(i686 x86_64)
+license=('GPL')
+url="ftp://ftp.inr.ac.ru/ip-routing/"
+groups=('base')
+depends=('glibc')
+makedepends=('jade')
+conflicts=('netkit-base' 'arping' 'netkit-tftpd' 'traceroute')
+replaces=('netkit-base' 'traceroute')
+source=(http://www.skbuff.net/iputils/$pkgname-s$pkgver.tar.bz2
+ ftp://ftp.ee.lbl.gov/traceroute-$_traceroutever.tar.gz
+ iputils-20070202-no-open-max.patch)
+options=(!makeflags)
+md5sums=('1d38fb3cfc2b71496e43cf646bfc1d6e'
+ '964d599ef696efccdeebe7721cd4828d'
+ 'a2cbc0174dd883f68297aa7f3e7c4f5c')
+
+build()
+{
+ #build iptuils
+ cd $startdir/src/$pkgname-s$pkgver
+ patch -Np1 -i ../iputils-20070202-no-open-max.patch || return 1
+ make KERNEL_INCLUDE=/usr/include || return 1 # for i686
+ for i in arping clockdiff rarpd rdisc tftpd tracepath tracepath6; do
+ install -D -m755 $i $startdir/pkg/usr/sbin/$i
+ done
+ for i in ping ping6 traceroute6; do
+ install -D -m4755 $i $startdir/pkg/bin/$i
+ done
+
+ msg ":: building docs"
+ # good god, these docs are a pain
+ # special thanks to Michael(tm) Smith <mike@w3.org> - http://people.w3.org/mike/
+ # from #docbook on freenode.org for figuring this out
+ cd doc
+ for file in *.sgml; do
+ xf=${file/.sgml/.xml}
+ sx -xlower -xno-nl-in-tag $file > $xf
+ sed -i "s|<refname>\(.*\), \(.*\)</refname>|<refname>\1</refname>, <refname>\2</refname>|g" $xf
+ xsltproc /usr/share/xml/docbook/xsl-stylesheets-1.73.1/manpages/docbook.xsl $xf
+ done
+
+ mkdir -p $startdir/pkg/usr/man/man8
+ install -m644 arping.8 clockdiff.8 ping.8 ping6.8 rarpd.8 rdisc.8 \
+ tftpd.8 tracepath.8 tracepath6.8 traceroute6 \
+ $startdir/pkg/usr/man/man8/
+ #make man
+ #for i in arping clockdiff ping rarpd rdisc tftpd tracepath traceroute6; do
+ # install -D -m644 $i.8 $startdir/pkg/usr/man/man8/$i.8
+ #done
+
+ # build traceroute
+ # this is combined in this package because it's awkward as a separate package
+ cd ${startdir}/src/traceroute-$_traceroutever
+ ./configure --prefix=/usr --sbindir=/bin
+ #if [ "${CARCH}" = "x86_64" ]; then
+ make CFLAGS="${CFLAGS} -Ilinux-include/" || return 1
+ #else
+ # make || return 1
+ #fi
+ make DESTDIR=${startdir}/pkg install install-man
+
+ chmod 4775 ${startdir}/pkg/bin/traceroute
+}
+
diff --git a/abs/core-testing/iputils/iputils-20070202-no-open-max.patch b/abs/core-testing/iputils/iputils-20070202-no-open-max.patch
new file mode 100644
index 0000000..5013ba4
--- /dev/null
+++ b/abs/core-testing/iputils/iputils-20070202-no-open-max.patch
@@ -0,0 +1,16 @@
+the OPEN_MAX define has been removed in newer kernel headers so use the
+proper method of getting the value dynamically
+
+http://bugs.gentoo.org/195861
+
+--- a/rdisc.c
++++ b/rdisc.c
+@@ -247,7 +247,7 @@ void do_fork(void)
+ if ((pid=fork()) != 0)
+ exit(0);
+
+- for (t = 0; t < OPEN_MAX; t++)
++ for (t = 0; t < sysconf(_SC_OPEN_MAX); t++)
+ if (t != s)
+ close(t);
+
diff --git a/abs/core-testing/iputils/iputils-big-patches.patch b/abs/core-testing/iputils/iputils-big-patches.patch
new file mode 100644
index 0000000..29bc310
--- /dev/null
+++ b/abs/core-testing/iputils/iputils-big-patches.patch
@@ -0,0 +1,595 @@
+diff -Naur iputils.orig/Makefile iputils/Makefile
+--- iputils.orig/Makefile 2002-11-09 03:01:11.000000000 +0000
++++ iputils/Makefile 2005-06-09 16:15:32.000000000 +0000
+@@ -17,11 +17,6 @@
+ GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+ endif
+
+-ifeq ($(KERNEL_INCLUDE)/linux/pfkeyv2.h,$(wildcard $(KERNEL_INCLUDE)/linux/pfkeyv2.h))
+- SUBDIRS=libipsec setkey
+- LDLIBS+=-Llibipsec -lipsec
+- IPSECDEF=-DDO_IPSEC -Ilibipsec
+-endif
+
+
+ #options if you compile with libc5, and without a bind>=4.9.4 libresolv
+@@ -31,7 +26,7 @@
+ # What a pity, all new gccs are buggy and -Werror does not work. Sigh.
+ #CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g -Werror
+ CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS=$(CCOPT) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(IPSECDEF) $(DEFINES)
++CFLAGS=$(CCOPT) -I../include $(IPSECDEF) $(DEFINES)
+
+ IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd
+ IPV6_TARGETS=tracepath6 traceroute6 ping6
+@@ -42,7 +37,11 @@
+
+ tftpd: tftpd.o tftpsubs.o
+ ping: ping.o ping_common.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
+ ping6: ping6.o ping_common.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
++traceroute6: traceroute6.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
+ ping.o ping6.o ping_common.o: ping_common.h
+ tftpd.o tftpsubs.o: tftp.h
+
+diff -Naur iputils.orig/arping.c iputils/arping.c
+--- iputils.orig/arping.c 2001-10-05 22:42:47.000000000 +0000
++++ iputils/arping.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdlib.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+@@ -19,6 +20,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
++#include <linux/if_packet.h>
+ #include <sys/uio.h>
+
+ #include <netdb.h>
+diff -Naur iputils.orig/clockdiff.c iputils/clockdiff.c
+--- iputils.orig/clockdiff.c 2002-02-23 00:10:59.000000000 +0000
++++ iputils/clockdiff.c 2005-06-09 16:15:24.000000000 +0000
+@@ -1,7 +1,9 @@
++#include <asm/byteorder.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
++#include <linux/types.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <math.h>
+diff -Naur iputils.orig/include-glibc/netinet/in.h iputils/include-glibc/netinet/in.h
+--- iputils.orig/include-glibc/netinet/in.h 2002-11-09 00:22:25.000000000 +0000
++++ iputils/include-glibc/netinet/in.h 2005-06-09 16:15:00.000000000 +0000
+@@ -65,4 +65,45 @@
+ && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3]))
+
+
+-#endif /* netinet/in.h */
++/* Functions to convert between host and network byte order.
++
++ Please note that these functions normally take `unsigned long int' or
++ `unsigned short int' values as arguments and also return them. But
++ this was a short-sighted decision since on different systems the types
++ may have different representations but the values are always the same. */
++
++extern u_int32_t ntohl (u_int32_t __netlong) __THROW __attribute__ ((__const__));
++extern u_int16_t ntohs (u_int16_t __netshort)
++ __THROW __attribute__ ((__const__));
++extern u_int32_t htonl (u_int32_t __hostlong)
++ __THROW __attribute__ ((__const__));
++extern u_int16_t htons (u_int16_t __hostshort)
++ __THROW __attribute__ ((__const__));
++
++#include <endian.h>
++
++/* Get machine dependent optimized versions of byte swapping functions. */
++#include <bits/byteswap.h>
++
++#ifdef __OPTIMIZE__
++/* We can optimize calls to the conversion functions. Either nothing has
++ to be done or we are using directly the byte-swapping functions which
++ often can be inlined. */
++# if __BYTE_ORDER == __BIG_ENDIAN
++/* The host byte order is the same as network byte order,
++ so these functions are all just identity. */
++# define ntohl(x) (x)
++# define ntohs(x) (x)
++# define htonl(x) (x)
++# define htons(x) (x)
++# else
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++# define ntohl(x) __bswap_32 (x)
++# define ntohs(x) __bswap_16 (x)
++# define htonl(x) __bswap_32 (x)
++# define htons(x) __bswap_16 (x)
++# endif
++# endif
++#endif
++
++#endif /* netinet/in.h */
+diff -Naur iputils.orig/ipg iputils/ipg
+--- iputils.orig/ipg 2001-08-02 22:37:32.000000000 +0000
++++ iputils/ipg 2005-06-09 16:14:49.000000000 +0000
+@@ -1,21 +1,31 @@
+-#! /bin/bash
++#!/bin/bash
+
+-modprobe pg3
++modprobe pg3 >& /dev/null
++modprobe pktgen >& /dev/null
++
++PGDEV=/proc/net/pg
++if [[ ! -e ${PGDEV} ]] ; then
++ PGDEV=/proc/net/pktgen/pg0
++ if [[ ! -e ${PGDEV} ]] ; then
++ echo "Couldn't not locate pg in /proc/net :("
++ exit 1
++ fi
++fi
+
+ function pgset() {
+ local result
+
+- echo $1 > /proc/net/pg
++ echo $1 > ${PGDEV}
+
+- result=`cat /proc/net/pg | fgrep "Result: OK:"`
++ result=`cat ${PGDEV} | fgrep "Result: OK:"`
+ if [ "$result" = "" ]; then
+- cat /proc/net/pg | fgrep Result:
++ cat ${PGDEV} | fgrep Result:
+ fi
+ }
+
+ function pg() {
+- echo inject > /proc/net/pg
+- cat /proc/net/pg
++ echo inject > ${PGDEV}
++ cat ${PGDEV}
+ }
+
+ pgset "odev eth0"
+diff -Naur iputils.orig/ping.c iputils/ping.c
+--- iputils.orig/ping.c 2002-11-07 22:53:21.000000000 +0000
++++ iputils/ping.c 2005-06-09 16:15:00.000000000 +0000
+@@ -60,8 +60,8 @@
+
+ #include "ping_common.h"
+
++#include <linux/icmp.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_icmp.h>
+ #ifdef DO_IPSEC
+ #include <libipsec.h>
+ #endif
+@@ -1213,7 +1213,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -Naur iputils.orig/ping6.c iputils/ping6.c
+--- iputils.orig/ping6.c 2002-09-20 15:08:11.000000000 +0000
++++ iputils/ping6.c 2005-06-09 16:15:00.000000000 +0000
+@@ -68,8 +68,44 @@
+ */
+ #include "ping_common.h"
+
+-#include <linux/in6.h>
+-#include <linux/ipv6.h>
++struct ipv6_rt_hdr {
++ __u8 nexthdr;
++ __u8 hdrlen;
++ __u8 type;
++ __u8 segments_left;
++
++ /*
++ * type specific data
++ * variable length field
++ */
++};
++
++struct rt0_hdr {
++ struct ipv6_rt_hdr rt_hdr;
++ __u32 bitmap; /* strict/loose bit map */
++ struct in6_addr addr[0];
++
++#define rt0_type rt_hdr.type;
++};
++#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
++
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
++
+ #include <linux/icmpv6.h>
+
+ #define BIT_CLEAR(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] &= ~(1U << ((nr) & 31)); } while(0)
+@@ -879,7 +915,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -Naur iputils.orig/ping_common.h iputils/ping_common.h
+--- iputils.orig/ping_common.h 2002-09-20 15:08:11.000000000 +0000
++++ iputils/ping_common.h 2005-06-09 16:15:24.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -19,6 +20,7 @@
+
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+
+ #include "SNAPSHOT.h"
+diff -Naur iputils.orig/rarpd.c iputils/rarpd.c
+--- iputils.orig/rarpd.c 2001-12-02 18:45:06.000000000 +0000
++++ iputils/rarpd.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <dirent.h>
+@@ -26,6 +27,7 @@
+ #include <sys/signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+@@ -42,7 +44,9 @@
+ char *ifname;
+ char *tftp_dir = "/etc/tftpboot";
+
++#ifndef __UCLIBC__
+ extern int ether_ntohost(char *name, unsigned char *ea);
++#endif
+ void usage(void) __attribute__((noreturn));
+
+ struct iflink
+@@ -52,12 +56,12 @@
+ int hatype;
+ unsigned char lladdr[16];
+ unsigned char name[IFNAMSIZ];
+- struct ifaddr *ifa_list;
++ struct l_ifaddr *ifa_list;
+ } *ifl_list;
+
+-struct ifaddr
++struct l_ifaddr
+ {
+- struct ifaddr *next;
++ struct l_ifaddr *next;
+ __u32 prefix;
+ __u32 mask;
+ __u32 local;
+@@ -89,7 +93,7 @@
+ int fd;
+ struct ifreq *ifrp, *ifend;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct ifconf ifc;
+ struct ifreq ibuf[256];
+
+@@ -180,7 +184,7 @@
+ if (ifa == NULL) {
+ if (mask == 0 || prefix == 0)
+ continue;
+- ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++ ifa = (struct l_ifaddr*)malloc(sizeof(*ifa));
+ memset(ifa, 0, sizeof(*ifa));
+ ifa->local = addr;
+ ifa->prefix = prefix;
+@@ -236,10 +240,10 @@
+ return dent != NULL;
+ }
+
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct l_ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ int retry = 0;
+ int i;
+
+@@ -295,7 +299,7 @@
+
+ if (r == NULL) {
+ if (hatype == ARPHRD_ETHER && halen == 6) {
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct hostent *hp;
+ char ename[256];
+ static struct rarp_map emap = {
+@@ -305,7 +309,11 @@
+ 6,
+ };
+
++#ifndef __UCLIBC__
+ if (ether_ntohost(ename, lladdr) != 0 ||
++#else
++ if (
++#endif
+ (hp = gethostbyname(ename)) == NULL) {
+ if (verbose)
+ syslog(LOG_INFO, "not found in /etc/ethers");
+@@ -364,7 +372,7 @@
+ {
+ __u32 laddr = 0;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+diff -Naur iputils.orig/rdisc.c iputils/rdisc.c
+--- iputils.orig/rdisc.c 2001-08-24 17:39:00.000000000 +0000
++++ iputils/rdisc.c 2005-06-09 16:15:24.000000000 +0000
+@@ -25,6 +25,7 @@
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <signal.h>
+@@ -1504,5 +1505,5 @@
+ if (logging)
+ syslog(LOG_ERR, "%s: %m", str);
+ else
+- (void) fprintf(stderr, "%s: %s\n", str, sys_errlist[errno]);
++ (void) fprintf(stderr, "%s: %s\n", str, strerror(errno));
+ }
+diff -Naur iputils.orig/tftpd.c iputils/tftpd.c
+--- iputils.orig/tftpd.c 2002-01-24 00:31:41.000000000 +0000
++++ iputils/tftpd.c 2005-06-09 16:15:24.000000000 +0000
+@@ -48,6 +48,7 @@
+ * This version includes many modifications by Jim Guyton <guyton@rand-unix>
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+@@ -57,7 +58,6 @@
+
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-#include <linux/in6.h>
+ #include <netdb.h>
+
+ #include <setjmp.h>
+diff -Naur iputils.orig/tracepath.c iputils/tracepath.c
+--- iputils.orig/tracepath.c 2002-11-09 04:54:46.000000000 +0000
++++ iputils/tracepath.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,10 +9,12 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -76,7 +78,7 @@
+ int progress = -1;
+ int broken_router;
+
+-restart:
++ while (1) {
+ memset(&rcvbuf, -1, sizeof(rcvbuf));
+ iov.iov_base = &rcvbuf;
+ iov.iov_len = sizeof(rcvbuf);
+@@ -93,7 +95,7 @@
+ if (res < 0) {
+ if (errno == EAGAIN)
+ return progress;
+- goto restart;
++ continue;
+ }
+
+ progress = mtu;
+@@ -216,7 +218,7 @@
+ perror("NET ERROR");
+ return 0;
+ }
+- goto restart;
++ }
+ }
+
+ int probe_ttl(int fd, int ttl)
+@@ -227,7 +229,6 @@
+
+ memset(sndbuf,0,mtu);
+
+-restart:
+ for (i=0; i<10; i++) {
+ int res;
+
+@@ -243,7 +244,8 @@
+ if (res==0)
+ return 0;
+ if (res > 0)
+- goto restart;
++ i = 0;
++ continue;
+ }
+ hisptr = (hisptr + 1)&63;
+
+diff -Naur iputils.orig/tracepath6.c iputils/tracepath6.c
+--- iputils.orig/tracepath6.c 2001-09-02 02:03:46.000000000 +0000
++++ iputils/tracepath6.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,13 +9,13 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-
+-#include <linux/in6.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -66,7 +66,7 @@
+ int progress = -1;
+ int broken_router;
+
+-restart:
++ while (1) {
+ memset(&rcvbuf, -1, sizeof(rcvbuf));
+ iov.iov_base = &rcvbuf;
+ iov.iov_len = sizeof(rcvbuf);
+@@ -83,7 +83,7 @@
+ if (res < 0) {
+ if (errno == EAGAIN)
+ return progress;
+- goto restart;
++ continue;
+ }
+
+ progress = 2;
+@@ -222,34 +222,29 @@
+ perror("NET ERROR");
+ return 0;
+ }
+- goto restart;
++ }
+ }
+
+ int probe_ttl(int fd, int ttl)
+ {
+- int i;
++ int i=0, res;
+ char sndbuf[mtu];
+ struct probehdr *hdr = (struct probehdr*)sndbuf;
+
+-restart:
+-
+- for (i=0; i<10; i++) {
+- int res;
+-
+- hdr->ttl = ttl;
+- gettimeofday(&hdr->tv, NULL);
+- if (send(fd, sndbuf, mtu-overhead, 0) > 0)
+- break;
+- res = recverr(fd, ttl);
+- if (res==0)
+- return 0;
+- if (res > 0)
+- goto restart;
+- }
+-
+- if (i<10) {
+- int res;
+-
++ while (i<10) {
++ for (i=0; i<10; i++) {
++ hdr->ttl = ttl;
++ gettimeofday(&hdr->tv, NULL);
++ if (send(fd, sndbuf, mtu-overhead, 0) > 0)
++ break;
++ res = recverr(fd, ttl);
++ if (res==0)
++ return 0;
++ if (res > 0) {
++ i = 0;
++ continue;
++ }
++ }
+ data_wait(fd);
+ if (recv(fd, sndbuf, sizeof(sndbuf), MSG_DONTWAIT) > 0) {
+ printf("%2d?: reply received 8)\n", ttl);
+@@ -257,7 +252,7 @@
+ }
+ res = recverr(fd, ttl);
+ if (res == 1)
+- goto restart;
++ continue;
+ return res;
+ }
+
+diff -Naur iputils.orig/traceroute6.c iputils/traceroute6.c
+--- iputils.orig/traceroute6.c 2002-10-03 03:29:23.000000000 +0000
++++ iputils/traceroute6.c 2005-06-09 16:14:49.000000000 +0000
+@@ -244,11 +244,30 @@
+ #include <netinet/in.h>
+ #include <netinet/ip.h>
+ #include <netinet/ip_icmp.h>
++#if __linux__
++#include <linux/udp.h>
++#else
+ #include <netinet/udp.h>
++#endif
++
++#include <linux/types.h>
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
+
+-#include <linux/ipv6.h>
+-#include <linux/in6.h>
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
+
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
+ #include <linux/icmpv6.h>
+
+ #include <arpa/inet.h>
diff --git a/abs/core-testing/iputils/iputils-ss021109-try.patch b/abs/core-testing/iputils/iputils-ss021109-try.patch
new file mode 100644
index 0000000..4d9a705
--- /dev/null
+++ b/abs/core-testing/iputils/iputils-ss021109-try.patch
@@ -0,0 +1,239 @@
+diff -urN iputils.orig/Makefile iputils/Makefile
+--- iputils.orig/Makefile 2004-05-02 20:30:43.000000000 +0000
++++ iputils/Makefile 2004-05-02 20:30:48.000000000 +0000
+@@ -1,5 +1,4 @@
+ # Path to parent kernel include files directory
+-KERNEL_INCLUDE=/usr/src/linux/include
+ LIBC_INCLUDE=/usr/include
+
+ DEFINES=
+@@ -8,21 +7,6 @@
+ LDLIBS=-lresolv
+ ADDLIB=
+
+-ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
+- ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
+- GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+- endif
+-endif
+-ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
+- GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+-endif
+-
+-ifeq ($(KERNEL_INCLUDE)/linux/pfkeyv2.h,$(wildcard $(KERNEL_INCLUDE)/linux/pfkeyv2.h))
+- SUBDIRS=libipsec setkey
+- LDLIBS+=-Llibipsec -lipsec
+- IPSECDEF=-DDO_IPSEC -Ilibipsec
+-endif
+-
+
+ #options if you compile with libc5, and without a bind>=4.9.4 libresolv
+ # NOT AVAILABLE. Please, use libresolv.
+@@ -31,13 +15,13 @@
+ # What a pity, all new gccs are buggy and -Werror does not work. Sigh.
+ #CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g -Werror
+ CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS=$(CCOPT) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(IPSECDEF) $(DEFINES)
++CFLAGS=$(CCOPT) -I../include $(IPSECDEF) $(DEFINES)
+
+ IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd
+ IPV6_TARGETS=tracepath6 traceroute6 ping6
+ TARGETS=$(IPV4_TARGETS) $(IPV6_TARGETS)
+
+-all: check-kernel subdirs $(TARGETS)
++all: subdirs $(TARGETS)
+
+
+ tftpd: tftpd.o tftpsubs.o
+@@ -51,15 +35,6 @@
+ rdisc_srv.o: rdisc.c
+ $(CC) $(CFLAGS) -DRDISC_SERVER -o rdisc_srv.o rdisc.c
+
+-check-kernel:
+-ifeq ($(KERNEL_INCLUDE),)
+- @echo "Please, set correct KERNEL_INCLUDE"; false
+-else
+- @set -e; \
+- if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
+- echo "Please, set correct KERNEL_INCLUDE"; false; fi
+-endif
+-
+ subdirs:
+ ifneq ($(SUBDIRS),)
+ @set -e; \
+diff -urN iputils.orig/arping.c iputils/arping.c
+--- iputils.orig/arping.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/arping.c 2004-05-02 20:32:38.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdlib.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+@@ -19,6 +20,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
++#include <linux/if_packet.h>
+ #include <sys/uio.h>
+
+ #include <netdb.h>
+diff -urN iputils.orig/clockdiff.c iputils/clockdiff.c
+--- iputils.orig/clockdiff.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/clockdiff.c 2004-05-02 20:30:48.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+diff -urN iputils.orig/ping.c iputils/ping.c
+--- iputils.orig/ping.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/ping.c 2004-05-02 20:31:03.000000000 +0000
+@@ -61,7 +61,7 @@
+ #include "ping_common.h"
+
+ #include <netinet/ip.h>
+-#include <netinet/ip_icmp.h>
++#include <linux/icmp.h>
+ #ifdef DO_IPSEC
+ #include <libipsec.h>
+ #endif
+diff -urN iputils.orig/ping_common.h iputils/ping_common.h
+--- iputils.orig/ping_common.h 2004-05-02 20:30:43.000000000 +0000
++++ iputils/ping_common.h 2004-05-02 20:30:48.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+diff -urN iputils.orig/rarpd.c iputils/rarpd.c
+--- iputils.orig/rarpd.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/rarpd.c 2004-05-02 20:33:07.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <dirent.h>
+@@ -26,6 +27,7 @@
+ #include <sys/signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+@@ -52,12 +54,12 @@
+ int hatype;
+ unsigned char lladdr[16];
+ unsigned char name[IFNAMSIZ];
+- struct ifaddr *ifa_list;
++ struct l_ifaddr *ifa_list;
+ } *ifl_list;
+
+-struct ifaddr
++struct l_ifaddr
+ {
+- struct ifaddr *next;
++ struct l_ifaddr *next;
+ __u32 prefix;
+ __u32 mask;
+ __u32 local;
+@@ -89,7 +91,7 @@
+ int fd;
+ struct ifreq *ifrp, *ifend;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct ifconf ifc;
+ struct ifreq ibuf[256];
+
+@@ -180,7 +182,7 @@
+ if (ifa == NULL) {
+ if (mask == 0 || prefix == 0)
+ continue;
+- ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++ ifa = (struct l_ifaddr*)malloc(sizeof(*ifa));
+ memset(ifa, 0, sizeof(*ifa));
+ ifa->local = addr;
+ ifa->prefix = prefix;
+@@ -236,10 +238,10 @@
+ return dent != NULL;
+ }
+
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct l_ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ int retry = 0;
+ int i;
+
+@@ -295,7 +297,7 @@
+
+ if (r == NULL) {
+ if (hatype == ARPHRD_ETHER && halen == 6) {
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct hostent *hp;
+ char ename[256];
+ static struct rarp_map emap = {
+@@ -364,7 +366,7 @@
+ {
+ __u32 laddr = 0;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+diff -urN iputils.orig/rdisc.c iputils/rdisc.c
+--- iputils.orig/rdisc.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/rdisc.c 2004-05-02 20:30:48.000000000 +0000
+@@ -25,6 +25,7 @@
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <signal.h>
+diff -urN iputils.orig/tftpd.c iputils/tftpd.c
+--- iputils.orig/tftpd.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/tftpd.c 2004-05-02 20:30:48.000000000 +0000
+@@ -48,6 +48,7 @@
+ * This version includes many modifications by Jim Guyton <guyton@rand-unix>
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+diff -urN iputils.orig/tracepath.c iputils/tracepath.c
+--- iputils.orig/tracepath.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/tracepath.c 2004-05-02 20:30:48.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+diff -urN iputils.orig/traceroute6.c iputils/traceroute6.c
+--- iputils.orig/traceroute6.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/traceroute6.c 2004-05-02 20:30:48.000000000 +0000
+@@ -230,6 +230,7 @@
+ * Tue Dec 20 03:50:13 PST 1988
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/param.h>
+ #include <sys/time.h>
+ #include <sys/socket.h>
diff --git a/abs/core-testing/iputils/iputils.patch b/abs/core-testing/iputils/iputils.patch
new file mode 100644
index 0000000..4e99b75
--- /dev/null
+++ b/abs/core-testing/iputils/iputils.patch
@@ -0,0 +1,1170 @@
+--- iputils/ping_common.c.old Thu Mar 14 16:58:47 2002
++++ iputils/ping_common.c Thu Mar 14 17:10:54 2002
+@@ -775,10 +775,10 @@
+ tmdev = llsqrt(tsum2 - tsum * tsum);
+
+ printf("rtt min/avg/max/mdev = %ld.%03ld/%lu.%03ld/%ld.%03ld/%ld.%03ld ms",
+- tmin/1000, tmin%1000,
++ (long)tmin/1000, (long)tmin%1000,
+ (unsigned long)(tsum/1000), (long)(tsum%1000),
+- tmax/1000, tmax%1000,
+- tmdev/1000, tmdev%1000
++ (long)tmax/1000, (long)tmax%1000,
++ (long)tmdev/1000, (long)tmdev%1000
+ );
+ }
+ if (pipesize > 1)
+@@ -809,10 +809,10 @@
+ tavg = tsum / (nreceived + nrepeats);
+
+ fprintf(stderr, ", min/avg/ewma/max = %ld.%03ld/%lu.%03ld/%d.%03d/%ld.%03ld ms",
+- tmin/1000, tmin%1000,
++ (long)tmin/1000, (long)tmin%1000,
+ tavg/1000, tavg%1000,
+ rtt/8000, (rtt/8)%1000,
+- tmax/1000, tmax%1000
++ (long)tmax/1000, (long)tmax%1000
+ );
+ }
+ fprintf(stderr, "\n");
+--- iputils/rdisc.c-org Wed May 1 00:27:34 2002
++++ iputils/rdisc.c Wed May 1 00:32:40 2002
+@@ -63,6 +63,8 @@
+
+ #include "SNAPSHOT.h"
+
++#define RDISC_SERVER
++
+ struct interface
+ {
+ struct in_addr address; /* Used to identify the interface */
+@@ -163,11 +165,8 @@
+ int debugfile;
+
+ char usage[] =
+-"Usage: rdisc [-b] [-d] [-s] [-v] [-f] [-a] [-V] [send_address] [receive_address]\n"
+-#ifdef RDISC_SERVER
+-" rdisc -r [-b] [-d] [-s] [-v] [-f] [-a] [-V] [-p <preference>] [-T <secs>] \n"
+-" [send_address] [receive_address]\n"
+-#endif
++"Usage: rdisc -r [-b] [-d] [-s] [-v] [-f] [-a] [-V] [-p <preference>] [-T <secs>] \n"
++" [send_address] [receive_address]\n"
+ ;
+
+
+@@ -875,7 +874,9 @@
+ ((max_adv_int - min_adv_int)
+ * (random() % 1000)/1000);
+ } else {
+- if (!is_directly_connected(ip->saddr)) {
++ struct in_addr tmp;
++ tmp.s_addr = ip->saddr;
++ if (!is_directly_connected(tmp)) {
+ if (verbose)
+ logtrace("ICMP %s from %s: source not directly connected\n",
+ pr_type((int)icp->type),
+@@ -945,7 +946,6 @@
+ {
+ #ifdef RDISC_SERVER
+ if (responder) {
+- int i;
+
+ /* Send out a packet with a preference so that all
+ * hosts will know that we are dead.
+--- iputils/ping_common.c.countermeasures Tue May 21 10:06:05 2002
++++ iputils/ping_common.c Tue May 21 10:12:42 2002
+@@ -628,7 +628,8 @@
+ tvsub(tv, &tmp_tv);
+ triptime = tv->tv_sec * 1000000 + tv->tv_usec;
+ if (triptime < 0) {
+- fprintf(stderr, "Warning: time of day goes back (%ldus), taking countermeasures.\n", triptime);
++ if (options & F_VERBOSE)
++ fprintf(stderr, "Warning: time of day goes back (%ldus), taking countermeasures.\n", triptime);
+ triptime = 0;
+ if (!(options & F_LATENCY)) {
+ gettimeofday(tv, NULL);
+--- iputils/ping.c.addrcache 2002-09-20 17:08:11.000000000 +0200
++++ iputils/ping.c 2003-05-15 16:41:19.000000000 +0200
+@@ -1124,6 +1124,12 @@
+ {
+ struct hostent *hp;
+ static char buf[4096];
++ static __u32 addr_cache = 0;
++
++ if ( addr == addr_cache )
++ return buf;
++
++ addr_cache = addr;
+
+ if ((options & F_NUMERIC) ||
+ !(hp = gethostbyaddr((char *)&addr, 4, AF_INET)))
+--- iputils/ping6.c.addrcache 2002-09-20 17:08:11.000000000 +0200
++++ iputils/ping6.c 2003-05-15 16:41:19.000000000 +0200
+@@ -893,7 +893,14 @@
+ */
+ char * pr_addr(struct in6_addr *addr)
+ {
+- struct hostent *hp = NULL;
++ static struct hostent *hp = NULL;
++ static struct in6_addr addr_cache = {{{0,0,0,0}}};
++
++ if ( addr->s6_addr32[0] == addr_cache.s6_addr32[0] &&
++ addr->s6_addr32[1] == addr_cache.s6_addr32[1] &&
++ addr->s6_addr32[2] == addr_cache.s6_addr32[2] &&
++ addr->s6_addr32[3] == addr_cache.s6_addr32[3] )
++ return hp ? hp->h_name : pr_addr_n(addr);
+
+ if (!(options&F_NUMERIC))
+ hp = gethostbyaddr((__u8*)addr, sizeof(struct in6_addr), AF_INET6);
+--- iputils-ss021109-vanilla/ping.c Thu Nov 7 23:53:21 2002
++++ iputils/ping.c Sun Jan 12 03:39:24 2003
+@@ -285,6 +285,9 @@
+ perror("ping: IP_MULTICAST_IF");
+ exit(2);
+ }
++ } else if (icmp_sock >= 0) {
++ /* We possible tried to SO_BINDTODEVICE() a subinterface like 'eth0:1' */
++ perror("Warning: cannot bind to specified iface, falling back");
+ }
+ }
+ }
+--- iputils/ping.c.icmp_seq 2003-09-03 16:45:07.000000000 +0200
++++ iputils/ping.c 2003-09-03 16:45:41.000000000 +0200
+@@ -610,7 +610,7 @@
+ icp->type = ICMP_ECHO;
+ icp->code = 0;
+ icp->checksum = 0;
+- icp->un.echo.sequence = htons(ntransmitted+1);
++ icp->un.echo.sequence = htons(ntransmitted);
+ icp->un.echo.id = ident; /* ID */
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+--- iputils/ping6.c.icmp_seq 2003-09-03 16:45:20.000000000 +0200
++++ iputils/ping6.c 2003-09-03 16:45:34.000000000 +0200
+@@ -647,7 +647,7 @@
+ icmph->icmp6_type = ICMPV6_ECHO_REQUEST;
+ icmph->icmp6_code = 0;
+ icmph->icmp6_cksum = 0;
+- icmph->icmp6_sequence = htons(ntransmitted+1);
++ icmph->icmp6_sequence = htons(ntransmitted);
+ icmph->icmp6_identifier = ident;
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+diff -ru iputils/include-glibc/netinet/in.h iputils-clean/include-glibc/netinet/in.h
+--- iputils/include-glibc/netinet/in.h 2000-06-18 14:57:25.000000000 -0400
++++ iputils-clean/include-glibc/netinet/in.h 2003-09-03 11:21:55.000000000 -0400
+@@ -8,4 +8,45 @@
+
+ #define SOL_IP 0
+
+-#endif /* netinet/in.h */
++/* Functions to convert between host and network byte order.
++
++ Please note that these functions normally take `unsigned long int' or
++ `unsigned short int' values as arguments and also return them. But
++ this was a short-sighted decision since on different systems the types
++ may have different representations but the values are always the same. */
++
++extern u_int32_t ntohl (u_int32_t __netlong) __THROW __attribute__ ((__const__));
++extern u_int16_t ntohs (u_int16_t __netshort)
++ __THROW __attribute__ ((__const__));
++extern u_int32_t htonl (u_int32_t __hostlong)
++ __THROW __attribute__ ((__const__));
++extern u_int16_t htons (u_int16_t __hostshort)
++ __THROW __attribute__ ((__const__));
++
++#include <endian.h>
++
++/* Get machine dependent optimized versions of byte swapping functions. */
++#include <bits/byteswap.h>
++
++#ifdef __OPTIMIZE__
++/* We can optimize calls to the conversion functions. Either nothing has
++ to be done or we are using directly the byte-swapping functions which
++ often can be inlined. */
++# if __BYTE_ORDER == __BIG_ENDIAN
++/* The host byte order is the same as network byte order,
++ so these functions are all just identity. */
++# define ntohl(x) (x)
++# define ntohs(x) (x)
++# define htonl(x) (x)
++# define htons(x) (x)
++# else
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++# define ntohl(x) __bswap_32 (x)
++# define ntohs(x) __bswap_16 (x)
++# define htonl(x) __bswap_32 (x)
++# define htons(x) __bswap_16 (x)
++# endif
++# endif
++#endif
++
++#endif /* netinet/in.h */
+diff -ru iputils/ping6.c iputils-clean/ping6.c
+--- iputils/ping6.c 2003-09-03 11:22:46.000000000 -0400
++++ iputils-clean/ping6.c 2003-09-03 11:15:42.000000000 -0400
+@@ -879,7 +879,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -ru iputils/ping.c iputils-clean/ping.c
+--- iputils/ping.c 2003-09-03 11:22:46.000000000 -0400
++++ iputils-clean/ping.c 2003-09-03 11:15:26.000000000 -0400
+@@ -1196,7 +1196,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -urN iputils/clockdiff.c iputils.new/clockdiff.c
+--- iputils/clockdiff.c 2002-02-22 19:10:59.000000000 -0500
++++ iputils.new/clockdiff.c 2003-09-10 09:20:28.000000000 -0400
+@@ -2,6 +2,7 @@
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
++#include <linux/types.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <math.h>
+diff -urN iputils/ping6.c iputils.new/ping6.c
+--- iputils/ping6.c 2003-09-10 17:27:48.000000000 -0400
++++ iputils.new/ping6.c 2003-09-10 17:22:43.000000000 -0400
+@@ -68,8 +68,44 @@
+ */
+ #include "ping_common.h"
+
+-#include <linux/in6.h>
+-#include <linux/ipv6.h>
++struct ipv6_rt_hdr {
++ __u8 nexthdr;
++ __u8 hdrlen;
++ __u8 type;
++ __u8 segments_left;
++
++ /*
++ * type specific data
++ * variable length field
++ */
++};
++
++struct rt0_hdr {
++ struct ipv6_rt_hdr rt_hdr;
++ __u32 bitmap; /* strict/loose bit map */
++ struct in6_addr addr[0];
++
++#define rt0_type rt_hdr.type;
++};
++#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
++
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
++
+ #include <linux/icmpv6.h>
+
+ #define BIT_CLEAR(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] &= ~(1U << ((nr) & 31)); } while(0)
+diff -urN iputils/ping_common.h iputils.new/ping_common.h
+--- iputils/ping_common.h 2002-09-20 11:08:11.000000000 -0400
++++ iputils.new/ping_common.h 2003-09-10 17:16:16.000000000 -0400
+@@ -19,6 +19,7 @@
+
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+
+ #include "SNAPSHOT.h"
+diff -urN iputils/tftpd.c iputils.new/tftpd.c
+--- iputils/tftpd.c 2002-01-23 19:31:41.000000000 -0500
++++ iputils.new/tftpd.c 2003-09-10 09:39:45.000000000 -0400
+@@ -57,7 +57,6 @@
+
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-#include <linux/in6.h>
+ #include <netdb.h>
+
+ #include <setjmp.h>
+diff -urN iputils/tracepath6.c iputils.new/tracepath6.c
+--- iputils/tracepath6.c 2001-09-01 22:03:46.000000000 -0400
++++ iputils.new/tracepath6.c 2003-09-10 09:40:18.000000000 -0400
+@@ -14,8 +14,7 @@
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-
+-#include <linux/in6.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+diff -urN iputils/tracepath.c iputils.new/tracepath.c
+--- iputils/tracepath.c 2002-02-22 19:10:59.000000000 -0500
++++ iputils.new/tracepath.c 2003-09-10 06:14:35.000000000 -0400
+@@ -13,6 +13,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+diff -urN iputils/traceroute6.c iputils.new/traceroute6.c
+--- iputils/traceroute6.c 2002-09-20 11:44:22.000000000 -0400
++++ iputils.new/traceroute6.c 2003-09-10 10:12:47.000000000 -0400
+@@ -246,9 +246,24 @@
+ #include <netinet/ip_icmp.h>
+ #include <netinet/udp.h>
+
+-#include <linux/ipv6.h>
+-#include <linux/in6.h>
++#include <linux/types.h>
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
+
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
+ #include <linux/icmpv6.h>
+
+ #include <arpa/inet.h>
+--- iputils/arping.c.unaligned 2001-10-06 00:42:47.000000000 +0200
++++ iputils/arping.c 2003-10-02 15:14:42.000000000 +0200
+@@ -332,7 +332,7 @@
+ timeout = atoi(optarg);
+ break;
+ case 'I':
+- device = optarg;
++ device = strdup(optarg);
+ break;
+ case 'f':
+ quit_on_reply=1;
+--- iputils/traceroute6.c.inet_pton 2004-04-22 15:06:28.268797480 +0200
++++ iputils/traceroute6.c 2004-04-22 15:06:35.727877941 +0200
+@@ -538,7 +538,7 @@
+ } else {
+ (void) bzero((char *)&saddr, sizeof(saddr));
+ saddr.sin6_family = AF_INET6;
+- if (inet_pton(AF_INET6, source, &saddr.sin6_addr) < 0)
++ if (inet_pton(AF_INET6, source, &saddr.sin6_addr) <= 0)
+ {
+ Printf("traceroute: unknown addr %s\n", source);
+ exit(1);
+--- iputils/traceroute6.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/traceroute6.c 2004-12-07 11:14:09.397575536 +0100
+@@ -352,8 +352,11 @@
+ icmp_sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+ socket_errno = errno;
+
+- setuid(getuid());
+-
++ if(setuid(getuid()) != 0)
++ {
++ perror("traceroute: setuid()");
++ exit(-1);
++ }
+ on = 1;
+ seq = tos = 0;
+ to = (struct sockaddr_in6 *)&whereto;
+--- iputils/ping6.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/ping6.c 2004-12-07 11:13:40.707937024 +0100
+@@ -223,7 +223,11 @@
+ socket_errno = errno;
+
+ uid = getuid();
+- setuid(uid);
++ if(setuid(uid) != 0)
++ {
++ perror("ping: setuid()");
++ exit(-1);
++ }
+
+ source.sin6_family = AF_INET6;
+ memset(&firsthop, 0, sizeof(firsthop));
+--- iputils/ping.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/ping.c 2004-12-07 11:13:27.523941296 +0100
+@@ -119,7 +119,11 @@
+ socket_errno = errno;
+
+ uid = getuid();
+- setuid(uid);
++ if(setuid(uid) != 0)
++ {
++ perror("ping: setuid()");
++ exit(-1);
++ }
+
+ source.sin_family = AF_INET;
+
+--- iputils/doc/ping.8.old 2002-09-27 19:12:47.000000000 +0200
++++ iputils/doc/ping.8 2004-12-07 11:09:42.434160144 +0100
+@@ -112,7 +112,7 @@
+ when finished.
+ .TP
+ \fB-R\fR
+-Record route.
++Record route. (IPv4 only)
+ Includes the RECORD_ROUTE option in the ECHO_REQUEST
+ packet and displays the route buffer on returned packets.
+ Note that the IP header is only large enough for nine such routes.
+--- iputils/doc/ping.sgml.old 2002-09-20 14:55:50.000000000 +0200
++++ iputils/doc/ping.sgml 2004-12-07 11:09:42.435159992 +0100
+@@ -190,7 +190,7 @@
+ <varlistentry>
+ <term><option/-R/</term>
+ <listitem><para>
+-Record route.
++Record route. (IPv4 only)
+ Includes the RECORD_ROUTE option in the ECHO_REQUEST
+ packet and displays the route buffer on returned packets.
+ Note that the IP header is only large enough for nine such routes.
+--- iputils/ping.c 2005-05-18 01:37:05.621810488 -0400
++++ iputils/ping.c.new 2005-05-18 01:41:27.113018222 -0400
+@@ -101,7 +101,7 @@ static struct {
+ int cmsg_len;
+
+ struct sockaddr_in source;
+-char *device;
++char *device=NULL;
+ int pmtudisc = -1;
+
+
+@@ -177,7 +177,7 @@ main(int argc, char **argv)
+ ptr[3] = i4;
+ options |= F_STRICTSOURCE;
+ } else {
+- device = optarg;
++ device = strdup(optarg);
+ }
+ break;
+ }
+--- iputils/ping6.c 2005-05-18 01:37:05.620833925 -0400
++++ iputils/ping6.c.new 2005-05-18 01:41:23.599346390 -0400
+@@ -155,7 +155,7 @@ static int pr_icmph(__u8 type, __u8 code
+ static void usage(void) __attribute((noreturn));
+
+ struct sockaddr_in6 source;
+-char *device;
++char *device=NULL;
+ int pmtudisc=-1;
+
+ static int icmp_sock;
+@@ -248,7 +248,7 @@ int main(int argc, char *argv[])
+ }
+ options |= F_STRICTSOURCE;
+ } else {
+- device = optarg;
++ device = strdup(optarg);
+ }
+ break;
+ case 'M':
+diff -ur iputils/arping.c iputils.tom/arping.c
+--- iputils/arping.c 2005-07-15 13:51:15.533632784 -0700
++++ iputils.tom/arping.c 2005-07-15 13:50:47.967823000 -0700
+@@ -59,6 +59,8 @@
+ #define MS_TDIFF(tv1,tv2) ( ((tv1).tv_sec-(tv2).tv_sec)*1000 + \
+ ((tv1).tv_usec-(tv2).tv_usec)/1000 )
+
++#define min(x,y) ((x)<(y) ? (x) : (y))
++
+ void usage(void)
+ {
+ fprintf(stderr,
+@@ -476,7 +478,7 @@
+ }
+
+ he = me;
+- memset(he.sll_addr, -1, he.sll_halen);
++ memset(he.sll_addr, -1, min(he.sll_halen, sizeof he.sll_addr));
+
+ if (!quiet) {
+ printf("ARPING %s ", inet_ntoa(dst));
+--- iputils/arping.c.orig 2001-10-05 18:42:47.000000000 -0400
++++ iputils/arping.c 2005-07-13 13:07:45.406217716 -0400
+@@ -166,10 +166,12 @@ void catcher(void)
+ if (start.tv_sec==0)
+ start = tv;
+
+- if (count-- == 0 || (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500))
++ if ((timeout && MS_TDIFF(tv,start) > timeout*1000 + 500) ||
++ ((count == 0) && (!timeout)))
+ finish();
+
+ if (last.tv_sec==0 || MS_TDIFF(tv,last) > 500) {
++ count--;
+ send_pack(s, src, dst, &me, &he);
+ if (count == 0 && unsolicited)
+ finish();
+@@ -510,6 +512,8 @@ main(int argc, char **argv)
+ sigaddset(&sset, SIGINT);
+ sigprocmask(SIG_BLOCK, &sset, &osset);
+ recv_pack(packet, cc, &from);
++ if(received == count)
++ exit(0);
+ sigprocmask(SIG_SETMASK, &osset, NULL);
+ }
+ }
+--- iputils/tracepath6.c.getaddrinfo 2005-09-08 10:31:47.000000000 +0200
++++ iputils/tracepath6.c 2005-09-08 10:31:47.000000000 +0200
+@@ -280,7 +280,7 @@
+ struct sockaddr_in6 sin;
+ int ttl;
+ char *p;
+- struct hostent *he;
++ struct addrinfo hints, *res;
+ int ch;
+
+ while ((ch = getopt(argc, argv, "nbh?")) != EOF) {
+@@ -308,20 +308,26 @@
+ perror("socket");
+ exit(1);
+ }
+- sin.sin6_family = AF_INET6;
+
+ p = strchr(argv[0], '/');
+ if (p) {
+ *p = 0;
++ }
++
++ memset(&hints, '\0', sizeof(hints));
++ hints.ai_family = AF_INET6;
++ if (getaddrinfo(argv[0], NULL, &hints, &res)) {
++ herror("getaddrinfo");
++ exit(1);
++ }
++
++ memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in6));
++ freeaddrinfo(res);
++
++ if (p) {
+ sin.sin6_port = htons(atoi(p+1));
+ } else
+ sin.sin6_port = htons(0x8000 | getpid());
+- he = gethostbyname2(argv[0], AF_INET6);
+- if (he == NULL) {
+- herror("gethostbyname2");
+- exit(1);
+- }
+- memcpy(&sin.sin6_addr, he->h_addr, 16);
+
+ if (connect(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0) {
+ perror("connect");
+--- iputils/tracepath.c.getaddrinfo 2005-09-08 10:31:47.000000000 +0200
++++ iputils/tracepath.c 2005-09-08 11:03:39.000000000 +0200
+@@ -272,12 +272,12 @@
+ int
+ main(int argc, char **argv)
+ {
+- struct hostent *he;
+ int fd;
+ int on;
+ int ttl;
+ char *p;
+ int ch;
++ struct addrinfo hints, *res;
+
+ while ((ch = getopt(argc, argv, "nh?")) != EOF) {
+ switch(ch) {
+@@ -300,20 +300,26 @@
+ perror("socket");
+ exit(1);
+ }
+- target.sin_family = AF_INET;
+
+ p = strchr(argv[0], '/');
+ if (p) {
+ *p = 0;
++ }
++
++ memset(&hints, '\0', sizeof(hints));
++ hints.ai_family = AF_INET;
++ if (getaddrinfo(argv[0], NULL, &hints, &res)) {
++ herror("getaddrinfo");
++ exit(1);
++ }
++
++ memcpy(&target, res->ai_addr, sizeof(struct sockaddr_in));
++ freeaddrinfo(res);
++
++ if (p)
+ base_port = atoi(p+1);
+- } else
++ else
+ base_port = 44444;
+- he = gethostbyname(argv[0]);
+- if (he == NULL) {
+- herror("gethostbyname");
+- exit(1);
+- }
+- memcpy(&target.sin_addr, he->h_addr, 4);
+
+ on = IP_PMTUDISC_DO;
+ if (setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &on, sizeof(on))) {
+--- iputils/ping.c.flood 2005-09-26 09:26:49.000000000 +0200
++++ iputils/ping.c 2005-09-26 13:07:39.000000000 +0200
+@@ -614,7 +608,7 @@
+ icp->type = ICMP_ECHO;
+ icp->code = 0;
+ icp->checksum = 0;
+- icp->un.echo.sequence = htons(ntransmitted);
++ icp->un.echo.sequence = htons(ntransmitted+1);
+ icp->un.echo.id = ident; /* ID */
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+diff -ru iputils/ping_common.c iputils-foo/ping_common.c
+--- iputils/ping_common.c 2005-09-22 15:22:57.000000000 -0400
++++ iputils-foo/ping_common.c 2005-09-22 15:24:42.000000000 -0400
+@@ -584,6 +584,7 @@
+ * destined to other running pings. */
+
+ iov.iov_len = packlen;
++ memset(&msg,'\0',sizeof(msg));
+ msg.msg_name = addrbuf;
+ msg.msg_namelen = sizeof(addrbuf);
+ msg.msg_iov = &iov;
+--- iputils/tracepath6.c.hoplimit 2005-12-13 13:32:56.000000000 +0100
++++ iputils/tracepath6.c 2005-12-13 13:35:01.000000000 +0100
+@@ -359,8 +359,8 @@
+ perror("IP_RECVERR");
+ exit(1);
+ }
+- if (setsockopt(fd, SOL_IPV6, IPV6_HOPLIMIT, &on, sizeof(on))) {
+- perror("IPV6_HOPLIMIT");
++ if (setsockopt(fd, SOL_IPV6, IPV6_RECVHOPLIMIT, &on, sizeof(on))) {
++ perror("IPV6_RECVHOPLIMIT");
+ exit(1);
+ }
+ if (mapped && setsockopt(fd, SOL_IP, IP_RECVTTL, &on, sizeof(on))) {
+--- iputils/ping6.c.hoplimit 2005-12-13 13:32:56.000000000 +0100
++++ iputils/ping6.c 2005-12-13 13:34:04.000000000 +0100
+@@ -521,13 +521,10 @@
+ }
+ }
+
+- if (1) {
+- int on = 1;
+- if (setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_HOPLIMIT,
+- &on, sizeof(on)) == -1) {
+- perror ("can't receive hop limit");
+- exit(2);
+- }
++ int on = 1;
++ if (setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on, sizeof(on))) {
++ perror("setsockopt(IPV6_RECVHOPLIMIT)");
++ exit(2);
+ }
+
+ if (options&F_FLOWINFO) {
+--- iputils/ping6.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping6.c 2006-01-25 16:21:47.000000000 +0100
+@@ -383,7 +383,7 @@
+ exit(2);
+ }
+ alen = sizeof(source);
+- if (getsockname(probe_fd, (struct sockaddr*)&source, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&source, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -599,6 +599,7 @@
+ int net_errors = 0;
+ int local_errors = 0;
+ int saved_errno = errno;
++ ssize_t wr_ret;
+
+ iov.iov_base = &icmph;
+ iov.iov_len = sizeof(icmph);
+@@ -629,7 +630,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else if (e->ee_errno != EMSGSIZE)
+ fprintf(stderr, "ping: local error: %s\n", strerror(e->ee_errno));
+ else
+@@ -652,7 +653,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ } else {
+ printf("From %s icmp_seq=%u ", pr_addr(&sin6->sin6_addr), ntohs(icmph.icmp6_sequence));
+ pr_icmph(e->ee_type, e->ee_code, e->ee_info);
+@@ -795,7 +796,8 @@
+ return 0;
+ nerrors++;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ ssize_t wr_ret;
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ return 0;
+ }
+ printf("From %s: icmp_seq=%u ", pr_addr(&from->sin6_addr), ntohs(icmph1->icmp6_sequence));
+--- iputils/arping.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/arping.c 2006-01-25 16:21:47.000000000 +0100
+@@ -449,7 +449,7 @@
+ perror("connect");
+ exit(2);
+ }
+- if (getsockname(probe_fd, (struct sockaddr*)&saddr, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&saddr, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -468,7 +468,7 @@
+
+ if (1) {
+ int alen = sizeof(me);
+- if (getsockname(s, (struct sockaddr*)&me, &alen) == -1) {
++ if (getsockname(s, (struct sockaddr*)&me, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -499,13 +499,13 @@
+
+ while(1) {
+ sigset_t sset, osset;
+- char packet[4096];
++ unsigned char packet[4096];
+ struct sockaddr_ll from;
+ int alen = sizeof(from);
+ int cc;
+
+ if ((cc = recvfrom(s, packet, sizeof(packet), 0,
+- (struct sockaddr *)&from, &alen)) < 0) {
++ (struct sockaddr *)&from, (socklen_t*)&alen)) < 0) {
+ perror("arping: recvfrom");
+ continue;
+ }
+--- iputils/traceroute6.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/traceroute6.c 2006-01-25 16:21:47.000000000 +0100
+@@ -529,7 +529,7 @@
+ exit(1);
+ }
+ alen = sizeof(saddr);
+- if (getsockname(probe_fd, (struct sockaddr*)&saddr, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&saddr, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(1);
+ }
+@@ -656,7 +656,7 @@
+
+ if (select(sock+1, &fds, (fd_set *)0, (fd_set *)0, &wait) > 0) {
+ cc=recvfrom(icmp_sock, (char *)packet, sizeof(packet), 0,
+- (struct sockaddr *)from, &fromlen);
++ (struct sockaddr *)from, (socklen_t*)&fromlen);
+ }
+
+ return(cc);
+--- iputils/tftpd.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/tftpd.c 2006-01-25 16:21:47.000000000 +0100
+@@ -126,7 +126,7 @@
+ }
+ fromlen = sizeof (from);
+ n = recvfrom(0, buf, sizeof (buf), 0,
+- (struct sockaddr *)&from, &fromlen);
++ (struct sockaddr *)&from, (socklen_t*)&fromlen);
+ if (n < 0) {
+ if (errno != EAGAIN)
+ syslog(LOG_ERR, "recvfrom: %m\n");
+@@ -164,9 +164,9 @@
+ * than one tftpd being started up to service
+ * a single request from a single client.
+ */
+- j = sizeof from;
++ j = sizeof (from);
+ i = recvfrom(0, buf, sizeof (buf), 0,
+- (struct sockaddr *)&from, &j);
++ (struct sockaddr *)&from, (socklen_t*)&j);
+ if (i > 0) {
+ n = i;
+ fromlen = j;
+--- iputils/clockdiff.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/clockdiff.c 2006-01-25 16:21:47.000000000 +0100
+@@ -148,7 +148,7 @@
+ if (select(FD_SETSIZE, &ready, (fd_set *)0, (fd_set *)0, &tout)) {
+ length = sizeof(struct sockaddr_in);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+ if (cc < 0)
+ return -1;
+ goto empty;
+@@ -214,7 +214,7 @@
+
+ (void)gettimeofday(&tv1, (struct timezone *)0);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+
+ if (cc < 0)
+ return(-1);
+@@ -326,7 +326,7 @@
+ if (select(FD_SETSIZE, &ready, (fd_set *)0, (fd_set *)0, &tout)) {
+ length = sizeof(struct sockaddr_in);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+ if (cc < 0)
+ return -1;
+ goto empty;
+@@ -396,7 +396,7 @@
+
+ (void)gettimeofday(&tv1, (struct timezone *)0);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+
+ if (cc < 0)
+ return(-1);
+@@ -539,6 +539,7 @@
+ struct hostent * hp;
+ char hostname[MAXHOSTNAMELEN];
+ int s_errno = 0;
++ int nice_ret;
+
+ if (argc < 2) {
+ setuid(getuid());
+@@ -606,7 +607,7 @@
+ rspace[1] = ip_opt_len;
+ rspace[2] = 5;
+ rspace[3] = IPOPT_TS_PRESPEC;
+- if (getsockname(sock_raw, (struct sockaddr*)&myaddr, &addrlen) == -1) {
++ if (getsockname(sock_raw, (struct sockaddr*)&myaddr, (socklen_t*)&addrlen) == -1) {
+ perror("getsockname");
+ exit(1);
+ }
+@@ -623,8 +624,13 @@
+ ip_opt_len = 0;
+ }
+ }
+-
+- nice(-16);
++ nice_ret = nice(-16);
++ if (nice_ret < 0) {
++ if (errno)
++ perror("nice");
++ else
++ fprintf(stderr, "nice: unknown failure\n");
++ }
+
+ if ((measure_status = (ip_opt_len ? measure_opt : measure)(&server)) < 0) {
+ if (errno)
+--- iputils/rdisc.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/rdisc.c 2006-01-25 16:21:47.000000000 +0100
+@@ -454,7 +454,7 @@
+ int cc;
+
+ cc=recvfrom(s, (char *)packet, len, 0,
+- (struct sockaddr *)&from, &fromlen);
++ (struct sockaddr *)&from, (socklen_t*)&fromlen);
+ if (cc<0) {
+ if (errno == EINTR)
+ continue;
+--- iputils/rarpd.c.gcc41 2001-12-02 19:45:06.000000000 +0100
++++ iputils/rarpd.c 2006-01-25 16:21:47.000000000 +0100
+@@ -154,8 +154,8 @@
+ ifl->index = index;
+ ifl->hatype = ifrp->ifr_hwaddr.sa_family;
+ memcpy(ifl->lladdr, ifrp->ifr_hwaddr.sa_data, 14);
+- strncpy(ifl->name, ifrp->ifr_name, IFNAMSIZ);
+- p = strchr(ifl->name, ':');
++ strncpy((char*)ifl->name, ifrp->ifr_name, IFNAMSIZ);
++ p = strchr((char*)ifl->name, ':');
+ if (p)
+ *p = 0;
+ if (verbose)
+@@ -423,7 +423,7 @@
+ unsigned char *ptr;
+ int n;
+
+- n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, &sll_len);
++ n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, (socklen_t*)&sll_len);
+ if (n<0) {
+ if (errno != EINTR && errno != EAGAIN)
+ syslog(LOG_ERR, "recvfrom: %m");
+@@ -531,7 +531,7 @@
+ /* Update our ARP cache. Probably, this guy
+ will not able to make ARP (if it is broken)
+ */
+- arp_advise(sll.sll_ifindex, rmap->lladdr, rmap->lladdr_len, rmap->ipaddr);
++ arp_advise(sll.sll_ifindex,(unsigned char *)rmap->lladdr, rmap->lladdr_len, rmap->ipaddr);
+
+ /* Sendto is blocking, but with 5sec timeout */
+ alarm(5);
+@@ -673,8 +673,15 @@
+ perror("rarpd: fork");
+ exit(1);
+ }
++ int chdir_ret = chdir("/");
++ if (chdir_ret != 0) {
++ if (errno)
++ perror("chdir");
++ else
++ fprintf(stderr, "chdir: Uknown error\n");
++ }
+
+- chdir("/");
++
+ fd = open("/dev/null", O_RDWR);
+ if (fd >= 0) {
+ dup2(fd, 0);
+--- iputils/ping_common.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping_common.c 2006-01-25 16:21:47.000000000 +0100
+@@ -284,6 +284,7 @@
+ static int oom_count;
+ static int tokens;
+ int i;
++ ssize_t wr_ret;
+
+ /* Have we already sent enough? If we have, return an arbitrary positive value. */
+ if (exiting || (npackets && ntransmitted >= npackets && !deadline))
+@@ -327,7 +328,7 @@
+ * high preload or pipe size is very confusing. */
+ if ((preload < screen_width && pipesize < screen_width) ||
+ in_flight() < screen_width)
+- write(STDOUT_FILENO, ".", 1);
++ wr_ret = write(STDOUT_FILENO, ".", 1);
+ }
+ return interval - tokens;
+ }
+@@ -380,7 +381,7 @@
+
+ if (i == 0 && !(options & F_QUIET)) {
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else
+ perror("ping: sendmsg");
+ }
+@@ -402,8 +403,8 @@
+ rcvbuf = hold = alloc * preload;
+ if (hold < 65536)
+ hold = 65536;
+- setsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, sizeof(hold));
+- if (getsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, &tmplen) == 0) {
++ setsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, (socklen_t)sizeof(hold));
++ if (getsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, (socklen_t*)&tmplen) == 0) {
+ if (hold < rcvbuf)
+ fprintf(stderr, "WARNING: probably, rcvbuf is not enough to hold preload.\n");
+ }
+@@ -650,7 +651,8 @@
+ {
+ int dupflag = 0;
+ long triptime = 0;
+-
++ ssize_t wr_ret;
++
+ ++nreceived;
+ if (!csfailed)
+ acknowledge(seq);
+@@ -706,9 +708,9 @@
+
+ if (options & F_FLOOD) {
+ if (!csfailed)
+- write(STDOUT_FILENO, "\b \b", 3);
++ wr_ret = write(STDOUT_FILENO, "\b \b", 3);
+ else
+- write(STDOUT_FILENO, "\bC", 1);
++ wr_ret = write(STDOUT_FILENO, "\bC", 1);
+ } else {
+ int i;
+ __u8 *cp, *dp;
+--- iputils/ping.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping.c 2006-01-25 16:21:47.000000000 +0100
+@@ -314,7 +314,7 @@
+ }
+ }
+ alen = sizeof(source);
+- if (getsockname(probe_fd, (struct sockaddr*)&source, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&source, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -517,6 +517,7 @@
+ int net_errors = 0;
+ int local_errors = 0;
+ int saved_errno = errno;
++ ssize_t wr_ret;
+
+ iov.iov_base = &icmph;
+ iov.iov_len = sizeof(icmph);
+@@ -547,7 +548,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else if (e->ee_errno != EMSGSIZE)
+ fprintf(stderr, "ping: local error: %s\n", strerror(e->ee_errno));
+ else
+@@ -583,7 +584,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ } else {
+ printf("From %s icmp_seq=%u ", pr_addr(sin->sin_addr.s_addr), ntohs(icmph.un.echo.sequence));
+ pr_icmph(e->ee_type, e->ee_code, e->ee_info, NULL);
+@@ -677,6 +678,7 @@
+ struct iphdr *ip;
+ int hlen;
+ int csfailed;
++ ssize_t wr_ret;
+
+ /* Check the IP header */
+ ip = (struct iphdr *)buf;
+@@ -748,7 +750,7 @@
+ return !error_pkt;
+ if (options & F_FLOOD) {
+ if (error_pkt)
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ return !error_pkt;
+ }
+ printf("From %s: icmp_seq=%u ",
+@@ -765,9 +767,9 @@
+ }
+ if ((options & F_FLOOD) && !(options & (F_VERBOSE|F_QUIET))) {
+ if (!csfailed)
+- write(STDOUT_FILENO, "!E", 2);
++ wr_ret = write(STDOUT_FILENO, "!E", 2);
+ else
+- write(STDOUT_FILENO, "!EC", 3);
++ wr_ret = write(STDOUT_FILENO, "!EC", 3);
+ return 0;
+ }
+ if (!(options & F_VERBOSE) || uid)
+--- iputils/ping6.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping6.c 2006-02-06 10:35:38.000000000 +0100
+@@ -353,7 +353,7 @@
+ hostname = target;
+
+ if (ipv6_addr_any(&source.sin6_addr)) {
+- int alen;
++ socklen_t alen;
+ int probe_fd = socket(AF_INET6, SOCK_DGRAM, 0);
+
+ if (probe_fd < 0) {
+--- iputils/ping.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping.c 2006-02-06 10:34:35.000000000 +0100
+@@ -253,7 +253,7 @@
+ }
+
+ if (source.sin_addr.s_addr == 0) {
+- int alen;
++ socklen_t alen;
+ struct sockaddr_in dst = whereto;
+ int probe_fd = socket(AF_INET, SOCK_DGRAM, 0);
+
+@@ -855,9 +855,36 @@
+ case ICMP_SR_FAILED:
+ printf("Source Route Failed\n");
+ break;
++ case ICMP_NET_UNKNOWN:
++ printf("Destination Net Unknown\n");
++ break;
++ case ICMP_HOST_UNKNOWN:
++ printf("Destination Host Unknown\n");
++ break;
++ case ICMP_HOST_ISOLATED:
++ printf("Source Host Isolated\n");
++ break;
++ case ICMP_NET_ANO:
++ printf("Destination Net Prohibited\n");
++ break;
++ case ICMP_HOST_ANO:
++ printf("Destination Host Prohibited\n");
++ break;
++ case ICMP_NET_UNR_TOS:
++ printf("Destination Net Unreachable for Type of Service\n");
++ break;
++ case ICMP_HOST_UNR_TOS:
++ printf("Destination Host Unreachable for Type of Service\n");
++ break;
+ case ICMP_PKT_FILTERED:
+ printf("Packet filtered\n");
+ break;
++ case ICMP_PREC_VIOLATION:
++ printf("Precedence Violation\n");
++ break;
++ case ICMP_PREC_CUTOFF:
++ printf("Precedence Cutoff\n");
++ break;
+ default:
+ printf("Dest Unreachable, Bad Code: %d\n", code);
+ break;
+--- iputils/ping_common.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping_common.c 2006-02-06 10:34:35.000000000 +0100
+@@ -67,7 +67,7 @@
+ int ii, jj, kk;
+ int pat[16];
+ char *cp;
+- char *bp = outpack+8;
++ unsigned char *bp = outpack+8;
+
+ for (cp = patp; *cp; cp++) {
+ if (!isxdigit(*cp)) {
+@@ -393,7 +393,7 @@
+ void sock_setbufs(int icmp_sock, int alloc)
+ {
+ int rcvbuf, hold;
+- int tmplen = sizeof(hold);
++ socklen_t tmplen = sizeof(hold);
+
+ if (!sndbuf)
+ sndbuf = alloc;
+@@ -464,7 +464,7 @@
+
+ if (!(options & F_PINGFILLED)) {
+ int i;
+- char *p = outpack+8;
++ unsigned char *p = outpack+8;
+
+ /* Do not forget about case of small datalen,
+ * fill timestamp area too!
+@@ -819,7 +819,7 @@
+ }
+ if (pipesize > 1)
+ printf(", pipe %d", pipesize);
+- if (ntransmitted > 1 && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
++ if (ntransmitted > 1 && nreceived && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
+ int ipg = (1000000*(long long)tv.tv_sec+tv.tv_usec)/(ntransmitted-1);
+ printf(", ipg/ewma %d.%03d/%d.%03d ms",
+ ipg/1000, ipg%1000, rtt/8000, (rtt/8)%1000); \ No newline at end of file
diff --git a/abs/core-testing/iputils/protocols b/abs/core-testing/iputils/protocols
new file mode 100644
index 0000000..e6463f1
--- /dev/null
+++ b/abs/core-testing/iputils/protocols
@@ -0,0 +1,18 @@
+#
+# protocols This file describes the various protocols that are
+# available from the TCP/IP subsystem. It should be
+# consulted instead of using the numbers in the ARPA
+# include files, or, worse, just guessing them.
+#
+
+ip 0 IP # internet protocol, pseudo protocol number
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # internet group multicast protocol
+ggp 3 GGP # gateway-gateway protocol
+tcp 6 TCP # transmission control protocol
+pup 12 PUP # PARC universal packet protocol
+udp 17 UDP # user datagram protocol
+idp 22 IDP # WhatsThis?
+raw 255 RAW # RAW IP interface
+
+# End.
diff --git a/abs/core-testing/iputils/services b/abs/core-testing/iputils/services
new file mode 100644
index 0000000..9a31e69
--- /dev/null
+++ b/abs/core-testing/iputils/services
@@ -0,0 +1,195 @@
+#
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, most entries here have two entries
+# even if the protocol doesn't support UDP operations.
+# Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports
+# are included, only the more common ones.
+#
+# from: @(#)services 5.8 (Berkeley) 5/9/91
+# $Id: services,v 1.8 2005/07/08 19:20:10 judd Exp $
+#
+tcpmux 1/tcp # TCP port service multiplexer
+echo 7/tcp
+echo 7/udp
+discard 9/tcp sink null
+discard 9/udp sink null
+systat 11/tcp users
+daytime 13/tcp
+daytime 13/udp
+netstat 15/tcp
+qotd 17/tcp quote
+msp 18/tcp # message send protocol
+msp 18/udp # message send protocol
+chargen 19/tcp ttytst source
+chargen 19/udp ttytst source
+ftp-data 20/tcp
+ftp 21/tcp
+ssh 22/tcp
+telnet 23/tcp
+# 24 - private
+smtp 25/tcp mail
+# 26 - unassigned
+time 37/tcp timserver
+time 37/udp timserver
+rlp 39/udp resource # resource location
+nameserver 42/tcp name # IEN 116
+whois 43/tcp nicname
+domain 53/tcp nameserver # name-domain server
+domain 53/udp nameserver
+mtp 57/tcp # deprecated
+bootps 67/tcp # BOOTP server
+bootps 67/udp
+bootpc 68/tcp # BOOTP client
+bootpc 68/udp
+tftp 69/udp
+gopher 70/tcp # Internet Gopher
+gopher 70/udp
+rje 77/tcp netrjs
+finger 79/tcp
+www 80/tcp http # WorldWideWeb HTTP
+www 80/udp # HyperText Transfer Protocol
+link 87/tcp ttylink
+kerberos 88/tcp krb5 # Kerberos v5
+kerberos 88/udp
+supdup 95/tcp
+# 100 - reserved
+hostnames 101/tcp hostname # usually from sri-nic
+iso-tsap 102/tcp tsap # part of ISODE.
+csnet-ns 105/tcp cso-ns # also used by CSO name server
+csnet-ns 105/udp cso-ns
+rtelnet 107/tcp # Remote Telnet
+rtelnet 107/udp
+pop2 109/tcp postoffice # POP version 2
+pop2 109/udp
+pop3 110/tcp # POP version 3
+pop3 110/udp
+sunrpc 111/tcp
+sunrpc 111/udp
+auth 113/tcp tap ident authentication
+sftp 115/tcp
+uucp-path 117/tcp
+nntp 119/tcp readnews untp # USENET News Transfer Protocol
+ntp 123/tcp
+ntp 123/udp # Network Time Protocol
+netbios-ns 137/tcp # NETBIOS Name Service
+netbios-ns 137/udp
+netbios-dgm 138/tcp # NETBIOS Datagram Service
+netbios-dgm 138/udp
+netbios-ssn 139/tcp # NETBIOS session service
+netbios-ssn 139/udp
+imap 143/tcp # An alias for imap2
+imap 143/udp
+imap2 143/tcp # Interim Mail Access Proto v2
+imap2 143/udp
+snmp 161/udp # Simple Net Mgmt Proto
+snmp-trap 162/udp snmptrap # Traps for SNMP
+cmip-man 163/tcp # ISO mgmt over IP (CMOT)
+cmip-man 163/udp
+cmip-agent 164/tcp
+cmip-agent 164/udp
+xdmcp 177/tcp # X Display Mgr. Control Proto
+xdmcp 177/udp
+nextstep 178/tcp NeXTStep NextStep # NeXTStep window
+nextstep 178/udp NeXTStep NextStep # server
+bgp 179/tcp # Border Gateway Proto.
+bgp 179/udp
+prospero 191/tcp # Cliff Neuman's Prospero
+prospero 191/udp
+irc 194/tcp # Internet Relay Chat
+irc 194/udp
+smux 199/tcp # SNMP Unix Multiplexer
+smux 199/udp
+at-rtmp 201/tcp # AppleTalk routing
+at-rtmp 201/udp
+at-nbp 202/tcp # AppleTalk name binding
+at-nbp 202/udp
+at-echo 204/tcp # AppleTalk echo
+at-echo 204/udp
+at-zis 206/tcp # AppleTalk zone information
+at-zis 206/udp
+z3950 210/tcp wais # NISO Z39.50 database
+z3950 210/udp wais
+ipx 213/tcp # IPX
+ipx 213/udp
+imap3 220/tcp # Interactive Mail Access
+imap3 220/udp # Protocol v3
+ulistserv 372/tcp # UNIX Listserv
+ulistserv 372/udp
+https 443/tcp
+#
+# UNIX specific services
+#
+exec 512/tcp
+biff 512/udp comsat
+login 513/tcp
+who 513/udp whod
+shell 514/tcp cmd # no passwords used
+syslog 514/udp
+printer 515/tcp spooler # line printer spooler
+talk 517/udp
+ntalk 518/udp
+route 520/udp router routed # RIP
+timed 525/udp timeserver
+tempo 526/tcp newdate
+courier 530/tcp rpc
+conference 531/tcp chat
+netnews 532/tcp readnews
+netwall 533/udp # -for emergency broadcasts
+uucp 540/tcp uucpd # uucp daemon
+remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
+klogin 543/tcp # Kerberized `rlogin' (v5)
+kshell 544/tcp # Kerberized `rsh' (v5)
+kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
+#
+webster 765/tcp # Network dictionary
+webster 765/udp
+rsync 873/tcp # RSYNC Server
+rsync 873/udp
+swat 901/tcp # SWAT
+imaps 993/tcp # SSL IMAP
+imaps 993/udp
+pop3s 995/tcp
+pop3s 995/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations. For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined. This list specifies the port used by the server process as its
+#> contact port. While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+ingreslock 1524/tcp
+ingreslock 1524/udp
+prospero-np 1525/tcp # Prospero non-privileged
+prospero-np 1525/udp
+rfe 5002/tcp # Radio Free Ethernet
+rfe 5002/udp # Actually uses UDP only
+#
+#
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial. Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+#kerberos 750/udp kdc # Kerberos (server) udp
+#kerberos 750/tcp kdc # Kerberos (server) tcp
+krbupdate 760/tcp kreg # Kerberos registration
+kpasswd 761/tcp kpwd # Kerberos "passwd"
+#klogin 543/tcp # Kerberos rlogin
+eklogin 2105/tcp # Kerberos encrypted rlogin
+#kshell 544/tcp krcmd # Kerberos remote shell
+svn 3690/tcp # Subversion Server
+svn 3690/udp # Subversion Server
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv 871/tcp # SUP server
+supfiledbg 1127/tcp # SUP debugging
diff --git a/abs/core-testing/ipw2100-fw/PKGBUILD b/abs/core-testing/ipw2100-fw/PKGBUILD
new file mode 100644
index 0000000..52cd9f5
--- /dev/null
+++ b/abs/core-testing/ipw2100-fw/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ipw2100-fw
+pkgver=1.3
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW2100"
+arch=(i686 x86_64)
+url="http://ipw2100.sourceforge.net/"
+depends=('wireless_tools')
+#source=(ipw2100-fw-1.3.tgz http://switch.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tgz)
+source=(http://bughost.org/firmware/$pkgname-$pkgver.tgz)
+install=ipw2100-fw.install
+replaces=ipw2100
+
+build() {
+ #cd $startdir/src/$pkgname-$pkgver
+ #make
+ #Install kernel modules
+ #for i in *.ko
+ #do
+ #install -D -m 644 $i $startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/wireless/ipw2100/$i
+ #done
+
+ cd $startdir/src
+
+ # Install firmware
+ for i in *.fw
+ do
+ install -D -m 644 $i $startdir/pkg/lib/firmware/$i
+ done
+
+ # Install firmware license
+ install -D -m 644 LICENSE $startdir/pkg/lib/firmware/LICENSE.ipw2100-fw
+ }
+md5sums=('46aa75bcda1a00efa841f9707bbbd113')
diff --git a/abs/core-testing/ipw2100-fw/ipw2100-fw.install b/abs/core-testing/ipw2100-fw/ipw2100-fw.install
new file mode 100644
index 0000000..1a0ff6b
--- /dev/null
+++ b/abs/core-testing/ipw2100-fw/ipw2100-fw.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use the firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw2100-fw else please remove this package
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/ipw2200-fw/PKGBUILD b/abs/core-testing/ipw2200-fw/PKGBUILD
new file mode 100644
index 0000000..5ff080b
--- /dev/null
+++ b/abs/core-testing/ipw2200-fw/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ipw2200-fw
+pkgver=3.0
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW2200"
+arch=(i686 x86_64)
+url="http://ipw2200.sourceforge.net/"
+depends=('wireless_tools')
+source=(http://bughost.org/firmware/$pkgname-$pkgver.tgz)
+install=ipw2200-fw.install
+replaces=ipw2200
+
+build() {
+ #cd $startdir/src/$pkgname-$pkgver
+ #make
+ #Install kernel modules
+ #for i in *.ko
+ #do
+ #install -D -m 644 $i $startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/wireless/ipw2200/$i
+ #done
+
+ cd $startdir/src/ipw2200-fw-3.0
+
+ # Install firmware
+ for i in *.fw
+ do
+ install -D -m 644 $i $startdir/pkg/lib/firmware/$i
+ done
+ # Install firmware license
+ install -D -m 644 LICENSE.ipw2200-fw $startdir/pkg/lib/firmware/LICENSE.ipw2200-fw
+ }
+md5sums=('34a5ed3702006f5470ebfd513e04d9eb')
diff --git a/abs/core-testing/ipw2200-fw/ipw2200-fw.install b/abs/core-testing/ipw2200-fw/ipw2200-fw.install
new file mode 100644
index 0000000..4720660
--- /dev/null
+++ b/abs/core-testing/ipw2200-fw/ipw2200-fw.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use the firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw2200-fw else please remove this package.
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/ipw3945-ucode/PKGBUILD b/abs/core-testing/ipw3945-ucode/PKGBUILD
new file mode 100644
index 0000000..dbc79ca
--- /dev/null
+++ b/abs/core-testing/ipw3945-ucode/PKGBUILD
@@ -0,0 +1,22 @@
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=ipw3945-ucode
+pkgver=1.14.2
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW3945"
+arch=(i686 x86_64)
+url="http://www.bughost.org/ipw3945"
+license=""
+depends=('udev')
+install=ipw3945-ucode.install
+source=(http://www.bughost.org/ipw3945/ucode/$pkgname-$pkgver.tgz)
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Install firmware
+ install -D -m 644 ipw3945.ucode $startdir/pkg/lib/firmware/ipw3945.ucode
+ # Install firmware license
+ install -D -m 644 LICENSE.ipw3945-ucode $startdir/pkg/lib/firmware/LICENSE.ipw3945-ucode
+}
+md5sums=('c1c4cc7f993f448e7c05768c012084aa')
diff --git a/abs/core-testing/ipw3945-ucode/ipw3945-ucode.install b/abs/core-testing/ipw3945-ucode/ipw3945-ucode.install
new file mode 100644
index 0000000..9296f8c
--- /dev/null
+++ b/abs/core-testing/ipw3945-ucode/ipw3945-ucode.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use this firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw3945-ucode else please remove this package.
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/ipw3945/2.6.18-compile.patch b/abs/core-testing/ipw3945/2.6.18-compile.patch
new file mode 100644
index 0000000..ef0c920
--- /dev/null
+++ b/abs/core-testing/ipw3945/2.6.18-compile.patch
@@ -0,0 +1,11 @@
+--- Makefile~ 2006-06-24 01:35:00.000000000 +0200
++++ Makefile 2006-08-28 13:29:15.000000000 +0200
+@@ -93,7 +93,7 @@
+ IEEE80211_API := $(shell [[ "$(IEEE80211_VER)" == 1.1.14* ]] && \
+ { echo "2" ; } || \
+ { ver=$(IEEE80211_VER); ver=$${ver\#*.} ; echo $${ver%.*} ; })
+- EXTRA_CFLAGS += -DIEEE80211_API_VERSION=$(IEEE80211_API)
++ EXTRA_CFLAGS += -DIEEE80211_API_VERSION=2
+ endif
+
+ ifeq ($(CONFIG_IPW3945_DEBUG),y)
diff --git a/abs/core-testing/ipw3945/PKGBUILD b/abs/core-testing/ipw3945/PKGBUILD
new file mode 100644
index 0000000..572b561
--- /dev/null
+++ b/abs/core-testing/ipw3945/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5912 2008-07-21 20:12:27Z thomas $
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+# Maintainer: James Rayner <iphitus@gmail.com>
+_kernver=2.6.26-ARCH
+pkgname=ipw3945
+pkgver=1.2.2
+pkgrel=11
+pkgdesc="Driver for the Intel PRO/Wireless 3945ABG miniPCI express adapter"
+arch=(i686 x86_64)
+url="http://ipw3945.sourceforge.net"
+license=("GPL")
+depends=('wireless_tools' 'kernel26>=2.6.26-1' 'kernel26<2.6.27' 'ipw3945-ucode' 'ipw3945d')
+install=ipw3945.install
+source=(http://downloads.sourceforge.net/sourceforge/ipw3945/ipw3945-$pkgver.tgz
+ compile-2.6.24.patch)
+md5sums=('9e5ca2f3ffbb84270ede45d5572df4c9'
+ '12db6e8410ab38f1fbca15681cfa752a')
+
+build() {
+ cd $startdir/src/ipw3945-$pkgver
+ sed -i -e "s:^#\(CONFIG_IPW3945_QOS\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IPW3945_MONITOR\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IEEE80211_RADIOTAP\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IPW3945_PROMISCUOUS\)=.*:\1=y:" \
+ Makefile
+ patch -Np1 -i ../compile-2.6.24.patch || return 1
+ make KVER=${_kernver} IEEE80211_INC=/usr/src/linux-${_kernver}/ IEEE80211_IGNORE_DUPLICATE=y || return 1
+ #Install kernel module
+ install -D -m 644 ipw3945.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless/ipw3945/ipw3945.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core-testing/ipw3945/compile-2.6.24.patch b/abs/core-testing/ipw3945/compile-2.6.24.patch
new file mode 100644
index 0000000..f6350fc
--- /dev/null
+++ b/abs/core-testing/ipw3945/compile-2.6.24.patch
@@ -0,0 +1,43 @@
+Author: Samuel Tardieu <sam@rfc1149.net>
+Date: Tue Oct 16 12:31:58 2007 +0200
+
+ MAC_ARG is not defined by the kernel headers anymore
+
+diff --git a/ipw3945.c b/ipw3945.c
+index eec20b7..cc36b9c 100644
+--- a/ipw3945.c
++++ b/ipw3945.c
+@@ -102,6 +102,12 @@
+ #define VQ
+ #endif
+
++/* stolen from net/ieee80211.h */
++#ifndef MAC_ARG
++#define MAC_ARG(x) ((u8*)(x))[0], ((u8*)(x))[1], ((u8*)(x))[2], \
++ ((u8*)(x))[3], ((u8*)(x))[4], ((u8*)(x))[5]
++#endif
++
+ #define IPW3945_VERSION "1.2.2" VD VM VP VR VQ
+
+ #define DRV_DESCRIPTION "Intel(R) PRO/Wireless 3945 Network Connection driver for Linux"
+
+
+
+Author: Samuel Tardieu <sam@rfc1149.net>
+Date: Tue Oct 16 12:37:54 2007 +0200
+
+ Nuke SET_MODULE_OWNER() use
+
+diff --git a/ipw3945.c b/ipw3945.c
+index cc36b9c..0369876 100644
+--- a/ipw3945.c
++++ b/ipw3945.c
+@@ -16597,7 +16597,6 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ goto out_release_ucode;
+ }
+
+- SET_MODULE_OWNER(net_dev);
+ SET_NETDEV_DEV(net_dev, &pdev->dev);
+ mutex_lock(&priv->mutex);
+ priv->ieee->hard_start_xmit = ipw_net_hard_start_xmit;
+
diff --git a/abs/core-testing/ipw3945/ipw3945.install b/abs/core-testing/ipw3945/ipw3945.install
new file mode 100644
index 0000000..8101a44
--- /dev/null
+++ b/abs/core-testing/ipw3945/ipw3945.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/ipw3945/kernel-2.6.19.patch b/abs/core-testing/ipw3945/kernel-2.6.19.patch
new file mode 100644
index 0000000..ed28608
--- /dev/null
+++ b/abs/core-testing/ipw3945/kernel-2.6.19.patch
@@ -0,0 +1,10 @@
+--- ipw3945.h~ 2006-06-26 23:29:30.000000000 +0200
++++ ipw3945.h 2006-10-17 17:12:06.000000000 +0200
+@@ -29,7 +29,6 @@
+
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+-#include <linux/config.h>
+ #include <linux/init.h>
+
+ #include <linux/version.h>
diff --git a/abs/core-testing/ipw3945/lockup.patch b/abs/core-testing/ipw3945/lockup.patch
new file mode 100644
index 0000000..993fbbc
--- /dev/null
+++ b/abs/core-testing/ipw3945/lockup.patch
@@ -0,0 +1,31 @@
+
+Fix potential driver lockup problem
+
+Since we have already store the inta to priv->isr_inta in the
+interrupt handler we don't need to get it from the hardware again
+in the tasklet. Some people find ipw3945-1.2.1 still didn't
+resolve the boot lockup problem as reported in bugzilla #1096.
+
+If you still find the lockup problem in ipw3945-1.2.1, please try
+this patch and report if it resolves your problem or not to
+yi.zhu@intel.com.
+
+Thanks to Egon for providing this patch!
+
+Signed-off-by: Egon <anannatrak@yahoo.it>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+--
+
+--- a/ipw3945.c 2007-04-11 14:46:58.000000000 +0800
++++ b/ipw3945.c 2007-05-14 15:55:56.000000000 +0800
+@@ -2769,8 +2769,8 @@ static void ipw_irq_tasklet(struct ipw_p
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+- inta = ipw_read32(priv, CSR_INT);
+- inta_mask = ipw_read32(priv, CSR_INT_MASK);
++ inta = 0;
++ inta_mask = 0;
+ ipw_write32(priv, CSR_INT, inta);
+ inta &= (CSR_INI_SET_MASK & inta_mask);
+
diff --git a/abs/core-testing/ipw3945d/PKGBUILD b/abs/core-testing/ipw3945d/PKGBUILD
new file mode 100644
index 0000000..07e9043
--- /dev/null
+++ b/abs/core-testing/ipw3945d/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=ipw3945d
+pkgver=1.7.22
+pkgrel=4
+pkgdesc="Regulatory daemon for IPW3945"
+arch=(i686 x86_64)
+url="http://www.bughost.org/ipw3945"
+license=""
+depends=('glibc')
+install=ipw3945d.install
+source=(http://www.bughost.org/ipw3945/daemon/$pkgname-$pkgver.tgz ipw3945d.rc)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Install daemon w/ Arch specific fix
+ if [ "$CARCH" = "x86_64" ]; then
+ install -D -m 755 x86_64/ipw3945d $startdir/pkg/sbin/ipw3945d
+ else install -D -m 755 x86/ipw3945d $startdir/pkg/sbin/ipw3945d
+ fi
+ # Install license
+ install -D -m 644 LICENSE.ipw3945d $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+ install -m755 -D $startdir/src/ipw3945d.rc $startdir/pkg/etc/rc.d/ipw3945d || return
+}
+
+md5sums=('097888f5be05eb2b9b87dcdbeeb948ce' '72aafd7cba214592de6175974a48b4f9')
diff --git a/abs/core-testing/ipw3945d/ipw3945d.install b/abs/core-testing/ipw3945d/ipw3945d.install
new file mode 100644
index 0000000..3d35fc5
--- /dev/null
+++ b/abs/core-testing/ipw3945d/ipw3945d.install
@@ -0,0 +1,35 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use this daemon you have to agree to Intel's license located
+==> in /usr/share/licenses/custom/ipw3945d/LICENSE.ipw3945d
+==> else please remove this package.
+==>
+==> To use this daemon, add 'ipw3945d' to your DAEMONS=() entry in /etc/rc.conf
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+cat << EOF
+IMPORTANT
+==> In order to use this daemon you have to agree to Intel's license located
+==> in /usr/share/licenses/custom/ipw3945d/LICENSE.ipw3945d
+==> else please remove this package.
+==>
+AUTOMATIC DAEMON LOADING VIA MODPROBE
+==> To do this, you typically place the following two lines into your
+==> /etc/modprobe.conf:
+==> echo install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; \
+==> sleep 0.5 ; /sbin/ipw3945d --quiet >> /etc/modprobe.conf
+==>
+==> echo remove ipw3945 /sbin/ipw3945d --kill ; \
+==> /sbin/modprobe -r --ignore-remove ipw3945 >> /etc/modprobe.conf
+EOF
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/ipw3945d/ipw3945d.rc b/abs/core-testing/ipw3945d/ipw3945d.rc
new file mode 100644
index 0000000..b0e02bb
--- /dev/null
+++ b/abs/core-testing/ipw3945d/ipw3945d.rc
@@ -0,0 +1,42 @@
+
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /sbin/ipw3945d`
+case "$1" in
+ start)
+ stat_busy "Starting IPW3945d"
+ [ -z "$PID" ] && /sbin/ipw3945d --quiet
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo `pidof -o %PPID /sbin/ipw3945d` > /var/run/ipw3945d.pid
+ add_daemon ipw3945d
+ sleep 1 # not good, but daemon needs time to upload to card, otherwise network fails.
+ stat_done
+ fi
+
+ sleep 0.5
+ ;;
+ stop)
+ stat_busy "Stopping IPW3945d"
+ [ ! -z "$PID" ] && /sbin/ipw3945d --kill
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ipw3945d
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
+
diff --git a/abs/core-testing/ivtv-utils/PKGBUILD b/abs/core-testing/ivtv-utils/PKGBUILD
new file mode 100644
index 0000000..d8e13c6
--- /dev/null
+++ b/abs/core-testing/ivtv-utils/PKGBUILD
@@ -0,0 +1,46 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Sasha Zbrozek <kleptophobiac@gmail.com>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=ivtv-utils
+pkgver=1.0.3
+pkgrel=1
+_kernver=2.6.23-ARCH
+pkgdesc="Non-mainline kernel drivers and userspace utilities for Hauppauge PVR cards"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://ivtvdriver.org"
+source=("http://dl.ivtvdriver.org/ivtv/archive/1.0.x/ivtv-$pkgver.tar.gz" \
+ 'http://dl.ivtvdriver.org/ivtv/firmware/ivtv-firmware.tar.gz' )
+depends=('gcc-libs')
+md5sums=('2c0e04a861cb7409ea82a2935b1e0050' 'b9a871f1c569025be9c48a77b3515faf')
+
+build() {
+ # SET UP
+ cd $startdir/src/ivtv-$pkgver || return 1
+
+ # don't call depmod here
+ sed -i 's|/sbin/depmod -a||' driver/Makefile i2c-drivers/Makefile || return 1
+
+ # install the utils in /usr/bin, not /usr/local/bin
+ sed -i "s%PREFIX = /usr/local%PREFIX = /usr%g" utils/Makefile || return 1
+
+ #cd to utils as that is all we need since ivtv is now in the kernel
+ cd utils/
+
+ # build
+ make INSTALLDIR=/usr/bin || return 1
+
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # remove the kernel modules in the utils package
+ rm -rf $startdir/pkg/lib/modules || return 1
+
+ # install the firmware
+ cd $startdir/src || return 1
+ for file in v4l-cx2341x-dec.fw v4l-cx2341x-enc.fw v4l-cx2341x-init.mpg v4l-cx25840.fw v4l-pvrusb2-24xxx-01.fw v4l-pvrusb2-29xxx-01.fw
+ do
+ install -D -m 0644 $file $startdir/pkg/lib/firmware/$file || return 1
+ done
+}
diff --git a/abs/core-testing/ivtv-utils/ivtv-utils.install b/abs/core-testing/ivtv-utils/ivtv-utils.install
new file mode 100644
index 0000000..4966d4a
--- /dev/null
+++ b/abs/core-testing/ivtv-utils/ivtv-utils.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/iwlwifi-3945-ucode/PKGBUILD b/abs/core-testing/iwlwifi-3945-ucode/PKGBUILD
new file mode 100644
index 0000000..14de93b
--- /dev/null
+++ b/abs/core-testing/iwlwifi-3945-ucode/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=iwlwifi-3945-ucode
+pkgver=2.14.1.5
+pkgrel=2
+pkgdesc="Intel wireless firmware for IPW3945 (iwlwifi driver)"
+arch=(i686 x86_64)
+url="http://intellinuxwireless.org/?p=iwlwifi"
+license=('custom')
+depends=()
+source=(http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-2.14.4.tgz
+ http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-$pkgver.tgz)
+md5sums=('7178aa3a6e08655b8ac9565095bbd441'
+ 'a8122d3e026561055f488dc654ccfcd1')
+force=y
+
+build() {
+ cd $startdir/src/$pkgname-2.14.4
+ # Install old firmware for compatibility
+ install -D -m 644 iwlwifi-3945.ucode $startdir/pkg/lib/firmware/iwlwifi-3945.ucode || return 1
+
+ cd $startdir/src/$pkgname-$pkgver
+ # Install firmware
+ install -D -m 644 iwlwifi-3945-1.ucode $startdir/pkg/lib/firmware/iwlwifi-3945-1.ucode || return 1
+ # Install license
+ install -D -m 644 LICENSE.iwlwifi-3945-ucode $startdir/pkg/usr/share/licenses/$pkgname/LICENSE || return 1
+}
diff --git a/abs/core-testing/iwlwifi-4965-ucode/PKGBUILD b/abs/core-testing/iwlwifi-4965-ucode/PKGBUILD
new file mode 100644
index 0000000..4ce295a
--- /dev/null
+++ b/abs/core-testing/iwlwifi-4965-ucode/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 4446 2008-07-07 12:03:57Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=iwlwifi-4965-ucode
+pkgver=228.57.2.21
+pkgrel=1
+pkgdesc="Intel wireless firmware for IPW4965 (iwlwifi driver)"
+arch=(i686 x86_64)
+url="http://intellinuxwireless.org/?p=iwlwifi"
+license=('custom')
+depends=()
+source=(http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-$pkgver.tgz
+ http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-228.57.1.21.tgz)
+md5sums=('83804fb4bfa991ffd4849c19a74bf38d'
+ 'bce5a13d681100aeee2ddac3beaff437')
+
+build() {
+ cd $startdir/src/$pkgname-228.57.1.21
+ # Install firmware (ABI version 1, for compatibility)
+ install -D -m 644 iwlwifi-4965-1.ucode $startdir/pkg/lib/firmware/iwlwifi-4965-1.ucode || return 1
+ cd $startdir/src/$pkgname-$pkgver
+ # Install firmware (ABI version 2, for future versions of iwl4965)
+ install -D -m 644 iwlwifi-4965-2.ucode $startdir/pkg/lib/firmware/iwlwifi-4965-2.ucode || return 1
+ # Install license
+ install -D -m 644 LICENSE.iwlwifi-4965-ucode $startdir/pkg/usr/share/licenses/$pkgname/LICENSE || return 1
+}
diff --git a/abs/core-testing/jack-audio-connection-kit/PKGBUILD b/abs/core-testing/jack-audio-connection-kit/PKGBUILD
new file mode 100644
index 0000000..f9d73eb
--- /dev/null
+++ b/abs/core-testing/jack-audio-connection-kit/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: tobias <tobias@archlinux.net>
+# Contributor: Robert Emil Berge <robert@rebi.no>
+
+pkgname=jack-audio-connection-kit
+pkgver=0.109.2
+pkgrel=1
+pkgdesc="a low-latency audio server"
+arch=(i686 x86_64)
+license=(GPL2 LGPL2)
+depends=('libsndfile' 'bash' 'readline' 'flac>=1.1.4')
+makedepends=('doxygen')
+install=jack-audio-connection-kit.install
+url="http://jackit.sourceforge.net/"
+backup=(etc/conf.d/jack-audio-connection-kit)
+options=('!libtool')
+source=(http://dl.sourceforge.net/sourceforge/jackit/${pkgname}-${pkgver}.tar.gz \
+ ${pkgname}.rc.d ${pkgname}.conf.d)
+md5sums=('4d8f795a6c566b9753a86038367e7e32' '4dcba5381e45bd449def164927854e48' \
+ '0517b67ef912e2a84b6a15dea2dc2680')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --enable-optimization-by-compiler \
+ --enable-mmx --enable-timestamps --enable-posix-shm --libdir=/usr/lib
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m 755 ../${pkgname}.rc.d ${startdir}/pkg/etc/rc.d/${pkgname}
+ install -D -m 644 ../${pkgname}.conf.d ${startdir}/pkg/etc/conf.d/${pkgname}
+}
diff --git a/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.conf.d b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.conf.d
new file mode 100644
index 0000000..2ae7ca9
--- /dev/null
+++ b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.conf.d
@@ -0,0 +1,42 @@
+# Jack Audio Connection Kit options
+
+
+################################################ general server options
+# output form `jackd --help`
+# extend the switches in the OPTIONS variable
+# usage: jackd [ --realtime OR -R [ --realtime-priority OR -P priority ] ]
+# [ --no-mlock OR -m ]
+# [ --timeout OR -t client-timeout-in-msecs ]
+# [ --port-max OR -p maximum-number-of-ports]
+# [ --verbose OR -v ]
+# [ --silent OR -s ]
+# [ --version OR -V ]
+# -d driver [ ... driver args ... ]
+# driver can be `alsa', `dummy', `oss' or `portaudio'
+
+SERVER_PARAMS="-s -d alsa"
+
+
+################################################# options passed to the driver
+# currently only options for alsa are available
+
+
+# Parameters for driver 'alsa' (all parameters are optional):
+# -C, --capture Provide only capture ports. Optionally set device (default: none)
+# -P, --playback Provide only playback ports. Optionally set device (default: none)
+# -d, --device ALSA device name (default: hw:0)
+# -r, --rate Sample rate (default: 48000)
+# -p, --period Frames per period (default: 1024)
+# -n, --nperiods Number of periods in hardware buffer (default: 2)
+# -H, --hwmon Hardware monitoring, if available (default: false)
+# -M, --hwmeter Hardware metering, if available (default: false)
+# -D, --duplex Provide both capture and playback ports (default: true)
+# -s, --softmode Soft-mode, no xrun handling (default: false)
+# -m, --monitor Provide monitor ports for the output (default: false)
+# -z, --dither Dithering mode (default: n)
+# -i, --inchannels Number of capture channels (defaults to hardware max) (default: 0)
+# -o, --outchannels Number of playback channels (defaults to hardware max) (default: 0)
+# -S, --shorts Try 16-bit samples before 32-bit (default: false)
+
+DRIVER_PARAMS="-d hw:0 -p 1024"
+
diff --git a/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.install b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.install
new file mode 100644
index 0000000..cdbedb8
--- /dev/null
+++ b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.install
@@ -0,0 +1,34 @@
+
+post_install() {
+ cat << EOM
+
+ --> It is recommended to use qjackctl as a controlling frontend for the
+ --> audio server. The extended rights for realtime capabilities can be
+ --> granted based on groups or a per user base in
+ --> /etc/security/limits.conf
+
+ --> The audio server comes with a daemon script that runs it as root.
+ --> Configuration happens in /etc/conf.d/jack-audio-connection-kit and is
+ --> documented there.
+ --> NOTE: Running jack as root to enable realtime capabilities isn't
+ --> needed any longer.
+
+EOM
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ /bin/true
+}
+
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.rc.d b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.rc.d
new file mode 100644
index 0000000..b2f658e
--- /dev/null
+++ b/abs/core-testing/jack-audio-connection-kit/jack-audio-connection-kit.rc.d
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+# source application-specific settings
+[ -f /etc/conf.d/jack-audio-connection-kit ] && . /etc/conf.d/jack-audio-connection-kit
+
+PID=`pidof -o %PPID /usr/bin/jackd`
+
+case "$1" in
+ start)
+ stat_busy "Starting Jack-audio-connection-kit Daemon"
+ [ -z "$PID" ] && /usr/bin/jackd $SERVER_PARAMS -d $DRIVER_PARAMS &> /dev/null &
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon jack-audio-connection-kit
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Jack-audio-connection-kit Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon jack-audio-connection-kit
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core-testing/jasper/PKGBUILD b/abs/core-testing/jasper/PKGBUILD
new file mode 100644
index 0000000..ee60693
--- /dev/null
+++ b/abs/core-testing/jasper/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 9007 2008-08-17 02:42:41Z eric $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=jasper
+pkgver=1.900.1
+pkgrel=1
+pkgdesc="a software-based implementation of the codec specified in the emerging JPEG-2000 Part-1 standard"
+arch=(i686 x86_64)
+url="http://www.ece.uvic.ca/~mdadams/jasper/"
+depends=('libjpeg' 'glut' 'libxi' 'libxmu' 'mesa')
+makedepends=('unzip')
+options=('!libtool')
+source=(http://www.ece.uvic.ca/~mdadams/$pkgname/software/$pkgname-$pkgver.zip)
+md5sums=('a342b2b4495b3e1394e161eb5d85d754')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+}
diff --git a/abs/core-testing/jfsutils/PKGBUILD b/abs/core-testing/jfsutils/PKGBUILD
new file mode 100644
index 0000000..bd4a8bf
--- /dev/null
+++ b/abs/core-testing/jfsutils/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=jfsutils
+pkgver=1.1.12
+pkgrel=11
+pkgdesc="JFS filesystem utilities"
+arch=(i686 x86_64)
+url="http://jfs.sourceforge.net"
+license=('GPL')
+groups=('base')
+depends=('e2fsprogs')
+source=(http://jfs.sourceforge.net/project/pub/jfsutils-$pkgver.tar.gz)
+md5sums=('10efa993a62113530645fc7b3fa542f4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/sbin $startdir/pkg
+}
diff --git a/abs/core-testing/kakasi/PKGBUILD b/abs/core-testing/kakasi/PKGBUILD
new file mode 100644
index 0000000..2a8c08a
--- /dev/null
+++ b/abs/core-testing/kakasi/PKGBUILD
@@ -0,0 +1,20 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+
+pkgname=kakasi
+pkgver=2.3.4
+pkgrel=2
+pkgdesc="Convert Kanji characters to Hiragana, Katakana or Romaji"
+arch=('i686' 'x86_64')
+url="http://kakasi.namazu.org/"
+license=('GPL')
+source=(http://kakasi.namazu.org/stable/${pkgname}-${pkgver}.tar.gz)
+md5sums=(4eff51aafbd56c9635791a20c03efa8f)
+
+build() {
+ cd "$startdir/src/$pkgname-$pkgver"
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR="$startdir/pkg" install
+}
+
diff --git a/abs/core-testing/kbd/PKGBUILD b/abs/core-testing/kbd/PKGBUILD
new file mode 100644
index 0000000..bbc68f7
--- /dev/null
+++ b/abs/core-testing/kbd/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=kbd
+pkgver=1.14.1.20080309
+pkgrel=11
+pkgdesc="Keytable files and keyboard utilities"
+arch=('i686' 'x86_64')
+url="ftp://ftp.altlinux.org/pub/people/legion/kbd/"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz
+ #ftp://ftp.altlinux.org/pub/people/legion/kbd/${pkgname}-${pkgver}.tar.gz
+ rename-duplicates.patch)
+md5sums=('76e817f11c6ec80d9fc9f3f7ace79b4a'
+ 'bd2d9f88141a8e78baaa4982f1d1f6c5')
+
+build() {
+ cd ${startdir}/src
+ #cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i rename-duplicates.patch || return 1
+
+ autoconf
+ ./configure --prefix=/usr --datadir=/usr/share/kbd --mandir=/usr/share/man
+ make KEYCODES_PROGS=yes RESIZECONS_PROGS=yes || return 1
+ make KEYCODES_PROGS=yes RESIZECONS_PROGS=yes DESTDIR=${startdir}/pkg install
+
+ # this is needed because initscripts call /bin/loadkeys
+ # remove this when next versions of kbd
+ # and initscripts with /usr/bin/loadkeys usage will be released
+ mkdir ${startdir}/pkg/bin
+ ln -s /usr/bin/loadkeys ${startdir}/pkg/bin/loadkeys
+}
diff --git a/abs/core-testing/kbd/kbd-1.12-alias.patch b/abs/core-testing/kbd/kbd-1.12-alias.patch
new file mode 100644
index 0000000..30be4fa
--- /dev/null
+++ b/abs/core-testing/kbd/kbd-1.12-alias.patch
@@ -0,0 +1,47 @@
+diff -u kbd-1.12/src/psffontop.c kbd-1.12/src/psffontop.c
+--- kbd-1.12/src/psffontop.c 2005-03-12 00:48:30.075310872 +0100
++++ kbd-1.12/src/psffontop.c 2005-05-14 10:49:59.000000000 +0900
+@@ -59,7 +59,6 @@
+
+ static unsigned int
+ assemble_ucs2(char **inptr, int cnt) {
+- unsigned char **in = (unsigned char **) inptr;
+ unsigned int u1, u2;
+
+ if (cnt < 2) {
+@@ -68,8 +67,8 @@
+ exit(EX_DATAERR);
+ }
+
+- u1 = *(*in)++;
+- u2 = *(*in)++;
++ u1 = (unsigned char)*(*inptr)++;
++ u2 = (unsigned char)*(*inptr)++;
+ return (u1 | (u2 << 8));
+ }
+
+@@ -110,7 +109,6 @@
+ */
+ static void
+ get_uni_entry(char **inptr, char **endptr, struct unicode_list *up, int utf8) {
+- unsigned char **in = (unsigned char **) inptr;
+ unsigned char uc;
+ unicode unichar;
+ int inseq = 0;
+@@ -126,14 +124,14 @@
+ exit(EX_DATAERR);
+ }
+ if (utf8) {
+- uc = *(*in)++;
++ uc = *(*inptr)++;
+ if (uc == PSF2_SEPARATOR)
+ break;
+ if (uc == PSF2_STARTSEQ) {
+ inseq = 1;
+ continue;
+ }
+- --(*in);
++ --(*inptr);
+ unichar = assemble_utf8(inptr, *endptr - *inptr);
+ } else {
+ unichar = assemble_ucs2(inptr, *endptr - *inptr);
diff --git a/abs/core-testing/kbd/kbd-1.12-find_map_fix.patch b/abs/core-testing/kbd/kbd-1.12-find_map_fix.patch
new file mode 100644
index 0000000..ca24703
--- /dev/null
+++ b/abs/core-testing/kbd/kbd-1.12-find_map_fix.patch
@@ -0,0 +1,37 @@
+Oh, but I fixed it already. Patch below.
+
+Andries
+
+--- kbd-1.12.orig/src/findfile.c Fri Jan 16 20:45:31 2004
++++ kbd-1.12/src/findfile.c Wed Jan 28 23:29:35 2004
+@@ -70,6 +70,7 @@
+ FILE *fp = NULL;
+ DIR *d;
+ struct dirent *de;
++ struct stat statbuf;
+ char *ff, *fdir, *p, *q, **sp;
+ struct decompressor *dc;
+ int secondpass = 0;
+@@ -104,7 +105,6 @@
+ okdir = (ff && strcmp(de->d_name, fdir) == 0);
+
+ if ((secondpass && recdepth) || okdir) {
+- struct stat statbuf;
+ char *a;
+
+ a = xmalloc(strlen(dir) + strlen(de->d_name) + 2);
+@@ -137,6 +137,11 @@
+
+ sprintf(pathname, "%s/%s", dir, de->d_name);
+
++ /* Is this a regular file? */
++ if (stat(pathname, &statbuf) != 0 ||
++ !S_ISREG(statbuf.st_mode))
++ continue;
++
+ /* Does tail consist of a known suffix and possibly
+ a compression suffix? */
+ for(sp = suf; *sp; sp++) {
+
+
+[pasted and cut from another window, so with whitespace damage]
diff --git a/abs/core-testing/kbd/kbd-1.12-no-user-map.patch b/abs/core-testing/kbd/kbd-1.12-no-user-map.patch
new file mode 100644
index 0000000..f246228
--- /dev/null
+++ b/abs/core-testing/kbd/kbd-1.12-no-user-map.patch
@@ -0,0 +1,19 @@
+Non-root users are allowed to change the unicode mode of their console, but
+not the global keymap. root will have to load the keymap in unicode mode
+explicitly.
+
+--- kbd-1.12/src/unicode_start.no-user-map 2005-12-01 19:33:19.000000000 +0100
++++ kbd-1.12/src/unicode_start 2005-12-01 19:33:28.000000000 +0100
+@@ -14,12 +14,6 @@
+
+ kbd_mode -u
+
+-# Change the keyboard mapping in such a way that the non-ASCII keys
+-# produce UTF-8 encoded multibyte sequences, instead of single bytes
+-# >= 0x80 in a legacy 8-bit encoding.
+-
+-dumpkeys | loadkeys --unicode
+-
+ # 2. The output side: the console screen.
+
+ # Tell the console output driver that the bytes arriving are UTF-8
diff --git a/abs/core-testing/kbd/keymap_hook b/abs/core-testing/kbd/keymap_hook
new file mode 100644
index 0000000..414338b
--- /dev/null
+++ b/abs/core-testing/kbd/keymap_hook
@@ -0,0 +1,21 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading keymap..."
+ . /keymap
+ if [ "$KEYMAP" != "" ]; then
+ /bin/loadkeys -q $KEYMAP
+ fi
+ # If locale is *.utf set console to Unicode mode
+ if [ "$UTF8" = "yes" ]; then
+ /bin/kbd_mode -u
+ /bin/dumpkeys | /bin/loadkeys --unicode
+ echo -ne "\e%G" >> /dev/console
+ fi
+ if [ "$CONSOLEMAP" != "" ]; then
+ /bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/console
+ else
+ /bin/setfont $CONSOLEFONT -C /dev/console
+ fi
+ msg "done."
+}
diff --git a/abs/core-testing/kbd/keymap_install b/abs/core-testing/kbd/keymap_install
new file mode 100644
index 0000000..0518802
--- /dev/null
+++ b/abs/core-testing/kbd/keymap_install
@@ -0,0 +1,44 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=""
+ SCRIPT="keymap"
+ KEYMAP_FILE="$(mktemp /tmp/keymap.XXXXXX)"
+ add_file /bin/loadkeys.static /bin/loadkeys
+ add_file /usr/bin/dumpkeys.static /bin/dumpkeys
+ add_file /usr/bin/kbd_mode.static /bin/kdb_mode
+ add_file /usr/bin/setfont.static /bin/setfont
+ grep "KEYMAP=" /etc/rc.conf >> ${KEYMAP_FILE}
+ grep "CONSOLEFONT=" /etc/rc.conf >> ${KEYMAP_FILE}
+ grep "CONSOLEMAP=" /etc/rc.conf >> ${KEYMAP_FILE}
+ if [ "$(echo $LOCALE | /bin/grep -i utf)" != "" ]; then
+ echo UTF8="yes" >> ${KEYMAP_FILE}
+ fi
+ . ${KEYMAP_FILE}
+ add_file ${KEYMAP_FILE} /keymap
+ [ "$CONSOLEFONT" != "" ] && add_file /usr/share/kbd/consolefonts/$(grep "CONSOLEFONT=" /etc/rc.conf | awk -FCONSOLEFONT= '{print $2}' | sed -e "s@[\"']*@@g")*
+ [ "$CONSOLEMAP" != "" ] && add_file /usr/share/kbd/unimaps/$(grep "CONSOLEMAP=" /etc/rc.conf | awk -FCONSOLEMAP= '{print $2}' | sed -e "s@[\"']*@@g")*
+ if [ "$KEYMAP" != "" ]; then
+ for i in $(find /usr/share/kbd/ -name "$(grep "KEYMAP=" /etc/rc.conf |\
+ awk -FKEYMAP= '{print $2}' | awk -F- '{print $1}' | sed -e "s@[\"']*@@g")*.map.gz"); do
+ add_file $i
+ done
+ for i in $(echo /usr/share/kbd/keymaps/include/*); do
+ add_file $i
+ done
+ for i in $(echo /usr/share/kbd/keymaps/*/include/*); do
+ add_file $i
+ done
+ fi
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the specified keymap and consolefont from rc.conf,
+ during early userspace.
+HELPEOF
+}
diff --git a/abs/core-testing/kbd/rename-duplicates.patch b/abs/core-testing/kbd/rename-duplicates.patch
new file mode 100644
index 0000000..a8b70fe
--- /dev/null
+++ b/abs/core-testing/kbd/rename-duplicates.patch
@@ -0,0 +1,830 @@
+From 22cc5a37e41a8937747f3416a45e923e853fc452 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 20:38:42 +0200
+Subject: [PATCH] Rename keymaps with same filenames
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ data/keymaps/i386/dvorak/no-dvorak.map | 104 +++++++++++++++++++++++++
+ data/keymaps/i386/dvorak/no.map | 104 -------------------------
+ data/keymaps/i386/fgGIod/trf-fgGIod.map | 125 +++++++++++++++++++++++++++++++
+ data/keymaps/i386/fgGIod/trf.map | 125 -------------------------------
+ data/keymaps/i386/olpc/es-olpc.map | 80 ++++++++++++++++++++
+ data/keymaps/i386/olpc/es.map | 80 --------------------
+ data/keymaps/i386/olpc/pt-olpc.map | 68 +++++++++++++++++
+ data/keymaps/i386/olpc/pt.map | 68 -----------------
+ 8 files changed, 377 insertions(+), 377 deletions(-)
+ create mode 100644 data/keymaps/i386/dvorak/no-dvorak.map
+ delete mode 100644 data/keymaps/i386/dvorak/no.map
+ create mode 100644 data/keymaps/i386/fgGIod/trf-fgGIod.map
+ delete mode 100644 data/keymaps/i386/fgGIod/trf.map
+ create mode 100644 data/keymaps/i386/olpc/es-olpc.map
+ delete mode 100644 data/keymaps/i386/olpc/es.map
+ create mode 100644 data/keymaps/i386/olpc/pt-olpc.map
+ delete mode 100644 data/keymaps/i386/olpc/pt.map
+
+diff --git a/data/keymaps/i386/dvorak/no-dvorak.map b/data/keymaps/i386/dvorak/no-dvorak.map
+new file mode 100644
+index 0000000..2f15c57
+--- /dev/null
++++ b/data/keymaps/i386/dvorak/no-dvorak.map
+@@ -0,0 +1,104 @@
++# Date: Sun, 10 Feb 2008 10:56:47 +0100
++# From: "Thomas Geirhovd" <thomas@tg90nor.net>
++# Subject: Norwegian dvorak keymap
++#
++# Hi,
++#
++# I made a norwegian dvorak keymap for the console.
++# It can be found on http://www.tg90nor.net/no-dvorak.map.gz
++# Feel free to include it in kbd if you want to.
++#
++# --
++# Regards,
++# Thomas Geirhovd
++#
++keymaps 0-2,4-6,8-9,12
++alt_is_meta
++include "linux-with-alt-and-altgr.inc"
++strings as usual
++
++ keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++ keycode 2 = one exclam
++ alt keycode 2 = Meta_one
++ keycode 3 = two quotedbl at
++ control keycode 3 = nul
++ alt keycode 3 = Meta_two
++ keycode 4 = three numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_three
++ keycode 5 = four dollar dollar
++ control keycode 5 = Control_backslash
++ alt keycode 5 = Meta_four
++ keycode 6 = five percent
++ control keycode 6 = Control_bracketright
++ alt keycode 6 = Meta_five
++ keycode 7 = six ampersand
++ control keycode 7 = Control_asciicircum
++ alt keycode 7 = Meta_six
++ keycode 8 = seven slash braceleft
++ control keycode 8 = Control_underscore
++ alt keycode 8 =Meta_seven
++ keycode 9 = eight parenleft bracketleft
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++ keycode 10 = nine parenright bracketright
++ alt keycode 10 = Meta_nine
++ keycode 11 = zero equal braceright
++ alt keycode 11 = Meta_zero
++ keycode 12 = plus question
++ control keycode 12 = Control_underscore
++ alt keycode 12 = Meta_minus
++ keycode 13 = backslash grave apostrophe
++ alt keycode 13 = Meta_equal
++ keycode 14 = Delete
++ alt keycode 14 = Meta_Delete
++ keycode 15 = Tab
++ shift keycode 15 = Meta_Tab
++ keycode 16 = +aring +Aring
++ keycode 17 = comma semicolon
++ keycode 18 = period colon
++ keycode 19 = p
++ keycode 20 = y
++ keycode 21 = f
++ keycode 22 = g
++ keycode 23 = c
++ keycode 24 = r
++ keycode 25 = l
++ keycode 26 = apostrophe asterisk
++ keycode 27 = asciitilde asciicircum
++ keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++ keycode 29 = Control
++ keycode 30 = a
++ keycode 31 = o
++ keycode 32 = e
++ keycode 33 = u
++ keycode 34 = i
++ keycode 35 = d
++ keycode 36 = h
++ keycode 37 = t
++ keycode 38 = n
++ keycode 39 = s
++ keycode 40 = minus underscore
++ keycode 41 = bar section
++ control keycode 41 = nul
++keycode 42 = Shift
++keycode 43 = less greater
++keycode 44 = +ae +AE
++keycode 45 = q
++keycode 46 = j
++keycode 47 = k
++keycode 48 = x
++keycode 49 = b
++keycode 50 = m
++keycode 51 = w
++keycode 52 = v
++keycode 53 = z
++keycode 54 = Shift
++keycode 56 = Alt
++ keycode 57 = space
++ control keycode 57 = nul
++ keycode 58 = Caps_Lock
++ keycode 86 = +oslash +Ooblique
++keycode 97 = Control
+diff --git a/data/keymaps/i386/dvorak/no.map b/data/keymaps/i386/dvorak/no.map
+deleted file mode 100644
+index 2f15c57..0000000
+--- a/data/keymaps/i386/dvorak/no.map
++++ /dev/null
+@@ -1,104 +0,0 @@
+-# Date: Sun, 10 Feb 2008 10:56:47 +0100
+-# From: "Thomas Geirhovd" <thomas@tg90nor.net>
+-# Subject: Norwegian dvorak keymap
+-#
+-# Hi,
+-#
+-# I made a norwegian dvorak keymap for the console.
+-# It can be found on http://www.tg90nor.net/no-dvorak.map.gz
+-# Feel free to include it in kbd if you want to.
+-#
+-# --
+-# Regards,
+-# Thomas Geirhovd
+-#
+-keymaps 0-2,4-6,8-9,12
+-alt_is_meta
+-include "linux-with-alt-and-altgr.inc"
+-strings as usual
+-
+- keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+- keycode 2 = one exclam
+- alt keycode 2 = Meta_one
+- keycode 3 = two quotedbl at
+- control keycode 3 = nul
+- alt keycode 3 = Meta_two
+- keycode 4 = three numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_three
+- keycode 5 = four dollar dollar
+- control keycode 5 = Control_backslash
+- alt keycode 5 = Meta_four
+- keycode 6 = five percent
+- control keycode 6 = Control_bracketright
+- alt keycode 6 = Meta_five
+- keycode 7 = six ampersand
+- control keycode 7 = Control_asciicircum
+- alt keycode 7 = Meta_six
+- keycode 8 = seven slash braceleft
+- control keycode 8 = Control_underscore
+- alt keycode 8 =Meta_seven
+- keycode 9 = eight parenleft bracketleft
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+- keycode 10 = nine parenright bracketright
+- alt keycode 10 = Meta_nine
+- keycode 11 = zero equal braceright
+- alt keycode 11 = Meta_zero
+- keycode 12 = plus question
+- control keycode 12 = Control_underscore
+- alt keycode 12 = Meta_minus
+- keycode 13 = backslash grave apostrophe
+- alt keycode 13 = Meta_equal
+- keycode 14 = Delete
+- alt keycode 14 = Meta_Delete
+- keycode 15 = Tab
+- shift keycode 15 = Meta_Tab
+- keycode 16 = +aring +Aring
+- keycode 17 = comma semicolon
+- keycode 18 = period colon
+- keycode 19 = p
+- keycode 20 = y
+- keycode 21 = f
+- keycode 22 = g
+- keycode 23 = c
+- keycode 24 = r
+- keycode 25 = l
+- keycode 26 = apostrophe asterisk
+- keycode 27 = asciitilde asciicircum
+- keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+- keycode 29 = Control
+- keycode 30 = a
+- keycode 31 = o
+- keycode 32 = e
+- keycode 33 = u
+- keycode 34 = i
+- keycode 35 = d
+- keycode 36 = h
+- keycode 37 = t
+- keycode 38 = n
+- keycode 39 = s
+- keycode 40 = minus underscore
+- keycode 41 = bar section
+- control keycode 41 = nul
+-keycode 42 = Shift
+-keycode 43 = less greater
+-keycode 44 = +ae +AE
+-keycode 45 = q
+-keycode 46 = j
+-keycode 47 = k
+-keycode 48 = x
+-keycode 49 = b
+-keycode 50 = m
+-keycode 51 = w
+-keycode 52 = v
+-keycode 53 = z
+-keycode 54 = Shift
+-keycode 56 = Alt
+- keycode 57 = space
+- control keycode 57 = nul
+- keycode 58 = Caps_Lock
+- keycode 86 = +oslash +Ooblique
+-keycode 97 = Control
+diff --git a/data/keymaps/i386/fgGIod/trf-fgGIod.map b/data/keymaps/i386/fgGIod/trf-fgGIod.map
+new file mode 100644
+index 0000000..1061d11
+--- /dev/null
++++ b/data/keymaps/i386/fgGIod/trf-fgGIod.map
+@@ -0,0 +1,125 @@
++charset "iso-8859-9"
++keymaps 0-6,8-9,12
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam asciitilde
++ alt keycode 2 = Meta_one
++ alt shift keycode 2 = Meta_exclam
++keycode 3 = two at ampersand
++ control keycode 3 = nul
++ control shift keycode 3 = nul
++ alt keycode 3 = Meta_two
++ alt shift keycode 3 = Meta_at
++keycode 4 = three quotedbl numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_three
++ alt shift keycode 4 = Meta_quotedbl
++keycode 5 = four apostrophe dollar
++ control keycode 5 = Control_backslash
++ alt keycode 5 = Meta_four
++ alt shift keycode 5 = Meta_apostrophe
++keycode 6 = five parenleft less
++ control keycode 6 = Control_bracketright
++ alt keycode 6 = Meta_five
++ alt shift keycode 6 = Meta_parenleft
++keycode 7 = six slash greater
++ control keycode 7 = Control_asciicircum
++ alt keycode 7 = Meta_six
++ alt shift keycode 7 = Meta_slash
++keycode 8 = seven parenright braceleft
++ control keycode 8 = Control_underscore
++ alt keycode 8 = Meta_seven
++ alt shift keycode 8 = Meta_parenright
++keycode 9 = eight underscore braceright
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++ alt shift keycode 9 = Meta_underscore
++keycode 10 = nine percent bracketleft
++ alt keycode 10 = Meta_nine
++ alt shift keycode 10 = Meta_percent
++keycode 11 = zero colon bracketright
++ alt keycode 11 = Meta_zero
++ alt shift keycode 11 = Meta_colon
++keycode 12 = x
++keycode 13 = q
++keycode 14 = Delete Delete
++ alt keycode 14 = Meta_Delete
++keycode 15 = Tab
++ shift keycode 15 = Meta_Tab
++ alt keycode 15 = Meta_Tab
++keycode 16 = f
++keycode 17 = g
++keycode 18 = +0360 +0320
++keycode 19 = +0375 +I
++ altgr keycode 19 = +0356
++ altgr shift keycode 19 = +0316
++keycode 20 = o
++ altgr keycode 20 = +0364
++ altgr shift keycode 20 = +0324
++keycode 21 = d
++keycode 22 = r
++keycode 23 = n
++keycode 24 = h
++keycode 25 = p
++keycode 26 = semicolon asterisk
++ control keycode 26 = Escape
++ alt keycode 26 = Meta_semicolon
++ alt shift keycode 26 = Meta_asterisk
++keycode 27 = asciicircum grave
++ control keycode 27 = Control_bracketright
++ alt keycode 27 = Meta_asciicircum
++ alt shift keycode 27 = Meta_grave
++keycode 28 = Return
++ alt keycode 28 = 0x080d
++keycode 29 = Control
++keycode 30 = u
++ altgr keycode 30 = +0373
++ altgr shift keycode 30 = +0333
++keycode 31 = +i +0335
++keycode 32 = e
++keycode 33 = a
++ altgr keycode 33 = +0342
++ altgr shift keycode 33 = +0302
++keycode 34 = +0374 +0334
++keycode 35 = t
++keycode 36 = k
++keycode 37 = m
++keycode 38 = l
++keycode 39 = y
++keycode 40 = +0376 +0336
++ control keycode 40 = Control_g
++keycode 41 = w
++ control keycode 41 = nul
++keycode 42 = Shift
++keycode 43 = equal plus
++ control keycode 43 = Control_backslash
++ alt keycode 43 = Meta_equal
++ alt shift keycode 43 = Meta_plus
++keycode 44 = j
++keycode 45 = +0366 +0326
++keycode 46 = v
++keycode 47 = c
++keycode 48 = +0347 +0307
++keycode 49 = z
++keycode 50 = s
++keycode 51 = b
++keycode 52 = period question
++ control keycode 52 = Delete
++ alt keycode 52 = Meta_period
++ alt shift keycode 52 = Meta_question
++keycode 53 = comma minus slash
++ alt keycode 53 = Meta_comma
++ alt shift keycode 53 = Meta_minus
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++ alt keycode 57 = Meta_space
++keycode 58 = Caps_Lock
++keycode 86 = backslash bar
++ alt keycode 86 = Meta_backslash
++ alt shift keycode 86 = Meta_bar
++keycode 97 = Control
+diff --git a/data/keymaps/i386/fgGIod/trf.map b/data/keymaps/i386/fgGIod/trf.map
+deleted file mode 100644
+index 1061d11..0000000
+--- a/data/keymaps/i386/fgGIod/trf.map
++++ /dev/null
+@@ -1,125 +0,0 @@
+-charset "iso-8859-9"
+-keymaps 0-6,8-9,12
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam asciitilde
+- alt keycode 2 = Meta_one
+- alt shift keycode 2 = Meta_exclam
+-keycode 3 = two at ampersand
+- control keycode 3 = nul
+- control shift keycode 3 = nul
+- alt keycode 3 = Meta_two
+- alt shift keycode 3 = Meta_at
+-keycode 4 = three quotedbl numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_three
+- alt shift keycode 4 = Meta_quotedbl
+-keycode 5 = four apostrophe dollar
+- control keycode 5 = Control_backslash
+- alt keycode 5 = Meta_four
+- alt shift keycode 5 = Meta_apostrophe
+-keycode 6 = five parenleft less
+- control keycode 6 = Control_bracketright
+- alt keycode 6 = Meta_five
+- alt shift keycode 6 = Meta_parenleft
+-keycode 7 = six slash greater
+- control keycode 7 = Control_asciicircum
+- alt keycode 7 = Meta_six
+- alt shift keycode 7 = Meta_slash
+-keycode 8 = seven parenright braceleft
+- control keycode 8 = Control_underscore
+- alt keycode 8 = Meta_seven
+- alt shift keycode 8 = Meta_parenright
+-keycode 9 = eight underscore braceright
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+- alt shift keycode 9 = Meta_underscore
+-keycode 10 = nine percent bracketleft
+- alt keycode 10 = Meta_nine
+- alt shift keycode 10 = Meta_percent
+-keycode 11 = zero colon bracketright
+- alt keycode 11 = Meta_zero
+- alt shift keycode 11 = Meta_colon
+-keycode 12 = x
+-keycode 13 = q
+-keycode 14 = Delete Delete
+- alt keycode 14 = Meta_Delete
+-keycode 15 = Tab
+- shift keycode 15 = Meta_Tab
+- alt keycode 15 = Meta_Tab
+-keycode 16 = f
+-keycode 17 = g
+-keycode 18 = +0360 +0320
+-keycode 19 = +0375 +I
+- altgr keycode 19 = +0356
+- altgr shift keycode 19 = +0316
+-keycode 20 = o
+- altgr keycode 20 = +0364
+- altgr shift keycode 20 = +0324
+-keycode 21 = d
+-keycode 22 = r
+-keycode 23 = n
+-keycode 24 = h
+-keycode 25 = p
+-keycode 26 = semicolon asterisk
+- control keycode 26 = Escape
+- alt keycode 26 = Meta_semicolon
+- alt shift keycode 26 = Meta_asterisk
+-keycode 27 = asciicircum grave
+- control keycode 27 = Control_bracketright
+- alt keycode 27 = Meta_asciicircum
+- alt shift keycode 27 = Meta_grave
+-keycode 28 = Return
+- alt keycode 28 = 0x080d
+-keycode 29 = Control
+-keycode 30 = u
+- altgr keycode 30 = +0373
+- altgr shift keycode 30 = +0333
+-keycode 31 = +i +0335
+-keycode 32 = e
+-keycode 33 = a
+- altgr keycode 33 = +0342
+- altgr shift keycode 33 = +0302
+-keycode 34 = +0374 +0334
+-keycode 35 = t
+-keycode 36 = k
+-keycode 37 = m
+-keycode 38 = l
+-keycode 39 = y
+-keycode 40 = +0376 +0336
+- control keycode 40 = Control_g
+-keycode 41 = w
+- control keycode 41 = nul
+-keycode 42 = Shift
+-keycode 43 = equal plus
+- control keycode 43 = Control_backslash
+- alt keycode 43 = Meta_equal
+- alt shift keycode 43 = Meta_plus
+-keycode 44 = j
+-keycode 45 = +0366 +0326
+-keycode 46 = v
+-keycode 47 = c
+-keycode 48 = +0347 +0307
+-keycode 49 = z
+-keycode 50 = s
+-keycode 51 = b
+-keycode 52 = period question
+- control keycode 52 = Delete
+- alt keycode 52 = Meta_period
+- alt shift keycode 52 = Meta_question
+-keycode 53 = comma minus slash
+- alt keycode 53 = Meta_comma
+- alt shift keycode 53 = Meta_minus
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+- alt keycode 57 = Meta_space
+-keycode 58 = Caps_Lock
+-keycode 86 = backslash bar
+- alt keycode 86 = Meta_backslash
+- alt shift keycode 86 = Meta_bar
+-keycode 97 = Control
+diff --git a/data/keymaps/i386/olpc/es-olpc.map b/data/keymaps/i386/olpc/es-olpc.map
+new file mode 100644
+index 0000000..e97caeb
+--- /dev/null
++++ b/data/keymaps/i386/olpc/es-olpc.map
+@@ -0,0 +1,80 @@
++! Spanish keymap for OLPC; based upon es.map
++! Walter Bender (3 January 2008)
++!
++charset "iso-8859-15"
++keymaps 0-2,4,6,8-9,12
++include "qwerty-layout"
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam bar
++ alt keycode 2 = Meta_one
++keycode 3 = two quotedbl at
++ control keycode 3 = nul
++ alt keycode 3 = Meta_two
++keycode 4 = three grave numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_grave
++keycode 5 = four dollar
++ alt keycode 5 = Meta_four
++keycode 6 = five percent asciicircum
++ control keycode 6 = Control_asciicircum
++ alt keycode 6 = Meta_five
++keycode 7 = six ampersand notsign
++ alt keycode 7 = Meta_six
++keycode 8 = seven slash backslash
++ control keycode 8 = Control_backslash
++ alt keycode 8 = Meta_seven
++keycode 9 = eight parenleft
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++keycode 10 = nine parenright
++ alt keycode 10 = Meta_nine
++keycode 11 = zero equal
++ alt keycode 11 = Meta_equal
++keycode 12 = apostrophe question
++ alt keycode 12 = Meta_apostrophe
++keycode 13 = exclamdown questiondown
++keycode 14 = Delete
++ control keycode 14 = Control_underscore
++ alt keycode 14 = Meta_Delete
++keycode 15 = Tab
++ alt keycode 15 = Meta_Tab
++keycode 18 = e E euro
++keycode 26 = apostrophe diaeresis degree
++keycode 27 = bracketleft braceleft
++ control keycode 27 = Escape
++ alt keycode 27 = Meta_bracketleft
++keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++keycode 29 = Control
++keycode 39 = +ntilde +Ntilde
++keycode 40 = plus asterisk asciitilde
++ control keycode 40 = Control_g
++ alt keycode 40 = Meta_asciitilde
++keycode 41 = masculine ordfeminine backslash
++ control keycode 41 = Control_backslash
++ alt keycode 41 = Meta_backslash
++keycode 42 = Shift
++keycode 43 = bracketright braceright
++ control keycode 43 = Control_bracketright
++ alt keycode 43 = Meta_bracketright
++keycode 51 = comma semicolon
++ alt keycode 51 = Meta_comma
++ shift alt keycode 51 = Meta_semicolon
++keycode 52 = period colon
++ alt keycode 52 = Meta_period
++keycode 53 = minus underscore
++ control keycode 53 = Control_underscore
++ alt keycode 53 = Meta_minus
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++ alt keycode 57 = Meta_space
++keycode 211 = less greater
++ alt keycode 211 = Meta_less
++ shift alt keycode 211 = Meta_greater
++
+diff --git a/data/keymaps/i386/olpc/es.map b/data/keymaps/i386/olpc/es.map
+deleted file mode 100644
+index e97caeb..0000000
+--- a/data/keymaps/i386/olpc/es.map
++++ /dev/null
+@@ -1,80 +0,0 @@
+-! Spanish keymap for OLPC; based upon es.map
+-! Walter Bender (3 January 2008)
+-!
+-charset "iso-8859-15"
+-keymaps 0-2,4,6,8-9,12
+-include "qwerty-layout"
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam bar
+- alt keycode 2 = Meta_one
+-keycode 3 = two quotedbl at
+- control keycode 3 = nul
+- alt keycode 3 = Meta_two
+-keycode 4 = three grave numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_grave
+-keycode 5 = four dollar
+- alt keycode 5 = Meta_four
+-keycode 6 = five percent asciicircum
+- control keycode 6 = Control_asciicircum
+- alt keycode 6 = Meta_five
+-keycode 7 = six ampersand notsign
+- alt keycode 7 = Meta_six
+-keycode 8 = seven slash backslash
+- control keycode 8 = Control_backslash
+- alt keycode 8 = Meta_seven
+-keycode 9 = eight parenleft
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+-keycode 10 = nine parenright
+- alt keycode 10 = Meta_nine
+-keycode 11 = zero equal
+- alt keycode 11 = Meta_equal
+-keycode 12 = apostrophe question
+- alt keycode 12 = Meta_apostrophe
+-keycode 13 = exclamdown questiondown
+-keycode 14 = Delete
+- control keycode 14 = Control_underscore
+- alt keycode 14 = Meta_Delete
+-keycode 15 = Tab
+- alt keycode 15 = Meta_Tab
+-keycode 18 = e E euro
+-keycode 26 = apostrophe diaeresis degree
+-keycode 27 = bracketleft braceleft
+- control keycode 27 = Escape
+- alt keycode 27 = Meta_bracketleft
+-keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+-keycode 29 = Control
+-keycode 39 = +ntilde +Ntilde
+-keycode 40 = plus asterisk asciitilde
+- control keycode 40 = Control_g
+- alt keycode 40 = Meta_asciitilde
+-keycode 41 = masculine ordfeminine backslash
+- control keycode 41 = Control_backslash
+- alt keycode 41 = Meta_backslash
+-keycode 42 = Shift
+-keycode 43 = bracketright braceright
+- control keycode 43 = Control_bracketright
+- alt keycode 43 = Meta_bracketright
+-keycode 51 = comma semicolon
+- alt keycode 51 = Meta_comma
+- shift alt keycode 51 = Meta_semicolon
+-keycode 52 = period colon
+- alt keycode 52 = Meta_period
+-keycode 53 = minus underscore
+- control keycode 53 = Control_underscore
+- alt keycode 53 = Meta_minus
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+- alt keycode 57 = Meta_space
+-keycode 211 = less greater
+- alt keycode 211 = Meta_less
+- shift alt keycode 211 = Meta_greater
+-
+diff --git a/data/keymaps/i386/olpc/pt-olpc.map b/data/keymaps/i386/olpc/pt-olpc.map
+new file mode 100644
+index 0000000..173970a
+--- /dev/null
++++ b/data/keymaps/i386/olpc/pt-olpc.map
+@@ -0,0 +1,68 @@
++! Portuguese keymap for OLPC; based upon pt.map
++! Walter Bender (8 January 2008)
++!
++charset "iso-8859-15"
++keymaps 0-2,4,6,8,12
++alt_is_meta
++include "qwerty-layout"
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam onesuperior
++keycode 3 = two at twosuperior
++keycode 4 = three numbersign threesuperior
++keycode 5 = four dollar
++keycode 6 = five percent cent
++keycode 7 = six dead_diaeresis notsign
++keycode 8 = seven ampersand
++keycode 9 = eight asterisk
++keycode 10 = nine parenleft
++keycode 11 = zero parenright
++keycode 12 = minus underscore
++ control keycode 12 = Control_underscore
++ alt keycode 12 = Meta_minus
++keycode 13 = equal plus section
++ alt keycode 13 = Meta_equal
++keycode 14 = Delete
++keycode 15 = Tab
++keycode 18 = e E euro
++keycode 26 = apostrophe grave dead_acute dead_grave
++ alt keycode 26 = Meta_apostrophe
++keycode 27 = bracketleft braceleft ordfeminine
++ control keycode 27 = Escape
++ alt keycode 27 = Meta_bracketleft
++keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++keycode 29 = Control
++ shift keycode 29 = Compose
++keycode 39 = +ccedilla Ccedilla
++keycode 40 = asciitilde asciicircum dead_tilde dead_circumflex
++ control keycode 40 = Control_asciicircum
++ alt keycode 40 = Meta_asciitilde
++keycode 41 = apostrophe quotedbl
++ alt keycode 41 = Meta_grave
++keycode 42 = Shift
++keycode 43 = bracketright braceright masculine
++ control keycode 43 = Control_bracketright
++ alt keycode 43 = Meta_bracketright
++keycode 44 = z Z bar
++keycode 51 = comma less
++ alt keycode 51 = Meta_comma
++keycode 52 = period greater backslash
++ control keycode 52 = Control_backslash
++ alt keycode 52 = Meta_period
++keycode 53 = semicolon colon
++ alt keycode 53 = Meta_semicolon
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++keycode 211 = slash question
++ alt keycode 211 = Meta_slash
++compose 'e' '=' to '¤'
++compose '-' 'e' to '¤'
++compose '-' 'E' to '¤'
++compose '=' 'E' to '¤'
++
+diff --git a/data/keymaps/i386/olpc/pt.map b/data/keymaps/i386/olpc/pt.map
+deleted file mode 100644
+index 173970a..0000000
+--- a/data/keymaps/i386/olpc/pt.map
++++ /dev/null
+@@ -1,68 +0,0 @@
+-! Portuguese keymap for OLPC; based upon pt.map
+-! Walter Bender (8 January 2008)
+-!
+-charset "iso-8859-15"
+-keymaps 0-2,4,6,8,12
+-alt_is_meta
+-include "qwerty-layout"
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam onesuperior
+-keycode 3 = two at twosuperior
+-keycode 4 = three numbersign threesuperior
+-keycode 5 = four dollar
+-keycode 6 = five percent cent
+-keycode 7 = six dead_diaeresis notsign
+-keycode 8 = seven ampersand
+-keycode 9 = eight asterisk
+-keycode 10 = nine parenleft
+-keycode 11 = zero parenright
+-keycode 12 = minus underscore
+- control keycode 12 = Control_underscore
+- alt keycode 12 = Meta_minus
+-keycode 13 = equal plus section
+- alt keycode 13 = Meta_equal
+-keycode 14 = Delete
+-keycode 15 = Tab
+-keycode 18 = e E euro
+-keycode 26 = apostrophe grave dead_acute dead_grave
+- alt keycode 26 = Meta_apostrophe
+-keycode 27 = bracketleft braceleft ordfeminine
+- control keycode 27 = Escape
+- alt keycode 27 = Meta_bracketleft
+-keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+-keycode 29 = Control
+- shift keycode 29 = Compose
+-keycode 39 = +ccedilla Ccedilla
+-keycode 40 = asciitilde asciicircum dead_tilde dead_circumflex
+- control keycode 40 = Control_asciicircum
+- alt keycode 40 = Meta_asciitilde
+-keycode 41 = apostrophe quotedbl
+- alt keycode 41 = Meta_grave
+-keycode 42 = Shift
+-keycode 43 = bracketright braceright masculine
+- control keycode 43 = Control_bracketright
+- alt keycode 43 = Meta_bracketright
+-keycode 44 = z Z bar
+-keycode 51 = comma less
+- alt keycode 51 = Meta_comma
+-keycode 52 = period greater backslash
+- control keycode 52 = Control_backslash
+- alt keycode 52 = Meta_period
+-keycode 53 = semicolon colon
+- alt keycode 53 = Meta_semicolon
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+-keycode 211 = slash question
+- alt keycode 211 = Meta_slash
+-compose 'e' '=' to '¤'
+-compose '-' 'e' to '¤'
+-compose '-' 'E' to '¤'
+-compose '=' 'E' to '¤'
+-
+--
+1.5.3.7
+
diff --git a/abs/core-testing/kbproto/PKGBUILD b/abs/core-testing/kbproto/PKGBUILD
new file mode 100644
index 0000000..f902e44
--- /dev/null
+++ b/abs/core-testing/kbproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=kbproto
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 XKB extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('6092cdb0a1225f95356ddbe6c2abaad5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/kdelibs3/PKGBUILD b/abs/core-testing/kdelibs3/PKGBUILD
new file mode 100644
index 0000000..f4ed7a0
--- /dev/null
+++ b/abs/core-testing/kdelibs3/PKGBUILD
@@ -0,0 +1,55 @@
+# $ Id: $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=kdelibs3
+pkgver=3.5.10
+pkgrel=1
+pkgdesc="KDE3 Core Libraries"
+arch=('i686' 'x86_64')
+url="http://www.kde.org"
+license=('GPL' 'LGPL')
+depends=('libxslt' 'pcre' 'libart-lgpl' 'alsa-lib' 'libcups'
+ 'jasper' 'bzip2' 'openssl' 'libidn' 'libxrender'
+ 'aspell' 'heimdal' 'acl' 'libtiff' 'qt3' 'ca-certificates')
+makedepends=('pkgconfig' 'cups')
+options=('libtool')
+install='kdelibs3.install'
+source=("ftp://carroll.aset.psu.edu/pub/kde/stable/${pkgver}/src/kdelibs-${pkgver}.tar.bz2"
+ 'kde3.profile')
+md5sums=('43cd55ed15f63b5738d620ef9f9fd568'
+ '3c49828eb8985cfb25af8e1495f7800a')
+
+build() {
+ cd $srcdir/kdelibs-$pkgver
+
+ . /etc/profile.d/qt3.sh
+ . $srcdir/kde3.profile
+
+ # install KDE3 profile
+ install -D -m755 $srcdir/kde3.profile $pkgdir/etc/profile.d/kde3.sh
+
+ ./configure --prefix=/opt/kde \
+ --with-distribution='Arch Linux' \
+ --with-alsa \
+ --disable-dependency-tracking \
+ --disable-debug \
+ --disable-dnssd \
+ --disable-dnotify \
+ --enable-inotify \
+ --enable-sendfile \
+ --without-lua \
+ --without-hspell \
+ --enable-gcc-hidden-visibility \
+ --enable-final \
+ --enable-new-ldflags LDFLAGS="${LDFLAGS} -L/opt/qt/lib" \
+ --without-arts \
+ --disable-libfam || return 1
+ make || return 1
+ make DESTDIR=$pkgdir install || return 1
+
+ # cert bundle seems to be hardcoded
+ # link it to the one from ca-certificates
+ rm -f $pkgdir/opt/kde/share/apps/kssl/ca-bundle.crt
+ ln -sf /etc/ssl/certs/ca-certificates.crt $pkgdir/opt/kde/share/apps/kssl/ca-bundle.crt
+}
diff --git a/abs/core-testing/kdelibs3/kde3.profile b/abs/core-testing/kdelibs3/kde3.profile
new file mode 100755
index 0000000..d7c7e9d
--- /dev/null
+++ b/abs/core-testing/kdelibs3/kde3.profile
@@ -0,0 +1,15 @@
+export KDE3DIR=/opt/kde
+export KDEDIRS=/usr:$KDE3DIR
+export PATH=$PATH:$KDE3DIR/bin
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$KDE3DIR/lib/pkgconfig
+if [ ! -z $XDG_DATA_DIRS ]; then
+ export XDG_DATA_DIRS=$XDG_DATA_DIRS:$KDE3DIR/share
+else
+ export XDG_DATA_DIRS=$KDE3DIR/share
+fi
+if [ ! -z $XDG_CONFIG_DIRS ]; then
+ export XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS:$KDE3DIR/etc/xdg
+else
+ export XDG_CONFIG_DIRS=$KDE3DIR/etc/xdg
+fi
+unset KDE3DIR \ No newline at end of file
diff --git a/abs/core-testing/kdelibs3/kdelibs3.install b/abs/core-testing/kdelibs3/kdelibs3.install
new file mode 100644
index 0000000..060ba21
--- /dev/null
+++ b/abs/core-testing/kdelibs3/kdelibs3.install
@@ -0,0 +1,11 @@
+post_install() {
+ grep -q '/opt/kde/lib' etc/ld.so.conf || echo '/opt/kde/lib' >> etc/ld.so.conf
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ sed -ie '/\/opt\/kde\/lib/d' etc/ld.so.conf
+}
diff --git a/abs/core-testing/kernel-headers/PKGBUILD b/abs/core-testing/kernel-headers/PKGBUILD
new file mode 100644
index 0000000..485a918
--- /dev/null
+++ b/abs/core-testing/kernel-headers/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 3465 2008-06-22 20:06:08Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=kernel-headers
+pkgver=2.6.25.8
+_basever=2.6.25
+pkgrel=10
+pkgdesc="Kernel headers sanitized for use in userspace"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/libc"
+groups=('base')
+source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${_basever}.tar.bz2
+ http://www.kernel.org/pub/linux/kernel/v2.6/patch-${pkgver}.bz2
+ netfilter-includes.patch)
+md5sums=('db95a49a656a3247d4995a797d333153'
+ '007e6aca33604bc09687790361026d3c'
+ '671fa5d449e145199a871d1a41514122')
+
+build() {
+ cd ${startdir}/src/linux-${_basever}
+ patch -Np1 -i ${startdir}/src/patch-${pkgver} || return 1
+ patch -Np1 -i ${startdir}/src/netfilter-includes.patch || return 1
+
+ make mrproper
+ make headers_check || return 1
+ make INSTALL_HDR_PATH=${startdir}/pkg/usr headers_install
+}
diff --git a/abs/core-testing/kernel-headers/netfilter-includes.patch b/abs/core-testing/kernel-headers/netfilter-includes.patch
new file mode 100644
index 0000000..b39a4dd
--- /dev/null
+++ b/abs/core-testing/kernel-headers/netfilter-includes.patch
@@ -0,0 +1,91 @@
+From: Patrick McHardy <kaber@trash.net>
+Date: Wed, 21 May 2008 21:08:38 +0000 (-0700)
+Subject: netfilter: Move linux/types.h inclusions outside of #ifdef __KERNEL__
+X-Git-Tag: v2.6.26-rc4~7^2~9
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c8942f1f0a7e2160ebf2e51ba89e50ee5895a1e7
+
+netfilter: Move linux/types.h inclusions outside of #ifdef __KERNEL__
+
+Greg Steuck <greg@nest.cx> points out that some of the netfilter
+headers can't be used in userspace without including linux/types.h
+first. The headers include their own linux/types.h include statements,
+these are stripped by make headers-install because they are inside
+#ifdef __KERNEL__ however. Move them out to fix this.
+
+Reported and Tested by Greg Steuck.
+
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+
+diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
+index e4c6659..0c5eb7e 100644
+--- a/include/linux/netfilter.h
++++ b/include/linux/netfilter.h
+@@ -3,7 +3,6 @@
+
+ #ifdef __KERNEL__
+ #include <linux/init.h>
+-#include <linux/types.h>
+ #include <linux/skbuff.h>
+ #include <linux/net.h>
+ #include <linux/netdevice.h>
+@@ -14,6 +13,7 @@
+ #include <linux/list.h>
+ #include <net/net_namespace.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+
+ /* Responses from hook functions. */
+diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h
+index dd9c97f..590ac3d 100644
+--- a/include/linux/netfilter_arp/arp_tables.h
++++ b/include/linux/netfilter_arp/arp_tables.h
+@@ -11,11 +11,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in.h>
+ #include <linux/if_arp.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_arp.h>
+
+diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
+index bfc889f..092bd50 100644
+--- a/include/linux/netfilter_ipv4/ip_tables.h
++++ b/include/linux/netfilter_ipv4/ip_tables.h
+@@ -17,11 +17,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in.h>
+ #include <linux/ip.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_ipv4.h>
+
+diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
+index f2507dc..1089e33 100644
+--- a/include/linux/netfilter_ipv6/ip6_tables.h
++++ b/include/linux/netfilter_ipv6/ip6_tables.h
+@@ -17,11 +17,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in6.h>
+ #include <linux/ipv6.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_ipv6.h>
+
diff --git a/abs/core-testing/kernel26/PKGBUILD b/abs/core-testing/kernel26/PKGBUILD
new file mode 100644
index 0000000..b96120c
--- /dev/null
+++ b/abs/core-testing/kernel26/PKGBUILD
@@ -0,0 +1,159 @@
+# $Id: PKGBUILD 10337 2008-08-26 21:10:56Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=kernel26
+_basekernel=2.6.26
+pkgver=2.6.26.3
+pkgrel=10
+#_patchname="patch-${pkgver}-${pkgrel}-ARCH"
+_patchname="patch-${pkgver}-1-ARCH"
+pkgdesc="The Linux Kernel and modules"
+arch=(i686 x86_64)
+license=('GPL2')
+groups=('base')
+url="http://www.kernel.org"
+backup=(etc/mkinitcpio.d/${pkgname}.preset)
+depends=('coreutils' 'module-init-tools' 'mkinitcpio>=0.5.18')
+# pwc, ieee80211 and hostap-driver26 modules are included in kernel26 now
+# nforce package support was abandoned by nvidia, kernel modules should cover everything now.
+# kernel24 support is dropped since glibc24
+replaces=('kernel24' 'kernel24-scsi' 'kernel26-scsi'
+ 'alsa-driver' 'ieee80211' 'hostap-driver26'
+ 'pwc' 'nforce' 'squashfs' 'unionfs' 'ivtv'
+ 'zd1211' 'kvm-modules' 'iwlwifi' 'rt2x00-cvs')
+install=kernel26.install
+source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
+ ftp://ftp.archlinux.org/other/kernel26/${_patchname}.bz2
+ # the main kernel config files
+ config config.x86_64
+ # standard config files for mkinitcpio ramdisk
+ kernel26.preset
+ logo_linux_clut224.ppm
+ logo_linux_mono.pbm
+ logo_linux_vga16.ppm)
+md5sums=('5169d01c405bc3f866c59338e217968c'
+ '003e89dd71b32ae9b93cd1601da3b1b0'
+ '4fd1071a8dc2ea993aed81d5920de18d'
+ 'd5ad1f296356d159a2616a49d98b3434'
+ '25584700a0a679542929c4bed31433b6'
+ '7bdfe2e1daedb324fdfdfa95ba4e2430'
+ 'a88d90384e50bd061a81fcc6573fc3bb'
+ 'f536292192a69d590b2ffd4700c14185')
+
+build() {
+ KARCH=x86
+
+ cd $startdir/src/linux-$_basekernel
+ # Add -ARCH patches
+ # See http://projects.archlinux.org/git/?p=linux-2.6-ARCH.git;a=summary
+ patch -Np1 -i $startdir/src/${_patchname} || return 1
+
+ if [ "$CARCH" = "x86_64" ]; then
+ cat ../config.x86_64 >./.config
+ else
+ cat ../config >./.config
+ fi
+ cp ../logo_linux_clut224.ppm drivers/video/logo/
+ cp ../logo_linux_mono.ppm drivers/video/logo/
+ cp ../logo_linux_vga16.ppm drivers/video/logo/
+ # build the full kernel version to use in pathnames
+ . ./.config
+ ### next line is only needed for rc kernels
+ #_kernver="2.6.25${CONFIG_LOCALVERSION}"
+ _kernver="${_basekernel}${CONFIG_LOCALVERSION}"
+ # load configuration
+ yes "" | make config
+ # build!
+ ####################
+ # stop here
+ # this is useful to configure the kernel
+ #msg "Stopping build"
+ #return 1
+ ####################
+ make bzImage modules || return 1
+ mkdir -p $startdir/pkg/{lib/modules,boot}
+ make INSTALL_MOD_PATH=$startdir/pkg modules_install || return 1
+ cp System.map $startdir/pkg/boot/System.map26
+ cp arch/$KARCH/boot/bzImage $startdir/pkg/boot/vmlinuz26
+ install -D -m644 Makefile \
+ $startdir/pkg/usr/src/linux-${_kernver}/Makefile
+ install -D -m644 kernel/Makefile \
+ $startdir/pkg/usr/src/linux-${_kernver}/kernel/Makefile
+ install -D -m644 .config \
+ $startdir/pkg/usr/src/linux-${_kernver}/.config
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include
+
+ for i in acpi asm-{generic,x86} config linux math-emu media net pcmcia scsi sound video; do
+ cp -a include/$i $startdir/pkg/usr/src/linux-${_kernver}/include/
+ done
+
+ # copy files necessary for later builds, like nvidia and vmware
+ cp Module.symvers $startdir/pkg/usr/src/linux-${_kernver}
+ cp -a scripts $startdir/pkg/usr/src/linux-${_kernver}
+ # fix permissions on scripts dir
+ chmod og-w -R $startdir/pkg/usr/src/linux-${_kernver}/scripts
+ #mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/.tmp_versions
+
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/kernel
+
+ cp arch/$KARCH/Makefile $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/
+ if [ "$CARCH" = "i686" ]; then
+ cp arch/$KARCH/Makefile_32.cpu $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/
+ fi
+ cp arch/$KARCH/kernel/asm-offsets.s $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/kernel/
+
+ # add headers for lirc package
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video
+ cp drivers/media/video/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/
+ for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102 usbvideo zc0301; do
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/$i
+ cp -a drivers/media/video/$i/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/$i
+ done
+ # add dm headers
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/md
+ cp drivers/md/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/md
+ # add inotify.h
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include/linux
+ cp include/linux/inotify.h $startdir/pkg/usr/src/linux-${_kernver}/include/linux/
+ # add CLUSTERIP file for iptables
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/net/ipv4/netfilter/
+ # add wireless headers
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/net/mac80211/
+ cp net/mac80211/*.h $startdir/pkg/usr/src/linux-${_kernver}/net/mac80211/
+ # add dvb headers for external modules
+ # in reference to:
+ # http://bugs.archlinux.org/task/9912
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core
+ cp drivers/media/dvb/dvb-core/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/
+ # add dvb headers for external modules
+ # in reference to:
+ # http://bugs.archlinux.org/task/11194
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include/config/dvb/
+ cp include/config/dvb/*.h $startdir/pkg/usr/src/linux-${_kernver}/include/config/dvb/
+ # add xfs and shmem for aufs building
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/fs/xfs
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/mm
+ cp fs/xfs/xfs_sb.h $startdir/pkg/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h
+ # add vmlinux
+ cp vmlinux $startdir/pkg/usr/src/linux-${_kernver}
+ # copy in Kconfig files
+ for i in `find . -name "Kconfig*"`; do
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/`echo $i | sed 's|/Kconfig.*||'`
+ cp $i $startdir/pkg/usr/src/linux-${_kernver}/$i
+ done
+
+ cd $startdir/pkg/usr/src/linux-${_kernver}/include && ln -s asm-$KARCH asm
+
+ chown -R root.root $startdir/pkg/usr/src/linux-${_kernver}
+ find $startdir/pkg/usr/src/linux-${_kernver} -type d -exec chmod 755 {} \;
+ cd $startdir/pkg/lib/modules/${_kernver} && \
+ (rm -f source build; ln -sf ../../../usr/src/linux-${_kernver} build)
+ # install fallback mkinitcpio.conf file and preset file for kernel
+ install -m644 -D $startdir/src/${pkgname}.preset $startdir/pkg/etc/mkinitcpio.d/${pkgname}.preset || return 1
+ # set correct depmod command for install
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" $startdir/kernel26.install
+ echo -e "# DO NOT EDIT THIS FILE\nALL_kver='${_kernver}'" > ${startdir}/pkg/etc/mkinitcpio.d/${pkgname}.kver
+ # remove unneeded architectures
+ rm -rf $startdir/pkg/usr/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,xtensa}
+}
+
diff --git a/abs/core-testing/kernel26/config b/abs/core-testing/kernel26/config
new file mode 100644
index 0000000..e885de7
--- /dev/null
+++ b/abs/core-testing/kernel26/config
@@ -0,0 +1,3897 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.26
+# Mon Jul 21 19:06:23 2008
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+# CONFIG_GENERIC_LOCKBREAK is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_FAST_CMPXCHG_LOCAL=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_32_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ARCH"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=19
+# CONFIG_CGROUPS is not set
+# CONFIG_CGROUP_DEBUG is not set
+# CONFIG_CGROUP_NS is not set
+# CONFIG_CGROUP_DEVICE is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_HAVE_UNSTABLE_SCHED_CLOCK is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+# CONFIG_USER_SCHED is not set
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUP_CPUACCT is not set
+# CONFIG_RESOURCE_COUNTERS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+CONFIG_BLK_DEV_BSG=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_PREEMPT_NOTIFIERS=y
+CONFIG_CLASSIC_RCU=y
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_RDC321X is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_PARAVIRT_GUEST=y
+CONFIG_VMI=y
+# CONFIG_KVM_CLOCK is not set
+# CONFIG_KVM_GUEST is not set
+CONFIG_LGUEST_GUEST=y
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_CLOCK is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+CONFIG_M686=y
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CPU=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_XADD=y
+# CONFIG_X86_PPRO_FENCE is not set
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+# CONFIG_IOMMU_HELPER is not set
+CONFIG_NR_CPUS=16
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=m
+CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
+CONFIG_TOSHIBA=m
+CONFIG_I8K=m
+CONFIG_X86_REBOOTFIXUPS=y
+CONFIG_MICROCODE=m
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_HIGHPTE is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+CONFIG_X86_PAT=y
+CONFIG_EFI=y
+# CONFIG_IRQBALANCE is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+CONFIG_SCHED_HRTICK=y
+CONFIG_KEXEC=y
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=m
+CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=m
+CONFIG_ACPI_BAY=m
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=m
+CONFIG_ACPI_WMI=m
+CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_TOSHIBA=m
+# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+CONFIG_X86_APM_BOOT=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_DO_ENABLE=y
+# CONFIG_APM_CPU_IDLE is not set
+# CONFIG_APM_DISPLAY_BLANK is not set
+# CONFIG_APM_ALLOW_INTS is not set
+CONFIG_APM_REAL_MODE_POWER_OFF=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_POWERNOW_K6=m
+CONFIG_X86_POWERNOW_K7=m
+CONFIG_X86_POWERNOW_K7_ACPI=y
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_POWERNOW_K8_ACPI=y
+CONFIG_X86_GX_SUSPMOD=m
+# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+CONFIG_X86_SPEEDSTEP_ICH=m
+CONFIG_X86_SPEEDSTEP_SMI=m
+CONFIG_X86_P4_CLOCKMOD=m
+CONFIG_X86_CPUFREQ_NFORCE2=m
+CONFIG_X86_LONGRUN=m
+CONFIG_X86_LONGHAUL=m
+CONFIG_X86_E_POWERSAVER=m
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+CONFIG_X86_SPEEDSTEP_LIB=m
+CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+# CONFIG_PCI_GOOLPC is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_OLPC=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=m
+CONFIG_PCIEAER=y
+# CONFIG_PCIEASPM is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_OLPC=y
+CONFIG_K8_NB=y
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+CONFIG_TCIC=m
+CONFIG_PCMCIA_PROBE=y
+CONFIG_PCCARD_NONSTATIC=m
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_COMPAQ=m
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+CONFIG_HOTPLUG_PCI_IBM=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+CONFIG_HOTPLUG_PCI_SHPC=m
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_IPV6_MROUTE is not set
+CONFIG_NETLABEL=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+CONFIG_SCTP_HMAC_SHA1=y
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+# CONFIG_NET_EMATCH is not set
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_TOSHIBA_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=m
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
+
+#
+# Selecting 'y' for an algorithm will
+#
+
+#
+# build the algorithm into mac80211.
+#
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_NET_9P=m
+CONFIG_NET_9P_VIRTIO=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+CONFIG_PARPORT_PC_FIFO=y
+CONFIG_PARPORT_PC_SUPERIO=y
+CONFIG_PARPORT_PC_PCMCIA=m
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_ISAPNP=y
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_VIRTIO_BLK=m
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+CONFIG_PHANTOM=m
+CONFIG_EEPROM_93CX6=m
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ACER_WMI=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_TC1100_WMI=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+# CONFIG_SONYPI_COMPAT is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_INTEL_MENLOW=m
+CONFIG_EEEPC_LAPTOP=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_DELKIN=m
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+CONFIG_BLK_DEV_IDEACPI=y
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_PLATFORM=m
+CONFIG_BLK_DEV_CMD640=m
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+CONFIG_BLK_DEV_IDEPNP=m
+CONFIG_BLK_DEV_IDEDMA_SFF=y
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=m
+CONFIG_BLK_DEV_OPTI621=m
+CONFIG_BLK_DEV_RZ1000=m
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_ATIIXP=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_CS5535=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_JMICRON=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_IT8213=m
+CONFIG_BLK_DEV_IT821X=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SIS5513=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+CONFIG_BLK_DEV_TC86C001=m
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+CONFIG_BLK_DEV_4DRIVES=m
+CONFIG_BLK_DEV_ALI14XX=m
+CONFIG_BLK_DEV_DTC2278=m
+CONFIG_BLK_DEV_HT6560B=m
+CONFIG_BLK_DEV_QD65XX=m
+CONFIG_BLK_DEV_UMC8672=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_ENCLOSURE=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_FC_TGT_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_7000FASST=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AHA152X=m
+CONFIG_SCSI_AHA1542=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_IN2000=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+# CONFIG_SCSI_FLASHPOINT is not set
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_DTC3280=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_GENERIC_NCR5380=m
+CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
+CONFIG_SCSI_GENERIC_NCR53C400=y
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_MVSAS=m
+CONFIG_SCSI_NCR53C406A=m
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_PAS16=m
+CONFIG_SCSI_QLOGIC_FAS=m
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_SYM53C416=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_T128=m
+CONFIG_SCSI_U14_34F=m
+# CONFIG_SCSI_U14_34F_TAGGED_QUEUE is not set
+# CONFIG_SCSI_U14_34F_LINKED_COMMANDS is not set
+CONFIG_SCSI_U14_34F_MAX_TAGS=8
+CONFIG_SCSI_ULTRASTOR=m
+CONFIG_SCSI_NSP32=m
+# CONFIG_SCSI_DEBUG is not set
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=m
+CONFIG_SATA_SIL24=m
+CONFIG_ATA_SFF=y
+CONFIG_SATA_SVW=m
+CONFIG_ATA_PIIX=m
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_PDC_ADMA=m
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_SX4=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+CONFIG_SATA_INIC162X=m
+CONFIG_PATA_ACPI=m
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CS5535=m
+CONFIG_PATA_CS5536=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_ATA_GENERIC=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+CONFIG_PATA_ISAPNP=m
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_LEGACY=m
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_MARVELL=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PCMCIA=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_QDI=m
+CONFIG_PATA_RADISYS=m
+CONFIG_PATA_RZ1000=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_WINBOND_VLB=m
+CONFIG_PATA_SCH=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_MULTIPATH_HP=m
+CONFIG_DM_DELAY=m
+CONFIG_DM_UEVENT=y
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=m
+CONFIG_FUSION_FC=m
+CONFIG_FUSION_SAS=m
+CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_CTL=m
+# CONFIG_FUSION_LOGGING is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+CONFIG_IEEE1394=m
+CONFIG_IEEE1394_OHCI1394=m
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_RAWIO=m
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_DV1394=m
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+CONFIG_I2O=m
+CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+CONFIG_I2O_EXT_ADAPTEC=y
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_CONFIG_OLD_IOCTL=y
+CONFIG_I2O_BUS=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEVICES_MULTIQUEUE=y
+CONFIG_IFB=m
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_NET_SB1000=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+CONFIG_3C515=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_LANCE=m
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_SMC9194=m
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+CONFIG_NET_VENDOR_RACAL=y
+CONFIG_NI52=m
+CONFIG_NI65=m
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R6040=m
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_SC92031=m
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_E1000E=m
+CONFIG_E1000E_ENABLED=y
+CONFIG_IP1000=m
+CONFIG_IGB=m
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T1_NAPI=y
+CONFIG_CHELSIO_T3=m
+CONFIG_IXGBE=m
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+CONFIG_MYRI10GE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+# CONFIG_MLX4_CORE is not set
+CONFIG_TEHUTI=m
+CONFIG_BNX2X=m
+CONFIG_SFC=m
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_ADM8211=m
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_ATH5K=m
+# CONFIG_ATH5K_DEBUG is not set
+CONFIG_IWLWIFI=m
+CONFIG_IWLCORE=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWL4965=m
+CONFIG_IWL4965_HT=y
+CONFIG_IWL4965_LEDS=y
+CONFIG_IWL4965_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL4965_SENSITIVITY=y
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWL3945=m
+CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL3945_LEDS=y
+# CONFIG_IWL3945_DEBUG is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_HOSTAP_CS=m
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_B43_PCMCIA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_RFKILL=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_LEDS=y
+CONFIG_B43LEGACY_RFKILL=y
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_RFKILL=y
+CONFIG_RT2X00_LIB_LEDS=y
+CONFIG_RT2400PCI=m
+CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
+CONFIG_RT2500PCI=m
+CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
+CONFIG_RT61PCI=m
+CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
+CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
+CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_TCP=m
+CONFIG_ATM_LANAI=m
+CONFIG_ATM_ENI=m
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+CONFIG_ATM_FIRESTREAM=m
+CONFIG_ATM_ZATM=m
+# CONFIG_ATM_ZATM_DEBUG is not set
+CONFIG_ATM_NICSTAR=m
+# CONFIG_ATM_NICSTAR_USE_SUNI is not set
+# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
+CONFIG_ATM_IDT77252=m
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+CONFIG_ATM_IDT77252_USE_SUNI=y
+CONFIG_ATM_AMBASSADOR=m
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+CONFIG_ATM_HORIZON=m
+# CONFIG_ATM_HORIZON_DEBUG is not set
+CONFIG_ATM_IA=m
+# CONFIG_ATM_IA_DEBUG is not set
+CONFIG_ATM_FORE200E_MAYBE=m
+# CONFIG_ATM_FORE200E_PCA is not set
+CONFIG_ATM_HE=m
+# CONFIG_ATM_HE_USE_SUNI is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+CONFIG_PPPOL2TP=m
+CONFIG_SLIP=m
+# CONFIG_SLIP_COMPRESSED is not set
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_VIRTIO_NET=m
+CONFIG_ISDN=m
+CONFIG_ISDN_I4L=m
+CONFIG_ISDN_PPP=y
+CONFIG_ISDN_PPP_VJ=y
+CONFIG_ISDN_MPP=y
+CONFIG_IPPP_FILTER=y
+CONFIG_ISDN_PPP_BSDCOMP=m
+CONFIG_ISDN_AUDIO=y
+CONFIG_ISDN_TTY_FAX=y
+
+#
+# ISDN feature submodules
+#
+CONFIG_ISDN_DIVERSION=m
+
+#
+# ISDN4Linux hardware drivers
+#
+
+#
+# Passive cards
+#
+CONFIG_ISDN_DRV_HISAX=m
+
+#
+# D-channel protocol features
+#
+CONFIG_HISAX_EURO=y
+CONFIG_DE_AOC=y
+# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+# CONFIG_HISAX_NO_LLC is not set
+# CONFIG_HISAX_NO_KEYPAD is not set
+CONFIG_HISAX_1TR6=y
+CONFIG_HISAX_NI1=y
+CONFIG_HISAX_MAX_CARDS=8
+
+#
+# HiSax supported cards
+#
+CONFIG_HISAX_16_0=y
+CONFIG_HISAX_16_3=y
+CONFIG_HISAX_TELESPCI=y
+CONFIG_HISAX_S0BOX=y
+CONFIG_HISAX_AVM_A1=y
+CONFIG_HISAX_FRITZPCI=y
+CONFIG_HISAX_AVM_A1_PCMCIA=y
+CONFIG_HISAX_ELSA=y
+CONFIG_HISAX_IX1MICROR2=y
+CONFIG_HISAX_DIEHLDIVA=y
+CONFIG_HISAX_ASUSCOM=y
+CONFIG_HISAX_TELEINT=y
+CONFIG_HISAX_HFCS=y
+CONFIG_HISAX_SEDLBAUER=y
+CONFIG_HISAX_SPORTSTER=y
+CONFIG_HISAX_MIC=y
+CONFIG_HISAX_NETJET=y
+CONFIG_HISAX_NETJET_U=y
+CONFIG_HISAX_NICCY=y
+CONFIG_HISAX_ISURF=y
+CONFIG_HISAX_HSTSAPHIR=y
+CONFIG_HISAX_BKM_A4T=y
+CONFIG_HISAX_SCT_QUADRO=y
+CONFIG_HISAX_GAZEL=y
+CONFIG_HISAX_HFC_PCI=y
+CONFIG_HISAX_W6692=y
+CONFIG_HISAX_HFC_SX=y
+CONFIG_HISAX_ENTERNOW_PCI=y
+# CONFIG_HISAX_DEBUG is not set
+
+#
+# HiSax PCMCIA card service modules
+#
+CONFIG_HISAX_SEDLBAUER_CS=m
+CONFIG_HISAX_ELSA_CS=m
+CONFIG_HISAX_AVM_A1_CS=m
+CONFIG_HISAX_TELES_CS=m
+
+#
+# HiSax sub driver modules
+#
+CONFIG_HISAX_ST5481=m
+CONFIG_HISAX_HFCUSB=m
+CONFIG_HISAX_HFC4S8S=m
+CONFIG_HISAX_FRITZ_PCIPNP=m
+CONFIG_HISAX_HDLC=y
+
+#
+# Active cards
+#
+CONFIG_ISDN_DRV_ICN=m
+CONFIG_ISDN_DRV_PCBIT=m
+CONFIG_ISDN_DRV_SC=m
+CONFIG_ISDN_DRV_ACT2000=m
+CONFIG_HYSDN=m
+CONFIG_HYSDN_CAPI=y
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+CONFIG_GIGASET_M101=m
+# CONFIG_GIGASET_DEBUG is not set
+CONFIG_GIGASET_UNDOCREQ=y
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+# CONFIG_CAPI_TRACE is not set
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+CONFIG_ISDN_CAPI_CAPIDRV=m
+
+#
+# CAPI hardware drivers
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1ISA=m
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_T1ISA=m
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+CONFIG_ISDN_DIVAS_BRIPCI=y
+CONFIG_ISDN_DIVAS_PRIPCI=y
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=y
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_INPORT=m
+# CONFIG_MOUSE_ATIXL is not set
+CONFIG_MOUSE_LOGIBM=m
+CONFIG_MOUSE_PC110PAD=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_WISTRON_BTNS=m
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PARKBD=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+CONFIG_ROCKETPORT=m
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_ESPSERIAL is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+CONFIG_NOZOMI=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+CONFIG_HVC_DRIVER=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_HW_RANDOM_GEODE=m
+CONFIG_HW_RANDOM_VIA=m
+# CONFIG_HW_RANDOM_VIRTIO is not set
+CONFIG_NVRAM=m
+CONFIG_DTLK=m
+CONFIG_R3964=m
+CONFIG_APPLICOM=m
+CONFIG_SONYPI=m
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+CONFIG_IPWIRELESS=m
+CONFIG_MWAVE=m
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TELCLOCK=m
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIMTEC=m
+CONFIG_SCx200_ACB=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_TAOS_EVM=m
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
+CONFIG_I2C_PCA_PLATFORM=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_PCF8575=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_TSL2550=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+CONFIG_SPI_LM70_LLP=m
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_TLE62X0=m
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+CONFIG_W1_SLAVE_DS2760=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+CONFIG_BATTERY_DS2760=m
+CONFIG_BATTERY_OLPC=m
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+CONFIG_SENSORS_APPLESMC=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_SM501=m
+# CONFIG_HTC_PASIC3 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS5345=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_TLV320AIC23B=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_BT866=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_TCM825X=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_SAA7191=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+
+#
+# Video improvement chips
+#
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+CONFIG_VIDEO_BT848_DVB=y
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_PMS=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_W9966=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_PP=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_MEYE=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CAFE_CCIC=m
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_CADET=m
+CONFIG_RADIO_RTRACK=m
+CONFIG_RADIO_RTRACK2=m
+CONFIG_RADIO_AZTECH=m
+CONFIG_RADIO_GEMTEK=m
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_RADIO_SF16FMI=m
+CONFIG_RADIO_SF16FMR2=m
+CONFIG_RADIO_TERRATEC=m
+CONFIG_RADIO_TRUST=m
+CONFIG_RADIO_TYPHOON=m
+# CONFIG_RADIO_TYPHOON_PROC_FS is not set
+CONFIG_RADIO_ZOLTRIX=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_SI470X=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_TTPCI_EEPROM=m
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_CORE=m
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+CONFIG_DVB_CINERGYT2_TUNING=y
+CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
+CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
+CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
+CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
+CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=20
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_S5H1411=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_AGP=m
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+CONFIG_VGASTATE=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_SVGALIB=m
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+CONFIG_FB_VESA=y
+CONFIG_FB_EFI=y
+# CONFIG_FB_IMAC is not set
+# CONFIG_FB_N411 is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_I810=m
+# CONFIG_FB_I810_GTF is not set
+CONFIG_FB_LE80578=m
+CONFIG_FB_CARILLO_RANCH=m
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_CYBLA=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_SM501 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=m
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_BACKLIGHT_CARILLO_RANCH=m
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+
+#
+# Generic devices
+#
+# CONFIG_SND_PCSP is not set
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_OPL4_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_AD1848_LIB=m
+CONFIG_SND_CS4231_LIB=m
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_SB8_DSP=m
+CONFIG_SND_SB16_DSP=m
+
+#
+# ISA devices
+#
+CONFIG_SND_ADLIB=m
+CONFIG_SND_AD1816A=m
+CONFIG_SND_AD1848=m
+CONFIG_SND_ALS100=m
+CONFIG_SND_AZT2320=m
+CONFIG_SND_CMI8330=m
+CONFIG_SND_CS4231=m
+CONFIG_SND_CS4232=m
+CONFIG_SND_CS4236=m
+CONFIG_SND_DT019X=m
+CONFIG_SND_ES968=m
+CONFIG_SND_ES1688=m
+CONFIG_SND_ES18XX=m
+CONFIG_SND_SC6000=m
+CONFIG_SND_GUS_SYNTH=m
+CONFIG_SND_GUSCLASSIC=m
+CONFIG_SND_GUSEXTREME=m
+CONFIG_SND_GUSMAX=m
+CONFIG_SND_INTERWAVE=m
+CONFIG_SND_INTERWAVE_STB=m
+CONFIG_SND_OPL3SA2=m
+CONFIG_SND_OPTI92X_AD1848=m
+CONFIG_SND_OPTI92X_CS4231=m
+CONFIG_SND_OPTI93X=m
+CONFIG_SND_MIRO=m
+CONFIG_SND_SB8=m
+CONFIG_SND_SB16=m
+CONFIG_SND_SBAWE=m
+CONFIG_SND_SB16_CSP=y
+CONFIG_SND_SB16_CSP_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_SGALAXY=m
+CONFIG_SND_SSCAPE=m
+CONFIG_SND_WAVEFRONT=m
+CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL=y
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_OXYGEN_LIB=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5530=m
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_FM801_TEA575X=m
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_ANALOG=y
+CONFIG_SND_HDA_CODEC_SIGMATEL=y
+CONFIG_SND_HDA_CODEC_VIA=y
+CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CONEXANT=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_POWER_SAVE=y
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SIS7019=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_ISP1760_HCD=m
+# CONFIG_USB_ISP1760_PCI is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_HCD_SSB is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+CONFIG_USB_R8A66597_HCD=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MEMSTICK=m
+# CONFIG_MEMSTICK_DEBUG is not set
+
+#
+# MemoryStick drivers
+#
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+
+#
+# MemoryStick Host Controller Drivers
+#
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CLEVO_MAIL=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_AMD76X=m
+CONFIG_EDAC_E7XXX=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82875P=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I82860=m
+CONFIG_EDAC_R82600=m
+CONFIG_EDAC_I5000=m
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_TEST=m
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+
+#
+# SPI RTC drivers
+#
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RS5C348=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+CONFIG_DCA=m
+CONFIG_AUXDISPLAY=y
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+CONFIG_CFAG12864B=m
+CONFIG_CFAG12864B_RATE=20
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
+
+#
+# Firmware Drivers
+#
+CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
+CONFIG_EFI_VARS=m
+CONFIG_DELL_RBU=m
+CONFIG_DCDBAS=m
+CONFIG_DMIID=y
+# CONFIG_ISCSI_IBFT_FIND is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4DEV_FS=m
+CONFIG_EXT4DEV_FS_XATTR=y
+CONFIG_EXT4DEV_FS_POSIX_ACL=y
+CONFIG_EXT4DEV_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_NOLOCK=m
+CONFIG_GFS2_FS_LOCKING_DLM=m
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+# CONFIG_OCFS2_DEBUG_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Layered filesystems
+#
+CONFIG_ECRYPT_FS=m
+CONFIG_UNION_FS=m
+CONFIG_UNION_FS_XATTR=y
+# CONFIG_UNION_FS_DEBUG is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+CONFIG_NCPFS_SMALLDOS=y
+CONFIG_NCPFS_NLS=y
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_NONPROMISC_DEVMEM is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_DEBUG_NX_TEST is not set
+# CONFIG_4KSTACKS is not set
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+# CONFIG_CPA_DEBUG is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+# CONFIG_SECURITY_SMACK is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_586=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_HAVE_KVM=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+CONFIG_LGUEST=m
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_RING=y
+# CONFIG_VIRTIO_PCI is not set
+# CONFIG_VIRTIO_BALLOON is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CHECK_SIGNATURE=y
diff --git a/abs/core-testing/kernel26/config.x86_64 b/abs/core-testing/kernel26/config.x86_64
new file mode 100644
index 0000000..9c7a16a
--- /dev/null
+++ b/abs/core-testing/kernel26/config.x86_64
@@ -0,0 +1,3649 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.26
+# Sun Aug 10 13:51:28 2008
+#
+CONFIG_64BIT=y
+# CONFIG_X86_32 is not set
+CONFIG_X86_64=y
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+# CONFIG_GENERIC_LOCKBREAK is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_FAST_CMPXCHG_LOCAL=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ZONE_DMA32=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_64_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+# CONFIG_KTIME_SCALAR is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ARCH"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=19
+# CONFIG_CGROUPS is not set
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_PREEMPT_NOTIFIERS=y
+CONFIG_CLASSIC_RCU=y
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_RDC321X is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_PARAVIRT_GUEST=y
+# CONFIG_KVM_CLOCK is not set
+# CONFIG_KVM_GUEST is not set
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_CLOCK is not set
+CONFIG_MEMTEST_BOOTPARAM=y
+CONFIG_MEMTEST_BOOTPARAM_VALUE=0
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+CONFIG_GENERIC_CPU=y
+CONFIG_X86_CPU=y
+CONFIG_X86_L1_CACHE_BYTES=128
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=64
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+CONFIG_GART_IOMMU=y
+CONFIG_CALGARY_IOMMU=y
+CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_NR_CPUS=16
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_AMD=y
+CONFIG_I8K=m
+CONFIG_MICROCODE=m
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+# CONFIG_NUMA is not set
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+
+#
+# Memory hotplug is currently incompatible with Software Suspend
+#
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_MTRR=y
+CONFIG_X86_PAT=y
+CONFIG_EFI=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+CONFIG_SCHED_HRTICK=y
+CONFIG_KEXEC=y
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x200000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x200000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options
+#
+CONFIG_ARCH_HIBERNATION_HEADER=y
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=m
+CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=m
+CONFIG_ACPI_BAY=m
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=m
+CONFIG_ACPI_WMI=m
+CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_TOSHIBA=m
+# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_POWERNOW_K8_ACPI=y
+# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+CONFIG_X86_P4_CLOCKMOD=m
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+CONFIG_X86_SPEEDSTEP_LIB=m
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=m
+CONFIG_PCIEAER=y
+# CONFIG_PCIEASPM is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_K8_NB=y
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=m
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+CONFIG_HOTPLUG_PCI_SHPC=m
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+CONFIG_IA32_EMULATION=y
+CONFIG_IA32_AOUT=m
+CONFIG_COMPAT=y
+CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+CONFIG_SYSVIPC_COMPAT=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_IPV6_MROUTE is not set
+CONFIG_NETLABEL=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+CONFIG_SCTP_HMAC_SHA1=y
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+# CONFIG_NET_EMATCH is not set
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=m
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
+
+#
+# Selecting 'y' for an algorithm will
+#
+
+#
+# build the algorithm into mac80211.
+#
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_NET_9P=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+CONFIG_PARPORT_PC_FIFO=y
+CONFIG_PARPORT_PC_SUPERIO=y
+CONFIG_PARPORT_PC_PCMCIA=m
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_PARIDE is not set
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+CONFIG_PHANTOM=m
+CONFIG_EEPROM_93CX6=m
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ACER_WMI=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+# CONFIG_SONYPI_COMPAT is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_INTEL_MENLOW=m
+CONFIG_EEEPC_LAPTOP=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_DELKIN=m
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+CONFIG_BLK_DEV_IDEACPI=y
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_PLATFORM=m
+CONFIG_BLK_DEV_CMD640=m
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+CONFIG_BLK_DEV_IDEPNP=m
+CONFIG_BLK_DEV_IDEDMA_SFF=y
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=m
+CONFIG_BLK_DEV_OPTI621=m
+CONFIG_BLK_DEV_RZ1000=m
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_ATIIXP=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_JMICRON=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_IT8213=m
+CONFIG_BLK_DEV_IT821X=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SIS5513=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+CONFIG_BLK_DEV_TC86C001=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_ENCLOSURE=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_FC_TGT_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_MVSAS=m
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+# CONFIG_SCSI_DEBUG is not set
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=m
+CONFIG_SATA_SIL24=m
+CONFIG_ATA_SFF=y
+CONFIG_SATA_SVW=m
+CONFIG_ATA_PIIX=m
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_PDC_ADMA=m
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_SX4=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+CONFIG_SATA_INIC162X=m
+CONFIG_PATA_ACPI=m
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_ATA_GENERIC=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_MARVELL=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PCMCIA=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_RADISYS=m
+CONFIG_PATA_RZ1000=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_SCH=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_MULTIPATH_HP=m
+CONFIG_DM_DELAY=m
+CONFIG_DM_UEVENT=y
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=m
+CONFIG_FUSION_FC=m
+CONFIG_FUSION_SAS=m
+CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_CTL=m
+# CONFIG_FUSION_LOGGING is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+CONFIG_IEEE1394=m
+CONFIG_IEEE1394_OHCI1394=m
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_RAWIO=m
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_DV1394=m
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+CONFIG_I2O=m
+CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+CONFIG_I2O_EXT_ADAPTEC=y
+CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_CONFIG_OLD_IOCTL=y
+CONFIG_I2O_BUS=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEVICES_MULTIQUEUE=y
+CONFIG_IFB=m
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_NET_SB1000=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_HP100=m
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R6040=m
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_SC92031=m
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_E1000E=m
+CONFIG_E1000E_ENABLED=y
+CONFIG_IP1000=m
+CONFIG_IGB=m
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T1_NAPI=y
+CONFIG_CHELSIO_T3=m
+CONFIG_IXGBE=m
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+CONFIG_MYRI10GE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+# CONFIG_MLX4_CORE is not set
+CONFIG_TEHUTI=m
+CONFIG_BNX2X=m
+CONFIG_SFC=m
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_ADM8211=m
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_ATH5K=m
+# CONFIG_ATH5K_DEBUG is not set
+CONFIG_IWLWIFI=m
+CONFIG_IWLCORE=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWL4965=m
+CONFIG_IWL4965_HT=y
+CONFIG_IWL4965_LEDS=y
+CONFIG_IWL4965_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL4965_SENSITIVITY=y
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWL3945=m
+CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL3945_LEDS=y
+# CONFIG_IWL3945_DEBUG is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_HOSTAP_CS=m
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_B43_PCMCIA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_RFKILL=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_LEDS=y
+CONFIG_B43LEGACY_RFKILL=y
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_RFKILL=y
+CONFIG_RT2X00_LIB_LEDS=y
+CONFIG_RT2400PCI=m
+CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
+CONFIG_RT2500PCI=m
+CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
+CONFIG_RT61PCI=m
+CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
+CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
+CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_TCP=m
+CONFIG_ATM_LANAI=m
+CONFIG_ATM_ENI=m
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+CONFIG_ATM_FIRESTREAM=m
+CONFIG_ATM_ZATM=m
+# CONFIG_ATM_ZATM_DEBUG is not set
+CONFIG_ATM_IDT77252=m
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+CONFIG_ATM_IDT77252_USE_SUNI=y
+CONFIG_ATM_AMBASSADOR=m
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+CONFIG_ATM_HORIZON=m
+# CONFIG_ATM_HORIZON_DEBUG is not set
+CONFIG_ATM_FORE200E_MAYBE=m
+# CONFIG_ATM_FORE200E_PCA is not set
+CONFIG_ATM_HE=m
+# CONFIG_ATM_HE_USE_SUNI is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+CONFIG_PPPOL2TP=m
+CONFIG_SLIP=m
+# CONFIG_SLIP_COMPRESSED is not set
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_ISDN=m
+CONFIG_ISDN_I4L=m
+CONFIG_ISDN_PPP=y
+CONFIG_ISDN_PPP_VJ=y
+CONFIG_ISDN_MPP=y
+CONFIG_IPPP_FILTER=y
+CONFIG_ISDN_PPP_BSDCOMP=m
+CONFIG_ISDN_AUDIO=y
+CONFIG_ISDN_TTY_FAX=y
+
+#
+# ISDN feature submodules
+#
+CONFIG_ISDN_DIVERSION=m
+
+#
+# ISDN4Linux hardware drivers
+#
+
+#
+# Passive cards
+#
+CONFIG_ISDN_DRV_HISAX=m
+
+#
+# D-channel protocol features
+#
+CONFIG_HISAX_EURO=y
+CONFIG_DE_AOC=y
+# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+# CONFIG_HISAX_NO_LLC is not set
+# CONFIG_HISAX_NO_KEYPAD is not set
+CONFIG_HISAX_1TR6=y
+CONFIG_HISAX_NI1=y
+CONFIG_HISAX_MAX_CARDS=8
+
+#
+# HiSax supported cards
+#
+CONFIG_HISAX_16_3=y
+CONFIG_HISAX_TELESPCI=y
+CONFIG_HISAX_S0BOX=y
+CONFIG_HISAX_FRITZPCI=y
+CONFIG_HISAX_AVM_A1_PCMCIA=y
+CONFIG_HISAX_ELSA=y
+CONFIG_HISAX_DIEHLDIVA=y
+CONFIG_HISAX_SEDLBAUER=y
+CONFIG_HISAX_NETJET=y
+CONFIG_HISAX_NETJET_U=y
+CONFIG_HISAX_NICCY=y
+CONFIG_HISAX_BKM_A4T=y
+CONFIG_HISAX_SCT_QUADRO=y
+CONFIG_HISAX_GAZEL=y
+CONFIG_HISAX_HFC_PCI=y
+CONFIG_HISAX_W6692=y
+CONFIG_HISAX_HFC_SX=y
+CONFIG_HISAX_ENTERNOW_PCI=y
+# CONFIG_HISAX_DEBUG is not set
+
+#
+# HiSax PCMCIA card service modules
+#
+CONFIG_HISAX_SEDLBAUER_CS=m
+CONFIG_HISAX_ELSA_CS=m
+CONFIG_HISAX_AVM_A1_CS=m
+CONFIG_HISAX_TELES_CS=m
+
+#
+# HiSax sub driver modules
+#
+CONFIG_HISAX_ST5481=m
+CONFIG_HISAX_HFCUSB=m
+CONFIG_HISAX_HFC4S8S=m
+CONFIG_HISAX_FRITZ_PCIPNP=m
+CONFIG_HISAX_HDLC=y
+
+#
+# Active cards
+#
+CONFIG_HYSDN=m
+CONFIG_HYSDN_CAPI=y
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+CONFIG_GIGASET_M101=m
+# CONFIG_GIGASET_DEBUG is not set
+CONFIG_GIGASET_UNDOCREQ=y
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+# CONFIG_CAPI_TRACE is not set
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+CONFIG_ISDN_CAPI_CAPIDRV=m
+
+#
+# CAPI hardware drivers
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+CONFIG_ISDN_DIVAS_BRIPCI=y
+CONFIG_ISDN_DIVAS_PRIPCI=y
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=y
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PARKBD=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+CONFIG_ROCKETPORT=m
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+CONFIG_NOZOMI=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_NVRAM=m
+CONFIG_R3964=m
+CONFIG_APPLICOM=m
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+CONFIG_IPWIRELESS=m
+CONFIG_MWAVE=m
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TELCLOCK=m
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIMTEC=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_TAOS_EVM=m
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_PLATFORM=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_PCF8575=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_TSL2550=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+CONFIG_SPI_LM70_LLP=m
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_TLE62X0=m
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+CONFIG_W1_SLAVE_DS2760=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+CONFIG_BATTERY_DS2760=m
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+CONFIG_SENSORS_APPLESMC=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_SM501=m
+# CONFIG_HTC_PASIC3 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS5345=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_TLV320AIC23B=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_BT866=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_TCM825X=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_SAA7191=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+
+#
+# Video improvement chips
+#
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+CONFIG_VIDEO_BT848_DVB=y
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_W9966=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_PP=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_MEYE=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CAFE_CCIC=m
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_SI470X=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_TTPCI_EEPROM=m
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_CORE=m
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+CONFIG_DVB_CINERGYT2_TUNING=y
+CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
+CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
+CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
+CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
+CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=20
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_S5H1411=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_AGP=y
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+CONFIG_VGASTATE=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_SVGALIB=m
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+CONFIG_FB_VESA=y
+CONFIG_FB_EFI=y
+# CONFIG_FB_IMAC is not set
+# CONFIG_FB_N411 is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_LE80578=m
+CONFIG_FB_CARILLO_RANCH=m
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_SM501 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=m
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_BACKLIGHT_CARILLO_RANCH=m
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+
+#
+# Generic devices
+#
+# CONFIG_SND_PCSP is not set
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_SB16_DSP=m
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_OXYGEN_LIB=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5530=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_FM801_TEA575X=m
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_ANALOG=y
+CONFIG_SND_HDA_CODEC_SIGMATEL=y
+CONFIG_SND_HDA_CODEC_VIA=y
+CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CONEXANT=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_POWER_SAVE=y
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_ISP1760_HCD=m
+# CONFIG_USB_ISP1760_PCI is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_HCD_SSB is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+CONFIG_USB_R8A66597_HCD=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MMC_SPI=m
+CONFIG_MEMSTICK=m
+# CONFIG_MEMSTICK_DEBUG is not set
+
+#
+# MemoryStick drivers
+#
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+
+#
+# MemoryStick Host Controller Drivers
+#
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CLEVO_MAIL=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I5000=m
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_TEST=m
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+
+#
+# SPI RTC drivers
+#
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RS5C348=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+CONFIG_DCA=m
+CONFIG_AUXDISPLAY=y
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+CONFIG_CFAG12864B=m
+CONFIG_CFAG12864B_RATE=20
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
+
+#
+# Firmware Drivers
+#
+CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
+CONFIG_EFI_VARS=m
+CONFIG_DELL_RBU=m
+CONFIG_DCDBAS=m
+CONFIG_DMIID=y
+# CONFIG_ISCSI_IBFT_FIND is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4DEV_FS=m
+CONFIG_EXT4DEV_FS_XATTR=y
+CONFIG_EXT4DEV_FS_POSIX_ACL=y
+CONFIG_EXT4DEV_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_NOLOCK=m
+CONFIG_GFS2_FS_LOCKING_DLM=m
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+# CONFIG_OCFS2_DEBUG_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Layered filesystems
+#
+CONFIG_ECRYPT_FS=m
+CONFIG_UNION_FS=m
+CONFIG_UNION_FS_XATTR=y
+# CONFIG_UNION_FS_DEBUG is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+CONFIG_NCPFS_SMALLDOS=y
+CONFIG_NCPFS_NLS=y
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_NONPROMISC_DEVMEM is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_DIRECT_GBPAGES is not set
+# CONFIG_DEBUG_NX_TEST is not set
+CONFIG_X86_MPPARSE=y
+# CONFIG_IOMMU_DEBUG is not set
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+# CONFIG_CPA_DEBUG is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+# CONFIG_SECURITY_SMACK is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_X86_64=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_X86_64=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_X86_64=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_HAVE_KVM=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+# CONFIG_VIRTIO_PCI is not set
+# CONFIG_VIRTIO_BALLOON is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CHECK_SIGNATURE=y
diff --git a/abs/core-testing/kernel26/kernel26.install b/abs/core-testing/kernel26/kernel26.install
new file mode 100644
index 0000000..514bcb7
--- /dev/null
+++ b/abs/core-testing/kernel26/kernel26.install
@@ -0,0 +1,144 @@
+# arg 1: the new package version
+# arg 2: the old package version
+
+KERNEL_VERSION=2.6.26-ARCH
+
+post_install () {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ # generate init ramdisks
+ echo ">>> MKINITCPIO SETUP"
+ echo ">>> ----------------"
+ echo ">>> If you use LVM2, Encrypted root or software RAID,"
+ echo ">>> Ensure you enable support in /etc/mkinitcpio.conf ."
+ echo ">>> More information about mkinitcpio setup can be found here:"
+ echo ">>> http://wiki.archlinux.org/index.php/Mkinitcpio"
+ echo ""
+ echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..."
+ /sbin/mkinitcpio -p kernel26
+}
+
+post_upgrade() {
+ pacman -Q grub &>/dev/null
+ hasgrub=$?
+ pacman -Q lilo &>/dev/null
+ haslilo=$?
+ # reminder notices
+ if [ $haslilo -eq 0 ]; then
+ echo ">>>"
+ if [ $hasgrub -eq 0 ]; then
+ echo ">>> If you use the LILO bootloader, you should run 'lilo' before rebooting."
+ else
+ echo ">>> You appear to be using the LILO bootloader. You should run"
+ echo ">>> 'lilo' before rebooting."
+ fi
+ echo ">>>"
+ fi
+
+ if grep "/boot" /etc/fstab 2>&1 >/dev/null; then
+ if ! grep "/boot" /etc/mtab 2>&1 >/dev/null; then
+ echo "WARNING: /boot appears to be a seperate partition but is not mounted"
+ echo " This is most likely not what you want. Please mount your /boot"
+ echo " partition and reinstall the kernel unless you are sure this is OK"
+ fi
+ fi
+
+ if [ "`vercmp $2 2.6.13`" -lt 0 ]; then
+ # important upgrade notice
+ echo ">>>"
+ echo ">>> IMPORTANT KERNEL UPGRADE NOTICE"
+ echo ">>> -------------------------------"
+ echo ">>> As of kernel 2.6.13, DevFS is NO LONGER AVAILABLE!"
+ echo ">>> If you still use DevFS, please make the transition to uDev before"
+ echo ">>> rebooting. If you really need to stay with DevFS for some reason,"
+ echo ">>> then you can manually downgrade to an older version:"
+ echo ">>>"
+ echo ">>> # pacman -U http://archlinux.org/~judd/kernel/kernel26-scsi-2.6.12.2-1.pkg.tar.gz"
+ echo ">>>"
+ echo ">>> If you choose to downgrade, don't forget to add kernel26-scsi to your"
+ echo ">>> IgnorePkg list in /etc/pacman.conf"
+ echo ">>>"
+ echo ">>> (NOTE: The following portion applies to uDev users as well!)"
+ echo ">>>"
+ echo ">>> If you use any DevFS paths in your GRUB menu.lst, then you will not"
+ echo ">>> be able to boot! Change your root= parameter to use the classic"
+ echo ">>> naming scheme."
+ echo ">>>"
+ echo ">>> EXAMPLES:"
+ echo ">>> - change root=/dev/discs/disc0/part3 to root=/dev/sda3"
+ echo ">>> - change root=/dev/md/0 to root=/dev/md0"
+ echo ">>>"
+ fi
+ # generate new init ramdisk
+ if [ "`vercmp $2 2.6.18`" -lt 0 ]; then
+ echo ">>> --------------------------------------------------------------"
+ echo ">>> | WARNING: |"
+ echo ">>> |mkinitrd is not supported anymore in kernel >=2.6.18 series!|"
+ echo ">>> | Please change to Mkinitcpio setup. |"
+ echo ">>> --------------------------------------------------------------"
+ echo ">>>"
+ fi
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ echo ">>> MKINITCPIO SETUP"
+ echo ">>> ----------------"
+ if [ "`vercmp $2 2.6.18`" -lt 0 ]; then
+ echo ">>> Please change your bootloader config files:"
+ echo ">>> Grub: /boot/grub/menu.lst | Lilo: /etc/lilo.conf"
+ echo "------------------------------------------------"
+ echo "| - initrd26.img to kernel26.img |"
+ echo "| - initrd26-full.img to kernel26-fallback.img |"
+ echo "------------------------------------------------"
+ fi
+ if [ "`vercmp $2 2.6.19`" -lt 0 ]; then
+ echo ""
+ echo ">>> New PATA/IDE subsystem - EXPERIMENTAL"
+ echo ">>> ----------"
+ echo ">>> To use the new pata drivers, change the 'ide' hook "
+ echo ">>> to 'pata' in /etc/mkinicpio.conf HOOKS="
+ echo ">>> The new system changes: /dev/hd? to /dev/sd?"
+ echo ">>> Don't forget to modify GRUB, LILO and fstab to the"
+ echo ">>> new naming system. "
+ echo ">>> eg: hda3 --> sda3, hdc8 --> sdc8"
+ echo ""
+ echo ">>> piix/ata_piix (Intel chipsets) - IMPORTANT"
+ echo "----------"
+ echo ">>> If you have enabled ide/pata/sata HOOKs in /etc/mkinitcpio.conf"
+ echo ">>> the 'ata_piix' module will be used."
+ echo ">>> This may cause your devices to shift names, eg:"
+ echo ">>> - IDE: devices from hd? to sd?"
+ echo ">>> - SATA: sda might shift to sdc if you have 2 other disks on a PIIX IDE port."
+ echo ">>> To check if this will affect you, check 'mkinitcpio -M' for piix/ata_piix"
+ echo ""
+ fi
+
+ echo ">>> If you use LVM2, Encrypted root or software RAID,"
+ echo ">>> Ensure you enable support in /etc/mkinitcpio.conf ."
+ echo ">>> More information about mkinitcpio setup can be found here:"
+ echo ">>> http://wiki.archlinux.org/index.php/Mkinitcpio"
+ echo ""
+ echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..."
+if [ "`vercmp $2 2.6.19`" -lt 0 ]; then
+ /sbin/mkinitcpio -p kernel26 -m "ATTENTION:\nIf you get a kernel panic below
+and are using an Intel chipset, append 'earlymodules=piix' to the
+kernel commandline"
+else
+ /sbin/mkinitcpio -p kernel26
+fi
+if [ "`vercmp $2 2.6.21`" -lt 0 ]; then
+ echo ""
+ echo "Important ACPI Information:"
+ echo ">>> Since 2.6.20.7 all possible ACPI parts are modularized."
+ echo ">>> The modules are located at:"
+ echo ">>> /lib/modules/$(uname -r)/kernel/drivers/acpi"
+ echo ">>> For more information about ACPI modules check this wiki page:"
+ echo ">>> 'http://wiki.archlinux.org/index.php/ACPI_modules'"
+fi
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/kernel26/kernel26.preset b/abs/core-testing/kernel26/kernel26.preset
new file mode 100644
index 0000000..742a442
--- /dev/null
+++ b/abs/core-testing/kernel26/kernel26.preset
@@ -0,0 +1,17 @@
+# mkinitcpio preset file for kernel26
+
+########################################
+# DO NOT EDIT THIS LINE:
+source /etc/mkinitcpio.d/kernel26.kver
+########################################
+ALL_config="/etc/mkinitcpio.conf"
+
+PRESETS=('default' 'fallback')
+
+#default_config="/etc/mkinitcpio.conf"
+default_image="/boot/kernel26.img"
+#default_options=""
+
+#fallback_config="/etc/mkinitcpio.conf"
+fallback_image="/boot/kernel26-fallback.img"
+fallback_options="-S autodetect" \ No newline at end of file
diff --git a/abs/core-testing/kernel26/logo_linux_clut224.ppm b/abs/core-testing/kernel26/logo_linux_clut224.ppm
new file mode 100644
index 0000000..c539d32
--- /dev/null
+++ b/abs/core-testing/kernel26/logo_linux_clut224.ppm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 24 24 24 95 95 95 143 148 147 219 219 219 224 224 224 224 224 224 221 221 221
+231 231 230 232 232 232 217 218 217 194 194 194 143 148 147 61 61 61 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 65 65 65
+179 180 180 224 224 224 141 142 141 85 85 85 25 25 26 2 2 2 0 0 0 0 0 0
+0 0 0 0 0 0 11 11 11 35 37 37 95 95 95 179 180 180 221 221 221 136 141 140
+28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 24 24 191 191 191 194 194 194
+73 73 73 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 109 109 110
+224 223 222 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 73 73 73 234 234 234 104 104 104 1 1 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0
+20 20 20 204 204 204 119 120 120 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 35 35 36 228 228 227 56 56 56 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 28 28 28 69 69 69 45 47 47 7 7 7
+0 0 0 16 16 16 159 159 159 197 197 197 8 8 8 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 208 207 206 88 88 88 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 51 51 51 111 114 112 109 109 110 51 51 51
+2 2 2 0 0 0 1 1 1 146 149 148 167 167 166 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 81 79 75 197 202 202 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 61 61 61 104 104 104 81 79 75 43 43 43
+8 8 8 0 0 0 0 0 0 7 7 7 213 213 213 65 65 65 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 191 191 191 88 88 88 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 28 28 28 28 28 28 7 7 7 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 228 228 227 20 20 20 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 246 246 246 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 159 160 131 131 131 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 8 8 8 246 246 246 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 197 197 197 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 12 12 12 241 241 241 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 22 22 22 5 5 5 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 225 224 224 56 56 56
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 7 7 7 246 246 246 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0
+20 20 20 43 43 43 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 4 4 4 25 25 26 31 31 31 20 20 20 65 65 65 20 20 20
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 149 148 124 129 126
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 3 3 3 254 254 254 4 4 4 0 0 0 0 0 0 31 31 31 104 104 104
+119 120 120 51 51 51 28 28 28 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0
+7 7 7 73 73 73 131 131 131 153 159 160 159 159 159 153 159 160 35 35 36 24 24 24
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 95 95 175 172 168
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 4 4 4 254 254 254 4 4 4 0 0 0 25 25 26 141 142 141 187 186 186
+197 197 197 167 167 166 65 65 65 4 4 4 0 0 0 0 0 0 0 0 0 9 9 9
+109 109 110 179 180 180 197 197 197 208 207 206 213 213 213 191 191 191 123 123 123 7 7 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 187 186 186
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 241 241 241 5 5 5 0 0 0 85 85 85 208 207 206 226 227 227
+235 235 235 246 246 246 221 221 221 22 22 22 0 0 0 0 0 0 0 0 0 85 85 85
+217 218 217 246 246 246 226 227 227 167 167 166 202 202 202 239 239 239 197 197 197 73 73 73
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 40 40 217 218 217
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 235 235 235 7 7 7 0 0 0 131 136 135 159 159 159 11 11 11
+69 69 69 131 136 135 246 246 246 104 104 104 0 0 0 0 0 0 0 0 0 123 123 123
+236 237 236 203 203 203 20 20 20 20 20 20 88 88 88 124 129 126 246 246 246 194 194 194
+7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 26 226 227 227
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 234 234 234 28 28 28 0 0 0 146 149 148 65 65 65 0 0 0
+109 109 110 51 51 51 234 234 234 131 136 135 0 0 0 35 35 36 22 22 22 123 123 123
+239 239 239 95 95 95 0 0 0 0 0 0 43 43 43 16 16 16 225 224 224 244 244 244
+45 47 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 241 241 241
+1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 217 218 217 51 51 51 1 1 1 131 131 131 85 85 85 0 0 0
+22 22 22 28 28 28 208 207 206 127 128 122 58 43 7 58 43 7 30 20 1 73 73 73
+231 230 229 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 202 202 202 246 246 246
+43 43 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 246 246 246
+24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 172 176 175 85 85 85 0 0 0 73 73 73 187 186 186 5 5 5
+0 0 0 30 20 1 190 146 50 224 170 17 221 175 7 221 175 7 201 165 9 191 150 3
+220 185 82 91 70 38 8 6 3 1 1 0 0 0 0 43 43 43 239 239 239 228 228 227
+11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 232 232 232
+35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 172 176 175 95 95 95 0 0 0 9 9 9 204 204 204 131 136 135
+91 61 1 204 146 9 217 163 7 232 191 11 232 191 11 226 196 19 219 193 11 197 162 19
+226 196 19 219 193 11 201 165 9 130 96 8 107 93 64 228 228 227 248 248 248 112 118 114
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235 235 235
+16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 143 148 147 109 109 110 0 0 0 0 0 0 81 79 75 227 180 59
+204 146 9 234 184 12 239 191 15 237 191 8 238 196 12 238 196 12 226 196 19 231 199 39
+231 199 39 231 199 39 219 193 11 219 193 11 219 193 11 227 180 59 192 156 83 8 6 3
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 239 239 239
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 131 131 131 111 114 112 0 0 0 30 20 1 155 102 4 198 139 9
+230 172 11 238 184 11 237 191 8 238 196 12 238 196 12 226 196 19 231 199 39 220 185 82
+231 199 39 231 199 39 226 196 19 219 193 11 219 193 11 219 193 11 226 196 19 159 120 9
+4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232 232 232
+20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 131 131 131 123 123 123 0 0 0 120 77 2 187 136 3 217 155 7
+229 171 7 238 184 8 238 184 8 238 196 12 238 196 12 231 199 39 231 199 39 231 199 39
+231 199 39 219 193 11 219 193 11 219 193 11 219 193 11 191 150 3 197 162 19 201 165 9
+30 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202 202 202
+56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 119 120 120 141 142 141 1 1 0 104 68 5 175 125 4 217 155 7
+229 171 7 238 184 8 238 196 12 238 196 12 226 196 19 231 199 39 231 199 39 226 196 19
+219 193 11 219 193 11 219 193 11 191 150 3 191 150 3 201 165 9 217 155 7 183 127 3
+4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 186 186
+73 73 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 51 51
+143 148 147 224 223 222 225 224 224 146 149 148 4 4 4 8 6 3 130 96 8 175 125 4
+217 163 7 238 184 8 238 196 12 231 199 39 231 199 39 226 196 19 226 196 19 219 193 11
+201 165 9 191 150 3 175 125 4 191 150 3 216 159 5 206 148 3 198 139 9 91 70 38
+0 0 0 0 0 0 5 5 5 45 47 47 12 12 12 0 0 0 0 0 0 167 167 166
+88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 20 20 159 159 159 226 227 227
+172 176 175 136 141 140 123 135 137 124 131 129 112 118 114 45 47 47 141 122 119 130 96 8
+155 102 4 191 150 3 219 193 11 219 193 11 201 165 9 191 150 3 191 150 3 175 125 4
+191 150 3 191 150 3 191 150 3 187 136 3 188 133 20 190 146 50 175 172 168 175 172 168
+25 25 26 0 0 0 1 1 1 56 56 56 94 100 97 56 56 56 2 2 2 95 95 95
+172 176 175 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 159 160 217 218 217 144 156 160
+144 156 160 144 156 160 138 149 149 123 135 137 94 103 103 104 116 120 183 181 175 162 157 129
+148 102 14 155 102 4 175 125 4 191 150 3 191 150 3 191 150 3 191 150 3 191 150 3
+200 140 3 199 131 5 188 133 20 192 156 83 175 172 168 197 197 197 194 194 194 187 186 186
+109 109 110 0 0 0 0 0 0 8 8 8 95 95 95 111 114 112 31 31 31 18 18 18
+241 241 241 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 248 248 159 166 168 86 124 118
+144 156 160 138 149 149 123 135 137 144 156 160 94 103 103 124 131 129 159 159 159 191 191 191
+162 157 129 148 102 14 155 102 4 182 124 9 198 139 9 187 136 3 199 131 5 170 114 5
+170 114 5 190 146 50 163 157 151 187 186 186 197 197 197 231 230 229 241 240 237 221 221 221
+191 191 191 34 34 34 0 0 0 0 0 0 9 9 9 39 40 40 4 4 4 1 1 1
+228 228 227 25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 248 248 138 149 149 123 135 137
+123 135 137 138 149 149 104 116 120 146 149 148 119 128 123 131 136 135 123 135 137 204 204 204
+192 192 192 175 172 168 145 135 65 148 102 14 148 102 14 148 102 14 148 102 14 145 135 65
+162 157 129 183 181 175 191 191 191 208 207 206 241 240 237 255 255 254 254 254 254 254 254 254
+236 237 236 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+146 149 148 131 131 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 204 204 204 159 166 168 144 156 160
+113 134 127 144 156 160 94 103 103 136 141 140 119 128 123 119 128 123 112 118 114 221 221 221
+194 194 194 187 186 186 187 186 186 172 176 175 175 172 168 179 180 180 187 186 186 187 186 186
+194 194 194 197 197 197 224 223 222 251 251 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 232 232 232 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+69 69 69 225 224 224 35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 35 35 36 226 227 227 123 135 137 159 166 168
+86 124 118 138 149 149 113 134 127 112 118 114 131 136 135 104 104 104 124 131 129 204 204 204
+224 224 224 191 191 191 187 186 186 187 186 186 179 180 180 187 186 186 187 186 186 194 194 194
+213 213 213 241 240 237 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 146 149 148 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 81 79 75 226 227 227 81 79 75 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 39 40 40 231 230 229 73 73 73 25 25 26 153 159 160
+104 116 120 123 135 137 123 135 137 104 116 120 141 142 141 94 103 103 136 141 140 153 159 160
+253 252 251 225 224 224 197 197 197 189 189 189 189 189 189 191 191 191 208 207 206 233 231 230
+253 252 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 246 246 246 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 34 34 34 197 197 197 167 167 166 9 9 9 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 25 25 26 221 221 221 69 69 69 0 0 0 2 2 2 123 135 137
+123 135 137 104 116 120 136 141 140 119 128 123 131 136 135 113 134 127 113 134 127 113 134 127
+254 254 254 254 254 254 244 244 244 228 228 227 228 228 227 239 239 239 251 251 251 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 131 136 135 1 1 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 2 2 167 167 166 146 149 148 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 3 3 3 202 202 202 104 104 104 0 0 0 0 0 0 0 0 0 77 85 86
+153 159 160 141 122 119 123 135 137 94 103 103 94 103 103 113 134 127 145 140 129 112 118 114
+231 233 233 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 239 239 239 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 31 31 31 219 219 219 81 79 75 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 143 148 147 179 180 180 1 1 1 0 0 0 0 0 0 0 0 0 35 37 37
+159 166 168 143 148 147 94 103 103 109 109 110 86 124 118 119 128 123 94 100 97 127 128 122
+179 180 180 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 95 95 95 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 43 43 236 237 236 20 20 20
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+3 3 3 235 235 235 25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8
+138 149 149 123 135 137 77 85 86 112 118 114 94 103 103 104 116 120 111 114 112 145 140 129
+143 148 147 254 254 254 254 254 254 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+251 251 251 241 241 241 246 246 246 254 254 254 179 180 180 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141 167 167 166
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+111 114 112 172 176 175 16 16 16 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0
+94 100 97 159 166 168 113 134 127 104 104 104 94 103 103 104 116 120 113 134 127 113 134 127
+119 128 123 251 251 251 236 237 236 226 227 227 231 230 229 244 244 244 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 246 246 246 232 232 232 224 224 224 217 218 217 213 213 213
+203 203 203 204 204 204 203 203 203 221 221 221 251 251 251 56 56 56 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 236 237 236
+22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
+217 218 217 65 65 65 104 104 104 45 47 47 1 1 1 0 0 0 0 0 0 1 1 0
+43 43 43 153 159 160 162 157 129 136 141 140 113 134 127 119 128 123 124 131 129 104 116 120
+109 109 110 236 237 236 248 248 248 232 232 232 251 251 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 251 251 251 239 239 239 224 223 222 213 213 213 167 167 166
+123 123 123 94 100 97 192 192 192 194 194 194 224 223 222 189 189 189 3 3 3 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 35 37 37 11 11 11 131 131 131
+159 159 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 47 47
+213 213 213 9 9 9 119 120 120 123 123 123 43 43 43 3 3 3 0 0 0 0 0 0
+35 37 37 138 149 149 113 134 127 111 114 112 119 128 123 94 103 103 124 129 126 94 103 103
+124 131 129 197 202 202 251 251 251 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 246 246 246 153 159 160
+73 73 73 4 4 4 189 189 189 197 197 197 197 197 197 235 235 235 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 12 12 12 65 65 65 81 79 75 11 11 11 12 12 12
+251 251 251 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 123 123
+136 141 140 0 0 0 39 40 40 109 109 110 123 123 123 104 104 104 56 56 56 24 24 24
+131 136 135 167 167 166 131 136 135 112 118 114 124 131 129 112 118 114 124 131 129 112 118 114
+119 128 123 159 166 168 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 219 219 219 109 109 110
+16 16 16 1 1 0 172 176 175 231 231 230 208 207 206 203 203 203 213 213 213 18 18 18
+3 3 3 35 37 37 85 85 85 104 104 104 65 65 65 9 9 9 0 0 0 0 0 0
+240 240 239 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 186 186
+73 73 73 0 0 0 1 1 1 18 18 18 61 61 61 109 109 110 123 123 123 124 129 126
+136 141 140 153 159 160 153 159 160 138 149 149 146 149 148 138 149 149 146 149 148 138 149 149
+138 149 149 159 166 168 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 192 192 192 88 88 88
+4 4 4 0 0 0 141 142 141 254 254 254 239 239 239 202 202 202 187 186 186 136 141 140
+112 118 114 95 95 95 61 61 61 22 22 22 2 2 2 0 0 0 0 0 0 0 0 0
+204 204 204 51 51 51 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 219 219 219
+39 40 40 0 0 0 0 0 0 0 0 0 1 1 1 16 16 16 56 56 56 95 95 95
+112 118 114 123 123 123 127 128 122 127 128 122 124 129 126 124 131 129 131 136 135 136 141 140
+136 141 140 141 142 141 159 159 159 159 159 159 112 118 114 104 104 104 232 232 232 254 254 254
+254 254 254 254 254 254 219 219 219 175 172 168 153 159 160 131 131 131 131 131 131 61 61 61
+2 2 2 0 0 0 51 51 51 131 131 131 123 123 123 111 114 112 95 95 95 56 56 56
+28 28 28 5 5 5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+146 149 148 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 224 224
+35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 11 11 11
+25 25 26 51 51 51 73 73 73 88 88 88 94 100 97 104 104 104 104 104 104 94 100 97
+104 104 104 95 95 95 88 88 88 65 65 65 12 12 12 1 1 1 69 69 69 254 254 254
+254 254 254 221 221 221 31 31 31 61 61 61 73 73 73 81 79 75 56 56 56 11 11 11
+0 0 0 0 0 0 5 5 5 24 24 24 24 24 24 12 12 12 4 4 4 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+141 142 141 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 227 227
+34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 2 2 2 9 9 9 12 12 12 12 12 12 16 16 16 18 18 18
+12 12 12 7 7 7 4 4 4 1 1 1 0 0 0 0 0 0 1 1 1 234 234 234
+254 254 254 136 141 140 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
+131 131 131 124 129 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 213 213 213
+51 51 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 217 218 217
+254 254 254 112 118 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+153 159 160 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+131 131 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 12 12 248 248 248
+255 255 255 146 149 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34
+233 231 230 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 37 37
+239 239 239 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 104 104 254 254 254
+254 254 254 235 235 235 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111 114 112
+159 159 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+159 159 159 141 142 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 40 40 236 237 236 254 254 254
+254 254 254 254 254 254 159 159 159 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241 241 241
+61 61 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+197 197 197 65 65 65 0 0 0 8 8 8 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 73 73 73 232 232 232 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 159 159 159 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 228 227
+35 37 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5
+244 244 244 7 7 7 0 0 0 73 73 73 236 237 236 131 136 135 43 43 43 1 1 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 24 24 24 94 100 97 194 194 194 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 235 235 235 131 131 131 45 47 47 2 2 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 197 197
+65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 47 47
+204 204 204 0 0 0 0 0 0 111 114 112 255 255 255 255 255 255 255 255 255 225 224 224
+167 167 166 131 131 131 104 104 104 88 88 88 88 88 88 104 104 104 131 131 131 167 167 166
+203 203 203 225 224 224 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 231 231 230
+172 176 175 131 131 131 94 100 97 81 79 75 69 69 69 73 73 73 95 95 95 123 123 123
+175 172 168 191 191 191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 176 175
+88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+175 172 168 0 0 0 1 1 0 131 136 135 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 255 255 255 255 255 255 254 254 254 254 254 254 254 254 254
+240 240 239 228 228 227 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 219 219 219 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 131 136 135
+124 129 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+179 180 180 0 0 0 0 0 0 141 142 141 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+240 240 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 219 219 219 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+111 114 112 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 26 159 159 159 224 223 222
+167 167 166 0 0 0 1 1 1 141 142 141 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+240 240 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254
+255 255 255 204 204 204 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 141 142 141
+119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 2 2 131 131 131 240 235 222 231 198 127 231 199 39
+190 146 50 58 43 7 1 1 0 131 131 131 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254
+254 254 254 153 159 160 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 141 142 141
+111 114 112 2 2 2 16 16 16 34 34 34 35 35 36 16 16 16 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 0 163 157 151 218 210 190 233 177 11 239 191 15 239 191 15
+239 194 10 230 173 7 104 68 5 127 128 122 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 231 231 230 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 253 252 251 253 252 251
+237 229 207 141 122 119 5 4 2 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+244 244 244 240 235 222 240 235 222 237 229 207 237 229 207 237 229 207 208 207 206 51 51 51
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 95 95 95 237 229 207 224 170 17 233 177 11 237 185 13 239 191 15
+239 191 15 239 191 15 233 179 8 192 156 83 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 254 254 254 240 235 222 222 169 38
+215 152 18 219 157 11 204 146 9 188 133 20 148 102 14 130 96 8 148 102 14 188 133 20
+190 146 50 215 152 18 215 152 18 221 159 7 217 155 7 215 152 18 220 185 82 236 237 236
+25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 28 28 28 233 231 230 227 180 59 215 152 18 223 162 13 233 177 11 238 184 11
+239 191 15 238 184 11 239 191 15 238 196 12 214 199 171 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+241 241 241 226 227 227 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 254 253 252 251 203 181 131 198 139 9
+204 146 9 219 157 11 219 157 11 215 152 18 219 157 11 215 152 18 215 152 18 215 152 18
+223 162 13 224 170 17 230 172 11 233 177 11 231 175 8 223 162 13 215 152 18 231 198 127
+141 142 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11
+85 85 85 230 228 223 220 185 82 204 146 9 219 157 11 230 172 11 234 181 11 236 184 12
+237 185 13 237 185 13 238 184 11 239 194 10 239 191 15 249 244 230 253 252 251 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 251 251 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 254 254 254 240 235 222 182 124 9 199 131 5
+217 155 7 221 159 7 227 169 7 233 176 9 230 172 11 230 172 11 230 172 11 233 177 11
+233 177 11 235 179 10 235 179 10 236 183 11 234 181 11 230 172 11 224 170 17 227 180 59
+231 233 233 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 61 61 61 88 88 88 146 149 148 191 191 191 230 228 223
+237 229 207 190 146 50 215 152 18 219 157 11 230 172 11 233 177 11 234 182 11 236 185 13
+237 185 13 237 185 13 237 185 13 238 184 11 239 194 10 227 180 59 249 244 230 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 235 235 235 202 202 202 203 181 131 170 114 5 198 139 9
+216 159 5 227 169 7 234 178 8 236 182 10 234 181 11 234 181 11 234 181 11 234 182 11
+236 183 11 234 181 11 236 182 10 236 183 11 236 182 10 231 175 8 224 170 17 215 152 18
+244 244 244 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 131 131 131 240 235 222 231 198 127 231 198 127 227 180 59 188 133 20
+204 146 9 217 144 7 219 157 11 227 166 7 233 177 11 236 182 10 237 185 11 237 185 13
+237 185 13 237 185 13 239 191 15 238 184 11 238 184 8 232 191 11 220 185 82 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 192 192 192 192 156 83 170 114 5 204 146 9
+221 159 7 229 171 7 234 180 8 236 184 10 237 185 11 237 185 11 236 183 11 235 183 10
+235 183 10 236 184 11 237 185 11 237 183 10 237 181 9 235 179 10 227 169 7 198 139 9
+218 210 190 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+1 1 0 111 114 112 237 229 207 222 169 38 223 162 13 227 166 7 224 170 17 230 172 11
+230 172 11 230 172 11 230 172 11 233 176 9 236 180 8 237 183 10 237 185 11 237 185 12
+237 185 13 237 185 13 237 185 13 236 186 12 238 184 8 236 186 12 232 191 11 214 199 171
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 187 186 186 192 156 83 182 124 9 198 139 9
+217 163 7 233 176 6 236 182 9 237 183 10 236 184 10 237 183 10 236 182 9 235 182 10
+235 183 10 235 184 12 236 186 12 235 183 9 237 181 9 235 179 10 227 169 7 217 155 7
+192 156 83 238 236 230 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 203 203 203 227 180 59 215 152 18 224 170 17 233 177 11 235 179 10 236 180 8
+236 180 8 236 180 8 234 180 8 235 179 10 235 181 9 236 183 11 236 184 11 236 185 13
+237 185 13 237 185 13 237 185 13 237 185 13 238 184 11 238 184 8 237 191 8 226 196 19
+240 235 222 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 192 192 192 192 156 83 175 125 4 204 146 9
+221 159 7 233 176 6 235 181 9 235 181 9 235 183 9 235 182 10 235 183 10 235 183 10
+235 183 10 235 184 11 236 184 12 235 183 9 236 180 8 234 178 8 230 172 11 217 155 7
+198 139 9 203 181 131 240 235 222 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0
+
+1 1 1 217 218 217 227 180 59 227 169 7 235 179 10 236 182 10 237 183 10 237 183 10
+236 182 9 236 182 9 235 183 9 235 183 9 235 183 10 236 184 11 236 184 11 236 184 11
+236 185 13 237 185 13 237 185 13 237 185 13 237 185 13 237 185 11 236 182 9 232 191 11
+227 180 59 248 248 248 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 208 207 206 189 189 189 192 156 83 183 127 3 217 155 7
+227 169 7 236 182 10 233 179 8 234 178 8 235 181 9 235 182 10 235 182 10 235 183 10
+235 183 10 235 183 10 236 184 10 235 183 9 234 180 8 234 180 8 229 171 7 223 162 13
+217 155 7 199 131 5 220 185 82 238 236 230 167 167 166 39 40 40 0 0 0 0 0 0
+
+0 0 0 217 218 217 220 185 82 215 152 18 233 177 11 236 182 10 236 183 11 237 185 11
+236 185 13 236 184 12 236 184 10 236 184 10 236 183 11 236 184 11 236 183 11 236 184 11
+236 184 12 237 185 12 237 185 13 237 185 13 237 185 13 237 185 11 238 184 8 237 191 8
+222 189 8 231 198 127 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 219 219 219 179 180 180 107 93 64 198 139 9 206 148 3
+227 169 7 234 178 7 234 180 8 234 178 7 235 181 9 235 182 10 235 182 10 235 183 10
+235 183 10 235 183 10 236 184 10 235 183 9 234 180 8 234 178 8 233 176 9 229 171 7
+223 162 13 219 157 11 217 144 7 215 152 18 220 185 82 249 244 230 124 129 126 0 0 0
+
+1 1 1 194 194 194 220 185 82 219 157 11 230 172 11 234 181 11 235 184 11 235 184 11
+235 184 11 235 183 10 235 183 10 235 183 10 235 182 10 236 183 11 236 183 11 236 184 12
+236 184 12 236 184 12 236 185 13 236 185 13 237 184 12 235 184 12 236 184 11 237 183 10
+238 196 12 221 175 7 237 229 207 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 197 197 197 39 40 40 104 68 5 187 136 3 206 148 3
+227 169 7 234 178 7 235 181 9 234 180 8 235 181 9 235 182 10 235 182 10 236 183 11
+235 182 10 235 183 10 235 183 10 235 183 10 235 183 9 235 181 9 235 181 9 235 179 10
+231 175 8 227 166 7 219 157 11 215 152 18 215 152 18 222 169 38 225 224 224 1 1 1
+
+0 0 0 179 180 180 231 198 127 204 146 9 230 172 11 234 181 11 234 181 11 235 183 10
+235 183 10 235 183 10 235 183 10 235 183 10 235 183 10 236 183 11 236 183 11 236 183 11
+236 183 11 236 184 11 236 184 11 235 184 11 234 184 12 234 184 12 235 184 11 237 185 11
+238 184 8 237 191 8 222 169 38 249 244 230 253 252 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 194 194 194 25 25 26 1 1 0 104 68 5 187 136 3 217 155 7
+227 169 7 234 178 7 235 181 9 235 182 10 235 182 10 235 183 10 235 183 10 236 183 11
+236 183 11 236 183 11 236 183 11 236 184 11 236 184 11 236 184 10 236 184 10 237 183 10
+235 181 9 233 177 11 227 169 7 219 157 11 217 144 7 231 198 127 197 197 197 2 2 2
+
+1 1 1 153 159 160 231 198 127 215 152 18 224 170 17 233 177 11 235 184 11 236 182 10
+236 182 10 235 182 10 235 182 10 235 182 10 235 184 11 236 183 11 236 183 11 236 183 11
+236 183 11 236 183 11 235 184 11 235 184 11 235 184 11 234 184 12 234 182 11 236 184 11
+238 184 8 234 187 8 232 191 11 220 185 82 253 252 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+241 241 241 119 120 120 4 4 4 0 0 0 0 0 0 130 96 8 187 136 3 216 159 5
+230 173 7 234 178 7 234 180 8 235 183 9 236 184 11 236 184 12 236 184 11 237 185 11
+237 185 11 236 183 11 236 183 11 236 184 11 236 184 11 236 184 11 236 185 13 237 185 12
+236 184 12 235 179 10 223 162 13 199 131 5 220 185 82 219 219 219 11 11 11 0 0 0
+
+0 0 0 136 141 140 231 198 127 215 152 18 223 162 13 233 177 11 237 184 12 238 184 11
+236 182 10 235 182 10 235 182 10 235 182 10 235 182 10 236 183 11 236 183 11 236 184 11
+237 185 11 236 184 12 235 184 11 235 184 11 235 184 12 234 182 11 235 184 11 235 183 10
+236 182 9 233 181 8 222 189 8 221 175 7 231 198 127 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 251 251 251 159 159 159
+28 28 28 0 0 0 0 0 0 0 0 0 8 6 3 130 96 8 200 140 3 221 159 7
+229 171 7 233 176 6 234 178 7 234 187 8 237 185 13 237 185 13 237 185 13 237 185 12
+237 185 11 236 184 11 235 184 11 235 184 11 236 184 11 237 185 12 237 185 12 237 185 13
+237 185 13 230 172 11 199 131 5 215 152 18 246 246 246 31 31 31 2 2 2 1 1 1
+
+0 0 0 159 159 159 231 198 127 215 152 18 227 166 7 235 179 10 236 183 11 237 185 11
+236 183 11 235 181 9 233 179 8 234 180 8 235 181 9 236 183 11 236 183 11 236 184 11
+236 184 11 236 185 13 236 185 13 236 185 13 236 185 13 234 184 12 234 182 11 235 183 9
+234 178 7 233 181 8 221 175 7 221 175 7 198 139 9 214 199 171 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 244 244 244 167 167 166 45 47 47 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 30 20 1 155 102 4 200 140 3 216 159 5
+229 171 7 233 176 6 235 183 9 234 184 12 235 184 12 237 185 13 236 186 12 236 186 12
+237 185 11 235 184 11 235 184 11 235 184 11 235 184 12 236 185 13 237 185 13 238 184 11
+233 177 11 217 144 7 222 169 38 246 246 246 109 109 110 2 2 2 0 0 0 0 0 0
+
+0 0 0 213 213 213 227 180 59 217 144 7 227 166 7 233 176 9 234 180 8 236 182 10
+236 182 10 233 176 6 231 175 8 231 175 8 233 179 8 236 182 10 236 183 11 236 184 12
+236 184 12 236 185 13 236 185 13 236 185 13 235 184 12 234 184 12 235 184 11 235 183 9
+236 180 8 234 178 7 227 169 7 217 163 7 204 146 9 130 96 8 81 79 75 167 167 166
+232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 252 251
+239 239 239 204 204 204 146 149 148 85 85 85 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 30 20 1 155 102 4 206 148 3 217 163 7
+229 171 7 233 176 6 233 181 8 234 184 12 236 185 13 237 185 13 237 185 12 236 185 13
+235 184 11 235 184 11 235 184 11 234 182 11 234 182 11 233 176 9 230 172 11 229 171 7
+215 152 18 231 198 127 233 231 230 69 69 69 5 4 2 0 0 0 0 0 0 0 0 0
+
+18 18 18 244 244 244 215 152 18 217 155 7 221 159 7 223 165 7 227 169 7 230 173 7
+231 175 8 230 173 7 231 175 8 231 175 8 233 176 6 234 180 8 236 182 10 237 184 12
+237 184 12 237 185 12 237 185 13 237 185 13 237 185 13 236 185 13 235 184 12 236 184 11
+236 182 9 237 183 8 229 171 7 217 163 7 204 146 9 170 114 5 91 61 1 1 1 0
+2 2 2 31 31 31 39 40 40 43 43 43 43 43 43 39 40 40 35 37 37 20 20 20
+3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 1 1 0 58 43 7 170 114 5 200 140 3 216 159 5
+229 171 7 233 176 6 234 178 7 235 183 9 235 184 11 237 185 12 237 185 12 235 181 9
+235 179 10 234 181 11 235 179 10 233 176 9 231 175 8 230 172 11 215 152 18 215 152 18
+240 235 222 141 142 141 16 16 16 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+43 43 43 249 244 230 215 152 18 204 146 9 204 146 9 204 146 9 217 155 7 217 155 7
+216 159 5 216 159 5 223 165 7 223 165 7 227 169 7 229 171 7 231 175 8 233 176 9
+235 179 10 235 179 10 236 183 11 237 185 11 236 183 11 236 183 11 236 183 11 236 183 11
+236 183 11 234 180 8 227 169 7 216 159 5 187 136 3 170 114 5 104 68 5 15 12 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 91 61 1 155 102 4 200 140 3 217 155 7
+223 165 7 230 173 7 233 176 6 234 178 7 233 179 8 236 180 8 235 179 10 233 176 9
+233 176 9 230 173 7 227 166 7 223 165 7 215 152 18 190 146 50 231 198 127 241 240 237
+85 85 85 5 4 2 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+4 4 4 202 202 202 237 229 207 192 156 83 188 133 20 182 124 9 182 124 9 183 127 3
+199 131 5 198 139 9 204 146 9 204 146 9 204 146 9 206 148 3 217 155 7 217 163 7
+223 165 7 223 165 7 230 173 7 233 179 8 234 178 8 234 178 8 234 178 8 233 176 9
+231 175 8 229 171 7 216 159 5 198 139 9 175 125 4 155 102 4 104 68 5 30 20 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 58 43 7 155 102 4 183 127 3 200 140 3
+216 159 5 223 165 7 229 171 7 233 176 6 231 175 8 231 175 8 229 171 7 227 166 7
+223 165 7 217 155 7 204 146 9 188 133 20 231 198 127 224 223 222 119 120 120 22 22 22
+1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 3 3 3 95 95 95 179 180 180 234 234 234 237 229 207 203 181 131 192 156 83
+188 133 20 159 120 9 170 114 5 182 124 9 182 124 9 182 124 9 183 127 3 187 136 3
+198 139 9 198 139 9 217 155 7 217 163 7 223 165 7 223 165 7 223 165 7 223 165 7
+216 159 5 204 146 9 198 139 9 175 125 4 155 102 4 120 77 2 91 61 1 15 12 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 58 43 7 120 77 2 170 114 5 183 127 3
+200 140 3 206 148 3 216 159 5 216 159 5 221 159 7 216 159 5 217 155 7 204 146 9
+198 139 9 182 124 9 190 146 50 218 210 190 146 149 148 7 7 7 0 0 0 1 1 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 45 47 47 109 109 110 159 166 168
+226 227 227 248 248 248 218 210 190 203 181 131 192 156 83 148 102 14 148 102 14 148 102 14
+155 102 4 170 114 5 182 124 9 183 127 3 187 136 3 198 139 9 198 139 9 198 139 9
+187 136 3 182 124 9 170 114 5 155 102 4 130 96 8 104 68 5 58 43 7 8 6 3
+73 73 73 141 142 141 179 180 180 203 203 203 208 207 206 213 213 213 213 213 213 219 219 219
+234 234 234 235 235 235 236 237 236 235 235 235 236 237 236 239 239 239 234 234 234 240 240 239
+224 224 224 225 224 224 217 218 217 131 131 131 58 43 7 120 77 2 155 102 4 170 114 5
+182 124 9 183 127 3 198 139 9 200 140 3 200 140 3 200 140 3 187 136 3 175 125 4
+155 102 4 192 156 83 230 228 223 85 85 85 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
+1 1 1 35 35 36 81 79 75 104 104 104 146 149 148 208 207 206 233 231 230 214 199 171
+162 157 129 148 102 14 130 96 8 148 102 14 155 102 4 170 114 5 170 114 5 155 102 4
+155 102 4 155 102 4 130 96 8 120 77 2 104 68 5 91 61 1 167 167 166 233 231 230
+172 176 175 88 88 88 43 43 43 12 12 12 8 8 8 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 20 20 20 179 180 180 162 157 129 91 61 1 120 77 2 155 102 4
+170 114 5 170 114 5 175 125 4 182 124 9 182 124 9 170 114 5 155 102 4 130 96 8
+203 181 131 197 197 197 35 35 36 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 2 2 2 1 1 1 1 1 1 22 22 22 73 73 73
+131 136 135 192 192 192 230 228 223 162 157 129 107 93 64 104 68 5 120 77 2 130 96 8
+130 96 8 120 77 2 104 68 5 91 61 1 91 70 38 224 223 222 123 123 123 7 7 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 43 43 43 228 228 227 91 70 38 91 61 1 104 68 5
+120 77 2 130 96 8 155 102 4 155 102 4 155 102 4 120 77 2 107 93 64 214 199 171
+172 176 175 7 7 7 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1 1 1 1 1 1 24 24 24 111 114 112 218 210 190 218 210 190 141 122 119 107 93 64
+107 93 64 91 70 38 107 93 64 175 172 168 249 244 230 109 109 110 1 1 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 1 1 1 88 88 88 246 246 246 175 172 168 145 135 65
+91 70 38 91 61 1 58 43 7 91 61 1 107 93 64 163 157 151 237 229 207 109 109 110
+4 4 4 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 65 65 65 145 140 129 163 157 151
+175 172 168 218 210 190 197 197 197 141 122 119 18 18 18 1 1 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 35 35 36 95 95 95 146 149 148
+197 197 197 221 221 221 231 230 229 235 235 235 187 186 186 123 123 123 12 12 12 1 1 1
+1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core-testing/kernel26/logo_linux_mono.pbm b/abs/core-testing/kernel26/logo_linux_mono.pbm
new file mode 100644
index 0000000..6a5e007
--- /dev/null
+++ b/abs/core-testing/kernel26/logo_linux_mono.pbm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 0 0 0
+128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127
+0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127
+0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core-testing/kernel26/logo_linux_vga16.ppm b/abs/core-testing/kernel26/logo_linux_vga16.ppm
new file mode 100644
index 0000000..51ffad6
--- /dev/null
+++ b/abs/core-testing/kernel26/logo_linux_vga16.ppm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0
+85 85 85 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 170 170 170 0 0 0 0 0 0 85 85 85 85 85 85 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0
+85 85 85 85 85 85 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 255 255 255 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 85 85 85 170 170 170 0 0 0
+0 0 0 0 0 0 255 85 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+255 255 85 255 255 85 170 85 0 170 85 0 85 85 85 255 255 255 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 255 85 85
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85
+0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 170 170 170 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 85 85 170 170 170 170 170 170
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 170 170 170
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 85 85 85
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 170 170 170 170 170 170
+170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 170 170 170
+170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170
+85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 255 255 255
+170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 170 170 170
+85 85 85 170 170 170 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170
+255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 170 170 170
+85 85 85 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170
+255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0 170 170 170
+170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170 85 85 85 85 85 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85
+85 85 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85
+85 85 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
+85 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
+85 85 85 0 0 0 170 170 170 170 170 170 170 170 170 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
+170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85
+85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 85 85 85
+0 0 0 0 0 0 170 170 170 255 255 255 170 170 170 170 170 170 255 255 255 0 0 0
+0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170
+85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85
+0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 255 255 255
+255 255 255 255 255 255 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 85 85 85 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 255 255 85 255 255 85
+170 85 0 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 255 255 85 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 85 85 85 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 255 255 255 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 85 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 255 85 85 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 170 85 0 170 85 0 170 85 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 255 255 255 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 255 255 85
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 255 255 255
+170 170 170 255 85 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 170 170 170 255 255 255 170 170 170 255 255 85 255 255 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 85 85 85 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+255 85 85 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 85 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 85 0 255 85 85 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 255 170 170 170 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 85 85 255 255 255 0 0 0
+
+0 0 0 170 170 170 170 170 170 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 170 170 170 0 0 0
+
+0 0 0 170 170 170 170 170 170 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 255 255 85 255 255 255 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 85 0 170 170 170 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 255 85 85 255 255 255 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 255 85 85 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 255 170 170 170 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0 0 0 0
+85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 85 85 85 85 85 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170
+170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85 170 170 170 255 255 255
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 85 85 85 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 170 170 170 255 255 255 170 170 170 85 85 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 85 85 85 85 85 85 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 85 85 85 85 85 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 170 170 170 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170
+170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core-testing/klibc-extras/PKGBUILD b/abs/core-testing/klibc-extras/PKGBUILD
new file mode 100644
index 0000000..155d959
--- /dev/null
+++ b/abs/core-testing/klibc-extras/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1644 2008-05-14 12:09:30Z thomas $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=klibc-extras
+pkgver=2.4
+pkgrel=11
+pkgdesc="Extra apps for klibc early-userspace"
+arch=(i686 x86_64)
+url="http://phraktured.net/initramfs/klibc-extras/"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so))
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f7887993f4a3d4fbb04aa1ddf730568e')
+
+build()
+{
+ cd $startdir/src/${pkgname}-${pkgver}
+
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/klibc-kbd/PKGBUILD b/abs/core-testing/klibc-kbd/PKGBUILD
new file mode 100644
index 0000000..8c4e0db
--- /dev/null
+++ b/abs/core-testing/klibc-kbd/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 1645 2008-05-14 12:09:34Z thomas $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=klibc-kbd
+pkgver=1.15.20080312
+pkgrel=15
+pkgdesc="Keytable files and keyboard utilities"
+arch=('i686' 'x86_64')
+url="ftp://ftp.altlinux.org/pub/people/legion/kbd/"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so) 'kbd')
+source=(ftp://ftp.archlinux.org/other/kbd/kbd-$pkgver.tar.gz
+ #ftp://ftp.altlinux.org/pub/people/legion/kbd/kbd-${pkgver}.tar.gz
+ no-isatty.patch
+ no-exit.patch
+ keymap_install
+ keymap_hook)
+md5sums=('709b087bb9d6c073bade70eda2da7770'
+ '53e9612ac5fc1b23601f793410742ed3'
+ '8c1bec330e8c98355502ac861561667d'
+ '735d7268f567deee4db3bed951a8303a'
+ '85457e44dfd7046224e87f0add8da4b2')
+
+build() {
+ cd ${startdir}/src
+ #cd ${startdir}/src/kbd-${pkgver}
+ patch -Np1 -i ../no-isatty.patch
+ patch -Np1 -i ../no-exit.patch
+
+ aclocal
+ autoconf
+ automake --add-missing
+ ./configure --datadir=/share/kbd --enable-klibc
+
+ cd src/
+ make kbd_mode loadkeys setfont || return 1
+
+ install -D loadkeys ${startdir}/pkg/lib/initcpio/kbd/loadkeys
+ install -D kbd_mode ${startdir}/pkg/lib/initcpio/kbd/kbd_mode
+ install -D setfont ${startdir}/pkg/lib/initcpio/kbd/setfont
+ # install hook
+ install -Dm644 ${startdir}/src/keymap_hook ${startdir}/pkg/lib/initcpio/hooks/keymap
+ install -Dm644 ${startdir}/src/keymap_install ${startdir}/pkg/lib/initcpio/install/keymap
+}
diff --git a/abs/core-testing/klibc-kbd/keymap_hook b/abs/core-testing/klibc-kbd/keymap_hook
new file mode 100644
index 0000000..913b247
--- /dev/null
+++ b/abs/core-testing/klibc-kbd/keymap_hook
@@ -0,0 +1,27 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading keymap..."
+ . /keymap
+ if [ "${UTF8}" = "yes" ]; then
+ /bin/kbd_mode -u
+ printf "\033%%G" >> /dev/console
+ [ -n "${KEYMAP}" ] && /bin/loadkeys -q -u ${KEYMAP}
+ else
+ /bin/kbd_mode -a
+ printf "\033%%@" >> /dev/console
+ [ -n "${KEYMAP}" ] && /bin/loadkeys -q ${KEYMAP}
+ fi
+ if [ -n "${CONSOLEFONT}" ]; then
+ if [ "${UTF8}" = "yes" ]; then
+ CONSOLEMAP=""
+ fi
+ if [ -n "${CONSOLEMAP}" ]; then
+ /bin/setfont -m ${CONSOLEMAP} ${CONSOLEFONT} -C /dev/console
+ else
+ /bin/setfont ${CONSOLEFONT} -C /dev/console
+ fi
+ printf "\033(K" >> /dev/console
+ fi
+ msg "done."
+}
diff --git a/abs/core-testing/klibc-kbd/keymap_install b/abs/core-testing/klibc-kbd/keymap_install
new file mode 100644
index 0000000..e61577e
--- /dev/null
+++ b/abs/core-testing/klibc-kbd/keymap_install
@@ -0,0 +1,76 @@
+# vim: set ft=sh:
+
+# this is needed because kbd utilities compiled with klibc cannot use gunzip
+add_ucfile ()
+{
+ temp=$(mktemp ${TMPDIR}/kbd.XXXX)
+ dest=$(echo "${1}" | sed 's|/usr||' | sed 's|.gz||')
+ name=$(echo "${1}" | sed 's|.*/||')
+
+ if [ $(echo "${1}" | grep '.gz$') ]; then
+ gunzip -c ${1} > ${temp}
+ add_file ${temp} ${dest}
+ else
+ add_file ${1} ${dest}
+ fi
+}
+
+add_includes()
+{
+ for i in $(zgrep -e '^include ".*"' ${1} | cut -d '"' -f 2); do
+ for j in $(find /usr/share/kbd/keymaps -name "${i}" -o -name "${i}.*"); do
+ add_ucfile ${j}
+ add_includes ${j}
+ done
+ done
+}
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=""
+ SCRIPT="keymap"
+ KEYMAP_FILE="$(mktemp ${TMPDIR}/keymap.XXXXXX)"
+ add_file /lib/initcpio/kbd/loadkeys /bin/loadkeys
+ add_file /lib/initcpio/kbd/kbd_mode /bin/kbd_mode
+ add_file /lib/initcpio/kbd/setfont /bin/setfont
+ eval "$(grep -e "^LOCALE=" -e "^KEYMAP=" -e "^CONSOLEFONT=" -e "^CONSOLEMAP=" /etc/rc.conf)"
+ echo "KEYMAP='${KEYMAP}'" >> ${KEYMAP_FILE}
+ echo "CONSOLEFONT='${CONSOLEFONT}'" >> ${KEYMAP_FILE}
+ echo "CONSOLEMAP='${CONSOLEMAP}'" >> ${KEYMAP_FILE}
+ if [ -n "$(echo ${LOCALE} | grep -i utf)" ]; then
+ echo "UTF8='yes'" >> ${KEYMAP_FILE}
+ fi
+ . ${KEYMAP_FILE}
+ add_file ${KEYMAP_FILE} /keymap
+ if [ -n "${KEYMAP}" ]; then
+ for i in $(echo ${KEYMAP}); do
+ for j in $(find /usr/share/kbd/keymaps -name "${i}.map.gz"); do
+ add_ucfile ${j}
+ add_includes ${j}
+ done
+ done
+ fi
+ if [ -n "${CONSOLEFONT}" ]; then
+ for i in $(find /usr/share/kbd/consolefonts -name "${CONSOLEFONT}.*gz"); do
+ add_ucfile ${i}
+ done
+ fi
+ if [ -n "${CONSOLEMAP}" ]; then
+ for i in $(find /usr/share/kbd/unimaps -name "${CONSOLEMAP}.uni"); do
+ add_ucfile ${i}
+ done
+ for i in $(find /usr/share/kbd/consoletrans -name "${CONSOLEMAP}.trans" -o -name "${CONSOLEMAP}"); do
+ add_ucfile ${i}
+ done
+ fi
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads keymap(s) and consolefont specified in rc.conf
+ during early userspace.
+HELPEOF
+}
diff --git a/abs/core-testing/klibc-kbd/no-exit.patch b/abs/core-testing/klibc-kbd/no-exit.patch
new file mode 100644
index 0000000..2f207dc
--- /dev/null
+++ b/abs/core-testing/klibc-kbd/no-exit.patch
@@ -0,0 +1,31 @@
+From 96dc0b9e56da64d2c063d1e74c81034b6b404bc2 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 21:46:35 +0200
+Subject: [PATCH] Do not exit on ferror during psf font loading when built with klibc
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ src/psffontop.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/src/psffontop.c b/src/psffontop.c
+index 1b99e9b..75a6048 100644
+--- a/src/psffontop.c
++++ b/src/psffontop.c
+@@ -203,9 +203,13 @@ readpsffont(FILE *fontf, char **allbufp, int *allszp,
+ }
+ n += fread(inputbuf+n, 1, inputbuflth-n, fontf);
+ if (ferror(fontf)) {
++ #ifndef __klibc__
+ char *u = _("%s: Error reading input font");
+ fprintf(stderr, u, progname);
+ exit(EX_DATAERR);
++ #else
++ break;
++ #endif
+ }
+ if (feof(fontf))
+ break;
+--
+1.5.3.7
+
diff --git a/abs/core-testing/klibc-kbd/no-isatty.patch b/abs/core-testing/klibc-kbd/no-isatty.patch
new file mode 100644
index 0000000..ce02a7a
--- /dev/null
+++ b/abs/core-testing/klibc-kbd/no-isatty.patch
@@ -0,0 +1,58 @@
+From 92dc27dd57c83e9e2c798bda41ec111d26e1e3e2 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 18:57:04 +0200
+Subject: [PATCH] Do not use isatty() when built with klibc
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ src/getfd.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/src/getfd.c b/src/getfd.c
+index 7f6d70e..3cef522 100644
+--- a/src/getfd.c
++++ b/src/getfd.c
+@@ -16,6 +16,7 @@
+ * if someone else used X (which does a chown on /dev/console).
+ */
+
++#ifndef __klibc__
+ static int
+ is_a_console(int fd) {
+ char arg;
+@@ -25,6 +26,7 @@ is_a_console(int fd) {
+ && ioctl(fd, KDGKBTYPE, &arg) == 0
+ && ((arg == KB_101) || (arg == KB_84)));
+ }
++#endif
+
+ static int
+ open_a_console(const char *fnam) {
+@@ -41,10 +43,12 @@ open_a_console(const char *fnam) {
+ fd = open(fnam, O_RDONLY);
+ if (fd < 0)
+ return -1;
++ #ifndef __klibc__
+ if (!is_a_console(fd)) {
+ close(fd);
+ return -1;
+ }
++ #endif
+ return fd;
+ }
+
+@@ -80,9 +84,11 @@ int getfd(const char *fnam) {
+ if (fd >= 0)
+ return fd;
+
++ #ifndef __klibc__
+ for (fd = 0; fd < 3; fd++)
+ if (is_a_console(fd))
+ return fd;
++ #endif
+
+ fprintf(stderr,
+ _("Couldnt get a file descriptor referring to the console\n"));
+--
+1.5.3.7
+
diff --git a/abs/core-testing/klibc-module-init-tools/PKGBUILD b/abs/core-testing/klibc-module-init-tools/PKGBUILD
new file mode 100644
index 0000000..80a1ede
--- /dev/null
+++ b/abs/core-testing/klibc-module-init-tools/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5989 2008-07-22 12:58:46Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=klibc-module-init-tools
+pkgver=3.4
+pkgrel=10
+pkgdesc="Utilities for inserting and removing modules from the Linux kernel"
+arch=(i686 x86_64)
+url="http://www.kernel.org"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so))
+source=(http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-$pkgver.tar.bz2 \
+ makefile.patch
+ fix-modprobe-ignore-path.patch)
+md5sums=('db6ac059e80e8dd4389dbe81ee61f3c6'
+ 'c48553c2b61fd8d9784aa86e559b9d7b'
+ '335c3f8317f257ddd70b09271b4360bd')
+
+build() {
+ cd $startdir/src/module-init-tools-$pkgver
+ patch -p1 -i ../makefile.patch || return 1
+ autoreconf || return 1
+ patch -p0 -i ../fix-modprobe-ignore-path.patch || return 1
+ sed -i 's|/usr/bin/install|/bin/install|g' install-with-care
+ CFLAGS="${CFLAGS} -DCONFIG_NO_BACKWARDS_COMPAT" CC=klcc LD=klcc ./configure --prefix=/usr/lib/klibc
+ make || return 1
+ INSTALL=/bin/install make DESTDIR=$startdir/pkg install || return 1
+ rm -f $startdir/pkg/usr/lib/klibc/sbin/{generate-modprobe.conf,insmod.static}
+ rm -rf $startdir/pkg/usr/lib/klibc/{share,man}
+}
diff --git a/abs/core-testing/klibc-module-init-tools/fix-modprobe-ignore-path.patch b/abs/core-testing/klibc-module-init-tools/fix-modprobe-ignore-path.patch
new file mode 100644
index 0000000..c562b3f
--- /dev/null
+++ b/abs/core-testing/klibc-module-init-tools/fix-modprobe-ignore-path.patch
@@ -0,0 +1,14 @@
+--- modprobe.c~ 2005-12-02 00:42:09.000000000 +0100
++++ modprobe.c 2008-03-12 09:39:14.000000000 +0100
+@@ -1236,9 +1236,8 @@
+
+ /* Try defaults. */
+ for (i = 0; i < ARRAY_SIZE(default_configs); i++) {
+- if (read_config(default_configs[i], name, dump_only, removing,
+- options, commands, aliases, blacklist))
+- return;
++ read_config(default_configs[i], name, dump_only, removing,
++ options, commands, aliases, blacklist);
+ }
+ }
+
diff --git a/abs/core-testing/klibc-module-init-tools/makefile.patch b/abs/core-testing/klibc-module-init-tools/makefile.patch
new file mode 100644
index 0000000..df0836f
--- /dev/null
+++ b/abs/core-testing/klibc-module-init-tools/makefile.patch
@@ -0,0 +1,54 @@
+diff -Nur module-init-tools-3.4.orig/Makefile.am module-init-tools-3.4/Makefile.am
+--- module-init-tools-3.4.orig/Makefile.am 2007-10-07 23:51:46.000000000 +0200
++++ module-init-tools-3.4/Makefile.am 2008-07-22 14:49:09.000000000 +0200
+@@ -18,16 +18,9 @@
+ EXTRA_depmod_SOURCES = moduleops_core.c
+ EXTRA_modinfo_SOURCES = backwards_compat.c
+
+-MAN5 = modprobe.conf.5 modules.dep.5 depmod.conf.5
+-MAN8 = depmod.8 insmod.8 lsmod.8 rmmod.8 modprobe.8 modinfo.8
+-SGML = $(addprefix doc/, $(MAN5:%.5=%.sgml) $(MAN8:%.8=%.sgml))
+-man_MANS = $(MAN5) $(MAN8)
+-# If they haven't overridden mandir, fix it (never /man!)
+-mandir =$(shell if [ @mandir@ = $(prefix)/man ]; then if [ $(prefix) = / ]; then echo /usr/share/man; else echo $(prefix)/share/man; fi; else echo @mandir@; fi)
+-
+ TESTSUITE := $(shell find tests -type f ! -name '*~') tests/vg-suppressions
+
+-EXTRA_DIST = generate-modprobe.conf modprobe.devfs FAQ CODING stress_modules.sh install-with-care $(SGML) $(man_MANS) $(TESTSUITE)
++EXTRA_DIST = generate-modprobe.conf modprobe.devfs FAQ CODING stress_modules.sh install-with-care $(TESTSUITE)
+
+ sbin_PROGRAMS = insmod modprobe rmmod depmod modinfo insmod.static
+ bin_PROGRAMS = lsmod
+@@ -38,32 +31,6 @@
+
+ DIST_DIR := /home/rusty/devel/kernel/www/modules/
+
+-MAINTAINERCLEANFILES := $(man_MANS)
+-
+-# According to Warren Togami, RH has docbook2man in the docbook-utils rpm.
+-DOCBOOKTOMAN := $(shell if command -v docbook-to-man >/dev/null 2>&1; then echo docbook-to-man; else echo docbook2man; fi)
+-
+-# docbook2man writes file itself, doesn't do stdout.
+-%.8: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+-
+-%.5: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+-
+-# docbook2man creates extra crap files which need cleaning.
+-distclean: killbuildmanpages
+-
+-killbuildmanpages:
+- rm -f doc/*.tmp manpage.refs manpage.links
+-
+ tarball: $(DIST_DIR)/module-init-tools-$(VERSION).tar.gz
+
+ $(DIST_DIR)/module-init-tools-$(VERSION).tar.gz: dist
diff --git a/abs/core-testing/klibc-udev/PKGBUILD b/abs/core-testing/klibc-udev/PKGBUILD
new file mode 100644
index 0000000..baad6d4
--- /dev/null
+++ b/abs/core-testing/klibc-udev/PKGBUILD
@@ -0,0 +1,58 @@
+# $Id: PKGBUILD 5858 2008-07-21 18:47:23Z thomas $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=klibc-udev
+pkgver=116
+pkgrel=13
+pkgdesc="udevd compiled under klibc"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
+groups=('base')
+depends=('coreutils' 'klibc' $(basename /lib/klibc-*.so .so))
+license=('GPL')
+source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-$pkgver.tar.bz2 \
+ udev_hook udev_install start_udev udev.rules load-modules.sh \
+ vol_id-suspend2.patch)
+md5sums=('02c49d93ffda4a104c853c082138b835'
+ 'bcfed63882660e7d33f367d722e0a5c9'
+ '92b62124dd43d61a2e610c305bf95d15'
+ '22741baf8f5d7d8bc88022b39bca74d8'
+ 'f50bd6b378a5e75b2475bc67b32cb692'
+ '1ecfeec15e88485e88f2e37f46861f2e'
+ '80f75fc9a8fc32c7b8ff146d53bf579f')
+
+build()
+{
+ cd $startdir/src/udev-$pkgver
+ patch -p1 -i ${startdir}/src/vol_id-suspend2.patch || return 1
+ sed -i "s|USE_LOG = .*|USE_LOG = false|g" Makefile
+
+ #I need to look at this... it appears the __CTYPE_NO_INLINE may be a klibc issue - aaron
+ make VOLUME_ID_STATIC=true CC=klcc LD=klcc PROGRAMS="udevd udevsettle udevtrigger" \
+ CFLAGS="$CFLAGS -U__CTYPE_NO_INLINE" \
+ EXTRAS="extras/firmware extras/cdrom_id extras/ata_id \
+ extras/edd_id extras/usb_id extras/volume_id" \
+ || return 1
+
+ mkdir -p $startdir/pkg/lib/initcpio/udev
+ install -m755 udevd $startdir/pkg/lib/initcpio/udev
+ install -m755 udevtrigger $startdir/pkg/lib/initcpio/udev
+ install -m755 udevsettle $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/firmware/firmware.sh $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/cdrom_id/cdrom_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/ata_id/ata_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/edd_id/edd_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/scsi_id/scsi_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/usb_id/usb_id $startdir/pkg/lib/initcpio/udev
+ # broken atm
+ install -m755 extras/volume_id/vol_id $startdir/pkg/lib/initcpio/udev
+ #install -m755 extras/path_id/path_id $startdir/pkg/lib/initcpio/udev
+ install -m755 $startdir/src/start_udev $startdir/pkg/lib/initcpio/udev
+ install -m644 $startdir/src/udev.rules $startdir/pkg/lib/initcpio/udev
+ install -m755 $startdir/src/load-modules.sh $startdir/pkg/lib/initcpio/udev
+
+ mkdir -p $startdir/pkg/lib/initcpio/install
+ install -m644 $startdir/src/udev_install $startdir/pkg/lib/initcpio/install/udev
+ mkdir -p $startdir/pkg/lib/initcpio/hooks/
+ install -m644 $startdir/src/udev_hook $startdir/pkg/lib/initcpio/hooks/udev
+}
diff --git a/abs/core-testing/klibc-udev/klibc-remove-revert.patch b/abs/core-testing/klibc-udev/klibc-remove-revert.patch
new file mode 100644
index 0000000..8d9484f
--- /dev/null
+++ b/abs/core-testing/klibc-udev/klibc-remove-revert.patch
@@ -0,0 +1,111 @@
+### Archlinux revert
+### revert this patch, crazy udev devs
+From: Kay Sievers <kay.sievers@suse.de>
+Date: Fri, 4 Aug 2006 22:02:58 +0000 (+0200)
+Subject: libvolume_id: read ufs2 label
+X-Git-Tag: 097
+X-Git-Url: http://www.kernel.org/git/?p=linux/hotplug/udev.git;a=commitdiff;h=eb82b76dedc1482b6434c46fee84d3ef13cb9648
+
+libvolume_id: read ufs2 label
+
+Taken from the FreeBSD HAL repository.
+---
+
+--- a/Makefile
++++ b/Makefile
+@@ -33,6 +33,9 @@ USE_GCOV = false
+ # include Security-Enhanced Linux support
+ USE_SELINUX = false
+
++# comile with klibc instead of glibc
++USE_KLIBC = false
++
+ # set this to create statically linked binaries
+ USE_STATIC = false
+
+@@ -139,6 +142,12 @@ ifeq ($(strip $(USE_GCOV)),true)
+ LDFLAGS += -fprofile-arcs
+ endif
+
++ifeq ($(strip $(USE_KLIBC)),true)
++ KLCC = /usr/bin/$(CROSS_COMPILE)klcc
++ CC = $(KLCC)
++ LD = $(KLCC)
++endif
++
+ ifeq ($(strip $(USE_SELINUX)),true)
+ UDEV_OBJS += udev_selinux.o
+ LIB_OBJS += -lselinux -lsepol
+--- a/README
++++ b/README
+@@ -69,6 +69,10 @@ Compile Options:
+ USE_SELINUX
+ If set to 'true', udev will be built with SELinux support
+ enabled. This is disabled by default.
++ USE_KLIBC
++ If set to 'true', udev is built and linked against klibc.
++ Default value is 'false'. KLCC specifies the klibc compiler
++ wrapper, usually located at /usr/bin/klcc.
+ EXTRAS
+ list of helper programs in extras/ to build.
+ make EXTRAS="extras/cdrom_id extras/scsi_id extras/volume_id"
+--- a/extras/scsi_id/scsi_id.c
++++ b/extras/scsi_id/scsi_id.c
+@@ -402,7 +402,8 @@ static int set_options(int argc, char **
+ /*
+ * optind is a global extern used by getopt. Since we can call
+ * set_options twice (once for command line, and once for config
+- * file) we have to reset this back to 1.
++ * file) we have to reset this back to 1. [Note glibc handles
++ * setting this to 0, but klibc does not.]
+ */
+ optind = 1;
+ while (1) {
+--- a/test/simple-build-check.sh
++++ b/test/simple-build-check.sh
+@@ -23,6 +23,14 @@ make clean EXTRAS="$EXTRAS" >/dev/null
+ make all $MAKEOPTS USE_LOG=false EXTRAS="$EXTRAS" || exit
+ echo -e "\n\n"
+
++# klibc build
++if [ -n "$KLCC" -a -e "$KLCC" ]; then
++ echo KLCC: "$KLCC"
++ make clean EXTRAS="$EXTRAS" >/dev/null
++ make all -j4 $MAKEOPTS USE_KLIBC=true DEBUG=true EXTRAS="$EXTRAS" KLCC="$KLCC" || exit
++ echo -e "\n\n"
++fi
++
+ # install in temporary dir and show it
+ TEMPDIR="`pwd`/.tmp"
+ rm -rf $TEMPDIR
+--- a/udev_libc_wrapper.c
++++ b/udev_libc_wrapper.c
+@@ -30,7 +30,7 @@
+
+ #include "udev.h"
+
+-#ifndef __GLIBC__
++#ifdef __KLIBC__
+ #define __OWN_USERDB_PARSER__
+ #endif
+
+--- a/udev_libc_wrapper.h
++++ b/udev_libc_wrapper.h
+@@ -105,7 +105,7 @@ static inline int inotify_add_watch(int
+ }
+ #else
+ /* needed until /usr/include/sys/inotify.h is working */
+-#ifndef __GLIBC__
++#ifdef __KLIBC__
+ #include <sys/inotify.h>
+ #else
+ static inline int inotify_init(void)
+@@ -117,7 +117,7 @@ static inline int inotify_add_watch(int
+ {
+ return syscall(__NR_inotify_add_watch, fd, name, mask);
+ }
+-#endif /* __GLIBC__ */
++#endif /* __KLIBC__ */
+ #endif /* __NR_inotify_init */
+
+ #ifndef IN_CREATE
diff --git a/abs/core-testing/klibc-udev/load-modules.sh b/abs/core-testing/klibc-udev/load-modules.sh
new file mode 100755
index 0000000..f0961a7
--- /dev/null
+++ b/abs/core-testing/klibc-udev/load-modules.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Implement blacklisting for udev-loaded modules
+# Includes module checking
+# - Aaron Griffin & Tobias Powalowski for Archlinux
+[ $# -ne 1 ] && exit 1
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+fi
+
+# get the real names from modaliases
+i="$(/bin/moddeps $1)"
+# add disablemodules= from commandline to blacklist
+k="$(/bin/replace "${disablemodules}" ',')"
+j="$(/bin/replace "${k}" '-' '_')"
+
+if [ "${j}" != "" ] ; then
+ for n in ${i}; do
+ for o in ${j}; do
+ if [ "$n" = "$o" ]; then
+ exit 1
+ fi
+ done
+ done
+fi
+/sbin/modprobe $1
+
+# vim: set et ts=4:
diff --git a/abs/core-testing/klibc-udev/post-107.patch b/abs/core-testing/klibc-udev/post-107.patch
new file mode 100644
index 0000000..cb6e618
--- /dev/null
+++ b/abs/core-testing/klibc-udev/post-107.patch
@@ -0,0 +1,176 @@
+From: Matthias Schwarzott <zzam@gentoo.org>
+Date: Thu, 22 Mar 2007 20:05:56 +0000 (+0100)
+Subject: write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=491a6a71ff685373422621f4b67f550806072d17
+
+write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices
+---
+
+diff --git a/extras/rule_generator/write_cd_rules b/extras/rule_generator/write_cd_rules
+index 1dbe6b7..bd951c5 100644
+--- a/extras/rule_generator/write_cd_rules
++++ b/extras/rule_generator/write_cd_rules
+@@ -53,7 +53,15 @@ fi
+ if [ "$1" ]; then
+ METHOD="$1"
+ else
+- METHOD='by-path'
++ case "$ID_BUS" in
++ usb|ieee1394)
++ METHOD='by-id'
++ ;;
++
++ *)
++ METHOD='by-path'
++ ;;
++ esac
+ fi
+
+ case "$METHOD" in
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 23 Mar 2007 16:17:18 +0000 (+0100)
+Subject: udevinfo: relax check for the correct device if looked up by name
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=be8594ab14f15203fcea4b2aa0115171472f3e43
+
+udevinfo: relax check for the correct device if looked up by name
+---
+
+diff --git a/udev_db.c b/udev_db.c
+index 00d68d6..7b8d02b 100644
+--- a/udev_db.c
++++ b/udev_db.c
+@@ -186,7 +186,7 @@ int udev_db_get_device(struct udevice *udev, const char *devpath)
+ size_t cur;
+ size_t count;
+
+- strlcpy(udev->dev->devpath, devpath, sizeof(udev->dev->devpath));
++ sysfs_device_set_values(udev->dev, devpath, NULL, NULL);
+ devpath_to_db_path(devpath, filename, sizeof(filename));
+
+ if (lstat(filename, &stats) != 0) {
+diff --git a/udevinfo.c b/udevinfo.c
+index 3f25be0..4b4876c 100644
+--- a/udevinfo.c
++++ b/udevinfo.c
+@@ -173,13 +173,17 @@ static void export_db(void) {
+ static int lookup_device_by_name(struct udevice *udev, const char *name)
+ {
+ LIST_HEAD(name_list);
++ int count;
+ struct name_entry *device;
+ int rc = -1;
+
+- if (udev_db_get_devices_by_name(name, &name_list) <= 0)
++ count = udev_db_get_devices_by_name(name, &name_list);
++ if (count <= 0)
+ goto out;
+
+- /* select the device that matches the dev_t of name */
++ info("found %i devices for '%s'", count, name);
++
++ /* select the device that seems to match */
+ list_for_each_entry(device, &name_list, node) {
+ char filename[PATH_SIZE];
+ struct stat statbuf;
+@@ -189,16 +193,18 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
+ continue;
+ info("found db entry '%s'", device->name);
+
++ /* make sure, we don't get a link of a differnt device */
+ strlcpy(filename, udev_root, sizeof(filename));
+ strlcat(filename, "/", sizeof(filename));
+ strlcat(filename, name, sizeof(filename));
+ if (stat(filename, &statbuf) != 0)
+ continue;
+- if (statbuf.st_rdev == udev->devt) {
+- info("found '%s', dev_t matches", udev->name);
+- rc = 0;
+- break;
++ if (major(udev->devt) > 0 && udev->devt != statbuf.st_rdev) {
++ info("skip '%s', dev_t doesn't match", udev->name);
++ continue;
+ }
++ rc = 0;
++ break;
+ }
+ out:
+ name_list_cleanup(&name_list);
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 23 Mar 2007 16:18:03 +0000 (+0100)
+Subject: don't write to sysfs files during test run
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=d2c9a56e0e624ed448aed8ad18460deed63973e1
+
+don't write to sysfs files during test run
+---
+
+diff --git a/udev_rules.c b/udev_rules.c
+index f8844a8..5078f2d 100644
+--- a/udev_rules.c
++++ b/udev_rules.c
+@@ -861,8 +861,9 @@ try_parent:
+ info("writing '%s' to sysfs file '%s'", value, attr);
+ f = fopen(attr, "w");
+ if (f != NULL) {
+- if (fprintf(f, "%s", value) <= 0)
+- err("error writing ATTR{%s}: %s", attr, strerror(errno));
++ if (!udev->test_run)
++ if (fprintf(f, "%s", value) <= 0)
++ err("error writing ATTR{%s}: %s", attr, strerror(errno));
+ fclose(f);
+ } else
+ err("error opening ATTR{%s} for writing: %s", attr, strerror(errno));
+From: Pozsar Balazs <pozsy@uhulinux.hu>
+Date: Fri, 23 Mar 2007 16:21:46 +0000 (+0100)
+Subject: udevsettle: read udev not kernel seqnum first
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=4e2b290821d083361260f8cdbe7c54886463673e
+
+udevsettle: read udev not kernel seqnum first
+---
+
+diff --git a/udevsettle.c b/udevsettle.c
+index 9e3e03b..f76ad71 100644
+--- a/udevsettle.c
++++ b/udevsettle.c
+@@ -110,9 +110,9 @@ int main(int argc, char *argv[], char *envp[])
+ goto exit;
+ }
+
+- /* read current kernel seqnum */
+- strlcpy(filename, sysfs_path, sizeof(filename));
+- strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename));
++ /* read current udev seqnum */
++ strlcpy(filename, udev_root, sizeof(filename));
++ strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ goto exit;
+@@ -121,12 +121,12 @@ int main(int argc, char *argv[], char *envp[])
+ if (len <= 0)
+ goto exit;
+ seqnum[len] = '\0';
+- seq_kernel = strtoull(seqnum, NULL, 10);
+- info("kernel seqnum = %llu", seq_kernel);
++ seq_udev = strtoull(seqnum, NULL, 10);
++ info("udev seqnum = %llu", seq_udev);
+
+- /* read current udev seqnum */
+- strlcpy(filename, udev_root, sizeof(filename));
+- strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
++ /* read current kernel seqnum */
++ strlcpy(filename, sysfs_path, sizeof(filename));
++ strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename));
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ goto exit;
+@@ -135,8 +135,8 @@ int main(int argc, char *argv[], char *envp[])
+ if (len <= 0)
+ goto exit;
+ seqnum[len] = '\0';
+- seq_udev = strtoull(seqnum, NULL, 10);
+- info("udev seqnum = %llu", seq_udev);
++ seq_kernel = strtoull(seqnum, NULL, 10);
++ info("kernel seqnum = %llu", seq_kernel);
+
+ /* make sure all kernel events have arrived in the queue */
+ if (seq_udev >= seq_kernel) {
+
diff --git a/abs/core-testing/klibc-udev/start_udev b/abs/core-testing/klibc-udev/start_udev
new file mode 100755
index 0000000..8503bb9
--- /dev/null
+++ b/abs/core-testing/klibc-udev/start_udev
@@ -0,0 +1,115 @@
+#! /bin/sh
+#
+# start_udev
+# script to initialize /dev by using udev.
+#
+# Modified for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# Inspired by:
+#
+# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+#
+# Released under the GPL v2 only.
+#
+# This needs to be run at the earliest possible point in the boot
+# process.
+#
+# Based on the udev init.d script
+#
+# Thanks go out to the Gentoo developers for proving
+# that this is possible to do.
+#
+# Yes, it's very verbose, feel free to turn off all of the echo calls,
+# they were there to make me feel better that everything was working
+# properly during development...
+
+prog=udev
+sysfs_dir=/sys
+bin=/sbin/udev
+udevd=/sbin/udevd
+udev_root="/dev"
+
+trigger_device_events ()
+{
+ /sbin/udevtrigger
+}
+
+wait_for_queue ()
+{
+ # disabled because it hangs network boot
+ #loop=20
+ #while ! [ "$loop" -gt 0 -a -d /dev/.udev/queue ]; do
+ # sleep 0.1;
+ # loop=$(($loop - 1))
+ #done
+ /sbin/udevsettle
+}
+
+make_extra_nodes ()
+{
+ # there are a few things that sysfs does not export for us.
+ # these things go here (and remember to remove them in
+ # remove_extra_nodes()
+ #
+ # Thanks to Gentoo for the initial list of these.
+ ln -sf /proc/self/fd $udev_root/fd
+ ln -sf /proc/self/fd/0 $udev_root/stdin
+ ln -sf /proc/self/fd/1 $udev_root/stdout
+ ln -sf /proc/self/fd/2 $udev_root/stderr
+ ln -sf /proc/kcore $udev_root/core
+}
+
+udev_init ()
+{
+# don't use udev if sysfs is not mounted.
+if [ ! -d $sysfs_dir/block ]; then
+ exit 1
+fi
+
+# Do not mount ramfs, we are already in ramfs
+#mount -t ramfs none $udev_root
+
+# propogate /udev from /sys
+#echo "Creating initial udev device nodes:"
+
+#echo "making extra nodes"
+make_extra_nodes
+
+# check if udevd is already running
+#echo "start udev daemon"
+/sbin/udevd --daemon
+
+case "$(uname -r)" in
+ 2.6.[0-9]|2.6.[0-9][!0-9]*) ;;
+ *) if [ -f "/sys/class/tty/console/uevent" ]; then
+ #echo "Kernel >= 2.6.15 and supports uevents"
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ # catch events that are real fast
+ mkdir -p /dev/.udev/queue
+ else
+ # for older kernels without uevents will be removed when udevstart dies in udev
+ echo "Kernel does not support uevents, you need a kernel >= 2.6.15!"
+ exit 1
+ fi
+ ;;
+esac
+}
+
+udev_uevents ()
+{
+# configure all devices
+trigger_device_events
+# until we know how to do better, just wait for _all_ events to finish
+wait_for_queue
+}
+
+if [ $# -eq 0 ]; then
+udev_init
+udev_uevents
+fi
+
+[ "$1" = "init" ] && udev_init
+[ "$1" = "uevents" ] && udev_uevents
+
+exit 0
diff --git a/abs/core-testing/klibc-udev/udev.rules b/abs/core-testing/klibc-udev/udev.rules
new file mode 100644
index 0000000..22f422a
--- /dev/null
+++ b/abs/core-testing/klibc-udev/udev.rules
@@ -0,0 +1,187 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+# Early rules - begin
+#####################################
+# wait for sysfs
+ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
+# Setting timeout for tape-devices (type 1) to 900 seconds
+# and 60 seconds for device types 0, 7 and 14
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+#####################################
+# Early rules -end
+#####################################
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+
+# Modaliases to load
+ACTION=="add", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+# SCSI addon modules
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[23689]", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg"
+ACTION=="add", SUBSYSTEM=="mmc", RUN+="/lib/udev/load-modules.sh mmc_block"
+
+LABEL="hotplug_driver_loaded"
+
+# FIRMWARE
+ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", RUN+="/lib/udev/firmware.sh"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+#####################################
+##### PCMCIA rules - begin
+#####################################
+# PCMCIA devices:
+#
+
+# Very few CIS firmware entries (which we use for matching)
+# are so broken that we need to read out random bytes of it
+# instead of the manufactor, card or product ID. Then the
+# matching is done in userspace.
+ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/sbin/pcmcia-check-broken-cis.static"
+
+# However, the "weak" matching by func_id is only allowed _after_ modprobe
+# returns, so that "strong" matches have a higher priority.
+ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/allow_func_id_match'"
+
+# PCMCIA sockets:
+#
+# modprobe the pcmcia bus module so that 16-bit PCMCIA devices work
+ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/lib/udev/load-modules.sh pcmcia"
+
+# if this is a PCMCIA socket which needs a resource database,
+# pcmcia-socket-startup sets it up
+ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/sbin/pcmcia-socket-startup.static"
+#####################################
+##### PCMCIA rules - end
+#####################################
+
+#######################################
+# Persistant block device stuff - begin
+#######################################
+# persistent storage links: /dev/{disk,tape}/{by-id,by-uuid,by-label,by-path,by-name}
+# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+# needed like this!!!
+ACTION!="add|change", GOTO="persistent_storage_end"
+#KERNEL=="nst[0-9]", SUBSYSTEMS=="scsi", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
+
+# type 8 devices are "Medium Changers"
+#KERNEL=="sg*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+# skip rules for inappropriate block devices
+# don't add dm-*!!!
+KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+# never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_storage_end"
+
+# ignore partitions that span the entire disk
+ATTR{whole_disk}=="*", GOTO="persistent_storage_end"
+
+# /sys/class/block will export this
+ENV{DEVTYPE}!="?*", ATTR{range}=="?*", ENV{DEVTYPE}="disk"
+ENV{DEVTYPE}!="?*", ATTR{start}=="?*", ENV{DEVTYPE}="partition"
+
+# for partitions import parent information
+ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
+
+# by-id (hardware serial number)
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}"
+KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n"
+
+KERNEL=="sd*[!0-9]|sr*|st*", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_SUBSYSTEMS}="ieee1394"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export %p"
+#KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode"
+#KERNEL=="cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --ignore-sysfs -s %p -d $tempnode", ENV{ID_BUS}="cciss"
+KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
+KERNEL=="st*", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+
+# libata compat (links like hd*)
+KERNEL=="sd*[!0-9]|sr*", ENV{ID_VENDOR}=="ATA", PROGRAM="/lib/udev/ata_id $tempnode", RESULT=="?*", ENV{ID_ATA_COMPAT}="$result", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}"
+KERNEL=="sd*[0-9]", ENV{ID_ATA_COMPAT}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}-part%n"
+
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n"
+
+# by-path (shortest physical path) broken atm
+#ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/path_id %p"
+#ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
+#ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
+#KERNEL=="st*", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}"
+
+KERNEL=="sr*|st*", GOTO="persistent_storage_end"
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
+
+# by-label/by-uuid (filesystem properties)
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+# BIOS Enhanced Disk Device
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/edd_id --export $tempnode"
+ENV{DEVTYPE}=="disk", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}"
+ENV{DEVTYPE}=="partition", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n"
+LABEL="persistent_storage_end"
+
+# md links hook into "change" events, when the array becomes available
+KERNEL!="md[0-9]*", GOTO="md_end"
+ACTION!="add|change", GOTO="md_end"
+
+ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+OPTIONS="link_priority=100"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}""
+
+LABEL="md_end"
+#####################################
+# Persistant block device stuff - end
+#####################################
diff --git a/abs/core-testing/klibc-udev/udev_hook b/abs/core-testing/klibc-udev/udev_hook
new file mode 100644
index 0000000..fc4c814
--- /dev/null
+++ b/abs/core-testing/klibc-udev/udev_hook
@@ -0,0 +1,7 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading udev..."
+ /etc/start_udev
+ msg "done."
+}
diff --git a/abs/core-testing/klibc-udev/udev_install b/abs/core-testing/klibc-udev/udev_install
new file mode 100644
index 0000000..62d5b00
--- /dev/null
+++ b/abs/core-testing/klibc-udev/udev_install
@@ -0,0 +1,31 @@
+# vim:set ft=sh:
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=" /etc/udev/udev.conf"
+ SCRIPT="udev"
+ add_file /lib/initcpio/udev/udevd /sbin/udevd
+ add_file /lib/initcpio/udev/udevtrigger /sbin/udevtrigger
+ add_file /lib/initcpio/udev/udevsettle /sbin/udevsettle
+ add_file /lib/initcpio/udev/udev.rules /etc/udev/rules.d/udev.rules
+ add_file /lib/initcpio/udev/start_udev /etc/start_udev
+ add_file /lib/initcpio/udev/firmware.sh /lib/udev/firmware.sh
+ add_file /lib/initcpio/udev/cdrom_id /lib/udev/cdrom_id
+ add_file /lib/initcpio/udev/ata_id /lib/udev/ata_id
+ add_file /lib/initcpio/udev/usb_id /lib/udev/usb_id
+ add_file /lib/initcpio/udev/edd_id /lib/udev/edd_id
+ #add_file /lib/initcpio/udev/scsi_id /lib/udev/scsi_id
+ add_file /lib/initcpio/udev/vol_id /lib/udev/vol_id
+ add_file /lib/initcpio/udev/load-modules.sh /lib/udev/load-modules.sh
+}
+
+help ()
+{
+cat <<HELPEOF
+ This hook will use udev to create your root device node
+ and detect the needed modules for your root device.
+ It is recommended to use this hook instead of modload.
+HELPEOF
+}
diff --git a/abs/core-testing/klibc-udev/vol_id-suspend2.patch b/abs/core-testing/klibc-udev/vol_id-suspend2.patch
new file mode 100644
index 0000000..525e17e
--- /dev/null
+++ b/abs/core-testing/klibc-udev/vol_id-suspend2.patch
@@ -0,0 +1,15 @@
+diff -Nur udev-103.orig/extras/volume_id/lib/linux_swap.c udev-103/extras/volume_id/lib/linux_swap.c
+--- udev-103.orig/extras/volume_id/lib/linux_swap.c 2006-10-20 14:43:35.000000000 +0200
++++ udev-103/extras/volume_id/lib/linux_swap.c 2006-10-29 17:15:19.000000000 +0100
+@@ -73,6 +73,11 @@
+ strcpy(id->type_version, "ulsuspend");
+ goto found_label;
+ }
++ if (memcmp(buf, "z", 1) == 0 || memcmp(buf, "Z", 1) == 0) {
++ id->type = "suspend";
++ strcpy(id->type_version, "suspend2");
++ goto found_label;
++ }
+ }
+ return -1;
+
diff --git a/abs/core-testing/klibc/PKGBUILD b/abs/core-testing/klibc/PKGBUILD
new file mode 100644
index 0000000..a65d119
--- /dev/null
+++ b/abs/core-testing/klibc/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 5849 2008-07-21 18:46:34Z thomas $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+###
+### NOTE: Do not build this package with anything except gcc - using ccache
+### forces others to use it as well as it becomes hardcoded in the klibc
+### script.
+###
+
+pkgname=klibc
+pkgver=1.5
+_klibcbranch=Stable #Stable/Testing
+_kver=2.6.26-ARCH
+pkgrel=15
+pkgdesc="A minimal libc made for early-userspace"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/libs/klibc/"
+license=('BSD')
+groups=('base')
+options=(!ccache !strip)
+source=(http://www.kernel.org/pub/linux/libs/klibc/$_klibcbranch/$pkgname-$pkgver.tar.gz
+ multiple_raid_assembly_fix.patch
+ klibc-compile-shared-by-default.patch
+ klibc-module-init-tools.patch
+ klibc-2.6.24.patch
+ klibc-Kbuild.patch)
+md5sums=('d55ce89c0656a7d6896ec0b2af07b5dc'
+ '8d257d50a4554d57b8f461c6a87a2877'
+ 'c263a7c3fd290fcc84a4e230d456d022'
+ '4d78311ebce63f2fbb711f8518e71839'
+ 'a98b3e96aff53339572ed0bdccc8aed2'
+ 'c928be0153585a487b72a7eb5dfa8b13')
+
+build()
+{
+ cd $startdir/src/$pkgname-$pkgver
+ #INI_DEBUG causes ipconfig to fail within kinit
+ sed -i "/#define INI_DEBUG/d" usr/kinit/kinit.h || return 1
+ ln -sf /usr/src/linux-${_kver} linux
+
+ patch -p1 -i ../multiple_raid_assembly_fix.patch || return 1
+ # make klibc-module-init-tools compile
+ # don't build insmod
+ patch -p1 -i ../klibc-module-init-tools.patch || return 1
+ # compile binaries shared by default
+ patch -p1 -i ../klibc-compile-shared-by-default.patch || return 1
+ # fix compilation on 2.6.24
+ patch -p1 -i ../klibc-2.6.24.patch || return 1
+ # don't build kill, gzip and cpio
+ patch -p1 -i ../klibc-Kbuild.patch || return 1
+
+ make EXTRA_KLIBCFLAGS='' || return 1
+ make INSTALLROOT=$startdir/pkg install || return 1
+ #simplify
+ mv $startdir/pkg/usr/lib/klibc/bin/sh.shared $startdir/pkg/usr/lib/klibc/bin/sh
+ mv $startdir/pkg/usr/lib/klibc/bin/kinit.shared $startdir/pkg/usr/lib/klibc/bin/kinit
+ ln -sf asm-x86 $startdir/pkg/usr/lib/klibc/include/asm
+
+ provides[${#provides[@]}]="$(basename $startdir/pkg/lib/klibc-*.so .so)"
+ export provides
+}
diff --git a/abs/core-testing/klibc/klibc-2.6.24.patch b/abs/core-testing/klibc/klibc-2.6.24.patch
new file mode 100644
index 0000000..2527699
--- /dev/null
+++ b/abs/core-testing/klibc/klibc-2.6.24.patch
@@ -0,0 +1,44 @@
+unchanged:
+--- klibc-1.5.orig/usr/klibc/arch/i386/MCONFIG 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/klibc/arch/i386/MCONFIG 2008-01-27 16:06:08.000000000 +0100
+@@ -31,3 +31,4 @@
+ # calls, and work on the memory models for this architecture
+ # 96 MB - normal binaries start at 128 MB
+ KLIBCSHAREDFLAGS = -Ttext 0x06000200
++KLIBCASMARCH = x86
+unchanged:
+--- klibc-1.5.orig/usr/klibc/arch/x86_64/MCONFIG 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/klibc/arch/x86_64/MCONFIG 2008-01-27 16:05:43.000000000 +0100
+@@ -36,4 +36,4 @@
+ KLIBCSHAREDFLAGS = -Ttext 0x00200200 -z max-page-size=0x100000
+
+ # Additional asm- directories needed during installation
+-ASMARCH = asm-i386
++KLIBCASMARCH = x86
+only in patch2:
+unchanged:
+--- a/scripts/Kbuild.install 2007-03-04 02:52:10.000000000 +0100
++++ b/scripts/Kbuild.install 2007-11-04 15:43:28.000000000 +0100
+@@ -84,6 +84,13 @@
+ # 1) Create directories, install headers and man pages
+ # 2) Tell that we now install binaries
+ # 3) Install binaries by descending
++
++# Arch specific definitions for klibc
++include $(KLIBCSRC)/arch/$(KLIBCARCHDIR)/MCONFIG
++
++# include/asm-* architecture
++KLIBCASMARCH ?= $(KLIBCARCH)
++
+ .PHONY: header footer descend
+ header:
+ $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)"
+@@ -95,7 +102,7 @@
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+- $(Q)set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \
++ $(Q)set -e ; for d in linux scsi asm-$(KLIBCASMARCH) asm-generic $(ASMKLIBCARCH); do \
+ mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)include/$$d ; \
+ for r in $(KLIBCKERNELSRC)/include $(KLIBCKERNELOBJ)/include \
+ $(KLIBCKERNELOBJ)/include2 ; do \
diff --git a/abs/core-testing/klibc/klibc-Kbuild.patch b/abs/core-testing/klibc/klibc-Kbuild.patch
new file mode 100644
index 0000000..93a95da
--- /dev/null
+++ b/abs/core-testing/klibc/klibc-Kbuild.patch
@@ -0,0 +1,41 @@
+diff -Nur klibc-1.5.orig/Kbuild klibc-1.5/Kbuild
+--- klibc-1.5.orig/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/Kbuild 2008-05-14 12:45:02.000000000 +0200
+@@ -10,9 +10,8 @@
+ $(Q)$(MAKE) $(klibc)=usr/kinit
+ $(Q)$(MAKE) $(klibc)=usr/dash
+ $(Q)$(MAKE) $(klibc)=usr/utils
+- $(Q)$(MAKE) $(klibc)=usr/gzip
+
+
+ # Directories to visit during clean and install
+-subdir- := scripts/basic klcc usr/klibc usr/dash usr/utils usr/gzip \
++subdir- := scripts/basic klcc usr/klibc usr/dash usr/utils \
+ usr/kinit usr/klibc/tests
+diff -Nur klibc-1.5.orig/usr/Kbuild klibc-1.5/usr/Kbuild
+--- klibc-1.5.orig/usr/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/Kbuild 2008-05-14 12:45:02.000000000 +0200
+@@ -6,7 +6,7 @@
+
+ include-subdir := include
+ klibc-subdir := klibc
+-usr-subdirs := kinit utils dash gzip
++usr-subdirs := kinit utils dash
+ subdir- := $(include-subdir) $(klibc-subdir) $(usr-subdirs)
+
+ usr-subdirs := $(addprefix _usr_,$(usr-subdirs))
+diff -Nur klibc-1.5.orig/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild
+--- klibc-1.5.orig/usr/utils/Kbuild 2008-05-14 12:44:47.000000000 +0200
++++ klibc-1.5/usr/utils/Kbuild 2008-05-14 12:45:20.000000000 +0200
+@@ -2,9 +2,9 @@
+ # Kbuild file for klib utils
+ #
+
+-progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
++progs := chroot dd mkdir mkfifo mount pivot_root umount
+ progs += true false sleep ln nuke minips cat
+-progs += uname halt kill readlink cpio
++progs += uname halt readlink
+
+ static-y := $(addprefix static/, $(progs))
+ shared-y := $(addprefix shared/, $(progs))
diff --git a/abs/core-testing/klibc/klibc-compile-shared-by-default.patch b/abs/core-testing/klibc/klibc-compile-shared-by-default.patch
new file mode 100644
index 0000000..e144c3e
--- /dev/null
+++ b/abs/core-testing/klibc/klibc-compile-shared-by-default.patch
@@ -0,0 +1,12 @@
+diff -Nur klibc-1.5.orig/klcc/klcc.in klibc-1.5/klcc/klcc.in
+--- klibc-1.5.orig/klcc/klcc.in 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/klcc/klcc.in 2007-10-31 09:20:34.000000000 +0100
+@@ -113,7 +113,7 @@
+
+ $save_temps = 0; # The -save-temps option
+ $verbose = 0; # The -v option
+-$shared = 0; # Are we compiling shared?
++$shared = 1; # Are we compiling shared?
+ $debugging = 0; # -g or -p option present?
+ $strip = 0; # -s option present?
+ undef $output; # -o option present?
diff --git a/abs/core-testing/klibc/klibc-module-init-tools.patch b/abs/core-testing/klibc/klibc-module-init-tools.patch
new file mode 100644
index 0000000..a5e4532
--- /dev/null
+++ b/abs/core-testing/klibc/klibc-module-init-tools.patch
@@ -0,0 +1,63 @@
+diff -Nur klibc-1.5.orig/usr/include/sys/elf32.h klibc-1.5/usr/include/sys/elf32.h
+--- klibc-1.5.orig/usr/include/sys/elf32.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elf32.h 2007-10-31 09:18:09.000000000 +0100
+@@ -110,4 +110,8 @@
+ Elf32_Word n_type; /* Content type */
+ } Elf32_Nhdr;
+
++/* How to extract and insert information held in the st_info field. */
++#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
++#define ELF32_ST_TYPE(val) ((val) & 0xf)
++
+ #endif /* _SYS_ELF32_H */
+diff -Nur klibc-1.5.orig/usr/include/sys/elf64.h klibc-1.5/usr/include/sys/elf64.h
+--- klibc-1.5.orig/usr/include/sys/elf64.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elf64.h 2007-10-31 09:18:09.000000000 +0100
+@@ -110,4 +110,8 @@
+ Elf64_Word n_type; /* Content type */
+ } Elf64_Nhdr;
+
++/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
++#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
++#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
++
+ #endif /* _SYS_ELF64_H */
+diff -Nur klibc-1.5.orig/usr/include/sys/elfcommon.h klibc-1.5/usr/include/sys/elfcommon.h
+--- klibc-1.5.orig/usr/include/sys/elfcommon.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elfcommon.h 2007-10-31 09:18:09.000000000 +0100
+@@ -184,4 +184,14 @@
+ #define ELFOSABI_NONE 0
+ #define ELFOSABI_LINUX 3
+
++/* Legal values for ST_BIND subfield of st_info (symbol binding). */
++#define STB_LOCAL 0 /* Local symbol */
++#define STB_GLOBAL 1 /* Global symbol */
++#define STB_WEAK 2 /* Weak symbol */
++#define STB_NUM 3 /* Number of defined types. */
++#define STB_LOOS 10 /* Start of OS-specific */
++#define STB_HIOS 12 /* End of OS-specific */
++#define STB_LOPROC 13 /* Start of processor-specific */
++#define STB_HIPROC 15 /* End of processor-specific */
++
+ #endif /* _SYS_ELFCOMMON_H */
+diff -Nur klibc-1.5.orig/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild
+--- klibc-1.5.orig/usr/utils/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/utils/Kbuild 2007-10-31 09:18:28.000000000 +0100
+@@ -4,7 +4,7 @@
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+ progs += true false sleep ln nuke minips cat
+-progs += insmod uname halt kill readlink cpio
++progs += uname halt kill readlink cpio
+
+ static-y := $(addprefix static/, $(progs))
+ shared-y := $(addprefix shared/, $(progs))
+@@ -40,8 +40,6 @@
+ shared/minips-y := minips.o
+ static/cat-y := cat.o
+ shared/cat-y := cat.o
+-static/insmod-y := insmod.o
+-shared/insmod-y := insmod.o
+ static/uname-y := uname.o
+ shared/uname-y := uname.o
+ static/halt-y := halt.o
diff --git a/abs/core-testing/klibc/multiple_raid_assembly_fix.patch b/abs/core-testing/klibc/multiple_raid_assembly_fix.patch
new file mode 100644
index 0000000..237a1db
--- /dev/null
+++ b/abs/core-testing/klibc/multiple_raid_assembly_fix.patch
@@ -0,0 +1,20 @@
+--- a/usr/kinit/do_mounts_md.c 2006-07-31 21:16:01.000000000 -0500
++++ b/usr/kinit/do_mounts_md.c 2006-07-31 21:18:46.000000000 -0500
+@@ -228,6 +228,7 @@
+ char *devname;
+ mdu_disk_info_t dinfo;
+ char name[16];
++ struct stat st_chk;
+
+ dev_minor = md_setup_args[ent].minor;
+ partitioned = md_setup_args[ent].partitioned;
+@@ -236,6 +237,9 @@
+ snprintf(name, sizeof name,
+ "/dev/md%s%d", partitioned ? "_d" : "", dev_minor);
+
++ if (stat(name, &st_chk) == 0)
++ continue;
++
+ if (partitioned)
+ dev = makedev(mdp_major(), dev_minor << MdpMinorShift);
+ else
diff --git a/abs/core-testing/lame/PKGBUILD b/abs/core-testing/lame/PKGBUILD
new file mode 100644
index 0000000..7be3e87
--- /dev/null
+++ b/abs/core-testing/lame/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4167 2008-07-04 18:00:32Z hugo $
+# Maintainer: Hugo Doria <hugo@archlinux.org>
+# Contributor: Hugo Doria <hugo@archlinux.org>
+pkgname=lame
+pkgver=3.98
+pkgrel=1
+pkgdesc="An MP3 encoder and graphical frame analyzer"
+arch=('i686' 'x86_64')
+url="http://lame.sourceforge.net/"
+depends=('ncurses')
+makedepends=('nasm')
+license=('LGPL')
+source=(http://downloads.sourceforge.net/sourceforge/lame/lame-398.tar.gz \
+ shared-frontend.patch)
+md5sums=('f44b9f8e1b5d8835d0a77f9cc9cedd1c' 'e7fc0e6d82dd35a01411be96fc8effab')
+
+build() {
+ cd $startdir/src/$pkgname-398
+ ./configure --prefix=/usr --enable-nasm --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/lame/shared-frontend.patch b/abs/core-testing/lame/shared-frontend.patch
new file mode 100644
index 0000000..e5ae0a9
--- /dev/null
+++ b/abs/core-testing/lame/shared-frontend.patch
@@ -0,0 +1,23 @@
+--- lame-3.96.1.orig/frontend/Makefile.am 2004-01-21 01:41:36.000000000 -0800
++++ lame-3.96.1/frontend/Makefile.am 2004-10-03 16:39:12.415901779 -0700
+@@ -50,7 +50,7 @@
+ endif
+
+ CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@
+-LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ -static
++LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@
+
+ INCLUDES = -I$(top_srcdir)/libmp3lame -I$(top_srcdir)/include -I$(top_builddir)
+
+diff -Naur lame-3.96.1.orig/frontend/Makefile.in lame-3.96.1/frontend/Makefile.in
+--- lame-3.96.1.orig/frontend/Makefile.in 2004-01-21 05:50:29.000000000 -0800
++++ lame-3.96.1/frontend/Makefile.in 2004-10-03 16:39:19.711701553 -0700
+@@ -91,7 +91,7 @@
+ $(top_builddir)/libmp3lame/libmp3lame.la \
+ @FRONTEND_LDADD@
+
+-LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ -static
++LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
diff --git a/abs/core-testing/lcms/PKGBUILD b/abs/core-testing/lcms/PKGBUILD
new file mode 100644
index 0000000..7e40429
--- /dev/null
+++ b/abs/core-testing/lcms/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 9147 2008-08-17 04:15:31Z eric $
+# Maintainer: Tobias Kieslich <neri@archlinux.org>
+# Contributor: Ben <contrasutra@myrealbox.com>
+
+pkgname=lcms
+pkgver=1.17
+pkgrel=2
+pkgdesc="Lightweight color management development library/engine"
+arch=(i686 x86_64)
+license=('CUSTOM')
+depends=('libtiff')
+url="http://www.littlecms.com"
+options=('!libtool')
+source=(http://littlecms.com/${pkgname}-${pkgver}.tar.gz)
+md5sums=('07bdbb4cfb05d21caa58fe3d1c84ddc1')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -Dm 644 COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/less/PKGBUILD b/abs/core-testing/less/PKGBUILD
new file mode 100644
index 0000000..b703def
--- /dev/null
+++ b/abs/core-testing/less/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=less
+pkgver=418
+pkgrel=10
+pkgdesc="A terminal based program for viewing text files"
+license=('GPL3')
+arch=('i686' 'x86_64')
+url="http://www.greenwoodsoftware.com/less"
+groups=('base')
+depends=('ncurses' 'file')
+source=(http://www.greenwoodsoftware.com/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('b5864d76c54ddf4627fd57ab333c88b4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin/
+ mkdir -p ../../bin
+ mv $pkgname ../../bin/
+}
diff --git a/abs/core-testing/less/zless b/abs/core-testing/less/zless
new file mode 100644
index 0000000..93d560b
--- /dev/null
+++ b/abs/core-testing/less/zless
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+: ${PAGER=less}
+export PAGER
+
+PATH="/usr/bin:$PATH"
+export PATH
+
+exec zmore ${1+"$@"}
diff --git a/abs/core-testing/libao/ChangeLog b/abs/core-testing/libao/ChangeLog
new file mode 100644
index 0000000..37e4a78
--- /dev/null
+++ b/abs/core-testing/libao/ChangeLog
@@ -0,0 +1,5 @@
+2008-01-27 Travis Willard <travis@archlinux.org>
+
+ * 0.8.8-2
+ Added ChangeLog
+ Added sane default config file
diff --git a/abs/core-testing/libao/PKGBUILD b/abs/core-testing/libao/PKGBUILD
new file mode 100644
index 0000000..af18def
--- /dev/null
+++ b/abs/core-testing/libao/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 8727 2008-08-16 04:47:00Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libao
+pkgver=0.8.8
+pkgrel=2
+pkgdesc="Cross-platform audio output library and plugins"
+url="http://www.xiph.org/ao"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc' 'alsa-lib')
+makedepends=('esd')
+backup=('etc/libao.conf')
+options=('!libtool')
+source=(http://downloads.xiph.org/releases/ao/${pkgname}-${pkgver}.tar.gz libao.conf)
+md5sums=('b92cba3cbcf1ee9bc221118a85d23dcd' '821a019116f928c582d2bbf537ffd9a7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --enable-alsa09 --disable-arts
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ # Add conf file
+ install -Dm0644 $startdir/src/libao.conf $startdir/pkg/etc/libao.conf
+}
diff --git a/abs/core-testing/libao/libao.conf b/abs/core-testing/libao/libao.conf
new file mode 100644
index 0000000..ce0bfe4
--- /dev/null
+++ b/abs/core-testing/libao/libao.conf
@@ -0,0 +1,2 @@
+default_driver=alsa
+
diff --git a/abs/core-testing/libarchive/PKGBUILD b/abs/core-testing/libarchive/PKGBUILD
new file mode 100644
index 0000000..b70f376
--- /dev/null
+++ b/abs/core-testing/libarchive/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5444 2008-07-16 01:29:27Z dan $
+# Maintainer: Dan McGee <dan@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+pkgname=libarchive
+pkgver=2.5.5
+pkgrel=10
+pkgdesc="library that can create and read several streaming archive formats"
+arch=(i686 x86_64)
+url="http://people.freebsd.org/~kientzle/libarchive/"
+license=('BSD')
+groups=('base')
+depends=('zlib' 'bzip2' 'acl')
+source=(http://people.freebsd.org/~kientzle/libarchive/src/libarchive-$pkgver.tar.gz)
+md5sums=('ff6387de3a3830785b229d1e1f11f523')
+
+# 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)
+options=(libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ # install license
+ mkdir -p $startdir/pkg/usr/share/licenses/libarchive
+ install -m644 COPYING $startdir/pkg/usr/share/licenses/libarchive/
+}
+
diff --git a/abs/core-testing/libart-lgpl/PKGBUILD b/abs/core-testing/libart-lgpl/PKGBUILD
new file mode 100644
index 0000000..f56c0b3
--- /dev/null
+++ b/abs/core-testing/libart-lgpl/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=libart-lgpl
+pkgver=2.3.20
+pkgrel=1
+pkgdesc="A library for high-performance 2D graphics"
+url="http://www.levien.com/libart/"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glibc')
+source=(http://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/libart_lgpl-${pkgver}.tar.bz2)
+md5sums=('d0ce67f2ebcef1e51a83136c69242a73')
+options=('!libtool')
+
+build() {
+ cd ${startdir}/src/libart_lgpl-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libart-lgpl/art_misc.h-cplusplus.patch b/abs/core-testing/libart-lgpl/art_misc.h-cplusplus.patch
new file mode 100644
index 0000000..dea8eb0
--- /dev/null
+++ b/abs/core-testing/libart-lgpl/art_misc.h-cplusplus.patch
@@ -0,0 +1,35 @@
+Index: art_misc.h
+===================================================================
+--- art_misc.h (revision 277)
++++ art_misc.h (working copy)
+@@ -34,9 +34,15 @@
+ #include <libart_lgpl/art_config.h>
+ #endif
+
++#ifdef __cplusplus
++extern "C" {
++#endif
+ void *art_alloc(size_t size);
+ void art_free(void *ptr);
+ void *art_realloc(void *ptr, size_t size);
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
+
+ /* These aren't, strictly speaking, configuration macros, but they're
+ damn handy to have around, and may be worth playing with for
+Index: ChangeLog
+===================================================================
+--- ChangeLog (revision 277)
++++ ChangeLog (working copy)
+@@ -1,3 +1,10 @@
++2007-03-01 Frederic Crozat <fcrozat@mandriva.com>
++
++ reviewed by: Dom Lachowicz <cinamod@hotmail.com>
++
++ * art_misc.h: Fix header when included in C++.
++ Patch from Goetz Waschk and Laurent Montel.
++
+ 2007-02-28 Kjartan Maraas <kmaraas@gnome.org>
+
+ configure.in: Release 2.3.19
diff --git a/abs/core-testing/libcap/PKGBUILD b/abs/core-testing/libcap/PKGBUILD
new file mode 100644
index 0000000..8d09b19
--- /dev/null
+++ b/abs/core-testing/libcap/PKGBUILD
@@ -0,0 +1,20 @@
+#$Id: PKGBUILD 8870 2008-08-16 22:39:56Z eric $
+# Maintainer: Arjan Timmerman <arjan@archlinux.org>
+pkgname=libcap
+pkgver=1.10
+pkgrel=2
+pkgdesc="POSIX 1003.1e capabilities"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/libs/security/linux-privs/"
+license="GPL"
+depends=('glibc')
+source=(http://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/${pkgname}-${pkgver}.tar.gz
+ libcap-1.10-debian.patch)
+md5sums=('2c09eea823f67cfdde96177a959bc39b' 'ba642c86c4072917fcff77ec31411194')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/libcap-1.10-debian.patch || return 1
+ make prefix=/usr DESTDIR=${startdir}/pkg install
+ rmdir ${startdir}/pkg/usr/share/man/man2
+}
diff --git a/abs/core-testing/libcap/libcap-1.10-debian.patch b/abs/core-testing/libcap/libcap-1.10-debian.patch
new file mode 100644
index 0000000..26d57ec
--- /dev/null
+++ b/abs/core-testing/libcap/libcap-1.10-debian.patch
@@ -0,0 +1,766 @@
+--- libcap-1.10.orig/doc/old/cap_set_fd.3
++++ libcap-1.10/doc/old/cap_set_fd.3
+@@ -0,0 +1 @@
++.so man3/cap_get_file.3
+--- libcap-1.10.orig/doc/old/cap_set_file.3
++++ libcap-1.10/doc/old/cap_set_file.3
+@@ -0,0 +1 @@
++.so man3/cap_get_file.3
+--- libcap-1.10.orig/doc/capset.2
++++ libcap-1.10/doc/capset.2
+@@ -1 +1 @@
+-.so man2/capget.2
++#.so man2/capget.2
+--- libcap-1.10.orig/doc/Makefile
++++ libcap-1.10/doc/Makefile
+@@ -7,7 +7,7 @@
+ topdir=$(shell pwd)/..
+ include $(topdir)/Make.Rules
+
+-MAN2S = capget.2 capset.2
++#MAN2S = capget.2
+ MAN3S = cap_init.3 cap_free.3 cap_dup.3 \
+ cap_clear.3 cap_get_flag.3 cap_set_flag.3 \
+ cap_get_proc.3 cap_set_proc.3 \
+--- libcap-1.10.orig/Make.Rules
++++ libcap-1.10/Make.Rules
+@@ -8,7 +8,7 @@
+
+ # common 'packaging' directoty
+
+-FAKEROOT=
++FAKEROOT=$(DESTDIR)
+
+ # Autoconf-style prefixes are activated when $(prefix) is defined.
+ # Otherwise binaries and libraraies are installed in /{lib,sbin}/,
+@@ -18,13 +18,13 @@
+ exec_prefix=$(prefix)
+ lib_prefix=$(exec_prefix)
+ inc_prefix=$(lib_prefix)
+-man_prefix=$(prefix)
++man_prefix=$(prefix)/share
+ else
+ prefix=/usr
+ exec_prefix=
+ lib_prefix=$(exec_prefix)
+ inc_prefix=$(prefix)
+-man_prefix=$(prefix)
++man_prefix=$(prefix)/share
+ endif
+
+ # Target directories
+@@ -42,7 +42,7 @@
+ # Compilation specifics
+
+ CC=gcc
+-COPTFLAGS=-O2
++COPTFLAGS=-O2
+ DEBUG=-g #-DDEBUG
+ WARNINGS=-ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
+ -Wpointer-arith -Wcast-qual -Wcast-align \
+--- libcap-1.10.orig/Makefile
++++ libcap-1.10/Makefile
+@@ -3,17 +3,20 @@
+ #
+ # Makefile for libcap
+
++ifndef topdir
+ topdir=$(shell pwd)
+-include Make.Rules
++endif
++include $(topdir)/Make.Rules
++DESTDIR=
+
+ #
+ # flags
+ #
+
+ all install clean: %: %-here
+- make -C libcap $(MAKE_DEFS) $@
+- make -C progs $(MAKE_DEFS) $@
+- make -C doc $(MAKE_DEFS) $@
++ make -C $(topdir)/libcap $(MAKE_DEFS) $@
++ make -C $(topdir)/progs $(MAKE_DEFS) $@
++ make -C $(topdir)/doc $(MAKE_DEFS) $@
+
+ all-here:
+
+--- libcap-1.10.orig/libcap/include/sys/capability.h
++++ libcap-1.10/libcap/include/sys/capability.h
+@@ -21,7 +21,288 @@
+ */
+
+ #include <sys/types.h>
+-#include <linux/capability.h>
++/*
++ * This is <linux/capability.h>
++ *
++ * Andrew G. Morgan <morgan@transmeta.com>
++ * Alexander Kjeldaas <astor@guardian.no>
++ * with help from Aleph1, Roland Buresund and Andrew Main.
++ *
++ * See here for the libcap library ("POSIX draft" compliance):
++ *
++ * ftp://linux.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.2/
++ */
++
++#ifndef _LINUX_CAPABILITY_H
++#define _LINUX_CAPABILITY_H
++
++#include <linux/types.h>
++/*#include <linux/fs.h>*/
++
++/* User-level do most of the mapping between kernel and user
++ capabilities based on the version tag given by the kernel. The
++ kernel might be somewhat backwards compatible, but don't bet on
++ it. */
++
++/* XXX - Note, cap_t, is defined by POSIX to be an "opaque" pointer to
++ a set of three capability sets. The transposition of 3*the
++ following structure to such a composite is better handled in a user
++ library since the draft standard requires the use of malloc/free
++ etc.. */
++
++#define _LINUX_CAPABILITY_VERSION 0x19980330
++
++typedef struct __user_cap_header_struct {
++ __u32 version;
++ int pid;
++} *cap_user_header_t;
++
++typedef struct __user_cap_data_struct {
++ __u32 effective;
++ __u32 permitted;
++ __u32 inheritable;
++} *cap_user_data_t;
++
++#ifdef __KERNEL__
++
++/* #define STRICT_CAP_T_TYPECHECKS */
++
++#ifdef STRICT_CAP_T_TYPECHECKS
++
++typedef struct kernel_cap_struct {
++ __u32 cap;
++} kernel_cap_t;
++
++#else
++
++typedef __u32 kernel_cap_t;
++
++#endif
++
++#define _USER_CAP_HEADER_SIZE (2*sizeof(__u32))
++#define _KERNEL_CAP_T_SIZE (sizeof(kernel_cap_t))
++
++#endif
++
++
++/**
++ ** POSIX-draft defined capabilities.
++ **/
++
++/* In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
++ overrides the restriction of changing file ownership and group
++ ownership. */
++
++#define CAP_CHOWN 0
++
++/* Override all DAC access, including ACL execute access if
++ [_POSIX_ACL] is defined. Excluding DAC access covered by
++ CAP_LINUX_IMMUTABLE. */
++
++#define CAP_DAC_OVERRIDE 1
++
++/* Overrides all DAC restrictions regarding read and search on files
++ and directories, including ACL restrictions if [_POSIX_ACL] is
++ defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE. */
++
++#define CAP_DAC_READ_SEARCH 2
++
++/* Overrides all restrictions about allowed operations on files, where
++ file owner ID must be equal to the user ID, except where CAP_FSETID
++ is applicable. It doesn't override MAC and DAC restrictions. */
++
++#define CAP_FOWNER 3
++
++/* Overrides the following restrictions that the effective user ID
++ shall match the file owner ID when setting the S_ISUID and S_ISGID
++ bits on that file; that the effective group ID (or one of the
++ supplementary group IDs) shall match the file owner ID when setting
++ the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are
++ cleared on successful return from chown(2) (not implemented). */
++
++#define CAP_FSETID 4
++
++/* Used to decide between falling back on the old suser() or fsuser(). */
++
++#define CAP_FS_MASK 0x1f
++
++/* Overrides the restriction that the real or effective user ID of a
++ process sending a signal must match the real or effective user ID
++ of the process receiving the signal. */
++
++#define CAP_KILL 5
++
++/* Allows setgid(2) manipulation */
++/* Allows setgroups(2) */
++/* Allows forged gids on socket credentials passing. */
++
++#define CAP_SETGID 6
++
++/* Allows set*uid(2) manipulation (including fsuid). */
++/* Allows forged pids on socket credentials passing. */
++
++#define CAP_SETUID 7
++
++
++/**
++ ** Linux-specific capabilities
++ **/
++
++/* Transfer any capability in your permitted set to any pid,
++ remove any capability in your permitted set from any pid */
++
++#define CAP_SETPCAP 8
++
++/* Allow modification of S_IMMUTABLE and S_APPEND file attributes */
++
++#define CAP_LINUX_IMMUTABLE 9
++
++/* Allows binding to TCP/UDP sockets below 1024 */
++/* Allows binding to ATM VCIs below 32 */
++
++#define CAP_NET_BIND_SERVICE 10
++
++/* Allow broadcasting, listen to multicast */
++
++#define CAP_NET_BROADCAST 11
++
++/* Allow interface configuration */
++/* Allow administration of IP firewall, masquerading and accounting */
++/* Allow setting debug option on sockets */
++/* Allow modification of routing tables */
++/* Allow setting arbitrary process / process group ownership on
++ sockets */
++/* Allow binding to any address for transparent proxying */
++/* Allow setting TOS (type of service) */
++/* Allow setting promiscuous mode */
++/* Allow clearing driver statistics */
++/* Allow multicasting */
++/* Allow read/write of device-specific registers */
++/* Allow activation of ATM control sockets */
++
++#define CAP_NET_ADMIN 12
++
++/* Allow use of RAW sockets */
++/* Allow use of PACKET sockets */
++
++#define CAP_NET_RAW 13
++
++/* Allow locking of shared memory segments */
++/* Allow mlock and mlockall (which doesn't really have anything to do
++ with IPC) */
++
++#define CAP_IPC_LOCK 14
++
++/* Override IPC ownership checks */
++
++#define CAP_IPC_OWNER 15
++
++/* Insert and remove kernel modules - modify kernel without limit */
++/* Modify cap_bset */
++#define CAP_SYS_MODULE 16
++
++/* Allow ioperm/iopl access */
++/* Allow sending USB messages to any device via /proc/bus/usb */
++
++#define CAP_SYS_RAWIO 17
++
++/* Allow use of chroot() */
++
++#define CAP_SYS_CHROOT 18
++
++/* Allow ptrace() of any process */
++
++#define CAP_SYS_PTRACE 19
++
++/* Allow configuration of process accounting */
++
++#define CAP_SYS_PACCT 20
++
++/* Allow configuration of the secure attention key */
++/* Allow administration of the random device */
++/* Allow examination and configuration of disk quotas */
++/* Allow configuring the kernel's syslog (printk behaviour) */
++/* Allow setting the domainname */
++/* Allow setting the hostname */
++/* Allow calling bdflush() */
++/* Allow mount() and umount(), setting up new smb connection */
++/* Allow some autofs root ioctls */
++/* Allow nfsservctl */
++/* Allow VM86_REQUEST_IRQ */
++/* Allow to read/write pci config on alpha */
++/* Allow irix_prctl on mips (setstacksize) */
++/* Allow flushing all cache on m68k (sys_cacheflush) */
++/* Allow removing semaphores */
++/* Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores
++ and shared memory */
++/* Allow locking/unlocking of shared memory segment */
++/* Allow turning swap on/off */
++/* Allow forged pids on socket credentials passing */
++/* Allow setting readahead and flushing buffers on block devices */
++/* Allow setting geometry in floppy driver */
++/* Allow turning DMA on/off in xd driver */
++/* Allow administration of md devices (mostly the above, but some
++ extra ioctls) */
++/* Allow tuning the ide driver */
++/* Allow access to the nvram device */
++/* Allow administration of apm_bios, serial and bttv (TV) device */
++/* Allow manufacturer commands in isdn CAPI support driver */
++/* Allow reading non-standardized portions of pci configuration space */
++/* Allow DDI debug ioctl on sbpcd driver */
++/* Allow setting up serial ports */
++/* Allow sending raw qic-117 commands */
++/* Allow enabling/disabling tagged queuing on SCSI controllers and sending
++ arbitrary SCSI commands */
++/* Allow setting encryption key on loopback filesystem */
++
++#define CAP_SYS_ADMIN 21
++
++/* Allow use of reboot() */
++
++#define CAP_SYS_BOOT 22
++
++/* Allow raising priority and setting priority on other (different
++ UID) processes */
++/* Allow use of FIFO and round-robin (realtime) scheduling on own
++ processes and setting the scheduling algorithm used by another
++ process. */
++
++#define CAP_SYS_NICE 23
++
++/* Override resource limits. Set resource limits. */
++/* Override quota limits. */
++/* Override reserved space on ext2 filesystem */
++/* NOTE: ext2 honors fsuid when checking for resource overrides, so
++ you can override using fsuid too */
++/* Override size restrictions on IPC message queues */
++/* Allow more than 64hz interrupts from the real-time clock */
++/* Override max number of consoles on console allocation */
++/* Override max number of keymaps */
++
++#define CAP_SYS_RESOURCE 24
++
++/* Allow manipulation of system clock */
++/* Allow irix_stime on mips */
++/* Allow setting the real-time clock */
++
++#define CAP_SYS_TIME 25
++
++/* Allow configuration of tty devices */
++/* Allow vhangup() of tty */
++
++#define CAP_SYS_TTY_CONFIG 26
++
++/* Allow the privileged aspects of mknod() */
++
++#define CAP_MKNOD 27
++
++/* Allow taking of leases on files */
++
++#define CAP_LEASE 28
++
++#endif /* !_LINUX_CAPABILITY_H */
++
++
+
+ /*
+ * POSIX capability types
+--- libcap-1.10.orig/libcap/Makefile
++++ libcap-1.10/libcap/Makefile
+@@ -24,12 +24,15 @@
+ #
+ # defines
+ #
++ifndef $(topdir)
+ topdir=$(shell pwd)/..
+-include ../Make.Rules
++endif
++include $(topdir)/Make.Rules
++
+ #
+ # Library version
+ #
+-LIBNAME=libcap.so
++LIBNAME=libcap
+ #
+
+ FILES=cap_alloc cap_proc cap_extint cap_flag cap_text cap_sys
+@@ -39,10 +42,11 @@
+
+ INCLS=libcap.h cap_names.h $(INCS)
+ OBJS=$(addsuffix .o, $(FILES))
+-MAJLIBNAME=$(LIBNAME).$(VERSION)
++LOBJS=$(addsuffix .lo, $(FILES))
++MAJLIBNAME=$(LIBNAME).so.$(VERSION)
+ MINLIBNAME=$(MAJLIBNAME).$(MINOR)
+
+-all: $(MINLIBNAME)
++all: $(MINLIBNAME) $(LIBNAME).a
+
+ _makenames: _makenames.c cap_names.sed
+ $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
+@@ -50,31 +54,38 @@
+ cap_names.h: _makenames
+ ./_makenames > cap_names.h
+
+-cap_names.sed: Makefile /usr/include/linux/capability.h
+- @echo "=> making cap_names.c from <linux/capability.h>"
+- @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define \([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
+-# @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
++cap_names.sed: Makefile include/sys/capability.h
++ @echo "=> making cap_names.c from <sys/capability.h>"
++ @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define \([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < include/sys/capability.h | fgrep -v 0x > cap_names.sed # @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
++
++$(LIBNAME).a: $(OBJS)
++ ar cruv $(LIBNAME).a $(OBJS)
+
+-$(MINLIBNAME): $(OBJS)
+- $(LD) -soname $(MAJLIBNAME) -x -shared -o $@ $(OBJS)
++$(MINLIBNAME): $(LOBJS)
++ $(CC) -shared -fPIC -Wl,-soname,$(MAJLIBNAME) -o $@ $(LOBJS)
+ ln -sf $(MINLIBNAME) $(MAJLIBNAME)
+- ln -sf $(MAJLIBNAME) $(LIBNAME)
++ ln -sf $(MAJLIBNAME) $(LIBNAME).so
+
+ %.o: %.c $(INCLS)
+ $(CC) $(CFLAGS) -c $< -o $@
+
++%.lo: %.c $(INCLS)
++ $(CC) $(CFLAGS) -fPIC -c $< -o $@
++
++
+ install: all
+ mkdir -p -m 0755 $(INCDIR)/sys
+ install -m 0644 include/sys/capability.h $(INCDIR)/sys
+ mkdir -p -m 0755 $(LIBDIR)
++ install -m 0644 $(LIBNAME).a $(LIBDIR)
+ install -m 0644 $(MINLIBNAME) $(LIBDIR)/$(MINLIBNAME)
+ ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME)
+- ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME)
++ ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME).so
+ -/sbin/ldconfig
+
+ clean:
+ $(LOCALCLEAN)
+- rm -f $(OBJS) $(LIBNAME)*
++ rm -f $(OBJS) $(LOBJS) $(LIBNAME).a $(LIBNAME).so*
+ rm -f cap_names.h cap_names.sed _makenames
+ cd include/sys && $(LOCALCLEAN)
+
+--- libcap-1.10.orig/libcap/_makenames.c
++++ libcap-1.10/libcap/_makenames.c
+@@ -9,7 +9,7 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <linux/capability.h>
++#include <sys/capability.h>
+
+ /*
+ * #include 'sed' generated array
+--- libcap-1.10.orig/libcap/cap_sys.c
++++ libcap-1.10/libcap/cap_sys.c
+@@ -10,7 +10,8 @@
+ #include "libcap.h"
+ #define __LIBRARY__
+ #include <linux/unistd.h>
+-
++/* glic >= 2.1 knows capset/capget. no need to define it here */
++/*
+ _syscall2(int, capget,
+ cap_user_header_t, header,
+ cap_user_data_t, data)
+@@ -18,7 +19,7 @@
+ _syscall2(int, capset,
+ cap_user_header_t, header,
+ const cap_user_data_t, data)
+-
++*/
+ /*
+ * $Log: libcap-1.10-debian.patch,v $
+ * Revision 1.1 2006/10/29 23:14:00 jgc
+ * upgpkg: libcap 1.10-2
+ * Remove amd64 patches that messed things up
+ * Apply debian patch to make it build again
+ * Remove empty man2 directory the right way
+ *
+ * Revision 1.1.1.1 1999/04/17 22:16:31 morgan
+--- libcap-1.10.orig/capfaq-0.2.txt
++++ libcap-1.10/capfaq-0.2.txt
+@@ -0,0 +1,264 @@
++This is the Linux kernel capabilities FAQ
++
++Its history, to the extent that I am able to reconstruct it is that
++v2.0 was posted to the Linux kernel list on 1999/04/02 by Boris
++Tobotras. Thanks to Denis Ducamp for forwarding me a copy.
++
++Cheers
++
++Andrew
++
++Linux Capabilities FAQ 0.2
++==========================
++
++1) What is a capability?
++
++The name "capabilities" as used in the Linux kernel can be confusing.
++First there are Capabilities as defined in computer science. A
++capability is a token used by a process to prove that it is allowed to
++do an operation on an object. The capability identifies the object
++and the operations allowed on that object. A file descriptor is a
++capability. You create the file descriptor with the "open" call and
++request read or write permissions. Later, when doing a read or write
++operation, the kernel uses the file descriptor as an index into a
++data structure that indicates what operations are allowed. This is an
++efficient way to check permissions. The necessary data structures are
++created once during the "open" call. Later read and write calls only
++have to do a table lookup. Operations on capabilities include copying
++capabilities, transferring capabilities between processes, modifying a
++capability, and revoking a capability. Modifying a capability can be
++something like taking a read-write filedescriptor and making it
++read-only. A capability often has a notion of an "owner" which is
++able to invalidate all copies and derived versions of a capability.
++Entire OSes are based on this "capability" model, with varying degrees
++of purity. There are other ways of implementing capabilities than the
++file descriptor model - traditionally special hardware has been used,
++but modern systems also use the memory management unit of the CPU.
++
++Then there is something quite different called "POSIX capabilities"
++which is what Linux uses. These capabilities are a partitioning of
++the all powerful root privilege into a set of distinct privileges (but
++look at securelevel emulation to find out that this isn't necessary
++the whole truth). Users familiar with VMS or "Trusted" versions of
++other UNIX variants will know this under the name "privileges". The
++name "capabilities" comes from the now defunct POSIX draft 1003.1e
++which used this name.
++
++2) So what is a "POSIX capability"?
++
++A process has three sets of bitmaps called the inheritable(I),
++permitted(P), and effective(E) capabilities. Each capability is
++implemented as a bit in each of these bitmaps which is either set or
++unset. When a process tries to do a privileged operation, the
++operating system will check the appropriate bit in the effective set
++of the process (instead of checking whether the effective uid of the
++process i 0 as is normally done). For example, when a process tries
++to set the clock, the Linux kernel will check that the process has the
++CAP_SYS_TIME bit (which is currently bit 25) set in its effective set.
++
++The permitted set of the process indicates the capabilities the
++process can use. The process can have capabilities set in the
++permitted set that are not in the effective set. This indicates that
++the process has temporarily disabled this capability. A process is
++allowed to set a bit in its effective set only if it is available in
++the permitted set. The distinction between effective and permitted
++exists so that processes can "bracket" operations that need privilege.
++
++The inheritable capabilities are the capabilities of the current
++process that should be inherited by a program executed by the current
++process. The permitted set of a process is masked against the
++inheritable set during exec(). Nothing special happens during fork()
++or clone(). Child processes and threads are given an exact copy of
++the capabilities of the parent process.
++
++3) What about other entities in the system? Users, Groups, Files?
++
++Files have capabilities. Conceptually they have the same three
++bitmaps that processes have, but to avoid confusion we call them by
++other names. Only executable files have capabilities, libraries don't
++have capabilities (yet). The three sets are called the allowed set,
++the forced set, and the effective set.
++
++The allowed set indicates what capabilities the executable is allowed
++to receive from an execing process. This means that during exec(),
++the capabilities of the old process are first masked against a set
++which indicates what the process gives away (the inheritable set of
++the process), and then they are masked against a set which indicates
++what capabilities the new process image is allowed to receive (the
++allowed set of the executable).
++
++The forced set is a set of capabilities created out of thin air and
++given to the process after execing the executable. The forced set is
++similar in nature to the setuid feature. In fact, the setuid bit from
++the filesystem is "read" as a full forced set by the kernel.
++
++The effective set indicates which bits in the permitted set of the new
++process should be transferred to the effective set of the new process.
++The effective set is best thought of as a "capability aware" set. It
++should consist of only 1s if the executable is capability-dumb, or
++only 0s if the executable is capability-smart. Since the effective
++set consists of only 0s or only 1s, the filesystem can implement this
++set using a single bit.
++
++NOTE: Filesystem support for capabilities is not part of Linux 2.2.
++
++Users and Groups don't have associated capabilities from the kernel's
++point of view, but it is entirely reasonable to associate users or
++groups with capabilities. By letting the "login" program set some
++capabilities it is possible to make role users such as a backup user
++that will have the CAP_DAC_READ_SEARCH capability and be able to do
++backups. This could also be implemented as a PAM module, but nobody
++has implemented one yet.
++
++4) What capabilities exist?
++
++The capabilities available in Linux are listed and documented in the
++file /usr/src/linux/include/linux/capability.h.
++
++5) Are Linux capabilities hierarchical?
++
++No, you cannot make a "subcapability" out of a Linux capability as in
++capability-based OSes.
++
++6) How can I use capabilities to make sure Mr. Evil Luser (eluser)
++can't exploit my "suid" programs?
++
++This is the general outline of how this works given filesystem
++capability support exists. First, you have a PAM module that sets the
++inheritable capabilities of the login-shell of eluser. Then for all
++"suid" programs on the system, you decide what capabilities they need
++and set the _allowed_ set of the executable to that set of
++capabilities. The capability rules
++
++ new permitted = forced | (allowed & inheritable)
++
++means that you should be careful about setting forced capabilities on
++executables. In a few cases, this can be useful though. For example
++the login program needs to set the inheritable set of the new user and
++therefore needs an almost full permitted set. So if you want eluser
++to be able to run login and log in as a different user, you will have
++to set some forced bits on that executable.
++
++7) What about passing capabilities between processes?
++
++Currently this is done by the system call "setcap" which can set the
++capabilities of another process. This requires the CAP_SETPCAP
++capability which you really only want to grant a _few_ processes.
++CAP_SETPCAP was originally intended as a workaround to be able to
++implement filesystem support for capabilities using a daemon outside
++the kernel.
++
++There has been discussions about implementing socket-level capability
++passing. This means that you can pass a capability over a socket. No
++support for this exists in the official kernel yet.
++
++8) I see securelevel has been removed from 2.2 and are superceeded by
++capabilities. How do I emulate securelevel using capabilities?
++
++The setcap system call can remove a capability from _all_ processes on
++the system in one atomic operation. The setcap utility from the
++libcap distribution will do this for you. The utility requires the
++CAP_SETPCAP privilege to do this. The CAP_SETPCAP capability is not
++enabled by default.
++
++libcap is available from
++ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.2/
++
++9) I noticed that the capability.h file lacks some capabilities that
++are needed to fully emulate 2.0 securelevel. Is there a patch for
++this?
++
++Actually yes - funny you should ask :-). The problem with 2.0
++securelevel is that they for example stop root from accessing block
++devices. At the same time they restrict the use of iopl. These two
++changes are fundamentally different. Blocking access to block devices
++means restricting something that usually isn't restricted.
++Restricting access to the use of iopl on the other hand means
++restricting (blocking) access to something that is already blocked.
++Emulating the parts of 2.0 securelevel that restricts things that are
++normally not restricted means that the capabilites in the kernel has
++to have a set of capabilities that are usually _on_ for a normal
++process (note that this breaks the explanation that capabilities are a
++partitioning of the root privileges). There is an experimental patch at
++
++ftp://ftp.guardian.no/pub/free/linux/capabilities/patch-cap-exp-1
++
++which implements a set of capabilities with the "CAP_USER" prefix:
++
++cap_user_sock - allowed to use socket()
++cap_user_dev - allowed to open char/block devices
++cap_user_fifo - allowed to use pipes
++
++These should be enough to emulate 2.0 securelevel (tell me if we need
++something more).
++
++10) Seems I need a CAP_SETPCAP capability that I don't have to make use
++of capabilities. How do I enable this capability?
++
++Change the definition of CAP_INIT_EFF_SET and CAP_INIT_INH_SET to the
++following in include/linux/capability.h:
++
++#define CAP_INIT_EFF_SET { ~0 }
++#define CAP_INIT_INH_SET { ~0 }
++
++This will start init with a full capability set and not with
++CAP_SETPCAP removed.
++
++11) How do I start a process with a limited set of capabilities?
++
++Get the libcap library and use the execcap utility. The following
++example starts the update daemon with only the CAP_SYS_ADMIN
++capability.
++
++execcap 'cap_sys_admin=eip' update
++
++12) How do I start a process with a limited set of capabilities under
++another uid?
++
++Use the sucap utility which changes uid from root without loosing any
++capabilities. Normally all capabilities are cleared when changing uid
++from root. The sucap utility requires the CAP_SETPCAP capability.
++The following example starts updated under uid updated and gid updated
++with CAP_SYS_ADMIN raised in the Effective set.
++
++sucap updated updated execcap 'cap_sys_admin=eip' update
++
++[ Sucap is currently available from
++ftp://ftp.guardian.no/pub/free/linux/capabilities/sucap.c. Put it in
++the progs directory of libcap to compile.]
++
++13) What are the "capability rules"
++
++The capability rules are the rules used to set the capabilities of the
++new process image after an exec. They work like this:
++
++ pI' = pI
++ (***) pP' = fP | (fI & pI)
++ pE' = pP' & fE [NB. fE is 0 or ~0]
++
++ I=Inheritable, P=Permitted, E=Effective // p=process, f=file
++ ' indicates post-exec().
++
++Now to make sense of the equations think of fP as the Forced set of
++the executable, and fI as the Allowed set of the executable. Notice
++how the Inheritable set isn't touched at all during exec().
++
++14) What are the laws for setting capability bits in the Inheritable,
++Permitted, and Effective sets?
++
++Bits can be transferred from Permitted to either Effective or
++Inheritable set.
++
++Bits can be removed from all sets.
++
++15) Where is the standard on which the Linux capabilities are based?
++
++There used to be a POSIX draft called POSIX.6 and later POSIX 1003.1e.
++However after the committee had spent over 10 years, POSIX decided
++that enough is enough and dropped the draft. There will therefore not
++be a POSIX standard covering security anytime soon. This may lead to
++that the POSIX draft is available for free, however.
++
++--
++ Best regards, -- Boris.
++
diff --git a/abs/core-testing/libcap/libcap-1.10-fixcflags.patch b/abs/core-testing/libcap/libcap-1.10-fixcflags.patch
new file mode 100644
index 0000000..3566d95
--- /dev/null
+++ b/abs/core-testing/libcap/libcap-1.10-fixcflags.patch
@@ -0,0 +1,22 @@
+diff -Naur libcap-1.10.orig/Make.Rules libcap-1.10/Make.Rules
+--- libcap-1.10.orig/Make.Rules 2005-05-30 16:10:07.000000000 +0000
++++ libcap-1.10/Make.Rules 2005-05-30 16:11:18.000000000 +0000
+@@ -42,8 +42,8 @@
+ # Compilation specifics
+
+ CC=gcc
+-COPTFLAGS=-O2
+-DEBUG=-g #-DDEBUG
++COPTFLAGS=-O2 -fPIC
++DEBUG=
+ WARNINGS=-ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
+ -Wpointer-arith -Wcast-qual -Wcast-align \
+ -Wtraditional -Wstrict-prototypes -Wmissing-prototypes \
+@@ -54,7 +54,7 @@
+ IPATH=-I$(topdir)/libcap/include
+ INCS=$(topdir)/libcap/include/sys/capability.h
+ LIBS=-L$(topdir)/libcap -lcap
+-CFLAGS=-Dlinux $(WARNINGS) $(DEBUG) $(COPTFLAG) $(IPATH)
++CFLAGS+=-Dlinux $(WARNINGS) $(DEBUG) $(COPTFLAG) $(IPATH)
+
+ # Global cleanup stuff \ No newline at end of file
diff --git a/abs/core-testing/libcap/libcap-1.10-shared.patch b/abs/core-testing/libcap/libcap-1.10-shared.patch
new file mode 100644
index 0000000..54e5496
--- /dev/null
+++ b/abs/core-testing/libcap/libcap-1.10-shared.patch
@@ -0,0 +1,17 @@
+--- libcap-1.11/libcap/Makefile.shared 1999-04-17 18:16:31.000000000 -0400
++++ libcap-1.11/libcap/Makefile 2002-07-19 06:24:23.000000000 -0400
+@@ -56,12 +56,12 @@ cap_names.sed: Makefile /usr/include/lin
+ # @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
+
+ $(MINLIBNAME): $(OBJS)
+- $(LD) -soname $(MAJLIBNAME) -x -shared -o $@ $(OBJS)
++ $(CC) -Wl,-soname,$(MAJLIBNAME) -Wl,-x -shared -o $@ $(OBJS)
+ ln -sf $(MINLIBNAME) $(MAJLIBNAME)
+ ln -sf $(MAJLIBNAME) $(LIBNAME)
+
+ %.o: %.c $(INCLS)
+- $(CC) $(CFLAGS) -c $< -o $@
++ $(CC) $(CFLAGS) -fpic -c $< -o $@
+
+ install: all
+ mkdir -p -m 0755 $(INCDIR)/sys
diff --git a/abs/core-testing/libcdaudio/PKGBUILD b/abs/core-testing/libcdaudio/PKGBUILD
new file mode 100644
index 0000000..0494dbd
--- /dev/null
+++ b/abs/core-testing/libcdaudio/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+#contributor Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=libcdaudio
+pkgver=0.99.12
+pkgrel=3
+pkgdesc="A portable library for controlling Audio CDs and managing the transfers of information with the CDDB system."
+arch=(i686 x86_64)
+url="http://libcdaudio.sourceforge.net/"
+license=('GPL')
+depends=(glibc)
+source=(http://dl.sourceforge.net/sourceforge/libcdaudio/$pkgname-${pkgver}p2.tar.gz)
+md5sums=('15de3830b751818a54a42899bd3ae72c')
+options=('!libtool')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}p2
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
diff --git a/abs/core-testing/libcroco/PKGBUILD b/abs/core-testing/libcroco/PKGBUILD
new file mode 100644
index 0000000..549277e
--- /dev/null
+++ b/abs/core-testing/libcroco/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libcroco
+pkgver=0.6.1
+pkgrel=1
+pkgdesc="GNOME CSS2 parsing and manipulation toolkit"
+depends=('glib2>=2.10.1' 'libxml2')
+makedepends=(intltool pkgconfig)
+arch=('i686' 'x86_64')
+source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/0.6/$pkgname-$pkgver.tar.bz2)
+url="http://www.gnome.org"
+md5sums=(b0975bd01eb11964f1b3f254f267a43d)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ rm -rf $startdir/pkg/usr/share/gtk-doc
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/libcups/PKGBUILD b/abs/core-testing/libcups/PKGBUILD
new file mode 100644
index 0000000..363a46a
--- /dev/null
+++ b/abs/core-testing/libcups/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7638 2008-08-03 15:54:53Z jgc $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+pkgname=libcups
+pkgver=1.3.8
+pkgrel=2
+pkgdesc="The CUPS Printing System"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.cups.org/"
+depends=('gnutls>=2.4.1' 'libtiff' 'libpng' 'heimdal>=1.2')
+source=(http://ftp.funet.fi/pub/mirrors/ftp.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.bz2)
+md5sums=('84e09577d673b212f605dd09caee456c')
+
+build() {
+ cd ${srcdir}/cups-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-logdir=/var/log/cups -with-docdir=/usr/share/cups/doc \
+ --with-cups-user=daemon --with-cups-group=lp --enable-ssl=yes \
+ --disable-ldap --disable-dbus --libdir=/usr/lib
+
+ for dir in cups filter; do
+ pushd ${dir}
+ make
+ make BUILDROOT=${pkgdir} install
+ popd
+ done
+
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 cups-config ${startdir}/pkg/usr/bin/cups-config
+ #Remove filters
+ rm -rf ${startdir}/pkg/usr/lib/cups
+}
diff --git a/abs/core-testing/libdatrie/PKGBUILD b/abs/core-testing/libdatrie/PKGBUILD
new file mode 100644
index 0000000..9a199e3
--- /dev/null
+++ b/abs/core-testing/libdatrie/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Chaiwat Suttipongsakul <cwt114@gmail.com>
+
+pkgname=libdatrie
+pkgver=0.1.2
+pkgrel=1
+pkgdesc="Libdatrie is an implementation of double-array structure for representing trie, as proposed by Junichi Aoe."
+url="http://linux.thai.net/~thep/datrie/datrie.html"
+license=('LGPL')
+arch=('i686' 'x86_64')
+depends=('glibc')
+options=('!libtool' '!emptydirs')
+source=(http://linux.thai.net/pub/thailinux/software/libthai/${pkgname}-${pkgver}.tar.gz)
+md5sums=('3eaedd5452149e11547a0dc74ee3fcfd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libdmx/PKGBUILD b/abs/core-testing/libdmx/PKGBUILD
new file mode 100644
index 0000000..335d4a1
--- /dev/null
+++ b/abs/core-testing/libdmx/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libdmx
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Distributed Multihead extension library"
+url="http://xorg.freedesktop.org/"
+depends=(dmxproto libxext)
+makedepends=(pkgconfig)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(4d866967210d06098fc9f302ed4c79b1)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/libdownload/PKGBUILD b/abs/core-testing/libdownload/PKGBUILD
new file mode 100644
index 0000000..7685097
--- /dev/null
+++ b/abs/core-testing/libdownload/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 2480 2008-06-03 15:53:46Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=libdownload
+pkgver=1.3
+pkgrel=10
+pkgdesc="URL based download library, forked from libfetch"
+arch=('i686' 'x86_64')
+license=('BSD')
+groups=('base')
+depends=('glibc')
+url="http://code.phraktured.net/?p=libdownload.git"
+source=(http://code.phraktured.net/source/$pkgname-$pkgver.tar.gz)
+md5sums=('77e10293fd4262745110eb423a10490c')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ [ "$CARCH" = "x86_64" ] && sed -i -e "s/-O2\ -pipe/-O2\ -pipe\ \-fPIC/g" Makefile
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/libdownload/largefiles.patch b/abs/core-testing/libdownload/largefiles.patch
new file mode 100644
index 0000000..7b10a4c
--- /dev/null
+++ b/abs/core-testing/libdownload/largefiles.patch
@@ -0,0 +1,12 @@
+diff -u libdownload-1.1/Makefile libdownload-1.1-new/Makefile
+--- libdownload-1.1/Makefile 2006-11-17 10:19:53.000000000 -0500
++++ libdownload-1.1-new/Makefile 2007-08-17 19:53:21.000000000 -0400
+@@ -3,7 +3,7 @@
+ DEBUG = true
+ ENABLE_HTTPS = true
+
+-CFLAGS = -O2 -pipe -I. -DINET6 -D_GNU_SOURCE
++CFLAGS = -O2 -pipe -I. -DINET6 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
+ WARNINGS = -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+ -Wpointer-arith -Wcast-align -Wsign-compare
+ CFLAGS += $(WARNINGS)
diff --git a/abs/core-testing/libdrm/PKGBUILD b/abs/core-testing/libdrm/PKGBUILD
new file mode 100644
index 0000000..19a4db2
--- /dev/null
+++ b/abs/core-testing/libdrm/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libdrm
+pkgver=2.3.0
+pkgrel=1
+pkgdesc="Userspace interface to kernel DRM services"
+arch=(i686 x86_64)
+depends=('glibc')
+options=('!libtool')
+url="http://dri.freedesktop.org/"
+source=(http://dri.freedesktop.org/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('01a1e1ee0268a2403db42fa630036ab2')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libdvdread/PKGBUILD b/abs/core-testing/libdvdread/PKGBUILD
new file mode 100644
index 0000000..e39e586
--- /dev/null
+++ b/abs/core-testing/libdvdread/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=libdvdread
+pkgver=0.9.7
+pkgrel=1
+arch=(i686 x86_64)
+pkgdesc="libdvdread provides a simple foundation for reading DVD video disks"
+depends=('glibc')
+makedepends=('libdvdcss')
+install=$pkgname.install
+options=('!libtool')
+source=(http://www.dtek.chalmers.se/groups/dvd/dist/$pkgname-$pkgver.tar.gz)
+url="http://www.dtek.chalmers.se/groups/dvd/downloads.shtml"
+md5sums=('078788c9241ae16763529e1235502337')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/libdvdread/libdvdread.install b/abs/core-testing/libdvdread/libdvdread.install
new file mode 100644
index 0000000..913bc56
--- /dev/null
+++ b/abs/core-testing/libdvdread/libdvdread.install
@@ -0,0 +1,11 @@
+post_install() {
+ echo "==> If you want to decode encrypted DVDs, you also need the libdvdcss package."
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/libexif/PKGBUILD b/abs/core-testing/libexif/PKGBUILD
new file mode 100644
index 0000000..74989c8
--- /dev/null
+++ b/abs/core-testing/libexif/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Tobias Kieslich <tobias@justdreams.de>
+
+pkgname=libexif
+pkgver=0.6.16
+pkgrel=1
+pkgdesc="A library to parse an EXIF file and read the data from those tags"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://sourceforge.net/projects/libexif"
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sf.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('deee153b1ded5a944ea05d041d959eca')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libfontenc/PKGBUILD b/abs/core-testing/libfontenc/PKGBUILD
new file mode 100644
index 0000000..8e79264
--- /dev/null
+++ b/abs/core-testing/libfontenc/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libfontenc
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 font encoding library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('zlib')
+makedepends=('pkgconfig' 'xproto')
+options=('libtool')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('5cd16a2e51ca7b96a3081c7486ff98b9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --disable-static \
+ --with-encodingsdir=/usr/share/fonts/encodings
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libgcrypt/PKGBUILD b/abs/core-testing/libgcrypt/PKGBUILD
new file mode 100644
index 0000000..f4ebfea
--- /dev/null
+++ b/abs/core-testing/libgcrypt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 3545 2008-06-24 17:33:25Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=libgcrypt
+pkgver=1.4.1
+pkgrel=10
+pkgdesc="a general purpose crypto library based on the code used"
+arch=(i686 x86_64)
+url="http://www.gnupg.org"
+license=('LGPL')
+groups=('base')
+depends=('libgpg-error>=1.6')
+options=(!libtool)
+source=(#ftp://ftp.gnupg.org/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2
+ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/libgcrypt/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('26703ecef4bbe113b8e6a87572b80b32')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-padlock-support
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libgl/PKGBUILD b/abs/core-testing/libgl/PKGBUILD
new file mode 100644
index 0000000..43e7c58
--- /dev/null
+++ b/abs/core-testing/libgl/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 1895 2008-05-22 17:55:59Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libgl
+pkgver=7.0.3
+pkgrel=2
+pkgdesc="Mesa DRI OpenGL library and drivers"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://www.mesa3d.org"
+depends=('libxxf86vm' 'libdrm>=2.3' 'libxdamage')
+makedepends=('imake' 'glproto>=1.4.9' 'fixesproto' 'damageproto' 'pkgconfig')
+provides=('libgl-dri')
+replaces=('libgl-dri' 'libgl-mesa')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}
+
+ CONFIG="linux-dri-x86"
+ if [ "${CARCH}" = "x86_64" ]; then
+ CONFIG="linux-dri-x86-64"
+ sed -i -e "s/lib64/lib/g" configs/${CONFIG}
+ fi
+
+ echo "EXTRA_LIB_PATH =" >> configs/${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> configs/${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> configs/${CONFIG}
+ rm -f include/GL/glut*h
+ echo "USING_EGL = 0" >> configs/${CONFIG}
+ echo "PROGRAM_DIRS =" >> configs/${CONFIG}
+ echo "MKDEP = makedepend" >> configs/${CONFIG}
+ echo "DRI_DIRS =" >> configs/${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> configs/${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> configs/${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> configs/${CONFIG}
+
+ make ${CONFIG} || return 1
+ install -m755 -d ${startdir}/pkg/usr
+ make INSTALL_DIR=${startdir}/pkg/usr install || return 1
+
+ rm -rf ${startdir}/pkg/usr/include
+
+ install -m755 -d ${startdir}/pkg/usr/lib/xorg/modules/extensions || return 1
+ cd ${startdir}/pkg/usr/lib/xorg/modules/extensions || return 1
+ ln -sf libGLcore.xorg libGLcore.so
+ ln -sf libglx.xorg libglx.so
+}
diff --git a/abs/core-testing/libglade/PKGBUILD b/abs/core-testing/libglade/PKGBUILD
new file mode 100644
index 0000000..fc10160
--- /dev/null
+++ b/abs/core-testing/libglade/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libglade
+pkgver=2.6.2
+pkgrel=1
+pkgdesc="Allows you to load glade interface files in a program at runtime"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gtk2' 'libxml2')
+makedepends=('python' 'pkgconfig')
+options=('!libtool')
+install=glade.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.6/${pkgname}-${pkgver}.tar.bz2
+ libglade-2.0.1-nowarning.patch)
+url="http://www.gnome.org"
+md5sums=('da4f9d1c6cd1337f6ef5e2db768d8557' '4f879c0ce550004905aa0fb24f25c353')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/libglade-2.0.1-nowarning.patch || return 1
+ ./configure --sysconfdir=/etc --prefix=/usr --localstatedir=/var
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m755 libglade-convert ${startdir}/pkg/usr/bin/libglade-convert
+}
diff --git a/abs/core-testing/libglade/glade.install b/abs/core-testing/libglade/glade.install
new file mode 100644
index 0000000..c98d2ed
--- /dev/null
+++ b/abs/core-testing/libglade/glade.install
@@ -0,0 +1,30 @@
+post_install() {
+ if [ ! -d etc/xml ]; then
+ mkdir -p etc/xml
+ fi
+ if [ ! -e etc/xml/catalog ]; then
+ xmlcatalog --noout --create etc/xml/catalog
+ fi
+ xmlcatalog --noout --add "system" \
+ "http://glade.gnome.org/glade-2.0.dtd" \
+ /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog
+}
+
+pre_upgrade() {
+ post_remove
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+post_remove() {
+ xmlcatalog --noout --del \
+ /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/libglade/libglade-2.0.1-nowarning.patch b/abs/core-testing/libglade/libglade-2.0.1-nowarning.patch
new file mode 100644
index 0000000..fd07121
--- /dev/null
+++ b/abs/core-testing/libglade/libglade-2.0.1-nowarning.patch
@@ -0,0 +1,39 @@
+--- libglade-2.0.1/glade/glade-gtk.c.nowarning 2003-08-29 14:50:10.000000000 -0400
++++ libglade-2.0.1/glade/glade-gtk.c 2003-08-29 14:58:41.000000000 -0400
+@@ -639,9 +639,8 @@
+ if (!strcmp (childinfo->properties[j].name, "label")) {
+ label = childinfo->properties[j].value;
+ break;
+- } else {
+- g_warning ("Unknown CList child property: %s", childinfo->properties[j].name);
+ }
++ /* Ignore all other properties */
+ }
+
+ if (label) {
+@@ -683,6 +682,7 @@
+ char *icon = NULL;
+ gboolean use_stock = FALSE, active = FALSE, new_group = FALSE;
+ gboolean use_underline = FALSE;
++ gboolean sensitive = TRUE;
+ GtkWidget *iconw = NULL;
+ int j;
+
+@@ -708,6 +708,8 @@
+ group_name = value;
+ } else if (!strcmp (name, "new_group")) {
+ new_group = BOOL (value);
++ } else if (!strcmp (name, "sensitive")) {
++ sensitive = BOOL (value);
+ } else if (!strcmp (name, "visible")) {
+ /* ignore for now */
+ } else if (!strcmp (name, "tooltip")) {
+@@ -785,6 +787,8 @@
+ gtk_label_set_use_underline (GTK_LABEL (toolbar_child->label),
+ TRUE);
+ }
++
++ gtk_widget_set_sensitive (child, sensitive);
+
+ glade_xml_set_common_params (xml, child, childinfo->child);
+ } else {
diff --git a/abs/core-testing/libgpg-error/PKGBUILD b/abs/core-testing/libgpg-error/PKGBUILD
new file mode 100644
index 0000000..834b39c
--- /dev/null
+++ b/abs/core-testing/libgpg-error/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=libgpg-error
+pkgver=1.6
+pkgrel=10
+pkgdesc="Support library for libgcrypt"
+arch=(i686 x86_64)
+url="http://www.gnupg.org"
+license=('LGPL')
+groups=('base')
+depends=('glibc')
+options=(!libtool)
+source=(#ftp://ftp.gnupg.org/gcrypt/libgpg-error/${pkgname}-${pkgver}.tar.bz2
+ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/libgpg-error/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f3e9870e213518b407a959f8d29cd554')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libgsf/PKGBUILD b/abs/core-testing/libgsf/PKGBUILD
new file mode 100644
index 0000000..84f5edb
--- /dev/null
+++ b/abs/core-testing/libgsf/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=libgsf
+pkgver=1.14.8
+pkgrel=1
+pkgdesc="The GNOME Structured File Library is a utility library for reading and writing structured file formats."
+arch=(i686 x86_64)
+url="http://www.gnome.org/"
+license=('GPL' 'LGPL')
+depends=('libxml2' 'glib2>=2.16.1' 'bzip2')
+makedepends=('perlxml' 'pkgconfig' 'python')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/GNOME/sources/${pkgname}/1.14/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('09e4b6639be79fa888cabc751f73674f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/gsf-gnome gsf-win32//' -e 's/thumbnailer//' Makefile.*
+ ./configure --prefix=/usr --disable-gtk-doc --without-gnome --without-bonobo
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/usr{,/share}/man/man1/gsf-office-thumbnailer.1
+}
diff --git a/abs/core-testing/libice/PKGBUILD b/abs/core-testing/libice/PKGBUILD
new file mode 100644
index 0000000..64378a3
--- /dev/null
+++ b/abs/core-testing/libice/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libice
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Inter-Client Exchange library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc' 'xproto')
+makedepends=('pkgconfig' 'xtrans')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libICE-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libICE-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4ab4e67e0b8845aa201e984153087f4a')
diff --git a/abs/core-testing/libid3tag/PKGBUILD b/abs/core-testing/libid3tag/PKGBUILD
new file mode 100644
index 0000000..aad7fb2
--- /dev/null
+++ b/abs/core-testing/libid3tag/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libid3tag
+pkgver=0.15.1b
+pkgrel=2
+pkgdesc="library for id3 tagging"
+url="http://www.underbit.com/products/mad/"
+depends=('zlib')
+arch=('i686' 'x86_64')
+source=(ftp://ftp.mars.org/pub/mpeg/$pkgname-$pkgver.tar.gz id3tag.pc)
+url="http://www.underbit.com/products/mad/"
+md5sums=('e5808ad997ba32c498803822078748c3' 'cd5ea001dc24505040b781ad1de9ddf2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 $startdir/src/id3tag.pc $startdir/pkg/usr/lib/pkgconfig/id3tag.pc
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/libid3tag/id3tag.pc b/abs/core-testing/libid3tag/id3tag.pc
new file mode 100644
index 0000000..07a8fae
--- /dev/null
+++ b/abs/core-testing/libid3tag/id3tag.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr/bin
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: ID3TAG
+Description: libid3tag - ID3 tag manipulation library
+Version: 0.15.0b
+Libs: -L${libdir} -lid3tag -zf
+Cflags:
diff --git a/abs/core-testing/libidn/PKGBUILD b/abs/core-testing/libidn/PKGBUILD
new file mode 100644
index 0000000..6fb7d24
--- /dev/null
+++ b/abs/core-testing/libidn/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Eric Johnson <eric@archlinux.org>
+pkgname=libidn
+pkgver=1.0
+pkgrel=1
+pkgdesc="Implementation of the Stringprep, Punycode and IDNA specifications"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/libidn/"
+license=('GPL' 'LGPL')
+depends=('glibc')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(ftp://alpha.gnu.org/pub/gnu/libidn/${pkgname}-${pkgver}.tar.gz)
+md5sums=('8a6a15dc061c0e17a97cb6b77d850e86')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libjpeg/PKGBUILD b/abs/core-testing/libjpeg/PKGBUILD
new file mode 100644
index 0000000..807f7f5
--- /dev/null
+++ b/abs/core-testing/libjpeg/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libjpeg
+pkgver=6b
+pkgrel=4
+pkgdesc="Library of JPEG support functions"
+arch=('i686' 'x86_64')
+depends=('glibc')
+source=(ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v$pkgver.tar.gz)
+md5sums=('dbd5f3b47ed13132f04c685d608a7547')
+
+build() {
+ cd $startdir/src/jpeg-$pkgver
+ ./configure --prefix=/usr --enable-shared --enable-static
+ make || return 1
+ mkdir -p $startdir/pkg/usr/{bin,lib,include,man/man1}
+ make prefix=$startdir/pkg/usr install
+
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core-testing/liblbxutil/PKGBUILD b/abs/core-testing/liblbxutil/PKGBUILD
new file mode 100644
index 0000000..ca531db
--- /dev/null
+++ b/abs/core-testing/liblbxutil/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=liblbxutil
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="Low Bandwidth X11 Utility Library"
+arch=(i686)
+url="http://xorg.freedesktop.org/"
+depends=('zlib')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(b73cbd5bc3cd268722a624a5f1318fde)
+
+build() {
+ cd ${startdir}/src/${pkgname}-$pkgver
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/libldap/PKGBUILD b/abs/core-testing/libldap/PKGBUILD
new file mode 100644
index 0000000..616e6a3
--- /dev/null
+++ b/abs/core-testing/libldap/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 1627 2008-05-14 03:02:30Z eric $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libldap
+pkgver=2.4.11
+pkgrel=1
+pkgdesc="LDAP client libraries"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.openldap.org/"
+backup=(etc/openldap/ldap.conf)
+depends=('libsasl' 'openssl>=0.9.8f')
+options=('!libtool' '!makeflags')
+makedepends=('tcp_wrappers')
+source=(ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-${pkgver}.tgz
+ ntlm.patch
+ peercred.patch)
+
+build() {
+ cd ${startdir}/src/openldap-${pkgver}
+# patch -Np0 -i ${startdir}/src/ntlm.patch || return 1
+ patch -Np0 -i ${startdir}/src/peercred.patch || return 1
+
+ ./configure --prefix=/usr \
+ --libexecdir=/usr/sbin \
+ --sysconfdir=/etc \
+ --localstatedir=/var/lib/openldap \
+ --enable-crypt --enable-dynamic \
+ --with-threads --enable-wrappers \
+ --enable-spasswd --with-cyrus-sasl \
+ --disable-bdb --disable-hdb
+ cd include
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../libraries
+ make depend
+ make || return 1
+
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../doc/man/man3
+ make
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../man5
+ make
+ mkdir -p ${startdir}/pkg/usr/man/man5
+ install -m644 ldap.conf.5.tmp ${startdir}/pkg/usr/man/man5/ldap.conf.5
+
+ # get rid of duplicate default conf files
+ rm ${startdir}/pkg/etc/openldap/*.default
+
+ ln -sf liblber.so ${startdir}/pkg/usr/lib/liblber.so.2
+ ln -sf libldap.so ${startdir}/pkg/usr/lib/libldap.so.2
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/openldap
+ install -m644 ${startdir}/src/openldap-${pkgver}/LICENSE \
+ ${startdir}/pkg/usr/share/licenses/openldap/
+}
+md5sums=('920fedbbb5bc61c2ca52c56edeef770a'
+ '64c539d5f01f46f329b9d5c1324be4e9'
+ 'acc4112845522a6a1a517064c216f781')
diff --git a/abs/core-testing/libldap/ntlm.patch b/abs/core-testing/libldap/ntlm.patch
new file mode 100644
index 0000000..fca806b
--- /dev/null
+++ b/abs/core-testing/libldap/ntlm.patch
@@ -0,0 +1,189 @@
+--- libraries/libldap/Makefile.in.orig 2004-01-01 13:16:29.000000000 -0500
++++ libraries/libldap/Makefile.in 2004-07-14 13:37:23.000000000 -0400
+@@ -20,7 +20,7 @@
+ SRCS = bind.c open.c result.c error.c compare.c search.c \
+ controls.c messages.c references.c extended.c cyrus.c \
+ modify.c add.c modrdn.c delete.c abandon.c \
+- sasl.c sbind.c kbind.c unbind.c cancel.c \
++ sasl.c ntlm.c sbind.c kbind.c unbind.c cancel.c \
+ filter.c free.c sort.c passwd.c whoami.c \
+ getdn.c getentry.c getattr.c getvalues.c addentry.c \
+ request.c os-ip.c url.c sortctrl.c vlvctrl.c \
+@@ -29,7 +29,7 @@
+ OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
+ controls.lo messages.lo references.lo extended.lo cyrus.lo \
+ modify.lo add.lo modrdn.lo delete.lo abandon.lo \
+- sasl.lo sbind.lo kbind.lo unbind.lo cancel.lo \
++ sasl.lo ntlm.lo sbind.lo kbind.lo unbind.lo cancel.lo \
+ filter.lo free.lo sort.lo passwd.lo whoami.lo \
+ getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
+ request.lo os-ip.lo url.lo sortctrl.lo vlvctrl.lo \
+--- /dev/null 1970-01-01 01:00:00.000000000 +0100
++++ libraries/libldap/ntlm.c 2005-12-02 09:47:08.226364500 +0100
+@@ -0,0 +1,138 @@
++/* $OpenLDAP: pkg/ldap/libraries/libldap/ntlm.c,v 1.1.4.10 2002/01/04 20:38:21 kurt Exp $ */
++/*
++ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
++ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
++ */
++
++/* Mostly copied from sasl.c */
++
++#include "portable.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++
++#include <ac/socket.h>
++#include <ac/string.h>
++#include <ac/time.h>
++#include <ac/errno.h>
++
++#include "ldap-int.h"
++
++int
++ldap_ntlm_bind(
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp )
++{
++ BerElement *ber;
++ int rc;
++ ber_int_t id;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_ntlm_bind\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( msgidp != NULL );
++
++ if( msgidp == NULL ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ /* create a message to send */
++ if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ assert( LBER_VALID( ber ) );
++
++ LDAP_NEXT_MSGID( ld, id );
++ rc = ber_printf( ber, "{it{istON}" /*}*/,
++ id, LDAP_REQ_BIND,
++ ld->ld_version, dn, tag,
++ cred );
++
++ /* Put Server Controls */
++ if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
++ ld->ld_errno = LDAP_ENCODING_ERROR;
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ /* send the message */
++ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber, id );
++
++ if(*msgidp < 0)
++ return ld->ld_errno;
++
++ return LDAP_SUCCESS;
++}
++
++int
++ldap_parse_ntlm_bind_result(
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge)
++{
++ ber_int_t errcode;
++ ber_tag_t tag;
++ BerElement *ber;
++ ber_len_t len;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_parse_ntlm_bind_result\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( res != NULL );
++
++ if ( ld == NULL || res == NULL ) {
++ return LDAP_PARAM_ERROR;
++ }
++
++ if( res->lm_msgtype != LDAP_RES_BIND ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ if ( ld->ld_error ) {
++ LDAP_FREE( ld->ld_error );
++ ld->ld_error = NULL;
++ }
++ if ( ld->ld_matched ) {
++ LDAP_FREE( ld->ld_matched );
++ ld->ld_matched = NULL;
++ }
++
++ /* parse results */
++
++ ber = ber_dup( res->lm_ber );
++
++ if( ber == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ tag = ber_scanf( ber, "{ioa" /*}*/,
++ &errcode, challenge, &ld->ld_error );
++ ber_free( ber, 0 );
++
++ if( tag == LBER_ERROR ) {
++ ld->ld_errno = LDAP_DECODING_ERROR;
++ return ld->ld_errno;
++ }
++
++ ld->ld_errno = errcode;
++
++ return( ld->ld_errno );
++}
++
+--- include/ldap.h.orig
++++ include/ldap.h
+@@ -2115,5 +2115,25 @@
+ ldap_passwordpolicy_err2txt LDAP_P(( LDAPPasswordPolicyError ));
+ #endif /* LDAP_CONTROL_PASSWORDPOLICYREQUEST */
+
++/*
++ * hacks for NTLM
++ */
++#define LDAP_AUTH_NTLM_REQUEST ((ber_tag_t) 0x8aU)
++#define LDAP_AUTH_NTLM_RESPONSE ((ber_tag_t) 0x8bU)
++LDAP_F( int )
++ldap_ntlm_bind LDAP_P((
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp ));
++LDAP_F( int )
++ldap_parse_ntlm_bind_result LDAP_P((
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge));
++
+ LDAP_END_DECL
+ #endif /* _LDAP_H */
diff --git a/abs/core-testing/libldap/peercred.patch b/abs/core-testing/libldap/peercred.patch
new file mode 100644
index 0000000..7d159b7
--- /dev/null
+++ b/abs/core-testing/libldap/peercred.patch
@@ -0,0 +1,11 @@
+--- ./libraries/liblutil/getpeereid.c 2008-02-12 00:24:13.000000000 +0100
++++ ./libraries/liblutil/getpeereid.c 2008-06-12 12:55:34.000000000 +0200
+@@ -14,6 +14,8 @@
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+
++#define _GNU_SOURCE
++
+ #include "portable.h"
+
+ #ifndef HAVE_GETPEEREID
diff --git a/abs/core-testing/libmad/PKGBUILD b/abs/core-testing/libmad/PKGBUILD
new file mode 100644
index 0000000..c4c0939
--- /dev/null
+++ b/abs/core-testing/libmad/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Travis Willard <travis@archlinux.org>
+pkgname=libmad
+pkgver=0.15.1b
+pkgrel=2
+pkgdesc="A high-quality MPEG audio decoder"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc')
+replaces=('mad')
+conflicts=('mad')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mad/$pkgname-$pkgver.tar.gz
+ libmad.patch
+ libmad_gcc43.patch)
+url="http://www.underbit.com/products/mad/"
+md5sums=('1be543bc30c56fb6bea1d7bf6a64e66c' 'fbcca0267a423bae45389666f4cb04d5'\
+ 'a5eede0478bee6f7adfd2c001901f1b8')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/libmad.patch || return 1
+ patch -Np1 -i $startdir/src/libmad_gcc43.patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/libmad/libmad.patch b/abs/core-testing/libmad/libmad.patch
new file mode 100644
index 0000000..0ac88ac
--- /dev/null
+++ b/abs/core-testing/libmad/libmad.patch
@@ -0,0 +1,117 @@
+diff -ruN libmad-0.15.1b.orig/Makefile.am libmad-0.15.1b/Makefile.am
+--- libmad-0.15.1b.orig/Makefile.am 2004-02-17 02:02:03.000000000 +0000
++++ libmad-0.15.1b/Makefile.am 2005-08-25 12:08:04.000000000 +0000
+@@ -33,9 +33,12 @@
+ minimad_INCLUDES =
+ minimad_LDADD = libmad.la
+
+-EXTRA_DIST = mad.h.sed \
++EXTRA_DIST = mad.h.sed mad.pc.in \
+ CHANGES COPYRIGHT CREDITS README TODO VERSION
+
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA= mad.pc
++
+ exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \
+ synth.h decoder.h
+
+diff -ruN libmad-0.15.1b.orig/Makefile.in libmad-0.15.1b/Makefile.in
+--- libmad-0.15.1b.orig/Makefile.in 2004-02-17 02:33:23.000000000 +0000
++++ libmad-0.15.1b/Makefile.in 2005-08-25 12:09:34.000000000 +0000
+@@ -14,6 +14,8 @@
+
+ @SET_MAKE@
+
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = mad.pc
+
+ SOURCES = $(libmad_la_SOURCES) $(EXTRA_libmad_la_SOURCES) $(minimad_SOURCES)
+
+@@ -43,7 +45,7 @@
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in $(srcdir)/libmad.list.in \
+ $(top_srcdir)/configure COPYING INSTALL TODO config.guess \
+- config.sub depcomp install-sh ltmain.sh missing mkinstalldirs
++ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs mad.pc.in
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+@@ -53,7 +55,7 @@
+ configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = config.h
+-CONFIG_CLEAN_FILES = libmad.list
++CONFIG_CLEAN_FILES = libmad.list mad.pc
+ am__installdirs = $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
+ libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+@@ -218,7 +220,7 @@
+ minimad_SOURCES = minimad.c
+ minimad_INCLUDES =
+ minimad_LDADD = libmad.la
+-EXTRA_DIST = mad.h.sed \
++EXTRA_DIST = mad.h.sed mad.pc.in \
+ CHANGES COPYRIGHT CREDITS README TODO VERSION
+
+ exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \
+@@ -298,6 +300,28 @@
+ rm -f stamp-h1
+ touch $@
+
++mad.pc: $(top_builddir)/config.status mad.pc.in
++ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
++ @list='$(pkgconfig_DATA)'; for p in $$list; do \
++ if test -f $(srcdir)/$$p; then \
++ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
++ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \
++ else if test -f $$p; then \
++ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
++ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \
++ fi; fi; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ list='$(pkgconfig_DATA)'; for p in $$list; do \
++ rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \
++ done
++
+ distclean-hdr:
+ -rm -f config.h stamp-h1
+ libmad.list: $(top_builddir)/config.status $(srcdir)/libmad.list.in
+@@ -726,7 +750,7 @@
+
+ info-am:
+
+-install-data-am: install-includeHEADERS
++install-data-am: install-includeHEADERS install-pkgconfigDATA
+
+ install-exec-am: install-libLTLIBRARIES
+
+@@ -757,7 +781,7 @@
+ ps-am:
+
+ uninstall-am: uninstall-includeHEADERS uninstall-info-am \
+- uninstall-libLTLIBRARIES
++ uninstall-libLTLIBRARIES install-pkgconfigDATA
+
+ uninstall-info: uninstall-info-recursive
+
+diff -ruN libmad-0.15.1b.orig/mad.pc.in libmad-0.15.1b/mad.pc.in
+--- libmad-0.15.1b.orig/mad.pc.in 1970-01-01 00:00:00.000000000 +0000
++++ libmad-0.15.1b/mad.pc.in 2005-08-25 12:08:04.000000000 +0000
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: MAD
++Description: libmad - MPEG audio decoder library
++Version: @VERSION@
++Libs: -L${libdir} -lmad
++Cflags:
diff --git a/abs/core-testing/libmad/libmad_gcc43.patch b/abs/core-testing/libmad/libmad_gcc43.patch
new file mode 100644
index 0000000..6a9af79
--- /dev/null
+++ b/abs/core-testing/libmad/libmad_gcc43.patch
@@ -0,0 +1,10 @@
+--- libmad-0.15.1b/configure.vanilla 2008-04-09 07:41:14.000000000 +0000
++++ libmad-0.15.1b/configure 2008-04-09 07:43:12.000000000 +0000
+@@ -19099,7 +19099,6 @@
+ case "$optimize" in
+ -O|"-O "*)
+ optimize="-O"
+- optimize="$optimize -fforce-mem"
+ optimize="$optimize -fforce-addr"
+ : #x optimize="$optimize -finline-functions"
+ : #- optimize="$optimize -fstrength-reduce"
diff --git a/abs/core-testing/libmp4v2/PKGBUILD b/abs/core-testing/libmp4v2/PKGBUILD
new file mode 100644
index 0000000..7c0557c
--- /dev/null
+++ b/abs/core-testing/libmp4v2/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 3482 2008-06-22 21:06:58Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libmp4v2
+pkgver=1.6
+pkgrel=1
+pkgdesc="MPEG-4 library and tools from mpeg4ip"
+arch=('i686')
+license=('custom')
+url="http://mpeg4ip.sourceforge.net/"
+depends=('gcc-libs')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mpeg4ip/mpeg4ip-${pkgver}.tar.gz)
+md5sums=('004b481542e5aa9fdb455d9a1b640eff')
+
+build() {
+ cd ${startdir}/src/mpeg4ip-${pkgver}
+ touch bootstrapped
+ echo "" > lib/rtp/configure
+ echo "" > lib/SDLAudio/configure
+
+ ./configure --prefix=/usr || return 1
+ for dir in lib/gnu lib/mp4av lib/mp4v2; do
+ cd ${startdir}/src/mpeg4ip-${pkgver}/${dir}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ done
+ install -m644 ${startdir}/src/mpeg4ip-${pkgver}/include/mpeg4ip{,_version}.h ${startdir}/pkg/usr/include/ || return 1
+ install -m644 $startdir/src/mpeg4ip-$pkgver/mpeg4ip_config.h $startdir/pkg/usr/include/ || return 1
+
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/mpeg4ip-${pkgver}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libmysqlclient/PKGBUILD b/abs/core-testing/libmysqlclient/PKGBUILD
new file mode 100644
index 0000000..b8e84d1
--- /dev/null
+++ b/abs/core-testing/libmysqlclient/PKGBUILD
@@ -0,0 +1,55 @@
+# $Id: PKGBUILD 2463 2008-06-02 11:37:21Z alexander $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=libmysqlclient
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="MySQL client libraries"
+arch=(i686 x86_64)
+depends=('openssl' 'zlib')
+makedepends=('gcc' 'readline' 'tcp_wrappers' 'libtool')
+options=('!libtool')
+license=('GPL')
+url=('http://www.mysql.com/')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz)
+
+build() {
+ # PIC
+ export CFLAGS="-fPIC ${CFLAGS}"
+ cd $startdir/src/mysql-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --localstatedir=/var --sysconfdir=/etc \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db
+
+ for dir in include strings regex mysys dbug extra; do
+ pushd ${dir} || return 1
+ make || return 1
+ popd
+ done
+ for dir in libmysql libmysql_r; do
+ pushd ${dir} || return 1
+ make link_sources
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ popd
+ done
+ cd include
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../scripts
+ make mysql_config
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 mysql_config ${startdir}/pkg/usr/bin
+
+ # create library symlinks in /usr/lib
+ ln -sf mysql/libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so.15
+ ln -sf libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so
+ ln -sf libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so.1
+ ln -sf mysql/libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so.15
+ ln -sf libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so
+ ln -sf libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so.1
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431')
diff --git a/abs/core-testing/libogg/PKGBUILD b/abs/core-testing/libogg/PKGBUILD
new file mode 100644
index 0000000..b317c8b
--- /dev/null
+++ b/abs/core-testing/libogg/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libogg
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="Ogg bitstream and framing library"
+pkgurl="http://www.xiph.org/ogg/vorbis/download"
+depends=('glibc')
+arch=('i686' 'x86_64')
+source=(http://downloads.xiph.org/releases/ogg/$pkgname-$pkgver.tar.gz)
+md5sums=('eaf7dc6ebbff30975de7527a80831585')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
+
diff --git a/abs/core-testing/libpcap/PKGBUILD b/abs/core-testing/libpcap/PKGBUILD
new file mode 100644
index 0000000..0a586db
--- /dev/null
+++ b/abs/core-testing/libpcap/PKGBUILD
@@ -0,0 +1,44 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=libpcap
+pkgver=0.9.8
+pkgrel=11
+pkgdesc="A system-independent interface for user-level packet capture"
+arch=(i686 x86_64)
+url="http://www.tcpdump.org/"
+license=('BSD')
+groups=('base')
+depends=('glibc')
+makedepends=('flex')
+source=(http://www.sfr-fresh.com/unix/misc/libpcap-${pkgver}.tar.gz
+ libpcap-shared.patch)
+md5sums=('5208f24d0328ee7c20b52c43eaa9aa0e'
+ 'b8a9c5e5cea0b89a8a7456c6c4d59db4')
+
+# This package has a strict SONAME that changes in EVERY MINOR
+# release. Whenever you feel like updating this package, DON'T,
+# it will break a number of essential system tools.
+# Again, for dummies: IF YOU UPDATE THIS PACKAGE DIRECTLY TO CORE,
+# I WILL PERSONALLY CHOP YOUR HEAD OFF!
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/libpcap-shared.patch || return 1
+ sed -i -e "s/@MAJOR@/`awk -F '.' '{ print $1 }' VERSION`/" \
+ -e "s/@MINOR@/`awk -F '.' '{ print $2 }' VERSION`/" \
+ -e "s/@SUBMINOR@/`awk -F '.' '{ print $3 }' VERSION`/" \
+ -e "s/@VERSION@/`cat VERSION`/" Makefile.in
+
+ ./configure --prefix=/usr --enable-ipv6
+ DEFS="-g -D_U_=\"\" -fPIC -DHAVE_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
+ make -j1 DEFS="${DEFS}" || return 1
+ make DESTDIR=${startdir}/pkg install
+# # backwards compatibility, programs often look for net/bpf.h
+ mkdir -p ${startdir}/pkg/usr/include/net
+ cd ${startdir}/pkg/usr/include/net
+ ln -s ../pcap-bpf.h bpf.h
+
+ #install the license
+ install -D -m644 $startdir/src/$pkgname-$pkgver/LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core-testing/libpcap/libpcap-shared.patch b/abs/core-testing/libpcap/libpcap-shared.patch
new file mode 100644
index 0000000..a200836
--- /dev/null
+++ b/abs/core-testing/libpcap/libpcap-shared.patch
@@ -0,0 +1,51 @@
+diff -u -r libpcap-0.6.2/Makefile.in libpcap-shared/Makefile.in
+--- libpcap-0.6.2/Makefile.in Thu Jan 18 05:06:24 2001
++++ libpcap-shared/Makefile.in Fri Jul 20 16:26:05 2001
+@@ -22,6 +22,10 @@
+ #
+ # Various configurable paths (remember to edit Makefile.in, not Makefile)
+ #
++MAJOR = @MAJOR@
++MINOR = @MINOR@
++SUBMINOR = @SUBMINOR@
++VERSION = @VERSION@
+
+ # Top level hierarchy
+ prefix = @prefix@
+@@ -47,7 +51,7 @@
+ DEFS = @DEFS@
+
+ # Standard CFLAGS
+-CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
++CFLAGS = $(CCOPT) $(INCLS) $(DEFS) -fPIC -DPIC
+
+ INSTALL = @INSTALL@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+@@ -91,9 +95,14 @@
+ TAGFILES = \
+ $(SRC) $(HDR) $(TAGHDR)
+
+-CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
+
+-all: libpcap.a
++
++CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so.$(VERSION)
++
++all: libpcap.a libpcap.so.$(VERSION)
++
++libpcap.so.$(VERSION):
++ gcc -shared -Wl,-soname -Wl,libpcap.so.$(VERSION) -o libpcap.so.$(VERSION) $(OBJ) -lc
+
+ libpcap.a: $(OBJ)
+ @rm -f $@
+@@ -139,6 +148,10 @@
+ [ -d $(DESTDIR)$(libdir) ] || \
+ (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
+ $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
++ $(INSTALL_DATA) libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(VERSION)
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR)
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR).$(MINOR)
+ $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
+ [ -d $(DESTDIR)$(includedir) ] || \
+ (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
diff --git a/abs/core-testing/libpng/ChangeLog b/abs/core-testing/libpng/ChangeLog
new file mode 100644
index 0000000..9612756
--- /dev/null
+++ b/abs/core-testing/libpng/ChangeLog
@@ -0,0 +1,51 @@
+
+2008-08-23 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686: 1.2.31
+ * Thanks to Hussam Al-Tayeb
+
+2008-08-17 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Had to return to 1.2.29 because xul depends on
+ png with apng patch
+
+2008-08-17 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686: 1.2.30
+ * Fixes some security issues
+ * Remove the apng patch as there was no compatible version
+ for this version
+
+2008-07-04 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686 - 1.2.29-1
+ * Updated the apng patch for 1.2.29
+
+2008-05-06 Travis Willard <travis@archlinux.org>
+
+ * 1.2.28-1
+ Upstream update
+ Uses same APNG patchset as 1.2.27
+
+2008-05-01 Jan de Groot <jgc@archlinux.org>
+
+ * 1.2.27-1
+ Upstream update (security update!)
+ Fix APNG patchset to apply to 1.2.27
+ Fix build with newer libtool versions
+
+2008-03-12 Travis Willard <travis@archlinux.org>
+
+ * 1.2.25-1
+ Upstream update
+
+2008-02-18 Travis Willard <travis@archlinux.org>
+
+ * 1.2.24-3
+ Corrected ChangeLog
+
+2008-02-18 Travis Willard <travis@archlinux.org>
+
+ * 1.2.24-2
+ Added ChangeLog
+ Added APNG patchset from <http://littlesvr.ca/apng/>
diff --git a/abs/core-testing/libpng/PKGBUILD b/abs/core-testing/libpng/PKGBUILD
new file mode 100644
index 0000000..a67b300
--- /dev/null
+++ b/abs/core-testing/libpng/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 10073 2008-08-23 15:51:29Z douglas $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Maintainer: Travis Willard <travis@archlinux.org>
+# Maintainer: Douglas Soares de Andrade <douglas@archlinux.org>
+
+pkgname=libpng
+pkgver=1.2.31
+pkgrel=1
+pkgdesc="A collection of routines used to create PNG format graphics files"
+arch=('i686' 'x86_64')
+url="http://www.libpng.org/pub/png/libpng.html"
+license=('custom')
+depends=('zlib')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2
+ # http://littlesvr.ca/apng/diff/${pkgname}-${pkgver}-apng.patch
+ ${pkgname}-${pkgver}-apng.patch )
+options=('!libtool')
+
+md5sums=('78d2f8c4e0d64f8948819563587302d3'
+ 'fab42a4ad4de6fcb87dcca6a7a19aefb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+
+ # Add animated PNG (apng) support
+ patch -Np0 -i $startdir/src/${pkgname}-${pkgver}-apng.patch || return 1
+
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+
+ ./configure --prefix=/usr || return 1
+ make ECHO=echo || return 1
+ make ECHO=echo DESTDIR=${startdir}/pkg install || return 1
+
+ cd contrib/pngminus
+ make ECHO=echo PNGLIB="-L${startdir}/pkg/usr/lib -lpng" -f makefile.std png2pnm pnm2png
+ install -m755 png2pnm pnm2png ${startdir}/pkg/usr/bin/
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ../../LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libpng/libpng-1.2.29-apng.patch b/abs/core-testing/libpng/libpng-1.2.29-apng.patch
new file mode 100644
index 0000000..cc27ca3
--- /dev/null
+++ b/abs/core-testing/libpng/libpng-1.2.29-apng.patch
@@ -0,0 +1,1671 @@
+Submitted By: Jens Ornot <oj_webstar@t-online.de>
+Resubmitted by: Jens Ornot <oj_webstar@t-online.de> - Fix APNG patchset to apply to 1.2.27
+Date: 2008-05-24
+Initial Package Version: 1.2.10
+Upstream Status: Unknown
+Origin: Andrew Smith
+Description: APNG is an extension of the [PNG][pngspec] format, adding support for animated images.
+ It is intended to be a replacement for simple animated images
+ that have traditionally used the [GIF][gifspec] format,
+ while adding support for 24-bit images and 8-bit transparency.
+ APNG is a simpler alternative to MNG,
+ providing a spec suitable for the most common usage of animated images on the Internet.
+
+ APNG is backwards-compatible with PNG;
+ any PNG decoder should be able to ignore the APNG-specific chunks and display a single image.
+
+diff -ruN libpng-1.2.27/png.c libpng-1.2.27.apng/png.c
+--- libpng-1.2.27/png.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/png.c 2008-05-01 09:49:58.000000000 +0000
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+diff -ruN libpng-1.2.27/png.h libpng-1.2.27.apng/png.h
+--- libpng-1.2.27/png.h 2008-04-30 10:23:11.000000000 +0000
++++ libpng-1.2.27.apng/png.h 2008-05-01 09:49:58.000000000 +0000
+@@ -958,6 +958,19 @@
+ png_fixed_point int_y_blue;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
++#endif
++
+ } png_info;
+
+ typedef png_info FAR * png_infop;
+@@ -1059,6 +1072,8 @@
+ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -1099,6 +1114,10 @@
+ typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+ typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+ png_uint_32, int));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp,
++ png_uint_32));
++#endif
+ #endif
+
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+@@ -1430,6 +1449,39 @@
+ png_uint_32 user_height_max;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
++#endif
++#endif
++
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
++
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
++
+ /* New member added in libpng-1.0.25 and 1.2.17 */
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* storage for unknown chunk that the library doesn't recognize. */
+@@ -1759,6 +1811,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+ png_bytepp image));
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr,
++ png_infop png_info, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++
++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr,
++ png_infop png_info));
++#endif
++
+ /* writes the end of the PNG file. */
+ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+@@ -2007,6 +2071,11 @@
+ png_voidp progressive_ptr,
+ png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+ png_progressive_end_ptr end_fn));
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif
+
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2444,6 +2513,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_num_plays)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid)
++ PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++#endif /* PNG_APNG_SUPPORTED */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* provide a list of chunks and how they are to be handled, if the built-in
+ handling or default unknown chunk handling is not desired. Any chunks not
+@@ -2750,6 +2872,8 @@
+ #define PNG_BACKGROUND_IS_GRAY 0x800
+ #define PNG_HAVE_PNG_SIGNATURE 0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
++#define PNG_HAVE_acTL 0x4000
++#define PNG_HAVE_fcTL 0x8000L
+
+ /* flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -2890,6 +3014,9 @@
+ #define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
+ #define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
+ #define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
++#define PNG_acTL png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'}
++#define PNG_fcTL png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'}
++#define PNG_fdAT png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'}
+
+ #ifdef PNG_USE_GLOBAL_ARRAYS
+ PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
+@@ -2913,6 +3040,9 @@
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_acTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fcTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fdAT[5];
+ #endif /* PNG_USE_GLOBAL_ARRAYS */
+
+ #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
+@@ -3187,6 +3317,17 @@
+ #endif
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays));
++
++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++#endif
++
+ /* Called when finished processing a row of data */
+ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
+
+@@ -3238,6 +3379,20 @@
+ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* private, reset some things to become ready for reading next frame */
++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr));
++#endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++/* private, reset some things to become ready for writing next frame */
++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 width, png_uint_32 height));
++#endif
++
+ /* these are the functions that do the transformations */
+ #if defined(PNG_READ_FILLER_SUPPORTED)
+ PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
+@@ -3453,6 +3608,18 @@
+ png_uint_32 length));
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr));
++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr,
++ png_uint_32 length));
++#endif
++
+ PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 length));
+
+diff -ruN libpng-1.2.27/pngconf.h libpng-1.2.27.apng/pngconf.h
+--- libpng-1.2.27/pngconf.h 2008-04-30 10:23:11.000000000 +0000
++++ libpng-1.2.27.apng/pngconf.h 2008-05-01 09:49:58.000000000 +0000
+@@ -925,6 +925,10 @@
+ # define PNG_READ_zTXt_SUPPORTED
+ # define PNG_zTXt_SUPPORTED
+ #endif
++#ifndef PNG_NO_READ_APNG
++# define PNG_READ_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++#endif
+ #ifndef PNG_NO_READ_UNKNOWN_CHUNKS
+ # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+@@ -1067,6 +1071,12 @@
+ # define PNG_zTXt_SUPPORTED
+ # endif
+ #endif
++#ifndef PNG_NO_WRITE_APNG
++# define PNG_WRITE_APNG_SUPPORTED
++# ifndef PNG_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++# endif
++#endif
+ #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
+ # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+diff -ruN libpng-1.2.27/pngget.c libpng-1.2.27.apng/pngget.c
+--- libpng-1.2.27/pngget.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngget.c 2008-05-01 09:49:58.000000000 +0000
+@@ -797,6 +797,167 @@
+ }
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_get_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *num_frames, png_uint_32 *num_plays)
++{
++ png_debug1(1, "in %s retrieval function\n", "acTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_acTL) &&
++ num_frames != NULL && num_plays != NULL)
++ {
++ *num_frames = info_ptr->num_frames;
++ *num_plays = info_ptr->num_plays;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_frames(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_frames()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_frames);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_plays(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_plays()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_plays);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *width, png_uint_32 *height,
++ png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den,
++ png_byte *dispose_op, png_byte *blend_op)
++{
++ png_debug1(1, "in %s retrieval function\n", "fcTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_fcTL) &&
++ width != NULL && height != NULL &&
++ x_offset != NULL && x_offset != NULL &&
++ delay_num != NULL && delay_den != NULL &&
++ dispose_op != NULL && blend_op != NULL)
++ {
++ *width = info_ptr->next_frame_width;
++ *height = info_ptr->next_frame_height;
++ *x_offset = info_ptr->next_frame_x_offset;
++ *y_offset = info_ptr->next_frame_y_offset;
++ *delay_num = info_ptr->next_frame_delay_num;
++ *delay_den = info_ptr->next_frame_delay_den;
++ *dispose_op = info_ptr->next_frame_dispose_op;
++ *blend_op = info_ptr->next_frame_blend_op;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_width()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_width);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_height()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_height);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_x_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_x_offset);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_y_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_y_offset);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_num()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_num);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_den()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_den);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_dispose_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_dispose_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_blend_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_blend_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr != NULL)
++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++
++ return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+diff -ruN libpng-1.2.27/pngpread.c libpng-1.2.27.apng/pngpread.c
+--- libpng-1.2.27/pngpread.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngpread.c 2008-05-01 09:49:58.000000000 +0000
+@@ -192,6 +192,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ /* First we make sure we have enough data for the 4 byte chunk name
+ * and the 4 byte chunk length before proceeding with decoding the
+@@ -215,7 +220,104 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ }
+-
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->buffer_size < 4)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_ensure_sequence_number(png_ptr, 4);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ {
++ /* discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++
++ return;
++ }
++ }
++ else if(!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++
++ return;
++ }
++ else
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++
++ return;
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ if(png_ptr->mode & PNG_AFTER_IDAT)
+ png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
+@@ -297,6 +399,9 @@
+ png_error(png_ptr, "Too many IDAT's found");
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+@@ -492,6 +597,35 @@
+ png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
+ }
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fdAT(png_ptr, info_ptr, png_ptr->push_length);
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
+ else
+ {
+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
+@@ -662,13 +796,17 @@
+ png_push_read_IDAT(png_structp png_ptr)
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+- PNG_CONST PNG_IDAT;
++ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
++#endif
+ #endif
+ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
+ {
+ png_byte chunk_length[4];
+
+- if (png_ptr->buffer_size < 8)
++ if (png_ptr->buffer_size < 12)
+ {
+ png_push_save_buffer(png_ptr);
+ return;
+@@ -680,15 +818,59 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4)
++ && png_ptr->num_frames_read > 0)
++ {
++ if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++ if ( png_memcmp(png_ptr->chunk_name, png_IDAT, 4)
++ && (png_ptr->num_frames_read == 0) )
+ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
+ if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
+ png_error(png_ptr, "Not enough compressed data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++#endif
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if(png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ if (png_ptr->idat_size && png_ptr->save_buffer_size)
+ {
+@@ -1589,6 +1771,17 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
++{
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++}
++#endif
++
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_structp png_ptr)
+ {
+diff -ruN libpng-1.2.27/pngread.c libpng-1.2.27.apng/pngread.c
+--- libpng-1.2.27/pngread.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngread.c 2008-05-01 09:49:58.000000000 +0000
+@@ -405,6 +405,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_byte chunk_length[4];
+ png_uint_32 length;
+@@ -458,6 +463,9 @@
+ !(png_ptr->mode & PNG_HAVE_PLTE))
+ png_error(png_ptr, "Missing PLTE before IDAT");
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ break;
+@@ -530,12 +538,97 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
++
++ png_debug(0, "Reading frame head\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_acTL))
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
++
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
++
++ png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_IDAT;
++ PNG_fdAT;
++ PNG_fcTL;
++#endif
++ png_byte chunk_length[4];
++ png_uint_32 length;
++
++ png_read_data(png_ptr, chunk_length, 4);
++ length = png_get_uint_31(png_ptr, chunk_length);
++
++ png_reset_crc(png_ptr);
++ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
++
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* discard trailing fdATs for frames other than the first */
++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -572,6 +665,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_CONST PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_fdAT;
++ PNG_CONST PNG_IEND;
++#endif
+ PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
+ 0xff};
+ PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+@@ -701,19 +798,46 @@
+ {
+ if (!(png_ptr->zstream.avail_in))
+ {
+- while (!png_ptr->idat_size)
++ png_uint_32 bytes_to_skip = 0;
++
++ while (!png_ptr->idat_size || bytes_to_skip != 0)
+ {
+ png_byte chunk_length[4];
+
+- png_crc_finish(png_ptr, 0);
+-
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
++
+ png_read_data(png_ptr, chunk_length, 4);
+ png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length);
+-
++
+ png_reset_crc(png_ptr);
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+- png_error(png_ptr, "Not enough image data");
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read == 0)
++ {
++#endif
++ if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
++ }
++
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
++
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
+ png_ptr->zstream.next_in = png_ptr->zbuf;
+@@ -731,6 +855,9 @@
+ png_error(png_ptr, "Extra compressed data");
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->num_frames_read++;
++#endif
+ break;
+ }
+ if (ret != Z_OK)
+@@ -985,6 +1112,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+
+ png_read_data(png_ptr, chunk_length, 4);
+@@ -1091,6 +1223,14 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ } while (!(png_ptr->mode & PNG_HAVE_IEND));
+diff -ruN libpng-1.2.27/pngrtran.c libpng-1.2.27.apng/pngrtran.c
+--- libpng-1.2.27/pngrtran.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngrtran.c 2008-05-01 09:49:58.000000000 +0000
+@@ -1286,7 +1286,7 @@
+ * or png_read_update_info() after setting transforms that expand
+ * pixels. This check added to libpng-1.2.19 */
+ #if (PNG_WARN_UNINITIALIZED_ROW==1)
+- png_error(png_ptr, "Uninitialized row");
++ png_warning(png_ptr, "Uninitialized row");
+ #else
+ png_warning(png_ptr, "Uninitialized row");
+ #endif
+diff -ruN libpng-1.2.27/pngrutil.c libpng-1.2.27.apng/pngrutil.c
+--- libpng-1.2.27/pngrutil.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngrutil.c 2008-05-01 09:49:58.000000000 +0000
+@@ -374,6 +374,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2169,6 +2174,168 @@
+ }
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_acTL)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if(didSet)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "fcTL for the first frame must have zero offset");
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ png_error(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++
++ /* the set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++}
++
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
++{
++ png_byte data[4];
++ png_uint_32 sequence_number;
++
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
++
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* This function is called when we haven't found a handler for a
+ chunk. If there isn't a problem with the chunk itself (ie bad
+ chunk name, CRC, or a critical chunk), the chunk is silently ignored
+@@ -3180,4 +3347,82 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
++{
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++}
++
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++}
++
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ /* start of interlace block */
++ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
++
++ /* offset to next interlace block */
++ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
++
++ /* start of interlace block in the y direction */
++ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
++
++ /* offset to next interlace block in the y direction */
++ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
++#endif
++ png_uint_32 row_bytes;
++
++ if (png_ptr->interlaced)
++ {
++ if (!(png_ptr->transformations & PNG_INTERLACE))
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
++
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++
++ row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
++
++ png_ptr->irowbytes = (png_size_t)row_bytes;
++ if((png_uint_32)png_ptr->irowbytes != row_bytes)
++ png_error(png_ptr, "png_progressive_read_reset(): Rowbytes "
++ "overflow");
++ }
++ else
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ png_ptr->irowbytes = png_ptr->rowbytes + 1;
++ }
++
++ png_ptr->flags &= ~PNG_FLAG_ZLIB_FINISHED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
+ #endif /* PNG_READ_SUPPORTED */
+diff -ruN libpng-1.2.27/pngset.c libpng-1.2.27.apng/pngset.c
+--- libpng-1.2.27/pngset.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngset.c 2008-05-01 09:49:58.000000000 +0000
+@@ -364,6 +364,11 @@
+ info_ptr->rowbytes = (png_size_t)0;
+ else
+ info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width);
++
++#if defined(PNG_APNG_SUPPORTED)
++ /* for non-animated png. this may be overritten from an acTL chunk later */
++ info_ptr->num_frames = 1;
++#endif
+ }
+
+ #if defined(PNG_oFFs_SUPPORTED)
+@@ -1025,6 +1030,141 @@
+ }
+ #endif /* PNG_sPLT_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_set_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++ png_debug1(1, "in %s storage function\n", "acTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_acTL() with NULL png_ptr "
++ "or info_ptr ignored");
++ return (0);
++ }
++ if (num_frames == 0)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames zero");
++ return (0);
++ }
++ if (num_frames > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames > 2^31-1");
++ return (0);
++ }
++ if (num_plays > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_plays "
++ "> 2^31-1");
++ return (0);
++ }
++
++ info_ptr->num_frames = num_frames;
++ info_ptr->num_plays = num_plays;
++
++ info_ptr->valid |= PNG_INFO_acTL;
++
++ return (1);
++}
++
++/* delay_num and delay_den can hold any 16-bit values including zero */
++png_uint_32 PNGAPI
++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ png_debug1(1, "in %s storage function\n", "fcTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr "
++ "ignored");
++ return (0);
++ }
++
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ info_ptr->next_frame_width = width;
++ info_ptr->next_frame_height = height;
++ info_ptr->next_frame_x_offset = x_offset;
++ info_ptr->next_frame_y_offset = y_offset;
++ info_ptr->next_frame_delay_num = delay_num;
++ info_ptr->next_frame_delay_den = delay_den;
++ info_ptr->next_frame_dispose_op = dispose_op;
++ info_ptr->next_frame_blend_op = blend_op;
++
++ info_ptr->valid |= PNG_INFO_fcTL;
++
++ return (1);
++}
++
++void /* PRIVATE */
++png_ensure_fcTL_is_valid(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ if (width + x_offset > png_ptr->first_frame_width ||
++ height + y_offset > png_ptr->first_frame_height)
++ png_error(png_ptr, "dimensions of a frame are greater than"
++ "the ones in IHDR");
++ if (width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
++ if (height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (x_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
++ if (y_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
++
++ if (dispose_op != PNG_DISPOSE_OP_NONE &&
++ dispose_op != PNG_DISPOSE_OP_BACKGROUND &&
++ dispose_op != PNG_DISPOSE_OP_PREVIOUS)
++ png_error(png_ptr, "invalid dispose_op in fcTL");
++
++ if (blend_op != PNG_BLEND_OP_SOURCE &&
++ blend_op != PNG_BLEND_OP_OVER)
++ png_error(png_ptr, "invalid blend_op in fcTL");
++
++ if (blend_op == PNG_BLEND_OP_OVER) {
++ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'greyscale without alpha'");
++ else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) &&
++ !(png_ptr->color_type & PNG_COLOR_MASK_ALPHA))
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'truecolor without alpha'");
++ }
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if(is_hidden)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ return 1;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ void PNGAPI
+ png_set_unknown_chunks(png_structp png_ptr,
+diff -ruN libpng-1.2.27/pngtrans.c libpng-1.2.27.apng/pngtrans.c
+--- libpng-1.2.27/pngtrans.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngtrans.c 2008-05-01 09:49:58.000000000 +0000
+@@ -652,11 +652,10 @@
+ png_voidp PNGAPI
+ png_get_user_transform_ptr(png_structp png_ptr)
+ {
+-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
+ if (png_ptr == NULL) return (NULL);
++#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
+ return ((png_voidp)png_ptr->user_transform_ptr);
+-#else
+- return (NULL);
+ #endif
++ return (NULL);
+ }
+ #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
+diff -ruN libpng-1.2.27/pngwrite.c libpng-1.2.27.apng/pngwrite.c
+--- libpng-1.2.27/pngwrite.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngwrite.c 2008-05-01 09:49:58.000000000 +0000
+@@ -263,6 +263,10 @@
+ }
+ }
+ #endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (info_ptr->valid & PNG_INFO_acTL)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+ if (info_ptr->unknown_chunks_num)
+ {
+@@ -301,6 +305,10 @@
+ return;
+ if (!(png_ptr->mode & PNG_HAVE_IDAT))
+ png_error(png_ptr, "No IDATs written into file");
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
++#endif
+
+ /* see if user wants us to write information chunks */
+ if (info_ptr != NULL)
+@@ -1529,4 +1537,39 @@
+ params = params;
+ }
+ #endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head\n");
++
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if (!(info_ptr->valid & PNG_INFO_acTL))
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++
++ png_write_reset(png_ptr);
++
++ png_write_reinit(png_ptr, info_ptr, width, height);
++
++ if ( !(png_ptr->num_frames_written == 0 &&
++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++}
++
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop png_info)
++{
++ png_debug(1, "in png_write_frame_tail\n");
++
++ png_ptr->num_frames_written++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ #endif /* PNG_WRITE_SUPPORTED */
+diff -ruN libpng-1.2.27/pngwutil.c libpng-1.2.27.apng/pngwutil.c
+--- libpng-1.2.27/pngwutil.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngwutil.c 2008-05-01 09:49:58.000000000 +0000
+@@ -498,6 +498,11 @@
+ /* write the chunk */
+ png_write_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* initialize zlib with PNG info */
+ png_ptr->zstream.zalloc = png_zalloc;
+ png_ptr->zstream.zfree = png_zfree;
+@@ -619,6 +624,9 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ PNG_fdAT;
++#endif
+ #endif
+ png_debug(1, "in png_write_IDAT\n");
+
+@@ -661,7 +669,28 @@
+ "Invalid zlib compression method or flags in IDAT");
+ }
+
+- png_write_chunk(png_ptr, png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if(png_ptr->num_frames_written == 0)
++#endif
++ png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ else
++ {
++ png_byte buf[4];
++
++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length);
++
++ png_save_uint_32(buf, png_ptr->next_seq_num);
++ png_write_chunk_data(png_ptr, buf, 4);
++
++ png_write_chunk_data(png_ptr, data, length);
++
++ png_write_chunk_end(png_ptr);
++
++ png_ptr->next_seq_num++;
++ }
++#endif
++
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ }
+
+@@ -673,7 +702,7 @@
+ PNG_IEND;
+ #endif
+ png_debug(1, "in png_write_IEND\n");
+- png_write_chunk(png_ptr, png_IEND, png_bytep_NULL,
++ png_write_chunk(png_ptr, (png_bytep)png_IEND, png_bytep_NULL,
+ (png_size_t)0);
+ png_ptr->mode |= PNG_HAVE_IEND;
+ }
+@@ -1732,6 +1761,70 @@
+ }
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_acTL(png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_acTL;
++#endif
++ png_byte data[16];
++
++ png_debug(1, "in png_write_acTL\n");
++
++ png_ptr->num_frames_to_write = num_frames;
++
++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ num_frames--;
++
++ png_save_uint_32(data, num_frames);
++ png_save_uint_32(data + 4, num_plays);
++
++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8);
++}
++
++void /* PRIVATE */
++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_fcTL;
++#endif
++ png_byte data[26];
++
++ png_debug(1, "in png_write_fcTL\n");
++
++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0\n");
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++
++ /* more error checking */
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ png_save_uint_32(data, png_ptr->next_seq_num);
++ png_save_uint_32(data + 4, width);
++ png_save_uint_32(data + 8, height);
++ png_save_uint_32(data + 12, x_offset);
++ png_save_uint_32(data + 16, y_offset);
++ png_save_uint_16(data + 20, delay_num);
++ png_save_uint_16(data + 22, delay_den);
++ data[24] = dispose_op;
++ data[25] = blend_op;
++
++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26);
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ /* initializes the row writing capability of libpng */
+ void /* PRIVATE */
+ png_write_start_row(png_structp png_ptr)
+@@ -2799,4 +2892,39 @@
+ }
+ #endif
+ }
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_reset(png_structp png_ptr)
++{
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++}
++
++void /* PRIVATE */
++png_write_reinit(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height)
++{
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++
++ png_set_IHDR(png_ptr, info_ptr, width, height,
++ info_ptr->bit_depth, info_ptr->color_type,
++ info_ptr->interlace_type, info_ptr->compression_type,
++ info_ptr->filter_type);
++
++ png_ptr->width = width;
++ png_ptr->height = height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
++ png_ptr->usr_width = png_ptr->width;
++}
++#endif
+ #endif /* PNG_WRITE_SUPPORTED */
diff --git a/abs/core-testing/libpng/libpng-1.2.31-apng.patch b/abs/core-testing/libpng/libpng-1.2.31-apng.patch
new file mode 100644
index 0000000..92bd20a
--- /dev/null
+++ b/abs/core-testing/libpng/libpng-1.2.31-apng.patch
@@ -0,0 +1,1644 @@
+Index: pngread.c
+===================================================================
+--- pngread.c (révision 149)
++++ pngread.c (copie de travail)
+@@ -407,6 +407,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_uint_32 length = png_read_chunk_header(png_ptr);
+ PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
+@@ -451,6 +456,9 @@
+ !(png_ptr->mode & PNG_HAVE_PLTE))
+ png_error(png_ptr, "Missing PLTE before IDAT");
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ break;
+@@ -523,12 +531,97 @@
+ else if (!png_memcmp(chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
++
++ png_debug(0, "Reading frame head\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_acTL))
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
++
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
++
++ png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_IDAT;
++ PNG_fdAT;
++ PNG_fcTL;
++#endif
++ png_byte chunk_length[4];
++ png_uint_32 length;
++
++ png_read_data(png_ptr, chunk_length, 4);
++ length = png_get_uint_31(png_ptr, chunk_length);
++
++ png_reset_crc(png_ptr);
++ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
++
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* discard trailing fdATs for frames other than the first */
++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -565,6 +658,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_CONST PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_fdAT;
++ PNG_CONST PNG_IEND;
++#endif
+ PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
+ 0xff};
+ PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+@@ -694,13 +791,40 @@
+ {
+ if (!(png_ptr->zstream.avail_in))
+ {
+- while (!png_ptr->idat_size)
++ png_uint_32 bytes_to_skip = 0;
++
++ while (!png_ptr->idat_size || bytes_to_skip != 0)
+ {
+- png_crc_finish(png_ptr, 0);
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
+
+ png_ptr->idat_size = png_read_chunk_header(png_ptr);
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read == 0)
++ {
++#endif
+ if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
++ }
++
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
++
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
+ png_ptr->zstream.next_in = png_ptr->zbuf;
+@@ -718,6 +842,9 @@
+ png_error(png_ptr, "Extra compressed data");
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->num_frames_read++;
++#endif
+ break;
+ }
+ if (ret != Z_OK)
+@@ -969,6 +1096,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_uint_32 length = png_read_chunk_header(png_ptr);
+ PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
+@@ -1069,6 +1201,14 @@
+ else if (!png_memcmp(chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ } while (!(png_ptr->mode & PNG_HAVE_IEND));
+Index: pngget.c
+===================================================================
+--- pngget.c (révision 149)
++++ pngget.c (copie de travail)
+@@ -797,6 +797,167 @@
+ }
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_get_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *num_frames, png_uint_32 *num_plays)
++{
++ png_debug1(1, "in %s retrieval function\n", "acTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_acTL) &&
++ num_frames != NULL && num_plays != NULL)
++ {
++ *num_frames = info_ptr->num_frames;
++ *num_plays = info_ptr->num_plays;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_frames(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_frames()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_frames);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_plays(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_plays()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_plays);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *width, png_uint_32 *height,
++ png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den,
++ png_byte *dispose_op, png_byte *blend_op)
++{
++ png_debug1(1, "in %s retrieval function\n", "fcTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_fcTL) &&
++ width != NULL && height != NULL &&
++ x_offset != NULL && x_offset != NULL &&
++ delay_num != NULL && delay_den != NULL &&
++ dispose_op != NULL && blend_op != NULL)
++ {
++ *width = info_ptr->next_frame_width;
++ *height = info_ptr->next_frame_height;
++ *x_offset = info_ptr->next_frame_x_offset;
++ *y_offset = info_ptr->next_frame_y_offset;
++ *delay_num = info_ptr->next_frame_delay_num;
++ *delay_den = info_ptr->next_frame_delay_den;
++ *dispose_op = info_ptr->next_frame_dispose_op;
++ *blend_op = info_ptr->next_frame_blend_op;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_width()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_width);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_height()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_height);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_x_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_x_offset);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_y_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_y_offset);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_num()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_num);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_den()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_den);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_dispose_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_dispose_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_blend_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_blend_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr != NULL)
++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++
++ return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+Index: png.c
+===================================================================
+--- png.c (révision 149)
++++ png.c (copie de travail)
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+Index: png.h
+===================================================================
+--- png.h (révision 149)
++++ png.h (copie de travail)
+@@ -949,6 +949,19 @@
+ png_fixed_point int_y_blue;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
++#endif
++
+ } png_info;
+
+ typedef png_info FAR * png_infop;
+@@ -1050,6 +1063,8 @@
+ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -1090,7 +1105,11 @@
+ typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+ typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+ png_uint_32, int));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp,
++ png_uint_32));
+ #endif
++#endif
+
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+@@ -1421,6 +1440,39 @@
+ png_uint_32 user_height_max;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
++#endif
++#endif
++
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
++
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
++
+ /* New member added in libpng-1.0.25 and 1.2.17 */
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* storage for unknown chunk that the library doesn't recognize. */
+@@ -1747,6 +1799,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+ png_bytepp image));
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr,
++ png_infop png_info, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++
++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr,
++ png_infop png_info));
++#endif
++
+ /* writes the end of the PNG file. */
+ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+@@ -1995,6 +2059,11 @@
+ png_voidp progressive_ptr,
+ png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+ png_progressive_end_ptr end_fn));
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif
+
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2432,6 +2501,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_num_plays)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid)
++ PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++#endif /* PNG_APNG_SUPPORTED */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* provide a list of chunks and how they are to be handled, if the built-in
+ handling or default unknown chunk handling is not desired. Any chunks not
+@@ -2738,6 +2860,8 @@
+ #define PNG_BACKGROUND_IS_GRAY 0x800
+ #define PNG_HAVE_PNG_SIGNATURE 0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
++#define PNG_HAVE_acTL 0x4000
++#define PNG_HAVE_fcTL 0x8000L
+
+ /* flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -2878,6 +3002,9 @@
+ #define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
+ #define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
+ #define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
++#define PNG_acTL png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'}
++#define PNG_fcTL png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'}
++#define PNG_fdAT png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'}
+
+ #ifdef PNG_USE_GLOBAL_ARRAYS
+ PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
+@@ -2901,6 +3028,9 @@
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_acTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fcTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fdAT[5];
+ #endif /* PNG_USE_GLOBAL_ARRAYS */
+
+ #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
+@@ -3175,6 +3305,17 @@
+ #endif
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays));
++
++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++#endif
++
+ /* Called when finished processing a row of data */
+ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
+
+@@ -3226,6 +3367,20 @@
+ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* private, reset some things to become ready for reading next frame */
++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr));
++#endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++/* private, reset some things to become ready for writing next frame */
++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 width, png_uint_32 height));
++#endif
++
+ /* these are the functions that do the transformations */
+ #if defined(PNG_READ_FILLER_SUPPORTED)
+ PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
+@@ -3441,6 +3596,18 @@
+ png_uint_32 length));
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr));
++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr,
++ png_uint_32 length));
++#endif
++
+ PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 length));
+
+Index: pngwrite.c
+===================================================================
+--- pngwrite.c (révision 149)
++++ pngwrite.c (copie de travail)
+@@ -261,6 +261,10 @@
+ }
+ }
+ #endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (info_ptr->valid & PNG_INFO_acTL)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+ if (info_ptr->unknown_chunks_num)
+ {
+@@ -299,6 +303,10 @@
+ return;
+ if (!(png_ptr->mode & PNG_HAVE_IDAT))
+ png_error(png_ptr, "No IDATs written into file");
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
++#endif
+
+ /* see if user wants us to write information chunks */
+ if (info_ptr != NULL)
+@@ -1527,4 +1535,39 @@
+ params = params;
+ }
+ #endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head\n");
++
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if (!(info_ptr->valid & PNG_INFO_acTL))
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++
++ png_write_reset(png_ptr);
++
++ png_write_reinit(png_ptr, info_ptr, width, height);
++
++ if ( !(png_ptr->num_frames_written == 0 &&
++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++}
++
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop png_info)
++{
++ png_debug(1, "in png_write_frame_tail\n");
++
++ png_ptr->num_frames_written++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ #endif /* PNG_WRITE_SUPPORTED */
+Index: pngconf.h
+===================================================================
+--- pngconf.h (révision 149)
++++ pngconf.h (copie de travail)
+@@ -925,6 +925,10 @@
+ # define PNG_READ_zTXt_SUPPORTED
+ # define PNG_zTXt_SUPPORTED
+ #endif
++#ifndef PNG_NO_READ_APNG
++# define PNG_READ_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++#endif
+ #ifndef PNG_NO_READ_UNKNOWN_CHUNKS
+ # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+@@ -1067,6 +1071,12 @@
+ # define PNG_zTXt_SUPPORTED
+ # endif
+ #endif
++#ifndef PNG_NO_WRITE_APNG
++# define PNG_WRITE_APNG_SUPPORTED
++# ifndef PNG_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++# endif
++#endif
+ #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
+ # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+Index: pngpread.c
+===================================================================
+--- pngpread.c (révision 149)
++++ pngpread.c (copie de travail)
+@@ -192,6 +192,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ /* First we make sure we have enough data for the 4 byte chunk name
+ * and the 4 byte chunk length before proceeding with decoding the
+@@ -215,7 +220,104 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ }
+-
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->buffer_size < 4)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_ensure_sequence_number(png_ptr, 4);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ {
++ /* discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++
++ return;
++ }
++ }
++ else if(!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++
++ return;
++ }
++ else
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++
++ return;
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ if(png_ptr->mode & PNG_AFTER_IDAT)
+ png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
+@@ -295,6 +397,9 @@
+ png_error(png_ptr, "Too many IDAT's found");
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+@@ -490,6 +595,35 @@
+ png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
+ }
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fdAT(png_ptr, info_ptr, png_ptr->push_length);
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
+ else
+ {
+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
+@@ -660,13 +794,17 @@
+ png_push_read_IDAT(png_structp png_ptr)
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+- PNG_CONST PNG_IDAT;
++ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
+ #endif
++#endif
+ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
+ {
+ png_byte chunk_length[4];
+
+- if (png_ptr->buffer_size < 8)
++ if (png_ptr->buffer_size < 12)
+ {
+ png_push_save_buffer(png_ptr);
+ return;
+@@ -678,15 +816,59 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4)
++ && png_ptr->num_frames_read > 0)
+ {
++ if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++ if ( png_memcmp(png_ptr->chunk_name, png_IDAT, 4)
++ && (png_ptr->num_frames_read == 0) )
++ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
+ if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
+ png_error(png_ptr, "Not enough compressed data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++#endif
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if(png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ if (png_ptr->idat_size && png_ptr->save_buffer_size)
+ {
+@@ -1582,6 +1764,17 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
++{
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++}
++#endif
++
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_structp png_ptr)
+ {
+Index: pngset.c
+===================================================================
+--- pngset.c (révision 149)
++++ pngset.c (copie de travail)
+@@ -363,6 +363,11 @@
+ info_ptr->rowbytes = (png_size_t)0;
+ else
+ info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
++
++#if defined(PNG_APNG_SUPPORTED)
++ /* for non-animated png. this may be overritten from an acTL chunk later */
++ info_ptr->num_frames = 1;
++#endif
+ }
+
+ #if defined(PNG_oFFs_SUPPORTED)
+@@ -1043,6 +1048,141 @@
+ }
+ #endif /* PNG_sPLT_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_set_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++ png_debug1(1, "in %s storage function\n", "acTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_acTL() with NULL png_ptr "
++ "or info_ptr ignored");
++ return (0);
++ }
++ if (num_frames == 0)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames zero");
++ return (0);
++ }
++ if (num_frames > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames > 2^31-1");
++ return (0);
++ }
++ if (num_plays > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_plays "
++ "> 2^31-1");
++ return (0);
++ }
++
++ info_ptr->num_frames = num_frames;
++ info_ptr->num_plays = num_plays;
++
++ info_ptr->valid |= PNG_INFO_acTL;
++
++ return (1);
++}
++
++/* delay_num and delay_den can hold any 16-bit values including zero */
++png_uint_32 PNGAPI
++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ png_debug1(1, "in %s storage function\n", "fcTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr "
++ "ignored");
++ return (0);
++ }
++
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ info_ptr->next_frame_width = width;
++ info_ptr->next_frame_height = height;
++ info_ptr->next_frame_x_offset = x_offset;
++ info_ptr->next_frame_y_offset = y_offset;
++ info_ptr->next_frame_delay_num = delay_num;
++ info_ptr->next_frame_delay_den = delay_den;
++ info_ptr->next_frame_dispose_op = dispose_op;
++ info_ptr->next_frame_blend_op = blend_op;
++
++ info_ptr->valid |= PNG_INFO_fcTL;
++
++ return (1);
++}
++
++void /* PRIVATE */
++png_ensure_fcTL_is_valid(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ if (width + x_offset > png_ptr->first_frame_width ||
++ height + y_offset > png_ptr->first_frame_height)
++ png_error(png_ptr, "dimensions of a frame are greater than"
++ "the ones in IHDR");
++ if (width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
++ if (height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (x_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
++ if (y_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
++
++ if (dispose_op != PNG_DISPOSE_OP_NONE &&
++ dispose_op != PNG_DISPOSE_OP_BACKGROUND &&
++ dispose_op != PNG_DISPOSE_OP_PREVIOUS)
++ png_error(png_ptr, "invalid dispose_op in fcTL");
++
++ if (blend_op != PNG_BLEND_OP_SOURCE &&
++ blend_op != PNG_BLEND_OP_OVER)
++ png_error(png_ptr, "invalid blend_op in fcTL");
++
++ if (blend_op == PNG_BLEND_OP_OVER) {
++ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'greyscale without alpha'");
++ else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) &&
++ !(png_ptr->color_type & PNG_COLOR_MASK_ALPHA))
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'truecolor without alpha'");
++ }
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if(is_hidden)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ return 1;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ void PNGAPI
+ png_set_unknown_chunks(png_structp png_ptr,
+Index: pngrutil.c
+===================================================================
+--- pngrutil.c (révision 149)
++++ pngrutil.c (copie de travail)
+@@ -414,6 +414,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2220,6 +2225,168 @@
+ }
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_acTL)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if(didSet)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "fcTL for the first frame must have zero offset");
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ png_error(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++
++ /* the set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++}
++
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
++{
++ png_byte data[4];
++ png_uint_32 sequence_number;
++
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
++
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* This function is called when we haven't found a handler for a
+ chunk. If there isn't a problem with the chunk itself (ie bad
+ chunk name, CRC, or a critical chunk), the chunk is silently ignored
+@@ -3195,8 +3362,10 @@
+ if (row_bytes + 64 > png_ptr->old_big_row_buf_size)
+ {
+ png_free(png_ptr, png_ptr->big_row_buf);
+- png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
+- png_ptr->row_buf = png_ptr->big_row_buf+32;
++ if (png_ptr->big_row_buf == NULL)
++ png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
++ if (png_ptr->row_buf == NULL)
++ png_ptr->row_buf = png_ptr->big_row_buf+32;
+ png_ptr->old_big_row_buf_size = row_bytes+64;
+ }
+
+@@ -3226,4 +3395,82 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
++{
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++}
++
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++}
++
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ /* start of interlace block */
++ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
++
++ /* offset to next interlace block */
++ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
++
++ /* start of interlace block in the y direction */
++ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
++
++ /* offset to next interlace block in the y direction */
++ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
++#endif
++ png_uint_32 row_bytes;
++
++ if (png_ptr->interlaced)
++ {
++ if (!(png_ptr->transformations & PNG_INTERLACE))
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
++
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++
++ row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
++
++ png_ptr->irowbytes = (png_size_t)row_bytes;
++ if((png_uint_32)png_ptr->irowbytes != row_bytes)
++ png_error(png_ptr, "png_progressive_read_reset(): Rowbytes "
++ "overflow");
++ }
++ else
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ png_ptr->irowbytes = png_ptr->rowbytes + 1;
++ }
++
++ png_ptr->flags &= ~PNG_FLAG_ZLIB_FINISHED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
+ #endif /* PNG_READ_SUPPORTED */
+Index: pngwutil.c
+===================================================================
+--- pngwutil.c (révision 149)
++++ pngwutil.c (copie de travail)
+@@ -506,6 +506,11 @@
+ /* write the chunk */
+ png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13);
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* initialize zlib with PNG info */
+ png_ptr->zstream.zalloc = png_zalloc;
+ png_ptr->zstream.zfree = png_zfree;
+@@ -628,6 +633,9 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ PNG_fdAT;
++#endif
+ #endif
+ png_debug(1, "in png_write_IDAT\n");
+
+@@ -670,7 +678,28 @@
+ "Invalid zlib compression method or flags in IDAT");
+ }
+
+- png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if(png_ptr->num_frames_written == 0)
++#endif
++ png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ else
++ {
++ png_byte buf[4];
++
++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length);
++
++ png_save_uint_32(buf, png_ptr->next_seq_num);
++ png_write_chunk_data(png_ptr, buf, 4);
++
++ png_write_chunk_data(png_ptr, data, length);
++
++ png_write_chunk_end(png_ptr);
++
++ png_ptr->next_seq_num++;
++ }
++#endif
++
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ }
+
+@@ -1755,6 +1784,70 @@
+ }
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_acTL(png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_acTL;
++#endif
++ png_byte data[16];
++
++ png_debug(1, "in png_write_acTL\n");
++
++ png_ptr->num_frames_to_write = num_frames;
++
++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ num_frames--;
++
++ png_save_uint_32(data, num_frames);
++ png_save_uint_32(data + 4, num_plays);
++
++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8);
++}
++
++void /* PRIVATE */
++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_fcTL;
++#endif
++ png_byte data[26];
++
++ png_debug(1, "in png_write_fcTL\n");
++
++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0\n");
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++
++ /* more error checking */
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ png_save_uint_32(data, png_ptr->next_seq_num);
++ png_save_uint_32(data + 4, width);
++ png_save_uint_32(data + 8, height);
++ png_save_uint_32(data + 12, x_offset);
++ png_save_uint_32(data + 16, y_offset);
++ png_save_uint_16(data + 20, delay_num);
++ png_save_uint_16(data + 22, delay_den);
++ data[24] = dispose_op;
++ data[25] = blend_op;
++
++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26);
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ /* initializes the row writing capability of libpng */
+ void /* PRIVATE */
+ png_write_start_row(png_structp png_ptr)
+@@ -2824,4 +2917,39 @@
+ }
+ #endif
+ }
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_reset(png_structp png_ptr)
++{
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++}
++
++void /* PRIVATE */
++png_write_reinit(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height)
++{
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++
++ png_set_IHDR(png_ptr, info_ptr, width, height,
++ info_ptr->bit_depth, info_ptr->color_type,
++ info_ptr->interlace_type, info_ptr->compression_type,
++ info_ptr->filter_type);
++
++ png_ptr->width = width;
++ png_ptr->height = height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
++ png_ptr->usr_width = png_ptr->width;
++}
++#endif
+ #endif /* PNG_WRITE_SUPPORTED */
+Index: pngrtran.c
+===================================================================
+--- pngrtran.c (révision 149)
++++ pngrtran.c (copie de travail)
+@@ -1293,7 +1293,7 @@
+ * or png_read_update_info() after setting transforms that expand
+ * pixels. This check added to libpng-1.2.19 */
+ #if (PNG_WARN_UNINITIALIZED_ROW==1)
+- png_error(png_ptr, "Uninitialized row");
++ png_warning(png_ptr, "Uninitialized row");
+ #else
+ png_warning(png_ptr, "Uninitialized row");
+ #endif
diff --git a/abs/core-testing/librsvg/PKGBUILD b/abs/core-testing/librsvg/PKGBUILD
new file mode 100644
index 0000000..c4f4a11
--- /dev/null
+++ b/abs/core-testing/librsvg/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=librsvg
+pkgver=2.22.2
+pkgrel=1
+pkgdesc="SAX-based renderer for SVG files into a GdkPixbuf"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gtk2>=2.12.9' 'libcroco>=0.6.1' 'libgsf>=1.14.8')
+makedepends=('perlxml' 'pkgconfig')
+options=('!libtool')
+url="http://librsvg.sourceforge.net/"
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.22/${pkgname}-${pkgver}.tar.bz2)
+install=librsvg.install
+md5sums=('aae602677ce201b1a0ed6a0c18c207f2')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --with-croco \
+ --disable-mozilla-plugin --with-svgz
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -rf ${startdir}/pkg/usr/share/gtk-doc
+ rm -rf ${startdir}/pkg/usr/lib/mozilla
+ rm ${startdir}/pkg/usr/lib/gtk-2.0/*/{engines,loaders}/*.a
+}
diff --git a/abs/core-testing/librsvg/librsvg.install b/abs/core-testing/librsvg/librsvg.install
new file mode 100644
index 0000000..8a6dd5a
--- /dev/null
+++ b/abs/core-testing/librsvg/librsvg.install
@@ -0,0 +1,14 @@
+# arg 1: the new package version
+post_install() {
+ #We need to update the pixbuf loaders to let GTK support SVG images
+ usr/bin/gtk-query-immodules-2.0 > etc/gtk-2.0/gtk.immodules
+ usr/bin/gdk-pixbuf-query-loaders > etc/gtk-2.0/gdk-pixbuf.loaders
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
diff --git a/abs/core-testing/libsasl/PKGBUILD b/abs/core-testing/libsasl/PKGBUILD
new file mode 100644
index 0000000..d9b49b8
--- /dev/null
+++ b/abs/core-testing/libsasl/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 5269 2008-07-14 11:33:26Z pierre $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libsasl
+pkgver=2.1.22
+pkgrel=7
+pkgdesc="Cyrus Simple Authentication Service Layer (SASL) library"
+arch=(i686 x86_64)
+url="http://asg.web.cmu.edu/cyrus/download/"
+license=('custom')
+depends=('db>=4.7')
+install=libsasl.install
+source=(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-${pkgver}.tar.gz
+ cyrus-sasl-2.1.19-checkpw.c.patch db-4.7.patch)
+md5sums=('45dde9d19193ae9dd388eb68b2027bc9'
+ 'e27ddff076342e7a3041c4759817d04b'
+ '71a3b7454f4d7cc2966b347bdf03f2fc')
+options=('!makeflags')
+
+build() {
+ cd ${srcdir}/cyrus-sasl-${pkgver}
+ patch -Np0 -i ${srcdir}/cyrus-sasl-2.1.19-checkpw.c.patch || return 1
+ patch -Np0 -i ${srcdir}/db-4.7.patch || return 1
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --disable-anon \
+ --disable-cram \
+ --disable-digest \
+ --disable-gssapi \
+ --enable-login \
+ --disable-otp \
+ --enable-plain
+ for dir in include lib sasldb plugins utils; do
+ pushd ${dir} || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ popd
+ done
+
+ # install license
+ install -D -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING || return 1
+}
diff --git a/abs/core-testing/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch b/abs/core-testing/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch
new file mode 100644
index 0000000..f7bf44b
--- /dev/null
+++ b/abs/core-testing/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch
@@ -0,0 +1,170 @@
+diff -ur ../cyrus-sasl-2.1.19.orig/lib/Makefile.in ./lib/Makefile.in
+--- ../cyrus-sasl-2.1.19.orig/lib/Makefile.in 2004-07-02 21:40:15.000000000 +0200
++++ ./lib/Makefile.in 2004-09-07 13:21:22.746680576 +0200
+@@ -120,7 +120,7 @@
+ JAVA_TRUE = @JAVA_TRUE@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+-LIBS = @LIBS@
++LIBS = -lcrypt @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIB_CRYPT = @LIB_CRYPT@
+ LIB_DES = @LIB_DES@
+diff -ur ../cyrus-sasl-2.1.19.orig/lib/checkpw.c ./lib/checkpw.c
+--- ../cyrus-sasl-2.1.19.orig/lib/checkpw.c 2004-03-17 14:58:13.000000000 +0100
++++ ./lib/checkpw.c 2004-09-07 13:21:12.645916147 +0200
+@@ -94,6 +94,23 @@
+ # endif
+ #endif
+
++/******************************
++ * crypt(3) patch start *
++ ******************************/
++char *crypt(const char *key, const char *salt);
++
++/* cleartext password formats */
++#define PASSWORD_FORMAT_CLEARTEXT 1
++#define PASSWORD_FORMAT_CRYPT 2
++#define PASSWORD_FORMAT_CRYPTTRAD 3
++#define PASSWORD_SALT_BUF_LEN 22
++
++/* weeds out crypt(3) password's salt */
++int _sasl_get_salt (char *dest, char *src, int format);
++
++/******************************
++ * crypt(3) patch stop *
++ ******************************/
+
+ /* we store the following secret to check plaintext passwords:
+ *
+@@ -143,7 +160,51 @@
+ "*cmusaslsecretPLAIN",
+ NULL };
+ struct propval auxprop_values[3];
+-
++
++ /******************************
++ * crypt(3) patch start *
++ * for password format check *
++ ******************************/
++ sasl_getopt_t *getopt;
++ void *context;
++ const char *p = NULL;
++ /**
++ * MD5: 12 char salt
++ * BLOWFISH: 16 char salt
++ */
++ char salt[PASSWORD_SALT_BUF_LEN];
++ int password_format;
++
++ /* get password format from auxprop configuration */
++ if (_sasl_getcallback(conn, SASL_CB_GETOPT, &getopt, &context) == SASL_OK) {
++ getopt(context, NULL, "password_format", &p, NULL);
++ }
++
++ /* set password format */
++ if (p) {
++ /*
++ memset(pass_format_str, '\0', PASSWORD_FORMAT_STR_LEN);
++ strncpy(pass_format_str, p, (PASSWORD_FORMAT_STR_LEN - 1));
++ */
++ /* modern, modular crypt(3) */
++ if (strncmp(p, "crypt", 11) == 0)
++ password_format = PASSWORD_FORMAT_CRYPT;
++ /* traditional crypt(3) */
++ else if (strncmp(p, "crypt_trad", 11) == 0)
++ password_format = PASSWORD_FORMAT_CRYPTTRAD;
++ /* cleartext password */
++ else
++ password_format = PASSWORD_FORMAT_CLEARTEXT;
++ } else {
++ /* cleartext password */
++ password_format = PASSWORD_FORMAT_CLEARTEXT;
++ }
++
++ /******************************
++ * crypt(3) patch stop *
++ * for password format check *
++ ******************************/
++
+ if (!conn || !userstr)
+ return SASL_BADPARAM;
+
+@@ -180,14 +241,31 @@
+ goto done;
+ }
+
+- /* At the point this has been called, the username has been canonified
+- * and we've done the auxprop lookup. This should be easy. */
+- if(auxprop_values[0].name
+- && auxprop_values[0].values
+- && auxprop_values[0].values[0]
+- && !strcmp(auxprop_values[0].values[0], passwd)) {
+- /* We have a plaintext version and it matched! */
+- return SASL_OK;
++
++ /******************************
++ * crypt(3) patch start *
++ ******************************/
++
++ /* get salt */
++ _sasl_get_salt(salt, (char *) auxprop_values[0].values[0], password_format);
++
++ /* crypt(3)-ed password? */
++ if (password_format != PASSWORD_FORMAT_CLEARTEXT) {
++ /* compare password */
++ if (auxprop_values[0].name && auxprop_values[0].values && auxprop_values[0].values[0] && strcmp(crypt(passwd, salt), auxprop_values[0].values[0]) == 0)
++ return SASL_OK;
++ else
++ ret = SASL_BADAUTH;
++ }
++ else if (password_format == PASSWORD_FORMAT_CLEARTEXT) {
++ /* compare passwords */
++ if (auxprop_values[0].name && auxprop_values[0].values && auxprop_values[0].values[0] && strcmp(auxprop_values[0].values[0], passwd) == 0)
++ return SASL_OK;
++ else
++ ret = SASL_BADAUTH;
++ /******************************
++ * crypt(3) patch stop *
++ ******************************/
+ } else if(auxprop_values[1].name
+ && auxprop_values[1].values
+ && auxprop_values[1].values[0]) {
+@@ -975,3 +1053,37 @@
+ #endif
+ { NULL, NULL }
+ };
++
++/* weeds out crypt(3) password's salt */
++int _sasl_get_salt (char *dest, char *src, int format) {
++ int num; /* how many characters is salt long? */
++ switch (format) {
++ case PASSWORD_FORMAT_CRYPT:
++ /* md5 crypt */
++ if (src[1] == '1')
++ num = 12;
++ /* blowfish crypt */
++ else if (src[1] == '2')
++ num = (src[1] == '2' && src[2] == 'a') ? 17 : 16;
++ /* traditional crypt */
++ else
++ num = 2;
++ break;
++
++ case PASSWORD_FORMAT_CRYPTTRAD:
++ num = 2;
++ break;
++
++ default:
++ return 1;
++ }
++
++ /* destroy destination */
++ memset(dest, '\0', (num + 1));
++
++ /* copy salt to destination */
++ strncpy(dest, src, num);
++
++ return 1;
++}
++
diff --git a/abs/core-testing/libsasl/db-4.7.patch b/abs/core-testing/libsasl/db-4.7.patch
new file mode 100644
index 0000000..8937d76
--- /dev/null
+++ b/abs/core-testing/libsasl/db-4.7.patch
@@ -0,0 +1,20 @@
+--- configure 2006-05-18 21:30:13.000000000 +0200
++++ configure.new 2007-09-29 00:22:42.000000000 +0200
+@@ -5125,7 +5125,7 @@
+ fi
+
+ saved_LIBS=$LIBS
+- for dbname in db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
++ for dbname in db-4.7 db4.7 db47 db-4.54 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
+ do
+ LIBS="$saved_LIBS -l$dbname"
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -5882,7 +5882,7 @@
+ fi
+
+ saved_LIBS=$LIBS
+- for dbname in db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
++ for dbname in db-4.7 db4.7 db47 db-4.54 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
+ do
+ LIBS="$saved_LIBS -l$dbname"
+ cat >conftest.$ac_ext <<_ACEOF
diff --git a/abs/core-testing/libsasl/libsasl.install b/abs/core-testing/libsasl/libsasl.install
new file mode 100644
index 0000000..57d4e3f
--- /dev/null
+++ b/abs/core-testing/libsasl/libsasl.install
@@ -0,0 +1,18 @@
+post_install() {
+cat << _EOF
+==>
+==> cyrus-sasl has been split up into several standalone packages.
+==>
+==> - If you use saslauthd, make sure you have cyrus-sasl installed
+==>
+==> - If you use authentication modules other than sasldb,
+==> install cyrus-sasl-plugins
+==>
+_EOF
+
+}
+
+op=$1
+shift
+$op $*
+
diff --git a/abs/core-testing/libsm/PKGBUILD b/abs/core-testing/libsm/PKGBUILD
new file mode 100644
index 0000000..60fb07d
--- /dev/null
+++ b/abs/core-testing/libsm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4411 2008-07-06 20:50:38Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libsm
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X11 Session Management library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libice' 'xproto' 'e2fsprogs')
+makedepends=('pkgconfig' 'xtrans')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libSM-${pkgver}.tar.bz2)
+md5sums=('05a04c2b6382fb0054f6c70494e22733')
+
+build() {
+ cd ${startdir}/src/libSM-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/libsmbios/PKGBUILD b/abs/core-testing/libsmbios/PKGBUILD
new file mode 100644
index 0000000..1c1ba7b
--- /dev/null
+++ b/abs/core-testing/libsmbios/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 511 2008-04-20 12:39:44Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Alessio 'mOLOk' Bolognino <themolok@gmail.com>
+# Contributor: daniel g. siegel <dgsiegel@gmail.com>
+
+pkgname=libsmbios
+pkgver=2.0.2
+pkgrel=1
+pkgdesc="A library for providing access to as much BIOS information as possible"
+arch=(i686 x86_64)
+url="http://linux.dell.com/libsmbios/main/index.html"
+license=('GPL' 'custom')
+depends=('gcc-libs>=4.3.0')
+source=(http://linux.dell.com/libsmbios/download/${pkgname}/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz)
+options=('!libtool')
+md5sums=('3d079038c08495c2a46ec20544168bb4')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --disable-static || return 1
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg/ install || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/include
+
+ cp -r include/smbios ${startdir}/pkg/usr/include/smbios || return 1
+ find ${startdir}/pkg/usr/include/smbios -type d -exec chmod 0755 {} \; || return 1
+ find ${startdir}/pkg/usr/include/smbios -type f -exec chmod 0644 {} \; || return 1
+ chown -R root:root ${startdir}/pkg/usr/include/smbios || return 1
+
+ rm -f ${startdir}/pkg/usr/include/smbios/version.h.in
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING-OSL ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libsndfile/PKGBUILD b/abs/core-testing/libsndfile/PKGBUILD
new file mode 100644
index 0000000..79cda51
--- /dev/null
+++ b/abs/core-testing/libsndfile/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Arjan Timmerman <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=libsndfile
+pkgver=1.0.17
+pkgrel=2
+options=(!libtool)
+pkgdesc="a C library for reading and writing files containing sampled sound"
+arch=(i686 x86_64)
+url="http://www.mega-nerd.com/libsndfile"
+depends=('alsa-lib' 'flac>=1.1.4')
+source=(http://www.mega-nerd.com/libsndfile/$pkgname-$pkgver.tar.gz flac-1.1.4.dpatch lossy_comp_test-overflow.dpatch overflow.dpatch)
+
+md5sums=('2d126c35448503f6dbe33934d9581f6b'
+ '839e5132d9d379779b0d3132cad65017'
+ '2241d8b0a0961a956e36ca0fb0fead51'
+ '1731b62a80257de069a72435f39ece00')
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../flac-1.1.4.dpatch || return 1
+ patch -Np1 -i ../lossy_comp_test-overflow.dpatch || return 1
+ patch -Np1 -i ../overflow.dpatch || return 1
+ aclocal
+ automake
+ ./configure --prefix=/usr --disable-sqlite
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/libsndfile/flac-1.1.4.dpatch b/abs/core-testing/libsndfile/flac-1.1.4.dpatch
new file mode 100644
index 0000000..a0b68b5
--- /dev/null
+++ b/abs/core-testing/libsndfile/flac-1.1.4.dpatch
@@ -0,0 +1,486 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## flac-1.1.4.dpatch by Samuel Mimram <smimram@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Adapt to FLAC 1.1.4 API.
+## DP: Patch stolen from http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/lib/libsndfile/flac-1.1.4.patch.
+
+@DPATCH@
+diff -ruN libsndfile-1.0.17/configure libsndfile-1.0.17-new/configure
+--- libsndfile-1.0.17/configure 2006-08-31 12:55:50.000000000 +0200
++++ libsndfile-1.0.17-new/configure 2008-04-18 18:56:48.000000000 +0200
+@@ -31226,7 +31226,8 @@
+ _ACEOF
+
+ fi
+- FLAC_LIBS="-lFLAC"
++ # in FLAC 1.1.3 libOggFLAC was merged into libFLAC, hence we need -logg
++ FLAC_LIBS="-lFLAC -logg"
+ fi
+ fi
+
+diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c
+--- libsndfile-1.0.17~/src/flac.c 2006-08-31 11:22:19.000000000 +0200
++++ libsndfile-1.0.17/src/flac.c 2007-06-15 12:38:53.000000000 +0200
+@@ -46,6 +46,13 @@
+ #include "sfendian.h"
+ #include "float_cast.h"
+
++/* FLAC 1.1.3 has FLAC_API_VERSION_CURRENT == 8 */
++#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
++#define LEGACY_FLAC
++#else
++#undef LEGACY_FLAC
++#endif
++
+ /*------------------------------------------------------------------------------
+ ** Private static functions.
+ */
+@@ -60,8 +67,14 @@
+ } PFLAC_PCM ;
+
+ typedef struct
+-{ FLAC__SeekableStreamDecoder *fsd ;
++{
++#ifdef LEGACY_FLAC
++ FLAC__SeekableStreamDecoder *fsd ;
+ FLAC__SeekableStreamEncoder *fse ;
++#else
++ FLAC__StreamDecoder *fsd ;
++ FLAC__StreamEncoder *fse ;
++#endif
+ PFLAC_PCM pcmtype ;
+ void* ptr ;
+ unsigned pos, len, remain ;
+@@ -108,6 +121,7 @@
+ static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
+
+ /* Decoder Callbacks */
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderReadStatus sf_flac_read_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ;
+ static FLAC__SeekableStreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
+ static FLAC__SeekableStreamDecoderTellStatus sf_flac_tell_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
+@@ -116,13 +130,29 @@
+ static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
+ static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
+ static void sf_flac_error_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
++#else
++static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], size_t *bytes, void *client_data) ;
++static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
++static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
++static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ;
++static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ;
++static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
++static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
++static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
++#endif
+
+ /* Encoder Callbacks */
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
+ #ifdef HAVE_FLAC_1_1_1
+ static FLAC__SeekableStreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
+ #endif
+ static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ;
++#else
++static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
++static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
++static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) ;
++#endif
+
+ static const int legal_sample_rates [] =
+ { 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000
+@@ -283,51 +313,99 @@
+ } /* flac_buffer_copy */
+
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderReadStatus
+ sf_flac_read_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data)
++#else
++static FLAC__StreamDecoderReadStatus
++sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], size_t *bytes, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ *bytes = psf_fread (buffer, 1, *bytes, psf) ;
+ if (*bytes > 0 && psf->error == 0)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR ;
++#else
++ return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ;
++
++ return FLAC__STREAM_DECODER_READ_STATUS_ABORT ;
++#endif
+ } /* sf_flac_read_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderSeekStatus
+ sf_flac_seek_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamDecoderSeekStatus
++sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_SEEK_STATUS_OK ;
++#endif
+ } /* sf_flac_seek_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderTellStatus
+ sf_flac_tell_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamDecoderTellStatus
++sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ *absolute_byte_offset = psf_ftell (psf) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_TELL_STATUS_OK ;
++#endif
+ } /* sf_flac_tell_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderLengthStatus
+ sf_flac_length_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
++#else
++static FLAC__StreamDecoderLengthStatus
++sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if ((*stream_length = psf->filelength) == 0)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ;
++#endif
+ } /* sf_flac_length_callback */
+
+ static FLAC__bool
++#ifdef LEGACY_FLAC
+ sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *UNUSED (decoder), void *client_data)
++#else
++sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if (psf_ftell (psf) == psf->filelength)
+@@ -337,7 +415,11 @@
+ } /* sf_flac_eof_callback */
+
+ static FLAC__StreamDecoderWriteStatus
++#ifdef LEGACY_FLAC
+ sf_flac_write_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
++#else
++sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+
+@@ -353,7 +435,11 @@
+ } /* sf_flac_write_callback */
+
+ static void
++#ifdef LEGACY_FLAC
+ sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
++#else
++sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ switch (metadata->type)
+@@ -387,7 +473,11 @@
+ } /* sf_flac_meta_callback */
+
+ static void
++#ifdef LEGACY_FLAC
+ sf_flac_error_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
++#else
++sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ;
+@@ -407,17 +497,29 @@
+ return ;
+ } /* sf_flac_error_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamEncoderSeekStatus
+ sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamEncoderSeekStatus
++sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK ;
++#else
++ return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ;
++
++ return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ;
++#endif
+ } /* sf_flac_enc_seek_callback */
+
++#ifdef LEGACY_FLAC
+ #ifdef HAVE_FLAC_1_1_1
+ static FLAC__SeekableStreamEncoderTellStatus
+ sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
+@@ -430,9 +532,25 @@
+ return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK ;
+ } /* sf_flac_enc_tell_callback */
+ #endif
++#else
++static FLAC__StreamEncoderTellStatus
++sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
++
++ *absolute_byte_offset = psf_ftell (psf) ;
++ if (psf->error)
++ return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ;
++
++ return FLAC__STREAM_ENCODER_TELL_STATUS_OK ;
++} /* sf_flac_enc_tell_callback */
++#endif
+
+ static FLAC__StreamEncoderWriteStatus
++#ifdef LEGACY_FLAC
+ sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
++#else
++sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], size_t bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if (psf_fwrite (buffer, 1, bytes, psf) == bytes && psf->error == 0)
+@@ -509,15 +627,27 @@
+ return 0 ;
+
+ if (psf->mode == SFM_WRITE)
+- { FLAC__seekable_stream_encoder_finish (pflac->fse) ;
++ {
++#ifdef LEGACY_FLAC
++ FLAC__seekable_stream_encoder_finish (pflac->fse) ;
+ FLAC__seekable_stream_encoder_delete (pflac->fse) ;
++#else
++ FLAC__stream_encoder_finish (pflac->fse) ;
++ FLAC__stream_encoder_delete (pflac->fse) ;
++#endif
+ if (pflac->encbuffer)
+ free (pflac->encbuffer) ;
+ } ;
+
+ if (psf->mode == SFM_READ)
+- { FLAC__seekable_stream_decoder_finish (pflac->fsd) ;
++ {
++#ifdef LEGACY_FLAC
++ FLAC__seekable_stream_decoder_finish (pflac->fsd) ;
+ FLAC__seekable_stream_decoder_delete (pflac->fsd) ;
++#else
++ FLAC__stream_decoder_finish (pflac->fsd) ;
++ FLAC__stream_decoder_delete (pflac->fsd) ;
++#endif
+ } ;
+
+ for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++)
+@@ -546,17 +676,6 @@
+ return SFE_FLAC_BAD_SAMPLE_RATE ;
+
+ psf_fseek (psf, 0, SEEK_SET) ;
+- if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL)
+- return SFE_FLAC_NEW_DECODER ;
+- FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ;
+- FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ;
+-
+-#ifdef HAVE_FLAC_1_1_1
+- FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ;
+-#endif
+- FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ;
+- FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
+- FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
+
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_S8 :
+@@ -574,12 +693,36 @@
+ break ;
+ } ;
+
++#ifdef LEGACY_FLAC
++ if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++ FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ;
++ FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ;
++
++#ifdef HAVE_FLAC_1_1_1
++ FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ;
++#endif
++ FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ;
++ FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
++ FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
+ FLAC__seekable_stream_encoder_set_bits_per_sample (pflac->fse, bps) ;
+
+ if ((bps = FLAC__seekable_stream_encoder_init (pflac->fse)) != FLAC__SEEKABLE_STREAM_DECODER_OK)
+ { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__seekable_stream_encoder_get_resolved_state_string (pflac->fse)) ;
+ return SFE_FLAC_INIT_DECODER ;
+ } ;
++#else
++ if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++ FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
++ FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
++ FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps) ;
++
++ if ((bps = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
++ { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString[bps]) ;
++ return SFE_FLAC_INIT_DECODER ;
++ } ;
++#endif
+
+ if (psf->error == 0)
+ psf->dataoffset = psf_ftell (psf) ;
+@@ -593,6 +736,7 @@
+ { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+
+ psf_fseek (psf, 0, SEEK_SET) ;
++#ifdef LEGACY_FLAC
+ if ((pflac->fsd = FLAC__seekable_stream_decoder_new ()) == NULL)
+ return SFE_FLAC_NEW_DECODER ;
+
+@@ -610,9 +754,22 @@
+ return SFE_FLAC_INIT_DECODER ;
+
+ FLAC__seekable_stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
++#else
++ if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++
++ if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
++ return SFE_FLAC_INIT_DECODER ;
++
++ FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
++#endif
+ if (psf->error == 0)
+ { FLAC__uint64 position ;
++#ifdef LEGACY_FLAC
+ FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ;
++#else
++ FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
++#endif
+ psf->dataoffset = position ;
+ } ;
+
+@@ -676,10 +833,18 @@
+ flac_buffer_copy (psf) ;
+
+ while (pflac->pos < pflac->len)
+- { if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0)
++ {
++#ifdef LEGACY_FLAC
++ if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0)
+ break ;
+ if (FLAC__seekable_stream_decoder_get_state (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK)
+ break ;
++#else
++ if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
++ break ;
++ if (FLAC__stream_decoder_get_state (pflac->fsd) >= FLAC__STREAM_DECODER_END_OF_STREAM)
++ break ;
++#endif
+ } ;
+
+ pflac->ptr = NULL ;
+@@ -795,7 +960,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -837,7 +1006,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -879,7 +1052,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount, psf->norm_float) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -1011,7 +1188,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount, psf->norm_double) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -1131,10 +1312,17 @@
+
+ if (psf->mode == SFM_READ)
+ { FLAC__uint64 position ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_decoder_seek_absolute (pflac->fsd, offset))
+ { FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ;
+ return offset ;
+ } ;
++#else
++ if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset))
++ { FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
++ return offset ;
++ } ;
++#endif
+
+ return ((sf_count_t) -1) ;
+ } ;
diff --git a/abs/core-testing/libsndfile/lossy_comp_test-overflow.dpatch b/abs/core-testing/libsndfile/lossy_comp_test-overflow.dpatch
new file mode 100644
index 0000000..bf5c829
--- /dev/null
+++ b/abs/core-testing/libsndfile/lossy_comp_test-overflow.dpatch
@@ -0,0 +1,21 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## lossy_comp_test-overflow.dpatch by Martin Michlmayr <tbm@cyrius.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Avoid a possible overflow in sum_abs.
+## DP: See #362414.
+
+@DPATCH@
+diff -urNad libsndfile-1.0.17~/tests/lossy_comp_test.c libsndfile-1.0.17/tests/lossy_comp_test.c
+--- libsndfile-1.0.17~/tests/lossy_comp_test.c 2006-08-31 11:22:07.000000000 +0200
++++ libsndfile-1.0.17/tests/lossy_comp_test.c 2007-04-07 10:33:05.000000000 +0200
+@@ -691,7 +691,8 @@
+ lcomp_test_int (const char *filename, int filetype, int channels, double margin)
+ { SNDFILE *file ;
+ SF_INFO sfinfo ;
+- int k, m, *orig, *data, sum_abs ;
++ int k, m, *orig, *data ;
++ long long sum_abs ;
+ long datalen, seekpos ;
+ double scale ;
+
diff --git a/abs/core-testing/libsndfile/overflow.dpatch b/abs/core-testing/libsndfile/overflow.dpatch
new file mode 100644
index 0000000..108b68c
--- /dev/null
+++ b/abs/core-testing/libsndfile/overflow.dpatch
@@ -0,0 +1,46 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## overflow.dpatch by Samuel Mimram <smimram@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix a buffer overflow (CVE-2007-4974). See #443386.
+
+@DPATCH@
+diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c
+--- libsndfile-1.0.17~/src/flac.c 2007-09-20 23:38:16.000000000 +0000
++++ libsndfile-1.0.17/src/flac.c 2007-09-20 23:38:16.000000000 +0000
+@@ -57,7 +57,7 @@
+ ** Private static functions.
+ */
+
+-#define ENC_BUFFER_SIZE 4096
++#define ENC_BUFFER_SIZE 8192
+
+ typedef enum
+ { PFLAC_PCM_SHORT = 0,
+@@ -202,6 +202,17 @@
+ const FLAC__int32* const *buffer = pflac->wbuffer ;
+ unsigned i = 0, j, offset ;
+
++ /*
++ ** frame->header.blocksize is variable and we're using a constant blocksize
++ ** of FLAC__MAX_BLOCK_SIZE.
++ ** Check our assumptions here.
++ */
++ if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE)
++ { psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ;
++ psf->error = SFE_INTERNAL ;
++ return 0 ;
++ } ;
++
+ if (pflac->ptr == NULL)
+ { /*
+ ** Not sure why this code is here and not elsewhere.
+@@ -210,7 +221,7 @@
+ pflac->bufferbackup = SF_TRUE ;
+ for (i = 0 ; i < frame->header.channels ; i++)
+ { if (pflac->rbuffer [i] == NULL)
+- pflac->rbuffer [i] = calloc (frame->header.blocksize, sizeof (FLAC__int32)) ;
++ pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ;
+ memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ;
+ } ;
+ pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ;
diff --git a/abs/core-testing/libstatgrab/PKGBUILD b/abs/core-testing/libstatgrab/PKGBUILD
new file mode 100644
index 0000000..ae38a47
--- /dev/null
+++ b/abs/core-testing/libstatgrab/PKGBUILD
@@ -0,0 +1,30 @@
+# Contributor: Hugo Ideler <hugoideler@dse.nl>
+
+pkgname=libstatgrab
+pkgver=0.14
+pkgrel=1
+pkgdesc="A library that provides cross platform access to statistics about the system on which it's run"
+url="http://www.i-scream.org/libstatgrab"
+license=""
+depends=()
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+arch=('i686')
+install=
+source=(ftp://ftp.uk.i-scream.org/pub/i-scream/libstatgrab/$pkgname-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+
+#What you get when people make broken Makefiles...
+sed -i -e 's:chown root ${exec_prefix}/bin/statgrab::' ./src/statgrab/Makefile
+sed -i -e 's:chmod u+s ${exec_prefix}/bin/statgrab::' ./src/statgrab/Makefile
+sed -i -e 's:chown root ${exec_prefix}/bin/saidar::' ./src/saidar/Makefile
+sed -i -e 's:chmod u+s ${exec_prefix}/bin/saidar::' ./src/saidar/Makefile
+ make DESTDIR=$startdir/pkg install
+#MAKE="make DESTDIR=$startdir/pkg prefix=$startdir/pkg"
+}
diff --git a/abs/core-testing/libtasn1/PKGBUILD b/abs/core-testing/libtasn1/PKGBUILD
new file mode 100644
index 0000000..9d0f14a
--- /dev/null
+++ b/abs/core-testing/libtasn1/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 3687 2008-06-29 10:44:27Z jgc $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=libtasn1
+pkgver=1.4
+pkgrel=1
+pkgdesc="The ASN.1 library used in GNUTLS"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://www.gnu.org/software/gnutls/"
+depends=('glibc')
+options=('!libtool')
+source=(ftp://ftp.gnutls.org/pub/gnutls/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('a733ecdfed3517910e627d24e050979f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libthai/PKGBUILD b/abs/core-testing/libthai/PKGBUILD
new file mode 100644
index 0000000..68f426e
--- /dev/null
+++ b/abs/core-testing/libthai/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Chaiwat Suttipongsakul <cwt114@gmail.com>
+pkgname=libthai
+pkgver=0.1.9
+pkgrel=1
+pkgdesc="Thai language support routines"
+url="http://linux.thai.net/projects/libthai"
+arch=('i686' 'x86_64')
+license=('LGPL')
+depends=('libdatrie>=0.1.2')
+makedepends=('pkgconfig')
+options=('!libtool' '!emptydirs')
+source=(http://linux.thai.net/pub/thailinux/software/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('7002d111b293f202d20b28aa2b4ed68f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libtheora/PKGBUILD b/abs/core-testing/libtheora/PKGBUILD
new file mode 100644
index 0000000..b0ee1ac
--- /dev/null
+++ b/abs/core-testing/libtheora/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+# Committer: dorphell <dorphell@archlinux.org>
+
+pkgname=libtheora
+pkgver=1.0beta1
+pkgrel=1
+pkgdesc="An open video codec developed by the Xiph.org"
+arch=('i686' 'x86_64')
+depends=('libogg')
+makedepends=('libvorbis')
+url=http://www.xiph.org
+license=('custom')
+source=(http://downloads.xiph.org/releases/theora/libtheora-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libtheora-${pkgver}
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ for file in LICENSE COPYING ; do
+ install -D $file $startdir/pkg/usr/share/licenses/libtheora/$file
+ done
+}
+md5sums=('e2ff1996c5a9fadd0df1025aa10bc35e')
diff --git a/abs/core-testing/libtiff/CVE-2006-3459-3465.patch b/abs/core-testing/libtiff/CVE-2006-3459-3465.patch
new file mode 100644
index 0000000..cb55b03
--- /dev/null
+++ b/abs/core-testing/libtiff/CVE-2006-3459-3465.patch
@@ -0,0 +1,669 @@
+diff -ru tiff-3.8.2/libtiff/tif_dir.c tiff-3.8.2-goo/libtiff/tif_dir.c
+--- tiff-3.8.2/libtiff/tif_dir.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dir.c 2006-07-14 13:52:01.027562000 +0100
+@@ -122,6 +122,7 @@
+ {
+ static const char module[] = "_TIFFVSetField";
+
++ const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
+ TIFFDirectory* td = &tif->tif_dir;
+ int status = 1;
+ uint32 v32, i, v;
+@@ -195,10 +196,12 @@
+ break;
+ case TIFFTAG_ORIENTATION:
+ v = va_arg(ap, uint32);
++ const TIFFFieldInfo* fip;
+ if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v) {
++ fip = _TIFFFieldWithTag(tif, tag);
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "Bad value %lu for \"%s\" tag ignored",
+- v, _TIFFFieldWithTag(tif, tag)->field_name);
++ v, fip ? fip->field_name : "Unknown");
+ } else
+ td->td_orientation = (uint16) v;
+ break;
+@@ -387,11 +390,15 @@
+ * happens, for example, when tiffcp is used to convert between
+ * compression schemes and codec-specific tags are blindly copied.
+ */
++ /*
++ * better not dereference fip if it is NULL.
++ * -- taviso@google.com 15 Jun 2006
++ */
+ if(fip == NULL || fip->field_bit != FIELD_CUSTOM) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "%s: Invalid %stag \"%s\" (not supported by codec)",
+ tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
+- _TIFFFieldWithTag(tif, tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ status = 0;
+ break;
+ }
+@@ -468,7 +475,7 @@
+ if (fip->field_type == TIFF_ASCII)
+ _TIFFsetString((char **)&tv->value, va_arg(ap, char *));
+ else {
+- tv->value = _TIFFmalloc(tv_size * tv->count);
++ tv->value = _TIFFCheckMalloc(tif, tv_size, tv->count, "Tag Value");
+ if (!tv->value) {
+ status = 0;
+ goto end;
+@@ -563,7 +570,7 @@
+ }
+ }
+ if (status) {
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++ TIFFSetFieldBit(tif, fip->field_bit);
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ }
+
+@@ -572,12 +579,12 @@
+ return (status);
+ badvalue:
+ TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad value %d for \"%s\"",
+- tif->tif_name, v, _TIFFFieldWithTag(tif, tag)->field_name);
++ tif->tif_name, v, fip ? fip->field_name : "Unknown");
+ va_end(ap);
+ return (0);
+ badvalue32:
+ TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad value %ld for \"%s\"",
+- tif->tif_name, v32, _TIFFFieldWithTag(tif, tag)->field_name);
++ tif->tif_name, v32, fip ? fip->field_name : "Unknown");
+ va_end(ap);
+ return (0);
+ }
+@@ -813,12 +820,16 @@
+ * If the client tries to get a tag that is not valid
+ * for the image's codec then we'll arrive here.
+ */
++ /*
++ * dont dereference fip if it's NULL.
++ * -- taviso@google.com 15 Jun 2006
++ */
+ if( fip == NULL || fip->field_bit != FIELD_CUSTOM )
+ {
+ TIFFErrorExt(tif->tif_clientdata, "_TIFFVGetField",
+ "%s: Invalid %stag \"%s\" (not supported by codec)",
+ tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
+- _TIFFFieldWithTag(tif, tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ ret_val = 0;
+ break;
+ }
+diff -ru tiff-3.8.2/libtiff/tif_dirinfo.c tiff-3.8.2-goo/libtiff/tif_dirinfo.c
+--- tiff-3.8.2/libtiff/tif_dirinfo.c 2006-02-07 13:51:03.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dirinfo.c 2006-07-14 13:52:00.953558000 +0100
+@@ -775,7 +775,8 @@
+ TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithTag",
+ "Internal error, unknown tag 0x%x",
+ (unsigned int) tag);
+- assert(fip != NULL);
++ /* assert(fip != NULL); */
++
+ /*NOTREACHED*/
+ }
+ return (fip);
+@@ -789,7 +790,8 @@
+ if (!fip) {
+ TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithName",
+ "Internal error, unknown tag %s", field_name);
+- assert(fip != NULL);
++ /* assert(fip != NULL); */
++
+ /*NOTREACHED*/
+ }
+ return (fip);
+diff -ru tiff-3.8.2/libtiff/tif_dirread.c tiff-3.8.2-goo/libtiff/tif_dirread.c
+--- tiff-3.8.2/libtiff/tif_dirread.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dirread.c 2006-07-14 13:52:00.842557000 +0100
+@@ -29,6 +29,9 @@
+ *
+ * Directory Read Support Routines.
+ */
++
++#include <limits.h>
++
+ #include "tiffiop.h"
+
+ #define IGNORE 0 /* tag placeholder used below */
+@@ -81,6 +84,7 @@
+ uint16 dircount;
+ toff_t nextdiroff;
+ int diroutoforderwarning = 0;
++ int compressionknown = 0;
+ toff_t* new_dirlist;
+
+ tif->tif_diroff = tif->tif_nextdiroff;
+@@ -147,13 +151,20 @@
+ } else {
+ toff_t off = tif->tif_diroff;
+
+- if (off + sizeof (uint16) > tif->tif_size) {
+- TIFFErrorExt(tif->tif_clientdata, module,
+- "%s: Can not read TIFF directory count",
+- tif->tif_name);
+- return (0);
++ /*
++ * Check for integer overflow when validating the dir_off, otherwise
++ * a very high offset may cause an OOB read and crash the client.
++ * -- taviso@google.com, 14 Jun 2006.
++ */
++ if (off + sizeof (uint16) > tif->tif_size ||
++ off > (UINT_MAX - sizeof(uint16))) {
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "%s: Can not read TIFF directory count",
++ tif->tif_name);
++ return (0);
+ } else
+- _TIFFmemcpy(&dircount, tif->tif_base + off, sizeof (uint16));
++ _TIFFmemcpy(&dircount, tif->tif_base + off,
++ sizeof (uint16));
+ off += sizeof (uint16);
+ if (tif->tif_flags & TIFF_SWAB)
+ TIFFSwabShort(&dircount);
+@@ -254,6 +265,7 @@
+ while (fix < tif->tif_nfields &&
+ tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
+ fix++;
++
+ if (fix >= tif->tif_nfields ||
+ tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) {
+
+@@ -264,17 +276,23 @@
+ dp->tdir_tag,
+ dp->tdir_tag,
+ dp->tdir_type);
+-
+- TIFFMergeFieldInfo(tif,
+- _TIFFCreateAnonFieldInfo(tif,
+- dp->tdir_tag,
+- (TIFFDataType) dp->tdir_type),
+- 1 );
++ /*
++ * creating anonymous fields prior to knowing the compression
++ * algorithm (ie, when the field info has been merged) could cause
++ * crashes with pathological directories.
++ * -- taviso@google.com 15 Jun 2006
++ */
++ if (compressionknown)
++ TIFFMergeFieldInfo(tif, _TIFFCreateAnonFieldInfo(tif, dp->tdir_tag,
++ (TIFFDataType) dp->tdir_type), 1 );
++ else goto ignore;
++
+ fix = 0;
+ while (fix < tif->tif_nfields &&
+ tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
+ fix++;
+ }
++
+ /*
+ * Null out old tags that we ignore.
+ */
+@@ -326,6 +344,7 @@
+ dp->tdir_type, dp->tdir_offset);
+ if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v))
+ goto bad;
++ else compressionknown++;
+ break;
+ /* XXX: workaround for broken TIFFs */
+ } else if (dp->tdir_type == TIFF_LONG) {
+@@ -540,6 +559,7 @@
+ * Attempt to deal with a missing StripByteCounts tag.
+ */
+ if (!TIFFFieldSet(tif, FIELD_STRIPBYTECOUNTS)) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * Some manufacturers violate the spec by not giving
+ * the size of the strips. In this case, assume there
+@@ -556,7 +576,7 @@
+ "%s: TIFF directory is missing required "
+ "\"%s\" field, calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if (EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ /*
+@@ -580,6 +600,7 @@
+ } else if (td->td_nstrips == 1
+ && td->td_stripoffset[0] != 0
+ && BYTECOUNTLOOKSBAD) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * XXX: Plexus (and others) sometimes give a value of zero for
+ * a tag when they don't know what the correct value is! Try
+@@ -589,13 +610,14 @@
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "%s: Bogus \"%s\" field, ignoring and calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if(EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ } else if (td->td_planarconfig == PLANARCONFIG_CONTIG
+ && td->td_nstrips > 2
+ && td->td_compression == COMPRESSION_NONE
+ && td->td_stripbytecount[0] != td->td_stripbytecount[1]) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * XXX: Some vendors fill StripByteCount array with absolutely
+ * wrong values (it can be equal to StripOffset array, for
+@@ -604,7 +626,7 @@
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "%s: Wrong \"%s\" field, ignoring and calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if (EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ }
+@@ -870,7 +892,13 @@
+
+ register TIFFDirEntry *dp;
+ register TIFFDirectory *td = &tif->tif_dir;
+- uint16 i;
++
++ /* i is used to iterate over td->td_nstrips, so must be
++ * at least the same width.
++ * -- taviso@google.com 15 Jun 2006
++ */
++
++ uint32 i;
+
+ if (td->td_stripbytecount)
+ _TIFFfree(td->td_stripbytecount);
+@@ -947,16 +975,18 @@
+ static int
+ CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count)
+ {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
++
+ if (count > dir->tdir_count) {
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "incorrect count for field \"%s\" (%lu, expecting %lu); tag ignored",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
++ fip ? fip->field_name : "Unknown",
+ dir->tdir_count, count);
+ return (0);
+ } else if (count < dir->tdir_count) {
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "incorrect count for field \"%s\" (%lu, expecting %lu); tag trimmed",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
++ fip ? fip->field_name : "Unknown",
+ dir->tdir_count, count);
+ return (1);
+ }
+@@ -970,6 +1000,7 @@
+ TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp)
+ {
+ int w = TIFFDataWidth((TIFFDataType) dir->tdir_type);
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ tsize_t cc = dir->tdir_count * w;
+
+ /* Check for overflow. */
+@@ -1013,7 +1044,7 @@
+ bad:
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Error fetching data for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ return (tsize_t) 0;
+ }
+
+@@ -1039,10 +1070,12 @@
+ static int
+ cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv)
+ {
++ const TIFFFieldInfo* fip;
+ if (denom == 0) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "%s: Rational with zero denominator (num = %lu)",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num);
++ fip ? fip->field_name : "Unknown", num);
+ return (0);
+ } else {
+ if (dir->tdir_type == TIFF_RATIONAL)
+@@ -1159,6 +1192,20 @@
+ static int
+ TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir)
+ {
++ /*
++ * Prevent overflowing the v stack arrays below by performing a sanity
++ * check on tdir_count, this should never be greater than two.
++ * -- taviso@google.com 14 Jun 2006.
++ */
++ if (dir->tdir_count > 2) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
++ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
++ "unexpected count for field \"%s\", %lu, expected 2; ignored.",
++ fip ? fip->field_name : "Unknown",
++ dir->tdir_count);
++ return 0;
++ }
++
+ switch (dir->tdir_type) {
+ case TIFF_BYTE:
+ case TIFF_SBYTE:
+@@ -1329,14 +1376,15 @@
+ case TIFF_DOUBLE:
+ return (TIFFFetchDoubleArray(tif, dir, (double*) v));
+ default:
++ { const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ /* TIFF_NOTYPE */
+ /* TIFF_ASCII */
+ /* TIFF_UNDEFINED */
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "cannot read TIFF_ANY type %d for field \"%s\"",
+ dir->tdir_type,
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
+- return (0);
++ fip ? fip->field_name : "Unknown");
++ return (0); }
+ }
+ return (1);
+ }
+@@ -1351,6 +1399,9 @@
+ int ok = 0;
+ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag);
+
++ if (fip == NULL) {
++ return (0);
++ }
+ if (dp->tdir_count > 1) { /* array of values */
+ char* cp = NULL;
+
+@@ -1493,6 +1544,7 @@
+ TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, uint16* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1510,9 +1562,10 @@
+
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+@@ -1534,6 +1587,7 @@
+ TIFFFetchPerSampleLongs(TIFF* tif, TIFFDirEntry* dir, uint32* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1551,9 +1605,10 @@
+ check_count = samples;
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+@@ -1574,6 +1629,7 @@
+ TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1591,9 +1647,10 @@
+
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+diff -ru tiff-3.8.2/libtiff/tif_fax3.c tiff-3.8.2-goo/libtiff/tif_fax3.c
+--- tiff-3.8.2/libtiff/tif_fax3.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_fax3.c 2006-07-14 13:52:00.669557000 +0100
+@@ -1136,6 +1136,7 @@
+ Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap)
+ {
+ Fax3BaseState* sp = Fax3State(tif);
++ const TIFFFieldInfo* fip;
+
+ assert(sp != 0);
+ assert(sp->vsetparent != 0);
+@@ -1181,7 +1182,13 @@
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++
++ if ((fip = _TIFFFieldWithTag(tif, tag))) {
++ TIFFSetFieldBit(tif, fip->field_bit);
++ } else {
++ return (0);
++ }
++
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ return (1);
+ }
+diff -ru tiff-3.8.2/libtiff/tif_jpeg.c tiff-3.8.2-goo/libtiff/tif_jpeg.c
+--- tiff-3.8.2/libtiff/tif_jpeg.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_jpeg.c 2006-07-14 13:52:00.655560000 +0100
+@@ -722,15 +722,31 @@
+ segment_width = TIFFhowmany(segment_width, sp->h_sampling);
+ segment_height = TIFFhowmany(segment_height, sp->v_sampling);
+ }
+- if (sp->cinfo.d.image_width != segment_width ||
+- sp->cinfo.d.image_height != segment_height) {
++ if (sp->cinfo.d.image_width < segment_width ||
++ sp->cinfo.d.image_height < segment_height) {
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "Improper JPEG strip/tile size, expected %dx%d, got %dx%d",
+ segment_width,
+ segment_height,
+ sp->cinfo.d.image_width,
+ sp->cinfo.d.image_height);
++ }
++
++ if (sp->cinfo.d.image_width > segment_width ||
++ sp->cinfo.d.image_height > segment_height) {
++ /*
++ * This case could be dangerous, if the strip or tile size has been
++ * reported as less than the amount of data jpeg will return, some
++ * potential security issues arise. Catch this case and error out.
++ * -- taviso@google.com 14 Jun 2006
++ */
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "JPEG strip/tile size exceeds expected dimensions,"
++ "expected %dx%d, got %dx%d", segment_width, segment_height,
++ sp->cinfo.d.image_width, sp->cinfo.d.image_height);
++ return (0);
+ }
++
+ if (sp->cinfo.d.num_components !=
+ (td->td_planarconfig == PLANARCONFIG_CONTIG ?
+ td->td_samplesperpixel : 1)) {
+@@ -761,6 +777,22 @@
+ sp->cinfo.d.comp_info[0].v_samp_factor,
+ sp->h_sampling, sp->v_sampling);
+
++ /*
++ * There are potential security issues here for decoders that
++ * have already allocated buffers based on the expected sampling
++ * factors. Lets check the sampling factors dont exceed what
++ * we were expecting.
++ * -- taviso@google.com 14 June 2006
++ */
++ if (sp->cinfo.d.comp_info[0].h_samp_factor > sp->h_sampling ||
++ sp->cinfo.d.comp_info[0].v_samp_factor > sp->v_sampling) {
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "Cannot honour JPEG sampling factors that"
++ " exceed those specified.");
++ return (0);
++ }
++
++
+ /*
+ * XXX: Files written by the Intergraph software
+ * has different sampling factors stored in the
+@@ -1521,15 +1553,18 @@
+ {
+ JPEGState *sp = JState(tif);
+
+- assert(sp != 0);
++ /* assert(sp != 0); */
+
+ tif->tif_tagmethods.vgetfield = sp->vgetparent;
+ tif->tif_tagmethods.vsetfield = sp->vsetparent;
+
+- if( sp->cinfo_initialized )
+- TIFFjpeg_destroy(sp); /* release libjpeg resources */
+- if (sp->jpegtables) /* tag value */
+- _TIFFfree(sp->jpegtables);
++ if (sp != NULL) {
++ if( sp->cinfo_initialized )
++ TIFFjpeg_destroy(sp); /* release libjpeg resources */
++ if (sp->jpegtables) /* tag value */
++ _TIFFfree(sp->jpegtables);
++ }
++
+ _TIFFfree(tif->tif_data); /* release local state */
+ tif->tif_data = NULL;
+
+@@ -1541,6 +1576,7 @@
+ {
+ JPEGState* sp = JState(tif);
+ TIFFDirectory* td = &tif->tif_dir;
++ const TIFFFieldInfo* fip;
+ uint32 v32;
+
+ assert(sp != NULL);
+@@ -1606,7 +1642,13 @@
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++
++ if ((fip = _TIFFFieldWithTag(tif, tag))) {
++ TIFFSetFieldBit(tif, fip->field_bit);
++ } else {
++ return (0);
++ }
++
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ return (1);
+ }
+@@ -1726,7 +1768,11 @@
+ {
+ JPEGState* sp = JState(tif);
+
+- assert(sp != NULL);
++ /* assert(sp != NULL); */
++ if (sp == NULL) {
++ TIFFWarningExt(tif->tif_clientdata, "JPEGPrintDir", "Unknown JPEGState");
++ return;
++ }
+
+ (void) flags;
+ if (TIFFFieldSet(tif,FIELD_JPEGTABLES))
+diff -ru tiff-3.8.2/libtiff/tif_next.c tiff-3.8.2-goo/libtiff/tif_next.c
+--- tiff-3.8.2/libtiff/tif_next.c 2005-12-21 12:33:56.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_next.c 2006-07-14 13:52:00.556567000 +0100
+@@ -105,11 +105,16 @@
+ * as codes of the form <color><npixels>
+ * until we've filled the scanline.
+ */
++ /*
++ * Ensure the run does not exceed the scanline
++ * bounds, potentially resulting in a security issue.
++ * -- taviso@google.com 14 Jun 2006.
++ */
+ op = row;
+ for (;;) {
+ grey = (n>>6) & 0x3;
+ n &= 0x3f;
+- while (n-- > 0)
++ while (n-- > 0 && npixels < imagewidth)
+ SETPIXEL(op, grey);
+ if (npixels >= (int) imagewidth)
+ break;
+diff -ru tiff-3.8.2/libtiff/tif_pixarlog.c tiff-3.8.2-goo/libtiff/tif_pixarlog.c
+--- tiff-3.8.2/libtiff/tif_pixarlog.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_pixarlog.c 2006-07-14 13:52:00.483557000 +0100
+@@ -768,7 +768,19 @@
+ if (tif->tif_flags & TIFF_SWAB)
+ TIFFSwabArrayOfShort(up, nsamples);
+
+- for (i = 0; i < nsamples; i += llen, up += llen) {
++ /*
++ * if llen is not an exact multiple of nsamples, the decode operation
++ * may overflow the output buffer, so truncate it enough to prevent that
++ * but still salvage as much data as possible.
++ * -- taviso@google.com 14th June 2006
++ */
++ if (nsamples % llen)
++ TIFFWarningExt(tif->tif_clientdata, module,
++ "%s: stride %lu is not a multiple of sample count, "
++ "%lu, data truncated.", tif->tif_name, llen, nsamples);
++
++
++ for (i = 0; i < nsamples - (nsamples % llen); i += llen, up += llen) {
+ switch (sp->user_datafmt) {
+ case PIXARLOGDATAFMT_FLOAT:
+ horizontalAccumulateF(up, llen, sp->stride,
+diff -ru tiff-3.8.2/libtiff/tif_read.c tiff-3.8.2-goo/libtiff/tif_read.c
+--- tiff-3.8.2/libtiff/tif_read.c 2005-12-21 12:33:56.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_read.c 2006-07-14 13:52:00.467568000 +0100
+@@ -31,6 +31,8 @@
+ #include "tiffiop.h"
+ #include <stdio.h>
+
++#include <limits.h>
++
+ int TIFFFillStrip(TIFF*, tstrip_t);
+ int TIFFFillTile(TIFF*, ttile_t);
+ static int TIFFStartStrip(TIFF*, tstrip_t);
+@@ -272,7 +274,13 @@
+ if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
+ _TIFFfree(tif->tif_rawdata);
+ tif->tif_flags &= ~TIFF_MYBUFFER;
+- if ( td->td_stripoffset[strip] + bytecount > tif->tif_size) {
++ /*
++ * This sanity check could potentially overflow, causing an OOB read.
++ * verify that offset + bytecount is > offset.
++ * -- taviso@google.com 14 Jun 2006
++ */
++ if ( td->td_stripoffset[strip] + bytecount > tif->tif_size ||
++ bytecount > (UINT_MAX - td->td_stripoffset[strip])) {
+ /*
+ * This error message might seem strange, but it's
+ * what would happen if a read were done instead.
+@@ -470,7 +478,13 @@
+ if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
+ _TIFFfree(tif->tif_rawdata);
+ tif->tif_flags &= ~TIFF_MYBUFFER;
+- if ( td->td_stripoffset[tile] + bytecount > tif->tif_size) {
++ /*
++ * We must check this calculation doesnt overflow, potentially
++ * causing an OOB read.
++ * -- taviso@google.com 15 Jun 2006
++ */
++ if (td->td_stripoffset[tile] + bytecount > tif->tif_size ||
++ bytecount > (UINT_MAX - td->td_stripoffset[tile])) {
+ tif->tif_curtile = NOTILE;
+ return (0);
+ }
diff --git a/abs/core-testing/libtiff/PKGBUILD b/abs/core-testing/libtiff/PKGBUILD
new file mode 100644
index 0000000..67cb689
--- /dev/null
+++ b/abs/core-testing/libtiff/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=libtiff
+pkgver=3.8.2
+pkgrel=3
+pkgdesc="Library for manipulation of TIFF images"
+arch=(i686 x86_64)
+depends=(libjpeg zlib)
+makedepends=(libgl freeglut libxmu libxi)
+options=(!libtool)
+url="http://www.libtiff.org/"
+source=(ftp://ftp.remotesensing.org/pub/libtiff/tiff-${pkgver}.tar.gz
+ tiff2pdf-octal-printf.patch
+ tiffsplit-fname-overflow.patch
+ CVE-2006-3459-3465.patch
+ tiff2pdf-compression.patch)
+md5sums=('fbb6f446ea4ed18955e2714934e5b698' 'd54368687d2645ffbbe6c2df384b11bf'\
+ '323352fd60a7bd3ffac8724c3c031669' '624d3067e6a4c0680767eb62253ea980'\
+ 'b443ffca9d498bb3a88c17da0200025b')
+
+build() {
+ cd ${startdir}/src/tiff-${pkgver}
+ patch -Np1 -i ${startdir}/src/tiff2pdf-octal-printf.patch || return 1
+ patch -Np1 -i ${startdir}/src/tiffsplit-fname-overflow.patch || return 1
+ patch -Np1 -i ${startdir}/src/CVE-2006-3459-3465.patch || return 1
+ patch -Np1 -i ${startdir}/src/tiff2pdf-compression.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libtiff/tiff2pdf-compression.patch b/abs/core-testing/libtiff/tiff2pdf-compression.patch
new file mode 100644
index 0000000..2dae2dc
--- /dev/null
+++ b/abs/core-testing/libtiff/tiff2pdf-compression.patch
@@ -0,0 +1,44 @@
+--- tiff-3.8.2/tools/tiff2pdf.c 8 Jun 2006 11:27:11 -0000 1.35
++++ tiff-3.8.2/tools/tiff2pdf.c 19 Jun 2006 20:12:08 -0000 1.36
+@@ -937,7 +937,7 @@
+
+ #ifdef JPEG_SUPPORT
+ if(t2p->pdf_defaultcompression==T2P_COMPRESS_JPEG){
+- if(t2p->pdf_defaultcompressionquality<100 ||
++ if(t2p->pdf_defaultcompressionquality>100 ||
+ t2p->pdf_defaultcompressionquality<1){
+ t2p->pdf_defaultcompressionquality=0;
+ }
+@@ -945,25 +945,17 @@
+ #endif
+ #ifdef ZIP_SUPPORT
+ if(t2p->pdf_defaultcompression==T2P_COMPRESS_ZIP){
+- switch (t2p->pdf_defaultcompressionquality){
+- case 1: case 10: case 11: case 12: case 13: case 14: case 15:
+- case 101: case 110: case 111: case 112: case 113: case 114: case 115:
+- case 201: case 210: case 211: case 212: case 213: case 214: case 215:
+- case 301: case 310: case 311: case 312: case 313: case 314: case 315:
+- case 401: case 410: case 411: case 412: case 413: case 414: case 415:
+- case 501: case 510: case 511: case 512: case 513: case 514: case 515:
+- case 601: case 610: case 611: case 612: case 613: case 614: case 615:
+- case 701: case 710: case 711: case 712: case 713: case 714: case 715:
+- case 801: case 810: case 811: case 812: case 813: case 814: case 815:
+- case 901: case 910: case 911: case 912: case 913: case 914: case 915:
+- break;
+- default:
+- t2p->pdf_defaultcompressionquality=0;
++ uint16 m=t2p->pdf_defaultcompressionquality%100;
++ if(t2p->pdf_defaultcompressionquality/100 > 9 ||
++ (m>1 && m<10) || m>15){
++ t2p->pdf_defaultcompressionquality=0;
+ }
+ if(t2p->pdf_defaultcompressionquality%100 !=0){
++ t2p->pdf_defaultcompressionquality/=100;
++ t2p->pdf_defaultcompressionquality*=100;
+ TIFFError(
+ TIFF2PDF_MODULE,
+- "PNG Group predictor differencing not implemented, assuming compresion quality %u",
++ "PNG Group predictor differencing not implemented, assuming compression quality %u",
+ t2p->pdf_defaultcompressionquality);
+ }
+ t2p->pdf_defaultcompressionquality%=100;
diff --git a/abs/core-testing/libtiff/tiff2pdf-octal-printf.patch b/abs/core-testing/libtiff/tiff2pdf-octal-printf.patch
new file mode 100644
index 0000000..f35b072
--- /dev/null
+++ b/abs/core-testing/libtiff/tiff2pdf-octal-printf.patch
@@ -0,0 +1,11 @@
+--- tiff-3.8.2/tools/tiff2pdf.c.orig 2006-03-21 11:42:51.000000000 -0500
++++ tiff-3.8.2/tools/tiff2pdf.c 2006-06-07 17:54:01.027637232 -0400
+@@ -3668,7 +3668,7 @@
+ written += TIFFWriteFile(output, (tdata_t) "(", 1);
+ for (i=0;i<len;i++){
+ if((pdfstr[i]&0x80) || (pdfstr[i]==127) || (pdfstr[i]<32)){
+- sprintf(buffer, "\\%.3o", pdfstr[i]);
++ sprintf(buffer, "\\%.3hho", pdfstr[i]);
+ written += TIFFWriteFile(output, (tdata_t) buffer, 4);
+ } else {
+ switch (pdfstr[i]){
diff --git a/abs/core-testing/libtiff/tiffsplit-fname-overflow.patch b/abs/core-testing/libtiff/tiffsplit-fname-overflow.patch
new file mode 100644
index 0000000..cc22589
--- /dev/null
+++ b/abs/core-testing/libtiff/tiffsplit-fname-overflow.patch
@@ -0,0 +1,19 @@
+--- tiff-3.8.2/tools/tiffsplit.c.orig 2005-12-07 04:48:33.000000000 -0500
++++ tiff-3.8.2/tools/tiffsplit.c 2006-06-01 21:20:25.039944864 -0400
+@@ -61,14 +61,13 @@
+ return (-3);
+ }
+ if (argc > 2)
+- strcpy(fname, argv[2]);
++ snprintf(fname, sizeof(fname), "%s", argv[2]);
+ in = TIFFOpen(argv[1], "r");
+ if (in != NULL) {
+ do {
+ char path[1024+1];
+ newfilename();
+- strcpy(path, fname);
+- strcat(path, ".tif");
++ snprintf(path, sizeof(path), "%s.tif", fname);
+ out = TIFFOpen(path, TIFFIsBigEndian(in)?"wb":"wl");
+ if (out == NULL)
+ return (-2);
diff --git a/abs/core-testing/libtool/PKGBUILD b/abs/core-testing/libtool/PKGBUILD
new file mode 100644
index 0000000..965a282
--- /dev/null
+++ b/abs/core-testing/libtool/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1505 2008-05-12 10:28:03Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=libtool
+pkgver=2.2.4
+pkgrel=1
+pkgdesc="A generic library support script"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/libtool"
+groups=('base-devel')
+depends=('sh')
+source=(ftp://ftp.gnu.org/pub/gnu/libtool/${pkgname}-${pkgver}.tar.gz)
+md5sums=('0b87e84c7aad3b5e979bbe35312fd4c1')
+options=('!libtool')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/libusb/PKGBUILD b/abs/core-testing/libusb/PKGBUILD
new file mode 100644
index 0000000..2c6b879
--- /dev/null
+++ b/abs/core-testing/libusb/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 8698 2008-08-16 03:34:22Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+pkgname=libusb
+pkgver=0.1.12
+pkgrel=12
+depends=('gcc-libs')
+pkgdesc="Library to enable user space application programs to communicate with USB devices"
+arch=(i686 x86_64)
+url="http://libusb.sourceforge.net/"
+license=('LGPL')
+groups=('base')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('caf182cbc7565dac0fd72155919672e6')
+options=(!libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-build-docs
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/libvorbis/PKGBUILD b/abs/core-testing/libvorbis/PKGBUILD
new file mode 100644
index 0000000..c655b95
--- /dev/null
+++ b/abs/core-testing/libvorbis/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libvorbis
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="Vorbis codec library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.xiph.org/ogg/vorbis/"
+depends=('glibc' 'libogg')
+source=(http://downloads.xiph.org/releases/vorbis/$pkgname-$pkgver.tar.gz)
+md5sums=('478646358c49f34aedcce58948793619')
+
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ #-march=i686 optimizes too much, strip it out
+ CFLAGS=${CFLAGS/-march=$CARCH} ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -Dm644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core-testing/libwmf/PKGBUILD b/abs/core-testing/libwmf/PKGBUILD
new file mode 100644
index 0000000..f1c3d17
--- /dev/null
+++ b/abs/core-testing/libwmf/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: FJ <joostef@gmail.com>
+pkgname=libwmf
+pkgver=0.2.8.4
+pkgrel=4
+pkgdesc="A library for reading vector images in Microsoft's native Windows Metafile Format (WMF)."
+arch=(i686 x86_64)
+url="http://wvware.sourceforge.net/libwmf.html"
+license=("LGPL")
+depends=('libpng' 'libx11' 'freetype2' 'libjpeg' 'gsfonts' 'expat>=2.0')
+makedepends=('gtk2>=2.10.0' 'pkgconfig')
+options=(!libtool)
+install=libwmf.install
+source=(http://heanet.dl.sf.net/sourceforge/wvware/${pkgname}-${pkgver}.tar.gz)
+md5sums=(d1177739bf1ceb07f57421f0cee191e0)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/src include fonts doc/src include fonts/g' Makefile.in
+ ./configure --prefix=/usr \
+ --with-gsfontdir=/usr/share/fonts/Type1 \
+ --with-fontdir=/usr/share/fonts/Type1 \
+ --with-gsfontmap=/usr/share/ghostscript/8.15/lib/Fontmap.GS
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ #Remove fonts, these are in gsfonts
+ rm -rf ${startdir}/pkg/usr/share/fonts
+ #Remove static GTK loader, can't use it anyways
+ rm -f ${startdir}/pkg/usr/lib/gtk-2.0/*/loaders/*.a
+}
diff --git a/abs/core-testing/libwmf/libwmf.install b/abs/core-testing/libwmf/libwmf.install
new file mode 100644
index 0000000..17fa278
--- /dev/null
+++ b/abs/core-testing/libwmf/libwmf.install
@@ -0,0 +1,18 @@
+post_install() {
+ if [ -x /usr/bin/gdk-pixbuf-query-loaders ]; then
+ /usr/bin/gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff b/abs/core-testing/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff
new file mode 100644
index 0000000..218c906
--- /dev/null
+++ b/abs/core-testing/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff
@@ -0,0 +1,237 @@
+Index: libx11/nls/locale.dir.pre
+===================================================================
+--- libx11.orig/nls/locale.dir.pre 2006-08-02 22:04:01.000000000 +0000
++++ libx11/nls/locale.dir.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -436,7 +436,7 @@
+ pt_BR.UTF-8/XLC_LOCALE: pt_BR.UTF-8
+ en_US.UTF-8/XLC_LOCALE: pt_PT.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ro_RO.UTF-8
+-en_US.UTF-8/XLC_LOCALE: ru_RU.UTF-8
++ru_RU.UTF-8/XLC_LOCALE: ru_RU.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ru_UA.UTF-8
+ en_US.UTF-8/XLC_LOCALE: rw_RW.UTF-8
+ en_US.UTF-8/XLC_LOCALE: se_NO.UTF-8
+Index: libx11/nls/ru_RU.UTF-8/XLC_LOCALE.pre
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/XLC_LOCALE.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,169 @@
++XCOMM
++XCOMM XLocale Database Sample for ru_RU.UTF-8
++XCOMM Derived from en_US.UTF-8
++XCOMM
++
++XCOMM
++XCOMM XLC_FONTSET category
++XCOMM
++XLC_FONTSET
++
++on_demand_loading True
++
++object_name generic
++
++XCOMM fs0 class (7 bit ASCII)
++fs0 {
++ charset {
++ name ISO8859-1:GL
++ }
++ font {
++ primary ISO8859-1:GL
++ vertical_rotate all
++ }
++}
++XCOMM fs1 class (ISO8859 families)
++fs1 {
++ charset {
++ name ISO8859-1:GR
++ }
++ font {
++ primary ISO8859-1:GR
++ }
++}
++XCOMM fs2 class (KOI8-R)
++fs2 {
++ charset {
++ name KOI8-R:GR
++ }
++ font {
++ primary KOI8-R:GR
++ }
++}
++XCOMM fs3 class (MICROSOFT-CP1251)
++fs3 {
++ charset {
++ name MICROSOFT-CP1251:GR
++ }
++ font {
++ primary MICROSOFT-CP1251:GR
++ }
++}
++XCOMM fs4 class (ISO8859-5)
++fs4 {
++ charset {
++ name ISO8859-5:GR
++ }
++ font {
++ primary ISO8859-5:GR
++ }
++}
++XCOMM fs5 class (Kanji)
++fs5 {
++ charset {
++ name JISX0208.1983-0:GL
++ }
++ font {
++ primary JISX0208.1983-0:GL
++ }
++}
++XCOMM fs6 class (Korean Character)
++fs6 {
++ charset {
++ name KSC5601.1987-0:GL
++ }
++ font {
++ primary KSC5601.1987-0:GL
++ }
++}
++XCOMM fs7 class (Chinese Han Character)
++fs7 {
++ charset {
++ name GB2312.1980-0:GL
++ }
++ font {
++ primary GB2312.1980-0:GL
++ }
++}
++XCOMM fs8 class (Half Kana)
++fs8 {
++ charset {
++ name JISX0201.1976-0:GR
++ }
++ font {
++ primary JISX0201.1976-0:GR
++ vertical_rotate all
++ }
++}
++XCOMM ISO10646 should come last so the fonts above will actually be used
++XCOMM fs9 class
++fs9 {
++ charset {
++ name ISO10646-1
++ }
++ font {
++ primary ISO10646-1
++ }
++}
++END XLC_FONTSET
++
++XCOMM
++XCOMM XLC_XLOCALE category
++XCOMM
++XLC_XLOCALE
++
++encoding_name UTF-8
++mb_cur_max 6
++state_depend_encoding False
++
++XCOMM cs0 class
++cs0 {
++ side GL:Default
++ length 1
++ ct_encoding ISO8859-1:GL
++}
++
++XCOMM cs1 class
++cs1 {
++ side GR:Default
++ length 1
++ ct_encoding ISO8859-1:GR
++}
++
++XCOMM cs2 class
++cs2 {
++ side GR
++ length 2
++ ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR; JISX0208.1983-1:GL; JISX0208.1983-1:GR
++
++}
++
++XCOMM cs3 class
++cs3 {
++ side GL
++ length 2
++ ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR; KSC5601.1987-1:GL; KSC5601.1987-1:GR
++
++}
++
++XCOMM cs4 class
++cs4 {
++ side GR
++ length 2
++ ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR
++}
++
++XCOMM cs5 class
++cs5 {
++ side GR
++ length 1
++ ct_encoding JISX0201.1976-0:GR
++}
++
++XCOMM cs6 class
++cs6 {
++ side none
++ ct_encoding ISO10646-1
++}
++
++END XLC_XLOCALE
+Index: libx11/nls/ru_RU.UTF-8/XI18N_OBJS
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/XI18N_OBJS 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,7 @@
++# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME
++#
++# XI18N objects table for en_US.UTF-8 locale
++#
++XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open
++XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister
++XOM common/xomGeneric _XomGenericOpenOM # XOM_open
+Index: libx11/configure.ac
+===================================================================
+--- libx11.orig/configure.ac 2006-08-02 20:31:39.000000000 +0000
++++ libx11/configure.ac 2006-08-02 22:04:04.000000000 +0000
+@@ -400,6 +400,7 @@
+ nls/mulelao-1/Makefile
+ nls/nokhchi-1/Makefile
+ nls/pt_BR.UTF-8/Makefile
++ nls/ru_RU.UTF-8/Makefile
+ nls/tatar-cyr/Makefile
+ nls/th_TH/Makefile
+ nls/th_TH.UTF-8/Makefile
+Index: libx11/nls/Makefile.am
+===================================================================
+--- libx11.orig/nls/Makefile.am 2006-08-02 20:31:30.000000000 +0000
++++ libx11/nls/Makefile.am 2006-08-02 22:04:04.000000000 +0000
+@@ -52,6 +52,7 @@
+ mulelao-1 \
+ nokhchi-1 \
+ pt_BR.UTF-8 \
++ ru_RU.UTF-8 \
+ tatar-cyr \
+ th_TH \
+ th_TH.UTF-8 \
+Index: libx11/nls/ru_RU.UTF-8/Compose.pre
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/Compose.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1 @@
++include "/usr/share/X11/locale/en_US.UTF-8/Compose"
+Index: libx11/nls/ru_RU.UTF-8/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/Makefile.am 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,3 @@
++x11thislocaledir = $(X11_LOCALEDATADIR)/ru_RU.UTF-8
++
++include $(top_srcdir)/nls/localerules.in
diff --git a/abs/core-testing/libx11/PKGBUILD b/abs/core-testing/libx11/PKGBUILD
new file mode 100644
index 0000000..e69ed0a
--- /dev/null
+++ b/abs/core-testing/libx11/PKGBUILD
@@ -0,0 +1,44 @@
+# $Id: PKGBUILD 1882 2008-05-22 17:44:17Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor Jan de Groot <jgc@archlinux.org>
+pkgname=libx11
+pkgver=1.1.4
+pkgrel=2
+pkgdesc="X11 client-side library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxau' 'libxdmcp' 'libxcb>=1.1' 'kbproto' 'inputproto' 'bigreqsproto')
+makedepends=('pkgconfig' 'xcmiscproto' 'xextproto' 'xf86bigfontproto' 'xtrans' \
+ 'bigreqsproto' 'xorg-util-macros' 'autoconf' 'automake' 'libtool')
+options=('!libtool')
+license=('custom:XFREE86')
+source=(${url}/releases/individual/lib/libX11-${pkgver}.tar.bz2
+ 012_ru_RU_UTF-8_XLC_LOCALE.diff
+ xorg.sh)
+md5sums=('1469a5a8aa8d288dce6f4c45d2f68dc3'
+ 'c7e38a68b932ed557bc71979eed2a8a1'
+ 'ea3f14c529072c8be061493763479800')
+
+build() {
+ cd ${startdir}/src/libX11-${pkgver}
+ patch -Np1 -i ${startdir}/src/012_ru_RU_UTF-8_XLC_LOCALE.diff || return 1
+
+
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+
+ ./configure --prefix=/usr \
+ --with-xcb || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -d -m755 ${startdir}/pkg/etc/profile.d
+ install -m755 ${startdir}/src/xorg.sh \
+ ${startdir}/pkg/etc/profile.d/ || return 1
+
+ install -d -m755 ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 -D ${startdir}/src/libX11-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libx11/xorg.sh b/abs/core-testing/libx11/xorg.sh
new file mode 100644
index 0000000..d3ade91
--- /dev/null
+++ b/abs/core-testing/libx11/xorg.sh
@@ -0,0 +1,19 @@
+export XDG_DATA_HOME=$HOME/.local/share
+export XDG_CONFIG_HOME=$HOME/.config
+export XDG_CACHE_HOME=$HOME/.cache
+
+if [ -z $XDG_DATA_DIRS ]; then
+ export XDG_DATA_DIRS=/usr/share:/usr/local/share
+else
+ export XDG_DATA_DIRS=/usr/share:/usr/local/share:$XDG_DATA_DIRS
+fi
+
+if [ -z $XDG_CONFIG_DIRS ]; then
+ export XDG_CONFIG_DIRS=/etc/xdg
+else
+ export XDG_CONFIG_DIRS=/etc/xdg:$XDG_CONFIG_DIRS
+fi
+
+# temporarily loosen restrictions in libxcb to get java
+# application involving X to work.
+export LIBXCB_ALLOW_SLOPPY_LOCK=true
diff --git a/abs/core-testing/libx86/PKGBUILD b/abs/core-testing/libx86/PKGBUILD
new file mode 100644
index 0000000..5cf3488
--- /dev/null
+++ b/abs/core-testing/libx86/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: tardo <tardo@nagi-fanboi.net>
+
+pkgname=libx86
+pkgver=0.99
+pkgrel=1
+pkgdesc="Provides an lrmi interface that works on x86, am64 and alpha"
+arch=('i686' 'x86_64')
+url="http://www.codon.org.uk/~mjg59/libx86/"
+license=('custom')
+depends=('glibc')
+source=(http://www.codon.org.uk/~mjg59/libx86/downloads/libx86-$pkgver.tar.gz lrmi.patch)
+md5sums=('c426d4f29fdf3499158cf49d4f374315')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -p1 < ../lrmi.patch
+ if [ "$CARCH" = "x86_64" ]; then
+ make BACKEND=x86emu || return 1
+ else
+ make || return 1
+ fi
+
+ make DESTDIR=$startdir/pkg install
+ install -D -m 644 COPYRIGHT $startdir/pkg/usr/share/licenses/$pkgname/COPYRIGHT
+}
diff --git a/abs/core-testing/libx86/lrmi.patch b/abs/core-testing/libx86/lrmi.patch
new file mode 100644
index 0000000..10530f9
--- /dev/null
+++ b/abs/core-testing/libx86/lrmi.patch
@@ -0,0 +1,16 @@
+--- old/lrmi.c 2006-10-30 21:10:16.000000000 +0100
++++ new/lrmi.c 2008-08-27 11:32:40.000000000 +0200
+@@ -64,6 +64,13 @@
+ #define DEFAULT_STACK_SIZE 0x1000
+ #define RETURN_TO_32_INT 255
+
++#ifndef IF_MASK
++#define IF_MASK X86_EFLAGS_VIF
++#define IOPL_MASK X86_EFLAGS_IOPL
++#define VIF_MASK X86_EFLAGS_VIF
++#define TF_MASK X86_EFLAGS_TF
++#endif
++
+ #if defined(__linux__)
+ #define CONTEXT_REGS context.vm.regs
+ #define REG(x) x
diff --git a/abs/core-testing/libxau/PKGBUILD b/abs/core-testing/libxau/PKGBUILD
new file mode 100644
index 0000000..7b2116b
--- /dev/null
+++ b/abs/core-testing/libxau/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxau
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 authorisation library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xproto')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXau-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXau-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('75a9f2b85cd1617b5ca98c9095323853')
diff --git a/abs/core-testing/libxaw/PKGBUILD b/abs/core-testing/libxaw/PKGBUILD
new file mode 100644
index 0000000..3b447d1
--- /dev/null
+++ b/abs/core-testing/libxaw/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxaw
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Athena Widget library"
+arch=(i686 x86_64)
+license=('custom:')
+url="http://xorg.freedesktop.org/"
+depends=('libxmu' 'libxpm' 'libxp')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXaw-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXaw-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/libXaw-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/license.txt
+}
+md5sums=('73671d8f1cf36fdd81395328cc3539c9')
diff --git a/abs/core-testing/libxcb/PKGBUILD b/abs/core-testing/libxcb/PKGBUILD
new file mode 100644
index 0000000..b1eadee
--- /dev/null
+++ b/abs/core-testing/libxcb/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcb
+pkgver=1.1
+pkgrel=1
+pkgdesc="X11 client-side library"
+arch=(i686 x86_64)
+url="http://xcb.freedesktop.org/"
+depends=('xcb-proto>=1.1' 'libxdmcp' 'libxau')
+makedepends=('pkgconfig' 'libxslt' 'libpthread-stubs')
+options=('!libtool')
+license=('custom')
+source=(${url}/dist/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ # Remove pthread-stubs dependency from pc files,
+ # the stubs package doesn't provide any libs since our libc is complete.
+ sed -i -e 's/pthread-stubs//' ${startdir}/pkg/usr/lib/pkgconfig/*.pc
+
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('9310b02433273d75d42f10da3c7455aa')
diff --git a/abs/core-testing/libxcb/xcb_xlib-no-assert-on-lock.patch b/abs/core-testing/libxcb/xcb_xlib-no-assert-on-lock.patch
new file mode 100644
index 0000000..a29361b
--- /dev/null
+++ b/abs/core-testing/libxcb/xcb_xlib-no-assert-on-lock.patch
@@ -0,0 +1,30 @@
+--- src/xcb_xlib.c.orig 2006-11-25 22:03:30.000000000 +0000
++++ src/xcb_xlib.c 2006-11-25 22:19:28.000000000 +0000
+@@ -38,18 +38,20 @@
+ void xcb_xlib_lock(xcb_connection_t *c)
+ {
+ _xcb_lock_io(c);
+- assert(!c->xlib.lock);
+- c->xlib.lock = 1;
+- c->xlib.thread = pthread_self();
++ if (!c->xlib.lock) {
++ c->xlib.lock = 1;
++ c->xlib.thread = pthread_self();
++ }
+ _xcb_unlock_io(c);
+ }
+
+ void xcb_xlib_unlock(xcb_connection_t *c)
+ {
+ _xcb_lock_io(c);
+- assert(c->xlib.lock);
+- assert(pthread_equal(c->xlib.thread, pthread_self()));
+- c->xlib.lock = 0;
+- pthread_cond_broadcast(&c->xlib.cond);
++ if (c->xlib.lock) {
++ assert(pthread_equal(c->xlib.thread, pthread_self()));
++ c->xlib.lock = 0;
++ pthread_cond_broadcast(&c->xlib.cond);
++ }
+ _xcb_unlock_io(c);
+ }
diff --git a/abs/core-testing/libxcomposite/PKGBUILD b/abs/core-testing/libxcomposite/PKGBUILD
new file mode 100644
index 0000000..abde1d4
--- /dev/null
+++ b/abs/core-testing/libxcomposite/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcomposite
+pkgver=0.4.0
+pkgrel=1
+pkgdesc="X11 Composite extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes' 'libxext' 'compositeproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXcomposite-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXcomposite-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('7e95395dea89be21bae929b9b7f16641')
diff --git a/abs/core-testing/libxcursor/PKGBUILD b/abs/core-testing/libxcursor/PKGBUILD
new file mode 100644
index 0000000..673585e
--- /dev/null
+++ b/abs/core-testing/libxcursor/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcursor
+pkgver=1.1.9
+pkgrel=1
+pkgdesc="X cursor management library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes' 'libxrender')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXcursor-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXcursor-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('99b7554037a92b260891091e81815a0a')
diff --git a/abs/core-testing/libxdamage/PKGBUILD b/abs/core-testing/libxdamage/PKGBUILD
new file mode 100644
index 0000000..f174581
--- /dev/null
+++ b/abs/core-testing/libxdamage/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxdamage
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X11 damaged region extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes>=4.0.3' 'damageproto>=1.1')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXdamage-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXdamage-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ac0ce6b0063a9858c8f24ddb4c60487d')
diff --git a/abs/core-testing/libxdmcp/PKGBUILD b/abs/core-testing/libxdmcp/PKGBUILD
new file mode 100644
index 0000000..bc16a60
--- /dev/null
+++ b/abs/core-testing/libxdmcp/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxdmcp
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Display Manager Control Protocol library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xproto' 'glibc')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXdmcp-${pkgver}.tar.bz2)
+md5sums=('10facf2bc7cbd5e5c1a698b8a210a582')
+
+build() {
+ cd ${startdir}/src/libXdmcp-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libxext/PKGBUILD b/abs/core-testing/libxext/PKGBUILD
new file mode 100644
index 0000000..63bc23d
--- /dev/null
+++ b/abs/core-testing/libxext/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxext
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 miscellaneous extensions library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'xextproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXext-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXext-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('a91f1f722ac80c597cf0b75dcb8b48c0')
diff --git a/abs/core-testing/libxfixes/PKGBUILD b/abs/core-testing/libxfixes/PKGBUILD
new file mode 100644
index 0000000..e088300
--- /dev/null
+++ b/abs/core-testing/libxfixes/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxfixes
+pkgver=4.0.3
+pkgrel=1
+pkgdesc="X11 miscellaneous 'fixes' extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'fixesproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXfixes-${pkgver}.tar.bz2)
+md5sums=('1990d19725a3c7f32290037f02d3737f')
+
+build() {
+ cd ${startdir}/src/libXfixes-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libxfixes/xfixes_coverity576.patch b/abs/core-testing/libxfixes/xfixes_coverity576.patch
new file mode 100644
index 0000000..f759ecc
--- /dev/null
+++ b/abs/core-testing/libxfixes/xfixes_coverity576.patch
@@ -0,0 +1,16 @@
+===================================================================
+RCS file: /srv/anoncvs.freedesktop.org/cvs/xorg/lib/Xfixes/src/Xfixes.c,v
+rcsdiff: /srv/anoncvs.freedesktop.org/cvs/xorg/lib/Xfixes/src/Xfixes.c,v: warning: Unknown phrases like `commitid ...;' are present.
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- src/Xfixes.c 2005/05/17 17:02:24 1.3
++++ src/Xfixes.c 2006/04/03 00:58:13 1.4
+@@ -86,6 +86,7 @@
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
++ Xfree(info);
+ return 0;
+ }
+ info->major_version = rep.majorVersion;
diff --git a/abs/core-testing/libxfont/PKGBUILD b/abs/core-testing/libxfont/PKGBUILD
new file mode 100644
index 0000000..3055554
--- /dev/null
+++ b/abs/core-testing/libxfont/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4410 2008-07-06 20:50:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxfont
+pkgver=1.3.3
+pkgrel=1
+pkgdesc="X11 font rasterisation library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+license=('custom')
+depends=('libfontenc' 'freetype2>=2.3.7' 'fontsproto')
+makedepends=('pkgconfig' 'xtrans' 'fontcacheproto' 'xproto')
+options=('!libtool')
+source=(${url}/archive/individual/lib/libXfont-${pkgver}.tar.bz2)
+md5sums=('4f174b9613f87cf00d731da428a1b194')
+
+build() {
+ cd ${startdir}/src/libXfont-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libxfontcache/PKGBUILD b/abs/core-testing/libxfontcache/PKGBUILD
new file mode 100644
index 0000000..4557c80
--- /dev/null
+++ b/abs/core-testing/libxfontcache/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxfontcache
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 font cache library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'fontcacheproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXfontcache-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXfontcache-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('1adca018aa7bf2d215f20a69c10828ad')
diff --git a/abs/core-testing/libxft/PKGBUILD b/abs/core-testing/libxft/PKGBUILD
new file mode 100644
index 0000000..c4a8b4f
--- /dev/null
+++ b/abs/core-testing/libxft/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4363 2008-07-06 19:22:55Z jgc $
+# Maintainer: Alexander Baldeck<alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxft
+pkgver=2.1.13
+pkgrel=1
+pkgdesc="FreeType-based font drawing library for X"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('fontconfig>=2.6.0' 'libxrender')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXft-${pkgver}.tar.bz2)
+md5sums=('bc8881851f3bd8dcc625fac37350a1c6')
+
+build() {
+ cd ${startdir}/src/libXft-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/libxi/PKGBUILD b/abs/core-testing/libxi/PKGBUILD
new file mode 100644
index 0000000..66414d3
--- /dev/null
+++ b/abs/core-testing/libxi/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxi
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="X11 Input extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org"
+depends=('libxext')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXi-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXi-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('7c510abb0cad8dc20493fb27ff7859d8')
diff --git a/abs/core-testing/libxinerama/PKGBUILD b/abs/core-testing/libxinerama/PKGBUILD
new file mode 100644
index 0000000..f841525
--- /dev/null
+++ b/abs/core-testing/libxinerama/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1902 2008-05-22 18:17:12Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxinerama
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 Xinerama extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xineramaproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXinerama-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXinerama-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('cd9f7c46439ac40e0517a302d2434d2c')
diff --git a/abs/core-testing/libxkbfile/PKGBUILD b/abs/core-testing/libxkbfile/PKGBUILD
new file mode 100644
index 0000000..ee582ce
--- /dev/null
+++ b/abs/core-testing/libxkbfile/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 575 2008-04-21 09:49:55Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxkbfile
+pkgver=1.0.5
+pkgrel=1
+pkgdesc="X11 keyboard file manipulation library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libx11')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('0726a845fe5a56551de2718c9f6b0e35')
diff --git a/abs/core-testing/libxkbui/PKGBUILD b/abs/core-testing/libxkbui/PKGBUILD
new file mode 100644
index 0000000..52c20a0
--- /dev/null
+++ b/abs/core-testing/libxkbui/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxkbui
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 keyboard UI presentation library"
+url="http://xorg.freedesktop.org/"
+depends=(libxt libxkbfile)
+makedepends=(pkgconfig)
+options=(!libtool)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(1143e456f7429e18e88f2eadb2f2b6b1)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/libxml2/PKGBUILD b/abs/core-testing/libxml2/PKGBUILD
new file mode 100644
index 0000000..be9b8bc
--- /dev/null
+++ b/abs/core-testing/libxml2/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 1153 2008-05-01 14:49:04Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libxml2
+pkgver=2.6.32
+pkgrel=1
+pkgdesc="XML parsing library, version 2"
+arch=(i686 x86_64)
+license=('custom')
+depends=('zlib' 'readline')
+makedepends=('python>=2.5')
+options=('!libtool')
+source=(ftp://ftp.xmlsoft.org/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+url="http://www.xmlsoft.org/"
+md5sums=('2621d322c16f0257e30f0ff2b13384de')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --with-threads --with-history || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libxmu/PKGBUILD b/abs/core-testing/libxmu/PKGBUILD
new file mode 100644
index 0000000..2f01b71
--- /dev/null
+++ b/abs/core-testing/libxmu/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxmu
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 miscellaneous micro-utility library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'libxt')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXmu-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXmu-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('fb372a5f3ab42b5ba16d7af4d833a0cb')
+md5sums=('fb372a5f3ab42b5ba16d7af4d833a0cb')
diff --git a/abs/core-testing/libxp/PKGBUILD b/abs/core-testing/libxp/PKGBUILD
new file mode 100644
index 0000000..1812082
--- /dev/null
+++ b/abs/core-testing/libxp/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4458 2008-07-07 16:34:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxp
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="X11 X Print Library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'printproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXp-${pkgver}.tar.bz2)
+md5sums=('0f4ac39108c1ae8c443cdfac259b58fa')
+
+build() {
+ cd ${srcdir}/libXp-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libxpm/PKGBUILD b/abs/core-testing/libxpm/PKGBUILD
new file mode 100644
index 0000000..7f05283
--- /dev/null
+++ b/abs/core-testing/libxpm/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxpm
+pkgver=3.5.7
+pkgrel=1
+pkgdesc="X11 pixmap library"
+arch=(i686 x86_64)
+license=('custom:BELL')
+url="http://xorg.freedesktop.org/"
+depends=('libxt' 'libxext')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXpm-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXpm-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXpm-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/license.txt
+}
+md5sums=('cd15ee542d9f515538b4462a6f79d977')
diff --git a/abs/core-testing/libxrandr/PKGBUILD b/abs/core-testing/libxrandr/PKGBUILD
new file mode 100644
index 0000000..2ab366a
--- /dev/null
+++ b/abs/core-testing/libxrandr/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4333 2008-07-06 17:39:17Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxrandr
+pkgver=1.2.3
+pkgrel=1
+pkgdesc="X11 RandR extension library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext>=1.0.4' 'libxrender' 'randrproto>=1.2.2')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXrandr-${pkgver}.tar.bz2)
+md5sums=('5cd67cc02a50c9644ba0a1846ea3b08e')
+
+build() {
+ cd ${startdir}/src/libXrandr-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/libxrender/PKGBUILD b/abs/core-testing/libxrender/PKGBUILD
new file mode 100644
index 0000000..0e9f913
--- /dev/null
+++ b/abs/core-testing/libxrender/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxrender
+pkgver=0.9.4
+pkgrel=1
+pkgdesc="X Rendering Extension client library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'renderproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXrender-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXrender-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('dc266e850c51368f964e0d67bf5fb5e6')
diff --git a/abs/core-testing/libxslt/ChangeLog b/abs/core-testing/libxslt/ChangeLog
new file mode 100644
index 0000000..ccd5848
--- /dev/null
+++ b/abs/core-testing/libxslt/ChangeLog
@@ -0,0 +1,9 @@
+2008-05-31 Eric Belanger <eric@archlinux.org>
+
+ * libxslt 1.1.24-1
+ * Upstream update
+
+2008-05-01 Eric Belanger <eric@archlinux.org>
+
+ * libxslt 1.1.23-1
+ * Upstream update
diff --git a/abs/core-testing/libxslt/PKGBUILD b/abs/core-testing/libxslt/PKGBUILD
new file mode 100644
index 0000000..9a598b0
--- /dev/null
+++ b/abs/core-testing/libxslt/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 2322 2008-05-31 21:12:21Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libxslt
+pkgver=1.1.24
+pkgrel=1
+pkgdesc="XML stylesheet transformation library"
+arch=('i686' 'x86_64')
+url="http://xmlsoft.org/XSLT/"
+license=('custom')
+depends=('libxml2>=2.6.30' 'libgcrypt')
+makedepends=('python>=2.5')
+options=('!libtool')
+source=(ftp://xmlsoft.org/libxslt/${pkgname}-${pkgver}.tar.gz)
+md5sums=('e83ec5d27fc4c10c6f612879bea9a153')
+sha1sums=('b5402e24abff5545ed76f6a55049cbebc664bd58')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || 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
+}
diff --git a/abs/core-testing/libxss/PKGBUILD b/abs/core-testing/libxss/PKGBUILD
new file mode 100644
index 0000000..2226df7
--- /dev/null
+++ b/abs/core-testing/libxss/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 1905 2008-05-22 18:21:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxss
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="X11 Screen Saver extension library"
+arch=(i686 x86_64)
+license=('custom:XFREE86')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'scrnsaverproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXScrnSaver-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXScrnSaver-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXScrnSaver-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('93f84b6797f2f29cae1ce23b0355d00d')
diff --git a/abs/core-testing/libxt/PKGBUILD b/abs/core-testing/libxt/PKGBUILD
new file mode 100644
index 0000000..1d1ab51
--- /dev/null
+++ b/abs/core-testing/libxt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxt
+pkgver=1.0.5
+pkgrel=1
+pkgdesc="X11 toolkit intrinsics library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libsm' 'libx11')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXt-${pkgver}.tar.bz2)
+md5sums=('f3bdd67785ace8cd0b23249e9d8c9975')
+
+build() {
+ cd ${startdir}/src/libXt-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST} \
+ --disable-install-makestrs
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/libxtrap/PKGBUILD b/abs/core-testing/libxtrap/PKGBUILD
new file mode 100644
index 0000000..27d84ee
--- /dev/null
+++ b/abs/core-testing/libxtrap/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4456 2008-07-07 16:29:51Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxtrap
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="X11 event trapping extension library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'libxt' 'trapproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXTrap-${pkgver}.tar.bz2)
+md5sums=('1e2d966b5b2b89910e418bb0f78e10de')
+
+build() {
+ cd ${srcdir}/libXTrap-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/libxtst/PKGBUILD b/abs/core-testing/libxtst/PKGBUILD
new file mode 100644
index 0000000..6144308
--- /dev/null
+++ b/abs/core-testing/libxtst/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxtst
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 Testing -- Resource extension library"
+arch=(i686 x86_64)
+options=('!libtool')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'recordproto')
+makedepends=('pkgconfig')
+source=(${url}/releases/individual/lib/libXtst-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXtst-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('090c1ad04e34982eada5cf3b1a0792fd')
diff --git a/abs/core-testing/libxv/PKGBUILD b/abs/core-testing/libxv/PKGBUILD
new file mode 100644
index 0000000..fa03f4c
--- /dev/null
+++ b/abs/core-testing/libxv/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 577 2008-04-21 09:50:50Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org.
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxv
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Video extension library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'videoproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXv-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXv-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXv-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('723a0275227165383e967a1ca8899b52')
diff --git a/abs/core-testing/libxvmc/PKGBUILD b/abs/core-testing/libxvmc/PKGBUILD
new file mode 100644
index 0000000..49c76b7
--- /dev/null
+++ b/abs/core-testing/libxvmc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxvmc
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Video Motion Compensation extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxv>=1.0.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXvMC-${pkgver}.tar.bz2)
+md5sums=('b54600573daf9d1a29b952e8d35b389e')
+
+build() {
+ cd ${startdir}/src/libXvMC-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/libxxf86dga/PKGBUILD b/abs/core-testing/libxxf86dga/PKGBUILD
new file mode 100644
index 0000000..5adc89f
--- /dev/null
+++ b/abs/core-testing/libxxf86dga/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxxf86dga
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Direct Graphics Access extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xf86dgaproto>=2.0.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXxf86dga-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXxf86dga-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('6f5f621804ee652b6cc6f2025c517c78')
diff --git a/abs/core-testing/libxxf86misc/PKGBUILD b/abs/core-testing/libxxf86misc/PKGBUILD
new file mode 100644
index 0000000..6899377
--- /dev/null
+++ b/abs/core-testing/libxxf86misc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxxf86misc
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X11 XFree86 miscellaneous extension library"
+url="http://xorg.freedesktop.org/"
+depends=(libxext xf86miscproto)
+makedepends=(pkgconfig)
+options=(!libtool)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/libXxf86misc-${pkgver}.tar.bz2)
+md5sums=(7cee0df63903cef7f7a3fb68cdd99eef)
+
+build() {
+ cd ${startdir}/src/libXxf86misc-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/libxxf86vm/PKGBUILD b/abs/core-testing/libxxf86vm/PKGBUILD
new file mode 100644
index 0000000..58a2803
--- /dev/null
+++ b/abs/core-testing/libxxf86vm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4409 2008-07-06 20:49:15Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxxf86vm
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 XFree86 video mode extension library"
+arch=('x86_64' 'i686')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xf86vidmodeproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXxf86vm-${pkgver}.tar.bz2)
+md5sums=('304d37bd0a10d9b58aa9b64469ad73e5')
+
+build() {
+ cd ${startdir}/src/libXxf86vm-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/licenses/LICENSE.ralink-firmware.txt b/abs/core-testing/licenses/LICENSE.ralink-firmware.txt
new file mode 100644
index 0000000..39e3c52
--- /dev/null
+++ b/abs/core-testing/licenses/LICENSE.ralink-firmware.txt
@@ -0,0 +1,39 @@
+Copyright (c) 2007, Ralink Technology Corporation
+All rights reserved.
+
+Redistribution. Redistribution and use in binary form, without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions must reproduce the above copyright notice and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+* Neither the name of Ralink Technology Corporation nor the names of its
+ suppliers may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+* No reverse engineering, decompilation, or disassembly of this software
+ is permitted.
+
+Limited patent license. Ralink Technology Corporation grants a world-wide,
+royalty-free, non-exclusive license under patents it now or hereafter
+owns or controls to make, have made, use, import, offer to sell and
+sell ("Utilize") this software, but solely to the extent that any
+such patent is necessary to Utilize the software alone, or in
+combination with an operating system licensed under an approved Open
+Source license as listed by the Open Source Initiative at
+http://opensource.org/licenses. The patent license shall not apply to
+any other combinations which include this software. No hardware per
+se is licensed hereunder.
+
+DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/abs/core-testing/licenses/PKGBUILD b/abs/core-testing/licenses/PKGBUILD
new file mode 100644
index 0000000..bfd74db
--- /dev/null
+++ b/abs/core-testing/licenses/PKGBUILD
@@ -0,0 +1,123 @@
+# $Id: PKGBUILD 1848 2008-05-22 00:45:32Z eric $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=licenses
+pkgver=2.4
+pkgrel=10
+pkgdesc="The standard licenses distribution package"
+arch=('i686' 'x86_64')
+license=('custom:none')
+url="http://archlinux.org"
+groups=('base')
+source=(http://www.apache.org/licenses/LICENSE-2.0.txt
+ cc-by-3.0.txt
+ cc-by-nc-3.0.txt
+ cc-by-nc-nd-3.0.txt
+ cc-by-nc-sa-3.0.txt
+ cc-by-nd-3.0.txt
+ cc-by-sa-3.0.txt
+ cc-readme.txt
+ cddl-1.0.txt
+ eclipse-1.0.txt
+ http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ http://www.gnu.org/licenses/gpl-3.0.txt
+ http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
+ http://www.gnu.org/licenses/lgpl.txt
+ http://www.gnu.org/licenses/fdl.txt
+ http://www.latex-project.org/lppl.txt
+ http://www.mozilla.org/MPL/MPL-1.1.txt
+ perlartistic.txt
+ http://www.php.net/license/3_0.txt
+ http://www.ruby-lang.org/en/LICENSE.txt
+ cpl-1.0.txt
+ python-2.txt
+ LICENSE.ralink-firmware.txt
+ ZopePublicLicense.txt)
+md5sums=('3b83ef96387f14655fc854ddc3c6bd57'
+ 'ffb24d1bbf8b83d373f0b8edc3feb0c6'
+ '682a5e3b03510ba46c4f566478c871bc'
+ '166b65b71e44630b436bfe937c4c0b73'
+ '89bca4a2dde8b7d39c27a1dc24078932'
+ '2502517d13d8136fffaf248489ad0870'
+ '5367190077e12a7f55403d531ef3998e'
+ '019bc72509b18a804f0ea8fd2bab1932'
+ '6cb35f3976cd093011967fa1abbce386'
+ 'f300afd598546add034364cd0a533261'
+ '751419260aa954499f7abaabaa882bbe'
+ 'd32239bcb673463ab874e80d47fae504'
+ 'fbc093901857fcd118f065f900982c24'
+ '6a6a8e020838b23406c81b19c1d46df6'
+ 'ad1419ecc56e060eccf8184a87c4285f'
+ '9f4337828d782bdea41f03dd2ad1b808'
+ 'bfe1f75d606912a4111c90743d6c7325'
+ 'd09c120ca7db95ef2aeecec0cb08293b'
+ 'a45bb1bbeed9e26b26c5763df1d3913d'
+ '68d59ff8306e3a9f5f1c01462c77a317'
+ 'f083e41c43db25e18f36c91e57750b64'
+ '614f4f550910d90428a567cfaafe62a9'
+ '682eac07428a4e8f138bc082f090ecac'
+ 'dc8502850eab9e1ff330a12d7ca18a19')
+
+build() {
+ cd $startdir/pkg
+ mkdir -p usr/share/licenses/common
+ cd usr/share/licenses/common
+
+ mkdir APACHE
+ cp $startdir/src/LICENSE-2.0.txt APACHE/license.txt
+
+ mkdir CCPL
+ cp $startdir/src/cc-by-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-nd-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-sa-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nd-3.0.txt CCPL/
+ cp $startdir/src/cc-by-sa-3.0.txt CCPL/
+ cp $startdir/src/cc-readme.txt CCPL/
+
+ mkdir CDDL
+ cp $startdir/src/cddl-1.0.txt CDDL/license.txt
+
+ mkdir CPL
+ cp $startdir/src/cpl-1.0.txt CPL/license.txt
+
+ mkdir EPL
+ cp $startdir/src/eclipse-1.0.txt EPL/license.txt
+
+ mkdir {GPL,GPL3}
+ cp $startdir/src/gpl-2.0.txt GPL/license.txt
+ cp $startdir/src/gpl-3.0.txt GPL3/license.txt
+ ln -s GPL GPL2
+
+ mkdir FDL
+ cp $startdir/src/fdl.txt FDL/license.txt
+
+ mkdir {LGPL,LGPL3}
+ cp $startdir/src/lgpl-2.1.txt LGPL/license.txt
+ cp $startdir/src/lgpl.txt LGPL3/license.txt
+ ln -s LGPL LGPL2
+
+ mkdir LPPL
+ cp $startdir/src/lppl.txt LPPL/license.txt
+
+ mkdir MPL
+ cp $startdir/src/MPL-1.1.txt MPL/license.txt
+
+ mkdir PerlArtistic
+ cp $startdir/src/perlartistic.txt PerlArtistic/license.txt
+
+ mkdir PHP
+ cp $startdir/src/3_0.txt PHP/license.txt
+
+ mkdir PSF
+ cp $startdir/src/python-2.txt PSF/license.txt
+
+ mkdir RALINK
+ cp $startdir/src/LICENSE.ralink-firmware.txt RALINK/license.txt
+
+ mkdir RUBY
+ cp $startdir/src/LICENSE.txt RUBY/license.txt
+
+ mkdir ZPL
+ cp $startdir/src/ZopePublicLicense.txt ZPL/license.txt
+}
diff --git a/abs/core-testing/licenses/ZopePublicLicense.txt b/abs/core-testing/licenses/ZopePublicLicense.txt
new file mode 100644
index 0000000..0f06d96
--- /dev/null
+++ b/abs/core-testing/licenses/ZopePublicLicense.txt
@@ -0,0 +1,54 @@
+Zope Public License (ZPL) Version 2.1
+-------------------------------------
+
+A copyright notice accompanies this license document that
+identifies the copyright holders.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the
+ accompanying copyright notice, this list of conditions,
+ and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+ copyright notice, this list of conditions, and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+3. Names of the copyright holders must not be used to
+ endorse or promote products derived from this software
+ without prior written permission from the copyright
+ holders.
+
+4. The right to distribute this software or to use it for
+ any purpose does not give you the right to use
+ Servicemarks (sm) or Trademarks (tm) of the copyright
+ holders. Use of them is covered by separate agreement
+ with the copyright holders.
+
+5. If any files are modified, you must cause the modified
+ files to carry prominent notices stating that you changed
+ the files and the date of any change.
+
+Disclaimer
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
+ AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
diff --git a/abs/core-testing/licenses/cc-by-3.0.txt b/abs/core-testing/licenses/cc-by-3.0.txt
new file mode 100644
index 0000000..4c79aa8
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-3.0.txt
@@ -0,0 +1,60 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested.
+ 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-by-nc-3.0.txt b/abs/core-testing/licenses/cc-by-nc-3.0.txt
new file mode 100644
index 0000000..5727b7f
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-nc-3.0.txt
@@ -0,0 +1,61 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
+ 2. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+ 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
+ 5. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-by-nc-nd-3.0.txt b/abs/core-testing/licenses/cc-by-nc-nd-3.0.txt
new file mode 100644
index 0000000..26ed016
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-nc-nd-3.0.txt
@@ -0,0 +1,58 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+ 2. to Distribute and Publicly Perform the Work including as incorporated in Collections.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
+ 2. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+ 3. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
+ 5. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 4. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 5. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-by-nc-sa-3.0.txt b/abs/core-testing/licenses/cc-by-nc-sa-3.0.txt
new file mode 100644
index 0000000..7d1af0e
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-nc-sa-3.0.txt
@@ -0,0 +1,63 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
+ 5. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 6. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 7. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 8. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 9. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 10. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.
+ 2. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
+ 3. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.
+ 4. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
+ 6. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-by-nd-3.0.txt b/abs/core-testing/licenses/cc-by-nd-3.0.txt
new file mode 100644
index 0000000..118019e
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-nd-3.0.txt
@@ -0,0 +1,57 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+ 2. to Distribute and Publicly Perform the Work including as incorporated in Collections.
+ 3.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested.
+ 2. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(b) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 4. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 5. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-by-sa-3.0.txt b/abs/core-testing/licenses/cc-by-sa-3.0.txt
new file mode 100644
index 0000000..7252d9c
--- /dev/null
+++ b/abs/core-testing/licenses/cc-by-sa-3.0.txt
@@ -0,0 +1,63 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
+ 3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
+ 4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
+ 6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
+ 2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
+ 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core-testing/licenses/cc-readme.txt b/abs/core-testing/licenses/cc-readme.txt
new file mode 100644
index 0000000..38ed7c8
--- /dev/null
+++ b/abs/core-testing/licenses/cc-readme.txt
@@ -0,0 +1,12 @@
+There are 6 different Creative Commons Licenses, all of which are included
+in this licenses directory:
+
+cc-by-3.0.txt - Attribution
+cc-by-nc-3.0.txt - Attribution-NonCommercial
+cc-by-nc-nd-3.0.txt - Attribution-NonCommercial-NoDerivs
+cc-by-nc-sa-3.0.txt - Attribution-NonCommercial-ShareAlike
+cc-by-nd-3.0.txt - Attribution-NoDerivs
+cc-by-sa-3.0.txt - Attribution-ShareAlike
+
+If a package uses one of these licenses, it should be referenced as follows:
+license=('CCPL:by-nc-sa')
diff --git a/abs/core-testing/licenses/cddl-1.0.txt b/abs/core-testing/licenses/cddl-1.0.txt
new file mode 100644
index 0000000..d838932
--- /dev/null
+++ b/abs/core-testing/licenses/cddl-1.0.txt
@@ -0,0 +1,377 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0
+
+1. Definitions.
+
+ 1.1. "Contributor" means each individual or entity that creates
+ or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Software, prior Modifications used by a Contributor (if any),
+ and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Software" means (a) the Original Software, or (b)
+ Modifications, or (c) the combination of files containing
+ Original Software with files containing Modifications, in
+ each case including portions thereof.
+
+ 1.4. "Executable" means the Covered Software in any form other
+ than Source Code.
+
+ 1.5. "Initial Developer" means the individual or entity that first
+ makes Original Software available under this License.
+
+ 1.6. "Larger Work" means a work which combines Covered Software or
+ portions thereof with code not governed by the terms of this
+ License.
+
+ 1.7. "License" means this document.
+
+ 1.8. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed
+ herein.
+
+ 1.9. "Modifications" means the Source Code and Executable form of
+ any of the following:
+
+ A. Any file that results from an addition to, deletion from or
+ modification of the contents of a file containing Original
+ Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original
+ Software or previous Modifications; or
+
+ C. Any new file that is contributed or otherwise made
+ available under the terms of this License.
+
+ 1.10. "Original Software" means the Source Code and Executable
+ form of computer software code that is originally released
+ under this License.
+
+ 1.11. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by
+ grantor.
+
+ 1.12. "Source Code" means (a) the common form of computer software
+ code in which modifications are made and (b) associated
+ documentation included in or with such code.
+
+ 1.13. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms
+ of, this License. For legal entities, "You" includes any
+ entity which controls, is controlled by, or is under common
+ control with You. For purposes of this definition,
+ "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty
+ percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants.
+
+ 2.1. The Initial Developer Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, the Initial
+ Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer, to use,
+ reproduce, modify, display, perform, sublicense and
+ distribute the Original Software (or portions thereof),
+ with or without Modifications, and/or as part of a Larger
+ Work; and
+
+ (b) under Patent Claims infringed by the making, using or
+ selling of Original Software, to make, have made, use,
+ practice, sell, and offer for sale, and/or otherwise
+ dispose of the Original Software (or portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ or otherwise makes the Original Software available to a
+ third party under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: (1) for code that You delete from the Original
+ Software, or (2) for infringements caused by: (i) the
+ modification of the Original Software, or (ii) the
+ combination of the Original Software with other software
+ or devices.
+
+ 2.2. Contributor Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, each
+ Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor to use, reproduce,
+ modify, display, perform, sublicense and distribute the
+ Modifications created by such Contributor (or portions
+ thereof), either on an unmodified basis, with other
+ Modifications, as Covered Software and/or as part of a
+ Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either
+ alone and/or in combination with its Contributor Version
+ (or portions of such combination), to make, use, sell,
+ offer for sale, have made, and/or otherwise dispose of:
+ (1) Modifications made by that Contributor (or portions
+ thereof); and (2) the combination of Modifications made by
+ that Contributor with its Contributor Version (or portions
+ of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first distributes or
+ otherwise makes the Modifications available to a third
+ party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: (1) for any code that Contributor has deleted
+ from the Contributor Version; (2) for infringements caused
+ by: (i) third party modifications of Contributor Version,
+ or (ii) the combination of Modifications made by that
+ Contributor with other software (except as part of the
+ Contributor Version) or other devices; or (3) under Patent
+ Claims infringed by Covered Software in the absence of
+ Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Availability of Source Code.
+
+ Any Covered Software that You distribute or otherwise make
+ available in Executable form must also be made available in Source
+ Code form and that Source Code form must be distributed only under
+ the terms of this License. You must include a copy of this
+ License with every copy of the Source Code form of the Covered
+ Software You distribute or otherwise make available. You must
+ inform recipients of any such Covered Software in Executable form
+ as to how they can obtain such Covered Software in Source Code
+ form in a reasonable manner on or through a medium customarily
+ used for software exchange.
+
+ 3.2. Modifications.
+
+ The Modifications that You create or to which You contribute are
+ governed by the terms of this License. You represent that You
+ believe Your Modifications are Your original creation(s) and/or
+ You have sufficient rights to grant the rights conveyed by this
+ License.
+
+ 3.3. Required Notices.
+
+ You must include a notice in each of Your Modifications that
+ identifies You as the Contributor of the Modification. You may
+ not remove or alter any copyright, patent or trademark notices
+ contained within the Covered Software, or any notices of licensing
+ or any descriptive text giving attribution to any Contributor or
+ the Initial Developer.
+
+ 3.4. Application of Additional Terms.
+
+ You may not offer or impose any terms on any Covered Software in
+ Source Code form that alters or restricts the applicable version
+ of this License or the recipients' rights hereunder. You may
+ choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of
+ Covered Software. However, you may do so only on Your own behalf,
+ and not on behalf of the Initial Developer or any Contributor.
+ You must make it absolutely clear that any such warranty, support,
+ indemnity or liability obligation is offered by You alone, and You
+ hereby agree to indemnify the Initial Developer and every
+ Contributor for any liability incurred by the Initial Developer or
+ such Contributor as a result of warranty, support, indemnity or
+ liability terms You offer.
+
+ 3.5. Distribution of Executable Versions.
+
+ You may distribute the Executable form of the Covered Software
+ under the terms of this License or under the terms of a license of
+ Your choice, which may contain terms different from this License,
+ provided that You are in compliance with the terms of this License
+ and that the license for the Executable form does not attempt to
+ limit or alter the recipient's rights in the Source Code form from
+ the rights set forth in this License. If You distribute the
+ Covered Software in Executable form under a different license, You
+ must make it absolutely clear that any terms which differ from
+ this License are offered by You alone, not by the Initial
+ Developer or Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred
+ by the Initial Developer or such Contributor as a result of any
+ such terms You offer.
+
+ 3.6. Larger Works.
+
+ You may create a Larger Work by combining Covered Software with
+ other code not governed by the terms of this License and
+ distribute the Larger Work as a single product. In such a case,
+ You must make sure the requirements of this License are fulfilled
+ for the Covered Software.
+
+4. Versions of the License.
+
+ 4.1. New Versions.
+
+ Sun Microsystems, Inc. is the initial license steward and may
+ publish revised and/or new versions of this License from time to
+ time. Each version will be given a distinguishing version number.
+ Except as provided in Section 4.3, no one other than the license
+ steward has the right to modify this License.
+
+ 4.2. Effect of New Versions.
+
+ You may always continue to use, distribute or otherwise make the
+ Covered Software available under the terms of the version of the
+ License under which You originally received the Covered Software.
+ If the Initial Developer includes a notice in the Original
+ Software prohibiting it from being distributed or otherwise made
+ available under any subsequent version of the License, You must
+ distribute and make the Covered Software available under the terms
+ of the version of the License under which You originally received
+ the Covered Software. Otherwise, You may also choose to use,
+ distribute or otherwise make the Covered Software available under
+ the terms of any subsequent version of the License published by
+ the license steward.
+
+ 4.3. Modified Versions.
+
+ When You are an Initial Developer and You want to create a new
+ license for Your Original Software, You may create and use a
+ modified version of this License if You: (a) rename the license
+ and remove any references to the name of the license steward
+ (except to note that the license differs from this License); and
+ (b) otherwise make it clear that the license contains terms which
+ differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
+ BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
+ SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+ PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
+ COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+ INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
+ NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
+ WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.
+
+6. TERMINATION.
+
+ 6.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to
+ cure such breach within 30 days of becoming aware of the breach.
+ Provisions which, by their nature, must remain in effect beyond
+ the termination of this License shall survive.
+
+ 6.2. If You assert a patent infringement claim (excluding
+ declaratory judgment actions) against Initial Developer or a
+ Contributor (the Initial Developer or Contributor against whom You
+ assert such claim is referred to as "Participant") alleging that
+ the Participant Software (meaning the Contributor Version where
+ the Participant is a Contributor or the Original Software where
+ the Participant is the Initial Developer) directly or indirectly
+ infringes any patent, then any and all rights granted directly or
+ indirectly to You by such Participant, the Initial Developer (if
+ the Initial Developer is not the Participant) and all Contributors
+ under Sections 2.1 and/or 2.2 of this License shall, upon 60 days
+ notice from Participant terminate prospectively and automatically
+ at the expiration of such 60 day notice period, unless if within
+ such 60 day period You withdraw Your claim with respect to the
+ Participant Software against such Participant either unilaterally
+ or pursuant to a written agreement with Participant.
+
+ 6.3. In the event of termination under Sections 6.1 or 6.2 above,
+ all end user licenses that have been validly granted by You or any
+ distributor hereunder prior to termination (excluding licenses
+ granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+ INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+ COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
+ LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+ LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
+ STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
+ INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+ APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+ NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
+ APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+ The Covered Software is a "commercial item," as that term is
+ defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
+ computer software" (as that term is defined at 48
+ C.F.R. 252.227-7014(a)(1)) and "commercial computer software
+ documentation" as such terms are used in 48 C.F.R. 12.212
+ (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48
+ C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
+ U.S. Government End Users acquire Covered Software with only those
+ rights set forth herein. This U.S. Government Rights clause is in
+ lieu of, and supersedes, any other FAR, DFAR, or other clause or
+ provision that addresses Government rights in computer software
+ under this License.
+
+9. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed
+ by the law of the jurisdiction specified in a notice contained
+ within the Original Software (except to the extent applicable law,
+ if any, provides otherwise), excluding such jurisdiction's
+ conflict-of-law provisions. Any litigation relating to this
+ License shall be subject to the jurisdiction of the courts located
+ in the jurisdiction and venue specified in a notice contained
+ within the Original Software, with the losing party responsible
+ for costs, including, without limitation, court costs and
+ reasonable attorneys' fees and expenses. The application of the
+ United Nations Convention on Contracts for the International Sale
+ of Goods is expressly excluded. Any law or regulation which
+ provides that the language of a contract shall be construed
+ against the drafter shall not apply to this License. You agree
+ that You alone are responsible for compliance with the United
+ States export administration regulations (and the export control
+ laws and regulation of any other countries) when You use,
+ distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or
+ indirectly, out of its utilization of rights under this License
+ and You agree to work with Initial Developer and Contributors to
+ distribute such responsibility on an equitable basis. Nothing
+ herein is intended or shall be deemed to constitute any admission
+ of liability.
+
+--------------------------------------------------------------------
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND
+DISTRIBUTION LICENSE (CDDL)
+
+For Covered Software in this distribution, this License shall
+be governed by the laws of the State of California (excluding
+conflict-of-law provisions).
+
+Any litigation relating to this License shall be subject to the
+jurisdiction of the Federal Courts of the Northern District of
+California and the state courts of the State of California, with
+venue lying in Santa Clara County, California.
diff --git a/abs/core-testing/licenses/cpl-1.0.txt b/abs/core-testing/licenses/cpl-1.0.txt
new file mode 100644
index 0000000..c48081b
--- /dev/null
+++ b/abs/core-testing/licenses/cpl-1.0.txt
@@ -0,0 +1,217 @@
+Common Public License Version 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from a
+ Contributor if it was added to the Program by such Contributor itself or anyone
+ acting on such Contributor's behalf. Contributions do not include additions to
+ the Program which: (i) are separate modules of software distributed in
+ conjunction with the Program under their own license agreement, and (ii) are
+ not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly perform,
+ distribute and sublicense the Contribution of such Contributor, if any, and
+ such derivative works, in source code and object code form.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code and
+ object code form. This patent license shall apply to the combination of the
+ Contribution and the Program if, at the time the Contribution is added by the
+ Contributor, such addition of the Contribution causes such combination to be
+ covered by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other intellectual
+ property rights of any other entity. Each Contributor disclaims any liability
+ to Recipient for claims brought by any other entity based on infringement of
+ intellectual property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed, if any.
+ For example, if a third party patent license is required to allow Recipient to
+ distribute the Program, it is Recipient's responsibility to acquire that
+ license before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright license
+ set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+
+ b) its license agreement:
+
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of title
+ and non-infringement, and implied warranties or conditions of merchantability
+ and fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and consequential
+ damages, such as lost profits;
+
+ iii) states that any provisions which differ from this Agreement are offered
+ by that Contributor alone and not by any other party; and
+
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable manner on
+ or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+
+ b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its exercise
+of rights under this Agreement, including but not limited to the risks and
+costs of program errors, compliance with applicable laws, damage to or loss of
+data, programs or equipment, and unavailability or interruption of operations.
+
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect
+to a patent applicable to software (including a cross-claim or counterclaim in
+a lawsuit), then any patent licenses granted by that Contributor to such
+Recipient under this Agreement shall terminate as of the date such litigation
+is filed. In addition, if Recipient institutes patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software or
+hardware) infringes such Recipient's patent(s), then such Recipient's rights
+granted under Section 2(b) shall terminate as of the date such litigation is
+filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+IBM is the initial Agreement Steward. IBM may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial
+in any resulting litigation.
diff --git a/abs/core-testing/licenses/eclipse-1.0.txt b/abs/core-testing/licenses/eclipse-1.0.txt
new file mode 100644
index 0000000..f61d34d
--- /dev/null
+++ b/abs/core-testing/licenses/eclipse-1.0.txt
@@ -0,0 +1,88 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
+
diff --git a/abs/core-testing/licenses/perlartistic.txt b/abs/core-testing/licenses/perlartistic.txt
new file mode 100644
index 0000000..aaf7c88
--- /dev/null
+++ b/abs/core-testing/licenses/perlartistic.txt
@@ -0,0 +1,151 @@
+NAME
+ perlartistic - the Perl Artistic License
+
+SYNOPSIS
+ You can refer to this document in Pod via "L<perlartistic>"
+ Or you can see this document by entering "perldoc perlartistic"
+
+DESCRIPTION
+ This is "The Artistic License". It's here so that modules, programs,
+ etc., that want to declare this as their distribution license, can link
+ to it.
+
+ It is also one of the two licenses Perl allows itself to be
+ redistributed and/or modified; for the other one, the GNU General Public
+ License, see the perlgpl.
+
+The "Artistic License"
+ Preamble
+ The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package, while
+ giving the users of the package the right to use and distribute the
+ Package in a more-or-less customary fashion, plus the right to make
+ reasonable modifications.
+
+ Definitions
+ "Package"
+ refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+
+ "Standard Version"
+ refers to such a Package if it has not been modified, or has been
+ modified in accordance with the wishes of the Copyright Holder as
+ specified below.
+
+ "Copyright Holder"
+ is whoever is named in the copyright or copyrights for the package.
+
+ "You"
+ is you, if you're thinking about copying or distributing this
+ Package.
+
+ "Reasonable copying fee"
+ is whatever you can justify on the basis of media cost, duplication
+ charges, time of people involved, and so on. (You will not be
+ required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+
+ "Freely Available"
+ means that no fee is charged for the item itself, though there may
+ be fees involved in handling the item. It also means that recipients
+ of the item may redistribute it under the same conditions they
+ received it.
+
+ Conditions
+ 1. You may make and give away verbatim copies of the source form of the
+ Standard Version of this Package without restriction, provided that
+ you duplicate all of the original copyright notices and associated
+ disclaimers.
+
+ 2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+
+ 3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you do
+ at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on
+ a major archive site such as uunet.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+
+ b) use the modified Package only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and
+ provide a separate manual page for each non-standard executable
+ that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+ 4. You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent),
+ together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+ 5. You may charge a reasonable copying fee for any distribution of this
+ Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this
+ Package as a product of your own. You may embed this Package's
+ interpreter within an executable of yours (by linking); this shall
+ be construed as a mere form of aggregation, provided that the
+ complete Standard Version of the interpreter is so embedded.
+
+ 6. The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whoever generated
+ them, and may be sold commercially, and may be aggregated with this
+ Package. If such scripts or library files are aggregated with this
+ Package via the so-called "undump" or "unexec" methods of producing
+ a binary executable image, then distribution of such an image shall
+ neither be construed as a distribution of this Package nor shall it
+ fall under the restrictions of Paragraphs 3 and 4, provided that you
+ do not represent such an executable image as a Standard Version of
+ this Package.
+
+ 7. C subroutines (or comparably compiled subroutines in other
+ languages) supplied by you and linked into this Package in order to
+ emulate subroutines and variables of the language defined by this
+ Package shall not be considered part of this Package, but are the
+ equivalent of input as in Paragraph 6, provided these subroutines do
+ not change the language in any way that would cause it to fail the
+ regression tests for the language.
+
+ 8. Aggregation of this Package with a commercial distribution is always
+ permitted provided that the use of this Package is embedded; that
+ is, when no overt attempt is made to make this Package's interfaces
+ visible to the end user of the commercial distribution. Such use
+ shall not be construed as a distribution of this Package.
+
+ 9. The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+ 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
+
diff --git a/abs/core-testing/licenses/python-2.txt b/abs/core-testing/licenses/python-2.txt
new file mode 100644
index 0000000..d8e1f80
--- /dev/null
+++ b/abs/core-testing/licenses/python-2.txt
@@ -0,0 +1,270 @@
+A. HISTORY OF THE SOFTWARE
+==========================
+
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC. Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team. In October of the same
+year, the PythonLabs team moved to Digital Creations (now Zope
+Corporation, see http://www.zope.com). In 2001, the Python Software
+Foundation (PSF, see http://www.python.org/psf/) was formed, a
+non-profit organization created specifically to own Python-related
+Intellectual Property. Zope Corporation is a sponsoring member of
+the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition). Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+ Release Derived Year Owner GPL-
+ from compatible? (1)
+
+ 0.9.0 thru 1.2 1991-1995 CWI yes
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
+ 1.6 1.5.2 2000 CNRI no
+ 2.0 1.6 2000 BeOpen.com no
+ 1.6.1 1.6 2001 CNRI yes (2)
+ 2.1 2.0+1.6.1 2001 PSF no
+ 2.0.1 2.0+1.6.1 2001 PSF yes
+ 2.1.1 2.1+2.0.1 2001 PSF yes
+ 2.2 2.1.1 2001 PSF yes
+ 2.1.2 2.1.1 2002 PSF yes
+ 2.1.3 2.1.2 2002 PSF yes
+ 2.2.1 2.2 2002 PSF yes
+ 2.2.2 2.2.1 2002 PSF yes
+ 2.2.3 2.2.2 2003 PSF yes
+ 2.3 2.2.2 2002-2003 PSF yes
+ 2.3.1 2.3 2002-2003 PSF yes
+ 2.3.2 2.3.1 2002-2003 PSF yes
+ 2.3.3 2.3.2 2002-2003 PSF yes
+ 2.3.4 2.3.3 2004 PSF yes
+ 2.3.5 2.3.4 2005 PSF yes
+ 2.4 2.3 2004 PSF yes
+ 2.4.1 2.4 2005 PSF yes
+ 2.4.2 2.4.1 2005 PSF yes
+ 2.4.3 2.4.2 2006 PSF yes
+ 2.5 2.4 2006 PSF yes
+ 2.5.1 2.5 2007 PSF yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+ the GPL. All Python licenses, unlike the GPL, let you distribute
+ a modified version without making your changes open source. The
+ GPL-compatible licenses make it possible to combine Python with
+ other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+ because its license has a choice of law clause. According to
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+ is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python
+alone or in any derivative version, provided, however, that PSF's
+License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
+2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
+All Rights Reserved" are retained in Python alone or in any derivative
+version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee. This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions. Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee. This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party. As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee. Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement. This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013. This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee. This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+ ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands. All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/abs/core-testing/linhes-live/PKGBUILD b/abs/core-testing/linhes-live/PKGBUILD
new file mode 100644
index 0000000..d497fcf
--- /dev/null
+++ b/abs/core-testing/linhes-live/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: R. Dale Thomas <rdt[at]KnoppMyth[dot]net>
+# 2008.09.25
+pkgname=linhes-live
+pkgver=5.3.3
+pkgrel=4
+
+pkgdesc="LinHes compulsory components for the Live System."
+url="http://KnoppMyth.net"
+depends=()
+arch=( i586 i686 x86_64 )
+license=('GPL')
+
+build() {
+ # setup the local environment:
+ local rDir=bin eDir=etc lDir=lib sDir=session-save oDir=opt/$pkgname
+ local srcDir=${startdir}/src pkgDir=${startdir}/pkg
+ local insDir=${pkgDir}/$oDir proDir=${pkgDir}/${eDir}/profile.d
+
+ mkdir -p $pkgDir $insDir $proDir
+ cp -dr ${startdir}/$eDir $pkgDir
+ local pthDir=
+ echo 'export PATH=${PATH}:'"/$oDir/$rDir" > ${proDir}/${pkgname}.sh
+ cp -dr ${startdir}/$lDir $pkgDir
+ cp -dr ${startdir}/$rDir $insDir
+ [ -d ${startdir}/$sDir ] && cp -dr ${startdir}/$sDir $insDir
+ chown -R root.root $pkgDir
+ return 0
+}
+
+# End
diff --git a/abs/core-testing/linhes-live/bin/gen_fstab b/abs/core-testing/linhes-live/bin/gen_fstab
new file mode 100755
index 0000000..db36546
--- /dev/null
+++ b/abs/core-testing/linhes-live/bin/gen_fstab
@@ -0,0 +1,122 @@
+#! /bin/sh
+#
+# gen_fstab - make new fstab for larch live system based on detected devices
+#
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2007.12.17
+
+# Note that the results are, by default, not copied into place
+# They end up here:
+DEST="/tmp/fstab"
+MNT="/tmp/mnt"
+
+# However, passing '-l' as command-line option will install them.
+# The old fstab will then be backed up to fstab~.
+LOAD=""
+if [ "$1" = "-l" ]; then LOAD="-l"; fi
+
+if [ -n "$( df | grep " ${MNT}" )" ]; then
+ echo "ERROR: Mounted filesystem at/within ${MNT}"
+ exit 1
+fi
+mkdir -p ${MNT}
+rm -rf ${MNT}/*
+
+tmpfile="/tmp/fstab2"
+: >${tmpfile}
+
+echo "# fstab generated by gen_fstab" >${DEST}
+echo "#<file system> <dir> <type> <options> <dump> <pass>" >>${DEST}
+echo >>${DEST}
+
+echo "none /dev/pts devpts defaults 0 0" >>${DEST}
+echo "none /dev/shm tmpfs defaults 0 0" >>${DEST}
+echo >>${DEST}
+
+# Get all other partitions
+sfdisk -d | grep "^/dev/" | sed "s|\(.*\):.*Id=\(..\).*|\1 \2|" | \
+ while read dev id; do
+ # Ignore if id is "Extended" or "LVM", these are not usable partitions
+ if [ "${id}" = "5" -o "${id}" = "8e" ]; then continue; fi
+ # See if swap
+ if [ "${id}" = "82" ]; then
+ printf "%-12s %-12s %-8s defaults,noatime 0 0\n" \
+ ${dev} swap swap >>${DEST}
+ continue
+ fi
+ removable=""
+ part=$( basename ${dev} )
+ if [ $( cat /sys/block/${part:0:3}/removable 2>/dev/null ) -ne 0 ]; then
+ removable="_rmv"
+ fi
+ mountdir=${part}${removable}
+ printf "%-12s %-12s %-8s user,noauto,noatime 0 0\n" \
+ ${dev} /mnt/${mountdir} auto >>${tmpfile}
+ mkdir -p ${MNT}/${mountdir}
+ done
+
+# LVM
+for lvmd in $( ls /dev/mapper 2>/dev/null | grep -v control ); do
+ printf "%-30s %-22s %-8s user,noauto,noatime 0 0\n" \
+ /dev/mapper/${lvmd} /mnt/${lvmd} auto >>${tmpfile}
+ mkdir -p ${MNT}/${lvmd}
+done
+
+echo >>${DEST}
+cat ${tmpfile} >>${DEST}
+rm ${tmpfile}
+echo >>${DEST}
+
+# CD devices
+for dev in $( cat /proc/sys/dev/cdrom/info 2>/dev/null | head -n 3 | \
+ tail -n 1 | cut -d ":" -f 2 ); do
+ mountdir="${dev}_cd"
+ mkdir ${MNT}/${mountdir}
+ printf "%-12s %-12s %-8s user,noauto,exec,unhide 0 0\n" \
+ /dev/${dev} /mnt/${mountdir} auto >>${DEST}
+done
+
+echo >>${DEST}
+echo "# This would do for a floppy" >>${DEST}
+echo "#/dev/fd0 /mnt/floppy vfat,ext2 rw,user,noauto 0 0" >>${DEST}
+echo "# + mkdir /mnt/floppy" >>${DEST}
+echo >>${DEST}
+echo "# E.g. for USB storage:" >>${DEST}
+echo "#/dev/sdb1 /mnt/usb auto rw,user,noauto 0 0" >>${DEST}
+echo "# + mkdir /mnt/usb" >>${DEST}
+
+if [ -n "${LOAD}" ]; then
+ # test if the script is started by root user. If not, exit
+ if [ $UID -ne 0 ]; then
+ echo "Only root can run ${APP}"; exit 1
+ fi
+
+ cp -b ${DEST} /etc/fstab
+ # Delete removeable mount points which are not currently mounted
+ for m in $( ls /mnt | grep ^[hs]d ); do
+ if [ -z "$( df | grep " /mnt/${m}$" )" ]; then
+ rmdir /mnt/${m}
+ fi
+ done
+ for m in $( ls ${MNT} ); do
+ mkdir -p /mnt/${m}
+ done
+fi
diff --git a/abs/core-testing/linhes-live/bin/km b/abs/core-testing/linhes-live/bin/km
new file mode 100755
index 0000000..386d966
--- /dev/null
+++ b/abs/core-testing/linhes-live/bin/km
@@ -0,0 +1,76 @@
+#!/bin/sh
+# $Id: km,v 1.2 2005/12/13 04:14:53 judd Exp $
+# Modified by gradgrind to deal only with i386 keymaps
+# and BASEDIR changed
+# - also saves results to /etc/rc.conf
+
+# test if the script is started by root user. If not, exit
+if [ $UID -ne 0 ]; then
+ echo "This should be run as root"; exit 1
+fi
+
+ANSWER="/tmp/.km"
+BASEDIR="/usr/share/kbd"
+
+domenu()
+{
+ menutype=$1 ; shift
+ text=$1 ; shift
+ height=$1 ; shift
+ width=$1 ; shift
+ mheight=$1 ; shift
+
+ dialog --cancel-label "Skip" --$menutype "$text" $height $width $mheight $*
+}
+
+if [ ! -d $BASEDIR/keymaps ]; then
+ echo "Cannot load keymaps, as none were found in $BASEDIR/keymaps" >&2
+ exit 1
+else
+ echo "Scanning for keymaps..."
+ KEYMAPS=
+ for t in qwerty qwertz azerty dvorak; do
+ for i in `find $BASEDIR/keymaps/i386/$t -follow -name "*.gz"`; do
+ fn=`echo $i | sed "s|$BASEDIR/keymaps/i386/||"`
+ KEYMAPS="$KEYMAPS $fn -"
+ done
+ done
+ domenu menu "Select A Keymap" 22 60 16 $KEYMAPS 2>$ANSWER
+ keymap=`cat $ANSWER`
+fi
+
+if [ ! -d $BASEDIR/consolefonts ]; then
+ echo "Cannot load consolefonts, as none were found in $BASEDIR/consolefonts" >&2
+else
+ echo "Scanning for fonts..."
+ FONTS=
+ for i in `find $BASEDIR/consolefonts -follow -name "*.gz"`; do
+ fn=`echo $i | sed "s|$BASEDIR/consolefonts/||"`
+ FONTS="$FONTS $fn -"
+ done
+ domenu menu "Select A Console Font" 22 60 16 $FONTS 2>$ANSWER
+ font=`cat $ANSWER`
+fi
+
+if [ "$keymap" ]; then
+ echo "Loading keymap: $keymap"
+ loadkeys -q $BASEDIR/keymaps/i386/$keymap
+ sed -i "s|^KEYMAP=.*|KEYMAP=\"$( echo $keymap | \
+ cut -d'.' -f1 )\"|" /etc/rc.conf
+fi
+
+if [ "$font" ]; then
+ echo "Loading font: $font"
+ for i in `seq 1 4`; do
+ if [ -d /dev/vc ]; then
+ setfont $BASEDIR/consolefonts/$font -C /dev/vc/${i}
+ else
+ setfont $BASEDIR/consolefonts/$font -C /dev/tty${i}
+ fi
+ done
+ sed -i "s|^CONSOLEFONT=.*|CONSOLEFONT=\"$( echo $font | \
+ cut -d'.' -f1 )\"|" /etc/rc.conf
+fi
+
+exit 0
+
diff --git a/abs/core-testing/linhes-live/etc/live-shutdown b/abs/core-testing/linhes-live/etc/live-shutdown
new file mode 100644
index 0000000..807ec47
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/live-shutdown
@@ -0,0 +1,50 @@
+# Functions used by rc.shutdown
+# Modified versions for linhes live systems
+
+f_saveclock ()
+{
+ :
+}
+
+f_swapoff ()
+{
+ ############################# Include session saving functions
+ . /opt/linhes-live/session-save/shutdown2
+ if [ -f /tmp/checkse ]; then
+ . /tmp/checkse
+ else
+ checkse
+ fi
+
+ if [ -n "${saving}" ] && ! session_save; then
+ echo
+ echo "If you know what you are doing, you may be able to recover"
+ echo "something from this unpleasant situation."
+ echo
+ echo "You may use the command line to investigate further ..."
+ echo
+ echo "When finished please enter 'exit', the shutdown process will"
+ echo "then continue."
+ sh -i
+ fi
+
+ #############################
+
+ stat_busy "Deactivating Swap"
+ /sbin/swapoff -a
+ stat_done
+}
+
+f_remountro ()
+{
+ if [ -n "${ejectdev}" ]; then
+ echo "Ejecting live CD"
+ eject ${ejectdev}
+ echo "========================================"
+ echo "It's safe to switch the computer off now"
+ echo -ne "Press Enter to continue"
+ read junk
+ fi
+}
+
+# End
diff --git a/abs/core-testing/linhes-live/etc/live-sysinit b/abs/core-testing/linhes-live/etc/live-sysinit
new file mode 100644
index 0000000..abab4a8
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/live-sysinit
@@ -0,0 +1,54 @@
+# Functions used by rc.sysinit
+# Modified versions for linhes live systems
+
+f_header ()
+{
+ cR='\e[31m' cY='\e[1;33m' cN='\e[0m' cW='\e[1;37m'
+ echo " "
+ printsep
+ printf " ${cR}LinHes ${cY}Installation${cN}/${cY}Live${cW} CDROM${cN}. "
+ printsep
+ echo " "
+}
+
+f_fscheck ()
+{
+ stat_busy "Initializing /etc/mtab"
+ #/bin/mount -n -o remount,rw /
+
+ /bin/rm -f /etc/mtab*
+
+ # Make entries for aufs/unionfs, tmpfs and live medium in /etc/mtab
+ grep "^aufs */ " /proc/mounts >>/etc/mtab
+ grep "^unionfs */ " /proc/mounts >>/etc/mtab
+ grep "^tmpfs */.livesys " /proc/mounts >>/etc/mtab
+ if [ -d /.livesys/medium/live ]; then
+ grep " /.livesys/medium " /proc/mounts >>/etc/mtab
+ fi
+
+ f_mountlocal
+ stat_done
+
+ if [ -z "$( cat /etc/fstab | grep "^#KEEP" )" ]; then
+ stat_busy "Generating fresh /etc/fstab"
+ /opt/linhes-live/bin/gen_fstab -l
+ stat_done
+ fi
+
+ # now mount all the local filesystems
+ stat_busy "Mounting Local Filesystems"
+ /bin/mount -a -t $NETFS
+ stat_done
+}
+
+f_swapon ()
+{
+ #+*** Copy session-save flag-file (if it exists)
+ [ -f /live/nosave ] && cp /live/nosave /.livesys
+ #-***
+
+ #*** Conditional swap activation
+ if [ -e /.livesys/swapon ]; then
+ status "Activating Swap" /sbin/swapon -a
+ fi
+}
diff --git a/abs/core-testing/linhes-live/etc/loginroot b/abs/core-testing/linhes-live/etc/loginroot
new file mode 100755
index 0000000..e3153c6
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/loginroot
@@ -0,0 +1,3 @@
+#! /bin/sh
+login -f root
+# End
diff --git a/abs/core-testing/linhes-live/etc/rc.shutdown-live b/abs/core-testing/linhes-live/etc/rc.shutdown-live
new file mode 100755
index 0000000..7fa97e6
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/rc.shutdown-live
@@ -0,0 +1,167 @@
+#!/bin/bash
+#
+# /etc/rc.shutdown
+#
+
+###
+# Based on initscripts 2008.05-1
+###
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+###############################################################
+### These functions have been separated out, so that they can be
+### replaced in linhes live systems.
+
+f_saveclock ()
+{
+ stat_busy "Saving System Clock"
+ if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
+ /bin/rm -f /etc/localtime
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+ fi
+
+ HWCLOCK_PARAMS="--systohc"
+ if [ "$HARDWARECLOCK" = "UTC" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
+ else
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
+ fi
+ if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa"
+ fi
+ /sbin/hwclock $HWCLOCK_PARAMS
+ stat_done
+}
+
+f_swapoff ()
+{
+ stat_busy "Deactivating Swap"
+ /sbin/swapoff -a
+ stat_done
+}
+
+f_remountro ()
+{
+ stat_busy "Remounting Root Filesystem Read-only"
+ /bin/mount -n -o remount,ro /
+ stat_done
+}
+
+###############################################################
+
+### Override above functions if running linhes live system
+[ -f /etc/live-shutdown ] && . /etc/live-shutdown
+
+# avoid staircase effect
+/bin/stty onlcr
+
+echo " "
+printhl "Initiating Shutdown..."
+echo " "
+
+# avoid NIS hanging syslog-ng on shutdown by unsetting the domainname
+if [ -x /bin/domainname ]; then
+ /bin/domainname ""
+fi
+
+if [ -x /etc/rc.local.shutdown ]; then
+ /etc/rc.local.shutdown
+fi
+
+if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then
+ # Shutdown daemons
+ let i=${#DAEMONS[@]}
+ while [ $i -ge 0 ]; do
+ if [ "${DAEMONS[$i]:0:1}" != '!' ]; then
+ ck_daemon ${DAEMONS[$i]#@} || /etc/rc.d/${DAEMONS[$i]#@} stop
+ fi
+ let i=i-1
+ done
+ # find any leftover daemons and shut them down in reverse order
+ if [ -d /var/run/daemons ]; then
+ for daemon in $(/bin/ls -1t /var/run/daemons); do
+ /etc/rc.d/$daemon stop
+ done
+ fi
+fi
+
+# Terminate all processes
+stat_busy "Sending SIGTERM To Processes"
+/sbin/killall5 -15 &> /dev/null
+/bin/sleep 5
+stat_done
+
+stat_busy "Sending SIGKILL To Processes"
+/sbin/killall5 -9 &> /dev/null
+/bin/sleep 1
+stat_done
+
+stat_busy "Saving Random Seed"
+/bin/dd if=/dev/urandom of=/var/run/random-seed count=1 bs=512 2> /dev/null
+stat_done
+
+#F Save system time
+f_saveclock
+
+# removing psmouse module to fix some reboot issues on newer laptops
+/sbin/modprobe -r psmouse >/dev/null 2>&1
+
+# Write to wtmp file before unmounting
+/sbin/halt -w
+
+#F Deactivate swaps
+f_swapoff
+
+stat_busy "Unmounting Filesystems"
+/bin/umount -a -t noramfs,notmpfs,nosysfs,noproc
+stat_done
+
+# Kill non-root encrypted partition mappings
+if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then
+ stat_busy "Deactivating encrypted volumes:"
+ CS=/sbin/cryptsetup.static
+ do_uncrypt() {
+ if [ $# -ge 3 ]; then
+ stat_append "${1}.."
+ $CS remove $1 >/dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ stat_append "failed "
+ else
+ stat_append "ok "
+ fi
+ fi
+ }
+ while read line; do
+ eval do_uncrypt "$line"
+ done </etc/crypttab
+ stat_done
+fi
+
+if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ stat_busy "Deactivating LVM2 groups"
+ /sbin/lvm vgchange --ignorelockingfailure -an >/dev/null 2>&1
+ stat_done
+ fi
+fi
+
+#F Remount / ro
+f_remountro
+
+# Power off or reboot
+if [ "$RUNLEVEL" = "0" ]; then
+ printsep
+ printhl "${C_H2}POWER OFF"
+ /sbin/poweroff -d -f -h -i
+else
+ printsep
+ printhl "${C_H2}REBOOTING"
+ # if kexec is installed and a kernel is loaded, use it
+ [ -x /sbin/kexec ] && /sbin/kexec -e > /dev/null 2>&1
+ /sbin/reboot -d -f -i
+fi
+
+# vim: set ts=2 sw=2 noet:
+# End
diff --git a/abs/core-testing/linhes-live/etc/rc.sysinit-live b/abs/core-testing/linhes-live/etc/rc.sysinit-live
new file mode 100755
index 0000000..3f72a50
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/rc.sysinit-live
@@ -0,0 +1,466 @@
+#!/bin/bash
+#
+# /etc/rc.sysinit
+#
+
+###
+# Based on initscripts 2008.05-1
+###
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+###############################################################
+### These functions have been separated out, so that they can be
+### replaced in linhes live systems.
+
+f_header ()
+{
+ echo " "
+ printhl "Arch Linux $C_OTHER(${C_H2}Core Dump$C_OTHER)\n"
+ printhl "${C_H2}http://www.archlinux.org"
+ printhl "Copyright 2002-2007 Judd Vinet"
+ printhl "Copyright 2007-2008 Aaron Griffin"
+ printhl "Distributed under the GNU General Public License (GPL)"
+ printsep
+}
+
+f_fscheck ()
+{
+ status "Mounting Root Read-only" /bin/mount -n -o remount,ro /
+
+ if [ -x /sbin/fsck ]; then
+ stat_busy "Checking Filesystems"
+ if /bin/grep -qw quiet /proc/cmdline; then
+ /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK >/dev/null 2>&1
+ else
+ /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK 2>/dev/null
+ fi
+ fsckret=$?
+ if [ ${fsckret} -gt 1 ]; then
+ stat_fail
+ if [ $((${fsckret}&2)) -eq 2 ]; then
+ echo
+ echo "********************** REBOOT REQUIRED *********************"
+ echo "* *"
+ echo "* The system will be rebooted automatically in 15 seconds. *"
+ echo "* *"
+ echo "************************************************************"
+ echo
+ /bin/sleep 15
+ else
+ echo
+ echo "***************** FILESYSTEM CHECK FAILED ****************"
+ echo "* *"
+ echo "* Please repair manually and reboot. Note that the root *"
+ echo "* file system is currently mounted read-only. To remount *"
+ echo "* it read-write type: mount -n -o remount,rw / *"
+ echo "* When you exit the maintenance shell the system will *"
+ echo "* reboot automatically. *"
+ echo "* *"
+ echo "************************************************************"
+ echo
+ /sbin/sulogin -p
+ fi
+ echo "Automatic reboot in progress..."
+ /bin/umount -a
+ /bin/mount -n -o remount,ro /
+ /sbin/reboot -f
+ exit 0
+ fi
+ stat_done
+ fi
+
+ stat_busy "Mounting Local Filesystems"
+ /bin/mount -n -o remount,rw /
+ /bin/rm -f /etc/mtab*
+ # make sure / gets written to /etc/mtab
+ /bin/mount -o remount,rw /
+
+ f_mountlocal
+ stat_done
+}
+
+f_mountlocal ()
+{
+ # Write /proc, /sys and /dev to /etc/mtab
+ if [ -e /proc/mounts ]; then
+ /bin/grep -e "/proc " -e "/sys " -e "/dev " /proc/mounts >> /etc/mtab
+ fi
+ # now mount all the local filesystems
+ /bin/mount -a -t $NETFS
+}
+
+f_swapon ()
+{
+ status "Activating Swap" /sbin/swapon -a
+}
+
+###############################################################
+
+### Override above functions if running linhes live system
+[ -f /etc/live-sysinit ] && . /etc/live-sysinit
+
+#F Print header
+f_header
+
+# mount /proc, /sys and our RAM /dev
+/bin/mount -n -t ramfs none /dev
+/bin/mount -n -t proc none /proc
+/bin/mount -n -t sysfs none /sys
+
+# Create our default nodes that minilogd may need
+/bin/mknod /dev/null c 1 3
+/bin/mknod /dev/zero c 1 5
+/bin/mknod /dev/console c 5 1
+
+# More initial /dev setup that udev doesn't do
+/bin/ln -snf /proc/self/fd /dev/fd
+/bin/ln -snf /proc/self/fd/0 /dev/stdin
+/bin/ln -snf /proc/self/fd/1 /dev/stdout
+/bin/ln -snf /proc/self/fd/2 /dev/stderr
+/bin/ln -snf /proc/kcore /dev/core
+/bin/mkdir /dev/pts
+/bin/mkdir /dev/shm
+
+# start up our mini logger until syslog takes over
+/sbin/minilogd
+
+# anything more serious than KERN_WARNING goes to the console
+# 'verbose' cmdline parameter enables more messages
+if /bin/grep -q " verbose" /proc/cmdline; then
+ /bin/dmesg -n 8
+else
+ /bin/dmesg -n 3
+fi
+
+# enable rtc access
+/sbin/modprobe rtc-cmos >/dev/null 2>&1
+RTC_MAJOR=$(/bin/grep -w rtc /proc/devices 2>/dev/null); RTC_MAJOR="${RTC_MAJOR%% *}"
+if [ -n "$RTC_MAJOR" ]; then
+ /bin/mkdir /dev/misc/
+ /bin/mknod /dev/misc/rtc0 c $RTC_MAJOR 0
+ /bin/ln -s /dev/misc/rtc0 /dev/rtc
+fi
+
+HWCLOCK_PARAMS="--hctosys"
+if [ "$HARDWARECLOCK" = "UTC" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
+else
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
+fi
+if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa"
+fi
+
+# Set clock early to fix some bugs with filesystem checks
+# Clock is set again later to match rc.conf
+if [ -f /etc/localtime ]; then
+ /sbin/hwclock $HWCLOCK_PARAMS --noadjfile
+fi
+
+echo > /proc/sys/kernel/hotplug
+
+if [ -x /sbin/udevadm -a -d /sys/block ]; then
+ # We have udev and /sys appears to be mounted, use UDev
+ #status "Starting UDev Daemon" /etc/start_udev init
+
+ stat_busy "Starting UDev Daemon"
+ /sbin/udevd --daemon
+ stat_done
+else
+ # Static /dev, our last resort
+ status "Using static /dev filesystem" true
+fi
+
+# Load modules from the MODULES array defined in rc.conf
+if ! [ "$load_modules" = "off" ]; then
+ if [ -f /proc/modules ]; then
+ stat_busy "Loading Modules"
+ for mod in "${MODULES[@]}"; do
+ if [ "$mod" = "${mod#!}" ]; then
+ /sbin/modprobe $mod
+ fi
+ done
+ stat_done
+ fi
+ if [ -d /proc/acpi ]; then
+ stat_busy "Loading standard ACPI modules"
+ ACPI_MODULES="ac battery button fan processor thermal"
+ k="$(echo $BLACKLIST ${MOD_BLACKLIST[@]} | /bin/sed 's|-|_|g')"
+ j="$(echo ${MODULES[@]} | /bin/sed 's|-|_|g')"
+ #add disabled MODULES (!) to blacklist - much requested feature
+ for m in ${j}; do
+ [ "$m" != "${m#!}" ] && k="${k} ${m#!}"
+ done
+ # add disablemodules= from commandline to blacklist
+ k="${k} $(echo ${disablemodules} | /bin/sed 's|-|_|g' | /bin/sed 's|,| |g')"
+ for n in ${ACPI_MODULES}; do
+ if ! echo ${k} | /bin/grep "\<$n\>" 2>&1 >/dev/null; then
+ /sbin/modprobe $n > /dev/null 2>&1
+ fi
+ done
+ stat_done
+ fi
+fi
+
+# run udev uevents
+if /bin/pidof -o %PPID /sbin/udevd >/dev/null; then
+ #status "Loading UDev uevents" /etc/start_udev uevents
+ stat_busy "Loading UDev uevents"
+ udevstart="$(/bin/date +%s%0N)"
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+ stat_done
+ udevend="$(/bin/date +%s%0N)"
+ printhl " UDev uevent processing time: $((($udevend-$udevstart)/1000000))ms"
+fi
+
+# bring up the loopback interface
+if [ -d /sys/class/net/lo ]; then
+ stat_busy "Bringing up loopback interface"
+ /sbin/ifconfig lo 127.0.0.1 up
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+fi
+
+# If necessary, find md devices and manually assemble RAID arrays
+if [ -f /etc/mdadm.conf -a "$(/bin/grep ^ARRAY /etc/mdadm.conf 2>/dev/null)" ]; then
+ # udev won't create these md nodes, so we do it ourselves
+ for dev in $(/bin/grep ^ARRAY /etc/mdadm.conf | /bin/awk '{print $2}'); do
+ path=$(echo $dev | /bin/sed 's|/[^/]*$||')
+ node=$(echo $dev | /bin/sed "s|^$path/||")
+ minor=$(echo $node | /bin/sed 's|^[^0-9]*||')
+ [ ! -e $path/$node ] && /bin/mknod $path/$node b 9 $minor
+ done
+ status "Activating RAID arrays" /sbin/mdadm --assemble --scan
+fi
+
+if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ # Kernel 2.6.x, LVM2 groups
+ /sbin/modprobe -q dm-mod 2>/dev/null
+ stat_busy "Activating LVM2 groups"
+ /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null
+ /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ fi
+fi
+
+# Set up non-root encrypted partition mappings
+if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then
+ /sbin/modprobe -q dm-mod 2>/dev/null
+ stat_busy "Unlocking encrypted volumes:"
+ csfailed=0
+ CS=/sbin/cryptsetup.static
+ do_crypt() {
+ if [ $# -ge 3 ]; then
+ cname="$1"
+ csrc="$2"
+ cpass="$3"
+ shift 3
+ copts="$*"
+ stat_append "${cname}.."
+ # For some fun reason, the parameter ordering varies for
+ # LUKS and non-LUKS devices. Joy.
+ if [ "${cpass}" = "SWAP" ]; then
+ # This is DANGEROUS! The only possible safety check
+ # is to not proceed in case we find a LUKS device
+ # This may cause dataloss if it is not used carefully
+ if $CS isLuks $csrc 2>/dev/null; then
+ false
+ else
+ $CS -d /dev/urandom $copts create $cname $csrc >/dev/null
+ if [ $? -eq 0 ]; then
+ stat_append "creating swapspace.."
+ /sbin/mkswap -L $cname /dev/mapper/$cname >/dev/null
+ fi
+ fi
+ elif [ "${cpass}" = "ASK" ]; then
+ printf "\nOpening '${cname}' volume:\n"
+
+ if $CS isLuks $csrc 2>/dev/null; then
+ $CS $copts luksOpen $csrc $cname < /dev/console
+ else
+ $CS $copts create $cname $csrc < /dev/console
+ fi
+ elif [ "${cpass:0:1}" != "/" ]; then
+ if $CS isLuks $csrc 2>/dev/null; then
+ echo "$cpass" | $CS $copts luksOpen $csrc $cname >/dev/null
+ else
+ echo "$cpass" | $CS $copts create $cname $csrc >/dev/null
+ fi
+ else
+ if $CS isLuks $csrc 2>/dev/null; then
+ $CS -d $cpass $copts luksOpen $csrc $cname >/dev/null
+ else
+ $CS -d $cpass $copts create $cname $csrc >/dev/null
+ fi
+ fi
+ if [ $? -ne 0 ]; then
+ csfailed=1
+ stat_append "failed "
+ else
+ stat_append "ok "
+ fi
+ fi
+ }
+ while read line; do
+ eval do_crypt "$line"
+ done </etc/crypttab
+ if [ $csfailed -eq 0 ]; then
+ stat_done
+ else
+ stat_fail
+ fi
+ # Maybe someone has LVM on an encrypted block device
+ if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null
+ /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null
+ fi
+ fi
+fi
+
+FORCEFSCK=
+[ -f /forcefsck ] && FORCEFSCK="-- -f"
+NETFS="nonfs,nonfs4,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,noshfs,nofuse,nofuseblk"
+
+#F Check filesystems
+f_fscheck
+
+#F Activate swaps
+f_swapon
+
+stat_busy "Configuring System Clock"
+if [ ! -f /var/lib/hwclock/adjtime ]; then
+ echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
+fi
+if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
+ /bin/rm -f /etc/localtime
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+fi
+
+/sbin/hwclock $HWCLOCK_PARAMS
+stat_done
+
+if [ -f /var/run/random-seed ]; then
+ stat_busy "Initializing Random Seed"
+ /bin/cat /var/run/random-seed >/dev/urandom
+ stat_done
+fi
+
+stat_busy "Removing Leftover Files"
+/bin/rm -f /etc/nologin &>/dev/null
+/bin/rm -f /etc/shutdownpid &>/dev/null
+/bin/rm -f /var/lock/* &>/dev/null
+/bin/rm -rf /tmp/* /tmp/.* &>/dev/null
+/bin/rm -f /forcefsck &>/dev/null
+(cd /var/run && /usr/bin/find . ! -type d -exec /bin/rm -f -- {} \; )
+: > /var/run/utmp
+# Keep {x,k,g}dm happy with xorg
+/bin/mkdir /tmp/.ICE-unix && /bin/chmod 1777 /tmp/.ICE-unix
+/bin/mkdir /tmp/.X11-unix && /bin/chmod 1777 /tmp/.X11-unix
+stat_done
+
+#status "Updating Shared Library Links" /sbin/ldconfig
+
+if [ "$HOSTNAME" != "" ]; then
+ status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME
+fi
+
+# Set the NIS domain name, if necessary
+[ -f /etc/conf.d/nisdomainname ] && . /etc/conf.d/nisdomainname
+if [ "$NISDOMAINNAME" != "" ]; then
+ status "Setting NIS Domain Name: $NISDOMAINNAME" /bin/nisdomainname $NISDOMAINNAME
+fi
+
+status "Updating Module Dependencies" /sbin/depmod -A
+
+# Flush old locale settings
+: >/etc/profile.d/locale.sh
+/bin/chmod 755 /etc/profile.d/locale.sh
+# Set user defined locale
+[ -z "$LOCALE" ] && LOCALE="en_US"
+stat_busy "Setting Locale: $LOCALE"
+echo "export LANG=$LOCALE" >>/etc/profile.d/locale.sh
+stat_done
+
+if echo "$LOCALE" | /bin/grep -qi utf ; then
+ stat_busy "Setting Consoles to UTF-8 mode"
+ # UTF-8 consoles are default since 2.6.24 kernel
+ # this code is needed not only for older kernels,
+ # but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8.
+ /usr/bin/kbd_mode -u
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e%%G" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%G"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q -u $KEYMAP
+else
+ stat_busy "Setting Consoles to legacy mode"
+ # make non-UTF-8 consoles work on 2.6.24 and newer kernels
+ /usr/bin/kbd_mode -a
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e%%@" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%@"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q $KEYMAP
+fi
+
+if [ -n "$CONSOLEFONT" ]; then
+ stat_busy "Loading Console Font: $CONSOLEFONT"
+ #CONSOLEMAP in UTF-8 shouldn't be used
+ if [ -n "$CONSOLEMAP" ] && echo "$LOCALE" | /bin/grep -qi utf ; then
+ CONSOLEMAP=""
+ fi
+ for i in $(/usr/bin/seq 0 63); do
+ if [ -n "$CONSOLEMAP" ]; then
+ /usr/bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1
+ else
+ /usr/bin/setfont $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1
+ fi
+ done
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e(K" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e(K"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ fi
+fi
+
+# Adding persistent network/cdrom generated rules
+if [ -f "/dev/.udev/tmp-rules--70-persistent-cd.rules" ]; then
+ stat_busy "Adding persistent cdrom udev rules"
+ /bin/cat /dev/.udev/tmp-rules--70-persistent-cd.rules >> /etc/udev/rules.d/70-persistent-cd.rules
+ stat_done
+fi
+if [ -f "/dev/.udev/tmp-rules--70-persistent-net.rules" ]; then
+ stat_busy "Adding persistent network udev rules"
+ /bin/cat /dev/.udev/tmp-rules--70-persistent-net.rules >> /etc/udev/rules.d/70-persistent-net.rules
+ stat_done
+fi
+
+# Save our dmesg output from this boot
+if [ -f /var/log/dmesg.log ]; then
+ /bin/rm /var/log/dmesg.log
+fi
+/bin/dmesg > /var/log/dmesg.log
+
+# vim: set ts=2 noet:
+# End
diff --git a/abs/core-testing/linhes-live/etc/ulogin b/abs/core-testing/linhes-live/etc/ulogin
new file mode 100755
index 0000000..085c431
--- /dev/null
+++ b/abs/core-testing/linhes-live/etc/ulogin
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# ulogin - A script for autologin of a selected user (and more)
+#-----------------------------------------------------------------
+# 2008.04.06
+
+user=$( cat /tmp/newuser 2>/dev/null )
+
+rm -f /tmp/newuser
+rm -f /tmp/xlogout
+
+if [ -n "${user}" ]; then
+ login -f ${user}
+else
+ # offer choice of user
+ ulist="$( cat /etc/passwd | grep ':/home/.*sh$' )"
+ echo -e "\nLogin a user or quit:"
+ echo " 0 : root"
+ echo " 1 : REBOOT"
+ echo " 2 : HALT"
+
+ i=2
+ for entry in ${ulist}; do
+ i=$(( ${i} + 1 ))
+ user="$( echo ${entry} | cut -d':' -f1 )"
+ users[${i}]=${user}
+ printf "%4d : %s\n" ${i} ${user}
+ done
+ while true; do
+ read -p "Enter a number from 0 to ${i} : " n
+ if [ "${n}" = 0 ]; then
+ login -f root
+ elif [ "${n}" = 1 ]; then
+ exec reboot
+ elif [ "${n}" = 2 ]; then
+ exec halt
+ elif [ -n "$( echo "${n}" | grep "^[0-9]\+$" )" ] && \
+ [ -n "${users[${n}]}" ]; then
+ login -f ${users[${n}]}
+ else
+ echo " *** Invalid choice ..."
+ continue
+ fi
+ break
+ done
+fi
+
+if grep "r" /tmp/xlogout &>/dev/null; then
+ reboot
+elif grep "h" /tmp/xlogout &>/dev/null; then
+ halt
+fi
+
+# This file is only needed for shutting down
+rm -f /tmp/checkse
+
+# End
diff --git a/abs/core-testing/linhes-live/lib/initcpio/gen_larch_init b/abs/core-testing/linhes-live/lib/initcpio/gen_larch_init
new file mode 100755
index 0000000..d834e8f
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/gen_larch_init
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+# gen_larch_init
+#
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+
+# Create an initramfs for a larch live system
+# $1 - kernel version
+
+# The cpio.gz image is generated in larch.img
+
+/sbin/mkinitcpio -c /lib/initcpio/mkinitcpio.conf -k $1 -g larch.img
diff --git a/abs/core-testing/linhes-live/lib/initcpio/hooks/larch1 b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch1
new file mode 100644
index 0000000..e1a3753
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch1
@@ -0,0 +1,120 @@
+# vim: set ft=sh:
+
+# larch1 - live 'hook' for mkinitcpio: set up tmpfs and find boot device
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+#2008.02.11
+
+# Replacement for msg which includes leading and trailing spaces
+msg_ () { [ "${quiet}" != "y" ] && echo "$@"; }
+
+# Try to mount a disk, partition or cdrom and look for the file
+# 'larchboot' in the /larch directory.
+# If LiveCD system found in the device, return 0, else return 1
+# and leave the device mounted.
+# $1 = device name (e.g. "/dev/hda2")
+# $2 = directory where devices will be mounted
+#
+test_live_data_dir ()
+{
+ /bin/mount -r -t iso9660 "$1" $2 >/dev/null 2>/dev/null || \
+ /bin/mount -r -t vfat -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null || \
+ /bin/mount -r -t ext2 -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null
+ if [ $? -eq 0 ]; then
+ if [ -f "$2/larch/larchboot" ]; then
+ LDEV="$1"
+ msg_ " ... found at $1"
+ return 0
+ else
+ /bin/umount $2 2>/dev/null
+ msg_ " ... $1 mounted, but no 'larch/larchboot' found"
+ fi
+ else
+ msg_ " ... not $1"
+ fi
+ return 1
+}
+
+run_hook ()
+{
+ msg_ ":: Creating writeable filesystem (tmpfs)"
+ /bin/mkdir "/tfs"
+ # Boot option copy-to-ram (c2r)
+ if [ "${c2r}" = "y" ]; then
+ TFSSIZE="90%"
+ else
+ TFSSIZE="60%"
+ fi
+ /bin/mount -t tmpfs -o "size=${TFSSIZE}" tmpfs "/tfs"
+
+ # Directory for test mounts (and then for live CD)
+ cdmount="/livecd"
+ /bin/mkdir "${cdmount}"
+
+ # look for livecd data directory, first try ${root}
+ LDEV="${root}"
+ if [ "x${LDEV}" != "x" ]; then
+ /bin/mount -r -t iso9660 "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \
+ /bin/mount -r -t vfat -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \
+ /bin/mount -r -t ext2 -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null
+ if [ $? -eq 0 ]; then
+ if [ -d "${cdmount}/larch" ]; then
+ msg_ ":: larch system at ${LDEV}"
+ else
+ /bin/umount "${cdmount}" 2>/dev/null
+ echo "!! No larch system at ${LDEV}"
+ LDEV=""
+ fi
+ else
+ echo "!! Couldn't mount ${LDEV}"
+ LDEV=""
+ fi
+ fi
+
+ # then try cdroms
+ if [ "x${LDEV}" = "x" ]; then
+ msg_ ":: Looking for boot device"
+ cdroms=$( /bin/cat /proc/sys/dev/cdrom/info | { while read a b c; do
+ if [ "${a}" = "drive" -a "${b}" = "name:" ]; then
+ echo "${c}"
+ break
+ fi
+ done
+ } )
+ for i in ${cdroms}; do
+ test_live_data_dir "/dev/${i}" "${cdmount}"
+ if [ $? -eq 0 ]; then break; fi
+ done
+ fi
+
+ # test USB devices (and disks) repeatedly until timed out
+ if [ "x${LDEV}" = "x" ]; then
+ msg_ ":: Searching for usb (and disk) devices .."
+ for i in 1 2 3 4 5; do
+ msg_ " :wait ${i} :::"
+ /bin/sleep ${i}
+ for d in /dev/sd[a-z][0-9]*; do
+ test_live_data_dir "${d}" "${cdmount}"
+ if [ $? -eq 0 ]; then break 2; fi
+ done
+ done
+ fi
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2 b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2
new file mode 100644
index 0000000..74b4e64
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2
@@ -0,0 +1,33 @@
+# larch2 - live 'hook' for mkinitcpio: unionfs specific
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+#2007.12.13
+
+run_hook ()
+{
+ #!!! --- unionfs specific
+ # Need unionfs module
+ /bin/modprobe unionfs
+ ovlmnt="ro"
+ bropt="dirs="
+ sqfmnt="ro"
+ utype="unionfs"
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2_aufs b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2_aufs
new file mode 100644
index 0000000..ac8e40b
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch2_aufs
@@ -0,0 +1,33 @@
+# larch2_aufs - live 'hook' for mkinitcpio: aufs specific
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2008.02.29
+
+run_hook ()
+{
+ #!!! --- aufs specific
+ # Need aufs module
+ /bin/modprobe aufs
+ ovlmnt="rr+wh"
+ sqfmnt="rr"
+ bropt="br:"
+ utype="aufs"
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/hooks/larch3 b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch3
new file mode 100644
index 0000000..47be81a
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/hooks/larch3
@@ -0,0 +1,192 @@
+# larch3 - live 'hook' for mkinitcpio:
+# deal with c2r,
+# mount base system,
+# load overlay,
+# set up unioned root filesystem.
+# Also manages overlay merging.
+
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2008.04.04
+
+run_hook ()
+{
+ if [ "x${LDEV}" = "x" ]; then
+ err "Sorry, couldn't find boot medium ..."
+ break="y"
+ return
+ fi
+
+ /sbin/modprobe loop
+
+ # Path to compressed base system
+ sysSqf=${cdmount}/system.sqf
+
+ ovlpath=${cdmount}
+
+ # A possibility to use alternative files:
+ if [ -f ${cdmount}/larch/boot-init ]; then
+ . ${cdmount}/larch/boot-init
+ fi
+
+ # Path to compressed 'modifications' archive
+ modsSqf=${ovlpath}/mods.sqf
+ # Default overlay file and directory
+ overlay=${ovlpath}/overlay.ovl
+
+ # Make union root
+ /bin/mkdir /union
+
+ # Deal with new archives
+ if [ -f ${overlay}_ ]; then
+ /bin/mount -o remount,rw ${LDEV} ${cdmount}
+ /bin/mv ${overlay} ${overlay}~
+ /bin/mv ${overlay}_ ${overlay}
+
+ if [ -f ${modsSqf}_ ]; then
+ /bin/mv ${modsSqf} ${modsSqf}~
+ /bin/mv ${modsSqf}_ ${modsSqf}
+ fi
+ /bin/mount -o remount,ro ${LDEV} ${cdmount}
+ fi
+
+ # Boot option copy-to-ram (c2r)
+ if [ "${c2r}" = "y" ]; then
+ msg_ ":: Copying base system to RAM, this will take a while ..."
+ /bin/cat ${sysSqf} > /tfs/system.sqf
+ if [ $? -ne 0 ]; then
+ err "Sorry, not enough RAM"
+ break="y"
+ return
+ fi
+ sysSqf=/tfs/system.sqf
+
+ msg_ ":: Copying mods archive to RAM, this might take a while ..."
+ /bin/cat ${modsSqf} > /tfs/mods.sqf
+ if [ $? -ne 0 ]; then
+ err "Sorry, not enough RAM"
+ break="y"
+ return
+ fi
+ modsSqf=/tfs/mods.sqf
+
+ # force use of swap (if available)
+ :> /tfs/swapon
+
+ elif [ "${swap}" = "y" ]; then
+ :> /tfs/swapon
+ fi
+
+ msg_ ":: Mounting squashed images"
+ /bin/mkdir /tfs/system
+ # The klibc mount command doesn't support '-o loop'
+ /bin/losetup /dev/loop0 ${sysSqf}
+ /bin/mount -r -t squashfs /dev/loop0 /tfs/system
+
+ # Make stuff in 'system' available by providing the loader and
+ # library path
+ ldli=$( cd /tfs/system; echo lib/ld-linux*.so.2 )
+ /bin/ln -s /tfs/system/${ldli} /${ldli}
+ export LD_LIBRARY_PATH=/tfs/system/lib:/tfs/system/usr/lib
+
+ /bin/mkdir /tfs/mods
+ # The klibc mount command doesn't support '-o loop'
+ /bin/losetup /dev/loop1 ${modsSqf}
+ /bin/mount -r -t squashfs /dev/loop1 /tfs/mods
+
+ # Unpack the overlay
+ msg_ ":: Initializing writable layer for union (overlay)"
+ /tfs/system/usr/bin/lzop -d < ${overlay} | \
+ /tfs/system/bin/tar -C /tfs -xf -
+
+ # Copy the installation tidy-up script (for removing custom live-only stuff),
+ # and any other files in 'larch/copy' directory
+ if [ -d ${ovlpath}/larch/copy ]; then
+ cd ${ovlpath}/larch/copy
+ for f in *; do
+ cat ${f} >/tfs/${f}
+ done
+ fi
+
+ msg_ ":: Setting up union file system"
+
+ layers="/tfs/overlay=rw:/tfs/mods=${ovlmnt}:/tfs/system=${sqfmnt}"
+ /bin/mount -t ${utype} -o ${bropt}${layers} ${utype} /union
+
+ echo "${utype}" > /tfs/utype
+
+ # Minimal device nodes needed before udev does its work
+ /bin/mkdir /union/dev
+ /bin/mknod /union/dev/console c 5 1
+ /bin/mknod /union/dev/null c 1 3
+ /bin/mknod /union/dev/zero c 1 5
+
+ # Make special directories
+ /bin/mkdir -m 1777 /union/tmp
+ /bin/mkdir /union/media
+ /bin/mkdir /union/sys
+ /bin/mkdir /union/proc
+
+ # Make the tmpfs stuff accessible within the union
+ /bin/mkdir /union/.livesys
+ /bin/mount -o bind /tfs /union/.livesys
+
+ /bin/mkdir /union/.livesys/medium
+
+ /bin/mount -o bind /tfs/system /union/.livesys/system
+ /bin/mount -o bind /tfs/overlay /union/.livesys/overlay
+ /bin/mount -o bind ${cdmount} /union/.livesys/medium
+
+ if [ "x${modsSqf}" != "x" ]; then
+ /bin/mount -o move /tfs/mods /union/.livesys/mods
+ fi
+
+ # Remember the boot device
+ echo "${LDEV}" > /tfs/bootdevice
+
+ if [ "${c2r}" = "y" ]; then
+ # Set flag to inform system of copy-to-ram
+ :> /tfs/c2r
+
+ # Unmount boot device
+ /bin/umount ${cdmount}
+ fi
+
+ msg_ ":: End of live system set-up"
+
+ # Now some tweaks to alter 'init' actions from non-larch hooks, etc.
+ # Override rootdelay from usb hook
+ if [ "x${larchdelay}" = "x" ]; then
+ # To avoid spurious udevd pid numbers
+ export rootdelay=1
+ else
+ # Allow adjustment via boot option
+ export rootdelay=${larchdelay}
+ fi
+ # root must be set to something or other, even though larch doesn't
+ # need it ...
+ export root="/dev/loop0"
+}
+
+#######
+# The actual root switch occurs later, when 'init' execs 'kinit'.
+# I handle this by overwriting the 'kinit' binary with my own script.
+# This will unmount dev, sys and proc and then exec run-init.
+#######
diff --git a/abs/core-testing/linhes-live/lib/initcpio/install/larch1 b/abs/core-testing/linhes-live/lib/initcpio/install/larch1
new file mode 100644
index 0000000..56baf48
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/install/larch1
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="vfat isofs ext2 ext3 nls_cp437"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch1"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It is the first larch hook,
+creating a tmpfs and seeking the boot medium.
+HELPEOF
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/install/larch2 b/abs/core-testing/linhes-live/lib/initcpio/install/larch2
new file mode 100644
index 0000000..a906227
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/install/larch2
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="unionfs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch2"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It handles selection of the
+desired unioning file system, here unionfs.
+HELPEOF
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/install/larch2_aufs b/abs/core-testing/linhes-live/lib/initcpio/install/larch2_aufs
new file mode 100644
index 0000000..0e19de9
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/install/larch2_aufs
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="aufs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch2_aufs"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It handles selection of the
+desired unioning file system, here aufs.
+HELPEOF
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/install/larch3 b/abs/core-testing/linhes-live/lib/initcpio/install/larch3
new file mode 100644
index 0000000..7dad03c
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/install/larch3
@@ -0,0 +1,18 @@
+install ()
+{
+ MODULES="squashfs loop reiserfs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch3"
+# add_file "/lib/initcpio/kinit" "/bin/kinit" ##### This doesn't work, so:
+ sed -i 's|.*/usr/lib/klibc/bin/kinit\.shared.*||' "${FILELIST}"
+ sed -i 's|/usr/lib/klibc/bin/kinit|/lib/initcpio/kinit|' "${FILELIST}"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It is the last larch hook,
+setting up the tmpfs root file system.
+HELPEOF
+}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/kinit b/abs/core-testing/linhes-live/lib/initcpio/kinit
new file mode 100755
index 0000000..7c86f4b
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/kinit
@@ -0,0 +1,6 @@
+#! /bin/sh
+
+umount /sys
+umount /proc
+umount /dev
+exec run-init -c /dev/console /union /sbin/init ${CMDLINE}
diff --git a/abs/core-testing/linhes-live/lib/initcpio/mkinitcpio.conf b/abs/core-testing/linhes-live/lib/initcpio/mkinitcpio.conf
new file mode 100644
index 0000000..79cca21
--- /dev/null
+++ b/abs/core-testing/linhes-live/lib/initcpio/mkinitcpio.conf
@@ -0,0 +1,54 @@
+# vim:set ft=sh
+# MODULES
+# The following modules are loaded before any boot hooks are
+# run. Advanced users may wish to specify all system modules
+# in this array. For instance:
+# MODULES="piix ide_disk reiserfs"
+MODULES=""
+
+# BINARIES
+# This setting includes, into the CPIO image, and additional
+# binaries a given user may wish. This is run first, so may
+# be used to override the actual binaries used in a given hook.
+# (Existing files are NOT overwritten is already added)
+# BINARIES are dependancy parsed, so you may safely ignore libraries
+#BINARIES=""
+
+# FILES
+# This setting is similar to BINARIES above, however, files are added
+# as-is and are not parsed in anyway. This is useful for config files.
+# Some users may wish to include modprobe.conf for custom module options,
+# like so:
+# FILES="/etc/modprobe.conf"
+FILES=""
+
+# HOOKS
+# This is the most important setting in this file. The HOOKS control the
+# modules and scripts added to the image, and what happens at boot time.
+# Order is important, and it is recommended that you do not change the
+# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
+# help on a given hook.
+# 'base' is _required_ unless you know precisely what you are doing.
+# 'udev' is _required_ in order to automatically load modules
+# 'modload' may be used in place of 'udev', but is not recommended
+# 'filesystems' is _required_ unless you specify your fs modules in MODULES
+# Examples:
+# This setup specifies all modules in the MODULES setting above.
+# No raid, lvm, or encrypted root is needed.
+# HOOKS="base"
+#
+# This setup will autodetect all modules for your system and should
+# work as a sane default
+# HOOKS="base udev autodetect ide scsi sata filesystems"
+#
+# This setup will generate a 'full' image which supports most systems.
+# No autodetection is done.
+# HOOKS="base udev ide scsi sata usb filesystems"
+#
+# This setup assembles an ide raid array with an encrypted root FS.
+# Note: See 'mkinitcpio -H raid' for more information on raid devices.
+# HOOKS="base udev ide filesystems raid encrypt"
+#
+# This setup loads an LVM volume group on a usb device.
+# HOOKS="base udev usb filesystems lvm"
+HOOKS="base udev pata scsi sata usb larch1 larch2___aufs___ larch3"
diff --git a/abs/core-testing/linuxtv-dvb-apps/ChangeLog b/abs/core-testing/linuxtv-dvb-apps/ChangeLog
new file mode 100644
index 0000000..7fd5bbf
--- /dev/null
+++ b/abs/core-testing/linuxtv-dvb-apps/ChangeLog
@@ -0,0 +1,2 @@
+2007-06-26 tardo <tardo@nagi-fanboi.net>
+* Built for x86_64
diff --git a/abs/core-testing/linuxtv-dvb-apps/PKGBUILD b/abs/core-testing/linuxtv-dvb-apps/PKGBUILD
new file mode 100644
index 0000000..05b719b
--- /dev/null
+++ b/abs/core-testing/linuxtv-dvb-apps/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD,v 1.2 2007/06/27 02:00:07 tardo Exp $
+# Contributor: Jaroslaw Swierczynski <swiergot@juvepoland.com>
+# Contributor: Camille Moncelier <pix@devlife.org>
+
+pkgname=linuxtv-dvb-apps
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="Viewer programs for DVB cards"
+arch=('i686' 'x86_64')
+url="http://www.linuxtv.org/"
+license=('GPL')
+depends=(glibc)
+install=linuxtv-dvb-apps.install
+source=(http://www.linuxtv.org/download/dvb/$pkgname-$pkgver.tar.bz2)
+md5sums=('de958cdb8d00e74792dd69f3c945b037')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ rm -rf include
+ make || return 1
+ install -m 755 -d $startdir/pkg/usr/{bin,share/dvb-utils/{scan/{atsc,dvb-{c,s,t}},av7110_loadkeys}}
+ install -m 755 util/av7110_loadkeys/av7110_loadkeys $startdir/pkg/usr/bin
+ install -m 755 util/av7110_loadkeys/evtest $startdir/pkg/usr/bin
+ install -m 644 util/av7110_loadkeys/*.rc* $startdir/pkg/usr/share/dvb-utils/av7110_loadkeys
+ install -m 755 util/dvbdate/dvbdate $startdir/pkg/usr/bin
+ install -m 755 util/dvbnet/dvbnet $startdir/pkg/usr/bin
+ install -m 755 util/dvbtraffic/dvbtraffic $startdir/pkg/usr/bin
+ install -m 755 util/scan/scan $startdir/pkg/usr/bin
+ install -m 644 util/scan/atsc/* $startdir/pkg/usr/share/dvb-utils/scan/atsc
+ install -m 644 util/scan/dvb-c/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-c
+ install -m 644 util/scan/dvb-s/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-s
+ install -m 644 util/scan/dvb-t/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-t
+ install -m 755 util/szap/azap $startdir/pkg/usr/bin
+ install -m 755 util/szap/czap $startdir/pkg/usr/bin
+ install -m 755 util/szap/femon $startdir/pkg/usr/bin
+ install -m 755 util/szap/szap $startdir/pkg/usr/bin
+ install -m 755 util/szap/tzap $startdir/pkg/usr/bin
+}
diff --git a/abs/core-testing/linuxtv-dvb-apps/linuxtv-dvb-apps.install b/abs/core-testing/linuxtv-dvb-apps/linuxtv-dvb-apps.install
new file mode 100644
index 0000000..f735122
--- /dev/null
+++ b/abs/core-testing/linuxtv-dvb-apps/linuxtv-dvb-apps.install
@@ -0,0 +1,12 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">>> Some initial-tuning-data files have been installed under"
+ echo ">>> /usr/share/dvb-utils/scan/"
+ echo ">>> you can use them to generate your channel.conf file"
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/lirc-utils/PKGBUILD b/abs/core-testing/lirc-utils/PKGBUILD
new file mode 100644
index 0000000..b1f1f9a
--- /dev/null
+++ b/abs/core-testing/lirc-utils/PKGBUILD
@@ -0,0 +1,66 @@
+# $Id: PKGBUILD 6058 2008-07-23 02:50:00Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=lirc-utils
+pkgver=0.8.3
+pkgrel=1
+pkgdesc="Linux Infrared Remote Control utils"
+arch=(i686 x86_64)
+url="http://www.lirc.org/"
+license=('GPL')
+_kernver=2.6.26-ARCH
+depends=('alsa-lib' 'libusb' 'libx11' 'libsm')
+makedepends=('help2man')
+replaces=('lirc+pctv')
+backup=('etc/lircd.conf' 'etc/lircmd.conf'\
+ 'etc/conf.d/lircd')
+options=('!libtool' '!makeflags')
+source=(http://umn.dl.sf.net/sourceforge/lirc/lirc-$pkgver.tar.bz2 \
+ lircd lircmd lirc.logrotate lircd.conf.d kernel-2.6.26.patch)
+md5sums=('8e78eeded7b31e5ad02e328970437c0f' '909ad968afa10e4511e1da277bb23c3b'\
+ '85f7fdac55e5256967241864049bf5e9' '3deb02604b37811d41816e9b4385fcc3'\
+ '5b1f8c9cd788a39a6283f93302ce5c6e' '1753acd774f50b638e6173d364de53fd')
+
+build() {
+ # configure
+ cd $startdir/src/lirc-$pkgver || return 1
+ patch -Np1 -i ../kernel-2.6.26.patch || return 1
+
+ # Disabling lirc_gpio driver as it does no longer work Kernel 2.6.22+
+ sed -i -e "s:lirc_gpio\.o::" drivers/lirc_gpio/Makefile.am || return 1
+
+ autoreconf || return 1
+ libtoolize || return 1
+
+ ./configure --enable-sandboxed --prefix=/usr \
+ --with-driver=all --with-kerneldir=/usr/src/linux-${_kernver} \
+ --with-moduledir=/lib/modules/${_kernver}/kernel/drivers/misc \
+ --with-transmitter \
+ || return 1
+ # disable parallel and bt829
+ # because of incompatibility with smp systems
+ sed -i -e "s:lirc_parallel::" -e "s:lirc_bt829::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+
+ # build
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ mkdir -p $startdir/pkg/usr/share/lirc $startdir/pkg/etc/rc.d \
+ || return 1
+ cp $startdir/src/{lircd,lircmd} $startdir/pkg/etc/rc.d/ \
+ || return 1
+ cp -rp remotes $startdir/pkg/usr/share/lirc || return 1
+ chmod -R go-w $startdir/pkg/usr/share/lirc/ || return 1
+
+ # install the logrotate config
+ install -D -m644 $startdir/src/lirc.logrotate \
+ $startdir/pkg/etc/logrotate.d/lirc || return 1
+
+ # install conf.d file
+ install -D -m644 $startdir/src/lircd.conf.d \
+ $startdir/pkg/etc/conf.d/lircd || return 1
+
+ # remove built modules
+ rm -r $startdir/pkg/lib/
+}
diff --git a/abs/core-testing/lirc-utils/kernel-2.6.26.patch b/abs/core-testing/lirc-utils/kernel-2.6.26.patch
new file mode 100644
index 0000000..74bb986
--- /dev/null
+++ b/abs/core-testing/lirc-utils/kernel-2.6.26.patch
@@ -0,0 +1,122 @@
+--- a/drivers/kcompat.h 2008-01-13 11:26:28.000000000 +0100
++++ b/drivers/kcompat.h 2008-05-14 18:37:49.000000000 +0200
+@@ -1,4 +1,4 @@
+-/* $Id: kcompat.h,v 5.34 2008/01/13 10:26:28 lirc Exp $ */
++/* $Id: kcompat.h,v 5.36 2008/05/14 16:37:49 lirc Exp $ */
+
+ #ifndef _KCOMPAT_H
+ #define _KCOMPAT_H
+@@ -36,10 +36,10 @@
+ class_simple_destroy(cls);
+ }
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_simple_device_add(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_simple_device_add(cs, dev, parent, fmt, ## args)
+
+-static inline void class_device_destroy(lirc_class_t *cls, dev_t devt)
++static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt)
+ {
+ class_simple_device_remove(devt);
+ }
+@@ -48,20 +48,40 @@
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15)
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_device_create(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, dev, parent, fmt, ## args)
+
+ #else /* >= 2.6.15 */
+
+-#define lirc_class_device_create class_device_create
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, NULL, dev, parent, fmt, ## args)
++
++#else /* >= 2.6.26 */
++
++#define lirc_device_create device_create
++
++#endif /* >= 2.6.26 */
++
+ #define LIRC_DEVFS_PREFIX
+
+-#endif
++#endif /* >= 2.6.15 */
+
+ typedef struct class lirc_class_t;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_destroy class_device_destroy
++
++#else
++
++#define lirc_device_destroy device_destroy
++
+ #endif
+
++#endif /* >= 2.6.13 */
++
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+ #define LIRC_HAVE_DEVFS
+ #define LIRC_HAVE_DEVFS_24
+@@ -133,8 +153,8 @@
+ #ifndef LIRC_HAVE_SYSFS
+ #define class_destroy(x) do { } while (0)
+ #define class_create(x, y) NULL
+-#define class_device_destroy(x, y) do { } while (0)
+-#define lirc_class_device_create(x, y, z, xx, yy, zz) 0
++#define lirc_class_destroy(x, y) do { } while (0)
++#define lirc_class_create(x, y, z, xx, yy, zz) 0
+ #define IS_ERR(x) 0
+ typedef struct class_simple
+ {
+--- a/drivers/lirc_dev/lirc_dev.c 2008-01-13 11:45:02.000000000 +0100
++++ b/drivers/lirc_dev/lirc_dev.c 2008-05-14 18:37:49.000000000 +0200
+@@ -17,7 +17,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+- * $Id: lirc_dev.c,v 1.56 2008/01/13 10:45:02 lirc Exp $
++ * $Id: lirc_dev.c,v 1.58 2008/05/14 16:37:49 lirc Exp $
+ *
+ */
+
+@@ -145,7 +145,8 @@
+ #ifdef LIRC_HAVE_DEVFS_26
+ devfs_remove(DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+
+ if (ir->buf != ir->p.rbuf) {
+ lirc_buffer_free(ir->buf);
+@@ -400,9 +401,9 @@
+ S_IFCHR|S_IRUSR|S_IWUSR,
+ DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- (void) lirc_class_device_create(lirc_class, NULL,
+- MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
+- ir->p.dev, "lirc%u", ir->p.minor);
++ (void) lirc_device_create(lirc_class, ir->p.dev,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
++ "lirc%u", ir->p.minor);
+
+ if (p->sample_rate || p->get_queue) {
+ /* try to fire up polling thread */
+@@ -441,7 +442,8 @@
+ return minor;
+
+ out_sysfs:
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+ #ifdef LIRC_HAVE_DEVFS_24
+ devfs_unregister(ir->devfs_handle);
+ #endif
diff --git a/abs/core-testing/lirc-utils/lirc.logrotate b/abs/core-testing/lirc-utils/lirc.logrotate
new file mode 100644
index 0000000..623c4f3
--- /dev/null
+++ b/abs/core-testing/lirc-utils/lirc.logrotate
@@ -0,0 +1,5 @@
+/var/log/lircd {
+ missingok
+ notifempty
+ delaycompress
+}
diff --git a/abs/core-testing/lirc-utils/lircd b/abs/core-testing/lirc-utils/lircd
new file mode 100755
index 0000000..f4686d7
--- /dev/null
+++ b/abs/core-testing/lirc-utils/lircd
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/lircd
+
+PID=$(pidof -o %PPID /usr/sbin/lircd)
+case "$1" in
+ start)
+ stat_busy "Starting LIRC Daemon"
+ [ -n "$LIRC_DRIVER" ] && LIRC_EXTRAOPTS="-H $LIRC_DRIVER $LIRC_EXTRAOPTS"
+ [ -z "$PID" ] &&
+ if [ -n "$LIRC_DEVICE" ] ; then
+ /usr/sbin/lircd -d "$LIRC_DEVICE" $LIRC_EXTRAOPTS $LIRC_CONFIGFILE
+ else
+ /usr/sbin/lircd $LIRC_EXTRAOPTS $LIRC_CONFIGFILE
+ fi
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon lircd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping LIRC Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon lircd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/lirc-utils/lircd.conf.d b/abs/core-testing/lirc-utils/lircd.conf.d
new file mode 100644
index 0000000..760dab0
--- /dev/null
+++ b/abs/core-testing/lirc-utils/lircd.conf.d
@@ -0,0 +1,8 @@
+#
+# Parameters for lirc daemon
+#
+
+LIRC_DEVICE="/dev/lirc0"
+LIRC_DRIVER=""
+LIRC_EXTRAOPTS=""
+LIRC_CONFIGFILE=""
diff --git a/abs/core-testing/lirc-utils/lircmd b/abs/core-testing/lirc-utils/lircmd
new file mode 100755
index 0000000..220c47c
--- /dev/null
+++ b/abs/core-testing/lirc-utils/lircmd
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/lircmd`
+case "$1" in
+ start)
+ stat_busy "Starting lircmd Daemon"
+ [ -z "$PID" ] && /usr/sbin/lircmd
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon lircmd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping lircmd Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon lircmd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/lirc/PKGBUILD b/abs/core-testing/lirc/PKGBUILD
new file mode 100644
index 0000000..d7fc488
--- /dev/null
+++ b/abs/core-testing/lirc/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 6055 2008-07-23 02:44:55Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=lirc
+pkgver=0.8.3
+pkgrel=1
+_kernver=2.6.26-ARCH
+pkgdesc="Linux Infrared Remote Control kernel modules for stock arch kernel"
+arch=(i686 x86_64)
+url="http://www.lirc.org/"
+license=('GPL')
+depends=('lirc-utils=0.8.3' 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+makedepends=('help2man')
+replaces=('lirc+pctv')
+options=('!makeflags')
+install=$pkgname.install
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ kernel-2.6.26.patch)
+md5sums=('8e78eeded7b31e5ad02e328970437c0f' '1753acd774f50b638e6173d364de53fd')
+
+build() {
+ # configure
+ cd $startdir/src/lirc-$pkgver || return 1
+ patch -Np1 -i ../kernel-2.6.26.patch || return 1
+
+ ./configure --enable-sandboxed --prefix=/usr \
+ --with-driver=all --with-kerneldir=/usr/src/linux-${_kernver}/ \
+ --with-moduledir=/lib/modules/${_kernver}/kernel/drivers/misc \
+ --with-transmitter \
+ || return 1
+
+ # disable parallel and bt829
+ # because of incompatibility with smp systems
+ sed -i -e "s:lirc_parallel::" -e "s:lirc_bt829::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+ # disable lirc_gpio due to brokeness of kernel 2.6.23
+ sed -i -e "s:lirc_gpio::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+
+ # build
+ cd drivers || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # set the kernel we've built for inside the install script
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
+ $startdir/lirc.install || return 1
+}
diff --git a/abs/core-testing/lirc/kernel-2.6.26.patch b/abs/core-testing/lirc/kernel-2.6.26.patch
new file mode 100644
index 0000000..74bb986
--- /dev/null
+++ b/abs/core-testing/lirc/kernel-2.6.26.patch
@@ -0,0 +1,122 @@
+--- a/drivers/kcompat.h 2008-01-13 11:26:28.000000000 +0100
++++ b/drivers/kcompat.h 2008-05-14 18:37:49.000000000 +0200
+@@ -1,4 +1,4 @@
+-/* $Id: kcompat.h,v 5.34 2008/01/13 10:26:28 lirc Exp $ */
++/* $Id: kcompat.h,v 5.36 2008/05/14 16:37:49 lirc Exp $ */
+
+ #ifndef _KCOMPAT_H
+ #define _KCOMPAT_H
+@@ -36,10 +36,10 @@
+ class_simple_destroy(cls);
+ }
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_simple_device_add(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_simple_device_add(cs, dev, parent, fmt, ## args)
+
+-static inline void class_device_destroy(lirc_class_t *cls, dev_t devt)
++static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt)
+ {
+ class_simple_device_remove(devt);
+ }
+@@ -48,20 +48,40 @@
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15)
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_device_create(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, dev, parent, fmt, ## args)
+
+ #else /* >= 2.6.15 */
+
+-#define lirc_class_device_create class_device_create
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, NULL, dev, parent, fmt, ## args)
++
++#else /* >= 2.6.26 */
++
++#define lirc_device_create device_create
++
++#endif /* >= 2.6.26 */
++
+ #define LIRC_DEVFS_PREFIX
+
+-#endif
++#endif /* >= 2.6.15 */
+
+ typedef struct class lirc_class_t;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_destroy class_device_destroy
++
++#else
++
++#define lirc_device_destroy device_destroy
++
+ #endif
+
++#endif /* >= 2.6.13 */
++
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+ #define LIRC_HAVE_DEVFS
+ #define LIRC_HAVE_DEVFS_24
+@@ -133,8 +153,8 @@
+ #ifndef LIRC_HAVE_SYSFS
+ #define class_destroy(x) do { } while (0)
+ #define class_create(x, y) NULL
+-#define class_device_destroy(x, y) do { } while (0)
+-#define lirc_class_device_create(x, y, z, xx, yy, zz) 0
++#define lirc_class_destroy(x, y) do { } while (0)
++#define lirc_class_create(x, y, z, xx, yy, zz) 0
+ #define IS_ERR(x) 0
+ typedef struct class_simple
+ {
+--- a/drivers/lirc_dev/lirc_dev.c 2008-01-13 11:45:02.000000000 +0100
++++ b/drivers/lirc_dev/lirc_dev.c 2008-05-14 18:37:49.000000000 +0200
+@@ -17,7 +17,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+- * $Id: lirc_dev.c,v 1.56 2008/01/13 10:45:02 lirc Exp $
++ * $Id: lirc_dev.c,v 1.58 2008/05/14 16:37:49 lirc Exp $
+ *
+ */
+
+@@ -145,7 +145,8 @@
+ #ifdef LIRC_HAVE_DEVFS_26
+ devfs_remove(DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+
+ if (ir->buf != ir->p.rbuf) {
+ lirc_buffer_free(ir->buf);
+@@ -400,9 +401,9 @@
+ S_IFCHR|S_IRUSR|S_IWUSR,
+ DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- (void) lirc_class_device_create(lirc_class, NULL,
+- MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
+- ir->p.dev, "lirc%u", ir->p.minor);
++ (void) lirc_device_create(lirc_class, ir->p.dev,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
++ "lirc%u", ir->p.minor);
+
+ if (p->sample_rate || p->get_queue) {
+ /* try to fire up polling thread */
+@@ -441,7 +442,8 @@
+ return minor;
+
+ out_sysfs:
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+ #ifdef LIRC_HAVE_DEVFS_24
+ devfs_unregister(ir->devfs_handle);
+ #endif
diff --git a/abs/core-testing/lirc/lirc.install b/abs/core-testing/lirc/lirc.install
new file mode 100644
index 0000000..704c341
--- /dev/null
+++ b/abs/core-testing/lirc/lirc.install
@@ -0,0 +1,50 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ /bin/true
+}
+
+# arg 1: the new package version
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/live-installer/LinHES-release b/abs/core-testing/live-installer/LinHES-release
new file mode 100644
index 0000000..a4de764
--- /dev/null
+++ b/abs/core-testing/live-installer/LinHES-release
@@ -0,0 +1 @@
+LinHES R6.00.02
diff --git a/abs/core-testing/live-installer/MythVantage.sh b/abs/core-testing/live-installer/MythVantage.sh
new file mode 100755
index 0000000..286c908
--- /dev/null
+++ b/abs/core-testing/live-installer/MythVantage.sh
@@ -0,0 +1,3 @@
+export MV_ROOT=/usr/MythVantage
+export PATH=$PATH:$MV_ROOT/bin
+export TEMPLATES=$MV_ROOT/templates
diff --git a/abs/core-testing/live-installer/PKGBUILD b/abs/core-testing/live-installer/PKGBUILD
new file mode 100755
index 0000000..5b41dcd
--- /dev/null
+++ b/abs/core-testing/live-installer/PKGBUILD
@@ -0,0 +1,66 @@
+pkgname=live-installer
+pkgver=1.0
+pkgrel=26
+pkgdesc="Install and configure your system"
+#depends=(bc mysql-python expect curl dnsutils)
+depends=(bc libstatgrab mysql-python expect curl dnsutils parted sg3_utils)
+arch=('i686')
+#source=(mythinstall.bin install-ui.xml bpopup-ui.xml mythbeselect.bin install_proxy.sh install_functions.sh startx systemconfig.sh install_db_chroot.sh restore_default_settings.sh live-install.sh xconfig.sh timezip.py soundconfig.sh mythvantage-release issue autocard.py MythVantage.sh create_master.sh build_diskless.sh networkconfig.sh )
+
+
+source=(mythinstall.bin 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 )
+
+
+install=live.install
+build() {
+
+
+ mkdir -p $startdir/pkg/etc
+ mkdir -p $startdir/pkg/usr/share/mythtv/themes/default
+
+# new stuff
+ MVDIR=$startdir/pkg/usr/MythVantage
+ mkdir $startdir/pkg/etc/profile.d
+ install -m 0755 MythVantage.sh $startdir/pkg/etc/profile.d/MythVantage.sh
+ mkdir -p $MVDIR/bin
+ mkdir -p $MVDIR/templates
+ mkdir -p $MVDIR/etc
+
+#copy in all the installer specific stuff
+ #cp -rp ../templates $MVDIR/
+ rsync -r --exclude=.svn ../templates $MVDIR/
+ install -m 0755 install_proxy.sh $MVDIR/bin/install_proxy.sh
+ install -m 0755 install_functions.sh $MVDIR/bin/install_functions.sh
+ install -m 0755 systemconfig.sh $MVDIR/bin/systemconfig.sh
+ install -m 0755 xconfig.sh $MVDIR/bin/xconfig.sh
+# install -m 0755 live-install.sh $MVDIR/bin/live-install.sh
+ install -m 0755 install_db_chroot.sh $MVDIR/bin/install_db_chroot.sh
+ install -m 0755 restore_default_settings.sh $MVDIR/bin/restore_default_settings.sh
+ install -m 0755 soundconfig.sh $MVDIR/bin/soundconfig.sh
+ install -m 0755 networkconfig.sh $MVDIR/bin/networkconfig.sh
+ install -m 0755 create_master.sh $MVDIR/bin/create_master.sh
+ install -m 0755 build_diskless.sh $MVDIR/bin/build_diskless.sh
+ install -m 0755 timezip.py $MVDIR/bin/timezip.py
+ mkdir -p $startdir/pkg/usr/bin
+ install -m 0755 file_time_offset.py $startdir/pkg/usr/bin/file_time_offset.py
+ #copy in the branding stuff
+ 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/
+# install -m 0755 bpopup-ui.xml $startdir/pkg/usr/local/share/mythtv/themes/default/
+
+#copy in the binaries
+ #install -g mythtv -m 4750 mythinstall.bin $MVDIR/bin/MythVantage
+ install -m 4755 mythinstall.bin $MVDIR/bin/MythVantage
+ cd $MVDIR/bin
+ ln -s MythVantage mythvantage
+ ln -s MythVantage mythinstall
+ cd -
+# install -g mythtv -m 4750 mythbeselect.bin $MVDIR/bin/mythbeselect
+
+# install -m 0755 startx $startdir/pkg/root/startx
+# install -m 0755 live-install.sh $startdir/pkg/root/live-install.sh
+}
+
diff --git a/abs/core-testing/live-installer/add_service.sh b/abs/core-testing/live-installer/add_service.sh
new file mode 100755
index 0000000..190d604
--- /dev/null
+++ b/abs/core-testing/live-installer/add_service.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -d $SCRIPT_DIR/$1 ]
+then
+ if [ -d $SERVICE_DIR/$1 ]
+ then
+ echo "$1 already there"
+ else
+ ln -s $SCRIPT_DIR/$1 $SERVICE_DIR/$1
+ echo "adding $1"
+ fi
+else
+ echo "couldn't find $SCRIPT_DIR/$1"
+fi
diff --git a/abs/core-testing/live-installer/autocard.py b/abs/core-testing/live-installer/autocard.py
new file mode 100755
index 0000000..b59b8d6
--- /dev/null
+++ b/abs/core-testing/live-installer/autocard.py
@@ -0,0 +1,302 @@
+#!/usr/bin/python
+# import MySQL module
+#jm
+import MySQLdb
+import sys
+import getopt
+import socket
+import os
+import time
+import string
+import glob
+from string import letters
+from string import digits
+
+def INSERTCARD_INTOMYTH(Device,Driver,Cardvendor):
+ global currenthostname
+ print Device
+ print Driver,
+ print Cardvendor
+ cursor = db.cursor()
+ insert = "false"
+ if Driver == "ivtv" :
+ cardtype="MPEG"
+ defaultinput="Tuner 1"
+ insert="true"
+ if Cardvendor == "pcHDTV HD3000 HDTV":
+ insert="false"
+ cardtype ="whocares"
+
+ #print insert
+ if insert == "true" :
+ cursor.execute("INSERT INTO capturecard (videodevice,cardtype,defaultinput,hostname) VALUES(%s,%s,%s,%s);",(Device,cardtype,defaultinput,currenthostname))
+
+def INSERTHDR_INTOMYTH(deviceid,tuner_number):
+ cardtype='HDHOMERUN'
+ defaultinput='MPEG2TS'
+ global currenthostname
+ print deviceid
+ print cardtype
+ print defaultinput
+ print tuner_number
+ cursor = db.cursor()
+ #print insert
+ cursor.execute("INSERT INTO capturecard (videodevice,cardtype,defaultinput,dbox2_port ,hostname) VALUES(%s,%s,%s,%s,%s);",(deviceid,cardtype,defaultinput,tuner_number,currenthostname))
+
+def INSERTAUTOCARD():
+ global cardlist
+ global currenthostname
+ # create a cursor
+ cursor = db.cursor()
+
+
+ for i in range( 1 , len(cardlist)):
+ insert = "false"
+# print cardlist[i]
+ Device=cardlist[i][0]
+ Driver=cardlist[i][1]
+ Cardvendor=cardlist[i][2]
+ Businfo=cardlist[i][3]
+ if Driver == "ivtv" :
+ insert="true"
+ devicestatus="unused"
+ if Cardvendor == "pcHDTV HD3000 HDTV":
+ insert="false"
+ cardtype ="whocares"
+ if Driver == "hdr":
+ insert="true"
+ devicestatus="unused"
+
+ if insert == "true" :
+ cursor.execute("delete from autocard where uniqid=%s;",(Businfo))
+ if Driver=="hdr":
+ Cardvendor="HDHOMERUN Tuner 1"
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+ Cardvendor="HDHOMERUN Tuner 2"
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+
+ else:
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+
+
+
+def PRINTINFO():
+ global cardlist
+
+ for list in cardlist:
+ if list != "_placeholder_":
+ print list
+ #print "-------------"
+
+def GATHER_HDR():
+ global cardlist
+ command="/usr/bin/hdhomerun_config --discover"
+ results=os.popen(command,'r')
+ line=results.readline()
+ if line.strip().split()[0] == "no":
+ print "HDHOMERUN not detected"
+ else:
+ print line
+ hdrdevice=line.strip().split()[2]
+ print hdrdevice
+ Driver="hdr"
+ Device=hdrdevice
+ Cardtype="HDHOMERUN"
+ Businfo=hdrdevice
+ cardprops = [Device,Driver , Cardtype , Businfo]
+ cardlist.append(cardprops)
+
+
+def GATHER_v4l_CARDS():
+ global cardlist
+ cardlist=["_placeholder_"]
+ # print "Looking for v4l cards"
+ try:
+ filelist = os.listdir('/dev/v4l/')
+ except OSError:
+ filelist=" "
+ #fakelist=['/dev/v4l/video3', 'ivtv', 'WinTV PVR 500 (unit #2)', '0000:04:09.0']
+ #cardlist.append(fakelist)
+ try:
+ filelist = glob.glob("/dev/v4l/video?")
+ Driver=""
+ Cardtype=""
+ Businfo=""
+ numcards = 0
+ for Device in filelist:
+ #print card
+ numcards = numcards+1
+ cmd = 'v4l2-ctl -D -d' + Device
+ for line in os.popen(cmd).readlines():
+ #print line
+ pos = string.find(line,"Driver name")
+ if pos >=0:
+ splitline= line.split(':')
+ Driver=splitline[1].strip()
+ pos = string.find(line,"Card type")
+ if pos >=0:
+ splitline= line.split(':')
+ Cardtype=splitline[1].strip()
+
+ pos = string.find(line,"Bus info")
+ if pos >=0:
+ splitline= line.split(':',1)
+ Businfo=splitline[1].strip()
+
+ #print Device,Driver , Cardtype , Businfo,numcards
+ cardprops = [Device,Driver , Cardtype , Businfo]
+ cardlist.append(cardprops)
+ except IOError:
+ print "no v4l cards found"
+ sys.exit(2)
+
+
+def WRITEUDEV_IVTV():
+ global insertmyth
+ cursor = db.cursor()
+ #add ivtv,cid lookup loop through until empty.
+ cursor.execute("select distinct(uniqid) from autocard where driver='ivtv' and devicestatus='will-add'")
+ cidrows = cursor.fetchall()
+ for row in cidrows:
+ cid=row[0]
+ cursor.execute("select dev,driver,description,devicestatus,hostname from autocard where uniqid=%s limit 1;",(cid))
+ result = cursor.fetchone()
+ description=result[2]
+ driver='DRIVERS==\"ivtv\"'
+ ATTRNAME='ATTR{name}=="ivtv? encoder MPG"'
+ KERNELS='KERNELS==\"'
+ KERNELS+=cid
+ KERNELS+="\""
+ #filter out non digit or chars
+ keep=letters.join(digits)
+ description=filter(lambda c: c in keep, description)
+ devnode="ivtv/"
+ #devnode+=description + "_"
+ udevcid=cid.partition(":")
+ devnode+=udevcid[2]
+ devnode+="_video"
+ UDEV_RULE=driver +', '+ATTRNAME+', '+ KERNELS +', ' + 'NAME=\"' + devnode + '"'
+ print "Here is the udev rule"
+ print UDEV_RULE
+ filename='/etc/udev/rules.d/11-ivtv-'+cid+'.rules'
+ file = open(filename,'w')
+ file.write(UDEV_RULE)
+ if ( insertmyth == "true"):
+ devnode="/dev/"+devnode
+ INSERTCARD_INTOMYTH(devnode,"ivtv",description)
+ cursor.execute("update autocard set devicestatus='done' where uniqid=%s;",(cid))
+#now insert HDR
+ cursor.execute("select distinct(uniqid),description from autocard where driver='hdr' and devicestatus='will-add'")
+ cidrows = cursor.fetchall()
+ for row in cidrows:
+ if ( insertmyth == "true"):
+ deviceid=row[0]
+ #cardtype="HDHOMRUN"
+ #defaultinput="MPEG2TS"
+ dbox2_port=row[1]
+ tuner_number=dbox2_port.rpartition(' ')[2]
+ INSERTHDR_INTOMYTH(deviceid,tuner_number)
+ cursor.execute("update autocard set devicestatus='done' where uniqid=%s and description=%s;",(deviceid,dbox2_port))
+
+
+
+def CLEARAUTOCARD():
+ cursor = db.cursor()
+ cursor.execute("delete from autocard")
+
+def RELOADUDEV():
+ print "relaoding udev rules"
+ os.system('udevcontrol reload_rules')
+ os.system('rmmod ivtv')
+ os.system('udevtrigger')
+
+
+def usage():
+ print " -h help"
+ print " -g gather and print out the found cards"
+ print " -w write out the udev rules"
+ print " -i insert cards into myth that are marked will-add(only used with -w)"
+ print " -r reload udev rules"
+ print " -c clear the autocard db"
+
+def main(argv):
+ global db
+ global cardlist
+ global currenthostname
+ currenthostname=""
+ writeudev="false"
+ global insertmyth
+ insertmyth ="false"
+
+ db = MySQLdb.connect(host="localhost", user="mythtv", passwd="mythtv", db="mythconverg")
+ try:
+ cursor = db.cursor()
+ cursor.execute("describe autocard;")
+ except MySQLdb.Error, e:
+ cursor.execute("create table autocard(dev varchar(50),driver varchar(50),description varchar(50),uniqid varchar(50), devicestatus varchar(50),hostname varchar(50));")
+ print "table created"
+
+ if ( currenthostname == "" ):
+ currenthostname = socket.gethostname()
+
+
+ try:
+ opts, args = getopt.getopt(argv, "hgwirc", ["help", "gathercards", "writeudev" ,"insert" , "reloadudev" , "clearautocard"] )
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage()
+ sys.exit()
+ elif opt in ( "-g" , "--gathercards"):
+ GATHER_v4l_CARDS()
+ GATHER_HDR()
+ INSERTAUTOCARD()
+ PRINTINFO()
+ elif opt in ("-w", "--writeudev"):
+ writeudev="true"
+ elif opt in ("-i", "--insert"):
+ insertmyth="true"
+ elif opt in ( "-r" , "--reloadudev"):
+ RELOADUDEV()
+ elif opt in ( "-c" , "--clearautocard"):
+ CLEARAUTOCARD()
+
+
+ if ( writeudev == "true"):
+ WRITEUDEV_IVTV()
+
+
+
+
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
+
+
+
+
+#mysql> create table autocard(dev varchar(50),driver varchar(50),description varchar(50),uniqid varchar(50), devicestatus varchar(50),hostname varchar(50));
+#Query OK, 0 rows affected (0.14 sec)
+
+#mysql> describe autocard;
+#+--------------+-------------+------+-----+---------+-------+
+#| Field | Type | Null | Key | Default | Extra |
+#+--------------+-------------+------+-----+---------+-------+
+#| dev | varchar(50) | YES | | NULL | |
+#| driver | varchar(50) | YES | | NULL | |
+#| description | varchar(50) | YES | | NULL | |
+#| uniqid | varchar(50) | YES | | NULL | |
+#| devicestatus | varchar(50) | YES | | NULL | |
+#| hostname | varchar(50) | YES | | NULL | |
+#+--------------+-------------+------+-----+---------+-------+
+
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/bpopup-ui.xml b/abs/core-testing/live-installer/bpopup-ui.xml
new file mode 100755
index 0000000..df0598b
--- /dev/null
+++ b/abs/core-testing/live-installer/bpopup-ui.xml
@@ -0,0 +1,164 @@
+<!--
+
+ This is a myth style theme file for mythwelcome
+
+ (c) 2005 by a whole bunch of people associated with MythTV
+
+-->
+<mythuitheme>
+
+ <window name="welcome_screen">
+
+ <!--
+
+ First, define all the fonts we need on this screen
+
+ -->
+ <font name="title" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>24</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="time" face="Arial">
+ <color>#9999cc</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="label" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>18</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="info" face="Arial">
+ <color>#ffffff</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="biginfo" face="Arial">
+ <color>#ffffff</color>
+ <size>50</size>
+ <bold>yes</bold>
+ </font>
+ <font name="warning" face="Arial">
+ <color>#ff0000</color>
+ <dropcolor>#000000</dropcolor>
+ <size>16</size>
+ <shadow>2,2</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="buttons" face="Arial">
+ <color>#ffff00</color>
+ <size>14</size>
+ <bold>yes</bold>
+ </font>
+
+ <container name="main_display">
+ <area>0,0,800,600</area>
+
+ <textarea name="title" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>title</font>
+ <area>50,40,700,40</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ time
+ -->
+ <textarea name="time_text" draworder="0" align="right">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>660,520,110,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="date_text" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>0,60,800,70</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ current myth status
+ -->
+
+ <textarea name="status_text" draworder="1" align="center">
+ <multiline>yes</multiline>
+ <font>info</font>
+ <area>20,70,760,60</area>
+ <value>MythTV is idle and will shutdown shortly.</value>
+ </textarea>
+
+ <!--
+ current recordings status
+ -->
+
+ <textarea name="recording_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,110,760,30</area>
+ <!--<value>Percent Complete </value>-->
+ <value></value>
+ </textarea>
+
+ <textarea name="recording_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,110,760,150</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ next scheduled recording status
+ -->
+
+ <textarea name="scheduled_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,320,760,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="scheduled_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,400,760,120</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ scheduled recordings conflict warning
+ -->
+
+ <textarea name="conflicts_text" draworder="1" align="center">
+ <font>warning</font>
+ <area>20,490,760,30</area>
+ <value>WARNING: There are conflicting scheduled recordings!</value>
+ </textarea>
+
+ <!--
+ start frontend button
+
+ <textbutton name="startfrontend_button" draworder="1">
+ <position>81,535</position>
+ <font>buttons</font>
+ <image function="on" filename="mw_text_button_on.png"></image>
+ <image function="off" filename="mw_text_button_off.png"></image>
+ <image function="pushed" filename="mw_text_button_pushed.png"></image>
+ </textbutton>
+
+ -->
+
+ </container>
+
+ </window>
+
+</mythuitheme>
diff --git a/abs/core-testing/live-installer/build_diskless.sh b/abs/core-testing/live-installer/build_diskless.sh
new file mode 100755
index 0000000..4dfd5fc
--- /dev/null
+++ b/abs/core-testing/live-installer/build_diskless.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+#CD=/mnt/cd
+. /etc/profile
+. /etc/systemconfig
+
+TFTP=/data/srv/tftp
+CD=/data/srv/tftp/live
+DESTCD=/data/srv/tftp/CD
+BASE=/data/srv/tftp/masterbuild
+
+MODULES=$DESTCD/MythVantage/base/
+myip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+SRCFILES=$BASE/mnt/live/mnt/MythVantage/base/
+
+function log () {
+echo $1
+}
+
+function check_xvfb () {
+export DISPLAY=127.0.0.1:25
+ Xvfb -ac :25 &
+
+}
+
+
+function create_base_image() {
+echo $SRCFILES
+if [ -f $SRCFILES/data.lzm ]
+then
+ mkdir $HOST_IMG_DIR
+ cd $SRCFILES
+ echo "Creating image.." > $BASE/tmp/.install_state
+ LIST=`ls *.lzm`
+ for i in $LIST
+ do
+ echo $i
+ echo $i > $BASE/tmp/.install_percent
+ lzm2dir $i \/$HOST_IMG_DIR
+ done
+
+ for i in sys proc dev tmp
+ do
+ mkdir /$HOST_IMG_DIR/$i
+ done
+
+ chmod 777 /$HOST_IMG_DIR/tmp
+ mknod /$HOST_IMG_DIR/dev/null c 1 3
+ mknod /$HOST_IMG_DIR/dev/null c 1 5
+ mknod /$HOST_IMG_DIR/dev/console c 5 1
+ chmod +s /$HOST_IMG_DIR/usr/bin/Xorg
+ chmod +s /$HOST_IMG_DIR/usr/bin/crontab
+ chmod +s /$HOST_IMG_DIR/usr/bin/sudo
+ chmod +s /$HOST_IMG_DIR/bin/mount
+ #copy fstab from masterbuild
+ cp -f $BASE/etc/fstab /$HOST_IMG_DIR/etc/fstab
+ echo "Done: installing data" > $BASE/tmp/.install_state
+ return 0
+else
+ echo "Error: no modules" > $BASE/tmp/.install_state
+ log "couldn't find modules to install"
+ return 1
+fi
+}
+
+function configure_image () {
+ echo "Configuring system" > $BASE/tmp/.install_state
+ cp -f $BASE/etc/systemconfig $HOST_IMG_DIR/etc/systemconfig
+ chown root:mythtv $HOST_IMG_DIR/etc/systemconfig
+ chmod 775 "$HOST_IMG_DIR" /etc/systemconfig
+ cp /etc/mtab $HOST_IMG_DIR/etc/mtab
+ mount --bind /dev $HOST_IMG_DIR/dev
+
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,this_is_install
+#copy syssettings template to here.
+ SE=$BASE$TEMPLATES/settings/syssettings
+ mkdir -p $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+ cp -rp $SE/* ${HOST_IMG_DIR}/$TEMPLATES/settings/syssettings
+ chown root:mythtv $HOST_IMG_DIR/etc/systemconfig
+ chown -R mythtv:mythtv $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+ chmod -R 775 $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+#update remotedb with this host settings
+ OLDDISPLAY=$DISPLAY
+ check_xvfb
+ chroot $HOST_IMG_DIR $MV_ROOT/bin/MythVantage -t restore,default_1
+ chroot $HOST_IMG_DIR $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ if [ ! $? = 0 ]
+ then
+ touch $mountpoint/tmp/.dbsysfailed
+ chmod 777 $mountpoint/tmp/.dbsysfailed
+ else
+ #Run second time
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,this_is_install
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ fi
+chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install
+cp -f $BASE/etc/X11/xorg.conf $HOST_IMG_DIR/etc/X11/xorg.conf
+echo "Done" > $BASE/tmp/.install_state
+DISPLAY=$OLDDISPLAY
+
+#cp /tmp/mythvantage_install.log $HOST_IMG_DIR/var/log/
+}
+
+function create_tftp_boot () {
+
+ CFGFILE=$TFTP/pxelinux.cfg/01-$2
+ echo "DEFAULT mythfe" > $CFGFILE
+ echo "LABEL mythfe" >> $CFGFILE
+ echo "kernel masterbuild/boot/vmlinuz26STB" >> $CFGFILE
+ echo "append vga=normal root=/dev/nfs rw netboot nfsroot=$myip:/data/srv/tftp/$1 ip=dhcp init=/sbin/runit" >> $CFGFILE
+ echo "TIMEOUT 2" >> $CFGFILE
+}
+
+function create_nfs_export () {
+echo "/data/srv/tftp/$1 *(rw,no_root_squash,anonuid=1000,anongid=1000) " >> /etc/exports
+exportfs -arv
+}
+
+#-------------------------------------------------------------------------------MAIN PROGRAM ---------------------------------------------------------------------
+if [ x$1 = x -o x$2 = x ]
+then
+ echo "usage: hostname macaddress"
+ exit 1
+fi
+
+image_name=$1
+mac_address=`echo $2| tr "[:upper:]" "[:lower:]"`
+
+echo "using image_name of $image_name"
+echo "using mac_address of $mac_address"
+
+HOST_IMG_DIR=$TFTP/$1
+
+create_base_image $image_name
+configure_image
+umount $HOST_IMG_DIR/dev
+create_tftp_boot $image_name $mac_address
+create_nfs_export $image_name
+
+
+
+
+#create_dhcp_entry $mac_address
+
diff --git a/abs/core-testing/live-installer/copy-to-mythbase.sh b/abs/core-testing/live-installer/copy-to-mythbase.sh
new file mode 100755
index 0000000..af89f52
--- /dev/null
+++ b/abs/core-testing/live-installer/copy-to-mythbase.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+DATADIR="../mythtv/stable/mythtv/src/mythtv-0.21/programs"
+mkdir $DATADIR/mythinstall
+mkdir $DATADIR/mythbeselect
+rm mythinstall.bin
+rm mythbeselect.bin
+ln -n `pwd`/mythinstall/* $DATADIR/mythinstall
+ln -n `pwd`/mythbeselect/* $DATADIR/mythbeselect
+
+ln -s $DATADIR/mythbeselect/mythbeselect ./mythbeselect.bin
+ln -s $DATADIR/mythinstall/mythinstall ./mythinstall.bin
diff --git a/abs/core-testing/live-installer/create_master.sh b/abs/core-testing/live-installer/create_master.sh
new file mode 100755
index 0000000..1e641b4
--- /dev/null
+++ b/abs/core-testing/live-installer/create_master.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#CD=/mnt/cd
+CD=/data/srv/tftp/live
+DESTCD=/data/srv/tftp/CD
+DEST=/data/srv/tftp/masterbuild
+MODULES=$DESTCD/MythVantage/base/
+myip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+
+mkdir -p $DESTCD
+mkdir -p $DEST
+
+mount $CD
+status=0
+if [ -f $CD/MythVantage/base/data.lzm ]
+then
+ status=0
+else
+ status=1
+fi
+if [ x$status = x0 ]
+then
+ echo "copying to disk"
+ cp -rp $CD/* $DESTCD
+ cd $MODULES
+ for i in *.lzm
+ do
+ echo $i
+ lzm2dir $i \/$DEST
+ done
+ for i in sys proc dev tmp
+ do
+ mkdir $DEST/$i
+ done
+ chmod 777 /$DEST/tmp
+ mknod $DEST/dev/null c 1 3
+ mknod $DEST/dev/null c 1 5
+ mknod $DEST/dev/console c 5 1
+ chmod +s $DEST/usr/bin/Xorg
+ chmod +s $DEST/usr/bin/crontab
+ chmod +s $DEST/usr/bin/sudo
+ chmod +s $DEST/bin/mount
+fi
+if [ ! -f $DEST/etc/fstab.bak ]
+then
+ cp $DEST/etc/fstab $DEST/etc/fstab.bak
+fi
+tac $DEST/etc/fstab.bak|tail +4|tac > $DEST/etc/fstab
+echo "$myip:/data/srv/tftp/masterbuild / nfs" >> $DEST/etc/fstab
+echo "/data/srv/tftp/masterbuild *(rw,no_root_squash,anonuid=1000,anongid=1000)" >> /etc/exports
+
+
+exportfs -arv
+
+#copy in the modules
+mkdir -p $DEST/mnt/live/mnt/
+mv $DESTCD/* $DEST/mnt/live/mnt/
+
diff --git a/abs/core-testing/live-installer/file_time_offset.py b/abs/core-testing/live-installer/file_time_offset.py
new file mode 100755
index 0000000..f2973d0
--- /dev/null
+++ b/abs/core-testing/live-installer/file_time_offset.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+
+
+import time
+import os
+import glob
+import getopt
+import sys
+def main(argv):
+ filecount=0
+# root = "/tmp"
+# offset = 4
+ now = int(time.time())
+
+
+ try:
+ opts, args = getopt.getopt(argv, "hs:d:")
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ print "-s seconds -d /testdir"
+ print "default if 4 seconds"
+ sys.exit()
+ elif opt in ( "-s" ):
+ offset = int(arg)
+ elif opt in ("-d"):
+ root = arg
+
+ for item in glob.glob(root+"/*"):
+ lastmodDate = os.path.getmtime(item)
+ tdiff= now-lastmodDate
+ #print tdiff, offset
+
+ if tdiff > offset:
+ filecount+=1
+ print filecount
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/abs/core-testing/live-installer/install-ui.xml b/abs/core-testing/live-installer/install-ui.xml
new file mode 100755
index 0000000..0ec9ddb
--- /dev/null
+++ b/abs/core-testing/live-installer/install-ui.xml
@@ -0,0 +1,175 @@
+<!--
+
+ This is a myth style theme file for mythwelcome
+
+ (c) 2005 by a whole bunch of people associated with MythTV
+
+-->
+<mythuitheme>
+
+ <window name="welcome_screen">
+
+ <!--
+
+ First, define all the fonts we need on this screen
+
+ -->
+ <font name="title" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>24</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="time" face="Arial">
+ <color>#9999cc</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="label" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>18</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="info" face="Arial">
+ <color>#ffffff</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="biginfo" face="Arial">
+ <color>#ffffff</color>
+ <size>50</size>
+ <bold>yes</bold>
+ </font>
+ <font name="warning" face="Arial">
+ <color>#ff0000</color>
+ <dropcolor>#000000</dropcolor>
+ <size>16</size>
+ <shadow>2,2</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="buttons" face="Arial">
+ <color>#ffff00</color>
+ <size>14</size>
+ <bold>yes</bold>
+ </font>
+ <font name="tinyinfo" face="Arial">
+ <color>#9999cc</color>
+ <size>12</size>
+ <bold>no</bold>
+ </font>
+
+ <container name="main_display">
+ <area>0,0,800,600</area>
+
+ <textarea name="title" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>title</font>
+ <area>50,40,700,40</area>
+ <value>LinHes: The Linux Home Entertainment System </value>
+ </textarea>
+
+ <!--
+ time
+ -->
+ <textarea name="time_text" draworder="0" align="right">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>660,520,110,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="date_text" draworder="0" align="hcenter">
+ <multiline>yes</multiline>
+ <font>time</font>
+ <area>20,75,740,100</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ current myth status
+ -->
+
+ <textarea name="status_text" draworder="1" align="center">
+ <multiline>yes</multiline>
+ <font>info</font>
+ <area>20,100,760,60</area>
+ <value>MythTV is idle and will shutdown shortly.</value>
+ </textarea>
+
+ <!--
+ current recordings status
+ -->
+
+ <textarea name="recording_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,140,760,30</area>
+ <!--<value>Percent Complete </value>-->
+ <value></value>
+ </textarea>
+
+ <textarea name="recording_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,140,760,150</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ next scheduled recording status
+ -->
+
+ <textarea name="scheduled_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,320,760,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="scheduled_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,400,760,120</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="mythvantage_text" draworder="1" align="right">
+ <multiline>no</multiline>
+ <font>tinyinfo</font>
+ <area>20,560,760,30</area>
+ <value></value>
+ </textarea>
+ <!--
+ scheduled recordings conflict warning
+ -->
+
+ <textarea name="conflicts_text" draworder="1" align="center">
+ <font>warning</font>
+ <area>20,490,760,30</area>
+ <value>WARNING: There are conflicting scheduled recordings!</value>
+ </textarea>
+
+ <!--
+ start frontend button
+
+ <textbutton name="startfrontend_button" draworder="1">
+ <position>81,535</position>
+ <font>buttons</font>
+ <image function="on" filename="mw_text_button_on.png"></image>
+ <image function="off" filename="mw_text_button_off.png"></image>
+ <image function="pushed" filename="mw_text_button_pushed.png"></image>
+ </textbutton>
+
+ -->
+
+ </container>
+
+ </window>
+
+</mythuitheme>
diff --git a/abs/core-testing/live-installer/install_db_chroot.sh b/abs/core-testing/live-installer/install_db_chroot.sh
new file mode 100755
index 0000000..514dd3c
--- /dev/null
+++ b/abs/core-testing/live-installer/install_db_chroot.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+. /etc/profile
+. /etc/systemconfig
+#myhost=`cat /etc/hostname`
+myhost=$hostname
+hostname $myhost
+mount -t proc none /proc
+pacman --noconfirm -Sf mysql
+/etc/rc.d/mysqld
+
+status=1
+mysqlstatus=1
+while [ ! $status = 0 ]
+do
+ /etc/rc.d/mysqld stop
+ sleep 1
+ /etc/rc.d/mysqld start
+ mysqlstatus=$?
+ if [ $mysqlstatus = 0 ]
+ then
+ mysql -e "show databases;"
+ showstatus=$?
+ if [ $showstatus = 0 ]
+ then
+ pacman --noconfirm -R mythdb-initial
+ pacman --noconfirm -S mythdb-initial
+ $MV_ROOT/bin/restore_default_settings.sh -c load
+ DISPLAY=127.0.0.1:0 $MV_ROOT/bin/MythVantage -t restore,default_1
+ $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ $MV_ROOT/bin/systemconfig.sh misc,hostype,this_is_install
+ if [ $SystemType = "Master_backend" ]
+ then
+ $MV_ROOT/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ #update database to allow user jobs on this host.
+ $MV_ROOT/bin/restore_default_settings.sh -c USERJOBALLOW
+ $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ #if [ -d /data/srv/mysql/mythconverg ]
+ if [ -d /var/lib/mysql/mythconverg ]
+ then
+ # pacman --noconfirm -R webcalendar
+ # pacman --noconfirm --nodeps -S webcalendar
+ status=0
+ fi
+ fi
+ fi
+done
+#/etc/rc.d/mysqld stop
+#umount /proc
+
+
+
diff --git a/abs/core-testing/live-installer/install_functions.sh b/abs/core-testing/live-installer/install_functions.sh
new file mode 100755
index 0000000..0c43c97
--- /dev/null
+++ b/abs/core-testing/live-installer/install_functions.sh
@@ -0,0 +1,484 @@
+#!/bin/bash
+. /etc/profile
+disk=$2
+mountpoint=new_boot
+
+#-------------------------------------------
+MYTHDBUSER=mythtv
+MYTHTVPASSWD=mythtv
+CMDLINE=$(cat /proc/cmdline)
+hostname=`hostname`
+MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD mythconverg -B --exec"
+BASE=""
+
+function update_db_settings () {
+
+ $MYSQLCMD_C "delete from settings where value='${1}' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set value='${1}', data='${2}' , hostname=\"$hostname\";"
+}
+
+function random_theme () {
+THEMES="basic-blue
+basic-green
+basic-red
+basic-purple
+basic-amber"
+
+theme=($THEMES) # Read into array variable.
+
+num_themes=${#theme[*]} # Count how many elements.
+
+pick=${theme[$((RANDOM%num_themes))]}
+echo "Selected $pick as the theme"
+update_db_settings Theme "$pick"
+}
+
+
+function setupremote {
+ mv $BASE/etc/lircd.conf $BASE/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
+ if [ -d $TEMPLATES/remotes/$Remotetype ]
+ then
+ cd $TEMPLATES/remotes/$Remotetype
+ for i in lircd*
+ do
+ cat $i >> $BASE/etc/lircd.conf
+ done
+ cp lircrc $BASE/etc/lircrc
+ chmod 755 /etc/lircrc
+ update_db_settings HostRemoteType "$Remotetype"
+ /usr/sbin/lircd -d /dev/lirc0
+ mkdir /root/.mythtv
+ ln -s /etc/lircrc /root/.mythtv/lircrc
+ fi
+}
+
+function scan_for_usb_remote () {
+echo "Scanning for usb receiver/remote"
+while read line
+do
+ USBID=`echo "$line"|cut -f1`
+ lsusb -d "$USBID" > /dev/null 2>/dev/null
+ if [ $? = 0 ]
+ then
+ Remotetype=`echo "$line"|cut -f2`
+ echo "found $Remotetype"
+ setupremote
+ break
+ fi
+done <$BASE/$TEMPLATES/remotes/receiver_usb.id
+}
+
+function rest_of_network () {
+ #netmask
+ echo $CMDLINE | grep -q netmask
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*netmask=}
+ NETMASK=${TEMPVAR%% *}
+ /sbin/ifconfig eth0 $IP netmask $NETMASK
+ nm=`/usr/bin/nmconv.py -obits $NETMASK`
+ NETMASK="/$nm $NETMASK"
+ echo $NETMASK
+ update_db_settings HostNETMASK${MYTHDEFAULT} "$NETMASK"
+ else
+ echo "netmask not found"
+ fi
+ #gateway
+ echo $CMDLINE | grep -q gateway
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*gateway=}
+ GATEWAY=${TEMPVAR%% *}
+ /sbin/route add default gw $GATEWAY
+ update_db_settings HostGW${MYTHDEFAULT} "$GATEWAY"
+
+ else
+ echo "gateway not found"
+ fi
+
+ #dns
+ echo $CMDLINE | grep -q dns
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*dns=}
+ DNS=${TEMPVAR%% *}
+ echo "nameserver $DNS" >> /etc/resolv.conf
+ update_db_settings HostDNS${MYTHDEFAULT} "$DNS"
+ else
+ echo "DNS not found"
+ fi
+}
+
+function init_network {
+ echo $CMDLINE |grep -q netdev
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*netdev=}
+ MYTHDEFAULT=${TEMPVAR%% *}
+ else
+ MYTHDEFAULT="eth0"
+ fi
+
+
+
+ echo $CMDLINE | grep -q ip
+ if [ $? = 0 ]
+ then
+ update_db_settings HostDefaulteth0 0
+ update_db_settings HostDefault${MYTHDEFAULT} 1
+
+ update_db_settings HostActiveonbooteth0 0
+ update_db_settings HostActiveonboot${MYTHDEFAULT} 1
+ update_db_settings HostNetDevice ${MYTHDEFAULT}
+
+ TEMPVAR=${CMDLINE#*ip=}
+ IP=${TEMPVAR%% *}
+ if [ x$IP = xdhcp ]
+ then
+ /sbin/dhcpcd $MYTHDEFAULT
+ update_db_settings HostUseDHCP${MYTHDEFAULT} 0
+ else
+ /sbin/ifconfig ${MYTHDEFAULT} $IP
+ update_db_settings HostUseDHCP${MYTHDEFAULT} 1
+ update_db_settings HostIP${MYTHDEFAULT} "$IP"
+ rest_of_network
+ fi
+ fi
+}
+
+function init_remote {
+ echo $CMDLINE | grep -q remoteport
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*remoteport=}
+ REMOTEPORT=${TEMPVAR%% *}
+ if [ x"$ReceiverType" = "xSerial" ]
+ then
+ if [ -e /dev/$REMOTEPORT ]
+ then
+ /usr/bin/setserial /dev/$REMOTEPORT uart none
+ /sbin/modprobe lirc_serial
+ update_db_settings HostReceiverType Serial
+ update_db_settings HostSerialPortlirc "$REMOTEPORT"
+ fi
+ fi
+
+ fi
+
+ echo $CMDLINE | grep -q remote
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*remote=}
+ Remotetype=${TEMPVAR%% *}
+ setupremote
+ else
+ scan_for_usb_remote
+ fi
+}
+
+#-----------------------
+
+#set -x
+
+partition_it () {
+ROOT=$1
+DATA=$2
+SWAP=$3
+
+if [ ! x$SWAP = xNO ]
+ then
+ SWAPLINE=",$SWAP,S"
+ MKSWAPCMD="mkswap /dev/${disk}2"
+ else
+ SWAPLINE=",0,0"
+ MKSWAPCMD=""
+ fi
+
+if [ x$DATA = xALL ]
+then
+ DATALINE=",,,"
+ EXTRALINE=""
+else
+ DATALINE=",$DATA,,"
+ EXTRALINE=",0,,"
+fi
+sfdisk /dev/$disk -uM << EOF
+,$1,,*
+$SWAPLINE
+$DATALINE
+$EXTRALINE
+;
+EOF
+
+$MKSWAPCMD
+#sfdisk -l /dev/$disk
+}
+
+
+function fscmd () {
+
+case $1 in
+ reiserfs) FSCMDC="mkreiserfs -q -l ROOT"
+ ;;
+
+ xfs) FSCMDC="mkfs -t $1 -f"
+ ;;
+ ext3) FSCMDC="mkfs.ext3"
+ ;;
+ jfs) FSCMDC="mkfs.jfs -q "
+ ;;
+ *) FSCMDC="echo $1"
+ ;;
+
+esac
+}
+
+format_it () {
+ fscmd $1
+ $FSCMDC /dev/${disk}1| tr -s [:cntrl:] \\n
+ fscmd $2
+ $FSCMDC /dev/${disk}3| tr -s [:cntrl:] \\n
+}
+
+mount_it () {
+ if [ ! -d \/$mountpoint ]
+ then
+ mkdir \/$mountpoint
+ fi
+ mount /dev/${disk}1 \/$mountpoint
+ mkdir \/$mountpoint/data
+ mount /dev/${disk}3 \/$mountpoint/data
+}
+
+unmount_it () {
+ umount /dev/${disk}1
+ umount /dev/${disk}3
+}
+
+#linux-live version of copy_it
+# copy_it () {
+# #rsync -rvp --exclude=/mnt --exclude=\/$mountpoint / \/$mountpoint
+# lzmdir=`find /mnt/live/mnt -name data.lzm -execdir pwd \;| tail -1`
+# cd $lzmdir
+# if [ x$1 = xALL ]
+# then
+# LIST=`ls *.lzm`
+# else
+# LIST=`echo $1 | tr , " " `
+# fi
+#
+# for i in $LIST
+# do
+# echo "Transferring $i"
+# lzm2dir $i \/$mountpoint
+# done
+# for i in sys proc dev tmp
+# do
+# mkdir /$mountpoint/$i
+#
+# done
+# chmod 777 /$mountpoint/tmp
+# mknod /$mountpoint/dev/null c 1 3
+# mknod /$mountpoint/dev/null c 1 5
+# mknod /$mountpoint/dev/console c 5 1
+# chmod +s /$mountpoint/usr/bin/Xorg
+# chmod +s /$mountpoint/usr/bin/crontab
+# chmod +s /$mountpoint/usr/bin/sudo
+# chmod +s /$mountpoint/bin/mount
+#
+# }
+
+copy_it () {
+
+ if [ x$1 = xALL ]
+ then
+ echo "Transferring system"
+ unsquashfs -f -d /$mountpoint /.livesys/medium/system.sqf
+ else
+ echo "Upgrading system"
+ unsquashfs -e $1 -f -d /$mountpoint /.livesys/medium/system.sqf
+ fi
+
+ for i in sys proc dev tmp
+ do
+ mkdir /$mountpoint/$i
+
+ done
+ chmod 777 /$mountpoint/tmp
+ mknod /$mountpoint/dev/null c 1 3
+ mknod /$mountpoint/dev/null c 1 5
+ mknod /$mountpoint/dev/console c 5 1
+ chmod +s /$mountpoint/usr/bin/Xorg
+ chmod +s /$mountpoint/usr/bin/crontab
+ chmod +s /$mountpoint/usr/bin/sudo
+ chmod +s /$mountpoint/bin/mount
+
+}
+
+
+device_node () {
+ cd /dev
+ mknod hda b 3 0
+ mknod hda1 b 3 1
+ mknod hda2 b 3 2
+ mknod hda3 b 3 3
+ mknod hda4 b 3 4
+ mknod hda5 b 3 5
+ mknod hda6 b 3 6
+ mknod hda7 b 3 7
+ mknod hda8 b 3 8
+ mknod sda b 8 0
+ mknod sda1 b 8 1
+ mknod sda2 b 8 2
+ mknod sda3 b 8 3
+ mknod sda4 b 8 4
+ mknod sda5 b 8 5
+ mknod sda6 b 8 6
+ mknod sda7 b 8 7
+ mknod sda8 b 8 8
+ mknod sdb b 8 16
+ mknod sdb1 b 8 17
+ mknod sdb2 b 8 18
+ mknod sdb3 b 8 19
+ mknod sdb4 b 8 20
+ mknod sdb5 b 8 21
+ mknod sdb6 b 8 22
+ mknod sdb7 b 8 23
+ mknod sdb8 b 8 24
+ cd -
+ }
+
+
+function create_fstab()
+{
+echo "creating fstab"
+cat > /$mountpoint/etc/fstab << EOF
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+/dev/cdrom /media/cdrom auto ro,user,noauto,unhide 0 0
+/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0
+UUID=ROOTUID / auto defaults 0 1
+UUID=DATAUID /data auto defaults 0 1
+UUID=SWAPUID swap swap defaults 0 0
+EOF
+
+
+}
+
+
+function find_uuid() {
+ uuid=`blkid -s UUID /dev/$1 |cut -d= -f2|cut -d\" -f2`
+ echo $uuid for $1
+ FOUNDUUID=$uuid
+
+}
+
+
+case $1 in
+ partition_it )
+ #drive ROOT DATA(ALL) SWAP(NO)
+ for i in `mount | grep $disk | awk ' { print $1 } '`
+ do
+ umount $i
+ done
+ swap=`cat /etc/fstab |grep $disk|grep swap|awk ' { print $1 } '`
+ swapoff $swap
+ partition_it $3 $4 $5
+ exit 0
+
+ ;;
+ format_it )
+ device_node
+
+ format_it $3 $4
+ exit 0
+ ;;
+ mount_it )
+ mount_it
+ ;;
+ copy_it )
+ copy_it $3
+
+ ;;
+
+
+ fstab_fix_it)
+ echo $@ >> /tmp/fstab.input
+ if [ ! -f /$mountpoint/etc/fstab ]
+ then
+ create_fstab
+ fi
+ if [ x$5 = xUPGRADE ]
+ then
+ cp -f /tmp/etc/fstab /$mountpoint/etc/fstab
+ fi
+
+# if [ x$5 = xFULL_INSTALL ]
+# then
+ #search for UUID
+ FOUNDUUID=""
+ find_uuid ${2}1
+ ROOTUUID=$FOUNDUUID
+ echo "--"
+ echo $ROOTUUID
+ echo "--"
+ FOUNDUUID=""
+ find_uuid ${2}2
+ SWAPUUID=$FOUNDUUID
+
+ FOUNDUUID=""
+ find_uuid ${2}3
+ DATAUUID=$FOUNDUUID
+# fi
+
+
+
+
+
+ sed -i -e "s/.*\/\ .*$/UUID=$ROOTUUID \/ auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab
+ sed -i -e "s/.*\/data\ .*$/UUID=$DATAUUID \/data auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab
+ sed -i -e "s/.*swap\ .*$/UUID=$SWAPUUID swap swap defaults 0/g" /$mountpoint/etc/fstab
+
+# sed -e "s/\ \/\ .*$/\ \/ $3 defaults 0 1/g"\
+# -e "s/\ \/data .*$/\ \/data $4 defaults 0 1/g" /$mountpoint/etc/fstab > /tmp/fstab
+#
+#
+# cp /tmp/fstab /$mountpoint/etc/fstab
+ ;;
+
+ grub_it )
+ #linux-live
+ #grub-install --recheck --no-floppy --root-directory=/$mountpoint /dev/$disk
+ grub-install --recheck --no-floppy --root-directory=/$mountpoint "(hd0)"
+
+
+ #fixing fstab
+# if [ ! -f /$mountpoint/etc/fstab ]
+# then
+# cp -f /$mountpoint/etc/fstab.install /$mountpoint/etc/fstab
+# fi
+# sed -e s/hda/$disk/g /$mountpoint/etc/fstab > /tmp/newfstab
+# cp -f /tmp/newfstab /$mountpoint/etc/fstab
+
+ #fixing grub/menu.1st
+ FOUNDUUID=""
+ find_uuid ${disk}1
+ ROOTUUID=$FOUNDUUID
+# sed -e s/hda/$disk/g /$mountpoint/boot/grub/menu.lst > /tmp/menu.lst
+
+ sed -i -e "s/root=.\S*/root=\/dev\/disk\/by-uuid\/$ROOTUUID/g" /$mountpoint/boot/grub/menu.lst
+
+
+#cp -f /tmp/menu.lst /$mountpoint/boot/grub/menu.lst
+ #cp /etc/X11/xorg.conf /$mountpoint/etc/X11/xorg.conf
+ mkinitcpio -g /$mountpoint/boot/kernel26.img
+ ;;
+ umount_it)
+
+ umount \/$mountpoint/data
+ umount \/$mountpoint
+esac
+
+
+
diff --git a/abs/core-testing/live-installer/install_proxy.sh b/abs/core-testing/live-installer/install_proxy.sh
new file mode 100755
index 0000000..756c46d
--- /dev/null
+++ b/abs/core-testing/live-installer/install_proxy.sh
@@ -0,0 +1,481 @@
+#!/bin/bash
+#chroot and /tmp
+MVHOSTNAME=mvi
+. /etc/profile
+TEMP_TEMPLATES=/tmp/templates
+disk=$2
+rootfs=$3
+rootsize=$4
+datafs=$5
+datasize=$6
+swapsize=$7
+mountpoint="/new_boot"
+run=$MV_ROOT/bin/install_functions.sh
+. /etc/systemconfig 2>/dev/null
+. $MV_ROOT/bin/networkconfig.sh
+CMDLINE=$(cat /proc/cmdline)
+
+#TEMPNET="Hostip"$default_interface
+#eval MYTHIP=\$${TEMPNET}
+
+
+progress () {
+mypercent=`echo "$1" | cut -d. -f1`
+if [ x$mypercent = x ]
+then
+echo "" > /tmp/.install_percent
+else
+echo "${mypercent}% complete" > /tmp/.install_percent
+fi
+
+
+}
+
+
+
+
+full_install () {
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ rm /tmp/.this_is_upgrade
+ fi
+ echo "Partitioning $disk" > /tmp/.install_state
+ progress 1
+ sleep 1
+ $run partition_it $disk $rootsize $datasize $swapsize
+
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs $datafs
+
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+
+ sleep 1
+ $run copy_it $disk ALL
+ rm $mountpoint/etc/fstab
+ $run fstab_fix_it $disk $rootfs $datafs FULL_INSTALL
+
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+
+ echo "Configuring system" > /tmp/.install_state
+ progress 100
+ sleep 1
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ #run save syssettings to save settings, then copy to new mountpoint
+ $MV_ROOT/bin/restore_default_settings.sh -c save -t syssettings -h $MVHOSTNAME -d 127.0.0.1
+ SE=$TEMPLATES/settings/syssettings
+ mkdir -p ${mountpoint}$SE
+ cp -rp $SE/* ${mountpoint}$SE/
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chown -R mythtv:mythtv ${mountpoint}$SE
+
+ chmod -R 775 ${mountpoint}$SE
+ chmod 775 "$mountpoint"/etc/systemconfig
+ #copy over any updates that might have occured
+ cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
+ chmod -R 755 ${mountpoint}/root
+ cp /etc/mtab "$mountpoint"/etc/mtab
+
+
+ if [ $SystemType = "Master_backend" -o $SystemType = "Standalone" ]
+ then
+ #installing DB to local machine
+ #turn off old live database, so the chroot one can start
+ /etc/rc.d/mysqld stop
+ mount --bind /dev "$mountpoint/dev"
+ chroot "$mountpoint" "$MV_ROOT/bin/install_db_chroot.sh" > /tmp/chrootdb.out
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ echo "stopping mysql in chroot"
+ chroot "$mountpoint" /etc/rc.d/mysqld stop
+ umount "$mountpoint/dev"
+
+ #/etc/rc.d/mysqld start
+ else
+ #update remotedb with this host settings
+ chroot "$mountpoint" DISPLAY=127.0.0.1:0 /usr/local/bin/MythVantage -t restore,default_1
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ if [ ! $? = 0 ]
+ then
+ touch $mountpoint/tmp/.dbsysfailed
+ chmod 777 $mountpoint/tmp/.dbsysfailed
+ else
+ #Run second time
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ fi
+ fi
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced
+ echo "Done" > /tmp/.install_state
+ cp /tmp/mythvantage_install.log $mountpoint/var/log/
+ $run unmount_it $disk
+}
+
+function createsquashlist(){
+if [ -f $1 ]
+then
+ rm -f
+$1
+fi
+for i in bin boot etc home lib opt root sbin usr var
+do
+echo $i >> $1
+done
+
+
+}
+
+
+
+
+function upgrade () {
+ touch /tmp/.this_is_upgrade
+
+ if [ ! x$rootfs = "xDo_not_format" ]
+ then
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs NO
+ fi
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+ sleep 1
+ cp -rf /tmp/etc /new_boot/etc.old
+ cp -rf /tmp/oss /new_boot/var/lib/oss.old
+ #$run copy_it $disk bin.lzm,boot.lzm,etc.lzm,home.lzm,lib.lzm,opt.lzm,root.lzm,sbin.lzm,usr.lzm,var.lzm
+ SQUASHLIST="/tmp/.squashlist"
+ createsquashlist $SQUASHLIST
+ $run copy_it $disk $SQUASHLIST
+ #copy back ssh keys
+
+ cp -rp /data/var/cache/pacman/pkg/* /new_boot/data/var/cache/pacman/pkg/
+ cp -fp /new_boot/etc.old/ssh/*.pub /new_boot/etc/ssh/
+ cp -fp /new_boot/etc.old/ssh/*.key /new_boot/etc/ssh/
+ cp -fp /new_boot/etc.old/ssh/*key /new_boot/etc/ssh/
+
+ #funckeys
+ cadir=/etc/pki/func/ca
+ mv /new_boot/etc/pki /new_boot/etc/pki.new
+ cp -rp /new_boot/etc.old/pki /new_boot/etc/
+ #passwd/shadow/group
+ cp -fp /new_boot/etc.old/passwd /new_boot/etc/
+ cp -fp /new_boot/etc.old/shadow /new_boot/etc/
+ cp -fp /new_boot/etc.old/group /new_boot/etc/
+
+ if [ x$rootfs = "xDo_not_format" ]
+ then
+ #rootfs=`grep ${disk}1 /tmp/etc/fstab |awk ' { print $3 } '`
+ rootfs=`grep \/\ /tmp/etc/fstab |awk ' { print $3 } '`
+ fi
+ #datafs=`grep ${disk}3 /tmp/etc/fstab |awk ' { print $3 } '`
+ datafs=`grep \/data /tmp/etc/fstab |awk ' { print $3 } '`
+ $run fstab_fix_it $disk $rootfs $datafs UPGRADE
+
+ echo "Writing boot sector" > /tmp/.install_state
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+
+ echo "Configuring system" > /tmp/.install_state
+ progress
+ sleep 1
+ cp /etc/mtab "$mountpoint"/etc/mtab
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
+ chmod -R 755 ${mountpoint}/root
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chmod 775 "$mountpoint"/etc/systemconfig
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ #wrap this in a network check_network, no need to update the db if the import worked.
+##### do I need to start mysql?
+ chroot "$mountpoint" DISPLAY=127.0.0.1:0 /usr/local/bin/MythVantage -t restore,default_1
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ #
+ #Run second time
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install
+
+ # fi
+
+ echo "Done" > /tmp/.install_state
+ cp /tmp/mythvantage_install.log $mountpoint/var/log/
+ $run unmount_it $disk
+}
+
+function netboot-full_install () {
+ TEMPVAR=${CMDLINE#*nfsroot=}
+ NFSROOT=${TEMPVAR%% *}
+ NFSROOT=`echo $NFSROOT|cut -d: -f1`
+ MAC=`/sbin/ifconfig eth0|grep HWaddr| cut -d: -f2-|awk '{ print $3}'|tr : -`
+ URL="http://$NFSROOT:1337/diskless.py?HOSTNAME=$hostname&MAC=$MAC"
+ echo "calling $URL"
+ echo "Starting" > /tmp/.install_state
+ curl $URL
+ ${MV_ROOT}/bin/xconfig.sh
+}
+
+function killdhcp () {
+if [ -f /etc/dhcpc/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /etc/dhcpc/dhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /etc/dhcpc/dhcpcd-eth0.pid
+ rm -f /var/run/dhcpcd*
+ fi
+if [ -f /var/run/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /var/run/dhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /var/run/dhcpcd-eth0.pid*
+ fi
+ip address flush dev eth0
+}
+
+
+# function vnc_check() {
+# CMDLINE=$(cat /proc/cmdline)
+# echo $CMDLINE |grep -q vnc
+# USEVNC=$?
+# echo $CMDLINE |grep -q nfsroot
+# NETBOOT=$?
+# echo $USEVNC
+# if [ ! x$USEVNC = x0 ]
+# then
+# echo "not using vnc"
+# if [ ! x$NETBOOT = x0 ]
+# then
+# echo "not using netboot"
+# else
+# echo "using netboot"
+# USEVNC=0
+# fi
+#
+# else
+# echo " using vnc"
+# fi
+# }
+
+
+# function network_setup () {
+# DEVICE=eth0
+# if [ ! -f /etc/systemconfig ]
+# then
+# exit 1
+# fi
+#
+# if [ ! x$USEVNC = x0 ]
+# then
+# echo "Resetting the network"
+# killdhcp
+# if [ $UseDHCP = 0 ]
+# then
+# /sbin/dhcpcd $DEVICE
+# if [ ! $? = 0 ]
+# then
+# exit 2
+# fi
+# fi
+# else
+# echo "using vnc/netboot, will not reset network"
+# echo "nameserver $nameserver" > /etc/resolv.conf
+# return 0
+# fi
+#
+# if [ $UseDHCP = 1 ]
+# then
+#
+# /sbin/ifconfig $DEVICE $ip
+# /sbin/route add default gw $route
+# echo "nameserver $nameserver" > /etc/resolv.conf
+#
+# fi
+#
+#
+# }
+
+function SANE_SYSETTINGS () {
+sed -e '/HOSTrootfstype/d' \
+ -e '/HOSTrootfstype/d' \
+ -e '/HOSTdatafstype/d' \
+ -e '/HOSTOSsize/d' \
+ -e '/HostUseALLdata/d' \
+ -e '/HOSTDATAsize/d' \
+ -e '/HOSTuprootfstype/d' \
+ -e '/HostUseSWAP/d' \
+ -e '/HOSTSWAPsize/d ' /tmp/templates/settings/syssettings/settings.txt > /tmp/settings.new
+ mv /tmp/settings.new /tmp/templates/settings/syssettings/settings.txt
+}
+
+case $1 in
+ full_install_it ) full_install ;;
+
+ NETBOOT)
+echo "-----------------------------------------------------------------------3-----"
+ netboot-full_install ;;
+
+ find_update)
+ #TRY TO mount first partition of drive
+ #copy /etc/systemconfig to live, import settings into db
+ #umount drive
+ $run mount_it $disk
+ if [ -f /new_boot/etc/systemconfig ]
+ then
+ ###########ADD templates
+ mkdir -p $TEMP_TEMPLATES
+ cp -pr /new_boot/$TEMPLATES $TEMP_TEMPLATES
+ SANE_SYSETTINGS
+ cp -rp $TEMP_TEMPLATES/settings $TEMPLATES/
+
+
+ cp /new_boot/etc/systemconfig /etc/systemconfig
+ cp -rf /new_boot/etc /tmp/etc
+ cp -rf /new_boot/var/lib/oss /tmp/oss
+
+ $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings -h $MVHOSTNAME -d 127.0.0.1
+ fi
+ $run umount_it $disk
+ ;;
+
+ upgrade_it)
+ #"$MV_ROOT/bin/install_proxy.sh upgrade_it " + install_drive + " " + rootfs + "&"
+ upgrade
+
+ ;;
+ disk_model_it)
+ model="unknown"
+ size="xxx"
+ case $2 in
+
+ h* )
+ model=`cat /proc/ide/$2/model`
+ ;;
+ s*) model=`sginfo /dev/$2|grep Product|awk ' { print $2 } '`
+ ;;
+ esac
+ size=`parted /dev/$2 print |grep Disk|awk ' { print $3 } ' `
+
+
+ echo ""$model" $size " >/tmp/model
+
+ ;;
+ network_check_it)
+ #Should never return from check_network
+ case $2 in
+ setup_network)
+ vnc_check
+ install_network_setup
+ ;;
+
+ check_self)
+ myipdefault=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ ping -c 1 $myipdefault
+ if [ ! $? = 0 ]
+ then
+ exit 3
+ #can't ping yourself
+ fi
+ ;;
+ check_gw)
+ #check gateway
+ mygwdefault=`/sbin/route |grep $default_interface|grep UG|awk '{ print $2}'`
+ if [ ! x$mygwdefault = x ]
+ then
+ ping -c 1 $mygwdefault
+ if [ ! $? = 0 ]
+ then
+ exit 4
+ fi
+ fi
+ ;;
+ check_ns)
+ #check nameserver
+ mydns=`cat /etc/resolv.conf|grep nameserver|head -1|awk '{ print $2}'`
+ ping -c 1 $mydns
+ if [ ! $? = 0 ]
+ then
+ exit 5
+ fi
+ ;;
+ check_names)
+ host google.com
+ if [ ! $? = 0 ]
+ then
+ exit 6
+ fi
+ ;;
+ host_names)
+ host $hostname
+ if [ $? = 0 ]
+ then
+ exit 7
+ fi
+ ;;
+
+ esac
+ exit 0
+ ;;
+
+
+ * )
+ state=`cat /tmp/.install_state`
+ if [ x"${state}" = "xConfiguring system" ]
+ then
+ progress ""
+ else
+
+ if [ -f /tmp/.startsize.io ]
+ then
+ . /tmp/.startsize.io
+ #finding the drive
+ ddrive=`df | grep $mountpoint | head -n1 | awk -F/ ' { print $3 } ' | cut -d" " -f 1|cut -b1,2,3 `
+ used=`statgrab -M disk.|grep ${ddrive}.write_bytes|cut -d= -f 2|tr -d " "`
+ used=`echo $used-$STARTSIZE|bc`
+ #echo $used
+ fi
+
+ if [ ! x$used = x ]
+ then
+ . /root/.install_size
+ #somehow find if it's an install or update
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ total=$UPGRADESIZE
+ else
+ total=$TOTALSIZE
+ fi
+ percent=`echo "scale=2 ; ($used/$total) * 100 " |bc `
+ cond2=$(echo "$percent > 100" |bc )
+ if [ $cond2 -eq 1 ]
+ then
+ percent=100
+ fi
+ cond3=$(echo "$percent < 3" |bc )
+ if [ $cond3 -eq 0 ]
+ then
+ progress $percent
+ fi
+ fi
+ fi
+ ;;
+esac
+
+
+
diff --git a/abs/core-testing/live-installer/issue b/abs/core-testing/live-installer/issue
new file mode 100644
index 0000000..3c01679
--- /dev/null
+++ b/abs/core-testing/live-installer/issue
@@ -0,0 +1 @@
+LinHes \ No newline at end of file
diff --git a/abs/core-testing/live-installer/live-install.sh b/abs/core-testing/live-installer/live-install.sh
new file mode 100755
index 0000000..573bb1f
--- /dev/null
+++ b/abs/core-testing/live-installer/live-install.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+#redirect stderr to stdout, then rediret stdout to file
+. /etc/profile
+exec 2>&1
+exec > /tmp/mythvantage_install.log
+. /etc/X11/STBWINDOWMANAGER
+/usr/bin/nvidia-settings -a InitialPixmapPlacement=2
+keylaunch &
+/usr/bin/tilda &
+/usr/X11R6/bin/unclutter -root -idle 0 -jitter 400 -noevents &
+export MALLOC_CHECK_=0
+if [ -f /opt/vmware/bin32/vmware-user-wrapper ]
+then
+ /opt/vmware/bin32/vmware-user-wrapper &
+fi
+xhost +
+CMDLINE=$(cat /proc/cmdline)
+echo $CMDLINE |grep -q nfsroot
+NFSROOT=$?
+if [ x$NFSROOT = x1 ]
+then
+
+ unbuffer MythVantage &
+else
+ NETBOOT=YES MythVantage &
+fi
+
+exec $STBWINDOWMANAGER
diff --git a/abs/core-testing/live-installer/live.install b/abs/core-testing/live-installer/live.install
new file mode 100644
index 0000000..a0a9d31
--- /dev/null
+++ b/abs/core-testing/live-installer/live.install
@@ -0,0 +1,78 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ rm -f /etc/issue
+ rm -f /etc/arch-release
+
+}
+
+# arg 1: the new package version
+post_install() {
+ if [ ! -f /etc/blacklist.package ]
+ then
+ echo "List of packages to ignore" > /etc/blacklist.package
+ echo "one package per line" >> /etc/blacklist.package
+ fi
+
+LINE="mythtv ALL = NOPASSWD:/usr/MythVantage/bin/mythvantage"
+LINE1="mythtv ALL = NOPASSWD:/usr/MythVantage/bin/MythVantage"
+for i in "$LINE" "$LINE1"
+do
+ cp /etc/sudoers /etc/sudoers.bak
+ grep -q "$i" /etc/sudoers
+ if [ $? != 0 ]
+ then
+ echo "$i" >> /etc/sudoers
+ visudo -cf /etc/sudoers
+ if [ ! $? = 0 ]
+ then
+ cp /etc/sudoers.bak /etc/sudoers
+ echo $i
+ echo "Error adding files"
+ exit 1
+ fi
+ fi
+done
+
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ . /etc/profile
+ ps -ef|grep mysqld|grep -v grep
+ status=$?
+ echo "status $status"
+ if [ $status = 0 ]
+ then
+ restore_default_settings.sh -c load
+ fi
+ if [ ! -f /etc/blacklist.package ]
+ then
+ echo "List of packages to ignore" > /etc/blacklist.package
+ echo "one package per line" >> /etc/blacklist.package
+ fi
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/live-installer/networkconfig.sh b/abs/core-testing/live-installer/networkconfig.sh
new file mode 100644
index 0000000..61a7405
--- /dev/null
+++ b/abs/core-testing/live-installer/networkconfig.sh
@@ -0,0 +1,280 @@
+#!/bin/bash
+#. /etc/profile
+#. /etc/systemconfig
+#BASE=/tmp
+ETCNETDIR=$BASE/etc/net/ifaces
+
+
+
+function kill_dhcp ()
+{
+for i in ${BASE}/etc/dhcpc/dhcpcd-*.pid
+do
+ if [ -f ${i} ]
+ then
+ pid=`cat ${i}`
+ kill -9 $pid
+ rm -f ${i}
+ fi
+ if [ x$1 = xflush ]
+ then
+ for ifdev in eth0 wlan0 eth1 wlan1
+ do
+ echo ${i} |grep $ifdev
+ status=$?
+ if [ $status = 1 ]
+ then
+ ip address flush $ifdev
+ fi
+ done
+ fi
+
+done
+
+}
+
+function setup_nameserver(){
+grep -q $1 ${BASE}/etc/resolv.conf
+status=$?
+if [ ! $status = 0 ]
+then
+ echo "nameserver $1" >> ${BASE}/etc/resolv.conf
+fi
+
+}
+
+function setup_interfaces() {
+ local IS_WIRELESS
+ local ip
+ local netmask
+ local isactive
+ local dns
+ local UseDHCP
+ local GW
+ local ESSID
+ local KEY
+ local ENCRYPT
+ local TEMPNET
+ IS_WIRELESS=false
+
+ #local ip
+ TEMPNET="Hostip"$1
+ echo $TEMPNET
+ eval ip=\$${TEMPNET}
+
+ TEMPNET=Hostnetmask$1
+ eval netmask=\$${TEMPNET}
+ netmask=`echo "$netmask" | cut -d " " -f1`
+
+ TEMPNET=HostActive$1
+ eval isactive=\$${TEMPNET}
+
+ TEMPNET=HostDNS$1
+ eval dns=\$${TEMPNET}
+
+ TEMPNET="HostUSEDHCP"$1
+ eval UseDHCP=\$${TEMPNET}
+
+ TEMPNET=HostGW$1
+ eval GW=\$${TEMPNET}
+
+
+
+ if [ $1 = wlan0 -o $1 = wlan1 ]
+ then
+ IS_WIRELESS=TRUE
+ TEMPNET=HostESSID$1
+ eval ESSID=\$${TEMPNET}
+
+ TEMPNET="HostKey"$1
+ eval KEY=\$${TEMPNET}
+
+ TEMPNET=HostUseEncryption$1
+ eval ENCRYPT=\$${TEMPNET}
+ fi
+
+
+ echo "Setup $1 in progress, wireless: $IS_WIRELESS"
+
+ if [ ! -d $ETCNETDIR/$1 ]
+ then
+ mkdir -p $ETCNETDIR/$1
+ fi
+
+ if [ ! -f $ETCNETDIR/$1/options ]
+ then
+ cp -f $TEMPLATES/etcnet/eth/options $ETCNETDIR/$1/options
+ fi
+
+ if [ x$isactive = x0 ]
+ then
+ echo "setting $1 to inactive"
+ sed -i -e 's/^ONBOOT=.*$/ONBOOT=no/g' $ETCNETDIR/$1/options
+
+ else
+ echo "setting $1 to active"
+ sed -i -e 's/^ONBOOT=.*$/ONBOOT=yes/g' $ETCNETDIR/$1/options
+ fi
+
+ if [ x$IS_WIRELESS = xTRUE ]
+ then
+ echo "setting $1 wireless"
+ sed -i -e 's/^CONFIG_WIRELESS=.*$/CONFIG_WIRLESS=yes/g' $ETCNETDIR/$1/options
+ #set the key and essid
+ echo "essid $ESSID" > $ETCNETDIR/$1/iwconfig
+ if [ x$ENCRYPT = x1 ]
+ then
+ echo "key $KEY" >> $ETCNETDIR/$1/iwconfig
+ fi
+
+ else
+ echo "disabling wireless"
+ sed -i -e 's/^CONFIG_WIRLESS=.*$/CONFIG_WIRLESS=no/g' $ETCNETDIR/$1/options
+ fi
+
+
+
+
+ if [ $UseDHCP = 0 ]
+ then
+ echo using dhcp
+ sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=dhcp/g' $ETCNETDIR/$1/options
+
+ else
+ echo "using static ip"
+ sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=static/g' $ETCNETDIR/$1/options
+ echo "default via $GW" > $ETCNETDIR/$1/ipv4route
+ echo "$ip$netmask" > $ETCNETDIR/$1/ipv4address
+ setup_nameserver $dns
+ fi
+}
+
+
+function find_active () {
+#HostActiveeth1="1"
+rm -f ${BASE}/etc/resolv.conf
+if [ x$MYTHDHCP = x1 ]
+ then
+ #add 127.0.0.1 to /etc/resolv.conf
+ echo "search lan" > ${BASE}/etc/resolv.conf
+ echo "nameserver 127.0.0.1" >> ${BASE}/etc/resolv.conf
+ fi
+
+for i in eth0 eth1 wlan0 wlan1
+do
+ CURRENTIF="HostActive"$i
+ eval IFSTATE=\$${CURRENTIF}
+ if [ x$IFSTATE = x1 ]
+ then
+ setup_interfaces $i
+ fi
+done
+}
+
+function setup_hostname {
+#set the hostname
+if [ ! x$hostname = x ]
+then
+ echo $hostname > ${BASE}/etc/hostname
+ cat $BASE/etc/hosts |grep -v 127.0.0.1|grep -v $hostname > /tmp/hosts
+ #cat $BASE/etc/hosts |grep -v 127.0.0.1|grep -v $hostname | grep -v $ip > /tmp/hosts
+
+ if [ x$MYTHDHCP = x1 ]
+ then
+ echo "127.0.0.1 localhost " > ${BASE}/etc/hosts
+ echo "$MYTHIP $hostname " >> ${BASE}/etc/hosts
+ else
+ echo "127.0.0.1 $hostname localhost " > ${BASE}/etc/hosts
+ fi
+ cat /tmp/hosts >> ${BASE}/etc/hosts
+fi
+
+kill_dhcp
+}
+
+function vnc_check() {
+ CMDLINE=$(cat /proc/cmdline)
+ echo $CMDLINE |grep -q vnc
+ USEVNC=$?
+ echo $CMDLINE |grep -q nfsroot
+ NETBOOT=$?
+ echo $USEVNC
+ if [ ! x$USEVNC = x0 ]
+ then
+ echo "not using vnc"
+ if [ ! x$NETBOOT = x0 ]
+ then
+ echo "not using netboot"
+ else
+ echo "using netboot"
+ USEVNC=0
+ fi
+
+ else
+ echo " using vnc"
+ fi
+}
+
+function setup_MYTH_vars {
+ TEMPMYTH="Hostip"$default_interface
+ #echo $TEMPMYTH
+ eval MYTHIP=\$${TEMPMYTH}
+
+ TEMPMYTH="HostUSEDHCP"$default_interface
+ eval MYTHDHCP=\$${TEMPMYTH}
+
+
+
+}
+
+
+
+function setup_network {
+ setup_MYTH_vars
+ setup_hostname
+ find_active
+}
+
+function start_network {
+if [ ! $USEVNC = 0 ]
+then
+ /etc/net/scripts/network.init restart
+
+else
+ echo "VNC/NETBOOT in use, will NOT restart network"
+fi
+
+}
+
+function stop_network {
+if [ ! $USEVNC = 0 ]
+then
+ echo "stopping the network"
+ kill_dhcp flush
+ ip address flush dev eth0 2>&1 >/dev/null
+ ip address flush dev eth1 2>&1 >/dev/null
+ ip address flush dev wlan0 2>&1 >/dev/null
+ ip address flush dev wlan1 2>&1 >/dev/null
+else
+ echo "VNC/NETBOOT in use, will NOT restart network"
+fi
+
+}
+
+
+#this is used by the install process to start the network
+function install_network_setup {
+ setup_MYTH_vars
+ setup_hostname
+ stop_network
+ find_active
+ start_network
+
+}
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/remove_service.sh b/abs/core-testing/live-installer/remove_service.sh
new file mode 100755
index 0000000..6cc4b4f
--- /dev/null
+++ b/abs/core-testing/live-installer/remove_service.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -e $SERVICE_DIR/$1 ]
+then
+ echo "removing"
+ rm $SERVICE_DIR/$1
+fi
diff --git a/abs/core-testing/live-installer/restore_default_settings.sh b/abs/core-testing/live-installer/restore_default_settings.sh
new file mode 100755
index 0000000..e2b7044
--- /dev/null
+++ b/abs/core-testing/live-installer/restore_default_settings.sh
@@ -0,0 +1,325 @@
+#!/bin/bash
+. /etc/profile
+. /etc/systemconfig
+shopt -s -o nounset
+echo $@ >> /tmp/restore.out
+#TEMPLATES="/usr/share/templates/settings"
+TEMPLATES="$TEMPLATES/settings"
+TABLES="settings keybindings"
+MYTHDBUSER=mythtv
+MYTHTVPASSWD=mythtv
+declare -r OPTSTRING="c:e:t:d:h:s:a:z:Ho"
+Thistemplate=""
+declare -i OVERRIDE=0
+declare -i EVERYTHING=0
+
+function CMD_DEFINE () {
+ #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\";"
+ 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"
+ MYSQLCMD_UPDATE_HOST="select hostname from settings;"
+ fi
+}
+
+function SQL_DEFINE () {
+ #$1 is the table name
+ if [ $1 = "settings" ]
+ then
+ ALTERSQL="Alter table temp_${1}_${hostname} add unique ( value )"
+ else
+ ALTERSQL=";"
+ fi
+
+ CREATESQL="create table temp_${1}_${hostname} like $1;"
+ COPY_TMP_SQL="replace into temp_${1}_${hostname} (select * from $1 where hostname=\"$hostname\");"
+ INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${hostname} 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}_${hostname} where hostname=\"$hostname\");"
+ DROP_TABLE="Drop table temp_${1}_${hostname}"
+}
+
+function ARG_ERR() {
+ if [ x$OPTARG = "x" ]
+ then
+ echo "$SWITCH NEEDS AND ARG"
+ exit 11
+ fi
+}
+
+function ALSADEVICE () {
+#ALSA:hw:1,4
+ if [ x$Audiotype = xALSA ]
+ then
+ SoundDevice=ALSA:$SoundDevice
+ fi
+}
+
+
+
+if [ $# -eq 0 ]
+then
+ echo "Valid options are:"
+ echo " -c (save|restore|load|uhostname|BECONFIG|ZIP|ACCESSCONTROL)"
+ echo " -t (syssettings)"
+ echo " -d databasename"
+ echo " -h hostname"
+ echo " -s systemtype (master|slave|standalone|frontendonly)"
+ echo " -a ipaddress"
+ echo " -z zipcode"
+ echo " -o override (only used upgrade installs)"
+ exit 1
+fi
+
+
+
+
+while getopts "$OPTSTRING" SWITCH
+do
+ case $SWITCH in
+ # \?) echo "unkown option"
+ # exit 11 ;;
+ c) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ OPERATION=$OPTARG
+ ;;
+ t) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ Thistemplate=$OPTARG
+
+ if [ x$Thistemplate = x"syssettings" ]
+ then
+ echo ""
+ else
+ echo "invalid template name"
+ exit 1
+ fi
+ ;;
+ d) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ if [ $OVERRIDE = 1 ]
+ then
+ ovdbhost=$OPTARG
+ else
+ dbhost=$OPTARG
+ fi
+ ;;
+ h) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ if [ $OVERRIDE = 1 ]
+ then
+ oldhostname=$hostname
+ hostname=$OPTARG
+ else
+ hostname=$OPTARG
+ fi
+
+ ;;
+ s) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ SYSTEMTYPE=$OPTARG
+ ;;
+ a) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ IP_ADDRESS=$OPTARG
+ ;;
+ z) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ ZIPCODE=$OPTARG
+ ;;
+ o) OVERRIDE=1
+ ;;
+
+ esac
+done
+
+echo $OVERRIDE
+
+#setup the Mysql commands
+CMD_DEFINE
+
+$MYSQLCMD_C "show tables" > /dev/null
+status=$?
+if [ $status = 1 ]
+then
+ echo "$@ failed"
+ echo "$@ failed" >> /tmp/restore.out
+ exit 1
+fi
+
+
+
+
+
+
+
+case $OPERATION in
+
+ restore)
+ #used to restore settings from syssettings
+ if [ -d $TEMPLATES/$Thistemplate ]
+ then
+ cd $TEMPLATES/$Thistemplate
+ for i in $TABLES
+ do
+ SQL_DEFINE $i
+ sed -e "s/REPLACEME/$hostname/g" $i.txt > /tmp/$i.txt
+ #echo $MYSQLCMD "$SELECTSQL"
+ echo $i
+ $MYSQLCMD "$CREATESQL"
+ $MYSQLCMD "$ALTERSQL"
+ $MYSQLCMD "$COPY_TMP_SQL"
+ $MYSQLCMD "$INSERTSQL"
+ $MYSQLCMD "$DROPSQL"
+ $MYSQLCMD "$COPY_BCK_SQL "
+ $MYSQLCMD "$DROP_TABLE "
+ #rm /tmp/$i.txt
+ done
+ else
+ echo "couldn't find $TEMPLATES/$Thistemplate"
+ fi
+ ;;
+
+ save)
+
+ 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
+ ;;
+ esac
+ # sed -e "s/$hostname/REPLACEME/g" $i > $i.txt && rm $i
+
+ done
+ ;;
+
+ load)
+
+ #will load both default_1 and default_2 unless either file is not found
+ for i in default_1 default_2
+ do
+ if [ -f $TEMPLATES/$i/settings.txt ]
+ then
+ echo $i
+ for tablename in $TABLES
+ do
+ #create table
+ CREATESQL="create table IF NOT EXISTS ${tablename}_${i} like $tablename;"
+ $MYSQLCMD_C "$CREATESQL"
+ #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';"
+ $MYSQLCMD_C "$INSERTSQL"
+ #update_hostname
+ UPDATEHOSTNAMESQL="update ${tablename}_${i} set hostname='$i' ; "
+ $MYSQLCMD_C "$UPDATEHOSTNAMESQL"
+ done
+ else
+
+ echo "couldn't find $TEMPLATES/$i/settings.txt template to load"
+ fi
+ CREATESQL="create table IF NOT EXISTS settings_user1 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS settings_user2 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS settings_user3 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+
+ CREATESQL="create table IF NOT EXISTS keybindings_user1 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS keybindings_user2 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS keybindings_user3 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ done
+;;
+
+
+
+ BECONFIG)
+ if [ $SYSTEMTYPE = "master" ]
+ then
+ $MYSQLCMD_C "UPDATE settings set data='${IP_ADDRESS}' where value='MasterServerIP';"
+ $MYSQLCMD_C "delete from settings where value='BackendServerIP' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
+ fi
+
+ 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\";"
+ 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\";"
+ ;;
+ MUSICFRONT)
+ ALSADEVICE
+ $MYSQLCMD_C "delete from settings where value='AudioOutputDevice' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='AudioOutputDevice' , hostname=\"$hostname\";"
+ #need to reload the settings.
+ systemconfig.sh reloadfe
+ ;;
+ MUSICMYTH)
+ ALSADEVICE
+ $MYSQLCMD_C "delete from settings where value='MusicAudioDevice' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='MusicAudioDevice' , hostname=\"$hostname\";"
+ ;;
+ uhostname)
+ #used when the hostname is changed.
+ TABLES="settings capturecard keybindings storagegroup recorded"
+ for i in $TABLES
+ do
+ USQL="update $i set hostname=\"$oldhostname\" where hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$USQL"
+ done
+
+ ;;
+ USERJOBALLOW)
+ SQL="update settings set data='1' where value like 'JobAllowUserJob%' and hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$SQL"
+ ;;
+
+ ACCESSCONTROL)
+ LIST="Hostaccessnetwork Hostaccesshostype HostaccesshostypeSystemtype Hostaccessmisc Hostaccesssleep Hostaccessadvanced HostaccessadvancedX Hostaccesssound"
+
+ for i in $LIST
+ do
+ $MYSQLCMD_C "delete from settings where value=\"$i\" and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='1', value=\"$i\" , hostname=\"$hostname\";"
+ done
+ SQL="update settings set data='0' where value='HostaccesshostypeSystemtype' and hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$SQL"
+ esac
+
+#SELECT * INTO OUTFILE 'data.txt'
+# FIELDS TERMINATED BY ','
+# FROM table2;
+
+
diff --git a/abs/core-testing/live-installer/soundconfig.sh b/abs/core-testing/live-installer/soundconfig.sh
new file mode 100755
index 0000000..1adb447
--- /dev/null
+++ b/abs/core-testing/live-installer/soundconfig.sh
@@ -0,0 +1,248 @@
+#!/bin/bash
+. /etc/systemconfig
+. /etc/profile
+echo $@ >/tmp/audio.call
+#set -x
+BASE=""
+. /etc/profile
+#TEMPLATES="/usr/share/templates"
+TESTFILE="$TEMPLATES/audio/space_battle_A.wav"
+OSSinstalled="false"
+
+function testaudio () {
+
+ossplay -d$AUDIODEVICE $TESTFILE
+
+}
+
+function load_alsa() {
+
+ remove_service.sh alsa-utils
+# cd /lib/modules/2.6.21-STB
+ KER=`uname -r`
+ cd /lib/modules/$KER/kernel/
+ tar -xvf alsa-$KER.tar
+ pacman -Sf --noconfirm alsa-lib
+
+ depmod -a
+ cd -
+ udevsettle
+ udevsettle
+ udevtrigger
+
+ add_service.sh alsa-utils
+ sleep 4
+ sv start alsa-utils
+}
+
+
+function unload_alsa () {
+#kill $(lsof -t /dev/dsp* /dev/audio* /dev/mixer* /dev/snd/*) && modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
+ sv stop alsa-utils
+ remove_service.sh alsa-utils
+ rm -rf /dev/adsp*
+ rm -rf /dev/snd/*
+ rm -rf /dev/audio
+ modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
+}
+
+function unload_oss {
+ sv stop oss
+ soundoff
+ rm -rf /dev/dsp*
+ rm -rf /dev/oss*
+ rm -rf /dev/sndstat
+ remove_service.sh oss
+}
+
+function installOSS {
+ echo "installing oss"
+ add_service.sh oss
+ sleep 4
+ sv start oss
+}
+
+
+function SYNCXINE {
+echo "modify xine config file"
+ if [ -f /data/home/mythtv/.xine/config ]
+ then
+ cp -f /data/home/mythtv/.xine/config $TEMPLATES/xine.config
+ else
+ cp $TEMPLATES/xine.config.template $TEMPLATES/xine.config
+ fi
+
+ if [ x$Audiotype = xOSS ]
+ then
+ DEVICENUMBER=`echo $SoundDevice|awk -F/ ' { print $3 } '|tr -d dsp `
+ sed -e "s/^.*audio.driver.*$/audio.driver:oss/" \
+ -e "s/^.audio.device.oss_device_name.*$/audio.device.oss_device_name:\/dev\/dsp/" \
+ -e "s/^.audio.devic.oss_device_number.*$/audio.device.oss_device_number:$DEVICENUMER/" \
+ -e "s/^.*audio.output.speaker_arrangement:.*$/Audio.output.speaker_arrangement:PassThrough/" \
+ $TEMPLATES/xine.config > /data/home/mythtv/.xine/config
+ else
+ cp $TEMPLATES/xine.config /data/home/mythtv/.xine/config
+ fi
+
+}
+
+function SYNCMPLAYER {
+echo "modify mplayer not implmented yet"
+}
+
+function SYNCMYTHMUSIC {
+echo "sync mythmusic"
+$MV_ROOT/bin/restore_default_settings.sh -c MUSICMYTH
+}
+
+function SYNCMYTHFRONTEND {
+echo "sync mythfrontend"
+$MV_ROOT/bin/restore_default_settings.sh -c MUSICFRONT
+}
+
+
+function checkOSSinstalled () {
+ ossinfo 1>/dev/null
+ resultcode=$?
+ echo $resultcode
+ if [ $resultcode = 0 ]
+ then
+ OSSinstalled='true'
+ else
+ OSSinstalled='false'
+ fi
+}
+
+function sound_config_system {
+
+ if [ x$syncXine = x1 ]
+ then
+ SYNCXINE
+ fi
+ if [ x$syncMplayer = x1 ]
+ then
+ SYNCMPLAYER
+ fi
+ if [ x$syncMythMusic = x1 ]
+ then
+ SYNCMYTHMUSIC
+ fi
+ if [ x$syncMythFrontend = x1 ]
+ then
+ SYNCMYTHFRONTEND
+ fi
+
+}
+
+function loadsound (){
+ checkOSSinstalled
+ if [ x$AUDIOTYPE = xOSS -o x$AUDIOTYPE = xoss ]
+ #then
+ # if [ $OSSinstalled = "false" ]
+ then
+ while [ $OSSinstalled = "false" ]
+ do
+ unload_alsa
+ rm /tmp/.alsatest
+ installOSS
+ installOSS
+ sleep 2
+ checkOSSinstalled
+ done
+ # fi
+ else
+ touch /tmp/.alsatest
+ unload_oss
+ load_alsa
+ load_alsa
+ rm /tmp/.alsatest
+
+ fi
+
+}
+
+
+
+
+#####################MAIN PROGRAM##########################
+
+declare -r OPTSTRING="i:t:d:"
+
+if [ $# -eq 0 ]
+then
+ echo "Valid options are:"
+ echo " -i (oss|alsa) oss or alsa subsystem "
+ echo " -t (test|real|LOAD) "
+ echo " -d device"
+ exit 1
+fi
+
+
+
+
+while getopts "$OPTSTRING" SWITCH
+do
+ case $SWITCH in
+ \?) echo "unkown option"
+ exit 11 ;;
+ i) echo "$SWITCH" "$OPTARG"
+ AUDIOTYPE="$OPTARG"
+ ;;
+ d) echo "$SWITCH" "$OPTARG"
+ AUDIODEVICE=$OPTARG
+ ;;
+ t) echo "$SWITCH" "$OPTARG"
+ SOUNDOPTYPE="$OPTARG"
+ if [ x"$OPTARG" = xtest ]
+ then
+ TEST=true
+ else
+ TEST=false
+ fi
+
+
+ ;;
+
+ esac
+done
+
+
+
+
+case $SOUNDOPTYPE in
+ REAL|real )
+ loadsound
+ sound_config_system
+ ;;
+ test|TEST)
+ echo $@ > /tmp/audio.test
+ #loadsound
+ if [ x$AUDIOTYPE = xOSS -o x$AUDIOTYPE = xoss ]
+ then
+ echo "testing OSS $AUDIODEVICE "
+ ossplay -d$AUDIODEVICE $TESTFILE
+ else
+ echo "testing ALSA $AUDIODEVICE "
+ aplay --device=$AUDIODEVICE $TESTFILE
+ fi
+
+ ;;
+
+ LOAD|load)
+ loadsound
+ ;;
+ esac
+
+
+exit 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/startx b/abs/core-testing/live-installer/startx
new file mode 100755
index 0000000..0ffdf8c
--- /dev/null
+++ b/abs/core-testing/live-installer/startx
@@ -0,0 +1,29 @@
+#!/bin/bash
+. /etc/profile
+
+export USER=root
+export HOME=/root
+#TEMPLATES=/usr/share/templates
+
+CMDLINE=$(cat /proc/cmdline)
+TEMPVAR=${CMDLINE#*ip=}
+IP=${TEMPVAR%% *}
+echo $CMDLINE |grep -q vnc
+USEVNC=$?
+
+if [ x$USEVNC = x1 ]
+then
+ $MV_ROOT/bin/xconfig.sh
+ cat /etc/X11/xorg.conf | sed -e 's/dev\/mouse/dev\/psaux/g'> /root/xorg.conf.install
+ startx /root/live-install.sh -- -config /root/xorg.conf.install -allowMouseOpenFail
+ else
+ #VNC
+ pacman -Sf --noconfirm tightvnc
+ cd /root
+ mkdir .vnc
+ echo mythvantage |vncpasswd -f > /root/.vnc/passwd
+ chmod 500 /root/.vnc/passwd
+ rm /root/.vnc/xstartup
+ ln -s /root/live-install.sh /root/.vnc/xstartup
+ vncserver
+fi
diff --git a/abs/core-testing/live-installer/systemconfig.sh b/abs/core-testing/live-installer/systemconfig.sh
new file mode 100755
index 0000000..909119e
--- /dev/null
+++ b/abs/core-testing/live-installer/systemconfig.sh
@@ -0,0 +1,1255 @@
+#!/bin/bash
+###################################################################
+#Script to configure your system based off the values in /etc/systemconfig
+#Any changes made to config files will be removed when systemconfig.sh is run
+#
+#JM
+###################################################################
+#set -x
+. /etc/profile
+MVRELEASE=`cat /etc/mythvantage-release |cut -d" " -f -2`
+
+echo $@ >/tmp/systemconfig.call
+echo "----------------------start of systemconfig $@ ----------------------"
+BASE=""
+
+#TEMPLATES="/usr/share/templates"
+. /etc/profile
+. $MV_ROOT/bin/networkconfig.sh
+PACMAN="pacman --noconfirm"
+postfix=`cat ${BASE}/usr/local/share/mythtv/.releasetype`
+PKGBLACKLIST=$BASE/etc/blacklist.package
+
+if [ x$1 = x"Mysql_only" ]
+ then
+ rm -f /tmp/mysql.txt
+ sed -e "s/^DBHostName=.*$/DBHostName=$2/" $TEMPLATES/mysql.txt > /tmp/mysql.txt
+ exit 0
+ fi
+
+
+if [ -f /etc/systemconfig ]
+then
+ . /etc/systemconfig
+TEMPNET="Hostip"$default_interface
+echo $TEMPNET
+eval MYTHIP=\$${TEMPNET}
+else
+ echo "could not find /etc/systemconfig"
+ exit 1
+fi
+
+
+
+#-----------------------------------------------------
+
+
+function setupmysql {
+#setup mysql.txt to find the database servers
+ if [ $SystemType = "Master_backend" ]
+ then
+ if [ $MYTHDHCP = 0 ]
+ then
+ #this grabs eth0, as that is all thats supported.
+# dbhost=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+ dbhost=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
+ cp /tmp/systemconfig.old ${BASE}/etc/systemconfig
+ ##logic to change master_serverip and backend_serverip in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ else
+
+ dbhost=$MYTHIP
+ sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
+ cp /tmp/systemconfig.old ${BASE}/etc/systemconfig
+ #logic to change dbhost in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ fi
+
+ if [ $SystemType = "Slave_backend" ]
+ then
+ if [ $MYTHDHCP = 0 ]
+ then
+ #this grabs eth0, as that is all thats supported.
+ #slavehost=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+ slavehost=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ ##logic to change backend_serverip in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s slave -a $slavehost
+ else
+ slavehost=$MYTHIP
+
+ #logic to change backend_serverif in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s slave -a $slavehost
+ fi
+ fi
+
+ MYSQLTXT=${BASE}/usr/local/share/mythtv/mysql.txt
+ if [ $SystemType = "Standalone" ]
+ then
+ sed -e "s/^DBHostName=.*$/DBHostName="localhost"/" $TEMPLATES/mysql.txt > $MYSQLTXT
+ else
+ sed -e "s/^DBHostName=.*$/DBHostName=$dbhost/" $TEMPLATES/mysql.txt > $MYSQLTXT
+ fi
+ rm ${BASE}/data/home/mythtv/.mythtv/mysql.txt
+ rm ${BASE}${MV_ROOT}/bin/mythtv/.mythtv/mysql.txt
+ if [ -f ${BASE}/data/home/mythtv/templates/mysql.txt ]
+ then
+ cp ${BASE}/data/home/mythtv/templates/mysql.txt $MYSQLTXT
+ fi
+
+ chmod 755 $MYSQLTXT
+ chown mythtv $MYSQLTXT
+
+}
+
+function setupmysqlnetwork(){
+MFILE=etc/my.cnf
+grep "#skip-networking" $BASE/$MFILE
+status=$?
+
+
+
+ if [ $SystemType = "Standalone" ]
+ then
+ sed -ie "s/^#skip-networking/skip-networking/g" $BASE/$MFILE
+ if [ $status = 0 ]
+ then
+ sudo sv restart mysql
+ echo "restarting mysql with no network"
+ fi
+
+ fi
+
+ if [ $SystemType = "Master_backend" ]
+ then
+ sed -ie "s/^skip-networking/#skip-networking/g" $BASE/$MFILE
+ if [ $status = 1 ]
+ then
+ sudo sv restart mysql
+ echo "restarting mysql with network"
+ fi
+
+ fi
+
+
+}
+
+
+function settimezone {
+#set the timezone
+if [ x"$timezone" = x ]
+then
+ timezone="unknown"
+fi
+rm ${BASE}/etc/localtime
+echo $timezone
+ln -s "/usr/share/zoneinfo/$timezone" ${BASE}/etc/localtime
+ sed -e "s~^TIMEZONE=.*$~TIMEZONE=\"${timezone}\"~" ${BASE}/etc/rc.conf > $TEMPLATES/rc.conf
+
+ # echo CLOCK="UTC" > ${BASE}/etc/conf.dclock
+ # echo CLOCK_SYSTOCH="yes" >> ${BASE}/etc/conf.d/clock
+ # echo TIMEZONE="$timezone" >> ${BASE}/etc/conf.d/clock
+cp $TEMPLATES/rc.conf /etc/rc.conf
+
+}
+
+
+function setupreceiver {
+ case $ReceiverType in
+ tinker) echo "do nothing"
+ ;;
+ Serial) echo "setup serial lirc"
+ sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ echo "lirc_serial #lirc" >> ${BASE}/etc/modules.mythvantage
+ /usr/bin/load-modules-mythvantage.sh
+ ;;
+ Usb-imon) echo "setup receiver-usb-imon"
+ sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ echo "lirc_imon #lirc" >> ${BASE}/etc/modules.mythvantage
+ /usr/bin/load-modules-mythvantage.sh
+ ;;
+ *) sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ ;;
+ esac
+
+
+}
+
+function setupremote {
+ case $Remotetype in
+ no_remote) echo "No remote selected"
+ daemon_remove="lircd $daemon_remove"
+ ;;
+ tinker) echo "Remote in tinker mode"
+ ;;
+ *) echo "Setup remote"
+ mv ${BASE}/etc/lircd.conf ${BASE}/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
+ cd $TEMPLATES/remotes/$Remotetype
+ for i in lircd*
+ do
+ cat $i >> ${BASE}/etc/lircd.conf
+ done
+ cp lircrc ${BASE}/etc/lircrc
+ if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
+ then
+ cat $TEMPLATES/LCD/$LCDtype/lircrc >> /etc/lircrc
+ cat $TEMPLATES/LCD/$LCDtype/lircd.conf >> /etc/lircd.conf
+ fi
+ if [ -f $TEMPLATES/transmit/$Blastertype/lircd.conf ]
+ then
+ cat $TEMPLATES/transmit/$Blastertype/lircd.conf >> ${BASE}/etc/lircd.conf
+ fi
+ chmod 755 /etc/lircrc
+ daemon_add="lircd $daemon_add"
+ sv hup lircd
+ ;;
+esac
+
+}
+
+function setupblaster {
+ #cd $TEMPLATES/transmit/$Blastertype
+ #for i in lircd*
+ #do
+ # cat lircd.conf >> ${BASE}/etc/lircd.conf
+ #done
+ # REMOTE_NAME${BASE}/usr/bin/change_chan.sh=`grep name lircd.conf* |awk -F" " ' { print $2 } '`
+ sed -e "s/^REMOTE_NAME=.*$/REMOTE_NAME=${Blastertype} /" $TEMPLATES/change_chan.sh > ${BASE}/usr/bin/change_chan.sh
+ chmod 755 ${BASE}/usr/bin/change_chan.sh
+ #channel change script change
+ setupremote
+
+}
+
+function setupevrouter {
+ if [ x$UseEvrouter = x1 ]
+ then
+ case x$EvrouterConfig in
+ xtinker )
+ echo "do nothing for evrouter"
+ ;;
+ x ) echo "empty evrouter"
+ ;;
+ * ) echo "setup evrouter for $EvrouterConfig "
+ cp $TEMPLATES/evrouter/$EvrouterConfig /etc/evrouter.cfg
+ daemon_add="evrouter Xvfb $daemon_remove"
+
+ ;;
+ esac
+ else
+ # disable evrouter
+ daemon_remove="evrouter Xvfb $daemon_remove"
+ fi
+
+
+
+
+}
+
+function setupLCD {
+ case x$LCDtype in
+ xtinker) echo "do nothing"
+ ;;
+ xno_lcd) echo "disabling lcd"
+ sv down lcdd
+ /usr/bin/load-modules-mythvantage.sh UNLOAD LCD
+ sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
+ daemon_remove="lcdd $daemon_remove"
+ ;;
+ x) echo "empty lcd" ;;
+
+ *) echo "setup lcd"
+ if [ -f $TEMPLATES/LCD/$LCDtype/modules ]
+ then
+ sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
+ cat $TEMPLATES/LCD/$LCDtype/modules >> ${BASE}/etc/modules.mythvantage
+ #should also modprobe
+ fi
+
+
+ if [ -f $TEMPLATES/LCD/$LCDtype/LCDd.conf ]
+ then
+ cp -f $TEMPLATES/LCD/$LCDtype/LCDd.conf /etc
+ # install="lcdproc $install"
+ daemon_add="lcdd $daemon_add"
+ /usr/bin/load-modules-mythvantage.sh
+ RESTART_FE="true"
+ RESTART_LCD="true"
+ fi
+ #check if lirc capable,if so then call setupremote
+ if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
+ then
+ setupremote
+ fi
+ ;;
+ esac
+
+}
+
+
+
+function scrubnfs {
+ cp /etc/fstab $TEMPLATES/fstab.conf.template
+ grep -v nfs $TEMPLATES/fstab.conf.template > ${BASE}/etc/fstab
+ }
+
+function setupfstab () {
+# setupfstab $NFSserver $NFSshare $NFSmount
+ echo "$1 $2 nfs" >> ${BASE}/etc/fstab
+ if [ ! -e "$2" ]
+ then
+ mkdir -p "$2"
+ chown mythtv:mythtv "$2"
+ fi
+ if [ x$DCONFIG = x ]
+ then
+ mount $2 &
+ fi
+
+}
+
+function setupncidclient
+{
+ sed -e "s/^set Host.*$/set Host $dbhost /" $TEMPLATES/ncid.conf.template >${BASE}/etc/ncid/ncid.conf
+}
+
+function setupnciddaemon {
+ cp -f /etc/ncid/ncidd.conf $TEMPLATES/ncidd.conf.template
+ sed -e "s/.*set ttyport.*$/set ttyport = \/dev\/$nciddSerialPort /" $TEMPLATES/ncidd.conf.template >${BASE}/etc/ncid/ncidd.conf
+
+}
+
+function setupntp () {
+cat > ${BASE}/etc/ntp.conf << EOF
+# default restrictions
+restrict default noquery notrust nomodify
+# NTP drift file - used to keep track of your system clocks
+# time deviation
+driftfile /etc/ntp.drift
+
+# NTP log file
+logfile /var/log/ntp.log
+# override the default restrictions here, servers that can query
+restrict 192.168.0.0 mask 255.255.0.0 nomodify
+restrict 10.0.0.0 mask 255.0.00 nomodify
+
+#servers to sync with
+EOF
+ #this is used for backend or standlone types
+ if [ $1 = "1" ]
+ then
+ echo "server ntp1.cs.wisc.edu" >> ${BASE}/etc/ntp.conf
+ echo "server ntp3.sf-bay.org" >> ${BASE}/etc/ntp.conf
+ echo "restrict ntp1.cs.wisc.edu noquery nomodify" >> ${BASE}/etc/ntp.conf
+ echo "restrict ntp3.sf-bay.org noquery nomodify" >> ${BASE}/etc/ntp.conf
+
+ else
+ echo "server $dbhost" >> ${BASE}/etc/ntp.conf
+ echo "restrict $dbhost noquery nomodify" >> ${BASE}/etc/ntp.conf
+ fi
+
+
+}
+
+function setupplugins (){
+
+pkglistinstall=""
+pkglistremove=""
+#default enabled
+for i in mythcontrols mythgallery mythmovietime mythmusic mythsmolt mythvideo
+do
+eval pkgvalue=\$${i}
+
+if [ x$pkgvalue = x ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ if [ x$pkgvalue = x1 ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ pkglistremove="$pkglistremove $i$postfix"
+ fi
+ fi
+
+
+
+done
+
+
+
+#default disabled
+ for i in mythphone mytharchive mythbrowser mythnews mythgame mythflix mythweather
+ do
+eval pkgvalue=\$${i}
+
+if [ x$pkgvalue = x ]
+ then
+ pkglistremove="$pkglistremove $i$postfix"
+ else
+ if [ x$pkgvalue = x1 ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ pkglistremove="$pkglistremove $i$postfix"
+ fi
+ fi
+ done
+install="$pkglistinstall $install"
+remove="$pkglistremove $remove"
+
+}
+function LCDcheck () {
+ case x$LCDtype in
+ xtinker) echo "do nothing lcd "
+ ;;
+ xno_lcd) echo "no lcd "
+ ;;
+ xxosd) install="xosd lcdproc $install"
+ ;;
+ x) echo "lcd empty "
+ ;;
+ *)
+ install="lcdproc $install"
+ ;;
+esac
+}
+
+
+function packages () {
+#see which plugins need to be installed
+echo " Starting to install Packages"
+setupplugins
+LCDcheck
+if [ ! -f $PKGBLACKLIST ]
+then
+ touch $PKGBLACKLIST
+fi
+ for i in $remove
+ do
+ echo "-----------$i --------------"
+ grep -q $i $PKGBLACKLIST
+ if [ $? = 1 ]
+ then
+ pacman -Q $i 2>/dev/null
+ #VAR=`pacman -Q $i 2>&1 `
+ if [ $? = 0 ]
+ then
+ if [ $i = "mythweb$postfix" ]
+ then
+ pacman --noconfirm -R mythweb$postfix
+ echo removed $i
+ else
+ pacman --noconfirm -Rs $i
+ echo removed $i
+ fi
+ fi
+ else
+ echo "$i is black listed"
+ fi
+ done
+ # fi
+
+ for i in $install
+ do
+ echo "-----------$i --------------"
+ grep -q $i $PKGBLACKLIST
+ if [ $? = 1 ]
+ then
+ pacman -Q $i 2>/dev/null
+ #VAR=`pacman -Q $i 2>&1 `
+ # echo $VAR |grep -vq error:
+
+ if [ ! $? = 0 ]
+ then
+ pacman --noconfirm -Sf $i
+ echo installed $i
+ else
+ echo "$i already installed"
+ fi
+ else
+ echo "$i is black listed"
+ fi
+ done
+}
+
+function daemons {
+echo "Daemons on boot"
+
+ for i in $daemon_remove
+ do
+ sv check $i 1>/dev/null
+ status=$?
+ if [ $status -eq 0 ]
+ then
+ sv down $i
+ fi
+ remove_service.sh $i
+ done
+
+
+ for i in $daemon_add
+ do
+ sv check $i 1>/dev/null
+ status=$?
+ add_service.sh $i
+
+ if [ $status -eq 0 ]
+ then
+ case $i in
+ mysql*) sv hup $i
+ ;;
+ mythback*) sv hup $i
+ ;;
+ lirc* ) sv hup $i
+ ;;
+ frontend) sv check frontend 1>/dev/null
+ ;;
+
+ smbd ) sv hup $i
+ ;;
+ nmbd ) sv hup $i
+ ;;
+ evrouter) sv restart $i
+ ;;
+ *) sv down $i
+ sleep 1
+ sv up $i
+ ;;
+ esac
+ fi
+
+ done
+
+}
+
+
+function services
+{
+ser_install=""
+ser_daemon_add=""
+ser_remove=""
+ser_daemon_remove=""
+if [ x$UseEvrouter = x1 ]
+then
+ ser_daemon_add="evrouter Xvfb $ser_daemon_add"
+else
+ ser_daemon_remove="evrouter Xvfb $ser_remove"
+fi
+
+if [ x$RunDHCP = x1 ]
+then
+ ser_daemon_add="dnsmasq $ser_daemon_add"
+ ser_install="dnsmasq mvpmc $ser_install"
+
+else
+ ser_daemon_remove="dnsmasq $ser_daemon_remove"
+ ser_remove="dnsmasq mvpmc $ser_remove"
+fi
+
+if [ x$RunFrontend = x1 ]
+then
+ ser_daemon_add="frontend hal $ser_daemon_add"
+ ser_install=" $ser_install"
+ showX=true
+ else
+ ser_daemon_remove="frontend hal $ser_daemon_remove"
+ ser_remove="$ser_remove"
+ fi
+
+if [ x$UseMythWEB = x1 ]
+then
+ ser_install="lighttpd mythweb$postfix $ser_install"
+ ser_daemon_add="lighttpd $ser_daemon_add"
+ else
+ ser_remove="mythweb$postfix $ser_remove"
+ ser_daemon_remove="$ser_daemon_remove"
+ fi
+
+#samba
+if [ x$UseSamba = x1 ]
+then
+ ser_install="samba $ser_install"
+ ser_daemon_add="nmbd smbd $ser_daemon_add "
+ if [ x$Samba_mediareadonly = x1 ]
+ then
+ smreadonly="no"
+ else
+ smreadonly="yes"
+ fi
+
+ if [ x$Samba_homereadonly = x1 ]
+ then
+ shreadonly="no"
+ else
+ shreadonly="yes"
+ fi
+
+ if [ ! -d ${BASE}/etc/samba ]
+ then
+ mkdir ${BASE}/etc/samba
+ fi
+
+ if [ -f ${BASE}/data/home/mythtv/templates/smb.conf ]
+ then
+ install -D -m755 ${BASE}/data/home/mythtv/templates/smb.conf ${BASE}/etc/samba/smb.conf
+ else
+ sed -e "s/^.*workgroup =.*$/ workgroup = $Samba_domain/g " \
+ -e "s/^.*server string = .*$/ server string = $hostname/g" $TEMPLATES/samba/smb.conf.template > ${BASE}/etc/samba/smb.conf
+
+ if [ x$Samba_media = "x1" ]
+ then
+ echo "include = /etc/samba/smb.conf.media" >> ${BASE}/etc/samba/smb.conf
+ sed -e "s/^.*writeable.*$/writeable = $smreadonly/g" $TEMPLATES/samba/smb.conf.media > ${BASE}/etc/samba/smb.conf.media
+ fi
+
+ if [ x$Samba_home = "x1" ]
+ then
+ echo "include = /etc/samba/smb.conf.home" >> ${BASE}/etc/samba/smb.conf
+ sed -e "s/^.*writeable.*$/writeable = $shreadonly/g" $TEMPLATES/samba/smb.conf.home > ${BASE}/etc/samba/smb.conf.home
+
+ fi
+
+ fi
+else
+ ser_remove="samba $ser_remove"
+ ser_install="smbclient $ser_install"
+ ser_daemon_remove="smbd nmbd $ser_daemon_remove"
+fi
+
+
+if [ x$UseNFS = x1 ]
+then
+ ser_install="nfs-utils portmap $ser_install"
+ ser_daemon_add="nfsd nfslock portmap $ser_daemon_add"
+ sed -e "s/REPLACEME/*/g" $TEMPLATES/exports.template > ${BASE}/etc/exports
+
+else
+ ser_remove="$ser_remove"
+ ser_daemon_remove="nfsd nfslock $ser_daemon_remove"
+fi
+
+if [ x$Runncidd = x1 ]
+then
+ ser_daemon_add="ncidd ncid $ser_daemon_add"
+ ser_install="ncid $ser_install"
+ else
+ ser_daemon_remove="ncidd ncid $ser_daemon_remove"
+ ser_remove="ncid $ser_remove"
+ fi
+
+#Setting the default, just to avoid the or statement..
+if [ x$UseHobbit = x ]
+then
+ UseHobbit=0
+fi
+
+if [ x$UseHobbit = x1 ]
+then
+ case $SystemType in
+ Standalone|Master_backend )
+ ser_daemon_add="hobbit $ser_daemon_add"
+ ser_install="hobbitserver $ser_install"
+ ;;
+
+ *) ser_daemon_add="hobbit-client $ser_daemon_add"
+ ser_install="hobbit-client $ser_install"
+ ;;
+ esac
+else
+ ser_daemon_remove="hobbit hobbit-client $ser_daemon_remove"
+ ser_remove="hobbit-client hobbitserver $ser_remove"
+ rm -f /data/srv/httpd/htdocs/hobbit/index.html
+
+ fi
+
+
+
+}
+
+
+
+function setupsleep {
+if [ x$AutoShutdown = x1 ]
+then
+ cronshutdowntime=""
+ if [ x$Shutdowntime != x-1 ]
+ then
+ cronshutdowntime=$Shutdowntime
+ fi
+ if [ x$Shutdowntime2 != x-1 ]
+ then
+ if [ x$cronshutdowntime = x ]
+ then
+ cronshutdowntime=$Shutdowntime2
+ else
+ cronshutdowntime="${cronshutdowntime},${Shutdowntime2}"
+ fi
+ fi
+
+ sed -e "s/HOUR/$cronshutdowntime/g" $TEMPLATES/cron.template | crontab - -u mythtv
+else
+ sed -e "/00 HOUR.*/d" $TEMPLATES/cron.template | crontab - -u mythtv
+fi
+
+}
+
+
+function setuppacman () {
+#setup link to httpd dir
+echo "Configuring pacman"
+ if [ ! x$1 = x ]
+ then
+ ln -s ${BASE}/data/var ${BASE}/data/srv/httpd/htdocs/repo
+ echo "creating the link for the pacman repo mirror"
+ fi
+
+ for i in mv-core mv-core-testing mv-extra mv-extra-testing
+ do
+ echo "[$i]" > ${BASE}/etc/pacman.d/$i
+ #add mirror if needed
+ if [ x$PKG_MIRROR = x1 ]
+ then
+ echo " Server = http://$dbhost/repo/$i " >> ${BASE}/etc/pacman.d/$i
+ fi
+ #add user templates
+ USERTEMPLATES="/data/home/mythtv/templates"
+ if [ -f $USERTEMPLATES/sources/$i ]
+ then
+ echo "Adding user $i"
+ cat $USERTEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i
+ fi
+ cat $TEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i
+ echo "setting local mirror to $dbhost for $i "
+ done
+
+ #sed -e "s/REPLACEME/$dbhost/g" $TEMPLATES/sources/svc_pkg > /etc/pacman.d/svc_pkg
+
+
+}
+
+
+function setupzipcode () {
+ if [ ! x$zipcode = x ]
+ then
+ ${MV_ROOT}/bin/restore_default_settings.sh -c ZIP -z $zipcode
+ fi
+}
+
+function process_nfsmap () {
+#first look for a local copy of nfsmap
+if [ $1 = noip ]
+then
+ if [ -f /data/home/mythtv/templates/nfsmap ]
+ then
+ NFSMAP="/data/home/mythtv/templates/nfsmap"
+ else
+ mv -f /tmp/nfsmap /tmp/nfsmap.old
+ wget -O /tmp/nfsmap http://$dbhost:1337/templates/nfsmap
+ if [ $? = 0 ]
+ then
+ NFSMAP="/tmp/nfsmap"
+ fi
+ fi
+else
+ mv -f /tmp/nfsmap /tmp/nfsmap.old
+ wget -O /tmp/nfsmap http://$1:1337/templates/nfsmap
+ if [ $? = 0 ]
+ then
+ NFSMAP="/tmp/nfsmap"
+ fi
+fi
+
+ if [ -f $NFSMAP ]
+ then
+ #read in file
+ while read line
+ do
+ NFSserver=`echo "$line"|cut -d" " -f1`
+ NFSmount=`echo "$line"|cut -d" " -f2`
+ setupfstab $NFSserver $NFSmount
+ done <$NFSMAP
+ else
+ echo "couldn't find nfsmap"
+
+ fi
+}
+
+function setupcnfs () {
+ scrubnfs
+ if [ $HaveCentralNFS = "yes" ]
+ then
+ case x$NFSserver in
+ xfile:nfsmap )
+ process_nfsmap noip
+ ;;
+ *:nfsmap )
+ nfsmapip=`echo "$NFSserver" | cut -d: -f1 `
+ process_nfsmap $nfsmapip
+ ;;
+ *) setupfstab $NFSserver $NFSmount
+ esac
+
+ #if [ ! x"$NFSserver" = "xfile:nfsmap" ]
+ #then
+ # setupfstab $NFSserver $NFSmount
+ #else
+ # process_nfsmap
+ #fi
+ else
+ echo "fe_nfs"
+ #if no central nfs found, then use the mbe.
+ if [ $SystemType = "Frontend_only" ]
+ then
+ setupfstab ${dbhost}:/data/media /data/media
+ fi
+ fi
+
+}
+
+function setupbootsplash () {
+
+if [ x$Usebootsplash = x1 ]
+then
+ COMMAND="%s/^default.*0/default 1/g"
+else
+ COMMAND="%s/^default.*1/default 0/g"
+fi
+
+ex ${BASE}/boot/grub/menu.lst <<EOF
+:$COMMAND
+:wq
+EOF
+
+}
+
+function setuphobbitclient () {
+COMMAND="%s/^BBDISP=.*$/BBDISP=$dbhost/g"
+
+
+ex ${BASE}/data/srv/hobbit/client/etc/hobbitclient.cfg <<EOF
+:$COMMAND
+:wq
+EOF
+
+}
+
+function setupSyslog () {
+COMMAND="%s/^destination d_remote.*$/destination d_remote \{tcp\(\"${dbhost}\" port\(514\)\) \;\} \;/"
+ex ${BASE}/etc/syslog-ng.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+
+
+}
+
+function setupfuncminion () {
+COMMAND="%s/^certmaster.*$/certmaster = ${dbhost}/"
+ex ${BASE}/etc/func/minion.conf <<EOF
+:$COMMAND
+:wq
+EOF
+}
+
+function setupDNSMASQ(){
+if [ x$RunDHCP = x1 ]
+then
+ echo "DNSMASQ setup"
+
+#set default route to my GW
+COMMAND="%s/^dhcp-option=3.*$/dhcp-option=3,${route}/"
+ex ${BASE}/etc/dnsmasq.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+#setup dns to my ip
+COMMAND="%s/^dhcp-option=6.*$/dhcp-option=6,${ip}/"
+ex ${BASE}/etc/dnsmasq.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+#change nfsroot to my ip
+COMMAND="%s/nfsroot=.*:/nfsroot=${ip}:/"
+ex ${BASE}/data/srv/tftp/pxelinux.cfg/default <<EOF
+:$COMMAND
+:wq
+EOF
+
+#add 127.0.0.1 to /etc/resolv.conf
+ echo "search lan" > ${BASE}/etc/resolv.conf
+ echo "nameserver 127.0.0.1" >> ${BASE}/etc/resolv.conf
+ echo "nameserver $nameserver" >> ${BASE}/etc/resolv.conf
+fi
+
+#setup dongle.config
+COMMAND="%s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s ${ip} \& /"
+ex ${BASE}/data/srv/tftp/dongle.bin.config <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+
+#setup dongle.config
+
+}
+
+function reloadfe(){
+ PID=`ps -ef |grep mythfrontend|grep -v grep |awk '{print $2 }'`
+ /usr/bin/backend_control.sh clearcache behost $dbhost
+ if [ x$RESTART_LCD = xtrue ]
+ then
+ killall -9 mythlcdserver
+ fi
+ kill -s USR1 $PID
+
+}
+
+
+function setup_db (){
+
+ install="mysql avahli"
+ daemon_add="mysql"
+ packages
+ daemons
+status=1
+mysqlstatus=1
+while [ ! $status = 0 ]
+do
+ sv stop mysql
+ sleep 1
+ sv start mysql
+ mysqlstatus=$?
+ if [ $mysqlstatus = 0 ]
+ then
+ mysql -e "show databases;"
+ showstatus=$?
+ if [ $showstatus = 0 ]
+ then
+ pacman --noconfirm -R mythdb-initial
+ pacman --noconfirm -S mythdb-initial
+ $MV_ROOT/bin/restore_default_settings.sh -c load
+ if [ $SystemType = "Master_backend" ]
+ then
+ $MV_ROOT/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ #update database to allow user jobs on this host.
+ $MV_ROOT/bin/restore_default_settings.sh -c USERJOBALLOW
+ $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ if [ -d /data/srv/mysql/mythconverg ]
+ then
+ pacman --noconfirm -R webcalendar
+ pacman --noconfirm --nodeps -S webcalendar
+ status=0
+ fi
+ fi
+ fi
+done
+}
+
+
+#----------------------------------------------------MAIN PROGRAM-------------------------------------------
+#misc,sleep,hostype,advanced,audio
+eval LAST=\$$#
+LIST=`echo $LAST | tr , " " `
+
+hosttypechange="false"
+
+
+for i in $LIST
+ do
+ echo $i
+ case $i in
+ misc) showmisc="true"
+ ;;
+ sleep) showsleep="true"
+ ;;
+ hostype) showhost="true"
+ showX="true"
+ ;;
+ hostypec) hosttypechange="true"
+ ;;
+ advanced) showadvanced="true"
+ #showhost="true"
+ ;;
+ audio) showaudio="true"
+ ;;
+ network) shownetwork="true"
+ ;;
+ advancedX) showX="true"
+ ;;
+ restartfe) killall -9 mythfrontend
+ killall -9 mythwelcome
+ exit 0
+ ;;
+ reloadfe) reloadfe
+ ;;
+
+ this_is_install) MV_NEW_INSTALL="true"
+ ;;
+
+ esac
+ done
+
+if [ x$MV_NEW_INSTALL = xtrue ]
+then
+ hosttypechange="false"
+fi
+
+
+
+# exit 1
+
+#network
+if [ x"$shownetwork" = xtrue ]
+then
+ OLDHOSTNAME=`hostname`
+ NEWHOSTNAME=$hostname
+ if [ ! $OLDHOSTNAME = $NEWHOSTNAME ]
+ then
+
+ ${MV_ROOT}/bin/restore_default_settings.sh -cuhostname -o -h$OLDHOSTNAME
+ RESTART_FE="true"
+ hostname $NEWHOSTNAME
+ if [ $SystemType != "Frontend_only" ]
+ then
+ sv restart mythbackend
+ fi
+
+ fi
+
+ setup_network
+ CMDLINE=$(cat /proc/cmdline)
+ echo $CMDLINE |grep -q netboot
+ NETBOOT=$?
+ if [ x$NETBOOT = x1 ]
+ then
+ echo "loading network"
+ ${BASE}/etc/net/scripts/network.init reload
+ else
+ echo "netboot, will not start network"
+ fi
+fi
+
+
+if [ x$showhost = "xtrue" ]
+then
+case $SystemType in
+ Standalone)
+ setupntp 1
+ services
+ if [ x$hosttypechange = "xtrue" ]
+ then
+ setup_db
+ fi
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="mysql mythdb-initial avahli portmap $ser_install"
+
+
+ remove="none $ser_remove"
+
+ daemon_add="mysql mythbackend avahi portmap $ser_daemon_add"
+ daemon_remove="none $ser_daemon_remove"
+
+ ;;
+ Master_backend)
+ setupntp 1
+ services
+
+ if [ ! -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ mkdir ${BASE}/etc/avahi/services
+ cp $TEMPLATES/mysql.service ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="mysql mythdb-initial avahi portmap myth2ipod mythtv-status $ser_install "
+ remove="$ser_remove"
+
+ daemon_add="mysql mythbackend avahi portmap certmaster $ser_daemon_add"
+ daemon_remove="$ser_daemon_remove"
+ ;;
+ Slave_backend)
+ setupntp 0
+ services
+ if [ x$hosttypechange = "xtrue" ]
+ then
+ setup_db
+ fi
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ #cp $TEMPLATES/mysql.service ${BASE}/etc/avahi/services/mysql.service
+ install="mysql avahi $ser_install "
+ remove=" $ser_remove"
+
+ daemon_add="mythbackend avahi portmap $ser_daemon_add"
+ daemon_remove="$ser_daemon_remove"
+ ;;
+ Frontend_only)
+ #Add values for services
+ setupntp 0
+ services
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="libmysqlclient mysql-clients portmap avahi $ser_install"
+ remove="mysql mythweb$postfix $ser_remove"
+
+ daemon_add="avahi portmap $ser_daemon_add "
+ daemon_remove="mysql mythbackend $ser_daemon_remove"
+ ;;
+
+
+esac
+setupSyslog
+setupfuncminion
+fi
+
+#apply these to ALL types
+
+
+
+
+#systemtype
+
+if [ x$showhost = "xtrue" ]
+then
+ setupmysqlnetwork
+ setupmysql
+ setupremote
+ #grab the new dbhost key
+ #/usr/bin/grabkey.py
+fi
+
+#audio
+
+if [ x$showaudio = "xtrue" ]
+then
+ #setupsoundtype
+ if [ ! x$Audiotype = xtinker ]
+ then
+ ${MV_ROOT}/bin/soundconfig.sh -t real -i $Audiotype -d $SoundDevice
+ fi
+fi
+
+#should always run
+packages
+
+#misc
+
+if [ x$showmisc = "xtrue" ]
+then
+ setupzipcode
+ settimezone
+ setupcnfs
+fi
+
+#sleep
+if [ x$showsleep = "xtrue" ]
+then
+ setupsleep
+fi
+
+if [ x$showX = "xtrue" ]
+then
+ ${MV_ROOT}/bin/xconfig.sh
+fi
+
+#advanced
+if [ x$showadvanced = "xtrue" ]
+then
+ if [ ! x$showhost = "xtrue" ]
+ then
+ services
+ install="none $ser_install"
+ remove="none $ser_remove"
+ daemon_add=" none $ser_daemon_add"
+ daemon_remove="none $ser_daemon_remove"
+ packages
+
+
+ if [ x$SystemType = xMaster_backend ]
+ then
+ setuppacman link
+ else
+ setuppacman
+ fi
+ fi
+ setupncidclient
+ setupnciddaemon
+ setupbootsplash
+ setuphobbitclient
+ setupreceiver
+ setupevrouter
+ setupblaster
+ setupLCD
+ setupDNSMASQ
+
+fi
+
+
+
+daemons
+#add check for lcd, and restart if needed.
+
+if [ x$RESTART_FE = xtrue ]
+then
+ reloadfe
+fi
+
+
+
+
+
+case $SystemType in
+ Standalone) smoltsystem=6
+ MVRELEASE="$MVRELEASE (Standalone)"
+ ;;
+ Master_backend)
+ if [ x$RunFrontend = x1 ]
+ then
+ smoltsystem=2
+ MVRELEASE="$MVRELEASE (MBE with Frontend)"
+ else
+ smoltsystem=1
+ MVRELEASE="$MVRELEASE (MBE)"
+ fi
+ ;;
+ Slave_backend)
+ if [ x$RunFrontend = x1 ]
+ then
+ smoltsystem=5
+ MVRELEASE="$MVRELEASE (SLAVE with Frontend)"
+ else
+ smoltsystem=5
+ MVRELEASE="$MVRELEASE (SLAVE)"
+ fi
+ ;;
+ Frontend_only)
+ smoltsystem=3
+ MVRELEASE="$MVRELEASE ( Frontend only)"
+ ;;
+esac
+echo $MVRELEASE > /etc/os_myth_release
+echo "systemtype=$smoltsystem" > /data/home/mythtv/.mythtv/smolt.info
+echo "remote=$Remotetype" >> /data/home/mythtv/.mythtv/smolt.info
+
diff --git a/abs/core-testing/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf b/abs/core-testing/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf
new file mode 100644
index 0000000..d49fbf6
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=shuttleVFD
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core-testing/live-installer/templates/LCD/Silverstone/LCDd.conf b/abs/core-testing/live-installer/templates/LCD/Silverstone/LCDd.conf
new file mode 100644
index 0000000..2596c25
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/Silverstone/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=imon
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core-testing/live-installer/templates/LCD/Silverstone/modules b/abs/core-testing/live-installer/templates/LCD/Silverstone/modules
new file mode 100644
index 0000000..cd576c3
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/Silverstone/modules
@@ -0,0 +1 @@
+lirc_imon #LCD
diff --git a/abs/core-testing/live-installer/templates/LCD/antec_fusion/LCDd.conf b/abs/core-testing/live-installer/templates/LCD/antec_fusion/LCDd.conf
new file mode 100644
index 0000000..2596c25
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/antec_fusion/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=imon
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircd.conf b/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircd.conf
new file mode 100644
index 0000000..ce64936
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircd.conf
@@ -0,0 +1,38 @@
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.1(default) on Thu Sep 6 09:06:50 2007
+#
+# contributed by
+#
+# brand: /tmp/out
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Antec_fusion_silver_v1
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ post_data_bits 16
+ post_data 0xFF
+ gap 131985
+ min_repeat 6
+ toggle_bit 0
+
+
+ begin codes
+ CW 0x0001
+ CCW 0x0100
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircrc b/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircrc
new file mode 100644
index 0000000..7a39704
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/antec_fusion/lircrc
@@ -0,0 +1,15 @@
+begin
+ remote = Antec_fusion_silver_v1
+ prog = mythtv
+ button = CW
+ repeat = 1
+ config = ]
+end
+
+begin
+ remote = Antec_fusion_silver_v1
+ prog = mythtv
+ button = CCW
+ repeat = 1
+ config = [
+end
diff --git a/abs/core-testing/live-installer/templates/LCD/antec_fusion/modules b/abs/core-testing/live-installer/templates/LCD/antec_fusion/modules
new file mode 100644
index 0000000..cd576c3
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/antec_fusion/modules
@@ -0,0 +1 @@
+lirc_imon #LCD
diff --git a/abs/core-testing/live-installer/templates/LCD/xosd/LCDd.conf b/abs/core-testing/live-installer/templates/LCD/xosd/LCDd.conf
new file mode 100644
index 0000000..5b37bd7
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/LCD/xosd/LCDd.conf
@@ -0,0 +1,957 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65,
+# EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior,
+# irman, joy, lb216, lcdm001, lcterm, lirc, MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, picolcd, pyramid, sed1330, sed1520, serialPOS,
+# serialVFD, sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=xosd
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# GoodBye message: each entry represents a display line; default: builtin
+#GoodBye="Thanks for using"
+#GoodBye=" LCDproc!"
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## ea65 driver for the display in AOpen XC Cube AV EA65 media barebones ##
+[ea65]
+
+# Device is fixed /dev/ttyS1
+# Width and Height are fixed 9x1
+
+# As the VFD is self luminescent we don't have a backlight
+# But we can use the backlight functions to control the front LEDs
+# Brightness 0 to 299 -> LEDs off
+# Brightness 300 to 699 -> LEDs half bright
+# Brightness 700 to 1000 -> LEDs full bright
+Brightness=500
+# OffBrightness is the the value used for the 'backlight off' state
+OffBrightness=0
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073, sed1278f_0b ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
+# is still alive. When set to a value bigger then null the character in the
+# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
+#KeepAliveDisplay=0
+
+# If you experience occasional garbage on your display you can use this
+# option as workaround. If set to a value bigger than null it forces a
+# full screen refresh <RefreshDiplay> seconds. Default: 0.
+#RefreshDisplay=5
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=480
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# The following table translates from MtxOrb key letters to logical key names.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Mini-box.com picoLCD (usblcd) driver ##
+[picolcd]
+# This is for the Mini-Box.com usblcd device that ships with the M300. It can
+# also be purchased separately but this driver has only been tested on the M300
+# setup.
+
+# KeyTimeout is the time that LCDd spends waiting for a key press before cycling
+# through other duties. Higher values make LCDd use less CPU time and make
+# key presses more detectable. Lower values make LCDd more responsive but a
+# little prone to missing key presses. 500 (.5 second) is the default and a
+# balanced value.
+KeyTimeout=500
+
+# Contrast: [default: 1000; legal: 0 - 1000]
+Contrast=1000
+
+# Light the keys? i[default: on; legal: on, off]
+Keylights=on
+
+# If Keylights is on, the you can unlight specific keys below:
+# Key0 is the directional pad. Key1 - Key5 correspond to the F1 - F5 keys.
+# There is no LED for the +/- keys. This is a handy way to indicate to users
+# which keys are disabled. [default: on; legal: on, off]
+Key0Light=on
+Key1Light=on
+Key2Light=on
+Key3Light=on
+Key4Light=on
+Key5Light=on
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002)
+# Note: Currently only tested with G321D & SP14Q002.
+Type=G321D
+
+# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
+CellSize=6x10
+
+# Select what type of connection [legal: classic, bitshaker; default: classic]
+ConnectionType=classic
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## serial POS display driver ##
+[serialPOS]
+
+# Device to use in serial modea [default: /dev/lcd]
+Device=/dev/lcd
+
+# Specifies the size of the display in characters. [default: 16x2]
+Size=16x2
+
+# Set the communication protocol to use with the POS display.
+# [default: AEDEX; legal: IEE, Epson, Emax, IBM, LogicControls, Ultimate]
+Type=AEDEX
+
+# communication baud rate with the display [default: 9600; legal: 1200, 2400, 19200, 115200]
+Speed=9600
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use, in XLFD format, as given by "xfontsel"
+Font=-*-clean-*-*-*-*-*-160-*-*-*-*-*-*
+
+
+# EOF
diff --git a/abs/core-testing/live-installer/templates/cc.orig.sh b/abs/core-testing/live-installer/templates/cc.orig.sh
new file mode 100755
index 0000000..d8fd2dc
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/cc.orig.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+# rwraithr added segment for 4 digit channels
+# make sure to set this string to
+# the corresponding remote in /etc/remoted.conf
+#$remote_name = "RC-u43c-1h";
+$remote_name = "$REMOTE_NAME";
+
+sub change_channel {
+ my($channel_digit) = @_;
+ system ("/usr/bin/irsend SEND_ONCE $remote_name $channel_digit");
+ sleep .5;
+}
+
+$channel=$ARGV[0];
+sleep 1;
+if (length($channel) > 3) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+ change_channel(substr($channel,2,1));
+ change_channel(substr($channel,3,1));
+} elsif (length($channel) > 2) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+ change_channel(substr($channel,2,1));
+} elsif (length($channel) > 1) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+} else {
+ change_channel(substr($channel,0,1));
+}
+system ("/usr/bin/irsend SEND_ONCE $remote_name SELECT");
+
+#system ("sleep 2");
+#system ("/usr/bin/ivtvctl -p 2 -d /dev/video2");
+#system ("/usr/bin/ivtvctl -p 1 -d /dev/video2");
diff --git a/abs/core-testing/live-installer/templates/cc.sh b/abs/core-testing/live-installer/templates/cc.sh
new file mode 100755
index 0000000..0cce308
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/cc.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+/usr/local/bin/cc.orig.sh $@ &
+/usr/local/bin/cc_vol.sh &
+
+
diff --git a/abs/core-testing/live-installer/templates/cc_vol.sh b/abs/core-testing/live-installer/templates/cc_vol.sh
new file mode 100755
index 0000000..819008d
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/cc_vol.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+sleep 2
+/usr/local/bin/ivtvctl -p 2 -d /dev/video2
+/usr/local/bin/ivtvctl -p 1 -d /dev/video2
+
diff --git a/abs/core-testing/live-installer/templates/change_chan.sh b/abs/core-testing/live-installer/templates/change_chan.sh
new file mode 100755
index 0000000..5ad8765
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/change_chan.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+REMOTE_NAME=SA3250
+cmd="$1"
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend SEND_ONCE $REMOTE_NAME $digit
+ sleep 0.3
+ # If things work OK with sleep 1, try this for faster channel changes:
+ # sleep 0.3
+ done
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+ esac
+# /usr/bin/fix_audio.sh &
diff --git a/abs/core-testing/live-installer/templates/cron.template b/abs/core-testing/live-installer/templates/cron.template
new file mode 100644
index 0000000..3fcea10
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/cron.template
@@ -0,0 +1,4 @@
+# <minute> <hour> <day> <month> <dow> <command>
+
+
+00 HOUR * * * /usr/bin/sudo /sbin/halt-runit >/dev/null 2>&1 \ No newline at end of file
diff --git a/abs/core-testing/live-installer/templates/etcnet/eth/ipv4address b/abs/core-testing/live-installer/templates/etcnet/eth/ipv4address
new file mode 100644
index 0000000..1df28d2
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/etcnet/eth/ipv4address
@@ -0,0 +1,2 @@
+192.168.1.158/24
+
diff --git a/abs/core-testing/live-installer/templates/etcnet/eth/ipv4route b/abs/core-testing/live-installer/templates/etcnet/eth/ipv4route
new file mode 100644
index 0000000..373a4d1
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/etcnet/eth/ipv4route
@@ -0,0 +1,2 @@
+default via 192.168.1.1
+
diff --git a/abs/core-testing/live-installer/templates/etcnet/eth/iwconfig b/abs/core-testing/live-installer/templates/etcnet/eth/iwconfig
new file mode 100644
index 0000000..b1f14e0
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/etcnet/eth/iwconfig
@@ -0,0 +1,2 @@
+essid home_lan
+#key ababababab
diff --git a/abs/core-testing/live-installer/templates/etcnet/eth/options b/abs/core-testing/live-installer/templates/etcnet/eth/options
new file mode 100644
index 0000000..929da58
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/etcnet/eth/options
@@ -0,0 +1,7 @@
+# If you want to change current interface name, edit /etc/net/iftab,
+# rename current directory and uncomment this line:
+TYPE=eth
+DISABLED=no
+BOOTPROTO=dhcp
+ONBOOT=yes
+CONFIG_WIRELESS=no
diff --git a/abs/core-testing/live-installer/templates/evrouter/MythVantage-4 b/abs/core-testing/live-installer/templates/evrouter/MythVantage-4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/evrouter/MythVantage-4
diff --git a/abs/core-testing/live-installer/templates/evrouter/MythVantage-8 b/abs/core-testing/live-installer/templates/evrouter/MythVantage-8
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/evrouter/MythVantage-8
diff --git a/abs/core-testing/live-installer/templates/evrouter/MythVantage-Full b/abs/core-testing/live-installer/templates/evrouter/MythVantage-Full
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/evrouter/MythVantage-Full
diff --git a/abs/core-testing/live-installer/templates/evrouter/MythVantage8-minipac b/abs/core-testing/live-installer/templates/evrouter/MythVantage8-minipac
new file mode 100644
index 0000000..0e3a708
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/evrouter/MythVantage8-minipac
@@ -0,0 +1,3 @@
+"Ultimarc Button/Joystick/Trackball Interface " "" none key/127 "Shell//usr/bin/restartfrontend.sh"
+"Ultimarc Button/Joystick/Trackball Interface " "" none key/18 "Shell/eject"
+
diff --git a/abs/core-testing/live-installer/templates/evrouter/MythVantage8-uhid b/abs/core-testing/live-installer/templates/evrouter/MythVantage8-uhid
new file mode 100644
index 0000000..7cb2e34
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/evrouter/MythVantage8-uhid
@@ -0,0 +1,3 @@
+"Universal Human Interface Device Universal Human Interface Device" "" none key/125 "Shell//usr/bin/restartfrontend.sh"
+"Universal Human Interface Device Universal Human Interface Device" "" none key/18 "Shell/eject"
+
diff --git a/abs/core-testing/live-installer/templates/exports.template b/abs/core-testing/live-installer/templates/exports.template
new file mode 100644
index 0000000..b946287
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/exports.template
@@ -0,0 +1,8 @@
+# /etc/exports
+#
+# See exports(5) for a description.
+
+# use exportfs -arv to reread
+/data/media REPLACEME(rw,all_squash,anonuid=1000,anongid=1000)
+/data/var/cache REPLACEME(rw,all_squash,anonuid=1000,anongid=1000)
+
diff --git a/abs/core-testing/live-installer/templates/fstab.conf.template b/abs/core-testing/live-installer/templates/fstab.conf.template
new file mode 100755
index 0000000..d27bcd9
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/fstab.conf.template
@@ -0,0 +1,16 @@
+#
+# /etc/fstab: static file system information
+#
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+
+/dev/cdrom /mnt/cd iso9660 ro,user,noauto,unhide 0 0
+/dev/dvd /mnt/dvd udf ro,user,noauto,unhide 0 0
+/dev/fd0 /mnt/fl vfat user,noauto 0 0
+
+/dev/sda1 / reiserfs defaults 0 1
+/dev/sda2 swap swap defaults 0 0
+/dev/sda3 /data reiserfs defaults 0 0
+192.168.1.6:/media /data/media nfs
+
diff --git a/abs/core-testing/live-installer/templates/mysql.service b/abs/core-testing/live-installer/templates/mysql.service
new file mode 100644
index 0000000..160450e
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/mysql.service
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+
+<service-group>
+
+ <name replace-wildcards="yes">mysql_myth on %h</name>
+
+ <service>
+ <type>_mysql._tcp</type>
+ <port>3306</port>
+ </service>
+
+</service-group>
diff --git a/abs/core-testing/live-installer/templates/mysql.txt b/abs/core-testing/live-installer/templates/mysql.txt
new file mode 100755
index 0000000..04531b5
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/mysql.txt
@@ -0,0 +1,29 @@
+DBHostName=127.0.0.1
+DBUserName=mythtv
+DBPassword=mythtv
+DBName=mythconverg
+DBType=QMYSQL3
+
+# Set the following if you want to use something other than the
+# machine's real hostname for identifying settings in the database.
+# This is useful if your hostname changes often, as otherwise
+# you'll need to reconfigure mythtv (or futz with the DB) every time.
+# TWO HOSTS MUST NOT USE THE SAME VALUE
+#
+#LocalHostName=my-unique-identifier-goes-here
+
+# If you want your frontend to be able to wake your MySQL server
+# using WakeOnLan, have a look at the following settings:
+#
+# Set the time the frontend waits (in seconds) between reconnect tries.
+# This should be the rough time your MySQL server needs for startup
+#WOLsqlReconnectWaitTime=0
+#
+#
+# This is the amount of retries to wake the MySQL server until the frontend
+# gives up
+#WOLsqlConnectRetry=5
+#
+#
+# This is the command executed to wake your MySQL server.
+#WOLsqlCommand=echo 'WOLsqlServerCommand not set'
diff --git a/abs/core-testing/live-installer/templates/ncid.conf.template b/abs/core-testing/live-installer/templates/ncid.conf.template
new file mode 100755
index 0000000..43ef490
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/ncid.conf.template
@@ -0,0 +1,51 @@
+# tcl/tk configuration file
+
+# Directory NCID uses to find the helper scripts
+set ProgDir /usr/share/ncid
+
+# default helper script
+set EXTPROG ncid-osd
+
+# Set Host to the NCID server address
+# Host defaults to 127.0.0.1
+#set Host 127.0.0.1
+set Host 192.168.1.5
+
+# The NCID port default is 3333
+set Port 3333
+
+# If the connection to the server is lost,
+# try every Delay seconds to reconnect
+# The Default: 60
+set Delay 20
+
+# If set to 1, display raw data received from the NCID server
+# If set to 0, do not display raw data received from the NCID server
+# Default: 0
+set Raw 0
+
+# If set to 1, output: date time number name
+# If set to 0, output: name number
+# Default: 0
+set All 1
+
+# If set to 1, display formatted CID, and CID log file on connect
+# If set to 0, ddo not isplay formatted CID, and CID log file on connect
+# Default: 0
+set Verbose 0
+
+# If set to 1, display information in terminal progran or external program
+# If set to 0, display information using a GUI
+# Default: 0
+set NoGUI 1
+
+# output name and number to external program
+# Default: 0
+set Callprog 1
+
+# ring number to call external program
+# Default: 0
+set CallOnRing 0
+
+# external called program
+set Program [list $ProgDir/$EXTPROG]
diff --git a/abs/core-testing/live-installer/templates/ncidd.conf.template b/abs/core-testing/live-installer/templates/ncidd.conf.template
new file mode 100644
index 0000000..daa2e79
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/ncidd.conf.template
@@ -0,0 +1,143 @@
+# ncid - Network CallerID Server Config File
+
+################################
+# Definitions and Line formats #
+################################
+
+# lines can be blank, or start with the words: send, set #
+#
+# A line is divided into words, separated by spaces
+#
+# A word is either a string of non-blank characters, everything
+# between double quotes, or an equal sign.
+#
+# SEND LINE FORMAT:
+# send DATATYPE [DATATYPE] ...
+# where DATATYPE = cidlog, cidinfo
+#
+# SET LINE FORMAT:
+# set ITEM = VALUE [ITEM = VALUE] ...
+# where ITEM = cidalias, cidlog, datalog, initcid, initstr,
+# lockfile, port, ttyclocal, ttyport, ttyspeed,
+# nomodem
+
+############################
+# Log and Info for Clients #
+############################
+
+# Send the call log to a client when connected
+# The default is not to send the call log file
+send cidlog
+
+# Send call info (LINE and RING) to a client at each ring
+# The default is not to send the call info line
+send cidinfo
+
+############################
+# NCID Communications Port #
+############################
+
+# The default TCP/IP port is 3333
+ set port = 3333
+
+#######################
+# Alias and Log Files #
+#######################
+
+# The default CID alias file: /etc/ncid/ncidd.alias
+# set cidalias = /etc/ncid/ncidd.alias
+
+# The default CID call log file: /var/log/cidcall.log
+# the log file must exist, ncidd will not create it
+# (also make the change in /etc/logrotate.d/ncidd
+# and also /etc/ncid/ncidrotate.conf)
+# set cidlog = /var/log/cidcall.log
+
+# The default tty data log file: /var/log/ciddata.log
+# the log file must exist, ncidd will not create it
+# (also make the change in /etc/logrotate.d/ncidd
+# and also /etc/ncid/ncidrotate.conf)
+# set datalog = /var/log/ciddata.log
+
+#####################
+# TTY Configuration #
+#####################
+
+# The default tty port: /dev/modem
+# set ttyport = /dev/cu.modem # Macintosh OS X
+ set ttyport = /dev/ttyS1
+
+# The default tty port speed: 19200
+# The tty speed can be one of: 38400, 19200, 9600, 4800
+# set ttyspeed = 4800 # NetCallerID port speed
+
+# Ignore tty control signals for internal modems and 3 wire serial cables
+# Disable tty control signals: ttyclocal = 1
+# Enable tty control signals: ttyclocal = 0 (default)
+# set ttyclocal = 1
+
+# The lockfile name is generated automatically
+# If tty port is /dev/modem, lockfile is: /var/lock/LCK..modem
+# set lockfile = /var/lock/LCK..ttyS0
+
+#####################
+# Modem or No Modem #
+#####################
+
+# Obtain CallerID from a CID device or a modem
+# device: nomodem = 1 (do not send AT commands)
+# modem: nomodem = 0 (default - send AT commands)
+# set nomodem = 1
+
+########################
+# Modem Initialization #
+########################
+
+# The default modem initialization is: "AT Z S0=0 E1 V1 Q0"
+# set initstr = "ATE1V1Q0"
+#
+# Alternate modem initialization string
+# set initstr = "AT&FE1V1Q0+VIP"
+
+# Addon strings to set modem for Distinctive Ring:
+# http://www.modemsite.com/56k/dring.asp
+#
+# 3Com/USR/TI chipset: ATS41=1
+# Reported Ring Codes: RING A, RING B, RING C
+# Rockwell/Conexant chipset: AT-SDR=7
+# Reported Ring Codes: RING 1, RING 2, RING 3
+# Lucent/Agere chipset: AT+VDR=1,0
+# Reported DROF/DRON messages: DRON=5 DROF=11, DRON=5 DROF=34
+#
+# Example adds 3Com DR to the default modem initialization
+# set initstr = "ATE1V1Q0S41=1"
+
+# The default for ncidd is to try two CID strings to setup
+# CallerID: "AT+VCID=1" and if that fails: "AT#CID=1".
+# set initcid = "AT#CID=1"
+#
+# Alternate CID strings to try if default does not work:
+# set initcid = "AT+FCLASS=8;+VCID=1"
+# set initcid = "AT-STE=1;+VCID=1"
+# set initcid = "AT-STE=1;#CID=1"
+
+#################
+# TiVo Settings #
+#################
+# set ttyclocal = 1 # TiVo requires CLOCAL
+# set ttyport = /dev/ttyS1 # TiVo Modem Port
+# set lockfile = /var/tmp/modemlock # needed for TiVo Modem Port
+#
+# To use a modem on the TiVo serial port
+# Tivo (stereo mini jack) ->
+# -> (stereo mini plug) TiVo serial cable (9-pin male) ->
+# -> (9-pin Female) PC modem cable (25-pin Male ->
+# -> (25-pin Female) Modem
+# if the modem has switches, disable DTR
+# Use this string to set the modem before attaching it to the TiVo:
+# AT&F0&D0&B1&W
+#
+# set ttyport = /dev/ttyS3 # TiVo Serial Port
+#
+# End TiVo Settings
+
diff --git a/abs/core-testing/live-installer/templates/real_change_chan.sh b/abs/core-testing/live-installer/templates/real_change_chan.sh
new file mode 100755
index 0000000..efeba88
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/real_change_chan.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+REMOTE_NAME=SA3250
+cmd="$1"
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend SEND_ONCE $REMOTE_NAME $digit
+ sleep 0.3
+ # If things work OK with sleep 1, try this for faster channel changes:
+ # sleep 0.3
+ done
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+ esac
+ /usr/bin/fix_audio.sh &
diff --git a/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf
new file mode 100644
index 0000000..e7c1539
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf
@@ -0,0 +1,357 @@
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre2(atiusb) on Fri Jan 2 19:09:02 2004
+#
+# contributed by
+#
+# brand: ATI Remote Wonder
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name wonder
+ bits 32
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ gap 147987
+ toggle_bit 0
+
+
+ begin codes
+ A 0x0000000014C500F0
+ B 0x0000000014C601F0
+ POWER 0x0000000014C702F0
+ TV 0x0000000014C803F0
+ DVD 0x0000000014C904F0
+ WEB 0x0000000014CA05F0
+ GUIDE 0x0000000014CB06F0
+ GRAB 0x0000000014CC07F0
+ VOL_DOWN 0x0000000014CE09F0
+ VOL_UP 0x0000000014CD08F0
+ MUTE 0x0000000014CF0AF0
+ CH_DOWN 0x0000000014D10CF0
+ CH_UP 0x0000000014D00BF0
+ A 0x0000000014C500F0
+ B 0x0000000014C601F0
+ 1 0x0000000014D20DF0
+ 2 0x0000000014D30EF0
+ 3 0x0000000014D40FF0
+ 4 0x0000000014D510F0
+ 5 0x0000000014D611F0
+ 6 0x0000000014D712F0
+ 7 0x0000000014D813F0
+ 8 0x0000000014D914F0
+ 9 0x0000000014DA15F0
+ 0 0x0000000014DC17F0
+ MENU 0x0000000014DB16F0
+ CHECK 0x0000000014DD18F0
+ C 0x0000000014DE19F0
+ D 0x0000000014E01BF0
+ UP 0x0000000014DF1AF0
+ LEFT 0x0000000014E21DF0
+ DOWN 0x0000000014E722F0
+ RIGHT 0x0000000014E41FF0
+ OK 0x0000000014E31EF0
+ REPLAY 0x0000000014E11CF0
+ FULLSCREEN 0x0000000014E520F0
+ E 0x0000000014E621F0
+ F 0x0000000014E823F0
+ REWIND 0x0000000014E924F0
+ FORWARD 0x0000000014EB26F0
+ PLAY 0x0000000014EA25F0
+ RECORD 0x0000000014EC27F0
+ STOP 0x0000000014ED28F0
+ PAUSE 0x0000000014EE29F0
+ end codes
+
+end remote
+
+
+
+# this config file was automatically generated
+# using lirc-0.7.0(atiusb) on Sat Feb 12 13:22:29 2005
+#
+# contributed by Steffen
+#
+# brand: ATI Sapphire Remote Bob II USB
+# model no. of remote control: 5000024400
+# devices being controlled by this remote: MythTV
+#
+
+begin remote
+
+name wonder II
+bits 16
+eps 30
+aeps 100
+
+one 0 0
+zero 0 0
+pre_data_bits 8
+pre_data 0x0
+post_data_bits 16
+post_data 0x0
+gap 299851
+toggle_bit 0
+
+
+begin codes
+aux1 0x023F
+aux2 0x023F
+aux3 0x023F
+aux4 0x023F
+mouse_left_btn 0x02A9
+mouse_right_btn 0x02AA
+a 0x0278
+b 0x0279
+power 0x020C
+dvd 0x0238
+tv 0x0239
+help 0x02BE
+pc 0x023F
+resize 0x02D5
+hand 0x02D0
+ati 0x028E
+vol_up 0x0210
+vol_down 0x0211
+mute 0x020D
+ch_up 0x0220
+ch_down 0x0221
+mouse_up 0x013F
+mouse_down 0x013F
+mouse_left 0x013F
+mouse_right 0x013F
+1 0x0201
+2 0x0202
+3 0x0203
+4 0x0204
+5 0x0205
+6 0x0206
+7 0x0207
+8 0x0208
+9 0x0209
+0 0x0200
+list 0x0254
+check 0x0282
+info 0x02F9
+timer 0x0296
+arrow_up 0x0258
+arrow_left 0x025A
+arrow_right 0x025B
+arrow_down 0x0259
+ok 0x025C
+c 0x017A
+d 0x027B
+play 0x022C
+e 0x027C
+f 0x027D
+rewind 0x0229
+rec 0x0237
+stop 0x0231
+pause 0x0230
+ffwd 0x0228
+end codes
+
+end remote
+
+
+# Please make this file available to others
+# by sending it to <lirc at bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0-CVS(atiusb) on Sat Jun 19 16:27:14 2004
+#
+# contributed by gLaNDix
+#
+# brand: ATI
+# model no. of remote control: 5000023600
+# devices being controlled by this remote: MythTV 0.14
+#
+# USB ID: 0bc7:0004
+#
+
+begin remote
+
+ name REMOTE_WONDER
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0x0
+ gap 227933
+ toggle_bit 0
+
+
+ begin codes
+ A 0x000000000000D500
+ B 0x000000000000D601
+ C 0x000000000000EE19
+ D 0x000000000000F01B
+ E 0x000000000000F621
+ F 0x000000000000F823
+ POWER 0x000000000000D702
+ TV 0x000000000000D803
+ DVD 0x000000000000D904
+ WEB 0x000000000000DA05
+ BOOK 0x000000000000DB06
+ HAND 0x000000000000DC07
+ MOUSE_LEFT_BTN 0x0000000000004D78
+ MOUSE_LEFTBUTTONUP 0x0000000000004E79
+ MOUSE_LEFTBUTTONDBLCLICK 0x0000000000004E79
+ MOUSE_RIGHT_BTN 0x000000000000517C
+ MOUSE_RIGHTBUTTONUP 0x000000000000527D
+ MOUSE_RIGHTBUTTONDBLCLICK 0x000000000000537E
+ MOUSE_LEFT 0x0000000000004570
+ MOUSE_RIGHT 0x0000000000004671
+ MOUSE_UP 0x0000000000004772
+ MOUSE_DOWN 0x0000000000004873
+ MOUSE_UPRIGHT 0x0000000000004A75
+ MOUSE_DOWNRIGHT 0x0000000000004B76
+ MOUSE_DOWNLEFT 0x0000000000004C77
+ MOUSE_UPLEFT 0x0000000000004974
+ VOL_UP 0x000000000000DD08
+ VOL_DOWN 0x000000000000DE09
+ MUTE 0x000000000000DF0A
+ CH_DOWN 0x000000000000E10C
+ CH_UP 0x000000000000E00B
+ 1 0x000000000000E20D
+ 2 0x000000000000E30E
+ 3 0x000000000000E40F
+ 4 0x000000000000E510
+ 5 0x000000000000E611
+ 6 0x000000000000E712
+ 7 0x000000000000E813
+ 8 0x000000000000E914
+ 9 0x000000000000EA15
+ 0 0x000000000000EC17
+ DVD_ROOTMENU 0x000000000000EB16
+ SETUP 0x000000000000ED18
+ ARROW_UP 0x000000000000EF1A
+ ARROW_RIGHT 0x000000000000F41F
+ ARROW_DOWN 0x000000000000F722
+ ARROW_LEFT 0x000000000000F21D
+ OK 0x000000000000F31E
+ MAXAMIZE 0x000000000000F520
+ TV_ON_DEMAND 0x000000000000F11C
+ BACK 0x000000000000F924
+ PLAY 0x000000000000FA25
+ NEXT 0x000000000000FB26
+ RECORD 0x000000000000FC27
+ STOP 0x000000000000FD28
+ PAUSE 0x000000000000FE29
+ end codes
+
+end remote
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre1(atiusb) on Fri Nov 28 16:56:46 2003
+#
+# contributed by Jason Piterak
+#
+# brand: ati
+# This uses the atiusb driver
+#=20
+# model no. of remote control: 5000022000
+#
+# devices being controlled by this remote:
+# MythTV PVR using knopmyth by Cecil and Dale at
+# http://mysettopbox.tv
+# Key map names are as per ATI's website:
+#http://www.ati.com/support/connectors/remotecontrol/atiremotecontrolbutton=s.html
+# Feel free to change them as you see fit :-)
+#
+# NOTE: There are 16 channels for this remote; this file only
+# supports one channel. See the GATOS project for information
+# on how to change the channel. Not tested. Unknown channel.
+#
+
+begin remote
+
+ name atiusb
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0xF000
+ gap 139891
+ toggle_bit 0
+
+
+ begin codes
+ a 0x000000000000C500
+ b 0x000000000000C601
+ power 0x000000000000C702
+ tv 0x000000000000C803
+ dvd 0x000000000000C904
+ web 0x000000000000CA05
+ media_library 0x000000000000CB06
+ drag 0x000000000000CC07
+ mouse-button_left 0x0000000000003D78
+ mouse-button_right 0x000000000000417C
+ mouse-up 0x0000000000003772
+ mouse-down 0x0000000000003873
+ mouse-left 0x0000000000003570
+ mouse-right 0x0000000000003671
+ mouse-left_up 0x0000000000003974
+ mouse-right_up 0x0000000000003A75
+ mouse-left_down 0x0000000000003C77
+ mouse-right_down 0x0000000000003B76
+ vol-up 0x000000000000CD08
+ vol-down 0x000000000000CE09
+ mute 0x000000000000CF0A
+ chan-up 0x000000000000D00B
+ chan-down 0x000000000000D10C
+ 1 0x000000000000D20D
+ 2 0x000000000000D30E
+ 3 0x000000000000D40F
+ 4 0x000000000000D510
+ 5 0x000000000000D611
+ 6 0x000000000000D712
+ 7 0x000000000000D813
+ 8 0x000000000000D914
+ 9 0x000000000000DA15
+ 0 0x000000000000DC17
+ dvd-root_menu 0x000000000000DB16
+ launch_setup 0x000000000000DD18
+ c 0x000000000000DE19
+ d 0x000000000000E01B
+ tv_on_demand 0x000000000000E11C
+ max_window 0x000000000000E520
+ cursor-up 0x000000000000DF1A
+ cursor-down 0x000000000000E722
+ cursor-left 0x000000000000E21D
+ cursor-right 0x000000000000E41F
+ ok 0x000000000000E31E
+ e 0x000000000000E621
+ f 0x000000000000E823
+ rewind 0x000000000000E924
+ play 0x000000000000EA25
+ fast_forward 0x000000000000EB26
+ record 0x000000000000EC27
+ stop 0x000000000000ED28
+ pause 0x000000000000EE29
+ end codes
+
+end remote
diff --git a/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt
new file mode 100644
index 0000000..80eec07
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt
@@ -0,0 +1,922 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the ATI-Wonder Remote
+# using lirc_atiusb driver
+#
+
+begin
+prog = mythtv
+button = a
+config = E
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = A
+config = E
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = b
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = B
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = B
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = stop
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ffwd
+config = Right
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = FORWARD
+config = Right
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = rewind
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = REWIND
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = pause
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = play
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = mute
+config = |
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = MUTE
+config = |
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = vol_down
+config = F10
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+config = F10
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = vol_up
+config = F11
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = f
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = F
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = e
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = E
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ch_up
+config = Up
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ch_down
+config = Down
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ok
+config = Enter
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = OK
+config = Enter
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = rec
+config = R
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = R
+repeat = 5
+end
+
+
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the ATI-Wonder Remote
+# using lirc_atiusb driver
+#
+
+begin
+#Jumppoint for Program Guide created in Mythweb
+ prog = mythtv
+ button = TV
+ config = !
+end
+
+begin
+#Jumppoint for DVD playback created in Mythweb
+ prog = mythtv
+ button = DVD
+ config = @
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythWeater created in Mythweb
+ button = WEB
+ config = #
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythVideo created in Mythweb
+ button = BOOK
+ config = $
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythWeater created in Mythweb
+ button = HAND
+ config = %
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_UP
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_DOWN
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_LEFT
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_RIGHT
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_RIGHT_BTN
+ config = Esc
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = MOUSE_LEFT_BTN
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = POWER
+ config = Esc
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = ARROW_UP
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = ARROW_DOWN
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = ARROW_LEFT
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = ARROW_RIGHT
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = D
+ config = Esc
+end
+
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+begin
+ prog = mythtv
+ button = VOL_DOWN
+ repeat = 3
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = VOL_UP
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = MUTE
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = DVD_ROOTMENU
+ config = M
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = SETUP
+ config = Return
+end
+
+
+begin
+ prog = mythtv
+ button = A
+ config = S
+end
+
+begin
+ prog = mythtv
+ button = B
+ config = I
+end
+
+begin
+ prog = mythtv
+ button = C
+ config = T
+end
+
+begin
+prog = mythtv
+# Change focus for PiP (to change channel in the other window)
+button = MAXAMIZE
+config = B
+end
+
+begin
+prog = mythtv
+# Toggle PiP on/off
+button = TV_ON_DEMAND
+config = V
+end
+
+begin
+ prog = mythtv
+ button = BACK
+ config = <
+end
+
+begin
+ prog = mythtv
+ button = NEXT
+ config = >
+end
+
+begin
+ prog = mythtv
+ button = BACK
+ config = Left
+end
+
+
+begin
+ prog = mythtv
+ button = NEXT
+ config = Right
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = R
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = P
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+#Page Up/Down
+begin
+prog = mythtv
+button = E
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = F
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = E
+# Use for backwards commercial skip
+config = Q
+end
+
+begin
+prog = mythtv
+button = F
+# Use for forward commercial skip
+config = Z
+end
+
+#Mplayer
+
+begin
+prog = mplayer
+button = PLAY
+config = pause
+end
+
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = D
+config = quit
+end
+
+begin
+prog = mplayer
+button = MOUSE_RIGHT_BTN
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = E
+repeat = 6
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = F
+repeat = 6
+config = seek 10
+end
+
+begin
+prog = mplayer
+button = BACK
+repeat = 6
+config = seek -70
+end
+
+begin
+prog = mplayer
+button = NEXT
+repeat = 6
+config = seek 70
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 6
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 6
+config = volume 1
+end
+
+#Xine
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = PAUSE
+config = PAUSE
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = POWER
+config = Quit
+end
+
+begin
+prog = xine
+button = D
+config = quit
+end
+
+begin
+prog = xine
+button = MOUSE_RIGHT_BTN
+config = quit
+end
+
+begin
+prog = xine
+button = ARROW_UP
+repeat = 4
+config = EventUp
+end
+
+begin
+prog = xine
+button = ARROW_DOWN
+repeat = 4
+config = EventDown
+end
+
+begin
+prog = xine
+button = ARROW_LEFT
+repeat = 4
+config = EventLeft
+end
+
+begin
+prog = xine
+button = ARROW_RIGHT
+repeat = 4
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 0
+config = EventSelect
+end
+
+begin
+prog = xine
+button = MOUSE_UP
+repeat = 4
+config = EventUp
+end
+
+begin
+prog = xine
+button = MOUSE_DOWN
+repeat = 4
+config = EventDown
+end
+
+begin
+prog = xine
+button = MOUSE_LEFT
+repeat = 4
+config = EventLeft
+end
+
+begin
+prog = xine
+button = MOUSE_RIGHT
+repeat = 4
+config = EventRight
+end
+
+begin
+prog = xine
+button = MOUSE_LEFT_BTN
+repeat = 0
+config = EventSelect
+end
+
+begin
+prog = xine
+button = DVD_ROOTMENU
+repeat = 0
+config = Menu
+end
+
+#vol down
+begin
+prog = xine
+button = VOL_DOWN
+repeat = 1
+config = Volume-
+end
+
+#vol up
+begin
+prog = xine
+button = VOL_UP
+repeat = 1
+config = Volume+
+end
+
+begin
+prog = xine
+button = TV_ON_DEMAND
+repeat = 1
+config = ZoomIn
+end
+
+begin
+prog = xine
+button = MAXAMIZE
+repeat = 1
+config = ZoomOut
+end
+
+#skip chapter forward
+begin
+prog = xine
+button = NEXT
+repeat = 1
+config = EventNext
+end
+
+#skip chapter backward
+begin
+prog = xine
+button = BACK
+repeat = 1
+config = EventPrior
+end
+
+begin
+prog = xine
+button = F
+repeat = 2
+config = SeekRelative+45
+end
+
+begin
+prog = xine
+button = E
+repeat = 2
+config = SeekRelative-45
+end
+
diff --git a/abs/core-testing/live-installer/templates/remotes/ATI_wonder/preview.jpg b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/preview.jpg
new file mode 100644
index 0000000..351a111
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/ATI_wonder/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS
new file mode 100644
index 0000000..b76d32c
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS
@@ -0,0 +1,115 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.2(streamzap) on Mon Dec 5 08:45:02 2005
+#
+# contributed by
+#
+# brand: RS_LD_120-MX500
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name RS_LD
+ bits 15
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 384 1920
+ zero 384 896
+ ptrail 384
+ gap 70400
+ min_repeat 2
+ toggle_bit 0
+
+
+ begin codes
+ RESET 0x19FD
+ TIME 0X1902
+ BLANK 0X1B02
+ PICTURE 0X1882
+ ASPECT 0X1A82
+ BROWSE 0X1982
+ DELETE 0X1B82
+ CARD 0X1842
+ CARD_SOURCE 0X1A42
+ SPARE1 0X1942
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircrc b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircrc
new file mode 100644
index 0000000..5e668b5
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/lircrc
@@ -0,0 +1,832 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 4
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+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
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = i
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/MX-500-jams/preview.jpg b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/preview.jpg
new file mode 100644
index 0000000..38857f9
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MX-500-jams/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircd.conf b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircd.conf
new file mode 100644
index 0000000..b76d32c
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircd.conf
@@ -0,0 +1,115 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.2(streamzap) on Mon Dec 5 08:45:02 2005
+#
+# contributed by
+#
+# brand: RS_LD_120-MX500
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name RS_LD
+ bits 15
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 384 1920
+ zero 384 896
+ ptrail 384
+ gap 70400
+ min_repeat 2
+ toggle_bit 0
+
+
+ begin codes
+ RESET 0x19FD
+ TIME 0X1902
+ BLANK 0X1B02
+ PICTURE 0X1882
+ ASPECT 0X1A82
+ BROWSE 0X1982
+ DELETE 0X1B82
+ CARD 0X1842
+ CARD_SOURCE 0X1A42
+ SPARE1 0X1942
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircrc b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircrc
new file mode 100755
index 0000000..2663c63
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/lircrc
@@ -0,0 +1,857 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 5
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+repeat = 5
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+repeat = 5
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+repeat = 5
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+repeat = 5
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = S
+repeat = 5
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/MythVantage-one/preview.jpg b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/preview.jpg
new file mode 100644
index 0000000..e2af610
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/MythVantage-one/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf
new file mode 100644
index 0000000..f8175f3
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf
@@ -0,0 +1,87 @@
+# this config file was generated
+# using lirc-0.7.0pre2(hauppauge) on Thu Jan 1 00:35:50 2004
+#
+# contributed by Jarod Wilson <jcw@wilsonet.com>
+#------------------------------------------------------------------------------
+#
+# filename: RadioShack_15-2116-vcr0081.lirc
+# encoding: RC-5
+# brand: RadioShack Universal (and others)
+# model: 15-2116, set as VCR type 0081
+# supported devices: all
+#
+# note: requires quite a bit of key reassignment w/keymover and EFCs...
+# see http://wilsonet.com/mythtv/rs15-2116.html for HOWTO
+#
+#------------------------------------------------------------------------------
+
+begin remote
+
+ name rs15-2116-vcr0081
+ bits 11
+ flags RC5|CONST_LENGTH
+ eps 20
+ aeps 0
+ header 0 0
+ one 889 889
+ zero 889 889
+ plead 889
+ ptrail 0
+ foot 0 0
+ repeat 0 0
+ pre_data_bits 2
+ pre_data 0x02
+ post_data_bits 0
+ post_data 0x0
+ pre 0 0
+ post 0 0
+ gap 113792
+ toggle_bit 2
+ frequency 36000
+ duty_cycle 50
+
+ begin codes
+ 0 0x0000000000000140
+ 1 0x0000000000000141
+ 2 0x0000000000000142
+ 3 0x0000000000000143
+ 4 0x0000000000000144
+ 5 0x0000000000000145
+ 6 0x0000000000000146
+ 7 0x0000000000000147
+ 8 0x0000000000000148
+ 9 0x0000000000000149
+ INFO 0x000000000000014a
+ SELECT 0x000000000000014b
+ POWER 0x000000000000014c
+ MUTE 0x000000000000014d
+ MOVE 0x000000000000014e
+ VOL+ 0x0000000000000150
+ VOL- 0x0000000000000151
+ RIGHT 0x000000000000015a
+ LEFT 0x000000000000015b
+ ENTER 0x000000000000015c
+ MENU 0x000000000000015d
+ CH+ 0x0000000000000160
+ CH- 0x0000000000000161
+ PIP 0x0000000000000162
+ SWAP 0x0000000000000163
+ SLEEP 0x0000000000000166
+ FREEZE 0x0000000000000168
+ PAUSE 0x0000000000000169
+ SKIP 0x000000000000016a
+ EXIT 0x0000000000000171
+ REW 0x0000000000000172
+ REPLAY 0x0000000000000173
+ FFWD 0x0000000000000174
+ PLAY 0x0000000000000175
+ STOP 0x0000000000000176
+ REC 0x0000000000000177
+ SKIP 0x0000000000000178
+ +100 0x0000000000000179
+ LAST 0x000000000000017b
+ GUIDE 0x000000000000017c
+ TV/VIDEO 0x000000000000017e
+ end codes
+
+end remote
diff --git a/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs
new file mode 100644
index 0000000..91c0de5
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs
@@ -0,0 +1,539 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the RadioShack 15-2116, VCR type 0081
+# using Hauppauge IR receiver
+#
+# By Jarod Wilson, 2003/12/31
+# Amalgamated from Harry O's
+# .lircrc, the mythtv.org docs, and
+# a few touches of my own. :)
+#
+
+# Channel Up
+begin
+prog = mythtv
+button = CH+
+repeat = 4
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH-
+repeat = 4
+config = Down
+end
+
+# OK/Select
+begin
+prog = mythtv
+button = SELECT
+repeat = 4
+config = Return
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+repeat = 4
+config = Space
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+repeat = 4
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = EXIT
+repeat = 4
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = mythtv
+button = POWER
+repeat = 4
+config = Esc
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+repeat = 4
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+repeat = 4
+config = |
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = REW
+repeat = 4
+config = Left
+end
+
+begin
+prog = mythtv
+button = LEFT
+repeat = 4
+config = Left
+end
+
+# Fast forward (30 sec default)
+begin
+prog = mythtv
+button = FFWD
+repeat = 4
+config = Right
+end
+
+begin
+prog = mythtv
+button = RIGHT
+repeat = 4
+config = Right
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = FREEZE
+repeat = 4
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = MOVE
+repeat = 4
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = REC
+repeat = 4
+config = R
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = GUIDE
+repeat = 4
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = MENU
+repeat = 4
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = INFO
+repeat = 4
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = +100
+repeat = 4
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button = SLEEP
+repeat = 4
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button = ENTER
+repeat = 4
+config = Z
+end
+
+# Change TV card input
+begin
+prog = mythtv
+button = TV/VIDEO
+repeat = 4
+config = C
+end
+
+# Toggle Picture-In-Picture
+begin
+prog = mythtv
+button = PIP
+repeat = 4
+config = V
+end
+
+# Swap PIP
+begin
+prog = mythtv
+button = SWAP
+repeat = 4
+config = N
+end
+
+# Cycle through channel history
+begin
+prog = mythtv
+button = LAST
+repeat = 4
+config = H
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+repeat = 4
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+repeat = 4
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+repeat = 4
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+repeat = 4
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+repeat = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+repeat = 4
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+repeat = 4
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+repeat = 4
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+repeat = 4
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+repeat = 4
+config = 9
+end
+
+### MPlayer commands
+
+begin
+prog = mplayer
+button = MENU
+repeat = 4
+config = osd
+end
+
+begin
+prog = mplayer
+button = PAUSE
+repeat = 4
+config = pause
+end
+
+begin
+prog = mplayer
+button = PLAY
+repeat = 4
+config = seek +1
+end
+
+begin
+prog = mplayer
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = mplayer
+button = REW
+repeat = 4
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = LEFT
+repeat = 4
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = FFWD
+repeat = 4
+config = seek +30
+end
+
+begin
+prog = mplayer
+button = RIGHT
+repeat = 4
+config = seek +30
+end
+
+begin
+prog = mplayer
+button = EXIT
+repeat = 4
+config = quit
+end
+
+begin
+prog = mplayer
+button = FREEZE
+repeat = 4
+config = seek +1200
+end
+
+begin
+prog = mplayer
+button = MOVE
+repeat = 4
+config = seek -1200
+end
+
+begin
+prog = mplayer
+button = +100
+repeat = 4
+config = vo_fullscreen
+end
+
+### Xine commands
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = CH+
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH-
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = SELECT
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = GUIDE
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = FFWD
+repeat = 3
+config = SeekRelative+30
+end
+
+begin
+prog = xine
+button = REW
+repeat = 3
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = VOL+
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = FREEZE
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = LAST
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = INFO
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = ENTER
+repeat = 3
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = SLEEP
+repeat = 3
+config = SpeedSlower
+end
diff --git a/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg
new file mode 100644
index 0000000..d465839
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap b/abs/core-testing/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap
new file mode 100644
index 0000000..8e453b9
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap
@@ -0,0 +1,69 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/gr8zap/lircrc b/abs/core-testing/live-installer/templates/remotes/gr8zap/lircrc
new file mode 100644
index 0000000..6f86bfe
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/gr8zap/lircrc
@@ -0,0 +1,472 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'
+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
+
+begin
+ prog = mythtv
+ button = POWER
+ config = Esc
+end
+
+# ???
+begin
+ prog = mythtv
+ button = MUTE
+ config = F9
+end
+
+begin
+ prog = mythtv
+ button = CH_UP
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = VOL_UP
+ repeat = 3
+ config = ]
+end
+
+begin
+ prog = mythtv
+ button = CH_DOWN
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = VOL_DOWN
+ repeat = 3
+ config = [
+end
+
+begin
+ prog = mythtv
+ button = UP
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = LEFT
+# navigates, or skips back during playback or live tv.
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = DOWN
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = MENU
+ config = m
+end
+
+begin
+ prog = mythtv
+ button = EXIT
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = PLAY
+ config = l
+end
+
+begin
+ prog = mythtv
+ button = PAUSE
+ config = p
+end
+
+begin
+ prog = mythtv
+ button = STOP
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ # skip backward
+ button = |<<
+ config = PgUp
+end
+
+begin
+ prog = mythtv
+ # skip forward
+ button = >>|
+ config = PgDown
+end
+
+begin
+ prog = mythtv
+ button = RECORD
+ config = r
+end
+
+begin
+ prog = mythtv
+ # rewind
+ button = <<
+ config = <
+end
+
+begin
+ prog = mythtv
+ # fast forward
+ button = >>
+ config = >
+end
+
+begin
+ prog = mythtv
+ button = RED
+ # Delete
+ config = z
+end
+
+begin
+ prog = mythtv
+ button = GREEN
+ # Info
+ config = i
+end
+
+begin
+ prog = mythtv
+ button = YELLOW
+ # change aspect ratio
+ config = w
+end
+
+begin
+ prog = mythtv
+ button = BLUE
+ config = Tab
+end
+
+# MPLAYER
+begin
+ prog = mplayer
+ button = POWER
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = MUTE
+ config = mute
+end
+
+begin
+ prog = mplayer
+ button = VOL_UP
+ repeat = 3
+ config = volume +1
+end
+
+begin
+ prog = mplayer
+ button = VOL_DOWN
+ repeat = 3
+ config = volume -1
+end
+
+begin
+ prog = mplayer
+ button = UP
+ repeat = 3
+ config = seek +10
+end
+
+begin
+ prog = mplayer
+ button = LEFT
+# navigates, or skips back during playback or live tv.
+ config = seek -30
+end
+
+begin
+ prog = mplayer
+ button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+ config = seek +60
+end
+
+begin
+ prog = mplayer
+ button = DOWN
+ repeat = 3
+ config = seek -10
+end
+
+begin
+ prog = mplayer
+ button = EXIT
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = play
+ config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = STOP
+ config = quit
+end
+
+begin
+ prog = mplayer
+ # skip backward
+ button = |<<
+ config = seek -600
+end
+
+begin
+ prog = mplayer
+ # skip forward
+ button = >>|
+ config = seek +600
+end
+
+begin
+ prog = mplayer
+ # slow forward
+ button = <<
+ config = speed_mult 0.5
+end
+
+begin
+ prog = mplayer
+ # fast forward
+ button = >>
+ config = speed_mult 2.0
+end
+
+### Xine lirc setup By AnDy!
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = UP
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = DOWN
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = >>
+repeat = 3
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = <<
+repeat = 3
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DOWN
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = >>|
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = |<<
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = GREEN
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 3
+config = Quit
+end
diff --git a/abs/core-testing/live-installer/templates/remotes/gr8zap/preview.jpg b/abs/core-testing/live-installer/templates/remotes/gr8zap/preview.jpg
new file mode 100644
index 0000000..4d1a5fe
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/gr8zap/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge b/abs/core-testing/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge
new file mode 100644
index 0000000..4987807
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge
@@ -0,0 +1,274 @@
+#
+# 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
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre4(serial) on Sun Oct 2 00:24:32 2005
+#
+# contributed by anton|ganthaler.at and juergen.wilhelm|aon.at
+# members of linux user group Vorarlberg www.lugv.at
+#
+# for ir remote controler from Hauppauge WinTV Nexus-S
+# most of the keys are supported
+#
+# brand: Hauppauge
+# model no. of remote control: WinTV Nexus-S
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Hauppauge_WinTV_Nexus-S
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 944 828
+ zero 944 828
+ plead 980
+ gap 113932
+ min_repeat 1
+ toggle_bit 2
+
+
+ begin codes
+ Up 0x0000000000001794
+ Down 0x0000000000001795
+ Left 0x0000000000001796
+ Right 0x0000000000001797
+ Power 0x00000000000017BD
+ Ok 0x00000000000017A5
+ Menu 0x000000000000178D
+ Back 0x000000000000179F
+ Red 0x000000000000178B
+ Green 0x00000000000017AE
+ Yellow 0x00000000000017B8
+ Blue 0x00000000000017A9
+ 0 0x0000000000001780
+ 1 0x0000000000001781
+ 2 0x0000000000001782
+ 3 0x0000000000001783
+ 4 0x0000000000001784
+ 5 0x0000000000001785
+ 6 0x0000000000001786
+ 7 0x0000000000001787
+ 8 0x0000000000001788
+ 9 0x0000000000001789
+ Play 0x00000000000017B5
+ Pause 0x00000000000017B0
+ Stop 0x00000000000017B6
+ Record 0x00000000000017B7
+ FastFwd 0x00000000000017B4
+ FastRwd 0x00000000000017B2
+ Channel+ 0x00000000000017A0
+ Channel- 0x00000000000017A1
+ Volume+ 0x0000000000001790
+ Volume- 0x0000000000001791
+ Mute 0x000000000000178F
+ Timers 0x000000000000178A
+ Recordings 0x000000000000178E
+ Back 0x000000000000179F
+ Record 0x00000000000017B7
+ Pause 0x00000000000017B0
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge b/abs/core-testing/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge
new file mode 100644
index 0000000..d0f36e8
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge
@@ -0,0 +1,33 @@
+#
+# lircmd config file
+#
+
+PROTOCOL IntelliMouse
+
+# ACCELERATOR start max multiplier
+
+ACCELERATOR 2 30 5
+
+ACTIVATE * RESERVED
+
+MOVE_N * 2
+MOVE_NE * 3
+MOVE_E * 6
+MOVE_SE * 9
+MOVE_S * 8
+MOVE_SW * 7
+MOVE_W * 4
+MOVE_NW * 1
+MOVE_IN * CH+
+MOVE_OUT * CH-
+
+BUTTON1_TOGGLE * 5
+BUTTON1_TOGGLE * RADIO
+BUTTON2_TOGGLE * VOL+
+BUTTON3_TOGGLE * SOURCE
+
+BUTTON1_CLICK * TV
+BUTTON1_CLICK * VOL-
+BUTTON3_CLICK * MUTE
+
+# BUTTONx_CLICK, BUTTONx_UP, BUTTONx_DOWN are also possible
diff --git a/abs/core-testing/live-installer/templates/remotes/hauppauge/preview.jpg b/abs/core-testing/live-installer/templates/remotes/hauppauge/preview.jpg
new file mode 100644
index 0000000..a40a1e8
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/hauppauge/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/imon-pad/lircd.conf b/abs/core-testing/live-installer/templates/remotes/imon-pad/lircd.conf
new file mode 100644
index 0000000..97bbf4c
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/imon-pad/lircd.conf
@@ -0,0 +1,88 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.0(imon_pad) on Mon Jan 23 20:22:11 2006
+#
+# contributed by M.Brakemeier
+#
+# brand: SoundGraph
+# model no. of remote control: iMON-PAD
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name iMON-PAD
+ bits 32
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ gap 235965
+ min_repeat 1
+ toggle_bit 0
+
+ begin codes
+ AppExit 0x288195B7
+ Power 0x289115B7
+ Record 0x298115B7
+ Play 0x2A8115B7
+ Open 0x29B1d5B7
+ Rewind 0x2A8195B7
+ Pause 0x2A9115B7
+ FastForward 0x2B8115B7
+ PrevChapter 0x2B9115B7
+ Stop 0x2B9715B7
+ NextChapter 0x298195B7
+ Esc 0x2BB715B7
+ Eject 0x299395B7
+ AppLauncher 0x29B715B7
+ MultiMon 0x2AB195B7
+ TaskSwitcher 0x2A9395B7
+ Mute 0x2B9595B7
+ Vol+ 0x28A395B7
+ Vol- 0x28A595B7
+ Ch+ 0x289395B7
+ Ch- 0x288795B7
+ Timer 0x2B8395B7
+ 1 0x28B595B7
+ 2 0x2BB195B7
+ 3 0x28B195B7
+ 4 0x2A8595B7
+ 5 0x299595B7
+ 6 0x2AA595B7
+ 7 0x2B9395B7
+ 8 0x2A8515B7
+ 9 0x2AA115B7
+ 0 0x2BA595B7
+ ShiftTab 0x28B515B7
+ Tab 0x29A115B7
+ Red 0x2B8515B7 # MyMovie
+ Green 0x299195B7 # MyMusic
+ Blue 0x2BA115B7 # MyPhoto
+ Yellow 0x28A515B7 # MyTV
+ Bookmark 0x288515B7
+ Thumbnail 0x2AB715B7
+ AspectRatio 0x29A595B7
+ FullScreen 0x2AA395B7
+ Purple 0x29A295B7 # MyDVD
+ Menu 0x2BA385B7
+ Caption 0x298595B7
+ Language 0x2B8595B7
+ MouseKeyboard 0x299115B7
+ SelectSpace 0x2A9315B7
+ MouseMenu 0x28B715B7
+ MouseRightClick 0x688481B7
+ Enter 0x28A195B7
+ MouseLeftClick 0x688301B7
+ WindowsKey 0x2B8195B7
+ Backspace 0x28A115B7
+ Mouse_N 0x690281B7
+ Mouse_S 0x688291B7
+ Mouse_W 0x6A8281B7
+ Mouse_E 0x688A81B7
+ end codes
+
+end remote
diff --git a/abs/core-testing/live-installer/templates/remotes/imon-pad/lircrc b/abs/core-testing/live-installer/templates/remotes/imon-pad/lircrc
new file mode 100644
index 0000000..3ad34d8
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/imon-pad/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-testing/live-installer/templates/remotes/imon-pad/preview.jpg b/abs/core-testing/live-installer/templates/remotes/imon-pad/preview.jpg
new file mode 100644
index 0000000..47368c5
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/imon-pad/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/mceusb/lircd-mceusb.conf b/abs/core-testing/live-installer/templates/remotes/mceusb/lircd-mceusb.conf
new file mode 100644
index 0000000..ec3b73e
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/mceusb/lircd-mceusb.conf
@@ -0,0 +1,88 @@
+#
+# RC-6 config file
+#
+# source: http://home.hccnet.nl/m.majoor/projects__remote_control.htm
+# http://home.hccnet.nl/m.majoor/pronto.pdf
+#
+# used by: Philips
+#
+#########
+#
+# Philips Media Center Edition remote control
+# For use with the USB MCE ir receiver
+#
+# Dan Conti dconti|acm.wwu.edu
+#
+# Radio, Print, RecTV are only available on the HP Media Center remote control
+#
+
+begin remote
+
+ name mceusb
+ bits 16
+ flags RC6|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 2667 889
+ one 444 444
+ zero 444 444
+ pre_data_bits 21
+ pre_data 0x37FF0
+ gap 105000
+ toggle_bit 22
+ rc6_mask 0x100000000
+
+
+ begin codes
+
+# starts at af
+ Radio 0x00007baf
+ Print 0x00007bb1
+ Videos 0x00007bb5
+ Pictures 0x00007bb6
+ RecTV 0x00007bb7
+ Music 0x00007bb8
+ TV 0x00007bb9
+# no ba - d8
+ Guide 0x00007bd9
+ LiveTV 0x00007bda
+ DVD 0x00007bdb
+ Back 0x00007bdc
+ OK 0x00007bdd
+ Right 0x00007bde
+ Left 0x00007bdf
+ Down 0x00007be0
+ Up 0x00007be1
+# no e2,e3
+ Replay 0x00007be4
+ Skip 0x00007be5
+ Stop 0x00007be6
+ Pause 0x00007be7
+ Record 0x00007be8
+ Play 0x00007be9
+ Rewind 0x00007bea
+ Forward 0x00007beb
+ ChanDown 0x00007bec
+ ChanUp 0x00007bed
+ VolDown 0x00007bee
+ VolUp 0x00007bef
+ More 0x00007bf0
+ Mute 0x00007bf1
+ Home 0x00007bf2
+ Power 0x00007bf3
+ Enter 0x00007bf4
+ Clear 0x00007bf5
+ Nine 0x00007bf6
+ Eight 0x00007bf7
+ Seven 0x00007bf8
+ Six 0x00007bf9
+ Five 0x00007bfa
+ Four 0x00007bfb
+ Three 0x00007bfc
+ Two 0x00007bfd
+ One 0x00007bfe
+ Zero 0x00007bff
+ end codes
+
+end remote
diff --git a/abs/core-testing/live-installer/templates/remotes/mceusb/lircrc-mceusb b/abs/core-testing/live-installer/templates/remotes/mceusb/lircrc-mceusb
new file mode 100644
index 0000000..3738bfa
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/mceusb/lircrc-mceusb
@@ -0,0 +1,393 @@
+# lircrc.mceusb
+
+###################
+#
+# MythTV
+#
+###################
+begin
+ prog = mythtv
+ button = One
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = Two
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = Three
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = Four
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = Five
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = Six
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = Seven
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = Eight
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = Nine
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = Zero
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = Back
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = Guide
+ config = M
+end
+
+begin
+ prog = mythtv
+ button = More
+ config = I
+end
+
+begin
+ prog = mythtv
+ button = VolDown
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = VolUp
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = Up
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = Down
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = Left
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Right
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = Play
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = Mute
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = Rewind
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Forward
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = Record
+ config = R
+end
+
+begin
+ prog = mythtv
+ button = Stop
+ config = O
+end
+
+begin
+ prog = mythtv
+ button = Pause
+ config = P
+end
+
+# Use for backwards commercial skip
+begin
+ prog = mythtv
+ button = Replay
+ config = Q
+end
+
+# Use for forward commercial skip
+begin
+ prog = mythtv
+ button = Skip
+ config = Z
+end
+
+
+###################
+#
+# MPlayer
+#
+###################
+begin
+ prog = mplayer
+ button = Stop
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = Play
+ config = seek +1
+end
+
+begin
+ prog = mplayer
+ button = More
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = Replay
+ config = seek -10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Skip
+ config = seek +10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Rewind
+ config = seek -30
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Forward
+ config = seek +30
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Pause
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = VolUp
+ config = volume +1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = VolDown
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Mute
+ config = mute
+end
+
+###################
+#
+# Xine
+#
+###################
+# Xine lirc setup
+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
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Home
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = Forward
+repeat = 3
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = Rewind
+repeat = 3
+config = SpeedSlower
+end
+
+begin
+prog = xine
+button = VolUp
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolDown
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = ChanUp
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = ChanDown
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = More
+repeat = 3
+config = OSDStreamInfos
+end
+
diff --git a/abs/core-testing/live-installer/templates/remotes/mceusb/preview.jpg b/abs/core-testing/live-installer/templates/remotes/mceusb/preview.jpg
new file mode 100644
index 0000000..0aa6a4a
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/mceusb/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/no_remote/preview.jpg b/abs/core-testing/live-installer/templates/remotes/no_remote/preview.jpg
new file mode 100644
index 0000000..1d887dd
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/no_remote/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/receiver_usb.id b/abs/core-testing/live-installer/templates/remotes/receiver_usb.id
new file mode 100644
index 0000000..b99f91b
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/receiver_usb.id
@@ -0,0 +1,4 @@
+0bc7:0005 snapstream_firefly X10 Wireless Technology, Inc.
+0e9c:0000 streamzap Streamzap, Inc. Streamzap Remote Control
+0471:0815 mceusb Microsoft usb receiver_transmitter rc6
+
diff --git a/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf
new file mode 100644
index 0000000..288bb51
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf
@@ -0,0 +1,127 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0(any) on Fri Mar 11 08:51:45 2005
+#
+# contributed by
+#
+# brand: Snapstream Firefly Remote
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+name Snapstream_Firefly
+bits 40
+eps 30
+aeps 100
+
+one 0 0
+zero 0 0
+gap 219964
+toggle_bit 0
+
+
+begin codes
+MAXI 0x0000001481AC0000
+MAXI 0x00000014012C0000
+CLOSE 0x00000014D7020000
+CLOSE 0x0000001457820000
+1 0x00000014628D0000
+1 0x00000014E20D0000
+2 0x00000014E30E0000
+2 0x00000014638E0000
+3 0x00000014648F0000
+3 0x00000014E40F0000
+4 0x00000014E5100000
+4 0x0000001465900000
+5 0x0000001466910000
+5 0x00000014E6110000
+6 0x00000014E7120000
+6 0x0000001467920000
+7 0x0000001468930000
+7 0x00000014E8130000
+8 0x00000014E9140000
+8 0x0000001469940000
+9 0x000000146A950000
+9 0x00000014EA150000
+0 0x00000014EC170000
+0 0x000000146C970000
+BACK 0x000000146B960000
+BACK 0x00000014EB160000
+ENT 0x00000014ED180000
+ENT 0x000000146D980000
+VOL+ 0x000000145E890000
+VOL+ 0x00000014DE090000
+VOL- 0x000000145D880000
+VOL- 0x00000014DD080000
+MUTE 0x000000145F8A0000
+MUTE 0x00000014DF0A0000
+FIREFLY 0x0000001455800000
+FIREFLY 0x00000014D5000000
+CH+ 0x00000014608B0000
+CH+ 0x00000014E00B0000
+CH- 0x00000014618C0000
+CH- 0x00000014E10C0000
+INFO 0x0000001483AE0000
+INFO 0x00000014032E0000
+OPTION 0x0000001484AF0000
+OPTION 0x00000014042F0000
+UP 0x000000146F9A0000
+UP 0x00000014EF1A0000
+LEFT 0x00000014729D0000
+LEFT 0x00000014F21D0000
+DOWN 0x0000001477A20000
+DOWN 0x00000014F7220000
+RIGHT 0x00000014749F0000
+RIGHT 0x00000014F41F0000
+OK 0x00000014739E0000
+OK 0x00000014F31E0000
+MENU 0x00000014719C0000
+MENU 0x00000014F11C0000
+EXIT 0x0000001475A00000
+EXIT 0x00000014F5200000
+REC 0x00000014FC270000
+REC 0x000000147CA70000
+PLAY 0x00000014FA250000
+PLAY 0x000000147AA50000
+STOP 0x00000014FD280000
+STOP 0x000000147DA80000
+REW 0x00000014F9240000
+REW 0x0000001479A40000
+FWD 0x00000014FB260000
+FWD 0x000000147BA60000
+PREV 0x00000014002B0000
+PREV 0x0000001480AB0000
+PAUSE 0x00000014FE290000
+PAUSE 0x000000147EA90000
+NEXT 0x00000014FF2A0000
+NEXT 0x000000147FAA0000
+MUSIC 0x00000014DB060000
+MUSIC 0x000000145B860000
+PHOTOS 0x00000014DA050000
+PHOTOS 0x000000145A850000
+DVD 0x00000014D9040000
+DVD 0x0000001459840000
+TV 0x00000014D8030000
+TV 0x0000001458830000
+VIDEO 0x00000014DC070000
+VIDEO 0x000000145C870000
+HELP 0x00000014D6010000
+HELP 0x0000001456810000
+MOUSE 0x00000014022D0000
+MOUSE 0x0000001482AD0000
+A 0x00000014EE190000
+A 0x000000146E990000
+B 0x00000014F01B0000
+B 0x00000014709B0000
+C 0x00000014F6210000
+C 0x0000001476A10000
+D 0x00000014F8230000
+D 0x0000001478A30000
+
+end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt
new file mode 100644
index 0000000..e918011
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt
@@ -0,0 +1,590 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the new grey Hauppauge remote
+#
+# Modified from Jarod Wilson's which came from Jeff Campbell's
+# By Brad Templeton
+
+
+# Here we have the jump point commands. They only work if you have
+# defined function keys for these jump points. For me the most
+# common command is the menu of recordings, so I put that on "videos"
+# even though that's counter-intuitive
+
+begin
+prog = mythtv
+button = TV
+repeat = 3
+config = F5
+end
+
+begin
+prog = mythtv
+button = Videos
+repeat = 3
+config = F2
+end
+
+# Not yet defined
+begin
+prog = mythtv
+button = Music
+repeat = 3
+config = Up
+end
+
+# Given another function for now, I don't use mythgallery
+begin
+prog = mythtv
+button = Pictures
+repeat = 3
+config = F
+end
+
+begin
+prog = mythtv
+button = Guide
+repeat = 3
+config = F3
+end
+
+# I stuck the "todo" list on here as Myth has no radio function
+begin
+prog = mythtv
+button = Radio
+repeat = 3
+config = F4
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = LEFT
+repeat = 3
+config = Left
+end
+
+begin
+prog = mythtv
+button = RIGHT
+repeat = 3
+config = Right
+end
+
+# Channel Up
+begin
+prog = mythtv
+button = Channel-UP
+repeat = 3
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Channel-DOWN
+repeat = 3
+config = Down
+end
+
+# OK/Select
+begin
+prog = mythtv
+button = Ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = I
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = BACK
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+repeat = 3
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+repeat = 3
+config = |
+end
+
+# Fast forward (30 sec default)
+begin
+prog = mythtv
+button = Rewind
+repeat = 3
+config = PgUp
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Forward
+repeat = 3
+config = PgDown
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = Next
+repeat = 3
+config = End
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = Previous
+repeat = 3
+config = Home
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+repeat = 3
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = Red
+repeat = 3
+config = D
+end
+
+# Decrease play speed
+begin
+prog = mythtv
+button = Green
+repeat = 3
+config = J
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Menu
+repeat = 3
+config = M
+end
+
+# Scroll up
+begin
+prog = mythtv
+button = Volume-UP
+repeat = 3
+config = F11
+end
+
+# Scroll down
+begin
+prog = mythtv
+button = Volume-DOWN
+repeat = 3
+config = F10
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Go
+repeat = 3
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = Prev-Channel
+repeat = 3
+config = W
+end
+
+# double speed watch
+begin
+prog = mythtv
+button = Yellow
+repeat = 3
+config = J
+end
+
+# change tuners
+#begin
+#prog = mythtv
+#button = hash
+#repeat = 3
+#config = Y
+#end
+
+# Bring up Time stretch
+begin
+prog = mythtv
+button = Blue
+repeat = 3
+config = Y
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+repeat = 3
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+repeat = 3
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+repeat = 3
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+repeat = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+repeat = 3
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+repeat = 3
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+repeat = 3
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+repeat = 3
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+repeat = 3
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+repeat = 3
+config = 9
+end
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = MENU
+repeat = 3
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+repeat = 3
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button = PLAY
+repeat = 3
+config = seek +1
+end
+
+# Stop playback and exit
+begin
+prog = mplayer
+button = Back
+repeat = 3
+config = quit
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+repeat = 3
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = LEFT
+repeat = 3
+config = seek -7
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = RIGHT
+repeat = 3
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = EXIT
+repeat = 3
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = SKIP
+repeat = 3
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = REPLAY
+repeat = 3
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULL
+repeat = 3
+config = vo_fullscreen
+end
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = OFF
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = CH+
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH-
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = VOL-
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = VOL+
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = BACK
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = FFW
+repeat = 3
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = REW
+repeat = 3
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = FULL
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = BLANK
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = SKIP
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = REPLAY
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = GO
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = RED
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = RED
+repeat = 3
+config = Quit
+end \ No newline at end of file
diff --git a/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/preview.jpg b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/preview.jpg
new file mode 100644
index 0000000..a1fbc6e
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/snapstream_firefly/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/remotes/streamzap/lircd.conf.streamzap b/abs/core-testing/live-installer/templates/remotes/streamzap/lircd.conf.streamzap
new file mode 100644
index 0000000..8e453b9
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/streamzap/lircd.conf.streamzap
@@ -0,0 +1,69 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/streamzap/lircrc b/abs/core-testing/live-installer/templates/remotes/streamzap/lircrc
new file mode 100755
index 0000000..5e668b5
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/streamzap/lircrc
@@ -0,0 +1,832 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 4
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+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
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = i
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core-testing/live-installer/templates/remotes/streamzap/preview.jpg b/abs/core-testing/live-installer/templates/remotes/streamzap/preview.jpg
new file mode 100644
index 0000000..4d1a5fe
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/remotes/streamzap/preview.jpg
Binary files differ
diff --git a/abs/core-testing/live-installer/templates/samba/smb.conf.home b/abs/core-testing/live-installer/templates/samba/smb.conf.home
new file mode 100755
index 0000000..b850a7d
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/samba/smb.conf.home
@@ -0,0 +1,10 @@
+[home]
+ path = /data/home/mythtv/
+ public = yes
+ only guest = yes
+ writeable = yes
+ printable = no
+ force user = mythtv
+ force group = mythtv
+ create mask = 0755
+
diff --git a/abs/core-testing/live-installer/templates/samba/smb.conf.media b/abs/core-testing/live-installer/templates/samba/smb.conf.media
new file mode 100755
index 0000000..6a4ec91
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/samba/smb.conf.media
@@ -0,0 +1,10 @@
+[media]
+ path = /data/media
+ public = yes
+ only guest = yes
+ writeable = yes
+ printable = no
+ force user = mythtv
+ force group = mythtv
+ create mask = 0755
+
diff --git a/abs/core-testing/live-installer/templates/samba/smb.conf.template b/abs/core-testing/live-installer/templates/samba/smb.conf.template
new file mode 100644
index 0000000..42ddb99
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/samba/smb.conf.template
@@ -0,0 +1,125 @@
+#
+#======================= Global Settings =====================================
+[global]
+
+ workgroup = home_lan
+ server string = MythVantage
+
+# Security mode. Defines in which mode Samba will operate. Possible
+# values are share, user, server, domain and ads. Most people will want
+# user level security. See the Samba-HOWTO-Collection for details.
+ security = share
+
+# This option is important for security. It allows you to restrict
+# connections to machines which are on your local network. The
+# following example restricts access to two C class networks and
+# the "loopback" interface. For more examples of the syntax see
+# the smb.conf man page
+; hosts allow = 192.168.1. 192.168.2. 127.
+
+ load printers = no
+
+# you may wish to override the location of the printcap file
+; printcap name = /etc/printcap
+
+; guest account = pcguest
+
+# this tells Samba to use a separate log file for each machine
+# that connects
+ log file = /var/log/samba/log.%m
+
+# Put a capping on the size of the log files (in Kb).
+ max log size = 50
+
+# Use password server option only with security = server
+# The argument list may include:
+# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
+# or to auto-locate the domain controller/s
+# password server = *
+; password server = <NT-Server-Name>
+
+# Use the realm option only with security = ads
+# Specifies the Active Directory realm the host is part of
+; realm = MY_REALM
+
+# Backend to store user information in. New installations should
+# use either tdbsam or ldapsam. smbpasswd is available for backwards
+# compatibility. tdbsam requires no further configuration.
+; passdb backend = tdbsam
+
+# Using the following line enables you to customise your configuration
+# on a per machine basis. The %m gets replaced with the netbios name
+# of the machine that is connecting.
+# Note: Consider carefully the location in the configuration file of
+# this line. The included file is read at that point.
+; include = /usr/local/samba/lib/smb.conf.%m
+
+# Configure Samba to use multiple interfaces
+# If you have multiple network interfaces then you must list them
+# here. See the man page for details.
+; interfaces = 192.168.12.2/24 192.168.13.2/24
+
+# Browser Control Options:
+# set local master to no if you don't want Samba to become a master
+# browser on your network. Otherwise the normal election rules apply
+; local master = no
+
+# OS Level determines the precedence of this server in master browser
+# elections. The default value should be reasonable
+; os level = 33
+
+# Domain Master specifies Samba to be the Domain Master Browser. This
+# allows Samba to collate browse lists between subnets. Don't use this
+# if you already have a Windows NT domain controller doing this job
+; domain master = yes
+
+# Preferred Master causes Samba to force a local browser election on startup
+# and gives it a slightly higher chance of winning the election
+; preferred master = yes
+
+# Enable this if you want Samba to be a domain logon server for
+# Windows95 workstations.
+; domain logons = yes
+
+# if you enable domain logons then you may want a per-machine or
+# per user logon script
+# run a specific logon batch file per workstation (machine)
+; logon script = %m.bat
+# run a specific logon batch file per username
+; logon script = %U.bat
+
+# Where to store roving profiles (only for Win95 and WinNT)
+# %L substitutes for this servers netbios name, %U is username
+# You must uncomment the [Profiles] share below
+; logon path = \\%L\Profiles\%U
+
+# Windows Internet Name Serving Support Section:
+# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
+; wins support = yes
+
+# WINS Server - Tells the NMBD components of Samba to be a WINS Client
+# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
+; wins server = w.x.y.z
+
+# WINS Proxy - Tells Samba to answer name resolution queries on
+# behalf of a non WINS capable client, for this to work there must be
+# at least one WINS Server on the network. The default is NO.
+; wins proxy = yes
+
+# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
+# via DNS nslookups. The default is NO.
+ dns proxy = no
+
+# These scripts are used on a domain controller or stand-alone
+# machine to add or delete corresponding unix accounts
+; add user script = /usr/sbin/useradd %u
+; add group script = /usr/sbin/groupadd %g
+; add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
+; delete user script = /usr/sbin/userdel %u
+; delete user from group script = /usr/sbin/deluser %u %g
+; delete group script = /usr/sbin/groupdel %g
+
+
+#============================ Share Definitions ==============================
+
+
diff --git a/abs/core-testing/live-installer/templates/settings/default_1/keybindings.txt b/abs/core-testing/live-installer/templates/settings/default_1/keybindings.txt
new file mode 100644
index 0000000..f82f2d2
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/settings/default_1/keybindings.txt
@@ -0,0 +1,209 @@
+context action description keylist hostname
+Music FFWD Fast forward PgDown REPLACEME
+Music STOP Stop playback O REPLACEME
+Music MUTE Mute |,\\\\,F9 REPLACEME
+Gallery SCROLLUP Scroll image up 2 REPLACEME
+Music VOLUMEDOWN Volume down [,{,F10 REPLACEME
+Music VOLUMEUP Volume up ],},F11 REPLACEME
+qt DELETE Delete D REPLACEME
+Music RWND Rewind PgUp REPLACEME
+qt EDIT Edit E REPLACEME
+Music PAUSE Pause/Start playback P REPLACEME
+Gallery RECENTER Recenter image 5 REPLACEME
+Gallery FULLSIZE Full-size (un-zoom) image 0 REPLACEME
+Gallery LOWRIGHT Go to the lower-right corner of the image PgDown REPLACEME
+Gallery SCROLLRIGHT Scroll image right 6 REPLACEME
+Gallery MENU Toggle activating menu in thumbnail view M REPLACEME
+Gallery SCROLLDOWN Scroll image down 8 REPLACEME
+Gallery ZOOMIN Zoom image in 9 REPLACEME
+Gallery UPLEFT Go to the upper-left corner of the image PgUp REPLACEME
+Gallery RANDOMSHOW Start Random Slideshow in thumbnail view R REPLACEME
+Gallery ROTLEFT Rotate image left 90 degrees [,1 REPLACEME
+Gallery SLIDESHOW Start Slideshow in thumbnail view S REPLACEME
+Gallery ROTRIGHT Rotate image right 90 degrees ],3 REPLACEME
+Gallery END Go to the last image in thumbnail view End REPLACEME
+Gallery HOME Go to the first image in thumbnail view Home REPLACEME
+Gallery SCROLLLEFT Scroll image left 4 REPLACEME
+Gallery PLAY Start/Stop Slideshow P REPLACEME
+NetFlix REMOVE Removes movie from queue D REPLACEME
+Archive TOGGLECUT Toggle use cut list state for selected program C REPLACEME
+Gallery ZOOMOUT Zoom image out 7 REPLACEME
+NetFlix MOVETOTOP Moves movie to top of queue 1 REPLACEME
+Global DOWN Down Arrow Down REPLACEME
+ITV Menu MENUTEXT Menu Text F7 REPLACEME
+ITV Menu TEXTEXIT Menu Exit F6 REPLACEME
+Global LEFT Left Arrow Left REPLACEME
+Global RIGHT Right Arrow Right REPLACEME
+Global UP Up Arrow Up REPLACEME
+Global MENU Pop-up menu M REPLACEME
+Global PREVVIEW Previous View Home REPLACEME
+Global ESCAPE Escape Esc REPLACEME
+Global PAGEUP Page Up PgUp REPLACEME
+Global SELECT Select Return,Enter,Space REPLACEME
+Global HELP Help F1 REPLACEME
+Global INFO More information I REPLACEME
+Global NEXTVIEW Next View End REPLACEME
+ITV Menu MENUBLUE Menu Blue F5 REPLACEME
+Global PAGEDOWN Page Down PgDown REPLACEME
+Global EJECT Eject Removable Media REPLACEME
+Global 3 3 3 REPLACEME
+Global 1 1 1 REPLACEME
+Global 6 6 6 REPLACEME
+Global 0 0 0 REPLACEME
+Global 2 2 2 REPLACEME
+Global 4 4 4 REPLACEME
+TV Frontend DELETE Delete Program D REPLACEME
+Global 8 8 8 REPLACEME
+Global 7 7 7 REPLACEME
+TV Frontend PAGEDOWN Page Down 9 REPLACEME
+TV Frontend PAGEUP Page Up 3 REPLACEME
+Global 5 5 5 REPLACEME
+TV Frontend CHANGERECGROUP Change Recording Group REPLACEME
+Global 9 9 9 REPLACEME
+Video END Go to the last video End REPLACEME
+Video INCPARENT Increase Parental Level ],},F11 REPLACEME
+Weather PAUSE Pause current page P REPLACEME
+TV Frontend TOGGLERECORD Toggle recording status of current program R REPLACEME
+Video BROWSE Change browsable in video manager B REPLACEME
+Welcome SHOWSETTINGS Show Mythshutdown settings F11 REPLACEME
+Video HOME Go to the first video Home REPLACEME
+Video FILTER Open video filter dialog F REPLACEME
+Welcome STARTXTERM Open an Xterm window F12 REPLACEME
+Music INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music BLANKSCR Blank screen 5 REPLACEME
+Video DELETE Delete video D REPLACEME
+Music THMBUP Increase rating 9 REPLACEME
+Music CYCLEVIS Cycle visualizer mode 6 REPLACEME
+Teletext Menu REVEAL Reveal hidden Text F8 REPLACEME
+Music INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+TV Frontend PLAYBACK Play Program P REPLACEME
+News FORCERETRIEVE Force update news items M REPLACEME
+Video DECPARENT Decrease Parental Level [,{,F10 REPLACEME
+News RETRIEVENEWS Update news items I REPLACEME
+News CANCEL Cancel news item updating C REPLACEME
+Teletext Menu TOGGLEBACKGROUND Toggle Background F7 REPLACEME
+Teletext Menu MENUWHITE Menu White F6 REPLACEME
+ITV Menu MENURED Menu Red F2 REPLACEME
+ITV Menu MENUYELLOW Menu Yellow F4 REPLACEME
+ITV Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu PREVSUBPAGE Previous Subpage Left REPLACEME
+Teletext Menu MENUYELLOW Menu Yellow F4 REPLACEME
+Teletext Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu NEXTSUBPAGE Next Subpage Right REPLACEME
+Teletext Menu MENUBLUE Menu Blue F5 REPLACEME
+Teletext Menu TOGGLETT Toggle Teletext T REPLACEME
+Teletext Menu NEXTPAGE Next Page Down REPLACEME
+TV Editing LOADCOMMSKIP Load cut list from commercial skips Z,End REPLACEME
+TV Editing BIGJUMPREW Jump back 10x the normal amount ,,< REPLACEME
+TV Editing BIGJUMPFWD Jump forward 10x the normal amount >,. REPLACEME
+TV Playback JUMPTODVDROOTMENU Jump to the DVD Root Menu REPLACEME
+Teletext Menu MENURED Menu Red F2 REPLACEME
+TV Playback SIGNALMON Monitor Signal Quality F7 REPLACEME
+Teletext Menu PREVPAGE Previous Page Up REPLACEME
+TV Editing INVERTMAP Invert Begin/End cut points I REPLACEME
+TV Playback PLAY Play Ctrl+P REPLACEME
+TV Editing PREVCUT Jump to the previous cut point PgUp REPLACEME
+TV Editing NEXTCUT Jump to the next cut point PgDown REPLACEME
+TV Playback CYCLECOMMSKIPMODE Cycle Commercial Skip mode REPLACEME
+TV Playback TOGGLESLEEP Toggle the Sleep Timer F8 REPLACEME
+TV Playback JUMPREC Display menu of recorded programs to jump to REPLACEME
+TV Playback FINDER Show the Program Finder # REPLACEME
+TV Playback ADJUSTSTRETCH Turn on time stretch control A REPLACEME
+TV Editing CLEARMAP Clear editing cut points C,Q,Home REPLACEME
+TV Editing TOGGLEEDIT Exit out of Edit Mode E REPLACEME
+TV Playback TOGGLESTRETCH Toggle time stretch speed REPLACEME
+TV Playback TOGGLERECCONTROLS Recording picture adjustments for this recorder G REPLACEME
+TV Playback TOGGLEAUDIOSYNC Turn on audio sync adjustment controls REPLACEME
+TV Playback TOGGLEEDIT Start Edit Mode E REPLACEME
+TV Playback SPEEDINC Increase the playback speed U REPLACEME
+TV Playback STRETCHDEC Decrease time stretch speed REPLACEME
+TV Playback SPEEDDEC Decrease the playback speed J REPLACEME
+TV Playback TOGGLECHANCONTROLS Recording picture adjustments for this channel Ctrl+G REPLACEME
+TV Playback GUIDE Show the Program Guide S REPLACEME
+TV Playback JUMPPREV Jump to previously played recording REPLACEME
+TV Playback QUEUETRANSCODE Queue the current recording for transcoding X REPLACEME
+TV Playback STRETCHINC Increase time stretch speed REPLACEME
+TV Playback TOGGLEPICCONTROLS Playback picture adjustments F REPLACEME
+TV Playback PREVCC708 Previous ATSC CC track REPLACEME
+TV Playback NEXTCC708 Next ATSC CC track REPLACEME
+TV Playback NEXTCC Next of any captions REPLACEME
+TV Playback NEXTSCAN Next video scan overidemode REPLACEME
+TV Playback NEXTCC608 Next VBI CC track REPLACEME
+TV Playback PREVCC608 Previous VBI CC track REPLACEME
+TV Playback PREVAUDIO Previous audio track - REPLACEME
+TV Playback PREVSUBTITLE Previous subtitle track REPLACEME
+TV Playback NEXTSUBTITLE Next subtitle track REPLACEME
+TV Playback NEXTAUDIO Next audio track + REPLACEME
+TV Playback SELECTCC708_3 Display ATSC CC4 REPLACEME
+TV Playback SELECTCC708_0 Display ATSC CC1 REPLACEME
+TV Playback SELECTCC608_1 Display VBI CC2 REPLACEME
+TV Playback SELECTAUDIO_0 Play audio track 1 REPLACEME
+TV Playback SELECTCC608_2 Display VBI CC3 REPLACEME
+TV Playback TOGGLETTM Toggle Teletext Menu REPLACEME
+TV Playback SELECTSUBTITLE_1 Display subtitle 2 REPLACEME
+TV Playback SELECTCC608_3 Display VBI CC4 REPLACEME
+TV Playback SELECTCC708_1 Display ATSC CC2 REPLACEME
+TV Playback SELECTCC708_2 Display ATSC CC3 REPLACEME
+TV Playback SELECTAUDIO_1 Play audio track 2 REPLACEME
+TV Playback SELECTSUBTITLE_0 Display subtitle 1 REPLACEME
+TV Playback TOGGLETTC Toggle Teletext Captions REPLACEME
+TV Playback SELECTCC608_0 Display VBI CC1 REPLACEME
+TV Playback SWAPPIP Swap PiP/Main N REPLACEME
+TV Playback TOGGLEASPECT Toggle the display aspect ratio W REPLACEME
+TV Playback TOGGLECC708 Toggle ATSC CC REPLACEME
+TV Playback TOGGLECC608 Toggle VBI CC REPLACEME
+TV Playback TOGGLEPIPMODE Toggle Picture-in-Picture mode V REPLACEME
+TV Playback TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Playback TOGGLEPIPWINDOW Toggle active PiP window B REPLACEME
+TV Playback MUTE Mute |,\\\\,F9 REPLACEME
+TV Playback TOGGLEBROWSE Toggle channel browse mode O REPLACEME
+TV Playback TOGGLESUBTITLE Toggle Subtitles REPLACEME
+TV Playback VOLUMEUP Volume up ],},F11 REPLACEME
+TV Playback TOGGLECC Toggle any captions T REPLACEME
+TV Playback JUMPSTART Jump to the start of the recording. Ctrl+B REPLACEME
+TV Playback TOGGLERECORD Toggle recording status of current program R REPLACEME
+TV Playback SKIPCOMMERCIAL Skip Commercial Z,End REPLACEME
+TV Playback VOLUMEDOWN Volume down [,{,F10 REPLACEME
+TV Playback SWITCHCARDS Switch Capture Cards Y REPLACEME
+TV Playback SKIPCOMMBACK Skip Commercial (Reverse) Q,Home REPLACEME
+TV Playback TOGGLEINPUTS Toggle Inputs C REPLACEME
+TV Playback FFWDSTICKY Fast Forward (Sticky) or Forward one frame while paused >,. REPLACEME
+TV Playback JUMPFFWD Jump ahead PgDown REPLACEME
+TV Playback PREVCHAN Switch to the previous channel H REPLACEME
+TV Playback JUMPBKMRK Jump to bookmark K REPLACEME
+TV Playback RWNDSTICKY Rewind (Sticky) or Rewind one frame while paused ,,< REPLACEME
+TV Playback NEXTFAV Switch to the next favorite channel / REPLACEME
+TV Playback JUMPRWND Jump back PgUp REPLACEME
+TV Playback SEEKRWND Rewind Left REPLACEME
+TV Playback SEEKFFWD Fast Forward Right REPLACEME
+TV Playback CHANNELDOWN Channel down Down REPLACEME
+TV Playback CHANNELUP Channel up Up REPLACEME
+TV Playback ARBSEEK Arbitrary Seek * REPLACEME
+TV Playback DELETE Delete Program D REPLACEME
+TV Playback CLEAROSD Clear OSD Backspace REPLACEME
+TV Frontend DETAILS Show program details U REPLACEME
+TV Frontend CUSTOMEDIT Edit Custom Record Rule E REPLACEME
+TV Frontend UPCOMING List upcoming episodes O REPLACEME
+TV Frontend CHANUPDATE Switch channels without exiting guide in Live TV mode. X REPLACEME
+TV Frontend RANKDEC Decrease program or channel rank Left REPLACEME
+TV Frontend VIEWCARD Switch Capture Card view Y REPLACEME
+TV Playback PAUSE Pause P REPLACEME
+TV Frontend RANKINC Increase program or channel rank Right REPLACEME
+TV Frontend PAGERIGHT Page the program guide right >,. REPLACEME
+TV Frontend PAGELEFT Page the program guide left ,,< REPLACEME
+TV Frontend NEXTFAV Toggle showing all channels or just favorites in the program guide. / REPLACEME
+Gallery DELETE Delete marked images or current image if none are marked D REPLACEME
+TV Frontend DAYRIGHT Page the program guide forward one day End,1 REPLACEME
+Gallery MARK Mark image T REPLACEME
+Game TOGGLEFAV Toggle the current game as a favorite ?,/ REPLACEME
+TV Frontend TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Frontend DAYLEFT Page the program guide back one day Home,7 REPLACEME
+Music PREVTRACK Move to the previous track ,,<,Q,Home REPLACEME
+Game INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+Music DELETE Delete track from playlist D REPLACEME
+Gallery INFO Toggle Showing Information about Image I REPLACEME
+Game INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music REFRESH Refresh music tree 8 REPLACEME
+Music NEXTTRACK Move to the next track >,.,Z,End REPLACEME
+Music FILTER Filter All My Music F REPLACEME
+Music THMBDOWN Decrease rating 7 REPLACEME
diff --git a/abs/core-testing/live-installer/templates/settings/default_1/settings.txt b/abs/core-testing/live-installer/templates/settings/default_1/settings.txt
new file mode 100644
index 0000000..8c3a391
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/settings/default_1/settings.txt
@@ -0,0 +1,320 @@
+value data hostname
+AC3PassThru 0 REPLACEME
+AggressiveSoundcardBuffer 0 REPLACEME
+AllowQuitShutdown 3 REPLACEME
+AltClearSavedPosition 1 REPLACEME
+AspectOverride 0 REPLACEME
+AudioNag 1 REPLACEME
+AudioOutputDevice /dev/dsp REPLACEME
+AutoCommercialSkip 2 REPLACEME
+AutoLookupCD 1 REPLACEME
+AutomaticSetWatched 0 REPLACEME
+AutoPlayCD 0 REPLACEME
+BackendServerPort 6543 REPLACEME
+BackendStatusPort 6544 REPLACEME
+CCBackground 0 REPLACEME
+CDBlankType fast REPLACEME
+CDCreateDir 1 REPLACEME
+CDDevice /dev/cdrom REPLACEME
+CDDiskSize 1 REPLACEME
+CDWriterEnabled 0 REPLACEME
+CDWriteSpeed 0 REPLACEME
+ChannelFormat <num> <sign> REPLACEME
+ChannelOrdering channum REPLACEME
+chanPerPage 5 REPLACEME
+ClearSavedPosition 1 REPLACEME
+CommNotifyAmount 0 REPLACEME
+CommRewindAmount 0 REPLACEME
+CustomFilters REPLACEME
+DateFormat ddd MMM d REPLACEME
+DecodeExtraAudio 1 REPLACEME
+Default MythVideo View 1 REPLACEME
+DefaultCCMode 0 REPLACEME
+DefaultRipQuality 0 REPLACEME
+DefaultTVChannel 3 REPLACEME
+Deinterlace 1 REPLACEME
+DeinterlaceFilter kerneldeint REPLACEME
+DisplayGroupDefaultView 0 REPLACEME
+DisplayGroupTitleSort 0 REPLACEME
+DisplayRecGroup Default REPLACEME
+DispRecGroupAsAllProg 0 REPLACEME
+DTSPassThru 0 REPLACEME
+DVDDeviceLocation /dev/dvd REPLACEME
+DVDOnInsertDVD 1 REPLACEME
+DVDRipLocation /data/media/tmp REPLACEME
+EjectCDAfterRipping 1 REPLACEME
+EnableMHEG 0 REPLACEME
+EnableXbox 0 REPLACEME
+EnableXbox 0 REPLACEME
+EncoderType ogg REPLACEME
+EndOfRecordingExitPrompt 1 REPLACEME
+EPGFillType 10 REPLACEME
+EPGScrollType 1 REPLACEME
+EPGShowCategoryColors 1 REPLACEME
+EPGShowCategoryText 1 REPLACEME
+EPGShowChannelIcon 1 REPLACEME
+EPGShowFavorites 0 REPLACEME
+ExactSeeking 0 REPLACEME
+FFRewReposTime 100 REPLACEME
+FFRewReverse 1 REPLACEME
+FilenameTemplate ARTIST/ALBUM/TRACK-TITLE REPLACEME
+GalleryDir /data/media/images REPLACEME
+GalleryImportDirs /mnt/cdrom:/mnt/camera REPLACEME
+GalleryMoviePlayerCmd mplayer -fs %s REPLACEME
+GalleryOverlayCaption 0 REPLACEME
+GalleryRecursiveSlideshow 1 REPLACEME
+GallerySortOrder 20 REPLACEME
+GalleryThumbnailLocation 1 REPLACEME
+GameAllTreeLevels system gamename REPLACEME
+GameFavTreeLevels gamename REPLACEME
+GeneratePreviewPixmaps 0 REPLACEME
+GuiHeight 0 REPLACEME
+GuiOffsetX 0 REPLACEME
+GuiOffsetY 0 REPLACEME
+GuiSizeForTV 0 REPLACEME
+GuiVidModeResolution 640x480 REPLACEME
+GuiWidth 0 REPLACEME
+HideMouseCursor 1 REPLACEME
+HorizScanPercentage 0 REPLACEME
+Ignore_ID3 0 REPLACEME
+IndividualMuteControl 0 REPLACEME
+IntelliLastPlayWeight 25 REPLACEME
+IntelliPlayCountWeight 25 REPLACEME
+IntelliRandomWeight 15 REPLACEME
+IntelliRatingWeight 35 REPLACEME
+ISO639Language0 eng REPLACEME
+ISO639Language1 eng REPLACEME
+JobAllowCommFlag 1 REPLACEME
+JobAllowTranscode 1 REPLACEME
+JobQueueCheckFrequency 60 REPLACEME
+JobQueueCPU 0 REPLACEME
+JobQueueMaxSimultaneousJobs 1 REPLACEME
+JobQueueWindowEnd 23:59 REPLACEME
+JobQueueWindowStart 00:00 REPLACEME
+KeyboardAccelerators 1 REPLACEME
+Language EN REPLACEME
+LastMusicPlaylistPush 0 REPLACEME
+LCDBacklightOn 1 REPLACEME
+LCDBigClock 0 REPLACEME
+LCDEnable 0 REPLACEME
+LCDHeartBeatOn 0 REPLACEME
+LCDKeyString ABCDEF REPLACEME
+LCDPopupTime 5 REPLACEME
+LCDShowChannel 1 REPLACEME
+LCDShowGeneric 1 REPLACEME
+LCDShowMenu 1 REPLACEME
+LCDShowMusic 1 REPLACEME
+LCDShowMusicItems ArtistTitle REPLACEME
+LCDShowRecStatus 0 REPLACEME
+LCDShowTime 1 REPLACEME
+LCDShowVolume 1 REPLACEME
+LircKeyPressedApp REPLACEME
+ListAsShuffled 0 REPLACEME
+LiveTVInAllPrograms 0 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogMaxCount 100 REPLACEME
+LogMaxCount 100 REPLACEME
+LogPrintLevel 8 REPLACEME
+LogPrintLevel 8 REPLACEME
+LongChannelFormat <num> <name> REPLACEME
+MasterMixerVolume 70 REPLACEME
+MenuTheme MythVantage-menu REPLACEME
+MixerControl PCM REPLACEME
+MixerDevice /dev/mixer REPLACEME
+MonitorDrives 0 REPLACEME
+MovieDataCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -D REPLACEME
+MovieListCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no REPLACEME
+MoviePosterCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -P REPLACEME
+Mp3UseVBR 0 REPLACEME
+MTDac3Flag 0 REPLACEME
+MTDConcurrentTranscodes 1 REPLACEME
+MTDLogFlag 0 REPLACEME
+MTDNiceLevel 20 REPLACEME
+MTDPort 2442 REPLACEME
+MTDRipSize 0 REPLACEME
+MTDxvidFlag 1 REPLACEME
+MusicAudioDevice default REPLACEME
+MusicLocation /data/media/audio REPLACEME
+MusicShowRatings 0 REPLACEME
+MythArchiveAlwaysUseMythTranscode 1 REPLACEME
+MythArchiveChapterMenuAR Video REPLACEME
+MythArchiveCopyRemoteFiles 1 REPLACEME
+MythArchiveDateFormat %a %b %d REPLACEME
+MythArchiveDvdauthorCmd dvdauthor REPLACEME
+MythArchiveDVDLocation /dev/dvd REPLACEME
+MythArchiveEncodeToAc3 1 REPLACEME
+MythArchiveFfmpegCmd ffmpeg REPLACEME
+MythArchiveFileFilter *.mpg *.mov *.avi *.mpeg *.nuv REPLACEME
+MythArchiveGrowisofsCmd growisofs REPLACEME
+MythArchiveMainMenuAR 16:9 REPLACEME
+MythArchiveMkisofsCmd mkisofs REPLACEME
+MythArchiveMpeg2encCmd mpeg2enc REPLACEME
+MythArchiveMplexCmd mplex REPLACEME
+MythArchivePng2yuvCmd png2yuv REPLACEME
+MythArchiveShareDir /usr/local/share/mythtv/mytharchive/ REPLACEME
+MythArchiveSpumuxCmd spumux REPLACEME
+MythArchiveTcrequantCmd tcrequant REPLACEME
+MythArchiveTempDir /data/media/tmp REPLACEME
+MythArchiveTimeFormat %I:%M %p REPLACEME
+MythArchiveUseFIFO 1 REPLACEME
+MythArchiveVideoFormat NTSC REPLACEME
+MythControlsVolume 1 REPLACEME
+mythdvd.DVDPlayerCommand Internal REPLACEME
+mythvideo.db_folder_view 1 REPLACEME
+mythvideo.ImageCacheSize 50 REPLACEME
+mythvideo.sort_ignores_case 1 REPLACEME
+NetworkControlEnabled 1 REPLACEME
+NetworkControlPort 6546 REPLACEME
+NonID3FileNameFormat GENRE/ARTIST/ALBUM/TRACK_TITLE REPLACEME
+NoPromptOnExit 0 REPLACEME
+NoWhitespace 0 REPLACEME
+OnlyImportNewMusic 0 REPLACEME
+OSDCC708CapitalsFont FreeMono.ttf REPLACEME
+OSDCC708CapitalsItalicFont FreeMono.ttf REPLACEME
+OSDCC708CasualFont FreeMono.ttf REPLACEME
+OSDCC708CasualItalicFont FreeMono.ttf REPLACEME
+OSDCC708CursiveFont FreeMono.ttf REPLACEME
+OSDCC708CursiveItalicFont FreeMono.ttf REPLACEME
+OSDCC708DefaultFontType MonoSerif REPLACEME
+OSDCC708MonoSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708TextZoom 100 REPLACEME
+OSDCCFont FreeMono.ttf REPLACEME
+OSDFont FreeMono.ttf REPLACEME
+OSDGeneralTimeout 2 REPLACEME
+OSDNotifyTimeout 6 REPLACEME
+OSDProgramInfoTimeout 3 REPLACEME
+OSDTheme Gray-OSD REPLACEME
+OSDThemeFontSizeType default REPLACEME
+ParanoiaLevel Full REPLACEME
+PassThruOutputDevice Default REPLACEME
+PCMMixerVolume 70 REPLACEME
+PersistentBrowseMode 1 REPLACEME
+PIPLocation 0 REPLACEME
+PlaybackBoxStartInTitle 1 REPLACEME
+PlaybackExitPrompt 2 REPLACEME
+PlaybackPreview 1 REPLACEME
+PlaybackPreviewLowCPU 1 REPLACEME
+PlayBoxEpisodeSort Date REPLACEME
+PlayBoxOrdering 1 REPLACEME
+PlayBoxShading 0 REPLACEME
+PlayBoxTransparency 1 REPLACEME
+PlayMode none REPLACEME
+PostCDRipScript REPLACEME
+PreferredMPEG2Decoder ffmpeg REPLACEME
+PreviewFromBookmark 1 REPLACEME
+PVR350EPGAlphaValue 164 REPLACEME
+PVR350InternalAudioOnly 0 REPLACEME
+PVR350OutputEnable 0 REPLACEME
+PVR350VideoDev /dev/video16 REPLACEME
+QtFontBig 25 REPLACEME
+QtFontMedium 16 REPLACEME
+QtFontSmall 12 REPLACEME
+QueryInitialFilter 0 REPLACEME
+RandomTheme 0 REPLACEME
+RealtimePriority 1 REPLACEME
+RecordFilePrefix /data/media/video/recordings REPLACEME
+RememberRecGroup 1 REPLACEME
+RepeatMode all REPLACEME
+RunFrontendInWindow 0 REPLACEME
+SelChangeRecThreshold 16 REPLACEME
+SelectChangesChannel 1 REPLACEME
+ServiceMythWEB 0 REPLACEME
+ServiceNFS 0 REPLACEME
+ServiceSamba 0 REPLACEME
+SetupPinCodeRequired 0 REPLACEME
+ShortDateFormat M/d REPLACEME
+ShowGroupInfo 0 REPLACEME
+ShowWholeTree 1 REPLACEME
+SlideshowBackground REPLACEME
+SlideshowDelay 5 REPLACEME
+SlideshowOpenGLTransition none REPLACEME
+SlideshowOpenGLTransitionLength 2000 REPLACEME
+SlideshowTransition none REPLACEME
+SmartChannelChange 0 REPLACEME
+SmartForward 0 REPLACEME
+StickyKeys 1 REPLACEME
+Style Windows REPLACEME
+SubTitleCommand -sid %s REPLACEME
+TagSeparator - REPLACEME
+Theme basic-blue REPLACEME
+ThemeFontSizeType default REPLACEME
+ThemePainter qt REPLACEME
+TimeFormat h:mm AP REPLACEME
+timePerPage 4 REPLACEME
+TitlePlayCommand mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c REPLACEME
+TranscodeCommand transcode REPLACEME
+TreeLevels splitartist artist album title REPLACEME
+TVVidModeForceAspect 0.0 REPLACEME
+TVVidModeForceAspect0 0.0 REPLACEME
+TVVidModeForceAspect1 0.0 REPLACEME
+TVVidModeForceAspect2 0.0 REPLACEME
+TVVidModeRefreshRate 0 REPLACEME
+TVVidModeRefreshRate0 0 REPLACEME
+TVVidModeRefreshRate1 0 REPLACEME
+TVVidModeRefreshRate2 0 REPLACEME
+TVVidModeResolution 640x480 REPLACEME
+TVVidModeResolution0 640x480 REPLACEME
+TVVidModeResolution1 640x480 REPLACEME
+TVVidModeResolution2 640x480 REPLACEME
+UDPNotifyPort 6948 REPLACEME
+UnknownCategory Unknown REPLACEME
+UnknownTitle Unknown REPLACEME
+upnp:UDN:urn:schemas-upnp-org:device:MediaServer:1 dee5b0fe-7087-4960-8794-428d3e01a61f REPLACEME
+UseArrowAccels 1 REPLACEME
+UseOutputPictureControls 1 REPLACEME
+UseVideoModes 0 REPLACEME
+UseVideoTimebase 0 REPLACEME
+UseVirtualKeyboard 1 REPLACEME
+VCDDeviceLocation /dev/cdrom REPLACEME
+VCDPlayerCommand mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv REPLACEME
+VertScanPercentage 0 REPLACEME
+VideoAggressivePC 0 REPLACEME
+VideoArtworkDir /data/media/images/posters REPLACEME
+VideoBrowserNoDB 0 REPLACEME
+VideoDefaultParentalLevel 4 REPLACEME
+VideoGalleryAspectRatio 1 REPLACEME
+VideoGalleryColsPerPage 4 REPLACEME
+VideoGalleryNoDB 0 REPLACEME
+VideoGalleryRowsPerPage 3 REPLACEME
+VideoGallerySubtitle 1 REPLACEME
+VideoListUnknownFiletypes 1 REPLACEME
+VideoNewBrowsable 1 REPLACEME
+VideoDefaultPlayer Internal REPLACEME
+VideoStartupDir /data/media/video/movies REPLACEME
+VideoTreeLoadMetaData 1 REPLACEME
+VideoTreeNoDB 0 REPLACEME
+VidModeHeight0 0 REPLACEME
+VidModeHeight1 0 REPLACEME
+VidModeHeight2 0 REPLACEME
+VidModeWidth0 0 REPLACEME
+VidModeWidth1 0 REPLACEME
+VidModeWidth2 0 REPLACEME
+VisualCycleOnSongChange 0 REPLACEME
+VisualMode Random REPLACEME
+VisualModeDelay 0 REPLACEME
+VisualScaleHeight 1 REPLACEME
+VisualScaleWidth 1 REPLACEME
+WatchTVGuide 0 REPLACEME
+WebBrowserCommand /usr/local/bin/mythbrowser REPLACEME
+WebBrowserHideScrollbars 0 REPLACEME
+WebBrowserScrollMode 1 REPLACEME
+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-testing/live-installer/templates/settings/default_2/keybindings.txt b/abs/core-testing/live-installer/templates/settings/default_2/keybindings.txt
new file mode 100644
index 0000000..f82f2d2
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/settings/default_2/keybindings.txt
@@ -0,0 +1,209 @@
+context action description keylist hostname
+Music FFWD Fast forward PgDown REPLACEME
+Music STOP Stop playback O REPLACEME
+Music MUTE Mute |,\\\\,F9 REPLACEME
+Gallery SCROLLUP Scroll image up 2 REPLACEME
+Music VOLUMEDOWN Volume down [,{,F10 REPLACEME
+Music VOLUMEUP Volume up ],},F11 REPLACEME
+qt DELETE Delete D REPLACEME
+Music RWND Rewind PgUp REPLACEME
+qt EDIT Edit E REPLACEME
+Music PAUSE Pause/Start playback P REPLACEME
+Gallery RECENTER Recenter image 5 REPLACEME
+Gallery FULLSIZE Full-size (un-zoom) image 0 REPLACEME
+Gallery LOWRIGHT Go to the lower-right corner of the image PgDown REPLACEME
+Gallery SCROLLRIGHT Scroll image right 6 REPLACEME
+Gallery MENU Toggle activating menu in thumbnail view M REPLACEME
+Gallery SCROLLDOWN Scroll image down 8 REPLACEME
+Gallery ZOOMIN Zoom image in 9 REPLACEME
+Gallery UPLEFT Go to the upper-left corner of the image PgUp REPLACEME
+Gallery RANDOMSHOW Start Random Slideshow in thumbnail view R REPLACEME
+Gallery ROTLEFT Rotate image left 90 degrees [,1 REPLACEME
+Gallery SLIDESHOW Start Slideshow in thumbnail view S REPLACEME
+Gallery ROTRIGHT Rotate image right 90 degrees ],3 REPLACEME
+Gallery END Go to the last image in thumbnail view End REPLACEME
+Gallery HOME Go to the first image in thumbnail view Home REPLACEME
+Gallery SCROLLLEFT Scroll image left 4 REPLACEME
+Gallery PLAY Start/Stop Slideshow P REPLACEME
+NetFlix REMOVE Removes movie from queue D REPLACEME
+Archive TOGGLECUT Toggle use cut list state for selected program C REPLACEME
+Gallery ZOOMOUT Zoom image out 7 REPLACEME
+NetFlix MOVETOTOP Moves movie to top of queue 1 REPLACEME
+Global DOWN Down Arrow Down REPLACEME
+ITV Menu MENUTEXT Menu Text F7 REPLACEME
+ITV Menu TEXTEXIT Menu Exit F6 REPLACEME
+Global LEFT Left Arrow Left REPLACEME
+Global RIGHT Right Arrow Right REPLACEME
+Global UP Up Arrow Up REPLACEME
+Global MENU Pop-up menu M REPLACEME
+Global PREVVIEW Previous View Home REPLACEME
+Global ESCAPE Escape Esc REPLACEME
+Global PAGEUP Page Up PgUp REPLACEME
+Global SELECT Select Return,Enter,Space REPLACEME
+Global HELP Help F1 REPLACEME
+Global INFO More information I REPLACEME
+Global NEXTVIEW Next View End REPLACEME
+ITV Menu MENUBLUE Menu Blue F5 REPLACEME
+Global PAGEDOWN Page Down PgDown REPLACEME
+Global EJECT Eject Removable Media REPLACEME
+Global 3 3 3 REPLACEME
+Global 1 1 1 REPLACEME
+Global 6 6 6 REPLACEME
+Global 0 0 0 REPLACEME
+Global 2 2 2 REPLACEME
+Global 4 4 4 REPLACEME
+TV Frontend DELETE Delete Program D REPLACEME
+Global 8 8 8 REPLACEME
+Global 7 7 7 REPLACEME
+TV Frontend PAGEDOWN Page Down 9 REPLACEME
+TV Frontend PAGEUP Page Up 3 REPLACEME
+Global 5 5 5 REPLACEME
+TV Frontend CHANGERECGROUP Change Recording Group REPLACEME
+Global 9 9 9 REPLACEME
+Video END Go to the last video End REPLACEME
+Video INCPARENT Increase Parental Level ],},F11 REPLACEME
+Weather PAUSE Pause current page P REPLACEME
+TV Frontend TOGGLERECORD Toggle recording status of current program R REPLACEME
+Video BROWSE Change browsable in video manager B REPLACEME
+Welcome SHOWSETTINGS Show Mythshutdown settings F11 REPLACEME
+Video HOME Go to the first video Home REPLACEME
+Video FILTER Open video filter dialog F REPLACEME
+Welcome STARTXTERM Open an Xterm window F12 REPLACEME
+Music INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music BLANKSCR Blank screen 5 REPLACEME
+Video DELETE Delete video D REPLACEME
+Music THMBUP Increase rating 9 REPLACEME
+Music CYCLEVIS Cycle visualizer mode 6 REPLACEME
+Teletext Menu REVEAL Reveal hidden Text F8 REPLACEME
+Music INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+TV Frontend PLAYBACK Play Program P REPLACEME
+News FORCERETRIEVE Force update news items M REPLACEME
+Video DECPARENT Decrease Parental Level [,{,F10 REPLACEME
+News RETRIEVENEWS Update news items I REPLACEME
+News CANCEL Cancel news item updating C REPLACEME
+Teletext Menu TOGGLEBACKGROUND Toggle Background F7 REPLACEME
+Teletext Menu MENUWHITE Menu White F6 REPLACEME
+ITV Menu MENURED Menu Red F2 REPLACEME
+ITV Menu MENUYELLOW Menu Yellow F4 REPLACEME
+ITV Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu PREVSUBPAGE Previous Subpage Left REPLACEME
+Teletext Menu MENUYELLOW Menu Yellow F4 REPLACEME
+Teletext Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu NEXTSUBPAGE Next Subpage Right REPLACEME
+Teletext Menu MENUBLUE Menu Blue F5 REPLACEME
+Teletext Menu TOGGLETT Toggle Teletext T REPLACEME
+Teletext Menu NEXTPAGE Next Page Down REPLACEME
+TV Editing LOADCOMMSKIP Load cut list from commercial skips Z,End REPLACEME
+TV Editing BIGJUMPREW Jump back 10x the normal amount ,,< REPLACEME
+TV Editing BIGJUMPFWD Jump forward 10x the normal amount >,. REPLACEME
+TV Playback JUMPTODVDROOTMENU Jump to the DVD Root Menu REPLACEME
+Teletext Menu MENURED Menu Red F2 REPLACEME
+TV Playback SIGNALMON Monitor Signal Quality F7 REPLACEME
+Teletext Menu PREVPAGE Previous Page Up REPLACEME
+TV Editing INVERTMAP Invert Begin/End cut points I REPLACEME
+TV Playback PLAY Play Ctrl+P REPLACEME
+TV Editing PREVCUT Jump to the previous cut point PgUp REPLACEME
+TV Editing NEXTCUT Jump to the next cut point PgDown REPLACEME
+TV Playback CYCLECOMMSKIPMODE Cycle Commercial Skip mode REPLACEME
+TV Playback TOGGLESLEEP Toggle the Sleep Timer F8 REPLACEME
+TV Playback JUMPREC Display menu of recorded programs to jump to REPLACEME
+TV Playback FINDER Show the Program Finder # REPLACEME
+TV Playback ADJUSTSTRETCH Turn on time stretch control A REPLACEME
+TV Editing CLEARMAP Clear editing cut points C,Q,Home REPLACEME
+TV Editing TOGGLEEDIT Exit out of Edit Mode E REPLACEME
+TV Playback TOGGLESTRETCH Toggle time stretch speed REPLACEME
+TV Playback TOGGLERECCONTROLS Recording picture adjustments for this recorder G REPLACEME
+TV Playback TOGGLEAUDIOSYNC Turn on audio sync adjustment controls REPLACEME
+TV Playback TOGGLEEDIT Start Edit Mode E REPLACEME
+TV Playback SPEEDINC Increase the playback speed U REPLACEME
+TV Playback STRETCHDEC Decrease time stretch speed REPLACEME
+TV Playback SPEEDDEC Decrease the playback speed J REPLACEME
+TV Playback TOGGLECHANCONTROLS Recording picture adjustments for this channel Ctrl+G REPLACEME
+TV Playback GUIDE Show the Program Guide S REPLACEME
+TV Playback JUMPPREV Jump to previously played recording REPLACEME
+TV Playback QUEUETRANSCODE Queue the current recording for transcoding X REPLACEME
+TV Playback STRETCHINC Increase time stretch speed REPLACEME
+TV Playback TOGGLEPICCONTROLS Playback picture adjustments F REPLACEME
+TV Playback PREVCC708 Previous ATSC CC track REPLACEME
+TV Playback NEXTCC708 Next ATSC CC track REPLACEME
+TV Playback NEXTCC Next of any captions REPLACEME
+TV Playback NEXTSCAN Next video scan overidemode REPLACEME
+TV Playback NEXTCC608 Next VBI CC track REPLACEME
+TV Playback PREVCC608 Previous VBI CC track REPLACEME
+TV Playback PREVAUDIO Previous audio track - REPLACEME
+TV Playback PREVSUBTITLE Previous subtitle track REPLACEME
+TV Playback NEXTSUBTITLE Next subtitle track REPLACEME
+TV Playback NEXTAUDIO Next audio track + REPLACEME
+TV Playback SELECTCC708_3 Display ATSC CC4 REPLACEME
+TV Playback SELECTCC708_0 Display ATSC CC1 REPLACEME
+TV Playback SELECTCC608_1 Display VBI CC2 REPLACEME
+TV Playback SELECTAUDIO_0 Play audio track 1 REPLACEME
+TV Playback SELECTCC608_2 Display VBI CC3 REPLACEME
+TV Playback TOGGLETTM Toggle Teletext Menu REPLACEME
+TV Playback SELECTSUBTITLE_1 Display subtitle 2 REPLACEME
+TV Playback SELECTCC608_3 Display VBI CC4 REPLACEME
+TV Playback SELECTCC708_1 Display ATSC CC2 REPLACEME
+TV Playback SELECTCC708_2 Display ATSC CC3 REPLACEME
+TV Playback SELECTAUDIO_1 Play audio track 2 REPLACEME
+TV Playback SELECTSUBTITLE_0 Display subtitle 1 REPLACEME
+TV Playback TOGGLETTC Toggle Teletext Captions REPLACEME
+TV Playback SELECTCC608_0 Display VBI CC1 REPLACEME
+TV Playback SWAPPIP Swap PiP/Main N REPLACEME
+TV Playback TOGGLEASPECT Toggle the display aspect ratio W REPLACEME
+TV Playback TOGGLECC708 Toggle ATSC CC REPLACEME
+TV Playback TOGGLECC608 Toggle VBI CC REPLACEME
+TV Playback TOGGLEPIPMODE Toggle Picture-in-Picture mode V REPLACEME
+TV Playback TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Playback TOGGLEPIPWINDOW Toggle active PiP window B REPLACEME
+TV Playback MUTE Mute |,\\\\,F9 REPLACEME
+TV Playback TOGGLEBROWSE Toggle channel browse mode O REPLACEME
+TV Playback TOGGLESUBTITLE Toggle Subtitles REPLACEME
+TV Playback VOLUMEUP Volume up ],},F11 REPLACEME
+TV Playback TOGGLECC Toggle any captions T REPLACEME
+TV Playback JUMPSTART Jump to the start of the recording. Ctrl+B REPLACEME
+TV Playback TOGGLERECORD Toggle recording status of current program R REPLACEME
+TV Playback SKIPCOMMERCIAL Skip Commercial Z,End REPLACEME
+TV Playback VOLUMEDOWN Volume down [,{,F10 REPLACEME
+TV Playback SWITCHCARDS Switch Capture Cards Y REPLACEME
+TV Playback SKIPCOMMBACK Skip Commercial (Reverse) Q,Home REPLACEME
+TV Playback TOGGLEINPUTS Toggle Inputs C REPLACEME
+TV Playback FFWDSTICKY Fast Forward (Sticky) or Forward one frame while paused >,. REPLACEME
+TV Playback JUMPFFWD Jump ahead PgDown REPLACEME
+TV Playback PREVCHAN Switch to the previous channel H REPLACEME
+TV Playback JUMPBKMRK Jump to bookmark K REPLACEME
+TV Playback RWNDSTICKY Rewind (Sticky) or Rewind one frame while paused ,,< REPLACEME
+TV Playback NEXTFAV Switch to the next favorite channel / REPLACEME
+TV Playback JUMPRWND Jump back PgUp REPLACEME
+TV Playback SEEKRWND Rewind Left REPLACEME
+TV Playback SEEKFFWD Fast Forward Right REPLACEME
+TV Playback CHANNELDOWN Channel down Down REPLACEME
+TV Playback CHANNELUP Channel up Up REPLACEME
+TV Playback ARBSEEK Arbitrary Seek * REPLACEME
+TV Playback DELETE Delete Program D REPLACEME
+TV Playback CLEAROSD Clear OSD Backspace REPLACEME
+TV Frontend DETAILS Show program details U REPLACEME
+TV Frontend CUSTOMEDIT Edit Custom Record Rule E REPLACEME
+TV Frontend UPCOMING List upcoming episodes O REPLACEME
+TV Frontend CHANUPDATE Switch channels without exiting guide in Live TV mode. X REPLACEME
+TV Frontend RANKDEC Decrease program or channel rank Left REPLACEME
+TV Frontend VIEWCARD Switch Capture Card view Y REPLACEME
+TV Playback PAUSE Pause P REPLACEME
+TV Frontend RANKINC Increase program or channel rank Right REPLACEME
+TV Frontend PAGERIGHT Page the program guide right >,. REPLACEME
+TV Frontend PAGELEFT Page the program guide left ,,< REPLACEME
+TV Frontend NEXTFAV Toggle showing all channels or just favorites in the program guide. / REPLACEME
+Gallery DELETE Delete marked images or current image if none are marked D REPLACEME
+TV Frontend DAYRIGHT Page the program guide forward one day End,1 REPLACEME
+Gallery MARK Mark image T REPLACEME
+Game TOGGLEFAV Toggle the current game as a favorite ?,/ REPLACEME
+TV Frontend TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Frontend DAYLEFT Page the program guide back one day Home,7 REPLACEME
+Music PREVTRACK Move to the previous track ,,<,Q,Home REPLACEME
+Game INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+Music DELETE Delete track from playlist D REPLACEME
+Gallery INFO Toggle Showing Information about Image I REPLACEME
+Game INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music REFRESH Refresh music tree 8 REPLACEME
+Music NEXTTRACK Move to the next track >,.,Z,End REPLACEME
+Music FILTER Filter All My Music F REPLACEME
+Music THMBDOWN Decrease rating 7 REPLACEME
diff --git a/abs/core-testing/live-installer/templates/settings/default_2/settings.txt b/abs/core-testing/live-installer/templates/settings/default_2/settings.txt
new file mode 100644
index 0000000..106be04
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/settings/default_2/settings.txt
@@ -0,0 +1,320 @@
+value data hostname
+AC3PassThru 0 REPLACEME
+AggressiveSoundcardBuffer 0 REPLACEME
+AllowQuitShutdown 3 REPLACEME
+AltClearSavedPosition 1 REPLACEME
+AspectOverride 0 REPLACEME
+AudioNag 1 REPLACEME
+AudioOutputDevice /dev/dsp REPLACEME
+AutoCommercialSkip 2 REPLACEME
+AutoLookupCD 1 REPLACEME
+AutomaticSetWatched 0 REPLACEME
+AutoPlayCD 0 REPLACEME
+BackendServerPort 6543 REPLACEME
+BackendStatusPort 6544 REPLACEME
+CCBackground 0 REPLACEME
+CDBlankType fast REPLACEME
+CDCreateDir 1 REPLACEME
+CDDevice /dev/cdrom REPLACEME
+CDDiskSize 1 REPLACEME
+CDWriterEnabled 0 REPLACEME
+CDWriteSpeed 0 REPLACEME
+ChannelFormat <num> <sign> REPLACEME
+ChannelOrdering channum REPLACEME
+chanPerPage 5 REPLACEME
+ClearSavedPosition 1 REPLACEME
+CommNotifyAmount 0 REPLACEME
+CommRewindAmount 0 REPLACEME
+CustomFilters REPLACEME
+DateFormat ddd MMM d REPLACEME
+DecodeExtraAudio 1 REPLACEME
+Default MythVideo View 1 REPLACEME
+DefaultCCMode 0 REPLACEME
+DefaultRipQuality 0 REPLACEME
+DefaultTVChannel 3 REPLACEME
+Deinterlace 1 REPLACEME
+DeinterlaceFilter kerneldeint REPLACEME
+DisplayGroupDefaultView 0 REPLACEME
+DisplayGroupTitleSort 0 REPLACEME
+DisplayRecGroup Default REPLACEME
+DispRecGroupAsAllProg 0 REPLACEME
+DTSPassThru 0 REPLACEME
+DVDDeviceLocation /dev/dvd REPLACEME
+DVDOnInsertDVD 1 REPLACEME
+DVDRipLocation /data/media/tmp REPLACEME
+EjectCDAfterRipping 1 REPLACEME
+EnableMHEG 0 REPLACEME
+EnableXbox 0 REPLACEME
+EnableXbox 0 REPLACEME
+EncoderType ogg REPLACEME
+EndOfRecordingExitPrompt 1 REPLACEME
+EPGFillType 10 REPLACEME
+EPGScrollType 1 REPLACEME
+EPGShowCategoryColors 1 REPLACEME
+EPGShowCategoryText 1 REPLACEME
+EPGShowChannelIcon 1 REPLACEME
+EPGShowFavorites 0 REPLACEME
+ExactSeeking 0 REPLACEME
+FFRewReposTime 100 REPLACEME
+FFRewReverse 1 REPLACEME
+FilenameTemplate ARTIST/ALBUM/TRACK-TITLE REPLACEME
+GalleryDir /data/media/images REPLACEME
+GalleryImportDirs /mnt/cdrom:/mnt/camera REPLACEME
+GalleryMoviePlayerCmd mplayer -fs %s REPLACEME
+GalleryOverlayCaption 0 REPLACEME
+GalleryRecursiveSlideshow 1 REPLACEME
+GallerySortOrder 20 REPLACEME
+GalleryThumbnailLocation 1 REPLACEME
+GameAllTreeLevels system gamename REPLACEME
+GameFavTreeLevels gamename REPLACEME
+GeneratePreviewPixmaps 0 REPLACEME
+GuiHeight 0 REPLACEME
+GuiOffsetX 0 REPLACEME
+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
+IndividualMuteControl 0 REPLACEME
+IntelliLastPlayWeight 25 REPLACEME
+IntelliPlayCountWeight 25 REPLACEME
+IntelliRandomWeight 15 REPLACEME
+IntelliRatingWeight 35 REPLACEME
+ISO639Language0 eng REPLACEME
+ISO639Language1 eng REPLACEME
+JobAllowCommFlag 1 REPLACEME
+JobAllowTranscode 1 REPLACEME
+JobQueueCheckFrequency 60 REPLACEME
+JobQueueCPU 0 REPLACEME
+JobQueueMaxSimultaneousJobs 1 REPLACEME
+JobQueueWindowEnd 23:59 REPLACEME
+JobQueueWindowStart 00:00 REPLACEME
+KeyboardAccelerators 1 REPLACEME
+Language EN REPLACEME
+LastMusicPlaylistPush 0 REPLACEME
+LCDBacklightOn 1 REPLACEME
+LCDBigClock 0 REPLACEME
+LCDEnable 0 REPLACEME
+LCDHeartBeatOn 0 REPLACEME
+LCDKeyString ABCDEF REPLACEME
+LCDPopupTime 5 REPLACEME
+LCDShowChannel 1 REPLACEME
+LCDShowGeneric 1 REPLACEME
+LCDShowMenu 1 REPLACEME
+LCDShowMusic 1 REPLACEME
+LCDShowMusicItems ArtistTitle REPLACEME
+LCDShowRecStatus 0 REPLACEME
+LCDShowTime 1 REPLACEME
+LCDShowVolume 1 REPLACEME
+LircKeyPressedApp REPLACEME
+ListAsShuffled 0 REPLACEME
+LiveTVInAllPrograms 0 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogMaxCount 100 REPLACEME
+LogMaxCount 100 REPLACEME
+LogPrintLevel 8 REPLACEME
+LogPrintLevel 8 REPLACEME
+LongChannelFormat <num> <name> REPLACEME
+MasterMixerVolume 70 REPLACEME
+MenuTheme STB-menu REPLACEME
+MixerControl PCM REPLACEME
+MixerDevice /dev/mixer REPLACEME
+MonitorDrives 0 REPLACEME
+MovieDataCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -D REPLACEME
+MovieListCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no REPLACEME
+MoviePosterCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -P REPLACEME
+Mp3UseVBR 0 REPLACEME
+MTDac3Flag 0 REPLACEME
+MTDConcurrentTranscodes 1 REPLACEME
+MTDLogFlag 0 REPLACEME
+MTDNiceLevel 20 REPLACEME
+MTDPort 2442 REPLACEME
+MTDRipSize 0 REPLACEME
+MTDxvidFlag 1 REPLACEME
+MusicAudioDevice default REPLACEME
+MusicLocation /data/media/audio REPLACEME
+MusicShowRatings 0 REPLACEME
+MythArchiveAlwaysUseMythTranscode 1 REPLACEME
+MythArchiveChapterMenuAR Video REPLACEME
+MythArchiveCopyRemoteFiles 1 REPLACEME
+MythArchiveDateFormat %a %b %d REPLACEME
+MythArchiveDvdauthorCmd dvdauthor REPLACEME
+MythArchiveDVDLocation /dev/dvd REPLACEME
+MythArchiveEncodeToAc3 1 REPLACEME
+MythArchiveFfmpegCmd ffmpeg REPLACEME
+MythArchiveFileFilter *.mpg *.mov *.avi *.mpeg *.nuv REPLACEME
+MythArchiveGrowisofsCmd growisofs REPLACEME
+MythArchiveMainMenuAR 16:9 REPLACEME
+MythArchiveMkisofsCmd mkisofs REPLACEME
+MythArchiveMpeg2encCmd mpeg2enc REPLACEME
+MythArchiveMplexCmd mplex REPLACEME
+MythArchivePng2yuvCmd png2yuv REPLACEME
+MythArchiveShareDir /usr/local/share/mythtv/mytharchive/ REPLACEME
+MythArchiveSpumuxCmd spumux REPLACEME
+MythArchiveTcrequantCmd tcrequant REPLACEME
+MythArchiveTempDir /data/media/tmp REPLACEME
+MythArchiveTimeFormat %I:%M %p REPLACEME
+MythArchiveUseFIFO 1 REPLACEME
+MythArchiveVideoFormat NTSC REPLACEME
+MythControlsVolume 1 REPLACEME
+mythdvd.DVDPlayerCommand Internal REPLACEME
+mythvideo.db_folder_view 1 REPLACEME
+mythvideo.ImageCacheSize 50 REPLACEME
+mythvideo.sort_ignores_case 1 REPLACEME
+NetworkControlEnabled 1 REPLACEME
+NetworkControlPort 6546 REPLACEME
+NonID3FileNameFormat GENRE/ARTIST/ALBUM/TRACK_TITLE REPLACEME
+NoPromptOnExit 0 REPLACEME
+NoWhitespace 0 REPLACEME
+OnlyImportNewMusic 0 REPLACEME
+OSDCC708CapitalsFont FreeMono.ttf REPLACEME
+OSDCC708CapitalsItalicFont FreeMono.ttf REPLACEME
+OSDCC708CasualFont FreeMono.ttf REPLACEME
+OSDCC708CasualItalicFont FreeMono.ttf REPLACEME
+OSDCC708CursiveFont FreeMono.ttf REPLACEME
+OSDCC708CursiveItalicFont FreeMono.ttf REPLACEME
+OSDCC708DefaultFontType MonoSerif REPLACEME
+OSDCC708MonoSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708TextZoom 100 REPLACEME
+OSDCCFont FreeMono.ttf REPLACEME
+OSDFont FreeMono.ttf REPLACEME
+OSDGeneralTimeout 2 REPLACEME
+OSDNotifyTimeout 6 REPLACEME
+OSDProgramInfoTimeout 3 REPLACEME
+OSDTheme Gray-OSD REPLACEME
+OSDThemeFontSizeType default REPLACEME
+ParanoiaLevel Full REPLACEME
+PassThruOutputDevice Default REPLACEME
+PCMMixerVolume 70 REPLACEME
+PersistentBrowseMode 1 REPLACEME
+PIPLocation 0 REPLACEME
+PlaybackBoxStartInTitle 1 REPLACEME
+PlaybackExitPrompt 2 REPLACEME
+PlaybackPreview 1 REPLACEME
+PlaybackPreviewLowCPU 1 REPLACEME
+PlayBoxEpisodeSort Date REPLACEME
+PlayBoxOrdering 1 REPLACEME
+PlayBoxShading 0 REPLACEME
+PlayBoxTransparency 1 REPLACEME
+PlayMode none REPLACEME
+PostCDRipScript REPLACEME
+PreferredMPEG2Decoder ffmpeg REPLACEME
+PreviewFromBookmark 1 REPLACEME
+PVR350EPGAlphaValue 164 REPLACEME
+PVR350InternalAudioOnly 0 REPLACEME
+PVR350OutputEnable 0 REPLACEME
+PVR350VideoDev /dev/video16 REPLACEME
+QtFontBig 25 REPLACEME
+QtFontMedium 16 REPLACEME
+QtFontSmall 12 REPLACEME
+QueryInitialFilter 0 REPLACEME
+RandomTheme 0 REPLACEME
+RealtimePriority 1 REPLACEME
+RecordFilePrefix /data/media/video/recordings REPLACEME
+RememberRecGroup 1 REPLACEME
+RepeatMode all REPLACEME
+RunFrontendInWindow 0 REPLACEME
+SelChangeRecThreshold 16 REPLACEME
+SelectChangesChannel 1 REPLACEME
+ServiceMythWEB 0 REPLACEME
+ServiceNFS 0 REPLACEME
+ServiceSamba 0 REPLACEME
+SetupPinCodeRequired 0 REPLACEME
+ShortDateFormat M/d REPLACEME
+ShowGroupInfo 0 REPLACEME
+ShowWholeTree 1 REPLACEME
+SlideshowBackground REPLACEME
+SlideshowDelay 5 REPLACEME
+SlideshowOpenGLTransition none REPLACEME
+SlideshowOpenGLTransitionLength 2000 REPLACEME
+SlideshowTransition none REPLACEME
+SmartChannelChange 0 REPLACEME
+SmartForward 0 REPLACEME
+StickyKeys 1 REPLACEME
+Style REPLACEME
+SubTitleCommand -sid %s REPLACEME
+TagSeparator - REPLACEME
+Theme basic-blue REPLACEME
+ThemeFontSizeType default REPLACEME
+ThemePainter qt REPLACEME
+TimeFormat h:mm AP REPLACEME
+timePerPage 4 REPLACEME
+TitlePlayCommand mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c REPLACEME
+TranscodeCommand transcode REPLACEME
+TreeLevels splitartist artist album title REPLACEME
+TVVidModeForceAspect 0.0 REPLACEME
+TVVidModeForceAspect0 0.0 REPLACEME
+TVVidModeForceAspect1 0.0 REPLACEME
+TVVidModeForceAspect2 0.0 REPLACEME
+TVVidModeRefreshRate 0 REPLACEME
+TVVidModeRefreshRate0 0 REPLACEME
+TVVidModeRefreshRate1 0 REPLACEME
+TVVidModeRefreshRate2 0 REPLACEME
+TVVidModeResolution 640x480 REPLACEME
+TVVidModeResolution0 640x480 REPLACEME
+TVVidModeResolution1 640x480 REPLACEME
+TVVidModeResolution2 640x480 REPLACEME
+UDPNotifyPort 6948 REPLACEME
+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
+UseVirtualKeyboard 1 REPLACEME
+VCDDeviceLocation /dev/cdrom REPLACEME
+VCDPlayerCommand mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv REPLACEME
+VertScanPercentage 0 REPLACEME
+VideoAggressivePC 0 REPLACEME
+VideoArtworkDir /data/media/images/posters REPLACEME
+VideoBrowserNoDB 0 REPLACEME
+VideoDefaultParentalLevel 4 REPLACEME
+VideoGalleryAspectRatio 1 REPLACEME
+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
+VideoStartupDir /data/media/video/movies REPLACEME
+VideoTreeLoadMetaData 1 REPLACEME
+VideoTreeNoDB 0 REPLACEME
+VidModeHeight0 0 REPLACEME
+VidModeHeight1 0 REPLACEME
+VidModeHeight2 0 REPLACEME
+VidModeWidth0 0 REPLACEME
+VidModeWidth1 0 REPLACEME
+VidModeWidth2 0 REPLACEME
+VisualCycleOnSongChange 0 REPLACEME
+VisualMode Random REPLACEME
+VisualModeDelay 0 REPLACEME
+VisualScaleHeight 1 REPLACEME
+VisualScaleWidth 1 REPLACEME
+WatchTVGuide 0 REPLACEME
+WebBrowserCommand /usr/local/bin/mythbrowser REPLACEME
+WebBrowserHideScrollbars 0 REPLACEME
+WebBrowserScrollMode 1 REPLACEME
+WebBrowserScrollSpeed 4 REPLACEME
+WebBrowserZoomLevel 20 REPLACEME
+XScanDisplacement 0 REPLACEME
+YScanDisplacement 0 REPLACEME
diff --git a/abs/core-testing/live-installer/templates/sources/mv-core b/abs/core-testing/live-installer/templates/sources/mv-core
new file mode 100644
index 0000000..f9f6c97
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/sources/mv-core
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-core
diff --git a/abs/core-testing/live-installer/templates/sources/mv-core-testing b/abs/core-testing/live-installer/templates/sources/mv-core-testing
new file mode 100644
index 0000000..1fce6ea
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/sources/mv-core-testing
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-core-testing
diff --git a/abs/core-testing/live-installer/templates/sources/mv-extra b/abs/core-testing/live-installer/templates/sources/mv-extra
new file mode 100644
index 0000000..e13640f
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/sources/mv-extra
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-extra
diff --git a/abs/core-testing/live-installer/templates/sources/mv-extra-testing b/abs/core-testing/live-installer/templates/sources/mv-extra-testing
new file mode 100644
index 0000000..c176add
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/sources/mv-extra-testing
@@ -0,0 +1,2 @@
+##Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-extra-testing
diff --git a/abs/core-testing/live-installer/templates/sources/svc_pkg b/abs/core-testing/live-installer/templates/sources/svc_pkg
new file mode 100644
index 0000000..c1efdcc
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/sources/svc_pkg
@@ -0,0 +1,3 @@
+[svc_pkg]
+Server = http://REPLACEME/repo/mirror/svc_pkg/os/i686
+
diff --git a/abs/core-testing/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf b/abs/core-testing/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf
new file mode 100755
index 0000000..51db997
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf
@@ -0,0 +1,413 @@
+#
+
+begin remote
+
+ name Time_Warner_SA3250
+ flags CONST_LENGTH|RAW_CODES
+ eps 30
+ aeps 100
+
+ ptrail 0
+ repeat 0 0
+ gap 100240
+ frequency 57600
+
+ begin raw_codes
+
+ name MUTE
+ 972 802 971 802 1887 778
+ 971 798 971 798 972 798
+ 971 798 972 798 971 1677
+ 972 802 1887 1656 992
+
+ name POWER
+ 3450 3229 894 2468 891 2468
+ 893 778 892 2468 891 2469
+ 917 2444 891 2468 892 2469
+ 891 779 892 778 918 752
+ 917 754 917 752 892 2471
+ 889 779 892 779 892 777
+ 892 779 892 777 868 2492
+ 892 2469 891 2470 890
+
+ name GUIDE
+ 3397 3285 890 2470 840 2519
+ 916 755 891 2470 839 2520
+ 891 780 891 2474 860 2495
+ 892 778 917 754 890 780
+ 891 781 864 804 917 2443
+ 865 805 891 779 866 2495
+ 864 805 892 779 891 2469
+ 865 2495 891 2469 866
+
+
+ name INFO
+ 3449 3231 918 2441 920 2440
+ 920 750 947 2414 920 2440
+ 920 750 894 777 919 750
+ 947 2413 921 750 919 750
+ 920 751 919 752 918 2441
+ 921 749 895 776 919 2441
+ 920 2440 920 2441 920 749
+ 921 2439 921 2440 921
+
+ name UP
+ 3396 3285 915 2444 919 2442
+ 918 752 916 2444 919 2441
+ 919 751 916 2445 919 751
+ 890 780 916 753 917 754
+ 942 729 889 780 916 2445
+ 919 751 915 756 914 2448
+ 916 752 916 2444 918 2442
+ 919 2441 918 2443 918
+
+ name DOWN
+ 3421 3261 890 2470 918 2442
+ 919 751 916 2446 917 2441
+ 919 2442 918 2442 918 752
+ 916 2444 919 751 890 780
+ 916 755 915 755 915 2445
+ 919 753 914 755 889 781
+ 889 781 916 2444 919 752
+ 889 2471 919 2441 918
+
+ name LEFT
+ 3427 3255 918 2441 924 2437
+ 920 750 918 2442 920 2441
+ 919 2440 921 2439 921 750
+ 919 751 944 726 919 752
+ 917 753 918 751 944 2417
+ 920 750 893 777 919 751
+ 919 752 918 2441 921 2440
+ 920 2440 920 2440 921
+
+ name RIGHT
+ 3424 3258 892 2466 921 2439
+ 896 774 920 2441 920 2440
+ 920 750 920 751 945 2414
+ 921 750 919 751 920 750
+ 919 752 919 751 919 2440
+ 921 750 918 752 918 2442
+ 920 2440 921 749 918 2443
+ 920 2440 920 2441 919
+
+ name SELECT
+ 3424 3257 944 2416 919 2442
+ 919 750 918 2442 920 2441
+ 919 751 943 727 918 2442
+ 920 2440 920 752 916 752
+ 969 702 917 753 892 2468
+ 919 751 892 778 918 2442
+ 924 2436 921 750 917 753
+ 918 2443 919 2441 919
+
+ name SETTINGS
+ 3402 3278 871 2491 921 2438
+ 921 749 922 2440 919 2441
+ 919 2440 921 749 921 750
+ 895 2465 920 2440 921 2440
+ 920 749 896 775 921 2439
+ 920 749 923 748 895 775
+ 922 2439 920 2440 920 749
+ 897 774 896 774 921
+
+ name EXIT
+ 3400 3279 896 2464 921 2439
+ 921 750 895 2465 921 2439
+ 921 749 898 772 896 2465
+ 920 2440 920 750 920 2441
+ 920 749 896 774 870 2491
+ 921 749 921 749 895 2465
+ 921 2440 920 749 922 748
+ 897 2464 920 750 896
+
+ name PGUP
+ 3425 3255 920 2440 920 2440
+ 921 749 895 2466 920 2440
+ 920 749 920 2441 896 2464
+ 921 749 919 2445 917 2440
+ 920 750 920 750 920 2441
+ 921 748 921 749 920 2440
+ 921 750 919 752 919 2440
+ 921 749 921 750 919
+
+ name PGDN
+ 3400 3281 921 2438 921 2441
+ 920 749 895 2465 896 2465
+ 920 2440 920 2440 920 2440
+ 921 749 896 2465 895 2465
+ 920 750 895 775 920 2440
+ 921 749 921 750 895 775
+ 896 774 896 774 921 2439
+ 921 749 921 751 894
+
+ name VOLUP
+ 995 778 1886 779 994 775
+ 995 777 993 774 996 774
+ 995 775 995 1654 1885 778
+ 995 775 995 774 995
+
+ name VOLDN
+ 996 778 971 802 1862 803
+ 970 799 996 774 995 774
+ 996 774 995 1654 1886 778
+ 996 773 971 1678 991
+
+ name CHUP
+ 3421 3259 916 2444 918 2443
+ 918 751 917 2444 919 2441
+ 919 2441 919 751 916 2444
+ 919 2441 919 2443 918 751
+ 941 729 916 755 917 2442
+ 919 752 916 754 891 778
+ 918 2444 918 751 916 754
+ 917 753 916 2445 919
+
+ name CHDN
+ 3421 3260 915 2445 918 2442
+ 919 751 891 2469 919 2441
+ 927 745 915 2444 919 2441
+ 919 2441 919 2442 918 752
+ 915 755 890 780 917 2443
+ 919 752 916 754 915 2445
+ 919 751 915 755 890 781
+ 914 756 916 2445 917
+
+ name A
+ 3425 3258 916 2442 920 2441
+ 919 751 918 2442 919 2441
+ 920 2440 920 2441 919 2441
+ 919 2441 920 750 917 2443
+ 920 751 917 752 919 2442
+ 920 750 918 753 917 753
+ 917 753 942 728 917 753
+ 918 2442 920 750 942
+
+ name B
+ 3398 3283 916 2443 892 2470
+ 892 778 892 2468 891 2475
+ 886 779 916 754 892 777
+ 892 778 919 2442 891 2468
+ 918 753 892 778 891 2469
+ 892 778 892 778 918 2443
+ 891 2469 892 2467 893 2469
+ 891 778 918 753 892
+
+ name C
+ 3396 3283 891 2469 892 2468
+ 892 778 917 2444 892 2468
+ 892 2469 891 778 892 779
+ 893 777 892 2468 892 2468
+ 918 752 893 777 892 2469
+ 892 778 892 778 867 802
+ 918 2444 917 2442 868 2492
+ 893 778 892 779 916
+
+ name 1
+ 3424 3257 890 2470 865 2495
+ 891 780 892 2468 865 2495
+ 892 777 891 780 892 779
+ 890 780 916 2444 865 805
+ 891 779 917 753 916 2445
+ 865 805 916 754 892 2469
+ 865 2494 916 2445 865 2495
+ 891 779 917 2443 866
+
+ name 2
+ 3422 3258 916 2444 865 2496
+ 889 782 915 2444 865 2495
+ 917 2444 839 830 891 780
+ 915 755 890 2470 864 806
+ 917 753 891 780 866 2495
+ 864 805 891 779 892 779
+ 865 2494 865 2496 891 2469
+ 865 805 891 2469 865
+
+ name 3
+ 3397 3284 916 2443 892 2468
+ 892 779 893 2467 892 2468
+ 917 753 892 2469 891 778
+ 893 778 891 2469 892 778
+ 918 753 890 779 893 2468
+ 891 779 893 778 891 2469
+ 892 777 893 2468 891 2468
+ 917 754 943 2417 892
+
+ name 4
+ 3421 3261 890 2470 839 2520
+ 917 753 891 2470 865 2495
+ 917 2443 865 2495 890 781
+ 891 778 891 2470 865 804
+ 895 776 892 779 891 2468
+ 866 805 917 753 943 727
+ 866 805 889 2471 865 2494
+ 892 780 916 2444 865
+
+ name 5
+ 3396 3282 920 2441 892 2467
+ 894 778 891 2468 892 2469
+ 891 780 866 802 893 2470
+ 890 779 918 2443 891 777
+ 892 779 918 752 892 2468
+ 892 779 918 752 918 2443
+ 891 2469 891 779 891 2469
+ 892 778 891 2468 893
+
+ name 6
+ 3396 3284 918 2442 866 2494
+ 892 778 917 2444 866 2494
+ 917 2444 865 804 893 2468
+ 890 780 916 2445 890 779
+ 892 779 891 778 918 2443
+ 891 778 892 779 892 779
+ 891 2468 892 778 919 2444
+ 889 778 893 2468 891
+
+ name 7
+ 3398 3282 893 2467 892 2468
+ 893 779 891 2469 891 2468
+ 919 752 892 2467 892 2469
+ 891 779 892 2468 892 777
+ 893 778 918 752 892 2468
+ 893 779 916 753 918 2442
+ 892 779 891 778 893 2468
+ 892 778 893 2467 892
+
+ name 8
+ 3448 3232 892 2468 866 2494
+ 892 779 892 2467 867 2494
+ 891 2469 866 2495 891 2469
+ 865 805 968 2394 864 804
+ 918 753 891 779 892 2468
+ 866 804 917 754 891 780
+ 916 752 917 754 892 2469
+ 865 804 893 2468 890
+
+ name 9
+ 3422 3258 891 2469 839 2521
+ 891 780 892 2468 824 2536
+ 916 754 916 755 891 779
+ 866 2494 839 2522 891 778
+ 892 778 890 781 915 2448
+ 837 831 891 779 890 2470
+ 837 2523 942 2418 838 832
+ 892 778 890 2471 839
+
+ name 0
+ 3398 3284 891 2469 890 2469
+ 893 779 891 2468 892 2468
+ 892 2468 892 778 892 779
+ 891 2469 892 2468 893 778
+ 892 777 893 777 893 2469
+ 891 778 892 779 868 802
+ 917 2443 892 2469 890 779
+ 891 779 892 2468 893
+
+ name LAST
+ 3422 3258 891 2471 916 2443
+ 891 780 891 2469 272 3088
+ 865 805 916 2445 308 3052
+ 890 2469 892 779 915 756
+ 889 781 889 780 890 2471
+ 890 779 889 781 891 2471
+ 272 1397 890 779 891 781
+ 890 2469 448 2912 917
+
+ name FAV
+ 3423 3257 918 2442 944 2417
+ 917 753 892 2469 890 2471
+ 324 3036 890 2469 379 289
+ 167 2525 891 2470 379 2981
+ 890 780 378 270 242 781
+ 866 806 889 2469 786 884
+ 891 779 891 779 892 779
+ 916 754 890 779 892 778
+ 891 2470 839
+
+ name REW
+ 3420 3258 916 2445 326 3033
+ 891 780 916 2443 891 2469
+ 916 2445 838 831 918 754
+ 890 2471 837 832 916 2444
+ 838 832 891 779 916 2445
+ 838 831 892 779 890 780
+ 892 2469 839 2520 891 780
+ 915 2444 836 836 890
+
+ name PLAY
+ 3448 3233 916 2444 891 2469
+ 917 753 892 2468 918 2443
+ 941 2420 891 2468 917 754
+ 915 755 914 2446 918 2443
+ 916 754 916 753 945 2416
+ 943 727 941 729 918 752
+ 917 753 919 2442 916 2444
+ 915 755 943 728 916
+
+ name FF
+ 3420 3259 917 2442 946 2415
+ 918 752 916 2445 918 2441
+ 943 728 917 753 942 728
+ 892 2470 864 806 889 2471
+ 865 805 918 752 916 2443
+ 944 726 892 779 891 2470
+ 891 2469 915 2445 917 753
+ 890 2471 222 1447 891
+
+ name PAUSE
+ 3421 3259 891 2470 787 2573
+ 890 780 916 2444 840 2520
+ 892 2468 864 806 917 2444
+ 839 831 890 780 891 779
+ 891 780 891 779 889 2471
+ 839 831 916 755 915 754
+ 892 2469 839 830 917 2444
+ 840 2521 891 2469 840
+
+ name STOP
+ 3398 3284 889 2471 325 3036
+ 891 779 890 2470 395 290
+ 140 2535 889 781 890 781
+ 889 2470 274 1397 891 2470
+ 272 3087 917 754 890 780
+ 889 2472 293 1377 890 779
+ 916 2444 448 2913 916 754
+ 866 2495 325 1344 891 779
+ 915
+
+ name REC
+ 3421 3258 917 2444 916 2444
+ 942 729 942 2420 889 2469
+ 992 2367 942 730 891 2468
+ 917 754 916 2443 892 2470
+ 892 777 916 754 892 2467
+ 943 730 916 754 891 779
+ 917 2442 917 754 943 2417
+ 918 753 915 754 892
+
+ name BYPASS
+ 3450 3231 891 2470 890 2470
+ 917 753 916 2447 913 2445
+ 273 3088 889 780 890 2470
+ 891 2469 916 755 890 780
+ 942 727 918 752 916 2444
+ 890 782 916 754 865 805
+ 891 2469 891 780 889 781
+ 891 2468 259 3102 866
+
+ name TV/VCR
+ 19945 3915 612 1873 560 1926
+ 560 1925 561 931 560 931
+ 587 905 559 931 563 931
+ 557 932 561 1925 585 908
+ 583 1901 559 931 586 905
+ 585 907 610 1875 561 1924
+ 561 1926 559 1926 535 1951
+ 559 1925 586 907 585 1899
+ 560 931 1048 7898 3707 3862
+ 587 1899 586 1899 586 1900
+ 559 932 586 908 323
+
+ end raw_codes
+
+ end remote
diff --git a/abs/core-testing/live-installer/templates/xine.config.template b/abs/core-testing/live-installer/templates/xine.config.template
new file mode 100644
index 0000000..966487f
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xine.config.template
@@ -0,0 +1,754 @@
+#
+# xine config file
+#
+.version:2
+
+# Entries which are still set to their default values are commented out.
+# Remove the '#' at the beginning of the line, if you want to change them.
+
+# Enable deinterlacing by default
+# bool, default: 0
+#gui.deinterlace_by_default:0
+
+# Configuration experience level
+# { Beginner Advanced Expert Master of the known universe }, default: 0
+gui.experience_level:Expert
+
+# Enable OSD support
+# bool, default: 1
+#gui.osd_enabled:1
+
+# Dismiss OSD time (s)
+# numeric, default: 3
+#gui.osd_timeout:3
+
+# Ask user for playback with unsupported codec
+# bool, default: 0
+#gui.play_anyway:0
+
+# Automatically reload old playlist
+# bool, default: 0
+#gui.playlist_auto_reload:0
+
+# Audio visualization plugin
+# { oscope fftscope fftgraph goom }, default: 0
+gui.post_audio_plugin:fftgraph
+
+# gui skin theme
+# { Antares Centori KeramicRH8 cloudy xinetic }, default: 4
+gui.skin:KeramicRH8
+
+# Change xine's behavior for unexperienced user
+# bool, default: 1
+#gui.smart_mode:1
+
+# Snapshot location
+# string, default: /home/jams
+#gui.snapshotdir:/home/jams
+
+# Display splash screen
+# bool, default: 1
+gui.splash:0
+
+# Subtitle autoloading
+# bool, default: 1
+#gui.subtitle_autoload:1
+
+# Visual animation style
+# { None Post Plugin Stream Animation }, default: 1
+#gui.visual_anim:Post Plugin
+
+# Windows stacking (more)
+# bool, default: 0
+#gui.always_layer_above:0
+
+# Audio mixer control method
+# { Sound card Software }, default: 0
+#gui.audio_mixer_method:Sound card
+
+# Visiblility behavior of panel
+# bool, default: 0
+#gui.auto_panel_visibility:0
+
+# Visibility behavior of output window
+# bool, default: 0
+#gui.auto_video_output_visibility:0
+
+# Deinterlace plugin.
+# string, default: tvtime:method=LinearBlend,cheap_mode=1,pulldown=0,use_progressive_frame_flag=1
+#gui.deinterlace_plugin:tvtime:method=LinearBlend,cheap_mode=1,pulldown=0,use_progressive_frame_flag=1
+
+# Event sender behavior
+# bool, default: 1
+#gui.eventer_sticky:1
+
+# Windows stacking
+# bool, default: 0
+#gui.layer_above:0
+
+# Use unscaled OSD
+# bool, default: 1
+gui.osd_use_unscaled:0
+
+# Screensaver reset interval (s)
+# numeric, default: 10
+#gui.screensaver_timeout:10
+
+# Menu shortcut style
+# { Windows style Emacs style }, default: 0
+#gui.shortcut_style:Windows style
+
+# Stream information
+# bool, default: 0
+#gui.sinfo_auto_update:0
+
+# Skin Server Url
+# string, default: http://xine.sourceforge.net/skins/skins.slx
+#gui.skin_server_url:http://xine.sourceforge.net/skins/skins.slx
+
+# Chapter hopping
+# bool, default: 1
+#gui.skip_by_chapter:1
+
+# New stream sizes resize output window
+# bool, default: 1
+#gui.stream_resize_window:1
+
+# Tips timeout (ms)
+# numeric, default: 5000
+#gui.tips_timeout:5000
+
+# gui tips visibility
+# bool, default: 1
+#gui.tips_visible:1
+
+# Name of video display
+# string, default:
+#gui.video_display:
+
+# Synchronized X protocol (debug)
+# bool, default: 0
+#gui.xsynchronize:0
+
+# Double size for small streams (require stream_resize_window)
+# bool, default: 0
+#gui.zoom_small_stream:0
+
+# Logo mrl
+# string, default: file:/usr/share/xine/skins/xine-ui_logo.mpv
+#gui.logo_mrl:file:/usr/share/xine/skins/xine-ui_logo.mpv
+
+# use XVidModeExtension when switching to fullscreen
+# bool, default: 0
+#gui.use_xvidext:0
+
+# height for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_height:-8192
+
+# width for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_width:-8192
+
+# x coordinate for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_x:-8192
+
+# y coordinate for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_y:-8192
+
+# Screens to use in order to do a very fullscreen in xinerama mode. (example 0 2 3)
+# string, default: 0 1
+#gui.xinerama_use_screens:0 1
+
+# Amplification level
+# [0..200], default: 100
+#gui.amp_level:100
+
+# gui panel visibility
+# bool, default: 1
+gui.panel_visible:0
+
+# numeric, default: 200
+gui.panel_x:21
+
+# numeric, default: 100
+gui.panel_y:1050
+
+gui.control_x:186
+
+gui.control_y:46
+
+gui.dropped_frames_warning:0
+
+gui.eventer_x:1041
+
+gui.eventer_y:781
+
+gui.mrl_browser_x:23
+
+gui.mrl_browser_y:9
+
+gui.setup_x:717
+
+gui.setup_y:227
+
+gui.viewlog_x:200
+
+gui.viewlog_y:210
+
+# color specification yuv-opacity
+# string, default: 8080c0-f
+#gui.osdmenu.color_focused_button:8080c0-f
+
+# color specification yuv-opacity
+# string, default: 808080-f
+#gui.osdmenu.color_focused_slider:808080-f
+
+# color specification yuv-opacity
+# string, default: ff8080-f
+#gui.osdmenu.color_focused_slider_knob:ff8080-f
+
+# color specification yuv-opacity
+# string, default: 808080-f
+#gui.osdmenu.color_focused_text_border:808080-f
+
+# color specification yuv-opacity
+# string, default: ff8080-f
+#gui.osdmenu.color_focused_text_foreground:ff8080-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_label_border:0080c0-f
+
+# color specification yuv-opacity
+# string, default: c08080-f
+#gui.osdmenu.color_label_foreground:c08080-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_label_window:0080c0-f
+
+# color specification yuv-opacity
+# string, default: 008000-f
+#gui.osdmenu.color_slider:008000-f
+
+# color specification yuv-opacity
+# string, default: ffff00-f
+#gui.osdmenu.color_slider_knob:ffff00-f
+
+# color specification yuv-opacity
+# string, default: 008000-f
+#gui.osdmenu.color_text_border:008000-f
+
+# color specification yuv-opacity
+# string, default: ffff00-f
+#gui.osdmenu.color_text_foreground:ffff00-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_text_window:0080c0-f
+
+# directory a media in dvd device will be mounted
+# string, default: /dvd
+#gui.osdmenu.dvd_mountpoint:/dvd
+
+# palette (foreground-border-background) to use for subtitles and OSD
+# { white-black-transparent white-none-transparent white-none-translucid yellow-black-transparent }, default: 0
+#ui.osd.text_palette:white-black-transparent
+
+# audio driver to use
+# { auto null alsa oss esd file none }, default: 0
+audio.driver:oss
+
+# a/v sync method to use by OSS
+# { auto getodelay getoptr softsync probebuffer }, default: 0
+#audio.oss_sync_method:auto
+
+# use A/52 dynamic range compression
+# bool, default: 0
+#audio.a52.dynamic_range:0
+
+# downmix audio to 2 channel surround stereo
+# bool, default: 0
+#audio.a52.surround_downmix:0
+
+# A/52 volume
+# [0..200], default: 100
+#audio.a52.level:100
+
+# OSS audio device name
+# { auto /dev/dsp /dev/sound/dsp }, default: 0
+#audio.device.oss_device_name:auto
+
+# OSS audio device number, -1 for none
+# numeric, default: -1
+#audio.device.oss_device_number:-1
+
+# OSS audio mixer number, -1 for none
+# numeric, default: -1
+#audio.device.oss_mixer_number:-1
+
+audio.device.alsa_front_device:default
+
+# speaker arrangement
+# { Mono 1.0 Stereo 2.0 Headphones 2.0 Stereo 2.1 Surround 3.0 Surround 4.0 Surround 4.1 Surround 5.0 Surround 5.1 Surround 6.0 Surround 6.1 Surround 7.1 Pass Through }, default: 1
+#audio.output.speaker_arrangement:Stereo 2.0
+
+# offset for digital passthrough
+# numeric, default: 0
+#audio.synchronization.passthrough_offset:0
+
+# play audio even on slow/fast speeds
+# bool, default: 0
+#audio.synchronization.slow_fast_audio:0
+
+# method to sync audio and video
+# { metronom feedback resample }, default: 0
+#audio.synchronization.av_sync_method:metronom feedback
+
+# always resample to this rate (0 to disable)
+# numeric, default: 0
+#audio.synchronization.force_rate:0
+
+# enable resampling
+# { auto off on }, default: 0
+#audio.synchronization.resample_mode:auto
+
+# startup audio volume
+# [0..100], default: 50
+#audio.volume.mixer_volume:50
+
+# restore volume level at startup
+# bool, default: 0
+#audio.volume.remember_volume:0
+
+# video driver to use
+# { auto aadxr3 dxr3 xv opengl SyncFB xshm none xxmc sdl vidixfb vidix fb xvmc }, default: 0
+#video.driver:auto
+
+# pitch alignment workaround
+# bool, default: 0
+#video.device.xv_pitch_alignment:0
+
+# disable exact alpha blending of overlays
+# bool, default: 0
+#video.output.disable_exact_alphablend:0
+
+# disable all video scaling
+# bool, default: 0
+#video.output.disable_scaling:0
+
+# horizontal image position in the output window
+# [0..100], default: 50
+#video.output.horizontal_position:50
+
+# vertical image position in the output window
+# [0..100], default: 50
+#video.output.vertical_position:50
+
+# deinterlace method (deprecated)
+# { none bob weave greedy onefield onefield_xv linearblend }, default: 4
+video.output.xv_deinterlace_method:linearblend
+
+# MPEG-4 postprocessing quality
+# [0..6], default: 3
+#video.processing.ffmpeg_pp_quality:3
+
+# DXR3 device number
+# numeric, default: 0
+#dxr3.device_number:0
+
+# swap odd and even lines
+# bool, default: 0
+#dxr3.encoding.swap_fields:0
+
+# add black bars to correct aspect ratio
+# bool, default: 1
+#dxr3.encoding.add_bars:1
+
+# use smooth play mode for mpeg encoder playback
+# bool, default: 1
+#dxr3.encoding.alt_play_mode:1
+
+# device used for CD audio
+# string, default: /dev/cdrom
+#media.audio_cd.device:/dev/cdrom
+
+# slow down disc drive to this speed factor
+# numeric, default: 4
+#media.audio_cd.drive_slowdown:4
+
+# query CDDB
+# bool, default: 1
+#media.audio_cd.use_cddb:1
+
+# CDDB cache directory
+# string, default: /home/jams/.xine/cddbcache
+#media.audio_cd.cddb_cachedir:/home/jams/.xine/cddbcache
+
+# CDDB server port
+# numeric, default: 8880
+#media.audio_cd.cddb_port:8880
+
+# CDDB server name
+# string, default: freedb.freedb.org
+#media.audio_cd.cddb_server:freedb.freedb.org
+
+# directory for saving streams
+# string, default:
+#media.capture.save_dir:
+
+# Number of dvb card to use.
+# numeric, default: 0
+#media.dvb.adapter:0
+
+# Remember last DVB channel watched
+# bool, default: 1
+#media.dvb.remember_channel:1
+
+# Last DVB channel viewed
+# numeric, default: -1
+#media.dvb.last_channel:-1
+
+# default language for DVD playback
+# string, default: en
+#media.dvd.language:en
+
+# region the DVD player claims to be in (1 to 8)
+# numeric, default: 1
+#media.dvd.region:1
+
+# device used for DVD playback
+# string, default: /dev/dvd
+#media.dvd.device:/dev/dvd
+
+# raw device set up for DVD access
+# string, default: /dev/rdvd
+#media.dvd.raw_device:/dev/rdvd
+
+# read-ahead caching
+# bool, default: 1
+#media.dvd.readahead:1
+
+# CSS decryption method
+# { key disc title }, default: 0
+#media.dvd.css_decryption_method:key
+
+# play mode when title/chapter is given
+# { entire dvd one chapter }, default: 0
+#media.dvd.play_single_chapter:entire dvd
+
+# unit for seeking
+# { seek in program chain seek in program }, default: 0
+#media.dvd.seek_behaviour:seek in program chain
+
+# unit for the skip action
+# { skip program skip part skip title }, default: 0
+#media.dvd.skip_behaviour:skip program
+
+# path to the title key cache
+# string, default: /home/jams/.dvdcss/
+#media.dvd.css_cache_path:/home/jams/.dvdcss/
+
+# file browsing start location
+# string, default: /home/jams
+#media.files.origin_path:/home/jams
+
+# list hidden files
+# bool, default: 0
+#media.files.show_hidden_files:0
+
+# network bandwidth
+# { 14.4 Kbps (Modem) 19.2 Kbps (Modem) 28.8 Kbps (Modem) 33.6 Kbps (Modem) 34.4 Kbps (Modem) 57.6 Kbps (Modem) 115.2 Kbps (ISDN) 262.2 Kbps (Cable/DSL) 393.2 Kbps (Cable/DSL) 524.3 Kbps (Cable/DSL) 1.5 Mbps (T1) 10.5 Mbps (LAN) }, default: 10
+#media.network.bandwidth:1.5 Mbps (T1)
+
+# Timeout for network stream reading (in seconds)
+# numeric, default: 30
+#media.network.timeout:30
+
+# Domains for which to ignore the HTTP proxy
+# string, default:
+#media.network.http_no_proxy:
+
+# HTTP proxy host
+# string, default:
+#media.network.http_proxy_host:
+
+# HTTP proxy password
+# string, default:
+#media.network.http_proxy_password:
+
+# HTTP proxy port
+# numeric, default: 80
+#media.network.http_proxy_port:80
+
+# HTTP proxy username
+# string, default:
+#media.network.http_proxy_user:
+
+# MMS protocol
+# { auto TCP HTTP }, default: 0
+#media.network.mms_protocol:auto
+
+# automatically advance VCD track/entry
+# bool, default: 1
+#media.vcd.autoadvance:1
+
+# VCD default type to use on autoplay
+# { MPEG track entry segment playback-control item }, default: 3
+#media.vcd.autoplay:playback-control item
+
+# CD-ROM drive used for VCD when none given
+# string, default:
+#media.vcd.device:
+
+# VCD position slider range
+# { auto track entry }, default: 0
+#media.vcd.length_reporting:auto
+
+# show 'rejected' VCD LIDs
+# bool, default: 0
+#media.vcd.show_rejected:0
+
+# VCD format string for stream comment field
+# string, default: %P - Track %T
+#media.vcd.comment_format:%P - Track %T
+
+# VCD debug flag mask
+# numeric, default: 0
+#media.vcd.debug:0
+
+# VCD format string for display banner
+# string, default: %F - %I %N%L%S, disk %c of %C - %v %A
+#media.vcd.title_format:%F - %I %N%L%S, disk %c of %C - %v %A
+
+# v4l radio device
+# string, default: /dev/v4l/radio0
+#media.video4linux.radio_device:/dev/v4l/radio0
+
+# v4l video device
+# string, default: /dev/v4l/video0
+#media.video4linux.video_device:/dev/v4l/video0
+
+# device used for WinTV-PVR 250/350 (pvr plugin)
+# string, default: /dev/video0
+#media.wintv_pvr.device:/dev/video0
+
+# path to RealPlayer codecs
+# string, default: /usr/lib/win32
+#decoder.external.real_codecs_path:/usr/lib/win32
+
+# path to Win32 codecs
+# string, default: /usr/lib/win32
+#decoder.external.win32_codecs_path:/usr/lib/win32
+
+# subtitle size
+# { tiny small normal large very large huge }, default: 1
+#subtitles.separate.subtitle_size:small
+
+# subtitle vertical offset
+# numeric, default: 0
+#subtitles.separate.vertical_offset:0
+
+# font for subtitles
+# string, default: sans
+#subtitles.separate.font:sans
+
+# encoding of the subtitles
+# string, default: iso-8859-1
+#subtitles.separate.src_encoding:iso-8859-1
+
+# use unscaled OSD if possible
+# bool, default: 1
+#subtitles.separate.use_unscaled_osd:1
+
+# default duration of subtitle display in seconds
+# numeric, default: 4
+#subtitles.separate.timeout:4
+
+# frames per second to generate
+# numeric, default: 14
+#effects.goom.fps:14
+
+# goom image height
+# numeric, default: 240
+#effects.goom.height:240
+
+# goom image width
+# numeric, default: 320
+#effects.goom.width:320
+
+# colorspace conversion method
+# { Fast but not photorealistic Slow but looks better }, default: 0
+#effects.goom.csc_method:Fast but not photorealistic
+
+# number of audio buffers
+# numeric, default: 230
+#engine.buffers.audio_num_buffers:230
+
+# number of video buffers
+# numeric, default: 500
+#engine.buffers.video_num_buffers:500
+
+# default number of video frames
+# numeric, default: 15
+#engine.buffers.video_num_frames:15
+
+# priority for a/52 decoder
+# numeric, default: 0
+#engine.decoder_priorities.a/52:0
+
+# priority for bitplane decoder
+# numeric, default: 0
+#engine.decoder_priorities.bitplane:0
+
+# priority for dts decoder
+# numeric, default: 0
+#engine.decoder_priorities.dts:0
+
+# priority for dvaudio decoder
+# numeric, default: 0
+#engine.decoder_priorities.dvaudio:0
+
+# priority for dxr3-mpeg2 decoder
+# numeric, default: 0
+#engine.decoder_priorities.dxr3-mpeg2:0
+
+# priority for dxr3-spudec decoder
+# numeric, default: 0
+#engine.decoder_priorities.dxr3-spudec:0
+
+# priority for faad decoder
+# numeric, default: 0
+#engine.decoder_priorities.faad:0
+
+# priority for ffmpeg-wmv8 decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpeg-wmv8:0
+
+# priority for ffmpeg-wmv9 decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpeg-wmv9:0
+
+# priority for ffmpegaudio decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpegaudio:0
+
+# priority for ffmpegvideo decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpegvideo:0
+
+# priority for gdkpixbuf decoder
+# numeric, default: 0
+#engine.decoder_priorities.gdkpixbuf:0
+
+# priority for gsm610 decoder
+# numeric, default: 0
+#engine.decoder_priorities.gsm610:0
+
+# priority for image decoder
+# numeric, default: 0
+#engine.decoder_priorities.image:0
+
+# priority for mad decoder
+# numeric, default: 0
+#engine.decoder_priorities.mad:0
+
+# priority for mpc decoder
+# numeric, default: 0
+#engine.decoder_priorities.mpc:0
+
+# priority for mpeg2 decoder
+# numeric, default: 0
+#engine.decoder_priorities.mpeg2:0
+
+# priority for nsf decoder
+# numeric, default: 0
+#engine.decoder_priorities.nsf:0
+
+# priority for pcm decoder
+# numeric, default: 0
+#engine.decoder_priorities.pcm:0
+
+# priority for qta decoder
+# numeric, default: 0
+#engine.decoder_priorities.qta:0
+
+# priority for qtv decoder
+# numeric, default: 0
+#engine.decoder_priorities.qtv:0
+
+# priority for real decoder
+# numeric, default: 0
+#engine.decoder_priorities.real:0
+
+# priority for realadec decoder
+# numeric, default: 0
+#engine.decoder_priorities.realadec:0
+
+# priority for rgb decoder
+# numeric, default: 0
+#engine.decoder_priorities.rgb:0
+
+# priority for spucc decoder
+# numeric, default: 0
+#engine.decoder_priorities.spucc:0
+
+# priority for spucmml decoder
+# numeric, default: 0
+#engine.decoder_priorities.spucmml:0
+
+# priority for spudec decoder
+# numeric, default: 0
+#engine.decoder_priorities.spudec:0
+
+# priority for spudvb decoder
+# numeric, default: 0
+#engine.decoder_priorities.spudvb:0
+
+# priority for sputext decoder
+# numeric, default: 0
+#engine.decoder_priorities.sputext:0
+
+# priority for theora decoder
+# numeric, default: 0
+#engine.decoder_priorities.theora:0
+
+# priority for vorbis decoder
+# numeric, default: 0
+#engine.decoder_priorities.vorbis:0
+
+# priority for win32a decoder
+# numeric, default: 0
+#engine.decoder_priorities.win32a:0
+
+# priority for win32v decoder
+# numeric, default: 0
+#engine.decoder_priorities.win32v:0
+
+# priority for yuv decoder
+# numeric, default: 0
+#engine.decoder_priorities.yuv:0
+
+# media format detection strategy
+# { default reverse content extension }, default: 0
+#engine.demux.strategy:default
+
+# memcopy method used by xine
+# { probe libc kernel mmx mmxext sse }, default: 0
+engine.performance.memcpy_method:libc
+
+# percentage of discarded frames to tolerate
+# numeric, default: 10
+#engine.performance.warn_discarded_threshold:10
+
+# percentage of skipped frames to tolerate
+# numeric, default: 10
+#engine.performance.warn_skipped_threshold:10
+
+# allow implicit changes to the configuration (e.g. by MRL)
+# bool, default: 0
+#misc.implicit_config:0
+
diff --git a/abs/core-testing/live-installer/templates/xorg/modeline.ATSC b/abs/core-testing/live-installer/templates/xorg/modeline.ATSC
new file mode 100644
index 0000000..b2cd709
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/modeline.ATSC
@@ -0,0 +1,33 @@
+ModeLine "ATSC-720p60Hz" 74.160 1280 1352 1392 1648 720 725 730 750
+
+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 "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 74.086 MHz 44.955 kHz 5$
+
+ModeLine "My1080i" 79.84 1920 2040 2200 2368 1080 1090 1106 1125 +vsync -hsync interlace
+
+ModeLine "My1080i2" 74.52 1920 1952 2016 2208 1080 1084 1096 1126 -hsync -vsync interlace
+
+Modeline "My1920x1080_i" 74.52 1920 1952 2016 2208 1080 1084 1096 1126 -HSync -VSync Interlace
+
+Modeline "in1080_i" 74.52 1760 1888 2096 2208 960 1012 1028 1126 -HSync -VSync Interlace
+
+Modeline "1920x1080_59i" 76.11 1920 1952 2240 2272 1080 1104 1110 1135 interlace
+
+Modeline "1920x1080_60i" 77.60 1920 1952 2240 2272 1080 1104 1110 1135 interlace
+
+Modeline "1920x1080_61i" 79.08 1920 1952 2248 2280 1080 1104 1110 1135 interlace
+
+Modeline "1776x1000_60i" 65.91 1776 1808 2056 2088 1000 1023 1028 1051 interlace
+
+Modeline "1920x1080_30" 77.60 1920 1952 2240 2272 1080 1104 1110 1135
+
+Modeline "1760x960_60i" 62.39 1760 1792 2024 2056 960 982 987 1009 interlace
+
+Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+
+Modeline "1280x720_50.00" 74.25 1280 1360 1400 1984 720 725 730 750 -hsync -vsync
diff --git a/abs/core-testing/live-installer/templates/xorg/modeline.DVD b/abs/core-testing/live-installer/templates/xorg/modeline.DVD
new file mode 100644
index 0000000..9e846d0
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/modeline.DVD
@@ -0,0 +1,9 @@
+#DVD-NativeModes
+ModeLine "NTSC-DVD-59.94i" 13.5 720 736 800 858 480 484 492 525 Interlace
+ModeLine "NTSC-DVD-60i" 13.514 720 736 800 858 480 484 492 525 Interlace
+ModeLine "NTSC-DVD-59.94p" 27.0 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-60p" 27.027 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-71.93p" 32.4 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-119.88p" 54.0 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-120p" 54.054 720 736 800 858 480 484 492 525
diff --git a/abs/core-testing/live-installer/templates/xorg/modeline.NTSC b/abs/core-testing/live-installer/templates/xorg/modeline.NTSC
new file mode 100644
index 0000000..5536c1b
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/modeline.NTSC
@@ -0,0 +1,10 @@
+#Analog-RegularModes
+ModeLine "NTSCspec-59.94i" 14.318 768 784 848 910 483 484 492 525 Interlace
+ModeLine "NTSCspec-59.94p" 28.636 768 784 848 910 483 484 492 525
+ModeLine "Laserdisk-59.94i" 567 583 647 684 483 484 492 525 Interlace
+ModeLine "Laserdisk-59.94p" 567 583 647 684 483 484 492 525
+ModeLine "Broadcast-59.94i" 483 484 492 525 Interlace
+ModeLine "Broadcast-59.94p" 483 484 492 525
+ModeLine "VHS-59.94i" 483 484 492 525 Interlace
+ModeLine "VHS-59.94p" 483 484 492 525
+
diff --git a/abs/core-testing/live-installer/templates/xorg/modeline.VESA b/abs/core-testing/live-installer/templates/xorg/modeline.VESA
new file mode 100644
index 0000000..a026f64
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/modeline.VESA
@@ -0,0 +1,163 @@
+# 640x350 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync
+
+# 640x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync
+
+# 720x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync
+
+# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
+ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
+
+# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
+ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync
+
+# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
+ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
+
+# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
+ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync
+
+# 800x600 @ 56Hz (VESA) hsync: 35.2kHz
+ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
+
+# 800x600 @ 60Hz (VESA) hsync: 37.9kHz
+ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
+
+# 800x600 @ 72Hz (VESA) hsync: 48.1kHz
+ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
+
+# 800x600 @ 75Hz (VESA) hsync: 46.9kHz
+ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
+
+# 800x600 @ 85Hz (VESA) hsync: 53.7kHz
+ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync
+
+# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz
+ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace
+
+# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz
+ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz
+ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz
+ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
+
+# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz
+ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync
+
+# 1152x864 @ 75Hz (VESA) hsync: 67.5kHz
+ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync
+
+# 1280x960 @ 60Hz (VESA) hsync: 60.0kHz
+ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync
+
+# 1280x960 @ 85Hz (VESA) hsync: 85.9kHz
+ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync
+
+# 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz
+ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz
+ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz
+ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync
+
+# 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz
+ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+# 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz
+ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz
+ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz
+ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz
+ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz
+ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync
+
+# 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz
+ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync
+
+# 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz
+ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync
+
+# 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync
+
+# 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz
+ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync
+
+# 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync
+
+# 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz
+ModeLine "640x480" 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync
+
+# 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz
+ModeLine "768x576" 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync
+
+# 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz
+ModeLine "768x576" 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync
+
+# 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz
+ModeLine "768x576" 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync
+
+# 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz
+ModeLine "768x576" 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync
+
+# 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz
+ModeLine "768x576" 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync
+
+# 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz
+ModeLine "800x600" 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync
+
+# 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz
+ModeLine "1024x768" 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync
+
+# 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz
+ModeLine "1152x864" 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync
+
+# 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz
+ModeLine "1152x864" 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync
+
+# 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz
+ModeLine "1152x864" 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync
+
+# 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz
+ModeLine "1280x960" 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync
+
+# 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz
+ModeLine "1280x960" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync
+
+# 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz
+ModeLine "1280x960" 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync
+
+# 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz
+ModeLine "1280x1024" 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync
+
+# 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz
+ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync
+
+# 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz
+ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync
+
+# 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz
+ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync
+
+# 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz
+ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync
+
+# 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz
+ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync
+
+# 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz
+ModeLine "1600x1200" 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync
diff --git a/abs/core-testing/live-installer/templates/xorg/modeline.custom b/abs/core-testing/live-installer/templates/xorg/modeline.custom
new file mode 100644
index 0000000..ca6d678
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/modeline.custom
@@ -0,0 +1 @@
+ModeLine "CustomModeline" 14.318 768 784 848 910 483 484 492 525 Interlace
diff --git a/abs/core-testing/live-installer/templates/xorg/xorg.conf.ati b/abs/core-testing/live-installer/templates/xorg/xorg.conf.ati
new file mode 100644
index 0000000..c6d9249
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/xorg.conf.ati
@@ -0,0 +1,94 @@
+Section "ServerLayout"
+ Identifier "X.org Configured"
+ Screen 0 "aticonfig-Screen[0]" 0 0
+ InputDevice "Mouse0" "CorePointer"
+ InputDevice "Keyboard0" "CoreKeyboard"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/share/X11/rgb"
+ ModulePath "/usr/lib/xorg/modules"
+ FontPath "/usr/share/fonts/misc"
+ FontPath "/usr/share/fonts/75dpi"
+ FontPath "/usr/share/fonts/100dpi"
+ FontPath "/usr/share/fonts/TTF"
+ FontPath "/usr/share/fonts/Type1"
+EndSection
+
+Section "Module"
+ Load "xtrap"
+ Load "dbe"
+ Load "record"
+ Load "extmod"
+ Load "dri"
+ Load "type1"
+ Load "freetype"
+EndSection
+
+Section "InputDevice"
+ Identifier "Keyboard0"
+ Driver "kbd"
+EndSection
+
+Section "InputDevice"
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/input/mice"
+ Option "ZAxisMapping" "4 5 6 7"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Monitor Vendor"
+ ModelName "Monitor Model"
+EndSection
+
+Section "Monitor"
+ Identifier "aticonfig-Monitor[0]"
+# HorizSync
+# VertRefresh
+ Option "VendorName" "ATI Proprietary Driver"
+ Option "ModelName" "Generic Autodetecting Monitor"
+ Option "DPMS" "true"
+EndSection
+
+Section "Device"
+
+ ### Available Driver options are:-
+ ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
+ ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
+ ### [arg]: arg optional
+ #Option "ShadowFB" # [<bool>]
+ #Option "DefaultRefresh" # [<bool>]
+ #Option "ModeSetClearScreen" # [<bool>]
+ Identifier "Card0"
+ Driver "vesa"
+ VendorName "ATI Technologies Inc"
+ BoardName "RV370 5B60 [Radeon X300 (PCIE)]"
+ BusID "PCI:1:0:0"
+EndSection
+
+Section "Device"
+ Identifier "aticonfig-Device[0]"
+ Driver "fglrx"
+#INSERT HERE
+
+# Option "ForceMonitors" "tv,nocrt1,notmds1"
+# Option "TVStandard" "SCART"
+# Option "TVFormat" "PAL-B"
+EndSection
+
+
+Section "Screen"
+ Identifier "aticonfig-Screen[0]"
+ Device "aticonfig-Device[0]"
+ Monitor "aticonfig-Monitor[0]"
+ DefaultDepth 24
+ SubSection "Display"
+ Viewport 0 0
+ Depth 24
+ Modes "640x480"
+ EndSubSection
+EndSection
+
diff --git a/abs/core-testing/live-installer/templates/xorg/xorg.conf.intel b/abs/core-testing/live-installer/templates/xorg/xorg.conf.intel
new file mode 100644
index 0000000..a4d258a
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/xorg.conf.intel
@@ -0,0 +1,148 @@
+Section "ServerLayout"
+ Identifier "Xorg Configured"
+ Screen 0 "Screen0" 0 0
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "PS/2 Mouse" "CorePointer"
+# Serial Mouse not detected
+# USB Mouse not detected
+EndSection
+
+Section "ServerFlags"
+ Option "AllowMouseOpenFail" "true"
+
+EndSection
+
+Section "Files"
+ RgbPath "/usr/share/X11/rgb"
+ ModulePath "/usr/lib/xorg/modules"
+ FontPath "/usr/share/fonts/misc:unscaled"
+ FontPath "/usr/share/fonts/misc"
+ FontPath "/usr/share/fonts/75dpi:unscaled"
+ FontPath "/usr/share/fonts/75dpi"
+ FontPath "/usr/share/fonts/100dpi:unscaled"
+ FontPath "/usr/share/fonts/100dpi"
+ FontPath "/usr/share/fonts/PEX"
+# Additional fonts: Locale, Gimp, TTF...
+ FontPath "/usr/share/fonts/cyrillic"
+# FontPath "/usr/share/lib/X11/fonts/latin2/75dpi"
+# FontPath "/usr/share/lib/X11/fonts/latin2/100dpi"
+# True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig!
+ FontPath "/usr/share/fonts/Type1"
+ FontPath "/usr/share/fonts/ttf/western"
+ FontPath "/usr/share/fonts/ttf/decoratives"
+ FontPath "/usr/share/fonts/truetype"
+ FontPath "/usr/share/fonts/truetype/openoffice"
+ FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
+ FontPath "/usr/share/fonts/latex-ttf-fonts"
+ FontPath "/usr/share/fonts/defoma/CID"
+ FontPath "/usr/share/fonts/defoma/TrueType"
+EndSection
+
+Section "Module"
+ Load "ddc" # ddc probing of monitor
+ Load "dbe"
+ Load "dri"
+ Load "extmod"
+ Load "glx"
+ Load "bitmap" # bitmap-fonts
+ Load "type1"
+ Load "freetype"
+ Load "record"
+EndSection
+
+Section "InputDevice"
+ Identifier "Keyboard0"
+ Driver "keyboard"
+ Option "CoreKeyboard"
+ Option "XkbRules" "xorg"
+ Option "XkbModel" "pc105"
+ Option "XkbLayout" ""
+ Option "XkbVariant" ""
+EndSection
+
+Section "InputDevice"
+ Identifier "Serial Mouse"
+ Driver "mouse"
+ Option "Protocol" "Microsoft"
+ Option "Device" "/dev/ttyS0"
+ Option "Emulate3Buttons" "true"
+ Option "Emulate3Timeout" "70"
+ Option "SendCoreEvents" "true"
+EndSection
+
+Section "InputDevice"
+ Identifier "PS/2 Mouse"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "ZAxisMapping" "4 5"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "true"
+ Option "Emulate3Timeout" "70"
+ Option "SendCoreEvents" "true"
+EndSection
+
+Section "InputDevice"
+ Identifier "USB Mouse"
+ Driver "mouse"
+ Option "Device" "/dev/input/mice"
+ Option "SendCoreEvents" "true"
+ Option "Protocol" "IMPS/2"
+ Option "ZAxisMapping" "4 5"
+ Option "Buttons" "5"
+EndSection
+
+# Auto-generated by Archie mkxcfg
+
+Section "Monitor"
+ Identifier "Monitor0"
+ Option "DPMS" "true"
+EndSection
+
+# Auto-generated by Archie mkxcfg
+
+Section "Device"
+ Identifier "Card0"
+ Driver "intel"
+ VendorName "All"
+ BoardName "All"
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Card0"
+ Monitor "Monitor0"
+ DefaultColorDepth 16
+ SubSection "Display"
+ Depth 1
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 4
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 8
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 15
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 16
+ Modes "800x600"
+ virtual 800 600
+ EndSubSection
+ SubSection "Display"
+ Depth 24
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 32
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+EndSection
+
+Section "DRI"
+ Mode 0666
+EndSection
diff --git a/abs/core-testing/live-installer/templates/xorg/xorg.conf.nvidia b/abs/core-testing/live-installer/templates/xorg/xorg.conf.nvidia
new file mode 100755
index 0000000..dec0f42
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/xorg.conf.nvidia
@@ -0,0 +1,90 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "glx"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+# HorizSync
+# VertRefresh
+ Option "DPMS" "false"
+ DisplaySize 203 153
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+#INSERT MODELINE
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "nvidia"
+ VendorName "NVIDIA Corporation"
+ Option "DPI" "100 x 100"
+ Option "NoLogo" "1"
+
+#INSERT HERE
+
+#END OPTIONS
+
+# Option "ConnectedMonitor" "DFP"
+# Option "FlatPanelProperties" "Scaling = centered, Dithering = enabled"
+# Option "DigitalVibrance" "0"
+# Option "TransparentIndex" "0"
+# Option "CursorShadowAlpha" "64"
+# Option "CursorShadowXOffset" "4"
+# Option "UseEdidFreqs" "True"
+# Option "NvAGP" "1"
+
+
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "1280x720"
+ EndSubSection
+EndSection
+
diff --git a/abs/core-testing/live-installer/templates/xorg/xorg.conf.via b/abs/core-testing/live-installer/templates/xorg/xorg.conf.via
new file mode 100644
index 0000000..6dd7821
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/xorg.conf.via
@@ -0,0 +1,77 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "glx"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "dri"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+ HorizSync 30.0 - 110.0
+ VertRefresh 50.0 - 150.0
+ Option "DPMS" "false"
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "via"
+ VendorName "via"
+ Option "DPI" "100 x 100"
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 16
+ SubSection "Display"
+ Depth 16
+ Modes "800x600"
+ EndSubSection
+EndSection
+
+Section "DRI"
+ Group "video"
+ Mode 0666
+ EndSection
diff --git a/abs/core-testing/live-installer/templates/xorg/xorg.conf.vmware b/abs/core-testing/live-installer/templates/xorg/xorg.conf.vmware
new file mode 100755
index 0000000..843f2f4
--- /dev/null
+++ b/abs/core-testing/live-installer/templates/xorg/xorg.conf.vmware
@@ -0,0 +1,72 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "glx"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+ HorizSync 30.0 - 110.0
+ VertRefresh 50.0 - 150.0
+ Option "DPMS" "false"
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "vmware"
+ VendorName "NVIDIA Corporation"
+ Option "DPI" "100 x 100"
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "1280x720"
+ EndSubSection
+EndSection
+
diff --git a/abs/core-testing/live-installer/timezip.py b/abs/core-testing/live-installer/timezip.py
new file mode 100755
index 0000000..505b4a4
--- /dev/null
+++ b/abs/core-testing/live-installer/timezip.py
@@ -0,0 +1,185 @@
+#!/usr/bin/python
+# import MySQL module
+#used to import the zipcode/timezone/nfs info fromMBE
+import MySQLdb
+import sys
+import getopt
+import socket
+
+
+def usage():
+ print " -h --help"
+ print " -d --installdb"
+ print " -m --masterdb"
+ print " -n --hostname of current machine"
+
+def printvars():
+ print "masterdb: " + masterdb
+ print "installdb:" + installdb
+ print "hostname: " + thishostname
+ print "BEhostname:" + BEhostname
+ print "zipcode:" + zipcode
+ print "timezone:" + tz
+ print "nfsip:" + nfsip
+ print "nfstoggle:" + nfstoggle
+ print "nfsmount:" + nfsmount
+ print "hobbitclient:" + hobbitclient
+# connect
+def selectvars():
+
+ global BEhostname
+ global zipcode
+ global tz
+ global nfsip
+ global nfstoggle
+ global nfsmount
+ global hobbitclient
+
+ db = MySQLdb.connect(host=masterdb, user="mythtv", passwd="mythtv", db="mythconverg")
+ # create a cursor
+ cursor = db.cursor()
+ # execute SQL statement
+ cursor.execute("select hostname from settings where value='BackendServerIP' and data=(%s)",(masterdb))
+ result = cursor.fetchone()
+ BEhostname=result[0]
+
+ cursor.execute("select data from settings where value='HostZipcode' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ zipcode = result[0]
+ except TypeError:
+ zipcode=""
+
+ cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfsip=result[0]
+ except TypeError:
+ nfsip=""
+
+ cursor.execute("select data from settings where value='HostHaveCentralNFS' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfstoggle=result[0]
+ except TypeError:
+ nfstoggle=""
+
+ cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfsmount=result[0]
+ except TypeError:
+ nfsmount=""
+
+ cursor.execute("select data from settings where value='HostTimeZone' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ tz=result[0]
+ except TypeError:
+ tz=""
+
+ if ( thishostname != BEhostname ):
+ cursor.execute("select data from settings where value='GlobalServiceHobbitserver'")
+ result = cursor.fetchone()
+ try:
+ hobbitclient=result[0]
+ except TypeError:
+ hobbitclient="0"
+
+
+
+def insertvars():
+
+ db = MySQLdb.connect(host=installdb, user="mythtv", passwd="mythtv", db="mythconverg")
+ cursor = db.cursor()
+#inserting the zipcode
+ cursor.execute("select * from settings where value='HostZipcode' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( zipcode!="" ):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostZipcode',(%s),(%s))",(zipcode,thishostname))
+ print "inserting zipcode"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostZipcode'",(zipcode,thishostname))
+ print "updating zipcode"
+
+#inserting the timezone
+ cursor.execute("select * from settings where value='HostTimeZone' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( tz != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostTimeZone',(%s),(%s))",(tz,thishostname))
+ print "inserting timezone"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostTimeZone'",(tz,thishostname))
+ print "updating timezone"
+
+
+#start of NFSIP
+ cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( nfsip != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostCentralNFSIP',(%s),(%s))",(nfsip,thishostname))
+ print "inserting nfsip"
+
+ if (nfstoggle != ""):
+ cursor.execute("select data from settings where value='HostHaveCentralNFS' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostHaveCentralNFS',(%s),(%s))",(nfstoggle,thishostname))
+ print "inserting nfstoggle"
+
+ if ( nfsmount !="") :
+ cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostNFSmountpoint',(%s),(%s))",(nfsmount,thishostname))
+ print "inserting nfsmountpoint"
+
+#hobbitclient
+ cursor.execute("select * from settings where value='HostServiceHobbitclient' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( tz != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostServiceHobbitclient',(%s),(%s))",(hobbitclient,thishostname))
+ print "inserting hobbitcleint"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostServiceHobbitclient'",(hobbitclient,thishostname))
+ print "updating hobbitclient"
+
+
+def main(argv):
+ global masterdb
+ global installdb
+ global thishostname
+ thishostname=""
+ global BEhostname
+ global zipcode
+ global tz
+ global nfsip
+ global hobbitclient
+ try:
+ opts, args = getopt.getopt(argv, "hm:d:n:", ["help", "masterdb=", "installdb=" , "hostname=" ] )
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage()
+ sys.exit()
+ elif opt in ( "-d" , "--installdb"):
+ installdb = arg
+ elif opt in ("-m", "--masterdb"):
+ masterdb = arg
+ elif opt in ("-n", "--hostname"):
+ thishostname = arg
+
+ if ( thishostname == "" ):
+ thishostname = socket.gethostname()
+
+ selectvars()
+ printvars()
+ insertvars()
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
diff --git a/abs/core-testing/live-installer/xconfig.sh b/abs/core-testing/live-installer/xconfig.sh
new file mode 100755
index 0000000..42603d6
--- /dev/null
+++ b/abs/core-testing/live-installer/xconfig.sh
@@ -0,0 +1,233 @@
+#!/bin/bash
+BASE=""
+. /etc/profile
+#TEMPLATES="/usr/share/templates"
+
+function Xvalues {
+ VGACARDTYPE=`lspci|grep -i vga|sort -r|head -n 1| cut -d: -f3|cut -d" " -f 2`
+ echo $VGACARDTYPE
+ currentmode=`cat $BASE/etc/X11/xorg.conf |grep Modes|awk -Fs ' { print $2 } '`
+ }
+
+function presetupX {
+if [ x$XUseAdvanced = x1 ]
+then
+ if [ x$XIgnoreConfig = x1 ]
+ then
+ echo "Using User supplied X"
+ if [ -f $BASE/data/home/mythtv/templates/xorg.user ]
+ then
+ cp -f $BASE/data/home/mythtv/templates/xorg.user $XORG_CONF
+ else
+ echo "Didn't find the file"
+ echo "Copy your config file to $BASE/data/home/mythtv/templates/xorg.use " >> $XORG_CONF
+ fi
+ else
+ setupAdvancedX
+ fi
+else
+ setupX
+fi
+
+}
+
+function setupAdvancedX {
+echo "#doing the advanced" > /tmp/options
+ Xcatagory=` echo $Xresadvanced |cut -d_ -f1`
+ Xres=` echo $Xresadvanced |cut -d_ -f2`
+ echo $Xcatagory
+ if [ x$Xcatagory = "xNvidia" ]
+ then
+ Xres=""
+ if [ $XnVidia1080p = "1" ]
+ then
+ Xres="${Xres} \"1920x1080_60\""
+ fi
+ if [ $XnVidia1080i = "1" ]
+ then
+ Xres="${Xres} \"1920x1080_60i\""
+ fi
+ if [ $XnVidia720p = "1" ]
+ then
+ Xres="${Xres} \"1280x720_60\""
+ fi
+ if [ $XnVidia480p = "1" ]
+ then
+ Xres="${Xres} \"720x480_60\""
+ fi
+ ML="\t Modes ${Xres}"
+ else
+
+ ML="\t Modes \"${Xres}\""
+ fi
+ echo $ML
+ case $Xcardtype in
+ NVIDIA|nVidia )
+
+ case $Xconnection in
+ DVI) ConnectedMonitor=DFP ;;
+ vga) ConnectedMonitor=CRT;;
+ Auto) ConnectedMonitor=Auto;;
+ TV) ConnectedMonitor=TV
+ echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options
+ echo "Option \"TVOutFormat\" \"$XTVconnection\"" >> /tmp/options
+ ;;
+ esac
+ if [ $ConnectedMonitor = Auto ]
+ then
+ echo "auto connection"
+ else
+ echo "Option \"ConnectedMonitor\" \"$ConnectedMonitor\"" >> /tmp/options
+ echo "Option \"FlatPanelProperties\" \"Scaling = centered, Dithering = enabled\"" >> /tmp/options
+ echo "Option \"DigitalVibrance\" \"0\"" >> /tmp/options
+ fi
+
+ if [ x$XignoreEDID = x1 ]
+ then
+ EDIDvalue=true
+ EDIDFREQ=false
+ DS=" DisplaySize $XDisplaysize"
+ HS=" HorizSync $XHsync"
+ VR=" VertRefresh $XVrefresh"
+ else
+ EDIDvalue=false
+ EDIDFREQ=true
+ DS="# Display size edid used "
+ HS="#Hsync edid used "
+ VR="#Vertrefresh edid used "
+
+ fi
+ echo "Option \"UseEdidFreqs\" \"$EDIDFREQ\"" >> /tmp/options
+ echo "Option \"IgnoreEDID\" \"$EDIDvalue\"" >> /tmp/options
+
+
+ sed -e "s/^.*Modes.*$/${ML}/" \
+ -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcatagory" \
+ -e "s/^.*DisplaySize.*$/ $DS/" \
+ -e "s/^#.*HorizSync.*$/ $HS/g" \
+ -e "s/^#.*VertRefresh.*$/ $VR/g" \
+ -e "/INSERT HERE/r /tmp/options" $TEMPLATES/xorg/xorg.conf.nvidia > $XORG_CONF
+
+ ;;
+ ati|ATI)
+ case $Xconnection in
+ DVI) ConnectedMonitor="tmds1,nocrt1,notv";;
+ VGA) ConnectedMonitor="crt1,notmds1,notv" ;;
+ TV) ConnectedMonitor="tv,nocrt1,notmds1"
+ echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options
+ echo "Option \"TVFormat\" \"$XTVconnection\"" >> /tmp/options
+ ;;
+
+ esac
+
+
+ if [ x$XignoreEDID = x1 ]
+ then
+ DS=" DisplaySize $XDisplaysize"
+ HS=" HorizSync $XHsync"
+ VR=" VertRefresh $XVrefresh"
+ else
+ DS="# Display size edid used "
+ HS="#Hsync edid used "
+ VR="#Vertrefresh edid used "
+
+ fi
+
+ echo "Option \"ForceMonitors\" \"$ConnectedMonitor\"" >> /tmp/options
+
+ sed -e "s/^.*Modes.*$/\t $ML/" \
+ -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcatagory" \
+ -e "s/^.*DisplaySize.*$/ $DS/" \
+ -e "s/^#.*HorizSync.*$/ $HS/g" \
+ -e "s/^#.*VertRefresh.*$/ $VR/g" \
+ -e "/INSERT HERE/r /tmp/options" $TEMPLATES/xorg/xorg.conf.ati > $XORG_CONF
+ ;;
+
+ via|VIA|Via) echo "no via here"
+ ;;
+
+ *)
+ echo "unknown card type"
+ ;;
+ esac
+}
+
+
+
+function setupX {
+ Xvalues
+ echo "$currentmode ____ ${Xres}"
+ #if [ ! x${currentmode} = x\"${Xres}\" ]
+ if [ x = x ]
+ then
+ case $VGACARDTYPE in
+ nVidia )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.nvidia > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -R libgl-dri
+# pacman --noconfirm -S nvidia-STB nvidia-utils
+ pacman --noconfirm -S nvidia nvidia-utils
+ fi
+ ;;
+ VMware )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.vmware > $XORG_CONF
+ ;;
+
+ VIA )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.via > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -R nvidia-STB nvidia-utils
+ pacman --noconfirm -S libgl-dri
+ fi
+
+ ;;
+ Intel)
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.intel > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -Rd nvidia-utils
+ pacman --noconfirm -S libgl-dri
+ fi
+ ;;
+
+ *) #XCONF=`hwd -x |grep etc`
+ XCONF=`hwd -x |grep etc|tr -d [:cntrl:]|cut -d\/ -f 2-`
+
+
+ cat /$XCONF |grep -v Modes | sed -e '/Depth 16/a Modes "800x600"' -e 's/dev\/mouse/dev\/psaux/g'> $XORG_CONF
+ ;;
+ esac
+ fi
+
+}
+
+#MAIN
+TESTMODE=$1
+if [ x$TESTMODE = "xtest" ]
+then
+ XORG_CONF="/tmp/xorg.conf.test"
+ XUseAdvanced="1"
+ XIgnoreConfig="${2}"
+ Xcardtype="${3}"
+ XIgnoreEDID="${4}"
+ Xconnection="${5}"
+ XHsync="${6}"
+ XVrefresh="${7}"
+ Xresadvanced="${8}"
+ XTVstandard="${9}"
+ XTVconnection="${10}"
+ XDisplaysize="${11}"
+else
+ if [ -f /etc/systemconfig ]
+ then
+ . /etc/systemconfig
+ else
+ Xres="800x600"
+ fi
+ XORG_CONF="/etc/X11/xorg.conf"
+fi
+presetupX
+
+
diff --git a/abs/core-testing/logrotate/PKGBUILD b/abs/core-testing/logrotate/PKGBUILD
new file mode 100644
index 0000000..16a389a
--- /dev/null
+++ b/abs/core-testing/logrotate/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=logrotate
+pkgver=3.7.5
+pkgrel=10
+pkgdesc="Rotates system logs automatically"
+url='http://rhlinux.redhat.com'
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('popt' 'cron' 'gzip')
+backup=('etc/logrotate.conf')
+
+# The source is apparently a CVS checkout only. Create the tarball like so:
+# cvs -d :pserver:anonymous@rhlinux.redhat.com:/usr/local/CVS co logrotate
+# cd logrotate/
+# make create-archive
+# Ensure this tarball is places in other/logrotate/
+
+source=(ftp://ftp.archlinux.org/other/logrotate/${pkgname}-${pkgver}.tar.gz
+ logrotate.conf logrotate.cron.daily)
+md5sums=('a1a3ea2f1d80e67e902c024bbdef616a'
+ 'c8b915903825befc401797b7620f249e'
+ '8e23d5d4cc29b1e055b24df87e355cdc')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+
+ sed -i 's|#define DEFAULT_MAIL_COMMAND .*|#define DEFAULT_MAIL_COMMAND "/usr/bin/mail"|'\
+ config.h
+ make || return 1
+ make PREFIX=$startdir/pkg install
+ install -D -m644 ../logrotate.conf $startdir/pkg/etc/logrotate.conf
+ install -D -m744 ../logrotate.cron.daily $startdir/pkg/etc/cron.daily/logrotate
+}
diff --git a/abs/core-testing/logrotate/logrotate.conf b/abs/core-testing/logrotate/logrotate.conf
new file mode 100644
index 0000000..fde947b
--- /dev/null
+++ b/abs/core-testing/logrotate/logrotate.conf
@@ -0,0 +1,28 @@
+# see "man logrotate" for details
+# rotate log files weekly
+weekly
+
+# keep 4 weeks worth of backlogs
+rotate 4
+
+# create new (empty) log files after rotating old ones
+create
+
+# uncomment this if you want your log files compressed
+#compress
+
+# Logs are moved into directory for rotation
+# olddir /var/log/archive
+
+# Ignore pacman saved files
+tabooext + .pacorig .pacnew .pacsave
+
+# Arch packages drop log rotation information into this directory
+include /etc/logrotate.d
+
+/var/log/wtmp {
+ monthly
+ create 0664 root root
+ rotate 1
+}
+
diff --git a/abs/core-testing/logrotate/logrotate.cron.daily b/abs/core-testing/logrotate/logrotate.cron.daily
new file mode 100755
index 0000000..e8ab921
--- /dev/null
+++ b/abs/core-testing/logrotate/logrotate.cron.daily
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/sbin/logrotate /etc/logrotate.conf
diff --git a/abs/core-testing/lsof/PKGBUILD b/abs/core-testing/lsof/PKGBUILD
new file mode 100644
index 0000000..1fdedc0
--- /dev/null
+++ b/abs/core-testing/lsof/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 2105 2008-05-25 02:46:46Z eric $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Jochem Kossen <j.kossen@home.nl>
+
+pkgname=lsof
+pkgver=4.80
+pkgrel=1
+pkgdesc="lsof (LiSt Open Files) lists information about files that are open by the running processes"
+arch=(i686 x86_64)
+license=(custom)
+depends=('glibc')
+url="http://people.freebsd.org/~abe/"
+#source=(ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/${pkgname}_${pkgver}.tar.bz2 license.txt)
+source=(ftp://sunsite.ualberta.ca/pub/Mirror/lsof/${pkgname}_${pkgver}.tar.bz2 license.txt)
+md5sums=('18d124d063619eeee147a8d638e2b8fd' '1b63c76bd10437cabf890508c8e58d36')
+
+build() {
+ cd $startdir/src/${pkgname}_${pkgver}
+ tar xf ${pkgname}_${pkgver}_src.tar
+ cd ${pkgname}_${pkgver}_src
+ sed "s|/\* #define\tHASSECURITY\t1 \*/|#define\tHASSECURITY\t1|" -i dialects/linux/machine.h
+
+ ./Configure -n linux
+ make || return 1
+ install -D -m0755 -o root -g root lsof $startdir/pkg/usr/sbin/lsof
+ install -D -m0644 -o root -g root lsof.8 $startdir/pkg/usr/share/man/man8/lsof.8
+
+ install -D -m0644 -o root -g root $startdir/src/license.txt \
+ $startdir/pkg/usr/share/licenses/lsof/license.txt
+}
diff --git a/abs/core-testing/lsof/license.txt b/abs/core-testing/lsof/license.txt
new file mode 100644
index 0000000..6d241dd
--- /dev/null
+++ b/abs/core-testing/lsof/license.txt
@@ -0,0 +1,27 @@
+Copyright 2002 Purdue Research Foundation, West Lafayette,
+Indiana 47907. All rights reserved.
+
+Written by Victor A. Abell
+
+This software is not subject to any license of the American
+Telephone and Telegraph Company or the Regents of the
+University of California.
+
+Permission is granted to anyone to use this software for
+any purpose on any computer system, and to alter it and
+redistribute it freely, subject to the following
+restrictions:
+
+1. Neither the authors nor Purdue University are responsible
+ for any consequences of the use of this software.
+
+2. The origin of this software must not be misrepresented,
+ either by explicit claim or by omission. Credit to the
+ authors and Purdue University must appear in documentation
+ and sources.
+
+3. Altered versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+4. This notice may not be removed or altered.
+
diff --git a/abs/core-testing/lvm2/PKGBUILD b/abs/core-testing/lvm2/PKGBUILD
new file mode 100644
index 0000000..1819c76
--- /dev/null
+++ b/abs/core-testing/lvm2/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 1726 2008-05-15 13:19:26Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=lvm2
+pkgver=2.02.37
+pkgrel=10
+pkgdesc="Logical Volume Manager 2 utilities"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://sourceware.org/lvm2/"
+groups=('base')
+depends=('device-mapper>=1.02.22')
+conflicts=('lvm')
+backup=('etc/lvm/lvm.conf')
+source=(ftp://sources.redhat.com/pub/lvm2/LVM2.$pkgver.tgz
+ lvm2_install
+ lvm2_hook)
+md5sums=('19c19e1f31ec548dc31982478a8a5f63'
+ '40dccdb1044f00fc1e29ca549933d4bd'
+ '73c8c2eba0fe891712c859c18b5b8aa2')
+
+build() {
+ cd $startdir/src/LVM2.$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ make || return 1
+ make DESTDIR=$startdir/pkg sbindir=$startdir/pkg/sbin install || return 1
+ mkdir -p $startdir/pkg/etc/lvm/{archive,backup}
+ # a static binary is required for Arch's initrd
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --enable-static_link
+ make || return 1
+ install -D -m755 tools/lvm.static $startdir/pkg/sbin/lvm.static
+ # add hook
+ install -D -m644 $startdir/src/lvm2_hook $startdir/pkg/lib/initcpio/hooks/lvm2
+ install -D -m644 $startdir/src/lvm2_install $startdir/pkg/lib/initcpio/install/lvm2
+}
diff --git a/abs/core-testing/lvm2/lvm2_hook b/abs/core-testing/lvm2/lvm2_hook
new file mode 100644
index 0000000..b98e87d
--- /dev/null
+++ b/abs/core-testing/lvm2/lvm2_hook
@@ -0,0 +1,16 @@
+# vim:set ft=sh:
+run_hook ()
+{
+ /sbin/modprobe -q dm-mod >/dev/null 2>&1
+ if [ -e "/sys/class/misc/device-mapper" ]; then
+ read dev_t < /sys/class/misc/device-mapper/dev
+ /bin/mknod "/dev/mapper/control" c $(/bin/replace "${dev_t}" ':')
+
+ [ "${quiet}" = "y" ] && LVMQUIET=">/dev/null"
+
+ msg "Scanning logical volumes..."
+ eval /bin/lvm vgscan --ignorelockingfailure $LVMQUIET
+ msg "Activating logical volumes..."
+ eval /bin/lvm vgchange --ignorelockingfailure -ay $LVMQUIET
+ fi
+}
diff --git a/abs/core-testing/lvm2/lvm2_install b/abs/core-testing/lvm2/lvm2_install
new file mode 100644
index 0000000..c6cacc3
--- /dev/null
+++ b/abs/core-testing/lvm2/lvm2_install
@@ -0,0 +1,19 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=" dm-mod "
+ BINARIES=""
+ FILES=""
+ SCRIPT="lvm2"
+
+ add_dir "/dev/mapper"
+ add_file "/sbin/lvm.static" "/bin/lvm"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the necessary modules for an LVM2 root device.
+HELPEOF
+}
diff --git a/abs/core-testing/lzo2/PKGBUILD b/abs/core-testing/lzo2/PKGBUILD
new file mode 100644
index 0000000..f7e2da0
--- /dev/null
+++ b/abs/core-testing/lzo2/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Low Kian Seong <fastmail_low@speedymail.org>
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=lzo2
+pkgver=2.02
+pkgrel=12
+pkgdesc="a portable lossless data compression library written in ANSI C"
+arch=(i686 x86_64)
+url="http://www.oberhumer.com/opensource/lzo"
+license=('GPL')
+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}
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/lzop/PKGBUILD b/abs/core-testing/lzop/PKGBUILD
new file mode 100644
index 0000000..bc2c92e
--- /dev/null
+++ b/abs/core-testing/lzop/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Damir Perisa <damir.perisa@bluewin.ch>
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=lzop
+pkgver=1.02rc1
+pkgrel=3
+pkgdesc="File compressor using lzo lib"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.lzop.org/"
+depends=('lzo2')
+source=(http://www.lzop.org/download/${pkgname}-${pkgver}.tar.gz)
+md5sums=('4b999030716b1353c3dac049b269df7a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/madwifi-utils/PKGBUILD b/abs/core-testing/madwifi-utils/PKGBUILD
new file mode 100644
index 0000000..fc821ba
--- /dev/null
+++ b/abs/core-testing/madwifi-utils/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7960 2008-08-05 10:51:02Z tpowa $
+# Originally by kleptophobiac <kleptophobiac@gmail.com>
+# Modified by James Rayner for the repositories <iphitus@gmail.com>
+
+pkgname=madwifi-utils
+pkgver=0.9.4.3844
+_kernver=2.6.26-ARCH
+pkgrel=1
+pkgdesc="Userspace tools of madwifi drivers for Atheros wireless chipsets."
+arch=(i686 x86_64)
+license=('GPL')
+url="http://madwifi.org"
+depends=('wireless_tools')
+makedepends=('sharutils')
+provides=("madwifi-ng-utils")
+conflicts=("madwifi-ng-utils")
+replaces=("madwifi-ng-utils")
+# subversion source: svn checkout http://svn.madwifi.org/madwifi/trunk madwifi
+source=(ftp://ftp.archlinux.org/other/madwifi/madwifi-${pkgver}.tar.bz2
+ #http://downloads.sourceforge.net/sourceforge/madwifi/madwifi-$pkgver.tar.gz
+ )
+
+build() {
+ [ "${CARCH}" == "i686" ] && export ARCH=i386
+
+ export KERNELPATH=/lib/modules/${_kernver}/build
+ #cd $startdir/src/madwifi-$pkgver
+ cd $startdir/src/madwifi
+ make tools|| return 1
+ make DESTDIR=$startdir/pkg \
+ BINDIR=/usr/bin \
+ MANDIR=/usr/share/man \
+ install-tools
+}
+md5sums=('fc8b627774a91a5f0d6bd4e0d0b206fd')
diff --git a/abs/core-testing/madwifi/PKGBUILD b/abs/core-testing/madwifi/PKGBUILD
new file mode 100644
index 0000000..da2ec7a
--- /dev/null
+++ b/abs/core-testing/madwifi/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 7965 2008-08-05 10:52:26Z tpowa $
+# Originally by kleptophobiac <kleptophobiac@gmail.com>
+# Modified by James Rayner for the repositories <iphitus@gmail.com>
+
+_kernver=2.6.26-ARCH;
+
+pkgname=madwifi
+pkgver=0.9.4.3844
+pkgrel=1
+pkgdesc="Madwifi drivers for Atheros wireless chipsets. For stock arch 2.6 kernel"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://madwifi.org"
+depends=('madwifi-utils' 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+makedepends=('sharutils')
+install=madwifi-ng.install
+# subversion source: svn checkout http://svn.madwifi.org/madwifi/trunk madwifi
+source=(ftp://ftp.archlinux.org/other/madwifi/madwifi-${pkgver}.tar.bz2
+ #http://downloads.sourceforge.net/madwifi/madwifi-${pkgver}.tar.gz
+ )
+
+build() {
+ [ "${CARCH}" == "i686" ] && export ARCH=i386
+
+ #cd $startdir/src/$pkgname-$pkgver
+ cd $startdir/src/$pkgname
+ sed -i -e 's/-Werror//g' Makefile.inc
+ make KERNELPATH=/lib/modules/$_kernver/build KERNELRELEASE=$_kernver modules|| return 1
+ make KERNELPATH=/lib/modules/$_kernver/build KERNELRELEASE=$_kernver modules \
+ DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver install-modules
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+
+ # install to wireless kernel directory
+ mkdir -p $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/madwifi
+ mv $startdir/pkg/lib/modules/$_kernver/net/* $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/madwifi
+ rm -r $startdir/pkg/lib/modules/$_kernver/net/
+}
+md5sums=('fc8b627774a91a5f0d6bd4e0d0b206fd')
diff --git a/abs/core-testing/madwifi/kernel-2.6.19.patch b/abs/core-testing/madwifi/kernel-2.6.19.patch
new file mode 100644
index 0000000..ddef01a
--- /dev/null
+++ b/abs/core-testing/madwifi/kernel-2.6.19.patch
@@ -0,0 +1,383 @@
+diff -ur madwifi-0.9.2/ath/if_ath.c madwifi-0.9.2-neu/ath/if_ath.c
+--- madwifi-0.9.2/ath/if_ath.c 2006-07-08 08:47:19.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ */
+ #include "opt_ah.h"
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath/if_ath_ahb.c madwifi-0.9.2-neu/ath/if_ath_ahb.c
+--- madwifi-0.9.2/ath/if_ath_ahb.c 2006-05-22 06:39:55.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath_ahb.c 2006-11-11 11:50:02.000000000 +0100
+@@ -10,7 +10,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath/if_ath_pci.c madwifi-0.9.2-neu/ath/if_ath_pci.c
+--- madwifi-0.9.2/ath/if_ath_pci.c 2006-07-21 10:00:32.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath_pci.c 2006-11-11 11:50:02.000000000 +0100
+@@ -42,7 +42,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/amrr/amrr.c madwifi-0.9.2-neu/ath_rate/amrr/amrr.c
+--- madwifi-0.9.2/ath_rate/amrr/amrr.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/amrr/amrr.c 2006-11-11 11:50:03.000000000 +0100
+@@ -43,7 +43,7 @@
+ * "IEEE 802.11 Rate Adaptation: A Practical Approach" by
+ * Mathieu Lacage, Hossein Manshaei, Thierry Turletti
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/onoe/onoe.c madwifi-0.9.2-neu/ath_rate/onoe/onoe.c
+--- madwifi-0.9.2/ath_rate/onoe/onoe.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/onoe/onoe.c 2006-11-11 11:50:03.000000000 +0100
+@@ -39,7 +39,7 @@
+ /*
+ * Atsushi Onoe's rate control algorithm.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/sample/sample.c madwifi-0.9.2-neu/ath_rate/sample/sample.c
+--- madwifi-0.9.2/ath_rate/sample/sample.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/sample/sample.c 2006-11-11 11:50:03.000000000 +0100
+@@ -41,7 +41,7 @@
+ * John Bicket's SampleRate control algorithm.
+ */
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/hal/linux/ah_osdep.c madwifi-0.9.2-neu/hal/linux/ah_osdep.c
+--- madwifi-0.9.2/hal/linux/ah_osdep.c 2006-05-19 12:25:45.000000000 +0200
++++ madwifi-0.9.2-neu/hal/linux/ah_osdep.c 2006-11-11 11:50:02.000000000 +0100
+@@ -41,7 +41,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211.c madwifi-0.9.2-neu/net80211/ieee80211.c
+--- madwifi-0.9.2/net80211/ieee80211.c 2006-07-04 12:22:11.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 generic handler
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_acl.c madwifi-0.9.2-neu/net80211/ieee80211_acl.c
+--- madwifi-0.9.2/net80211/ieee80211_acl.c 2006-05-31 23:05:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_acl.c 2006-11-11 11:50:03.000000000 +0100
+@@ -45,7 +45,7 @@
+ * and if found the frame is either accepted (ACL_POLICY_ALLOW)
+ * or rejected (ACL_POLICY_DENT).
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_beacon.c madwifi-0.9.2-neu/net80211/ieee80211_beacon.c
+--- madwifi-0.9.2/net80211/ieee80211_beacon.c 2006-05-19 22:42:19.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_beacon.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 beacon handling routines
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto.c madwifi-0.9.2-neu/net80211/ieee80211_crypto.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 generic crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_ccmp.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_ccmp.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_ccmp.c 2006-06-13 16:09:51.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_ccmp.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ * AP driver. The code is used with the consent of the author and
+ * it's license is included below.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_none.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_none.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_none.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_none.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 NULL crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_tkip.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_tkip.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_tkip.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_tkip.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ * AP driver. The code is used with the consent of the author and
+ * it's license is included below.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_wep.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_wep.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_wep.c 2006-02-06 21:20:57.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_wep.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 WEP crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_input.c madwifi-0.9.2-neu/net80211/ieee80211_input.c
+--- madwifi-0.9.2/net80211/ieee80211_input.c 2006-07-06 05:23:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_input.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 input handling.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_linux.c madwifi-0.9.2-neu/net80211/ieee80211_linux.c
+--- madwifi-0.9.2/net80211/ieee80211_linux.c 2006-07-21 10:59:10.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_linux.c 2006-11-11 11:50:03.000000000 +0100
+@@ -33,7 +33,7 @@
+ /*
+ * IEEE 802.11 support (Linux-specific code)
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_monitor.c madwifi-0.9.2-neu/net80211/ieee80211_monitor.c
+--- madwifi-0.9.2/net80211/ieee80211_monitor.c 2006-04-21 18:57:59.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_monitor.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 monitor mode
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_node.c madwifi-0.9.2-neu/net80211/ieee80211_node.c
+--- madwifi-0.9.2/net80211/ieee80211_node.c 2006-06-13 10:50:37.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_node.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 node handling support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_output.c madwifi-0.9.2-neu/net80211/ieee80211_output.c
+--- madwifi-0.9.2/net80211/ieee80211_output.c 2006-06-10 04:17:05.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_output.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 output handling.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_power.c madwifi-0.9.2-neu/net80211/ieee80211_power.c
+--- madwifi-0.9.2/net80211/ieee80211_power.c 2006-06-10 04:17:05.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_power.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 power save support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_proto.c madwifi-0.9.2-neu/net80211/ieee80211_proto.c
+--- madwifi-0.9.2/net80211/ieee80211_proto.c 2006-06-09 22:41:19.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_proto.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 protocol support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/kmod.h>
+ #include <linux/module.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan.c madwifi-0.9.2-neu/net80211/ieee80211_scan.c
+--- madwifi-0.9.2/net80211/ieee80211_scan.c 2006-04-21 18:57:59.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan_ap.c madwifi-0.9.2-neu/net80211/ieee80211_scan_ap.c
+--- madwifi-0.9.2/net80211/ieee80211_scan_ap.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan_ap.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 ap scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan_sta.c madwifi-0.9.2-neu/net80211/ieee80211_scan_sta.c
+--- madwifi-0.9.2/net80211/ieee80211_scan_sta.c 2006-07-02 09:19:37.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan_sta.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 station scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_wireless.c madwifi-0.9.2-neu/net80211/ieee80211_wireless.c
+--- madwifi-0.9.2/net80211/ieee80211_wireless.c 2006-07-06 05:23:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_wireless.c 2006-11-11 11:50:03.000000000 +0100
+@@ -39,7 +39,7 @@
+ /*
+ * Wireless extensions support for 802.11 common code.
+ */
+-#include <linux/config.h>
++
+
+ #ifdef CONFIG_NET_WIRELESS
+ #include <linux/version.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_xauth.c madwifi-0.9.2-neu/net80211/ieee80211_xauth.c
+--- madwifi-0.9.2/net80211/ieee80211_xauth.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_xauth.c 2006-11-11 11:50:03.000000000 +0100
+@@ -46,7 +46,7 @@
+ * of the available callbacks--the user mode authenticator process works
+ * entirely from messages about stations joining and leaving.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/net80211/if_media.c madwifi-0.9.2-neu/net80211/if_media.c
+--- madwifi-0.9.2/net80211/if_media.c 2006-05-31 23:05:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/if_media.c 2006-11-11 11:50:03.000000000 +0100
+@@ -49,7 +49,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+diff -ur madwifi-0.9.2/regression/ccmp/test_ccmp.c madwifi-0.9.2-neu/regression/ccmp/test_ccmp.c
+--- madwifi-0.9.2/regression/ccmp/test_ccmp.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/ccmp/test_ccmp.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ * you want; e.g. insmod ccmp_test tests=7 will run only test mpdu's
+ * 1, 2, and 3.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/regression/tkip/test_tkip.c madwifi-0.9.2-neu/regression/tkip/test_tkip.c
+--- madwifi-0.9.2/regression/tkip/test_tkip.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/tkip/test_tkip.c 2006-11-11 11:50:02.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * TKIP test module.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/regression/wep/test_wep.c madwifi-0.9.2-neu/regression/wep/test_wep.c
+--- madwifi-0.9.2/regression/wep/test_wep.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/wep/test_wep.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ * you want; e.g. insmod wep_test tests=7 will run only test mpdu's
+ * 1, 2, and 3.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+--- madwifi-0.9.2/Makefile.inc~ 2006-07-14 07:15:56.000000000 +0200
++++ madwifi-0.9.2/Makefile.inc 2006-11-18 10:55:29.000000000 +0100
+@@ -181,7 +181,7 @@
+ #
+ TOOLS= $(DEPTH)/tools
+
+-COPTS+= -Werror
++#COPTS+= -Werror
+ INCS= -include $(obj)/$(DEPTH)/include/compat.h -I$(obj)/$(DEPTH)/include
+
+ ifeq ($(strip $(BUS)),AHB)
diff --git a/abs/core-testing/madwifi/kernel-2.6.20.patch b/abs/core-testing/madwifi/kernel-2.6.20.patch
new file mode 100644
index 0000000..ced7a23
--- /dev/null
+++ b/abs/core-testing/madwifi/kernel-2.6.20.patch
@@ -0,0 +1,73 @@
+diff -urNad madwifi-0.9.2+r1842.20061207~/ath/if_ath.c madwifi-0.9.2+r1842.20061207/ath/if_ath.c
+--- madwifi-0.9.2+r1842.20061207~/ath/if_ath.c 2006-12-25 23:40:20.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/ath/if_ath.c 2006-12-25 23:40:20.968184598 +0900
+@@ -118,7 +118,11 @@
+ static void ath_rxorn_tasklet(TQUEUE_ARG);
+ static void ath_bmiss_tasklet(TQUEUE_ARG);
+ static void ath_bstuck_tasklet(TQUEUE_ARG);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ static void ath_radar_task(TQUEUE_ARG);
++#else
++static void ath_radar_task(struct work_struct *);
++#endif
+ static void ath_dfs_test_return(unsigned long);
+
+ static int ath_stop_locked(struct net_device *);
+@@ -414,8 +418,11 @@
+ ATH_INIT_TQUEUE(&sc->sc_bstucktq,ath_bstuck_tasklet, dev);
+ ATH_INIT_TQUEUE(&sc->sc_rxorntq, ath_rxorn_tasklet, dev);
+ ATH_INIT_TQUEUE(&sc->sc_fataltq, ath_fatal_tasklet, dev);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ ATH_INIT_SCHED_TASK(&sc->sc_radartask, ath_radar_task, dev);
+-
++#else
++ ATH_INIT_SCHED_TASK(&sc->sc_radartask, ath_radar_task);
++#endif
+ /*
+ * Attach the HAL and verify ABI compatibility by checking
+ * the HAL's ABI signature against the one the driver was
+@@ -1737,10 +1744,18 @@
+ }
+
+ static void
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ ath_radar_task(TQUEUE_ARG data)
++#else
++ath_radar_task(struct work_struct *work)
++#endif
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct net_device *dev = (struct net_device *)data;
+ struct ath_softc *sc = dev->priv;
++#else
++ struct ath_softc *sc = container_of(work, struct ath_softc, sc_radartask);
++#endif
+ struct ath_hal *ah = sc->sc_ah;
+ struct ieee80211com *ic = &sc->sc_ic;
+ struct ieee80211_channel ichan;
+diff -urNad madwifi-0.9.2+r1842.20061207~/ath/if_athvar.h madwifi-0.9.2+r1842.20061207/ath/if_athvar.h
+--- madwifi-0.9.2+r1842.20061207~/ath/if_athvar.h 2006-12-25 23:40:20.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/ath/if_athvar.h 2006-12-25 23:40:20.968184598 +0900
+@@ -84,7 +84,11 @@
+ #include <linux/workqueue.h>
+ #define ATH_SCHEDULE_TASK(t) schedule_work((t))
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ #define ATH_INIT_SCHED_TASK(_t, _f, _d) INIT_WORK((_t), (void (*)(void *))(_f), (void *)(_d));
++#else
++#define ATH_INIT_SCHED_TASK(_t, _f) INIT_WORK((_t), (_f));
++#endif
+
+ #define ATH_WORK_THREAD work_struct
+ #define ATH_FLUSH_TASKS flush_scheduled_work
+diff -urNad madwifi-0.9.2+r1842.20061207~/net80211/ieee80211_linux.h madwifi-0.9.2+r1842.20061207/net80211/ieee80211_linux.h
+--- madwifi-0.9.2+r1842.20061207~/net80211/ieee80211_linux.h 2006-08-05 11:05:05.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/net80211/ieee80211_linux.h 2006-12-25 23:40:50.452136942 +0900
+@@ -427,6 +427,7 @@
+ #define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
+ #endif
+
++#include <linux/mm.h>
+ #ifndef offset_in_page
+ #define offset_in_page(p) ((unsigned long) (p) & ~PAGE_MASK)
+ #endif \ No newline at end of file
diff --git a/abs/core-testing/madwifi/madwifi-ng.install b/abs/core-testing/madwifi/madwifi-ng.install
new file mode 100644
index 0000000..a4cac8b
--- /dev/null
+++ b/abs/core-testing/madwifi/madwifi-ng.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ 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.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/mailx/PKGBUILD b/abs/core-testing/mailx/PKGBUILD
new file mode 100644
index 0000000..0041d2a
--- /dev/null
+++ b/abs/core-testing/mailx/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=mailx
+pkgver=8.1.1
+pkgrel=14
+pkgdesc="A commandline utility for sending email"
+arch=(i686 x86_64)
+url="http://www.opengroup.org/onlinepubs/007908799/xcu/mailx.html"
+license=('BSD')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/mailx/$pkgname-$pkgver-fixed.tar.gz \
+ mailx-$pkgver.patch mailx-gcc4.patch)
+md5sums=('63cad526ac64b57bcba2c0daaa1f3048' '905cfa35b5131524bfec0c677d456bd3'\
+ '8716c7c7b3f5d348443230e2fe543bf6')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver-fixed
+ patch -Np1 -i ../mailx-$pkgver.patch || return 1
+ patch -Np0 -i ../mailx-gcc4.patch || return 1
+ make all || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/mailx/mailx-8.1.1.patch b/abs/core-testing/mailx/mailx-8.1.1.patch
new file mode 100644
index 0000000..2c0b777
--- /dev/null
+++ b/abs/core-testing/mailx/mailx-8.1.1.patch
@@ -0,0 +1,32 @@
+diff -Naur mailx-8.1.1-fixed-orig/Makefile mailx-8.1.1-fixed/Makefile
+--- mailx-8.1.1-fixed-orig/Makefile Thu Mar 16 09:30:36 2000
++++ mailx-8.1.1-fixed/Makefile Wed Feb 27 12:50:09 2002
+@@ -7,18 +7,20 @@
+ BINOWN = root
+ BINGRP = mail
+
++DESTDIR =
++
+ all:
+ gcc $(SRCS) -o $(PROG)
+
+ install:
+- mkdir -p /usr/share/misc
+- mkdir -p /usr/share/man/man1
+- mkdir -p /etc
+- mkdir -p /usr/bin
+- install -o $(BINOWN) -g $(BINGRP) -m 2755 $(PROG) /usr/bin
+- install -o root -g root -m 644 mail.1 /usr/share/man/man1
++ mkdir -p $(DESTDIR)/usr/share/misc
++ mkdir -p $(DESTDIR)/usr/man/man1
++ mkdir -p $(DESTDIR)/etc
++ mkdir -p $(DESTDIR)/usr/bin
++ install -o $(BINOWN) -g $(BINGRP) -m 2755 $(PROG) $(DESTDIR)/usr/bin
++ install -o root -g root -m 644 mail.1 $(DESTDIR)/usr/man/man1
+ cd misc; install -c -o ${BINOWN} -g ${BINGRP} \
+- -m 444 ${SFILES} /usr/share/misc
++ -m 444 ${SFILES} $(DESTDIR)/usr/share/misc
+ cd misc; install -c -o root -g root \
+- -m 644 ${EFILES} /etc
++ -m 644 ${EFILES} $(DESTDIR)/etc
+
diff --git a/abs/core-testing/mailx/mailx-gcc4.patch b/abs/core-testing/mailx/mailx-gcc4.patch
new file mode 100644
index 0000000..54740a2
--- /dev/null
+++ b/abs/core-testing/mailx/mailx-gcc4.patch
@@ -0,0 +1,12 @@
+K. Piche: Unofficial patch for mailx.
+
+--- dotlock.c.orig 2005-09-18 20:28:20.000000000 -0400
++++ dotlock.c 2005-09-18 20:26:59.000000000 -0400
+@@ -47,6 +47,7 @@
+ #include <errno.h>
+ #include <signal.h>
+
++#include "def.h"
+ #include "extern.h"
+
+ #ifndef O_SYNC
diff --git a/abs/core-testing/man-pages/PKGBUILD b/abs/core-testing/man-pages/PKGBUILD
new file mode 100644
index 0000000..b9df3f5
--- /dev/null
+++ b/abs/core-testing/man-pages/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 10358 2008-08-27 16:05:22Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=man-pages
+pkgver=3.08
+_posixver=2003-a
+pkgrel=10
+pkgdesc="Linux man pages"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.kernel.org/doc/man-pages/"
+groups=('base')
+depends=()
+source=(http://www.kernel.org/pub/linux/docs/man-pages/$pkgname-$pkgver.tar.gz
+ http://www.kernel.org/pub/linux/docs/man-pages/man-pages-posix/$pkgname-posix-${_posixver}.tar.bz2)
+md5sums=('951bc4cc585b59164557763431151569'
+ '7c78aff03c0a6767ba483d34f19e4b09')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make prefix=$startdir/pkg/usr install || return 1
+
+ cd $startdir/src/$pkgname-posix-${_posixver}
+ make prefix=$startdir/pkg/usr install || return 1
+
+ cd $startdir/pkg/usr/share/man
+ # these are included in coreutils || return 1
+ rm -f man1/{chgrp,chmod,chown,cp,dir,dd}.1 || return 1
+ rm -f man1/{df,dircolors,du,install,ln,ls}.1 || return 1
+ rm -f man1/{mkdir,mkfifo,mknod,mv,rm,rmdir}.1 || return 1
+ rm -f man1/{touch,vdir}.1 || return 1
+ # this is included in shadow
+ rm -f man5/passwd.5 || return 1
+ rm -f man3/getspnam.3 || return 1
+ # this is included in diffutils
+ rm -f man1/diff.1 || return 1
+ # this is included in xf86-input-mouse
+ rm -f man4/mouse.4 || return 1
+ # these are included in module-init-tools
+ rm -f man2/{create_module,delete_module,get_kernel_syms}.2 || return 1
+ rm -f man2/{init_module,query_module}.2 || return 1
+}
diff --git a/abs/core-testing/man/PKGBUILD b/abs/core-testing/man/PKGBUILD
new file mode 100644
index 0000000..6cb2bf0
--- /dev/null
+++ b/abs/core-testing/man/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=man
+pkgver=1.6f
+pkgrel=11
+pkgdesc="A utility for reading man pages"
+arch=('i686' 'x86_64')
+url="http://primates.ximian.com/~flucifredi/man/"
+license=('GPL')
+groups=('base')
+depends=('groff' 'less' 'gzip' 'awk' 'coreutils' 'sh' 'diffutils')
+backup=(etc/man.conf)
+source=(http://primates.ximian.com/~flucifredi/man/man-$pkgver.tar.gz \
+ whatis.cron.daily man-troff.patch)
+md5sums=('67aaaa6df35215e812fd7d89472c44b6'
+ 'b86a5f2dd87c6be30421a8813547229d'
+ '21541cb3073259f7fb9335675ca41b0e')
+options=(!emptydirs)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../man-troff.patch || return 1
+ ./configure -confdir='/etc' -d +lang all -mandir=/usr/share/man
+ make || return 1
+ make PREFIX=$startdir/pkg install || return 1
+
+ sed -i "s|-Tlatin1||g" $startdir/pkg/etc/man.conf
+
+ #install whatis cron script
+ install -D -m744 ../whatis.cron.daily $startdir/pkg/etc/cron.daily/whatis
+}
diff --git a/abs/core-testing/man/man-troff.patch b/abs/core-testing/man/man-troff.patch
new file mode 100644
index 0000000..e08e931
--- /dev/null
+++ b/abs/core-testing/man/man-troff.patch
@@ -0,0 +1,16 @@
+diff -Naur man-1.5p-orig/src/man.conf.in man-1.5p/src/man.conf.in
+--- man-1.5p-orig/src/man.conf.in 2005-01-08 10:50:45.000000000 -0800
++++ man-1.5p/src/man.conf.in 2005-03-18 13:22:17.000000000 -0800
+@@ -88,9 +88,9 @@
+ # If you have a new troff (version 1.18.1?) and its colored output
+ # causes problems, add the -c option to TROFF, NROFF, JNROFF.
+ #
+-TROFF @troff@
+-NROFF @nroff@
+-JNROFF @jnroff@
++TROFF @troff@ -c
++NROFF @nroff@ -c
++JNROFF @jnroff@ -c
+ EQN @eqn@
+ NEQN @neqn@
+ JNEQN @jneqn@
diff --git a/abs/core-testing/man/whatis.cron.daily b/abs/core-testing/man/whatis.cron.daily
new file mode 100755
index 0000000..6332d80
--- /dev/null
+++ b/abs/core-testing/man/whatis.cron.daily
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Make sure MANPATH is complete
+source /etc/profile
+source /etc/profile.d/* 2>/dev/null
+
+# Update the "whatis" database
+/usr/sbin/makewhatis -u -w
+
diff --git a/abs/core-testing/mcpp/PKGBUILD b/abs/core-testing/mcpp/PKGBUILD
new file mode 100644
index 0000000..9d0afce
--- /dev/null
+++ b/abs/core-testing/mcpp/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=mcpp
+pkgver=2.6.4
+pkgrel=2
+pkgdesc="Matsui's CPP implementation precisely conformed to standards"
+arch=(i686 x86_64)
+license=('custom:')
+url="http://mcpp.sourceforge.net"
+source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz \
+ mcpp-2.6.4-patch)
+depends=(glibc)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ${startdir}/src/mcpp-2.6.4-patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/LICENSE \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
+md5sums=('c0f5aa9b13e36ea0f2ab9358c5d65153'
+ '80890eb2988d7e80964b814cf134f842')
diff --git a/abs/core-testing/mcpp/mcpp-2.6.4-patch b/abs/core-testing/mcpp/mcpp-2.6.4-patch
new file mode 100644
index 0000000..bbdf09c
--- /dev/null
+++ b/abs/core-testing/mcpp/mcpp-2.6.4-patch
@@ -0,0 +1,22 @@
+*** src/support.c.orig 2007-05-18 21:31:17.000000000 +0900
+--- src/support.c 2007-09-17 22:11:27.000000000 +0900
+***************
+*** 1678,1686 ****
+ , NULL, (long) c, NULL);
+ case '\t': /* Horizontal space */
+ case ' ':
+! if (mcpp_mode == OLD_PREP) {
+! if ((*(tp - 1) != ' ' && *(tp - 1) != COM_SEP))
+! *(tp - 1) = ' '; /* Squeeze COM_SEP with spaces */
+ } else {
+ if (*(tp - 1) != ' ')
+ *tp++ = ' '; /* Squeeze white spaces */
+--- 1678,1685 ----
+ , NULL, (long) c, NULL);
+ case '\t': /* Horizontal space */
+ case ' ':
+! if (mcpp_mode == OLD_PREP && (*(tp - 1) == COM_SEP)) {
+! *(tp - 1) = ' '; /* Squeeze COM_SEP with spaces */
+ } else {
+ if (*(tp - 1) != ' ')
+ *tp++ = ' '; /* Squeeze white spaces */
diff --git a/abs/core-testing/mdadm/PKGBUILD b/abs/core-testing/mdadm/PKGBUILD
new file mode 100644
index 0000000..13c5c98
--- /dev/null
+++ b/abs/core-testing/mdadm/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=mdadm
+pkgver=2.6.4
+pkgrel=10
+pkgdesc="A tool for managing/monitoring Linux md device arrays, also known as Software RAID"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.cse.unsw.edu.au/~neilb/source/mdadm/"
+groups=('base')
+depends=('glibc')
+backup=('etc/mdadm.conf')
+source=(ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/mdadm-$pkgver.tar.bz2 \
+ mdadm mdadm.conf raid-partitions_install raid-partitions_hook)
+replaces=('raidtools')
+md5sums=('b616697aecc870d5d580bd6e010472a3'
+ '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
+ rm mdadm
+ make LDFLAGS+=-static || return 1
+ install -D -m755 mdadm $startdir/pkg/sbin/mdadm.static
+}
diff --git a/abs/core-testing/mdadm/mdadm b/abs/core-testing/mdadm/mdadm
new file mode 100755
index 0000000..e196f36
--- /dev/null
+++ b/abs/core-testing/mdadm/mdadm
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /sbin/mdadm`
+case "$1" in
+ start)
+ stat_busy "Starting mdadm RAID Monitor"
+ if [ -z "$PID" ]; then
+ /sbin/mdadm --monitor --scan -i /var/run/mdadm.pid -f
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon mdadm
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping mdadm RAID Monitor"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mdadm
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core-testing/mdadm/mdadm-2.2-segfault.patch b/abs/core-testing/mdadm/mdadm-2.2-segfault.patch
new file mode 100644
index 0000000..d956a20
--- /dev/null
+++ b/abs/core-testing/mdadm/mdadm-2.2-segfault.patch
@@ -0,0 +1,12 @@
+diff -Naur mdadm-2.2-orig/Assemble.c mdadm-2.2/Assemble.c
+--- mdadm-2.2-orig/Assemble.c 2005-12-04 21:56:20.000000000 -0800
++++ mdadm-2.2/Assemble.c 2006-02-06 10:56:37.000000000 -0800
+@@ -219,7 +219,7 @@
+ }
+ if (dfd >= 0) close(dfd);
+
+- if (ident->uuid_set && (!update && strcmp(update, "uuid")!= 0) &&
++ if (ident->uuid_set && (!update || strcmp(update, "uuid")!= 0) &&
+ (!super || same_uuid(info.uuid, ident->uuid, tst->ss->swapuuid)==0)) {
+ if ((inargv && verbose >= 0) || verbose > 0)
+ fprintf(stderr, Name ": %s has wrong uuid.\n",
diff --git a/abs/core-testing/mdadm/mdadm.conf b/abs/core-testing/mdadm/mdadm.conf
new file mode 100644
index 0000000..0b2c712
--- /dev/null
+++ b/abs/core-testing/mdadm/mdadm.conf
@@ -0,0 +1,64 @@
+# mdadm configuration file
+#
+# mdadm will function properly without the use of a configuration file,
+# but this file is useful for keeping track of arrays and member disks.
+# In general, a mdadm.conf file is created, and updated, after arrays
+# are created. This is the opposite behavior of /etc/raidtab which is
+# created prior to array construction.
+#
+#
+# the config file takes two types of lines:
+#
+# DEVICE lines specify a list of devices of where to look for
+# potential member disks
+#
+# ARRAY lines specify information about how to identify arrays so
+# so that they can be activated
+#
+
+
+# You can have more than one device line and use wild cards. The first
+# example includes SCSI the first partition of SCSI disks /dev/sdb,
+# /dev/sdc, /dev/sdd, /dev/sdj, /dev/sdk, and /dev/sdl. The second
+# line looks for array slices on IDE disks.
+#
+#DEVICE /dev/sd[bcdjkl]1
+#DEVICE /dev/hda1 /dev/hdb1
+#
+# The designation "partitions" will scan all partitions found in
+# /proc/partitions
+DEVICE partitions
+
+
+# ARRAY lines specify an array to assemble and a method of identification.
+# Arrays can currently be identified by using a UUID, superblock minor number,
+# or a listing of devices.
+#
+# super-minor is usually the minor number of the metadevice
+# UUID is the Universally Unique Identifier for the array
+# Each can be obtained using
+#
+# mdadm -D <md>
+#
+# To capture the UUIDs for all your RAID arrays to this file, run this:
+# # mdadm -D --scan >>/etc/mdadm.conf
+#
+#ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371
+#ARRAY /dev/md1 super-minor=1
+#ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1
+#
+# ARRAY lines can also specify a "spare-group" for each array. mdadm --monitor
+# will then move a spare between arrays in a spare-group if one array has a
+# failed drive but no spare
+#ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1
+#ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1
+#
+
+
+# When used in --follow (aka --monitor) mode, mdadm needs a
+# mail address and/or a program. To start mdadm's monitor mode, add
+# "mdadm" to your DAEMONS array in /etc/rc.conf
+#
+# If the lines are not found, mdadm will exit quietly
+#MAILADDR root@mydomain.tld
+#PROGRAM /usr/sbin/handle-mdadm-events
diff --git a/abs/core-testing/mdadm/raid-partitions_hook b/abs/core-testing/mdadm/raid-partitions_hook
new file mode 100644
index 0000000..bed1cb2
--- /dev/null
+++ b/abs/core-testing/mdadm/raid-partitions_hook
@@ -0,0 +1,21 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ #TODO scan for these somehow...
+ /sbin/modprobe -aq linear multipath raid0 raid1 raid456 raid10>/dev/null 2>&1
+ # md= can be specified multiple times. The simplistic commandline
+ # parsing does not handle this, so we will let mdassemble parse it
+ for i in $(replace $(echo $md) ',' ' '); do
+ case $i in d[0-9])
+ for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
+ /sbin/mdadm --create -a mdp /dev/md_d$i >/dev/null 2>&1
+ done
+ mdadm --assemble --auto=mdp /dev/md_$(replace $(echo $md) ',' ' ')
+ export USE_RAID_ARRAY=1
+ ;;
+ esac
+ done
+ if ! [ "$USE_RAID_ARRAY" = "1" ] ; then
+ /bin/mdassemble ${CMDLINE}
+ fi
+}
diff --git a/abs/core-testing/mdadm/raid-partitions_install b/abs/core-testing/mdadm/raid-partitions_install
new file mode 100644
index 0000000..8fe5184
--- /dev/null
+++ b/abs/core-testing/mdadm/raid-partitions_install
@@ -0,0 +1,32 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=" $(checked_modules "drivers/md/*" | grep -v "dm-") "
+ BINARIES="mdadm"
+ FILES=""
+ SCRIPT="raid-partitions"
+ add_file "/usr/lib/klibc/bin/mdassemble" "/bin/mdassemble"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the necessary modules for an raid mdp/partitionable root device,
+ and assemble the raid device when run.
+
+ Kernel Parameters:
+ Specify all your md arrays with md= parameter:
+ ::: Example ::: md=d0,/dev/sda3,/dev/sda4 md=d1,/dev/hda1,/dev/hdb1
+ This will setup 2 md partitionable arrays
+
+ Setup:
+ - to assemble a partitionable array:
+ md=d<md device no.>,dev0,dev1,...,devn
+
+ Parameters:
+ - <md device no.> = the number of the md device:
+ 0 means md0, 1 means md1, ...
+ - <dev0-devn>: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1
+HELPEOF
+}
diff --git a/abs/core-testing/mesa/PKGBUILD b/abs/core-testing/mesa/PKGBUILD
new file mode 100644
index 0000000..9d36715
--- /dev/null
+++ b/abs/core-testing/mesa/PKGBUILD
@@ -0,0 +1,63 @@
+# $Id: PKGBUILD 3486 2008-06-22 21:12:34Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=mesa
+pkgver=7.0.3
+pkgrel=3
+pkgdesc="Mesa OpenGL library"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://mesa3d.sourceforge.net"
+depends=('libgl' 'glproto>=1.4.9' 'gcc-libs' 'libxt')
+makedepends=('imake' 'pkgconfig')
+conflicts=('mesa-apps')
+replaces=('mesa-apps')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaDemos-${pkgver}.tar.bz2
+ ftp://ftp.archlinux.org/other/mesa/gl-manpages-1.0.1.tar.bz2
+ mesa-6.5-apps-noglut.patch)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e'
+ '47fd6863621d3c9c7dbb870ab7f0c303'
+ '6ae05158e678f4594343f32c2ca50515'
+ 'cc5a4ea4ea8de4425997fcda2a9d8648')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}
+ patch -Np0 -i ${startdir}/src/mesa-6.5-apps-noglut.patch || return 1
+
+ unset CFLAGS
+ unset CXXFLAGS
+
+ CONFIG="linux-dri-x86"
+ if [ "${CARCH}" = "x86_64" ]; then
+ CONFIG="linux-dri-x86-64"
+ sed -i -e "s/lib64/lib/g" configs/${CONFIG}
+ fi
+ echo "EXTRA_LIB_PATH =" >> configs/${CONFIG}
+ echo "SRC_DIRS = glx/x11 glu glw" >> configs/${CONFIG}
+ rm -f include/GL/glut*h
+ echo "USING_EGL = 0" >> configs/${CONFIG}
+ echo "PROGRAM_DIRS =" >> configs/${CONFIG}
+ echo "MKDEP = makedepend" >> configs/${CONFIG}
+ echo "DRI_DIRS =" >> configs/${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> configs/${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> configs/${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> configs/${CONFIG}
+
+ make ${CONFIG} || return 1
+ install -m755 -d ${startdir}/pkg/usr
+ make INSTALL_DIR=${startdir}/pkg/usr install || return 1
+ install -m644 include/GL/*.h ${startdir}/pkg/usr/include/GL/ || return 1
+
+ rm -f ${startdir}/pkg/usr/lib/libGL.so*
+ cd progs/xdemos
+ make CFLAGS+="-I${startdir}/pkg/usr/include" glxinfo glxgears || return 1
+ install -m755 -d ${startdir}/pkg/usr/bin || return 1
+ install -m755 glxinfo glxgears ${startdir}/pkg/usr/bin/ || return 1
+
+ cd ${startdir}/src/gl-manpages-1.0.1
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/mesa/mesa-6.5-apps-noglut.patch b/abs/core-testing/mesa/mesa-6.5-apps-noglut.patch
new file mode 100644
index 0000000..ac76a60
--- /dev/null
+++ b/abs/core-testing/mesa/mesa-6.5-apps-noglut.patch
@@ -0,0 +1,17 @@
+--- progs/xdemos/Makefile.dont-libglut-me-harder-ok-thx-bye 2006-07-25 05:27:36.000000000 -0400
++++ progs/xdemos/Makefile 2006-07-25 05:33:57.000000000 -0400
+@@ -49,8 +49,13 @@
+ -rm -f $(PROGS)
+ -rm -f *.o *~
+
+-
+ # special cases
++glxgears:
++ $(CC) $(CFLAGS) glxgears.c -lGL -o $@
++
++glxinfo:
++ $(CC) $(CFLAGS) -I$(INCDIR) glxinfo.c -L$(TOP)/lib -L$(TOP)/lib64 -lGL -lGLU -o $@
++
+ pbinfo: pbinfo.o pbutil.o
+ $(CC) $(CFLAGS) pbinfo.o pbutil.o $(APP_LIB_DEPS) -o $@
+
diff --git a/abs/core-testing/mkinitcpio/PKGBUILD b/abs/core-testing/mkinitcpio/PKGBUILD
new file mode 100644
index 0000000..2de6daf
--- /dev/null
+++ b/abs/core-testing/mkinitcpio/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 1779 2008-05-19 16:02:05Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=mkinitcpio
+pkgver=0.5.19
+pkgrel=10
+pkgdesc="Advanced, modular initramfs image creation utility"
+arch=(i686 x86_64)
+url="http://www.archlinux.org/"
+license=('GPL')
+groups=('base')
+depends=('klibc>=1.5-5' 'klibc-extras>=2.4' 'klibc-udev>=116-3'
+ 'gen-init-cpio' 'klibc-module-init-tools' 'coreutils'
+ 'bash' 'klibc-kbd')
+#makedepends=('asciidoc')
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+backup=(etc/mkinitcpio.conf)
+replaces=('mkinitrd' 'mkinitramfs')
+md5sums=('e2398505a28bbdb985b72fc0c4a18216')
+
+build()
+{
+ cd $startdir/src/${pkgname}-${pkgver}
+ ./install.sh $startdir/pkg
+}
diff --git a/abs/core-testing/mlocate/PKGBUILD b/abs/core-testing/mlocate/PKGBUILD
new file mode 100644
index 0000000..50db92b
--- /dev/null
+++ b/abs/core-testing/mlocate/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 1939 2008-05-24 00:35:29Z james $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: lydgate
+
+pkgname=mlocate
+pkgver=0.20
+pkgrel=11
+pkgdesc="Faster merging drop-in for slocate"
+arch=(i686 x86_64)
+url="http://carolina.mff.cuni.cz/~trmac/blog/mlocate"
+license=("GPL")
+groups=("base")
+conflicts=('slocate')
+provides=('slocate')
+replaces=('slocate')
+depends=('glibc')
+backup=('etc/updatedb.conf')
+install=mlocate.install
+source=("https://fedorahosted.org/mlocate/attachment/wiki/MlocateDownloads/mlocate-$pkgver.tar.bz2?format=raw" \
+ updatedb.conf updatedb.cron.daily)
+build() {
+ cd "$startdir"/src/$pkgname-$pkgver
+
+ # Build!
+ sed -i '/^groupname /s/mlocate/locate/' Makefile.in
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib
+ make || return 1
+
+ # Set up a default updatedb.conf and a daily cronjob
+ install -v -D -m644 ../updatedb.conf "$startdir"/pkg/etc/updatedb.conf
+ install -v -D -m744 ../updatedb.cron.daily "$startdir"/pkg/etc/cron.daily/updatedb
+
+ # Install Mlocate
+ make DESTDIR="$startdir"/pkg install
+
+ cd "$startdir"/pkg
+ ln -sv locate usr/bin/slocate
+ chgrp -v 21 usr/bin/locate
+ chmod -v 2755 usr/bin/locate
+
+ mkdir -pv var/lib
+ install -d -m750 -g21 var/lib/locate
+}
+
+md5sums=('ad5e4eb1f2aecf1a5af9fe36c6e297f4'
+ '08f642828fe8a6a0c8e5059133c9a9e2'
+ 'eee7f9db8c6145724313af6fd5fe9d66')
diff --git a/abs/core-testing/mlocate/mlocate.db b/abs/core-testing/mlocate/mlocate.db
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core-testing/mlocate/mlocate.db
diff --git a/abs/core-testing/mlocate/mlocate.install b/abs/core-testing/mlocate/mlocate.install
new file mode 100644
index 0000000..d29e4d8
--- /dev/null
+++ b/abs/core-testing/mlocate/mlocate.install
@@ -0,0 +1,27 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade "$1" "$1"
+ echo "mlocate command is technically locate, but slocate is symlinked and still works."
+ echo "You should run updatedb as root."
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # This can be removed after {m,x}locate have both been updated
+ getent group slocate &>/dev/null && usr/sbin/groupdel slocate &>/dev/null
+ getent group mlocate &>/dev/null && usr/sbin/groupdel mlocate &>/dev/null
+
+ getent group locate || usr/sbin/groupadd -g 21 locate &>/dev/null
+ chown -R root:locate var/lib/mlocate
+}
+
+# arg 1: the old package version
+pre_remove() {
+ getent group locate &>/dev/null && usr/sbin/groupdel locate &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/mlocate/updatedb.conf b/abs/core-testing/mlocate/updatedb.conf
new file mode 100644
index 0000000..f02fe97
--- /dev/null
+++ b/abs/core-testing/mlocate/updatedb.conf
@@ -0,0 +1,5 @@
+# directories to exclude from the slocate database:
+PRUNEPATHS="/tmp /var/tmp /usr/tmp /var/spool /var/cache"
+
+# filesystems to exclude from the slocate database:
+PRUNEFS="nfs nfs4 smbfs cifs ncpfs afs proc autofs auto iso9660 coda ftpfs sshfs shfs"
diff --git a/abs/core-testing/mlocate/updatedb.cron.daily b/abs/core-testing/mlocate/updatedb.cron.daily
new file mode 100755
index 0000000..b457cf8
--- /dev/null
+++ b/abs/core-testing/mlocate/updatedb.cron.daily
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Update the "locate" database
+if [ -x /usr/bin/updatedb ]; then
+ if [ -f /etc/updatedb.conf ]; then
+ /usr/bin/updatedb
+ else
+ /usr/bin/updatedb -f proc
+ fi
+fi
diff --git a/abs/core-testing/module-init-tools/PKGBUILD b/abs/core-testing/module-init-tools/PKGBUILD
new file mode 100644
index 0000000..b4260d1
--- /dev/null
+++ b/abs/core-testing/module-init-tools/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 5982 2008-07-22 12:44:28Z thomas $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=module-init-tools
+pkgver=3.4
+pkgrel=10
+pkgdesc="Utilities for inserting and removing modules from the Linux kernel"
+arch=(i686 x86_64)
+url="http://www.kernel.org"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+backup=('etc/modprobe.conf')
+source=(http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-$pkgver.tar.bz2
+ ftp://sunsite.informatik.rwth-aachen.de/pub/linux/gentoo/distfiles/module-init-tools-$pkgver-manpages.tar.bz2
+ makefile.patch
+ modprobe.conf
+ fix-modprobe-ignore-path.patch)
+md5sums=('db6ac059e80e8dd4389dbe81ee61f3c6'
+ '006678277788b5a0402b171f4a235cd6'
+ '47e14fda7a46668290d11d0444d81826'
+ '6db59d41e04941a790f80c1a4432faef'
+ '335c3f8317f257ddd70b09271b4360bd')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../makefile.patch
+ patch -Np0 -i ../fix-modprobe-ignore-path.patch || return 1
+ sed -i 's|/usr/bin/install|/bin/install|g' install-with-care
+ ./configure --prefix=/usr --exec-prefix=/
+ make || return 1
+ INSTALL=/bin/install make DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 ../modprobe.conf $startdir/pkg/etc/modprobe.conf
+}
diff --git a/abs/core-testing/module-init-tools/fix-modprobe-ignore-path.patch b/abs/core-testing/module-init-tools/fix-modprobe-ignore-path.patch
new file mode 100644
index 0000000..c562b3f
--- /dev/null
+++ b/abs/core-testing/module-init-tools/fix-modprobe-ignore-path.patch
@@ -0,0 +1,14 @@
+--- modprobe.c~ 2005-12-02 00:42:09.000000000 +0100
++++ modprobe.c 2008-03-12 09:39:14.000000000 +0100
+@@ -1236,9 +1236,8 @@
+
+ /* Try defaults. */
+ for (i = 0; i < ARRAY_SIZE(default_configs); i++) {
+- if (read_config(default_configs[i], name, dump_only, removing,
+- options, commands, aliases, blacklist))
+- return;
++ read_config(default_configs[i], name, dump_only, removing,
++ options, commands, aliases, blacklist);
+ }
+ }
+
diff --git a/abs/core-testing/module-init-tools/makefile.patch b/abs/core-testing/module-init-tools/makefile.patch
new file mode 100644
index 0000000..458b062
--- /dev/null
+++ b/abs/core-testing/module-init-tools/makefile.patch
@@ -0,0 +1,22 @@
+diff -Naur module-init-tools-3.1-orig/Makefile.in module-init-tools-3.1/Makefile.in
+--- module-init-tools-3.1-orig/Makefile.in 2004-11-14 16:59:48.000000000 -0800
++++ module-init-tools-3.1/Makefile.in 2004-11-19 11:09:36.000000000 -0800
+@@ -704,18 +704,8 @@
+
+ # docbook2man writes file itself, doesn't do stdout.
+ %.8: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+
+ %.5: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+
+ # docbook2man creates extra crap files which need cleaning.
+ distclean: killbuildmanpages
diff --git a/abs/core-testing/module-init-tools/modprobe.conf b/abs/core-testing/module-init-tools/modprobe.conf
new file mode 100644
index 0000000..d2fc24b
--- /dev/null
+++ b/abs/core-testing/module-init-tools/modprobe.conf
@@ -0,0 +1,3 @@
+#
+# /etc/modprobe.conf (for v2.6 kernels)
+#
diff --git a/abs/core-testing/module-init-tools/modutils-gcc4.patch b/abs/core-testing/module-init-tools/modutils-gcc4.patch
new file mode 100644
index 0000000..3f90a9b
--- /dev/null
+++ b/abs/core-testing/module-init-tools/modutils-gcc4.patch
@@ -0,0 +1,280 @@
+Fix building with newer gcc versions.
+
+Most changes taken from Debian.
+
+--- obj/obj_ia64.c
++++ obj/obj_ia64.c
+@@ -127,6 +127,7 @@
+ return (*(bundle + 1) >> 23) & 0x1ffffffffff;
+
+ default:
++ ;
+ }
+ return (-1);
+ }
+--- depmod/depmod.c
++++ depmod/depmod.c
+@@ -1133,7 +1133,7 @@
+
+ for (ksym = ksyms; so_far < nksyms; ++so_far, ksym++) {
+ if (strncmp((char *)ksym->name, "GPLONLY_", 8) == 0)
+- ((char *)ksym->name) += 8;
++ ksym->name = ((char *)ksym->name) + 8;
+ assert(n_syms < MAX_MAP_SYM);
+ symtab[n_syms++] = addsym((char *)ksym->name, mod, SYM_DEFINED, 0);
+ }
+@@ -1265,7 +1265,7 @@
+ * error. Use the error() routine but do not count
+ * any errors. Remove in 2.5.
+ */
+- int save_errors = errors;
++ int save_errors = error_count;
+ if (!quiet && nberr == 0)
+ error("*** Unresolved symbols in %s",
+ ptmod->name);
+@@ -1274,7 +1274,7 @@
+ nberr++;
+ if (flag_unresolved_error)
+ ret = 1;
+- errors = save_errors;
++ error_count = save_errors;
+ }
+ }
+ verbose("%s\n", ptmod->name + skipchars);
+@@ -1675,6 +1675,6 @@
+ #else
+ int main(int argc, char **argv)
+ {
+- return depmod_main(argc, argv) || errors;
++ return depmod_main(argc, argv) || error_count;
+ }
+ #endif /* defined(COMMON_3264) && defined(ONLY_32) */
+--- genksyms/genksyms.c
++++ genksyms/genksyms.c
+@@ -45,7 +45,7 @@
+ int flag_debug, flag_dump_defs, flag_warnings;
+ int checksum_version = 1, kernel_version = version(2,0,0);
+
+-static int errors;
++static int num_errors;
+ static int nsyms;
+
+ static struct symbol *expansion_trail;
+@@ -458,7 +458,7 @@
+ va_end(args);
+ putc('\n', stderr);
+
+- errors++;
++ num_errors++;
+ }
+ }
+
+@@ -476,7 +476,7 @@
+ va_end(args);
+ putc('\n', stderr);
+
+- errors++;
++ num_errors++;
+ }
+ }
+
+@@ -597,5 +597,5 @@
+ nsyms, HASH_BUCKETS, (double)nsyms / (double)HASH_BUCKETS);
+ }
+
+- return errors != 0;
++ return num_errors != 0;
+ }
+--- include/util.h
++++ include/util.h
+@@ -39,8 +39,8 @@
+ extern int xftw(const char *directory, xftw_func_t);
+
+ /* Error logging */
+-extern int log;
+-extern int errors;
++extern int logging;
++extern int error_count;
+ extern const char *error_file;
+
+ extern int flag_verbose;
+--- insmod/insmod.c
++++ insmod/insmod.c
+@@ -275,7 +275,7 @@
+ if (strncmp((char *)s->name, "GPLONLY_", 8) == 0) {
+ gplonly_seen = 1;
+ if (gpl)
+- ((char *)s->name) += 8;
++ s->name = ((char *)s->name) + 8;
+ else
+ continue;
+ }
+@@ -1679,7 +1679,7 @@
+ error_file = "insmod";
+
+ /* To handle repeated calls from combined modprobe */
+- errors = optind = 0;
++ error_count = optind = 0;
+
+ /* Process the command line. */
+ while ((o = getopt_long(argc, argv, "fhkLmnpqrsSvVxXyYNe:o:O:P:R:",
+@@ -2064,7 +2064,7 @@
+ goto out;
+ /**** No symbols or sections to be changed after kallsyms above ***/
+
+- if (errors)
++ if (error_count)
+ goto out;
+
+ /* If we were just checking, we made it. */
+@@ -2123,10 +2123,10 @@
+ test_read.m.read_start = m_addr + sizeof(struct module);
+ test_read.m.read_end = test_read.m.read_start + sizeof(test_read.data);
+ if (sys_init_module(m_name, (struct module *) &test_read)) {
+- int old_errors = errors;
++ int old_errors = error_count;
+ error("has persistent data but the kernel is too old to support it."
+ " Expect errors during rmmod as well");
+- errors = old_errors;
++ error_count = old_errors;
+ }
+ }
+
+@@ -2152,7 +2152,7 @@
+ #else
+ init_module(m_name, f, m_size, blob_name, noload, flag_load_map);
+ #endif
+- if (errors) {
++ if (error_count) {
+ if (!noload)
+ delete_module(m_name);
+ goto out;
+--- insmod/kallsyms.c
++++ insmod/kallsyms.c
+@@ -80,7 +80,7 @@
+ error_file = "kallsyms";
+
+ /* To handle repeated calls from combined modprobe */
+- errors = optind = 0;
++ error_count = optind = 0;
+
+ /* Process the command line. */
+ while ((c = getopt_long(argc, argv, "Vh",
+--- insmod/modprobe.c
++++ insmod/modprobe.c
+@@ -1023,7 +1023,7 @@
+ if (quiet)
+ my_argv[my_argc++] = "-q";
+
+- if (log)
++ if (logging)
+ my_argv[my_argc++] = "-s";
+
+ if (insmod_opt) {
+--- insmod/rmmod.c
++++ insmod/rmmod.c
+@@ -261,9 +261,9 @@
+ read_parm.m.read_start = mp->sym->value;
+ read_parm.m.read_end = read_parm.m.read_start + datasize;
+ if (sys_init_module(module, (struct module *) &read_parm)) {
+- int old_errors = errors;
++ int old_errors = error_count;
+ error("has persistent data but the kernel is too old to support it.");
+- errors = old_errors;
++ error_count = old_errors;
+ return(0);
+ }
+
+--- util/logger.c
++++ util/logger.c
+@@ -31,10 +31,10 @@
+
+ /*======================================================================*/
+
+-int log;
++int logging;
+ static int silent;
+
+-int errors;
++int error_count;
+ const char *error_file;
+ const char *program_name;
+
+@@ -75,7 +75,7 @@
+
+ if (silent)
+ ;
+- else if (log) {
++ else if (logging) {
+ char buf[2*PATH_MAX];
+ int n;
+
+@@ -100,7 +100,7 @@
+ putc('\n', stderr);
+ }
+
+- errors++;
++ error_count++;
+ }
+
+ void lprintf(const char *fmt,...)
+@@ -108,7 +108,7 @@
+ va_list args;
+
+ if (silent);
+- else if (log) {
++ else if (logging) {
+ char buf[2*PATH_MAX];
+ va_start(args, fmt);
+ vsnprintf(buf, sizeof(buf), fmt, args);
+@@ -132,5 +132,5 @@
+ #ifdef STOREMSG
+ atexit(dumpmsg);
+ #endif
+- log = 1;
++ logging = 1;
+ }
+--- obj/obj_kallsyms.c
++++ obj/obj_kallsyms.c
+@@ -200,8 +200,8 @@
+
+ /* Initial contents, header + one entry per input section. No strings. */
+ osec->header.sh_size = sizeof(*a_hdr) + loaded*sizeof(*a_sec);
+- a_hdr = (struct kallsyms_header *) osec->contents =
+- xmalloc(osec->header.sh_size);
++ osec->contents = xmalloc(osec->header.sh_size);
++ a_hdr = (struct kallsyms_header *) osec->contents;
+ memset(osec->contents, 0, osec->header.sh_size);
+ a_hdr->size = sizeof(*a_hdr);
+ a_hdr->sections = loaded;
+@@ -275,8 +275,8 @@
+ a_hdr->symbol_off +
+ a_hdr->symbols*a_hdr->symbol_size +
+ strings_size - strings_left;
+- a_hdr = (struct kallsyms_header *) osec->contents =
+- xrealloc(a_hdr, a_hdr->total_size);
++ osec->contents = xrealloc(a_hdr, a_hdr->total_size);
++ a_hdr = (struct kallsyms_header *) osec->contents;
+ p = (char *)a_hdr + a_hdr->symbol_off;
+ memcpy(p, symbols, a_hdr->symbols*a_hdr->symbol_size);
+ free(symbols);
+--- obj/obj_ppc.c
++++ obj/obj_ppc.c
+@@ -25,6 +25,7 @@
+ #include <obj.h>
+ #include <util.h>
+ #include <assert.h>
++#include <stdlib.h>
+
+
+ /*======================================================================*/
+@@ -255,7 +256,8 @@
+ archdata_sec->header.sh_size = 0;
+ sec = obj_find_section(f, "__ftr_fixup");
+ if (sec) {
+- ad = (struct archdata *) (archdata_sec->contents) = xmalloc(sizeof(*ad));
++ archdata_sec->contents = xmalloc(sizeof(*ad));
++ ad = (struct archdata *) (archdata_sec->contents);
+ memset(ad, 0, sizeof(*ad));
+ archdata_sec->header.sh_size = sizeof(*ad);
+ ad->__start___ftr_fixup = sec->header.sh_addr;
diff --git a/abs/core-testing/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch b/abs/core-testing/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch
new file mode 100644
index 0000000..79deb93
--- /dev/null
+++ b/abs/core-testing/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch
@@ -0,0 +1,286 @@
+diff -Nur MPlayer-1.0rc1.orig/configure MPlayer-1.0rc1/configure
+--- MPlayer-1.0rc1.orig/configure 2006-10-23 00:32:31.000000000 +0200
++++ MPlayer-1.0rc1/configure 2006-11-11 14:02:38.000000000 +0100
+@@ -257,6 +257,7 @@
+ --disable-ftp Disable ftp support [enabled]
+ --disable-vstream Disable tivo vstream client support [autodetect]
+ --disable-pthreads Disable Posix threads support [autodetect]
++ --disable-dbus-glib Disable D-BUS GLib interface (required for GNOME screensaver support) [autodetect]
+ --disable-ass Disable internal SSA/ASS subtitles support [autodetect]
+ --enable-rpath Enable runtime linker path for extra libs [disabled]
+
+@@ -1721,6 +1722,7 @@
+ _musepack=auto
+ _vstream=auto
+ _pthreads=auto
++_dbus_glib=auto
+ _ass=auto
+ _rpath=no
+ _asmalign_pot=auto
+@@ -2033,6 +2035,8 @@
+ --disable-vstream) _vstream=no ;;
+ --enable-pthreads) _pthreads=yes ;;
+ --disable-pthreads) _pthreads=no ;;
++ --enable-dbus-glib) _dbus_glib=yes ;;
++ --disable-dbus-glib) _dbus_glib=no ;;
+ --enable-ass) _ass=yes ;;
+ --disable-ass) _ass=no ;;
+ --enable-rpath) _rpath=yes ;;
+@@ -7029,6 +7033,19 @@
+ fi
+ echores "$_gethostbyname2"
+
++echocheck "D-BUS GLib interface"
++if test "$_dbus_glib" = auto && pkg-config --exists dbus-glib-1; then
++ _dbus_glib=yes
++ _inc_dbus_glib=`pkg-config --cflags dbus-glib-1 2>/dev/null`
++ _ld_dbus_glib=`pkg-config --libs dbus-glib-1 2>/dev/null`
++fi
++
++if test "$_dbus_glib" = yes; then
++ _def_dbus_glib='#define HAVE_DBUS_GLIB 1'
++else
++ _def_dbus_glib='#undef HAVE_DBUS_GLIB'
++fi
++echores "$_dbus_glib"
+
+ # --------------- GUI specific tests begin -------------------
+ echocheck "GUI"
+@@ -7521,6 +7538,10 @@
+ VESA_LIB = $_ld_vesa
+ AA_LIB = $_ld_aa
+ CACA_LIB = $_ld_caca
++DBUS_GLIB_INC = $_inc_dbus_glib
++DBUS_GLIB_LIB = $_ld_dbus_glib
++DBUS_GLIB = $_dbus_glib
++
+
+ # audio output
+ OSS = $_ossaudio
+@@ -8378,6 +8399,7 @@
+ $_def_tga
+ $_def_toolame
+ $_def_twolame
++$_def_dbus_glib
+
+ /* used by GUI: */
+ $_def_xshape
+diff -Nur MPlayer-1.0rc1.orig/help/help_mp-en.h MPlayer-1.0rc1/help/help_mp-en.h
+--- MPlayer-1.0rc1.orig/help/help_mp-en.h 2006-10-23 00:32:29.000000000 +0200
++++ MPlayer-1.0rc1/help/help_mp-en.h 2006-11-11 14:02:38.000000000 +0100
+@@ -679,6 +679,13 @@
+ #define MSGTR_InsertingAfVolume "[Mixer] No hardware mixing, inserting volume filter.\n"
+ #define MSGTR_NoVolume "[Mixer] No volume control available.\n"
+
++// gnome_screensaver.c
++#define MSGTR_OpenBusConnectionError "%s: Failed to open connection to bus: %s\n"
++#define MSGTR_RemoteMethodException "%s: Caught remote method exception %s: %s\n"
++#define MSGTR_GError "%s: Error: %s\n"
++#define MSGTR_GNOMEScreensaverEnabled "GNOME screensaver enabled\n"
++#define MSGTR_GNOMEScreensaverDisabled "GNOME screensaver disabled\n"
++
+ // ====================== GUI messages/buttons ========================
+
+ #ifdef HAVE_NEW_GUI
+diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c MPlayer-1.0rc1/libvo/gnome_screensaver.c
+--- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c 1970-01-01 01:00:00.000000000 +0100
++++ MPlayer-1.0rc1/libvo/gnome_screensaver.c 2006-11-11 14:02:38.000000000 +0100
+@@ -0,0 +1,120 @@
++/*
++ * gnome_screensaver.c v0.0.7
++ *
++ * Enable/Disable the GNOME screensaver
++ * Supports GNOME screensaver API 2.14 and 2.15
++ *
++ * Call gnome_screensaver_control(1) to enable and
++ * gnome_screensaver_control(0) to disable
++ *
++ */
++
++#include <stdlib.h>
++#include <unistd.h>
++#include <dbus/dbus-glib.h>
++
++#include "gnome_screensaver.h"
++#include "mp_msg.h"
++#include "help_mp.h"
++
++#define GS_SERVICE "org.gnome.ScreenSaver"
++#define GS_PATH "/org/gnome/ScreenSaver"
++#define GS_INTERFACE "org.gnome.ScreenSaver"
++
++#define GS_APPLICATION_NAME "MPlayer"
++#define GS_REASON_FOR_INHIBIT "Playing a movie"
++
++static guint32 cookie;
++
++void gnome_screensaver_control(int enable)
++{
++ DBusGConnection *connection;
++ GError *error;
++ DBusGProxy *proxy;
++ gboolean ret;
++ char *funcname = "gnome_screensaver_control()";
++
++ g_type_init();
++
++ /* Get a connection to the session bus */
++ error = NULL;
++ connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
++ if (connection == NULL) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_OpenBusConnectionError, error->message);
++ g_error_free(error);
++ return;
++ }
++
++ /* Create a proxy object */
++ proxy = dbus_g_proxy_new_for_name(connection,
++ GS_SERVICE, GS_PATH, GS_INTERFACE);
++
++ /* Enable the screensaver */
++ if (enable) {
++ /* First call the GNOME screensaver 2.15 API method */
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "UnInhibit", &error, G_TYPE_UINT,
++ cookie, G_TYPE_INVALID);
++
++ /* If this fails, try the GNOME screensaver 2.14 API */
++ if (!ret && error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_UNKNOWN_METHOD) {
++ mp_msg(MSGT_VO, MSGL_V,
++ "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n",
++ funcname);
++ g_error_free(error);
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "AllowActivation", &error,
++ G_TYPE_INVALID, G_TYPE_INVALID);
++ }
++ }
++ /* Disable the screensaver */
++ else {
++ /* First call the GNOME screensaver 2.15 API method */
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "Inhibit", &error, G_TYPE_STRING,
++ GS_APPLICATION_NAME, G_TYPE_STRING,
++ GS_REASON_FOR_INHIBIT, G_TYPE_INVALID,
++ G_TYPE_UINT, cookie, G_TYPE_INVALID);
++
++ /* If this fails, try the GNOME screensaver 2.14 API */
++ if (!ret && error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_UNKNOWN_METHOD) {
++ mp_msg(MSGT_VO, MSGL_V,
++ "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n",
++ funcname);
++ g_error_free(error);
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "InhibitActivation", &error,
++ G_TYPE_STRING, GS_REASON_FOR_INHIBIT,
++ G_TYPE_INVALID, G_TYPE_INVALID);
++ }
++ }
++
++ if (!ret) {
++ /* Check if it's a remote exception or a regular GError */
++ if (error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_RemoteMethodException,
++ dbus_g_error_get_name(error), error->message);
++ }
++ else {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_GError, error->message);
++ }
++ g_error_free(error);
++ }
++ else {
++ mp_msg(MSGT_VO, MSGL_INFO,
++ enable ? MSGTR_GNOMEScreensaverEnabled :
++ MSGTR_GNOMEScreensaverDisabled);
++ }
++
++ g_object_unref(proxy);
++}
+diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h MPlayer-1.0rc1/libvo/gnome_screensaver.h
+--- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h 1970-01-01 01:00:00.000000000 +0100
++++ MPlayer-1.0rc1/libvo/gnome_screensaver.h 2006-11-11 14:02:38.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef _GNOME_SCREENSAVER_H
++#define _GNOME_SCREENSAVER_H
++
++extern void gnome_screensaver_control(int enable);
++
++#endif /* !_GNOME_SCREENSAVER_H */
+diff -Nur MPlayer-1.0rc1.orig/libvo/Makefile MPlayer-1.0rc1/libvo/Makefile
+--- MPlayer-1.0rc1.orig/libvo/Makefile 2006-10-23 00:32:26.000000000 +0200
++++ MPlayer-1.0rc1/libvo/Makefile 2006-11-11 14:02:38.000000000 +0100
+@@ -39,6 +39,11 @@
+ SRCS += vosub_vidix.c
+ endif
+
++ifeq ($(DBUS_GLIB),yes)
++SRCS += gnome_screensaver.c
++LIBAV_INC += $(DBUS_GLIB_INC)
++endif
++
+ INCLUDE = -I. -I.. -I../osdep $(LIBAV_INC)
+ CFLAGS = $(INCLUDE) $(OPTFLAGS) -DMPG12PLAY
+
+diff -Nur MPlayer-1.0rc1.orig/libvo/x11_common.c MPlayer-1.0rc1/libvo/x11_common.c
+--- MPlayer-1.0rc1.orig/libvo/x11_common.c 2006-10-23 00:32:26.000000000 +0200
++++ MPlayer-1.0rc1/libvo/x11_common.c 2006-11-11 14:02:38.000000000 +0100
+@@ -58,6 +58,10 @@
+ #include "mplayer.h"
+ #endif
+
++#ifdef HAVE_DBUS_GLIB
++#include "gnome_screensaver.h"
++#endif
++
+ #define WIN_LAYER_ONBOTTOM 2
+ #define WIN_LAYER_NORMAL 4
+ #define WIN_LAYER_ONTOP 6
+@@ -1701,8 +1705,12 @@
+ timeout_save = 0;
+ }
+
+- if (stop_xscreensaver)
++ if (stop_xscreensaver) {
+ xscreensaver_enable();
++#ifdef HAVE_DBUS_GLIB
++ gnome_screensaver_control(1);
++#endif
++ }
+ if (kdescreensaver_was_running && stop_xscreensaver)
+ {
+ system
+@@ -1747,8 +1755,12 @@
+ allow_exp);
+ }
+ // turning off screensaver
+- if (stop_xscreensaver)
++ if (stop_xscreensaver) {
+ xscreensaver_disable(mDisplay);
++#ifdef HAVE_DBUS_GLIB
++ gnome_screensaver_control(0);
++#endif
++ }
+ if (stop_xscreensaver && !kdescreensaver_was_running)
+ {
+ kdescreensaver_was_running =
+diff -Nur MPlayer-1.0rc1.orig/Makefile MPlayer-1.0rc1/Makefile
+--- MPlayer-1.0rc1.orig/Makefile 2006-10-23 00:32:31.000000000 +0200
++++ MPlayer-1.0rc1/Makefile 2006-11-11 14:02:38.000000000 +0100
+@@ -75,6 +75,7 @@
+ $(DIRECTFB_LIB) \
+ $(CACA_LIB) \
+ $(VESA_LIB) \
++ $(DBUS_GLIB_LIB) \
+
+ ifeq ($(VIDIX),yes)
+ VO_LIBS += vidix/libvidix.a
diff --git a/abs/core-testing/mplayer/PKGBUILD b/abs/core-testing/mplayer/PKGBUILD
new file mode 100644
index 0000000..f69a21a
--- /dev/null
+++ b/abs/core-testing/mplayer/PKGBUILD
@@ -0,0 +1,67 @@
+# $Id: PKGBUILD 3632 2008-06-26 11:48:49Z paul $
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+pkgname=mplayer
+pkgver=1.0rc2
+pkgrel=5
+pkgdesc="A movie player for linux"
+arch=(i686 x86_64)
+depends=('libxxf86dga' 'libxv' 'libmad' 'giflib' 'cdparanoia' 'gtk2'
+ 'sdl' 'lame' 'libtheora' 'xvidcore'
+ 'libgl' 'smbclient' 'aalib' 'jack-audio-connection-kit'
+ 'x264>=20080625' 'faac' 'lirc-utils' 'ttf-dejavu')
+license=('GPL')
+url="http://www.mplayerhq.hu/"
+makedepends=('libcaca' 'unzip' 'live-media' 'libdca' 'mesa')
+backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf')
+source=(http://www.mplayerhq.hu/MPlayer/releases/MPlayer-${pkgver}.tar.bz2
+ http://www.mplayerhq.hu/MPlayer/skins/Blue-1.7.tar.bz2
+ http://www.mplayerhq.hu/MPlayer/patches/demux_audio_fix_20080129.diff
+ http://www.mplayerhq.hu/MPlayer/patches/demux_mov_fix_20080129.diff
+ http://www.mplayerhq.hu/MPlayer/patches/url_fix_20080120.diff
+ http://www.mplayerhq.hu/MPlayer/patches/stream_cddb_fix_20080120.diff
+ ivtv_2.6.24.patch)
+md5sums=('7e27e535c2d267637df34898f1b91707'
+ 'e4e2020d11b681aac898103b3ba723c4'
+ '320af7daa1b248ee8e8c15d34d7923e3'
+ 'ce999929155f509a3e6bee41d9d613ed'
+ '6a2c124586e1e6c44ae4ca1b4be9b6e4'
+ 'c7d1bcdd61fcceb7598d61fe2213c587'
+ '1ef35068587f6b6dbc99342567895236')
+
+build() {
+ cd $startdir/src/MPlayer-${pkgver}
+
+ # Custom CFLAGS break the mplayer build
+ unset CFLAGS
+
+ # Add support for gnome screensaver
+ #patch -p1 -i ../MPlayer-1.0rc1-gnome-screensaver.patch || return 1
+
+ # Workaround for changed ivtv interface since it went mainline in 2.6.24
+ patch -p1 -i ../ivtv_2.6.24.patch || return 1
+
+ # Fix security issues
+ for p in demux_audio_fix_20080129.diff demux_mov_fix_20080129.diff url_fix_20080120.diff stream_cddb_fix_20080120.diff; do
+ patch -p0 -i ../${p}
+ done
+
+ cd $startdir/src/MPlayer-${pkgver}
+
+ ./configure --prefix=/usr --enable-gui --disable-arts --enable-x11 \
+ --enable-runtime-cpudetection --confdir=/etc/mplayer --disable-nas \
+ --enable-gl --enable-tv-v4l1 --enable-tv-v4l2 --enable-largefiles \
+ --disable-liblzo --disable-speex --disable-openal \
+ --disable-fribidi --disable-libdv --disable-musepack \
+ --language=all --disable-dvdnav --disable-esd --disable-mga \
+ --disable-libamr_nb \
+ --with-extraincdir=/usr/lib/live-media
+
+ [ "$CARCH" = "i686" ] && sed 's|-march=i486|-march=i686|g' -i config.mak
+
+ make || return 1
+ make -j1 DESTDIR=${startdir}/pkg install
+ cp etc/{codecs.conf,input.conf,example.conf} ${startdir}/pkg/etc/mplayer/
+ ln -s /usr/share/fonts/TTF/DejaVuSans.ttf ${startdir}/pkg/usr/share/mplayer/subfont.ttf
+ rm -rf ${startdir}/pkg/usr/share/mplayer/font
+ mv ${startdir}/src/Blue ${startdir}/pkg/usr/share/mplayer/skins/default
+}
diff --git a/abs/core-testing/mplayer/demux_audio_fix_20080129.diff b/abs/core-testing/mplayer/demux_audio_fix_20080129.diff
new file mode 100644
index 0000000..1b18b6e
--- /dev/null
+++ b/abs/core-testing/mplayer/demux_audio_fix_20080129.diff
@@ -0,0 +1,11 @@
+--- libmpdemux/demux_audio.c (revision 24724)
++++ libmpdemux/demux_audio.c (working copy)
+@@ -229,6 +229,8 @@
+ ptr += 4;
+
+ comment = ptr;
++ if (&comment[length] < comments || &comment[length] >= &comments[blk_len])
++ return;
+ c = comment[length];
+ comment[length] = 0;
+
diff --git a/abs/core-testing/mplayer/demux_mov_fix_20080129.diff b/abs/core-testing/mplayer/demux_mov_fix_20080129.diff
new file mode 100644
index 0000000..d83477b
--- /dev/null
+++ b/abs/core-testing/mplayer/demux_mov_fix_20080129.diff
@@ -0,0 +1,45 @@
+--- libmpdemux/demux_mov.c (revision 24724)
++++ libmpdemux/demux_mov.c (working copy)
+@@ -173,11 +173,12 @@
+ i=trak->chunkmap_size;
+ while(i>0){
+ --i;
+- for(j=trak->chunkmap[i].first;j<last;j++){
++ j=FFMAX(trak->chunkmap[i].first, 0);
++ for(;j<last;j++){
+ trak->chunks[j].desc=trak->chunkmap[i].sdid;
+ trak->chunks[j].size=trak->chunkmap[i].spc;
+ }
+- last=trak->chunkmap[i].first;
++ last=FFMIN(trak->chunkmap[i].first, trak->chunks_size);
+ }
+
+ #if 0
+@@ -235,6 +236,8 @@
+ s=0;
+ for(j=0;j<trak->durmap_size;j++){
+ for(i=0;i<trak->durmap[j].num;i++){
++ if (s >= trak->samples_size)
++ break;
+ trak->samples[s].pts=pts;
+ ++s;
+ pts+=trak->durmap[j].dur;
+@@ -246,6 +249,8 @@
+ for(j=0;j<trak->chunks_size;j++){
+ off_t pos=trak->chunks[j].pos;
+ for(i=0;i<trak->chunks[j].size;i++){
++ if (s >= trak->samples_size)
++ break;
+ trak->samples[s].pos=pos;
+ mp_msg(MSGT_DEMUX, MSGL_DBG3, "Sample %5d: pts=%8d off=0x%08X size=%d\n",s,
+ trak->samples[s].pts,
+@@ -1568,8 +1573,7 @@
+ if( udta_len>udta_size)
+ udta_len=udta_size;
+ {
+- char dump[udta_len-4];
+- stream_read(demuxer->stream, (char *)&dump, udta_len-4-4);
++ stream_skip(demuxer->stream, udta_len-4-4);
+ udta_size -= udta_len;
+ }
+ }
diff --git a/abs/core-testing/mplayer/ivtv_2.6.24.patch b/abs/core-testing/mplayer/ivtv_2.6.24.patch
new file mode 100644
index 0000000..4e0a3fe
--- /dev/null
+++ b/abs/core-testing/mplayer/ivtv_2.6.24.patch
@@ -0,0 +1,33 @@
+Patch to account for linux-2.6.24.x including ivtv, but MPlayer won't
+build against it. See this link for more information and the origin
+of the patch:
+http://archives.free.net.ph/message/20080201.201454.1047775e.en.html
+Thanks to Robby Workman for pointing me to this one.
+
+diff -Nur MPlayer-1.0rc2.orig/configure MPlayer-1.0rc2/configure
+--- MPlayer-1.0rc2.orig/configure 2007-10-07 21:49:33.000000000 +0200
++++ MPlayer-1.0rc2/configure 2008-03-10 10:27:29.000000000 +0100
+@@ -4920,7 +4920,7 @@
+ echores "$_dxr3"
+
+
+-echocheck "IVTV TV-Out"
++echocheck "IVTV TV-Out (pre linux-2.6.24)"
+ if test "$_ivtv" = auto ; then
+ cat > $TMPC << EOF
+ #include <stdlib.h>
+@@ -4928,7 +4928,13 @@
+ #include <linux/types.h>
+ #include <linux/videodev2.h>
+ #include <linux/ivtv.h>
+-int main(void) { return 0; }
++#include <sys/ioctl.h>
++int main(void) {
++struct ivtv_cfg_stop_decode sd;
++struct ivtv_cfg_start_decode sd1;
++ioctl (0, IVTV_IOC_START_DECODE, &sd1);
++ioctl (0, IVTV_IOC_STOP_DECODE, &sd);
++return 0; }
+ EOF
+ _ivtv=no
+ cc_check && _ivtv=yes
diff --git a/abs/core-testing/mplayer/stream_cddb_fix_20080120.diff b/abs/core-testing/mplayer/stream_cddb_fix_20080120.diff
new file mode 100644
index 0000000..45f7226
--- /dev/null
+++ b/abs/core-testing/mplayer/stream_cddb_fix_20080120.diff
@@ -0,0 +1,32 @@
+--- stream/stream_cddb.c (revision 24724)
++++ stream/stream_cddb.c (working copy)
+@@ -53,6 +53,7 @@
+ #include "version.h"
+ #include "stream.h"
+ #include "network.h"
++#include "libavutil/intreadwrite.h"
+
+ #define DEFAULT_FREEDB_SERVER "freedb.freedb.org"
+ #define DEFAULT_CACHE_DIR "/.cddb/"
+@@ -453,8 +454,9 @@
+ } else {
+ len = ptr2-ptr+1;
+ }
++ len = FFMIN(sizeof(album_title) - 1, len);
+ strncpy(album_title, ptr, len);
+- album_title[len-2]='\0';
++ album_title[len]='\0';
+ }
+ mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
+ return 0;
+@@ -490,8 +492,9 @@
+ } else {
+ len = ptr2-ptr+1;
+ }
++ len = FFMIN(sizeof(album_title) - 1, len);
+ strncpy(album_title, ptr, len);
+- album_title[len-2]='\0';
++ album_title[len]='\0';
+ }
+ mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
+ return cddb_request_titles(cddb_data);
diff --git a/abs/core-testing/mplayer/url_fix_20080120.diff b/abs/core-testing/mplayer/url_fix_20080120.diff
new file mode 100644
index 0000000..a073589
--- /dev/null
+++ b/abs/core-testing/mplayer/url_fix_20080120.diff
@@ -0,0 +1,10 @@
+--- stream/url.c (revision 24724)
++++ stream/url.c (working copy)
+@@ -328,6 +328,7 @@
+ }
+ }
+
++ tmp = NULL;
+ while(i < len) {
+ // look for the next char that must be kept
+ for (j=i;j<len;j++) {
diff --git a/abs/core-testing/mtools/PKGBUILD b/abs/core-testing/mtools/PKGBUILD
new file mode 100644
index 0000000..b9854ef
--- /dev/null
+++ b/abs/core-testing/mtools/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=mtools
+pkgver=3.9.11
+pkgrel=1
+pkgdesc="A collection of utilities to access MS-DOS disks from Unix without mounting them"
+url="http://mtools.linux.lu/"
+source=(http://mtools.linux.lu/$pkgname-$pkgver.tar.gz)
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc')
+makedepends=('texinfo')
+md5sums=('3c0ae05b0d98a5d3bd06d3d72fcaf80d')
+options=('makeflags')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --infodir=/usr/share/mtools --sysconfdir=/etc
+ make || return 1
+ make prefix=$startdir/pkg/usr infodir=$startdir/pkg/usr/share/mtools install
+}
diff --git a/abs/core-testing/mysql-clients/PKGBUILD b/abs/core-testing/mysql-clients/PKGBUILD
new file mode 100644
index 0000000..ecbdcdd
--- /dev/null
+++ b/abs/core-testing/mysql-clients/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 2464 2008-06-02 11:38:11Z alexander $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=mysql-clients
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="MySQL client tools"
+arch=(i686 x86_64)
+depends=("libmysqlclient>=${pkgver}" 'gcc-libs' 'readline')
+makedepends=('tcp_wrappers' 'libtool' 'gcc')
+url=('http://www.mysql.com/')
+options=('!libtool')
+license=('GPL')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz)
+
+build() {
+ cd $startdir/src/mysql-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --localstatedir=/var --sysconfdir=/etc \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db --disable-server
+
+ for dir in include strings regex mysys dbug extra; do
+ pushd ${dir} || return 1
+ make || return 1
+ popd
+ done
+ cd client
+ sed -i -e 's|\$(top_builddir)/libmysql/libmysqlclient.la|/usr/lib/mysql/libmysqlclient.so|g' Makefile
+ make link_sources
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431')
diff --git a/abs/core-testing/mysql-python/PKGBUILD b/abs/core-testing/mysql-python/PKGBUILD
new file mode 100644
index 0000000..45714c1
--- /dev/null
+++ b/abs/core-testing/mysql-python/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 8941 2008-08-17 01:11:04Z eric $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=mysql-python
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="MySQL support for Python"
+arch=("i686" "x86_64")
+url="http://sourceforge.net/projects/mysql-python"
+depends=('python>=2.5' 'libmysqlclient')
+makedepends=('mysql>=5.0.23' 'pyrex>=0.9.8.4' 'setuptools>=0.6c8')
+source=("http://heanet.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-${pkgver}.tar.gz")
+md5sums=('532268f02870bea18c1d465e88afff30')
+
+build() {
+ cd ${startdir}/src/MySQL-python-${pkgver}
+ yes | python setup.py install --root=${startdir}/pkg
+}
diff --git a/abs/core-testing/mysql/PKGBUILD b/abs/core-testing/mysql/PKGBUILD
new file mode 100644
index 0000000..88460bc
--- /dev/null
+++ b/abs/core-testing/mysql/PKGBUILD
@@ -0,0 +1,54 @@
+# $Id: PKGBUILD 2465 2008-06-02 11:38:50Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+pkgname=mysql
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="A fast SQL database server"
+arch=(i686 x86_64)
+backup=(etc/my.cnf etc/conf.d/mysqld)
+depends=("mysql-clients>=${pkgver}" 'tcp_wrappers')
+makedepends=('libtool')
+url=('http://www.mysql.com/')
+options=('!libtool')
+license=('GPL')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz
+ mysql-no-clients.patch
+ mysqld
+ my.cnf
+ mysqld.conf.d)
+
+build() {
+ # PIC
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/mysql-no-clients.patch || return 1
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db
+
+ # fixes
+ sed -i -e 's/^.*HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE.*$/#define\ HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE/g' include/config.h || return 1
+ sed -i -e 's/size_socket/socklen_t/g' sql/mysqld.cc || return 1
+
+ pushd include || return
+ make || return 1
+ popd
+ pushd libmysql
+ make link_sources get_password.lo || return
+ popd
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -rf ${startdir}/pkg/usr/{mysql-test,sql-bench}
+ install -D -m644 ../my.cnf ${startdir}/pkg/etc/my.cnf
+ install -D -m755 ../mysqld ${startdir}/pkg/etc/rc.d/mysqld
+ install -D -m644 ../mysqld.conf.d ${startdir}/pkg/etc/conf.d/mysqld
+ rm -f ${startdir}/pkg/usr/bin/mysql_config
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431'
+ 'e892aac36cbeb57f0e003ec0936afb3b'
+ '64d79a5a34043c1de949d734b720c217'
+ '0ee035590ffc61d32de994f461fd2bd2'
+ '4a9077fc95ec6db1d5420e0cdc74d31c')
diff --git a/abs/core-testing/mysql/my.cnf b/abs/core-testing/mysql/my.cnf
new file mode 100644
index 0000000..927b9c8
--- /dev/null
+++ b/abs/core-testing/mysql/my.cnf
@@ -0,0 +1,149 @@
+# 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)
+#
+# 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
+# with --help option.
+
+# The following options will be passed to all MySQL clients
+[client]
+#password = your_password
+port = 3306
+socket = /tmp/mysql.sock
+
+# Here follows entries for some specific programs
+
+# The MySQL server
+[mysqld]
+port = 3306
+socket = /tmp/mysql.sock
+datadir = /var/lib/mysql
+skip-locking
+key_buffer = 16M
+max_allowed_packet = 1M
+table_cache = 64
+sort_buffer_size = 512K
+net_buffer_length = 16K
+myisam_sort_buffer_size = 8M
+
+# 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.
+# All interaction with mysqld must be made via Unix sockets or named pipes.
+# Note that using this option without enabling named pipes on Windows
+# (via the "enable-named-pipe" option) will render mysqld useless!
+#
+skip-networking
+
+# Replication Master Server (default)
+# binary logging is required for replication
+#log-bin
+
+# required unique id between 1 and 2^32 - 1
+# defaults to 1 if master-host is not set
+# but will not function as a master if omitted
+server-id = 1
+
+# Replication Slave (comment out master section to use this)
+#
+# To configure this host as a replication slave, you can choose between
+# two methods :
+#
+# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
+# the syntax is:
+#
+# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
+# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
+#
+# where you replace <host>, <user>, <password> by quoted strings and
+# <port> by the master's port number (3306 by default).
+#
+# Example:
+#
+# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
+# MASTER_USER='joe', MASTER_PASSWORD='secret';
+#
+# OR
+#
+# 2) Set the variables below. However, in case you choose this method, then
+# start replication for the first time (even unsuccessfully, for example
+# if you mistyped the password in master-password and the slave fails to
+# connect), the slave will create a master.info file, and any later
+# change in this file to the variables' values below will be ignored and
+# overridden by the content of the master.info file, unless you shutdown
+# the slave server, delete master.info and restart the slaver server.
+# For that reason, you may want to leave the lines below untouched
+# (commented) and instead use CHANGE MASTER TO (see above)
+#
+# required unique id between 2 and 2^32 - 1
+# (and different from the master)
+# defaults to 2 if master-host is set
+# but will not function as a slave if omitted
+#server-id = 2
+#
+# The replication master for this slave - required
+#master-host = <hostname>
+#
+# The username the slave will use for authentication when connecting
+# to the master - required
+#master-user = <username>
+#
+# The password the slave will authenticate with when connecting to
+# the master - required
+#master-password = <password>
+#
+# The port the master is listening on.
+# optional - defaults to 3306
+#master-port = <port>
+#
+# binary logging - not required for slaves, but recommended
+#log-bin
+
+# Point the following paths to different dedicated disks
+#tmpdir = /tmp/
+#log-update = /path-to-dedicated-directory/hostname
+
+# Uncomment the following if you are using BDB tables
+#bdb_cache_size = 4M
+#bdb_max_lock = 10000
+
+# Uncomment the following if you are using InnoDB tables
+#innodb_data_home_dir = /var/lib/mysql
+#innodb_data_file_path = ibdata1:10M:autoextend
+#innodb_log_group_home_dir = /var/lib/mysql
+#innodb_log_arch_dir = /var/lib/mysql
+# You can set .._buffer_pool_size up to 50 - 80 %
+# of RAM but beware of setting memory usage too high
+#innodb_buffer_pool_size = 16M
+#innodb_additional_mem_pool_size = 2M
+# Set .._log_file_size to 25 % of buffer pool size
+#innodb_log_file_size = 5M
+#innodb_log_buffer_size = 8M
+#innodb_flush_log_at_trx_commit = 1
+#innodb_lock_wait_timeout = 50
+
+[mysqldump]
+quick
+max_allowed_packet = 16M
+
+[mysql]
+#no-auto-rehash
+# Remove the next comment character if you are not familiar with SQL
+#safe-updates
+
+[isamchk]
+key_buffer = 20M
+sort_buffer_size = 20M
+read_buffer = 2M
+write_buffer = 2M
+
+[myisamchk]
+key_buffer = 20M
+sort_buffer_size = 20M
+read_buffer = 2M
+write_buffer = 2M
+
+[mysqlhotcopy]
+interactive-timeout
diff --git a/abs/core-testing/mysql/mysql-no-clients.patch b/abs/core-testing/mysql/mysql-no-clients.patch
new file mode 100644
index 0000000..e1fb5e0
--- /dev/null
+++ b/abs/core-testing/mysql/mysql-no-clients.patch
@@ -0,0 +1,65 @@
+diff -ruN mysql-5.0.51.orig/Makefile.in mysql-5.0.51/Makefile.in
+--- mysql-5.0.51.orig/Makefile.in 2007-12-07 12:59:21.000000000 +0000
++++ mysql-5.0.51/Makefile.in 2007-12-07 13:03:21.000000000 +0000
+@@ -376,7 +376,7 @@
+ SUBDIRS = . include @docs_dirs@ @zlib_dir@ @yassl_dir@ \
+ @readline_topdir@ sql-common scripts \
+ @thread_dirs@ pstack \
+- @sql_union_dirs@ @man_dirs@ tests \
++ strings mysys dbug extra regex bdb innobase myisam myisammrg heap vio sql @man_dirs@ tests \
+ netware @libmysqld_dirs@ \
+ @bench_dirs@ support-files @tools_dirs@
+
+diff -ruN mysql-5.0.51.orig/include/Makefile.in mysql-5.0.51/include/Makefile.in
+--- mysql-5.0.51.orig/include/Makefile.in 2007-12-07 12:59:20.000000000 +0000
++++ mysql-5.0.51/include/Makefile.in 2007-12-07 13:00:12.000000000 +0000
+@@ -557,7 +557,6 @@
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+ install: $(BUILT_SOURCES)
+- $(MAKE) $(AM_MAKEFLAGS) install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+diff -ruN mysql-5.0.51.orig/tests/Makefile.in mysql-5.0.51/tests/Makefile.in
+--- mysql-5.0.51.orig/tests/Makefile.in 2007-12-07 12:59:20.000000000 +0000
++++ mysql-5.0.51/tests/Makefile.in 2007-12-07 13:01:51.000000000 +0000
+@@ -96,7 +96,7 @@
+ am_mysql_client_test_OBJECTS = mysql_client_test.$(OBJEXT) \
+ my_memmem.$(OBJEXT)
+ mysql_client_test_OBJECTS = $(am_mysql_client_test_OBJECTS)
+-am__DEPENDENCIES_1 = $(top_builddir)/libmysql/libmysqlclient.la
++am__DEPENDENCIES_1 = /usr/lib/mysql/libmysqlclient.so
+ am__DEPENDENCIES_2 =
+ mysql_client_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+@@ -106,7 +106,7 @@
+ thread_test_SOURCES = thread_test.c
+ thread_test_OBJECTS = thread_test.$(OBJEXT)
+ thread_test_LDADD = $(LDADD)
+-thread_test_DEPENDENCIES = $(top_builddir)/libmysql/libmysqlclient.la
++thread_test_DEPENDENCIES = /usr/lib/mysql/libmysqlclient.so
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+@@ -405,7 +405,7 @@
+ $(openssl_includes)
+
+ LDADD = @CLIENT_EXTRA_LDFLAGS@ \
+- $(top_builddir)/libmysql/libmysqlclient.la
++ /usr/lib/mysql/libmysqlclient.so
+
+ mysql_client_test_LDADD = $(LDADD) $(CXXLDFLAGS)
+ mysql_client_test_SOURCES = mysql_client_test.c\
+diff -ruN mysql-5.0.51.orig/tools/Makefile.in mysql-5.0.51/tools/Makefile.in
+--- mysql-5.0.51.orig/tools/Makefile.in 2007-12-07 12:59:19.000000000 +0000
++++ mysql-5.0.51/tools/Makefile.in 2007-12-07 13:02:32.000000000 +0000
+@@ -369,7 +369,7 @@
+ $(openssl_includes)
+
+ LDADD = @CLIENT_EXTRA_LDFLAGS@ \
+- $(top_builddir)/libmysql_r/libmysqlclient_r.la \
++ /usr/lib/mysql/libmysqlclient_r.so \
+ @openssl_libs@ @yassl_libs@ @ZLIB_LIBS@
+
+ mysqltestmanager_SOURCES = mysqlmanager.c
diff --git a/abs/core-testing/mysql/mysqld b/abs/core-testing/mysql/mysqld
new file mode 100755
index 0000000..0fcecf7
--- /dev/null
+++ b/abs/core-testing/mysql/mysqld
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+MYSQLD_ROOT="/var/lib/mysql"
+# source application-specific settings
+[ -f /etc/conf.d/mysqld ] && . /etc/conf.d/mysqld
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/mysqld`
+if [ ! `egrep '^mysql:' /etc/group` ]; then
+ stat_busy "Adding mysql group"
+ groupadd -g 89 mysql
+ stat_done
+fi
+if [ ! `egrep '^mysql:' /etc/passwd` ]; then
+ stat_busy "Adding mysql user"
+ useradd -u 89 -g mysql -d $MYSQLD_ROOT -s /bin/false mysql
+ [ -d $MYSQLD_ROOT ] && chown -R mysql.mysql $MYSQLD_ROOT
+ stat_done
+fi
+
+if [ ! -d $MYSQLD_ROOT ]; then
+ mkdir $MYSQLD_ROOT
+ /usr/bin/mysql_install_db --datadir=$MYSQLD_ROOT --user=mysql
+ chown -R mysql.mysql $MYSQLD_ROOT
+fi
+
+if [ ! -e /var/log/mysqld.log ]; then
+ touch /var/log/mysqld.log
+ chown mysql /var/log/mysqld.log
+fi
+
+case "$1" in
+ start)
+ stat_busy "Starting MySQL"
+ if [ -z "$PID" ]; then
+ /usr/bin/mysqld_safe --datadir=$MYSQLD_ROOT &>/dev/null &
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ sleep 1 # wait on children
+ PID=`pidof -o %PPID /usr/sbin/mysqld`
+ if [ -z "$PID" ]; then
+ stat_fail
+ exit 1
+ else
+ echo $PID >/var/run/mysqld.pid
+ add_daemon mysqld
+ stat_done
+ fi
+ fi
+ else
+ stat_fail
+ exit 1
+ fi
+ ;;
+
+ stop)
+ stat_busy "Stopping MySQL"
+ if [ ! -z "$PID" ]; then
+ kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ rm -f /var/run/mysqld.pid &>/dev/null
+ rm_daemon mysqld
+ stat_done
+ fi
+ else
+ stat_fail
+ exit 1
+ fi
+ ;;
+
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/mysql/mysqld.conf.d b/abs/core-testing/mysql/mysqld.conf.d
new file mode 100644
index 0000000..04752b1
--- /dev/null
+++ b/abs/core-testing/mysql/mysqld.conf.d
@@ -0,0 +1 @@
+MYSQLD_ROOT="/var/lib/mysql"
diff --git a/abs/core-testing/mythtv/stable/mytharchive/PKGBUILD b/abs/core-testing/mythtv/stable/mytharchive/PKGBUILD
new file mode 100644
index 0000000..fb3b755
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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=1
+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' 'mysql-python' 'pil' 'dvdauthor')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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-testing/mythtv/stable/mythbrowser/PKGBUILD b/abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..5a53093
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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=2
+pkgdesc="Mini web browser for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3')
+groups=('mythtv-extras')
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+ . /etc/profile.d/kde3.sh
+
+ 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-testing/mythtv/stable/mythcontrols/PKGBUILD b/abs/core-testing/mythtv/stable/mythcontrols/PKGBUILD
new file mode 100644
index 0000000..cf7f43c
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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-testing/mythtv/stable/mythdb-initial/PKGBUILD b/abs/core-testing/mythtv/stable/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..02f2789
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythdb-initial/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=3
+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-testing/mythtv/stable/mythdb-initial/mc.sql b/abs/core-testing/mythtv/stable/mythdb-initial/mc.sql
new file mode 100644
index 0000000..6e9bdaa
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythdb-initial/mc.sql
@@ -0,0 +1,2797 @@
+-- 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','G.A.N.T','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');
+/*!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-testing/mythtv/stable/mythdb-initial/mythdb.install b/abs/core-testing/mythtv/stable/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..4834c69
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythdb-initial/permissions.sql b/abs/core-testing/mythtv/stable/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..acb4673
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythflix/PKGBUILD b/abs/core-testing/mythtv/stable/mythflix/PKGBUILD
new file mode 100644
index 0000000..f613963
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythflix/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Maintainer: kleptophobiac@gmail.com
+
+pkgname=mythflix
+pkgver=0.21
+pkgrel=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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 INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core-testing/mythtv/stable/mythgallery/PKGBUILD b/abs/core-testing/mythtv/stable/mythgallery/PKGBUILD
new file mode 100644
index 0000000..76a66c5
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythgallery/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=mythgallery
+pkgver=0.21
+pkgrel=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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-testing/mythtv/stable/mythgame/PKGBUILD b/abs/core-testing/mythtv/stable/mythgame/PKGBUILD
new file mode 100644
index 0000000..33fb9a5
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythgame/PKGBUILD
@@ -0,0 +1,31 @@
+# $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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-$pkgver
+ export QMAKESPEC='linux-g++'
+ source /etc/profile.d/qt3.sh
+
+ ./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-testing/mythtv/stable/mythmusic/PKGBUILD b/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD
new file mode 100644
index 0000000..02adcce
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD
@@ -0,0 +1,33 @@
+# $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=2
+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')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core-testing/mythtv/stable/mythmusic/music_flac.patch b/abs/core-testing/mythtv/stable/mythmusic/music_flac.patch
new file mode 100644
index 0000000..b152249
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythmusic/mythmusic-0.21.patch b/abs/core-testing/mythtv/stable/mythmusic/mythmusic-0.21.patch
new file mode 100644
index 0000000..f3fa930
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythnews/PKGBUILD b/abs/core-testing/mythtv/stable/mythnews/PKGBUILD
new file mode 100644
index 0000000..9133755
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythnews/PKGBUILD
@@ -0,0 +1,31 @@
+# $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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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-testing/mythtv/stable/mythphone/PKGBUILD b/abs/core-testing/mythtv/stable/mythphone/PKGBUILD
new file mode 100644
index 0000000..24cd04f
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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-testing/mythtv/stable/myththemes/PKGBUILD b/abs/core-testing/mythtv/stable/myththemes/PKGBUILD
new file mode 100644
index 0000000..5223b92
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/myththemes/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=myththemes
+pkgver=0.21
+pkgrel=1
+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=('f13db28f928d70a11eaf416970d06eda')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ . /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-testing/mythtv/stable/mythtv/PKGBUILD b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD
new file mode 100644
index 0000000..72c6855
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD
@@ -0,0 +1,70 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: <kleptophobiac@gmail.com>
+# Contributor: dorphell <dorphell@archlinux.org>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=mythtv
+pkgver=0.21
+pkgrel=4
+pkgdesc="A Homebrew PVR project"
+arch=('i686' 'x86_64')
+depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg' \
+ 'libxvmc')
+backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt)
+source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2 \
+ mythbackend\
+ QUICKSTART.archlinux)
+md5sums=('08506f0c5120c072085b6995f529167a' '7ef6de58240e7aad389a0b13d91b1cf6'\
+ 'a0ecb7f476cb71c0c1ac90d349fc7695')
+license=('GPL2')
+makedepends=(libgl subversion)
+groups=('pvr')
+url="http://www.mythtv.org/"
+install=mythtv.install
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver} || return 1
+ . /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 \
+ --disable-firewire --enable-v4l --enable-ivtv --enable-dvb \
+ --dvb-path=/usr/include/linux/dvb --enable-xvmc --disable-ffmpeg \
+ --enable-xvmc-pro --enable-xvmc-vld --enable-opengl-vsync \
+ --disable-audio-jack --disable-audio-arts || 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
+ install -m0755 contrib/* $startdir/pkg/usr/share/mythtv/contrib
+
+ # set suid on mythfrontend
+ chmod a+s $startdir/pkg/usr/bin/mythfrontend
+}
diff --git a/abs/core-testing/mythtv/stable/mythtv/QUICKSTART.archlinux b/abs/core-testing/mythtv/stable/mythtv/QUICKSTART.archlinux
new file mode 100644
index 0000000..310705c
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythtv/mythbackend b/abs/core-testing/mythtv/stable/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythtv/mythtv.install b/abs/core-testing/mythtv/stable/mythtv/mythtv.install
new file mode 100644
index 0000000..c460f19
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythtv/mythtv.install
@@ -0,0 +1,13 @@
+# arg 1: the new package version
+post_install() {
+ echo "See \"MythTV\" on the Archlinux Wiki for installation information - Extensive!!"
+}
+
+# arg 1: the old package version
+post_remove() {
+ echo -e "NOTE: mysql database was not removed. To remove run:\nmysql -u root -e 'drop database mythconverg;'"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD b/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD
new file mode 100644
index 0000000..21f2a22
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD
@@ -0,0 +1,36 @@
+# $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=2
+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"\
+ mtd)
+md5sums=('af20a78ac66719feddf9a39f1a799ded' '476c12ba074794ad7f4ae092bdf949d6')
+replaces=('mythdvd')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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
+}
+
+
diff --git a/abs/core-testing/mythtv/stable/mythvideo/mtd b/abs/core-testing/mythtv/stable/mythvideo/mtd
new file mode 100644
index 0000000..1f46dfe
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/mythtv/stable/mythweather/PKGBUILD b/abs/core-testing/mythtv/stable/mythweather/PKGBUILD
new file mode 100644
index 0000000..ce2894a
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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-testing/mythtv/stable/mythweb/PKGBUILD b/abs/core-testing/mythtv/stable/mythweb/PKGBUILD
new file mode 100644
index 0000000..e01323c
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythweb/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: Philipp Giebel <arch@ambience-design.net>
+
+pkgname=mythweb
+pkgver=0.21
+pkgrel=1
+pkgdesc="Web interface for MythTV's backend"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'apache' 'php')
+install=mythweb.install
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ mkdir -p $startdir/pkg/srv/www/mythweb/{image_cache,php_sessions}
+ cp -r $startdir/src/mythplugins-$pkgver/$pkgname/* $startdir/pkg/srv/www/mythweb
+ cp $startdir/src/mythplugins-$pkgver/$pkgname/data/.htaccess $startdir/pkg/srv/www/mythweb
+ rm $startdir/pkg/srv/www/mythweb/README
+ chown -R nobody:nobody $startdir/pkg/srv/www/mythweb
+ chmod g+rw $startdir/pkg/srv/www/mythweb/{image_cache,php_sessions,data}
+}
+
+
diff --git a/abs/core-testing/mythtv/stable/mythweb/mythweb.install b/abs/core-testing/mythtv/stable/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/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-testing/nano/PKGBUILD b/abs/core-testing/nano/PKGBUILD
new file mode 100644
index 0000000..4dcf3bc
--- /dev/null
+++ b/abs/core-testing/nano/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 10350 2008-08-27 14:18:15Z andyrtr $
+# Maintainer: Judd <judd@archlinux.org>
+pkgname=nano
+pkgver=2.0.8
+pkgrel=12
+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)
+backup=(etc/nanorc)
+md5sums=('fcb2a26285921458b6fe381c2802b1a8')
+install=nano.install
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --enable-color --enable-nanorc --enable-multibuffer --disable-wrapping
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -DTm644 ${srcdir}/${pkgname}-${pkgver}/doc/nanorc.sample ${pkgdir}/etc/nanorc
+
+ rm -f ${pkgdir}/usr/share/info/dir
+}
diff --git a/abs/core-testing/nano/nano.install b/abs/core-testing/nano/nano.install
new file mode 100644
index 0000000..9842c9e
--- /dev/null
+++ b/abs/core-testing/nano/nano.install
@@ -0,0 +1,20 @@
+infodir=/usr/share/info
+filelist=(nano.info)
+
+post_install() {
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/ncurses/PKGBUILD b/abs/core-testing/ncurses/PKGBUILD
new file mode 100644
index 0000000..052881e
--- /dev/null
+++ b/abs/core-testing/ncurses/PKGBUILD
@@ -0,0 +1,75 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=ncurses
+pkgver=5.6
+pkgrel=15
+pkgdesc="A System V Release 4.0 curses emulation library"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/ncurses/ncurses.html"
+license=('MIT')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('b6593abe1089d6aab1551c105c9300e3')
+options=(!makeflags)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # The chtype/mmask-t settings below are to retain ABI compat
+ # with ncurses-5.4 so dont change em !
+ # we should test in next update if we can drop it.
+if [ "$CARCH" == "x86_64" ]; then
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg \
+ --with-chtype='long' --with-mmask-t='long'
+ else
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg
+fi
+ make || return 1
+ make install
+ mkdir -p $startdir/pkg/lib
+ cd $startdir/pkg/usr/lib
+ mv libncurses.so.$pkgver ../../lib
+ ln -sf ../../lib/libncurses.so.$pkgver libncurses.so.$pkgver
+ cd $startdir/pkg/lib
+ ln -sf libncurses.so.$pkgver libncurses.so.5
+ rm -f $startdir/pkg/lib/libcurses.so
+
+ # build unicode support libs
+ cd $startdir/src/$pkgname-$pkgver
+ make clean
+if [ "$CARCH" == "x86_64" ]; then
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg --enable-widec \
+ --with-chtype='long' --with-mmask-t='long'
+ else
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg --enable-widec
+fi
+ make || return 1
+ make install
+
+ mkdir $startdir/pkg/usr/include/ncursesw
+ ln -sf /usr/include/ncurses.h $startdir/pkg/usr/include/ncursesw
+ # fix library for tput, we call it in initscripts!
+ cd $startdir/pkg/usr/lib
+ mv libncursesw.so.$pkgver ../../lib
+ ln -sf ../../lib/libncursesw.so.$pkgver libncursesw.so.$pkgver
+ cd $startdir/pkg/lib
+ ln -sf libncursesw.so.$pkgver libncursesw.so.5
+
+ # install tput to /bin
+ mkdir $startdir/pkg/bin/
+ mv $startdir/pkg/usr/bin/tput $startdir/pkg/bin/tput
+
+ # install license, rip it from the readme
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/usr/share/licenses/$pkgname
+ grep -B 100 '$Id' README > $startdir/pkg/usr/share/licenses/$pkgname/license.txt
+}
diff --git a/abs/core-testing/ncurses/ncurses.install b/abs/core-testing/ncurses/ncurses.install
new file mode 100644
index 0000000..6b5a1dc
--- /dev/null
+++ b/abs/core-testing/ncurses/ncurses.install
@@ -0,0 +1,9 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">> You can safely ignore any \"cannot open shared object\" errors you see above"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/ndiswrapper-utils/PKGBUILD b/abs/core-testing/ndiswrapper-utils/PKGBUILD
new file mode 100644
index 0000000..3467469
--- /dev/null
+++ b/abs/core-testing/ndiswrapper-utils/PKGBUILD
@@ -0,0 +1,22 @@
+#$Id: PKGBUILD 7905 2008-08-05 07:01:47Z tpowa $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ndiswrapper-utils
+pkgver=1.53
+pkgrel=1
+pkgdesc="Binaries for ndiswrapper module"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://ndiswrapper.sourceforge.net"
+depends=(wireless_tools glibc)
+replaces=('ndiswrapper-bin')
+conflicts=('ndiswrapper-bin')
+source=(http://downloads.sourceforge.net/ndiswrapper/ndiswrapper-$pkgver.tar.gz)
+
+build()
+{
+ cd $startdir/src/ndiswrapper-$pkgver/utils
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('393c6e6ab0803963148e18538601cdec')
diff --git a/abs/core-testing/ndiswrapper/PKGBUILD b/abs/core-testing/ndiswrapper/PKGBUILD
new file mode 100644
index 0000000..927dc8c
--- /dev/null
+++ b/abs/core-testing/ndiswrapper/PKGBUILD
@@ -0,0 +1,29 @@
+#$Id: PKGBUILD 7906 2008-08-05 07:01:51Z tpowa $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ndiswrapper
+_kernver=2.6.26-ARCH
+pkgver=1.53
+pkgrel=1
+pkgdesc="Module for NDIS (Windows Network Drivers) drivers supplied by vendors. For stock arch 2.6 kernel."
+license=('GPL')
+arch=(i686 x86_64)
+url="http://ndiswrapper.sourceforge.net"
+install="ndiswrapper.install"
+depends=("ndiswrapper-utils=$pkgver" 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+source=(http://downloads.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-$pkgver.tar.gz)
+
+build()
+{
+ cd $startdir/src/ndiswrapper-$pkgver/driver
+ make KVERS=$_kernver
+ make DESTDIR=$startdir/pkg KVERS=$_kernver install || return 1
+ rm $startdir/pkg/lib/modules/$_kernver/modules.* #wtf?
+
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+ # move it to correct kernel directory
+ mkdir -p $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/ndiswrapper
+ mv $startdir/pkg/lib/modules/$_kernver/misc/* $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/ndiswrapper/
+ rm -r $startdir/pkg/lib/modules/$_kernver/misc/
+}
+md5sums=('393c6e6ab0803963148e18538601cdec')
diff --git a/abs/core-testing/ndiswrapper/ndiswrapper.install b/abs/core-testing/ndiswrapper/ndiswrapper.install
new file mode 100644
index 0000000..696f2d4
--- /dev/null
+++ b/abs/core-testing/ndiswrapper/ndiswrapper.install
@@ -0,0 +1,28 @@
+# arg 1: the new package version
+post_install()
+{
+ ndiswrapper -m
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade()
+{
+ ndiswrapper -m
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/net-tools/PKGBUILD b/abs/core-testing/net-tools/PKGBUILD
new file mode 100644
index 0000000..da2a710
--- /dev/null
+++ b/abs/core-testing/net-tools/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=net-tools
+pkgver=1.60
+pkgrel=22
+pkgdesc="Configuration tools for Linux networking"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.tazenda.demon.co.uk/phil/net-tools"
+groups=('base')
+depends=('glibc')
+backup=('etc/conf.d/nisdomainname')
+source=(http://www.tazenda.demon.co.uk/phil/$pkgname/$pkgname-$pkgver.tar.bz2
+ net-tools.patch gcc340.patch net-tools-1.60-2.6-compilefix.patch
+ net-tools-1.60-miiioctl.patch nisdomainname.conf.d
+ net-tools-1.60-nameif.patch
+ net-tools-1.60-nameif_strncpy.patch)
+md5sums=('888774accab40217dde927e21979c165' '7ef8d0c6818faa0fdeea94970a20e3fb'
+ 'b52d899cba9956bb0055150506f41ac1' '51de6eabe2d6d6dc860f72c41cee636b'
+ 'c16109863bc63f3dad4ef35305a340bb' 'af3eef5d4837939f7858eec692aa4671'
+ '29a32617382fab1735acba4d920f1fcd' 'e66466b9304dac85eb42b32f1ec3b284')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ export MAKEFLAGS="-j1"
+ patch -Np1 -i ../net-tools.patch || return 1
+ patch -Np1 -i ../net-tools-1.60-2.6-compilefix.patch || return 1
+ patch -Np1 -i ../net-tools-1.60-miiioctl.patch || return 1
+ patch -Np1 -i ../gcc340.patch || return 1
+ patch -Np1 -i ${startdir}/src/net-tools-1.60-nameif.patch || return 1
+ patch -Np1 -i ${startdir}/src/net-tools-1.60-nameif_strncpy.patch || return 1
+ yes "" | make || return 1
+ make BASEDIR=$startdir/pkg update
+ install -D -m644 ../nisdomainname.conf.d \
+ $startdir/pkg/etc/conf.d/nisdomainname
+}
diff --git a/abs/core-testing/net-tools/gcc340.patch b/abs/core-testing/net-tools/gcc340.patch
new file mode 100644
index 0000000..8089bf2
--- /dev/null
+++ b/abs/core-testing/net-tools/gcc340.patch
@@ -0,0 +1,46 @@
+diff -Naur net-tools-1.60-orig/hostname.c net-tools-1.60/hostname.c
+--- net-tools-1.60-orig/hostname.c 2001-04-08 10:04:23.000000000 -0700
++++ net-tools-1.60/hostname.c 2004-05-07 17:22:14.000000000 -0700
+@@ -78,6 +78,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ }
+@@ -98,6 +99,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -117,6 +119,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -174,6 +177,7 @@
+ printf("%s\n", hp->h_name);
+ break;
+ default:
++ ;
+ }
+ }
+
+diff -Naur net-tools-1.60-orig/lib/inet_sr.c net-tools-1.60/lib/inet_sr.c
+--- net-tools-1.60-orig/lib/inet_sr.c 2000-02-20 13:46:45.000000000 -0800
++++ net-tools-1.60/lib/inet_sr.c 2004-05-07 17:20:14.000000000 -0700
+@@ -105,6 +105,7 @@
+ case 2:
+ isnet = 0; break;
+ default:
++ ;
+ }
+
+ /* Fill in the other fields. */
diff --git a/abs/core-testing/net-tools/net-tools-1.60-2.6-compilefix.patch b/abs/core-testing/net-tools/net-tools-1.60-2.6-compilefix.patch
new file mode 100644
index 0000000..92ce901
--- /dev/null
+++ b/abs/core-testing/net-tools/net-tools-1.60-2.6-compilefix.patch
@@ -0,0 +1,23 @@
+diff -ruN net-tools-1.60.orig/lib/x25_sr.c net-tools-1.60/lib/x25_sr.c
+--- net-tools-1.60.orig/lib/x25_sr.c 2000-05-20 15:38:10.000000000 +0200
++++ net-tools-1.60/lib/x25_sr.c 2003-10-18 20:33:31.927574928 +0200
+@@ -22,6 +22,7 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <linux/x25.h>
++#include <linux/version.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <netdb.h>
+@@ -77,7 +78,11 @@
+ rt.sigdigits=sigdigits;
+
+ /* x25_route_struct.address isn't type struct sockaddr_x25, Why? */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+ memcpy(&rt.address, &sx25.sx25_addr, sizeof(x25_address));
++#else
++ memcpy(&rt.address, &sx25.sx25_addr, sizeof(struct x25_address));
++#endif
+
+ while (*args) {
+ if (!strcmp(*args,"device") || !strcmp(*args,"dev")) {
diff --git a/abs/core-testing/net-tools/net-tools-1.60-miiioctl.patch b/abs/core-testing/net-tools/net-tools-1.60-miiioctl.patch
new file mode 100644
index 0000000..4859273
--- /dev/null
+++ b/abs/core-testing/net-tools/net-tools-1.60-miiioctl.patch
@@ -0,0 +1,17 @@
+--- net-tools-1.60/include/mii.h.bar Tue Jul 31 11:49:39 2001
++++ net-tools-1.60/include/mii.h Tue Jul 31 11:49:33 2001
+@@ -11,11 +11,9 @@
+
+ /* network interface ioctl's for MII commands */
+ #ifndef SIOCGMIIPHY
+-#define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */
+-#define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */
+-#define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */
+-#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters */
+-#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters */
++#define SIOCGMIIPHY 0x8947 /* Read from current PHY */
++#define SIOCGMIIREG 0x8948 /* Read any PHY register */
++#define SIOCSMIIREG 0x8949 /* Write any PHY register */
+ #endif
+
+ #include <linux/types.h>
diff --git a/abs/core-testing/net-tools/net-tools-1.60-nameif.patch b/abs/core-testing/net-tools/net-tools-1.60-nameif.patch
new file mode 100644
index 0000000..54def00
--- /dev/null
+++ b/abs/core-testing/net-tools/net-tools-1.60-nameif.patch
@@ -0,0 +1,58 @@
+--- net-tools-1.60/nameif.c.nameif 2000-10-18 19:26:29.000000000 +0200
++++ net-tools-1.60/nameif.c 2003-03-19 11:02:01.000000000 +0100
+@@ -117,7 +117,8 @@
+ }
+
+ struct change {
+- struct change *next,**pprev;
++ struct change *next;
++ int found;
+ char ifname[IFNAMSIZ+1];
+ unsigned char mac[6];
+ };
+@@ -139,10 +140,7 @@
+ ch->ifname, pos);
+ if (parsemac(p,ch->mac) < 0)
+ complain(_("cannot parse MAC `%s' at %s"), p, pos);
+- if (clist)
+- clist->pprev = &ch->next;
+ ch->next = clist;
+- ch->pprev = &clist;
+ clist = ch;
+ return 0;
+ }
+@@ -200,7 +198,7 @@
+
+ void usage(void)
+ {
+- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
++ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
+ exit(1);
+ }
+
+@@ -277,21 +275,21 @@
+ ch = lookupmac(mac);
+ if (!ch)
+ continue;
+-
+- *ch->pprev = ch->next;
++
++ ch->found = 1;
+ if (strcmp(p, ch->ifname)) {
+ if (setname(p, ch->ifname) < 0)
+ complain(_("cannot change name of %s to %s: %s"),
+ p, ch->ifname, strerror(errno));
+ }
+- free(ch);
+ }
+ fclose(ifh);
+
+ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- warning(_("interface '%s' not found"), ch->ifname);
++ if (!ch->found)
++ warning(_("interface '%s' not found"), ch->ifname);
+ free(ch);
+ }
+
diff --git a/abs/core-testing/net-tools/net-tools-1.60-nameif_strncpy.patch b/abs/core-testing/net-tools/net-tools-1.60-nameif_strncpy.patch
new file mode 100644
index 0000000..7568e21
--- /dev/null
+++ b/abs/core-testing/net-tools/net-tools-1.60-nameif_strncpy.patch
@@ -0,0 +1,13 @@
+--- net-tools-1.60/nameif.c.ncpy 2006-10-03 14:24:21.000000000 +0200
++++ net-tools-1.60/nameif.c 2006-10-03 14:22:43.000000000 +0200
+@@ -100,8 +100,8 @@
+ struct ifreq ifr;
+ opensock();
+ memset(&ifr,0,sizeof(struct ifreq));
+- strcpy(ifr.ifr_name, oldname);
+- strcpy(ifr.ifr_newname, newname);
++ strncpy(ifr.ifr_name, oldname, IF_NAMESIZE);
++ strncpy(ifr.ifr_newname, newname, IF_NAMESIZE);
+ return ioctl(ctl_sk, SIOCSIFNAME, &ifr);
+ }
+
diff --git a/abs/core-testing/net-tools/net-tools.patch b/abs/core-testing/net-tools/net-tools.patch
new file mode 100644
index 0000000..87e062e
--- /dev/null
+++ b/abs/core-testing/net-tools/net-tools.patch
@@ -0,0 +1,52 @@
+diff -Naur net-tools-1.60-orig/config.in net-tools-1.60/config.in
+--- net-tools-1.60-orig/config.in 2000-05-21 07:32:12.000000000 -0700
++++ net-tools-1.60/config.in 2004-05-31 12:36:00.000000000 -0700
+@@ -49,7 +49,7 @@
+ *
+ bool 'UNIX protocol family' HAVE_AFUNIX y
+ bool 'INET (TCP/IP) protocol family' HAVE_AFINET y
+-bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 n
++bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 y
+ bool 'Novell IPX/SPX protocol family' HAVE_AFIPX y
+ bool 'Appletalk DDP protocol family' HAVE_AFATALK y
+ bool 'AX25 (packet radio) protocol family' HAVE_AFAX25 y
+@@ -86,6 +86,6 @@
+ *
+ * Other Features.
+ *
+-bool 'IP Masquerading support' HAVE_FW_MASQUERADE n
+-bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS n
+-bool 'Build mii-tool' HAVE_MII n
++bool 'IP Masquerading support' HAVE_FW_MASQUERADE y
++bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS y
++bool 'Build mii-tool' HAVE_MII y
+diff -Naur net-tools-1.60-orig/mii-tool.c net-tools-1.60/mii-tool.c
+--- net-tools-1.60-orig/mii-tool.c 2000-05-21 07:31:17.000000000 -0700
++++ net-tools-1.60/mii-tool.c 2004-05-31 12:35:21.000000000 -0700
+@@ -379,16 +379,16 @@
+ /*--------------------------------------------------------------------*/
+
+ const char *usage =
+-"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]
+- -V, --version display version information
+- -v, --verbose more verbose output
+- -R, --reset reset MII to poweron state
+- -r, --restart restart autonegotiation
+- -w, --watch monitor for link status changes
+- -l, --log with -w, write events to syslog
+- -A, --advertise=media,... advertise only specified media
+- -F, --force=media force specified media technology
+-media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
++"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]\n\
++ -V, --version display version information\n\
++ -v, --verbose more verbose output\n\
++ -R, --reset reset MII to poweron state\n\
++ -r, --restart restart autonegotiation\n\
++ -w, --watch monitor for link status changes\n\
++ -l, --log with -w, write events to syslog\n\
++ -A, --advertise=media,... advertise only specified media\n\
++ -F, --force=media force specified media technology\n\
++media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,\n\
+ (to advertise both HD and FD) 100baseTx, 10baseT\n";
+
+ int main(int argc, char **argv)
diff --git a/abs/core-testing/net-tools/nisdomainname.conf.d b/abs/core-testing/net-tools/nisdomainname.conf.d
new file mode 100644
index 0000000..6033ecf
--- /dev/null
+++ b/abs/core-testing/net-tools/nisdomainname.conf.d
@@ -0,0 +1,3 @@
+# Set your NIS domain name here
+NISDOMAINNAME=""
+
diff --git a/abs/core-testing/netcfg/PKGBUILD b/abs/core-testing/netcfg/PKGBUILD
new file mode 100644
index 0000000..de024a2
--- /dev/null
+++ b/abs/core-testing/netcfg/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <james@archlinux.org>
+pkgname=netcfg
+pkgver=2.0.6
+pkgrel=1
+pkgdesc="Network configuration and profile scripts"
+url="http://archlinux.org"
+license=("BSD")
+backup=(etc/iftab)
+depends=(wireless_tools wpa_supplicant net-tools mktemp)
+source=(http://dev.archlinux.org/~james/netcfg/netcfg-$pkgver.tar.gz)
+md5sums=('8bf6861e800a5b35f9f8ee4db8e07151')
+#source=(netcfg-$pkgver.tar.gz)
+arch=(i686 x86_64)
+
+build() {
+ cd $startdir/src/netcfg-$pkgver
+ sed -i 's|/man/|/share/man/|' Makefile
+ make DESTDIR=$startdir/pkg install
+ make DESTDIR=$startdir/pkg install-contrib
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/netcfg/LICENSE
+
+ # Uncomment once initscripts patch merged
+ # ln -s /usr/bin/netcfg2 $startdir/pkg/usr/bin/netcfg
+}
diff --git a/abs/core-testing/ntfsprogs/PKGBUILD b/abs/core-testing/ntfsprogs/PKGBUILD
new file mode 100644
index 0000000..9f24ad6
--- /dev/null
+++ b/abs/core-testing/ntfsprogs/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ntfsprogs
+pkgver=2.0.0
+pkgrel=2
+depends=('glibc' 'fuse' 'e2fsprogs')
+makedepends=('pkgconfig')
+pkgdesc="NTFS Resizing Tool"
+arch=(i686 x86_64)
+license=('GPL')
+#source=(http://heanet.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+#source=(http://mesh.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+source=(http://switch.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+url="http://linux-ntfs.sourceforge.net"
+install=('ntfsprogs.install')
+options=(!libtool)
+md5sums=('2c402b647bb7aeb1d3f8ce1cc354fd68')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-gnome-vfs --enable-fuse-module PKG_CONFIG=/usr/bin/pkg-config
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
diff --git a/abs/core-testing/ntfsprogs/ntfsprogs.install b/abs/core-testing/ntfsprogs/ntfsprogs.install
new file mode 100644
index 0000000..a58d672
--- /dev/null
+++ b/abs/core-testing/ntfsprogs/ntfsprogs.install
@@ -0,0 +1,24 @@
+ # arg 1: the new package version
+post_install() {
+cat << EOF
+NOTE:
+==> There is a good guide to use the ntfsresize utility at:
+ 'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html'
+
+WARNING:
+==> This program "can" cause dataloss if you don't use it right!
+==> Make a backup of your files! You have been warned !!!
+EOF
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+
+op=$1
+shift
+$op $* \ No newline at end of file
diff --git a/abs/core-testing/nuvexport/PKGBUILD b/abs/core-testing/nuvexport/PKGBUILD
new file mode 100644
index 0000000..e414b1e
--- /dev/null
+++ b/abs/core-testing/nuvexport/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=nuvexport
+pkgver=20080311
+relnum=0.5
+pkgrel=1
+pkgdesc="Export for MythTV nuv files to other formats (DVD/SVCD/DivX,etc.)"
+arch=(i686 x86_64)
+url="http://forevermore.net/files/nuvexport"
+license=""
+depends=(perl perl-dbi 'ffmpeg>=20060920' perl-dbd-mysql perl-date-manip)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=
+source=(http://forevermore.net/files/nuvexport/$pkgname-$relnum-0.$pkgver.svn.tar.bz2 $pkgname-ipod-disable.patch)
+md5sums=('2d0a99623f06394daf3bf8769536d3cd' 'acd2dad9987e68359ead8b0be5e5797c')
+
+build() {
+ cd $startdir/src/$pkgname-$relnum
+
+ sed -i "s|prefix=/usr/local|prefix=$startdir/pkg/usr|g" Makefile || return 1
+ sed -i "s|/usr/bin/install|/bin/install|g" Makefile || return 1
+ sed -i "s|sysconfdir=/etc|sysconfdir=$startdir/pkg/etc|g" Makefile || return 1
+
+ mkdir $startdir/pkg/usr || return 1
+ make install || return 1
+ sed -i "s|/tmp/fifodir|/var/tmp/fifodir|g" $startdir/pkg/usr/share/nuvexport/export/*.pm || return 1
+}
diff --git a/abs/core-testing/nuvexport/nuvexport-ipod-disable.patch b/abs/core-testing/nuvexport/nuvexport-ipod-disable.patch
new file mode 100644
index 0000000..dfb17a9
--- /dev/null
+++ b/abs/core-testing/nuvexport/nuvexport-ipod-disable.patch
@@ -0,0 +1,12 @@
+diff -urN nuvexport-0.3/nuvexport nuvexport-0.3-fixed/nuvexport
+--- nuvexport-0.3/nuvexport 2006-07-26 03:37:13.000000000 -0400
++++ nuvexport-0.3-fixed/nuvexport 2006-07-27 20:58:41.000000000 -0400
+@@ -93,7 +93,7 @@
+ push @Exporters, export::ffmpeg::ASF->new;
+ push @Exporters, export::ffmpeg::MP3->new;
+ push @Exporters, export::ffmpeg::PSP->new;
+- push @Exporters, export::ffmpeg::iPod->new;
++# push @Exporters, export::ffmpeg::iPod->new;
+ }
+ elsif ($export_prog eq 'mencoder') {
+ push @Exporters, export::mencoder::XviD->new;
diff --git a/abs/core-testing/openexr/PKGBUILD b/abs/core-testing/openexr/PKGBUILD
new file mode 100644
index 0000000..1c92fbb
--- /dev/null
+++ b/abs/core-testing/openexr/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=openexr
+pkgver=1.4.0a
+pkgrel=2
+depends=('mesa' 'libxext' 'libxft' 'fltk')
+makedepends=('xproto')
+pkgdesc="openexr library for EXR images"
+arch=(i686 x86_64)
+options=(!libtool)
+source=(http://savannah.nongnu.org/download/$pkgname/$pkgname-$pkgver.tar.gz gcc43.patch)
+url="http://www.openexr.org"
+
+build() {
+ cd $startdir/src/$pkgname-1.4.0
+ # gcc4 fix
+ #patch -Np1 -i ../openexr-gcc4.patch
+ patch -Np1 -i ../gcc43.patch
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('d0a4b9a930c766fa51561b05fb204afe' 'd972a8ea4296762ea30a3dc7de2208ac')
diff --git a/abs/core-testing/openexr/gcc43.patch b/abs/core-testing/openexr/gcc43.patch
new file mode 100644
index 0000000..08ae699
--- /dev/null
+++ b/abs/core-testing/openexr/gcc43.patch
@@ -0,0 +1,21 @@
+--- a/exrenvmap/main.cpp
++++ b/exrenvmap/main.cpp
+@@ -46,6 +46,8 @@
+ #include <exception>
+ #include <stdlib.h>
+
++#include <cstring>
++
+ using namespace Imf;
+ using namespace std;
+
+--- a/exrmaketiled/main.cpp
++++ b/exrmaketiled/main.cpp
+@@ -47,6 +47,8 @@
+ #include <string>
+ #include <stdlib.h>
+
++#include <cstring>
++
+ using namespace Imf;
+ using namespace std;
diff --git a/abs/core-testing/openexr/openexr-gcc4.patch b/abs/core-testing/openexr/openexr-gcc4.patch
new file mode 100644
index 0000000..ff63681
--- /dev/null
+++ b/abs/core-testing/openexr/openexr-gcc4.patch
@@ -0,0 +1,11 @@
+--- OpenEXR-1.2.2/exrmaketiled/Image.h~ 2004-06-04 06:11:23.000000000 +0200
++++ OpenEXR-1.2.2/exrmaketiled/Image.h 2005-07-15 07:02:08.000000000 +0200
+@@ -50,6 +50,8 @@
+ #include <map>
+
+
++class Image;
++
+ class ImageChannel
+ {
+ public:
diff --git a/abs/core-testing/openssh/PKGBUILD b/abs/core-testing/openssh/PKGBUILD
new file mode 100644
index 0000000..523544f
--- /dev/null
+++ b/abs/core-testing/openssh/PKGBUILD
@@ -0,0 +1,61 @@
+# $Id: PKGBUILD 3735 2008-06-30 20:01:30Z andyrtr $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=openssh
+pkgver=5.0p1
+pkgrel=2
+#_gsskexver=20080404
+pkgdesc='A Secure SHell server/client'
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.openssh.org/portable.html"
+backup=('etc/ssh/ssh_config' 'etc/ssh/sshd_config' 'etc/pam.d/sshd')
+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)
+ #http://www.sxw.org.uk/computing/patches/$pkgname-$pkgver-gsskex-$_gsskexver.patch
+md5sums=('1f1dfaa775f33dd3328169de9bdc292a'
+ 'd9ee5e0a0d143689b3d6f11454a2a892'
+ 'e2cea70ac13af7e63d40eb04415eacd5'
+ '1c7c2ea8734ec7e3ca58d820634dc73a')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #patch -up0 < $startdir/src/$pkgname-$pkgver-gsskex-$_gsskexver.patch
+
+ #NOTE we disable-strip so that makepkg can decide whether to strip or not
+ ./configure --prefix=/usr --libexecdir=/usr/lib/ssh \
+ --sysconfdir=/etc/ssh --with-tcp-wrappers --with-privsep-user=nobody \
+ --with-md5-passwords --with-pam --with-mantype=man --mandir=/usr/man \
+ --with-xauth=/usr/bin/xauth --with-kerberos5=/usr --disable-strip
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ #What is this for? Is it needed?
+ mkdir -p $startdir/pkg/var/empty
+
+ install -D -m755 $startdir/src/sshd $startdir/pkg/etc/rc.d/sshd
+
+ install -D -m644 LICENCE $startdir/pkg/usr/share/licenses/$pkgname/LICENCE
+ install -D -m644 $startdir/src/sshd.pam $startdir/pkg/etc/pam.d/sshd
+ install -D -m644 $startdir/src/sshd.confd $startdir/pkg/etc/conf.d/sshd
+
+ rm $startdir/pkg/usr/man/man1/slogin.1
+ ln -sf ssh.1.gz $startdir/pkg/usr/man/man1/slogin.1.gz
+
+ #additional contrib scripts that we like
+ install -D -m755 contrib/findssl.sh $startdir/pkg/usr/bin/findssl.sh
+ install -D -m755 contrib/ssh-copy-id $startdir/pkg/usr/bin/ssh-copy-id
+ install -D -m644 contrib/ssh-copy-id.1 $startdir/pkg/usr/man/man1/ssh-copy-id.1
+
+ #adjust our config files
+ sed -i \
+ -e 's|^#ListenAddress 0.0.0.0|ListenAddress 0.0.0.0|g' \
+ -e 's|^#UsePAM no|UsePAM yes|g' \
+ -e 's|^#ChallengeResponseAuthentication yes|ChallengeResponseAuthentication no|g' \
+ $startdir/pkg/etc/ssh/sshd_config
+ sed -i -e 's|^# Host \*|Host *|g' $startdir/pkg/etc/ssh/ssh_config
+ echo "HashKnownHosts yes" >> $startdir/pkg/etc/ssh/ssh_config
+ echo "StrictHostKeyChecking ask" >> $startdir/pkg/etc/ssh/ssh_config
+}
diff --git a/abs/core-testing/openssh/sshd b/abs/core-testing/openssh/sshd
new file mode 100755
index 0000000..875028a
--- /dev/null
+++ b/abs/core-testing/openssh/sshd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/sshd
+
+PID=`cat /var/run/sshd.pid 2>/dev/null`
+case "$1" in
+ start)
+ stat_busy "Starting Secure Shell Daemon"
+ [ -f /etc/ssh/ssh_host_key ] || { /usr/bin/ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_rsa_key ] || { /usr/bin/ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_dsa_key ] || { /usr/bin/ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key >/dev/null; }
+ [ -z "$PID" ] && /usr/sbin/sshd $SSHD_ARGS
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon sshd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Secure Shell Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon sshd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/openssh/sshd.confd b/abs/core-testing/openssh/sshd.confd
new file mode 100644
index 0000000..5ce7c00
--- /dev/null
+++ b/abs/core-testing/openssh/sshd.confd
@@ -0,0 +1,4 @@
+#
+# Parameters to be passed to sshd
+#
+SSHD_ARGS=""
diff --git a/abs/core-testing/openssh/sshd.pam b/abs/core-testing/openssh/sshd.pam
new file mode 100644
index 0000000..dc70815
--- /dev/null
+++ b/abs/core-testing/openssh/sshd.pam
@@ -0,0 +1,10 @@
+#%PAM-1.0
+#auth required pam_securetty.so #Disable remote root
+auth required pam_unix.so
+auth required pam_nologin.so
+auth required pam_env.so
+account required pam_unix.so
+account required pam_time.so
+password required pam_unix.so
+session required pam_unix_session.so
+session required pam_limits.so
diff --git a/abs/core-testing/openssl/PKGBUILD b/abs/core-testing/openssl/PKGBUILD
new file mode 100644
index 0000000..ec3fe68
--- /dev/null
+++ b/abs/core-testing/openssl/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 9446 2008-08-17 18:04:42Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+pkgname=openssl
+pkgver=0.9.8h
+pkgrel=13
+pkgdesc='The Open Source toolkit for Secure Sockets Layer and Transport Layer Security'
+arch=('i686' 'x86_64')
+url='http://www.openssl.org'
+license=('custom:BSD')
+groups=('base')
+depends=('glibc')
+options=('!makeflags')
+source=("http://www.openssl.org/source/${pkgname}-${pkgver}.tar.gz" \
+ 'http://www.linuxfromscratch.org/patches/blfs/svn/openssl-0.9.8g-fix_manpages-1.patch')
+md5sums=('7d3d41dafc76cf2fcb5559963b5783b3'
+ '04a6a88c2ee4badd4f8649792b73eaf3')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ patch -p1 -i ../openssl-0.9.8g-fix_manpages-1.patch || return 1
+ ./config --prefix=/usr --openssldir=/etc/ssl shared
+
+ make || return 1
+ make INSTALL_PREFIX=$startdir/pkg MANDIR=/usr/share/man install
+
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core-testing/pacman/PKGBUILD b/abs/core-testing/pacman/PKGBUILD
new file mode 100644
index 0000000..ccd1857
--- /dev/null
+++ b/abs/core-testing/pacman/PKGBUILD
@@ -0,0 +1,46 @@
+# $Id: PKGBUILD 10342 2008-08-27 01:24:22Z dan $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=pacman
+pkgver=3.2.1
+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.5.5' 'libdownload>=1.3')
+backup=(etc/pacman.conf etc/makepkg.conf etc/pacman.d/mirrorlist)
+install=pacman.install
+options=(!libtool)
+source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz
+ pacman.conf
+ mirrorlist)
+md5sums=('5b133613cebd74aa8c199de049e25cc4'
+ '49b799e923933a30cdefcac06f530fb0'
+ 'a16981c0fef957a95999550f68cdb0f8')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # install arch specific stuff
+ mkdir -p ${startdir}/pkg/etc/pacman.d
+ install -m644 ${startdir}/src/pacman.conf ${startdir}/pkg/etc/
+ install -m644 ${startdir}/src/mirrorlist ${startdir}/pkg/etc/pacman.d/
+
+ # customize mirrorlist to architecture
+ sed -i -e "s/@carch@/${CARCH}/g" ${startdir}/pkg/etc/pacman.d/mirrorlist
+
+ # install completion files
+ mkdir -p $startdir/pkg/etc/bash_completion.d/
+ install -m644 contrib/bash_completion $startdir/pkg/etc/bash_completion.d/pacman
+ mkdir -p $startdir/pkg/usr/share/zsh/site-functions/
+ install -m644 contrib/zsh_completion $startdir/pkg/usr/share/zsh/site-functions/_pacman
+}
+
+# vim: set ts=2 sw=2 et:
diff --git a/abs/core-testing/pacman/mirrorlist b/abs/core-testing/pacman/mirrorlist
new file mode 100644
index 0000000..83e75ae
--- /dev/null
+++ b/abs/core-testing/pacman/mirrorlist
@@ -0,0 +1,101 @@
+#
+# Arch Linux repository mirrorlist
+#
+
+# North America
+# - United States
+Server = ftp://ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://locke.suu.edu/linux/dist/archlinux/$repo/os/@carch@
+Server = http://archlinux.unixheads.org/$repo/os/@carch@
+Server = ftp://ftp.gtlib.gatech.edu/pub/linux/distributions/archlinux/$repo/os/@carch@
+Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/@carch@
+Server = http://mirrors.easynews.com/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.ibiblio.org/pub/linux/distributions/archlinux/$repo/os/@carch@
+Server = http://holmes.umflint.edu/archlinux/$repo/os/@carch@
+Server = http://mirror.neotuli.net/arch/$repo/os/@carch@
+Server = http://mirror.rit.edu/archlinux/$repo/os/@carch@
+Server = http://mirror.umoss.org/archlinux/$repo/os/@carch@
+Server = http://schlunix.org/archlinux/$repo/os/@carch@
+# - Canada
+Server = ftp://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/@carch
+
+# South America
+# - Brazil
+Server = http://archlinux.c3sl.ufpr.br/$repo/os/@carch@
+Server = ftp://archlinux.c3sl.ufpr.br/archlinux/$repo/os/@carch@
+Server = ftp://ftp.las.ic.unicamp.br/pub/archlinux/$repo/os/@carch@
+
+# Europe
+# - Austria
+Server = ftp://gd.tuwien.ac.at/opsys/linux/archlinux/$repo/os/@carch@
+# - Belgium
+Server = ftp://ftp.belnet.be/mirror/archlinux.org/$repo/os/@carch@
+# - Czech Republic
+Server = ftp://ftp.sh.cvut.cz/MIRRORS/arch/$repo/os/@carch@
+# - Estonia
+Server = ftp://ftp.estpak.ee/pub/archlinux/$repo/os/@carch@
+# - France
+Server = ftp://mir1.archlinuxfr.org/archlinux/$repo/os/@carch@
+Server = ftp://mir2.archlinuxfr.org/archlinux/$repo/os/@carch@
+Server = ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/@carch@
+Server = http://mir.archlinux.fr/$repo/os/@carch@
+Server = ftp://ftp.free.fr/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp.rez-gif.supelec.fr/Linux/archlinux/$repo/os/@carch@
+# - Germany
+Server = ftp://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.uni-bayreuth.de/pub/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.archlinuxppc.org/@carch@/$repo/os/@carch@
+Server = ftp://ftp.tu-chemnitz.de/pub/linux/archlinux/$repo/os/@carch@
+Server = http://ftp.uni-kl.de/pub/linux/archlinux/$repo/os/@carch@
+# - Great Britain
+Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://mirrors.uk2.net/pub/archlinux/$repo/os/@carch@
+Server = http://archlinux.mirrors.uk2.net/$repo/os/@carch@
+# - Greece
+Server = ftp://ftp.ntua.gr/pub/linux/archlinux/$repo/os/@carch@
+# - Hungary
+Server = ftp://ftp.mfa.kfki.hu/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+# - Ireland
+Server = ftp://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/@carch@
+# - Italy
+Server = ftp://mi.mirror.garr.it/mirrors/archlinux/$repo/os/@carch@
+# - Netherlands
+Server = ftp://ftp.nluug.nl/pub/metalab/distributions/archlinux/$repo/os/@carch@
+Server = ftp://ftp.surfnet.nl/pub/os/Linux/distr/archlinux/$repo/os/@carch@
+# - Norway
+Server = http://arch.likbilen.com/$repo/os/@carch
+# - Poland
+Server = ftp://mirror.icis.pcz.pl/archlinux/$repo/os/@carch@
+Server = http://piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp.piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = http://unix.net.pl/archlinux.org/$repo/os/@carch@
+# - Portugal
+Server = ftp://cesium.di.uminho.pt/pub/archlinux/$repo/os/@carch@
+# - Romania
+Server = ftp://ftp.iasi.roedu.net/mirrors/archlinux.org/$repo/os/@carch@
+# - Russia
+Server = ftp://mirror.yandex.ru/archlinux/$repo/os/@carch@
+Server = http://archlinux.freeside.ru/$repo/os/@carch@
+# - Sweden
+Server = ftp://ftp.ds.hj.se/pub/os/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.gigabit.nu/$repo/os/@carch@
+# - Switzerland
+Server = http://archlinux.puzzle.ch/$repo/os/@carch@
+# - Turkey
+Server = http://server.elsistech.com/archlinux/$repo/os/@carch@
+# - Ukraine
+Server = ftp://hell.org.ua/archlinux/$repo/os/@carch@
+Server = ftp://ftp.linux.kiev.ua/pub/Linux/ArchLinux/$repo/os/@carch@
+
+# Asia
+# - Israel
+Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/@carch@
+# - Vietnam
+# Domain name is ftp.indochinalinux.com but there are frequent DNS problems
+Server = ftp://202.78.230.5/archlinux/$repo/os/@carch@
+
+# Australia
+Server = ftp://mirror.pacific.net.au/linux/archlinux/$repo/os/@carch@
+Server = ftp://mirror.aarnet.edu.au/pub/archlinux/$repo/os/@carch@
+
diff --git a/abs/core-testing/pacman/pacman.conf b/abs/core-testing/pacman/pacman.conf
new file mode 100644
index 0000000..6a7bd54
--- /dev/null
+++ b/abs/core-testing/pacman/pacman.conf
@@ -0,0 +1,76 @@
+#
+# /etc/pacman.conf
+#
+# See the pacman.conf(5) manpage for option and repository directives
+
+#
+# GENERAL OPTIONS
+#
+[options]
+# The following paths are commented out with their default values listed.
+# If you wish to use different paths, uncomment and update the paths.
+#RootDir = /
+#DBPath = /var/lib/pacman/
+#CacheDir = /var/cache/pacman/pkg/
+#LogFile = /var/log/pacman.log
+HoldPkg = pacman glibc
+# If upgrades are available for these packages they will be asked for first
+SyncFirst = pacman
+#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
+#XferCommand = /usr/bin/curl %u > %o
+
+# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
+#IgnorePkg =
+#IgnoreGroup =
+
+#NoUpgrade =
+#NoExtract =
+
+# Misc options (all disabled by default)
+#NoPassiveFtp
+#UseSyslog
+#ShowSize
+#UseDelta
+#TotalDownload
+
+#
+# REPOSITORIES
+# - can be defined here or included from another file
+# - pacman will search repositories in the order defined here
+# - local/custom mirrors can be added here or in separate files
+# - repositories listed first will take precedence when packages
+# have identical names, regardless of version number
+# - URLs will have $repo replaced by the name of the current repo
+#
+# Repository entries are of the format:
+# [repo-name]
+# Server = ServerName
+# Include = IncludePath
+#
+# The header [repo-name] is crucial - it must be present and
+# 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.
+#[testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[core]
+# Add your preferred servers here, they will be used first
+Include = /etc/pacman.d/mirrorlist
+
+[extra]
+# 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
+
+# An example of a custom package repository. See the pacman manpage for
+# tips on creating your own repositories.
+#[custom]
+#Server = file:///home/custompkgs
+
diff --git a/abs/core-testing/pacman/pacman.install b/abs/core-testing/pacman/pacman.install
new file mode 100644
index 0000000..46e4763
--- /dev/null
+++ b/abs/core-testing/pacman/pacman.install
@@ -0,0 +1,56 @@
+# 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
+}
+
+_resetbackups() {
+ echo ">>> Performing one-time reset of NoUpgrade md5sums. After this reset"
+ echo ">>> you are able to remove all NoUpgrade lines of already protected"
+ echo ">>> files from pacman.conf."
+ echo ">>>"
+
+ # path variables
+ pacconf="/etc/pacman.conf"
+ dbpath="/var/lib/pacman/local"
+
+ # get a list of NoUpgrade files from the user's pacman.conf
+ echo ">>> Retrieving pacman.conf NoUpgrade list..."
+ config=$(grep "^NoUpgrade" $pacconf | cut -d'=' -f2)
+ # add the standard list of files, even if they are already above
+ config="$config \
+ etc/passwd etc/group etc/shadow etc/sudoers \
+ etc/fstab etc/raidtab etc/ld.so.conf \
+ etc/rc.conf etc/rc.local \
+ etc/modprobe.conf etc/modules.conf \
+ etc/lilo.conf boot/grub/menu.lst"
+
+ # blank md5sum for use in sed expression
+ zeroes='00000000000000000000000000000000'
+
+ for file in $config; do
+ echo ">>> -> finding owner of /$file..."
+ line=$(LC_ALL=C LANG=C pacman -Qo /$file 2>/dev/null)
+ # if file is owned by a package, go find its incorrectly stored sum
+ if [ ! -z "$line" ]; then
+ # get the name and version of the package owning file
+ name=$(echo $line | awk '{print $5}')
+ version=$(echo $line | awk '{print $6}')
+ # set the path to the backup array holding the md5sum
+ path="$dbpath/$name-$version/files"
+ # run a sed on the path to reset the line containing $file
+ # NOTE: literal tab characters in sed expression after $file
+ echo ">>> -> resetting sum of /$file..."
+ sed -i "s#$file [0-9a-fA-F]*#$file $zeroes#" $path
+ else
+ echo ">>> -> $file is unowned."
+ fi
+ done
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/pam/PKGBUILD b/abs/core-testing/pam/PKGBUILD
new file mode 100644
index 0000000..4bdca6a
--- /dev/null
+++ b/abs/core-testing/pam/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 3761 2008-06-30 20:27:30Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=pam
+pkgver=1.0.1
+pkgrel=11
+pkgdesc="PAM (Pluggable Authentication Modules) library"
+arch=(i686 x86_64)
+license=('GPL2')
+url="http://www.kernel.org/pub/linux/libs/pam/"
+groups=('base')
+depends=('glibc' 'db>=4.7' 'cracklib')
+backup=(etc/security/{access.conf,group.conf,limits.conf,namespace.conf,namespace.init,pam_env.conf,time.conf} etc/pam.d/other etc/default/passwd etc/environment)
+source=(http://www.kernel.org/pub/linux/libs/pam/library/Linux-PAM-$pkgver.tar.bz2 \
+ ftp://ftp.suse.com/pub/people/kukuk/pam/pam_unix2/pam_unix2-2.1.tar.bz2 \
+ other)
+options=('!libtool' '!emptydirs')
+md5sums=('1c75f81bd44c5da93014992820917847'
+ '08d3bc1940897b5dfcbe2f51dd979ad0'
+ '6e6c8719e5989d976a14610f340bd33a')
+
+build() {
+ cd $startdir/src/Linux-PAM-$pkgver
+ ./configure --sysconfdir=/etc DESTDIR=$startdir/pkg --libdir=/lib
+ make || return 1
+ make INSTALL=/bin/install DESTDIR=$startdir/pkg install
+ install -D -m644 ../other $startdir/pkg/etc/pam.d/other
+ # build pam_unix2 module
+ # source ftp://ftp.suse.com/pub/people/kukuk/pam/pam_unix2
+ cd $startdir/src/pam_unix2-2.1
+ ./configure
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # add the realtime permissions for audio users
+ sed -i 's|# End of file||' $startdir/pkg/etc/security/limits.conf
+ cat >>$startdir/pkg/etc/security/limits.conf <<_EOT
+* - rtprio 0
+* - nice 0
+@audio - rtprio 65
+@audio - nice -10
+@audio - memlock 40000
+_EOT
+ # fix some missing symlinks from old pam for compatibility
+ cd $startdir/pkg/lib/security
+ ln -s pam_unix.so pam_unix_acct.so
+ ln -s pam_unix.so pam_unix_auth.so
+ ln -s pam_unix.so pam_unix_passwd.so
+ ln -s pam_unix.so pam_unix_session.so
+ # set unix_chkpwd uid
+ chmod +s $startdir/pkg/sbin/unix_chkpwd
+}
diff --git a/abs/core-testing/pam/other b/abs/core-testing/pam/other
new file mode 100644
index 0000000..08498b4
--- /dev/null
+++ b/abs/core-testing/pam/other
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth required pam_unix.so
+account required pam_unix.so
+password required pam_unix.so
+session required pam_unix.so
diff --git a/abs/core-testing/pam/pam.install b/abs/core-testing/pam/pam.install
new file mode 100644
index 0000000..eb0899c
--- /dev/null
+++ b/abs/core-testing/pam/pam.install
@@ -0,0 +1,22 @@
+# arg 1: the new package version
+post_install() {
+ # need to run this immediately -- pacman only runs it at the end of
+ # all package installs
+ /sbin/ldconfig -r .
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/pango/PKGBUILD b/abs/core-testing/pango/PKGBUILD
new file mode 100644
index 0000000..5284f02
--- /dev/null
+++ b/abs/core-testing/pango/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4025 2008-07-02 18:01:45Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pango
+pkgver=1.20.5
+pkgrel=1
+pkgdesc="A library for layout and rendering of text"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glib2>=2.16.4' 'cairo>=1.6.4' 'libxft>=2.1.12' 'libthai>=0.1.9')
+makedepends=('pkgconfig' 'libxt')
+options=('!libtool' '!emptydirs')
+install=pango.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.20/${pkgname}-${pkgver}.tar.bz2)
+url="http://www.gtk.org/"
+md5sums=('052b60a12f6b2eb4f251ab961f2b2b84')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --without-qt || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/pango/pango.install b/abs/core-testing/pango/pango.install
new file mode 100644
index 0000000..9978739
--- /dev/null
+++ b/abs/core-testing/pango/pango.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install() {
+ # we need to ldconfig first, in case xfree86's libs aren't
+ # in ld.so.cache yet
+ sbin/ldconfig -r .
+ usr/bin/pango-querymodules >etc/pango/pango.modules
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ if [ -f usr/etc/pango/pango.modules ]; then
+ rm usr/etc/pango/pango.modules
+ fi
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ rm etc/pango/pango.modules
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/parted/PKGBUILD b/abs/core-testing/parted/PKGBUILD
new file mode 100644
index 0000000..b65a9ca
--- /dev/null
+++ b/abs/core-testing/parted/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: dorphell <dorphell@archlinux.org>
+
+pkgname=parted
+pkgver=1.8.8
+pkgrel=1
+pkgdesc="A program for creating, destroying, resizing, checking and copying partitions"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://www.gnu.org/software/parted/parted.html"
+depends=('e2fsprogs')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz parted-1.7.1-fix-seg.patch)
+md5sums=('0d494591731082ec57cc18627728124a' '88f3c5b45fdd1d3dce70a1a19bf48481')
+options=(!libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Arch64 fix - still needed?
+ [ "$CARCH" = "x86_64" ] && patch -Np1 -i ../parted-1.7.1-fix-seg.patch
+ ./configure --prefix=/usr --disable-debug --disable-Werror
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/parted/parted-1.7.1-fix-seg.patch b/abs/core-testing/parted/parted-1.7.1-fix-seg.patch
new file mode 100644
index 0000000..a05c57c
--- /dev/null
+++ b/abs/core-testing/parted/parted-1.7.1-fix-seg.patch
@@ -0,0 +1,13 @@
+--- parted-1.7.1/libparted/fs/hfs/probe.c 2006-05-25 13:28:58.000000000 -0400
++++ parted-1.7.1.new/libparted/fs/hfs/probe.c 2006-06-09 16:58:35.000000000 -0400
+@@ -42,8 +42,9 @@
+ {
+ PedDevice* dev;
+
++ dev = geom->dev;
+ PED_ASSERT (geom != NULL, return 0);
+- PED_ASSERT ((dev = geom->dev) != NULL, return 0);
++ PED_ASSERT (dev != NULL, return 0);
+
+ if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
diff --git a/abs/core-testing/pciutils/PKGBUILD b/abs/core-testing/pciutils/PKGBUILD
new file mode 100644
index 0000000..9820582
--- /dev/null
+++ b/abs/core-testing/pciutils/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 7903 2008-08-05 06:38:41Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=pciutils
+pkgver=3.0.0
+pkgrel=11
+pkgdesc="PCI bus configuration space access library and tools"
+arch=(i686 x86_64)
+license=('GPL2')
+groups=('base')
+url="http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html"
+makedepends=('wget')
+depends=('glibc')
+source=(ftp://ftp.kernel.org/pub/software/utils/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ CFLAGS="${CFLAGS} -fPIC -DPIC"
+ sed -i -e 's/^OPT=.*/OPT=-O2 -pipe -fPIC -DPIC/g' Makefile
+ ./update-pciids.sh
+
+ make ZLIB=no PREFIX=/usr SHAREDIR=/usr/share/hwdata MANDIR=/usr/share/man all || return 1
+ make PREFIX=${startdir}/pkg/usr SHAREDIR=${startdir}/pkg/usr/share/hwdata MANDIR=${startdir}/pkg/usr/share/man install
+ install -d ${startdir}/pkg/usr/lib
+ install -m644 lib/libpci.a ${startdir}/pkg/usr/lib
+ for i in config.h header.h pci.h types.h; do
+ install -D -m 644 lib/${i} ${startdir}/pkg/usr/include/pci/${i}
+ done
+}
+md5sums=('85b5dae042217cf11bca10d52210a78d')
diff --git a/abs/core-testing/pcmciautils/PKGBUILD b/abs/core-testing/pcmciautils/PKGBUILD
new file mode 100644
index 0000000..dbbb092
--- /dev/null
+++ b/abs/core-testing/pcmciautils/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=pcmciautils
+pkgver=014
+pkgrel=13
+pkgdesc="Utilities for inserting and removing PCMCIA cards"
+arch=(i686 x86_64)
+url="http://kernel.org/pub/linux/utils/kernel/pcmcia/pcmcia.html"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'sysfsutils' 'module-init-tools>=3.2pre9')
+conflicts=('pcmcia-cs')
+source=(http://kernel.org/pub/linux/utils/kernel/pcmcia/pcmciautils-$pkgver.tar.bz2)
+md5sums=('3f07c926875f6c5dcb83240f39725177')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i -e 's,/usr/bin/install,/bin/install,g' Makefile
+ make -j1 || return 1
+ make DESTDIR=$startdir/pkg/ install
+ # fix udev rules for new modalias layout
+ sed -i -e 's/MODALIAS/ENV{MODALIAS}/g' -e 's/$modalias/$env{MODALIAS}/g'\
+ $startdir/pkg/etc/udev/rules.d/60-pcmcia.rules
+ # fix lspcmcia symlink
+ ln -sf pccardctl $startdir/pkg/sbin/lspcmcia
+ # adding static binaries for initrd setup
+ make clean
+ sed -i -e 's/STATIC\ =\ false/STATIC\ =\ true/g' Makefile
+ make -j1 || return 1
+ install -D -m755 pcmcia-check-broken-cis $startdir/pkg/sbin/pcmcia-check-broken-cis.static
+ install -D -m755 pcmcia-socket-startup $startdir/pkg/sbin/pcmcia-socket-startup.static
+ # fix modprobe rules to use the load-modules.sh
+ sed -i -e "s#/sbin/modprobe#/lib/udev/load-modules.sh#g" $startdir/pkg/etc/udev/rules.d/*
+}
diff --git a/abs/core-testing/pcre/ChangeLog b/abs/core-testing/pcre/ChangeLog
new file mode 100644
index 0000000..fa86646
--- /dev/null
+++ b/abs/core-testing/pcre/ChangeLog
@@ -0,0 +1,10 @@
+2008-07-07 Eric Belanger <eric@archlinux.org>
+
+ * pcre 7.7-2
+ * Added libpcre-7.7-buffer-overflow.patch to fix buffer overflow (close FS#10845)
+
+2008-05-10 Eric Belanger <eric@archlinux.org>
+
+ * pcre 7.7-1
+ * Upstream update
+ * Added ChangeLog
diff --git a/abs/core-testing/pcre/PKGBUILD b/abs/core-testing/pcre/PKGBUILD
new file mode 100644
index 0000000..2cf7252
--- /dev/null
+++ b/abs/core-testing/pcre/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 4449 2008-07-07 16:12:00Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=pcre
+pkgver=7.7
+pkgrel=11
+pkgdesc="A library that implements Perl 5-style regular expressions"
+arch=('i686' 'x86_64')
+url="http://pcre.sourceforge.net"
+license=('custom')
+groups=('base')
+depends=('gcc-libs')
+options=('!libtool' '!makeflags')
+source=(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/${pkgname}-${pkgver}.tar.bz2 \
+ libpcre-7.7-buffer-overflow.patch)
+md5sums=('4b2e9cde1f7227448dddba59843efa0b' 'ea2204b6a0cbc83b3ca925ace06459a1')
+sha1sums=('f1f54d3e13e6cb427de962e62eaaee32c74cba38' '5a69fb97f1fa547f9012082221a6b98d77b65277')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ [ "${CARCH}" = "x86_64" ] && export CFLAGS="${CFLAGS} -fPIC"
+ patch -p1 < ../libpcre-7.7-buffer-overflow.patch || return 1
+ ./configure --prefix=/usr --enable-utf8 --enable-unicode-properties || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ # grep uses pcre, so we need the libs in /lib
+ mkdir -p ${pkgdir}/lib
+ mv ${pkgdir}/usr/lib/libpcre.so.* ${pkgdir}/lib/ || return 1
+ ln -sf ../../lib/libpcre.so.0 ${pkgdir}/usr/lib/libpcre.so || return 1
+ install -D -m644 LICENCE ${pkgdir}/usr/share/licenses/${pkgname}/license.txt || return 1
+}
diff --git a/abs/core-testing/pcre/libpcre-7.7-buffer-overflow.patch b/abs/core-testing/pcre/libpcre-7.7-buffer-overflow.patch
new file mode 100644
index 0000000..a27987f
--- /dev/null
+++ b/abs/core-testing/pcre/libpcre-7.7-buffer-overflow.patch
@@ -0,0 +1,16 @@
+diff -NrU5 pcre-7.7.orig/pcre_compile.c pcre-7.7/pcre_compile.c
+--- pcre-7.7.orig/pcre_compile.c 2008-06-18 17:08:49.000000000 +0200
++++ pcre-7.7/pcre_compile.c 2008-06-18 17:11:04.000000000 +0200
+@@ -4929,11 +4929,11 @@
+ {
+ if (code == cd->start_code + 1 + LINK_SIZE &&
+ (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
+ {
+ cd->external_options = newoptions;
+- options = newoptions;
++ options = *optionsptr = newoptions;
+ }
+ else
+ {
+ if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
+ {
diff --git a/abs/core-testing/perl/PKGBUILD b/abs/core-testing/perl/PKGBUILD
new file mode 100644
index 0000000..5b05045
--- /dev/null
+++ b/abs/core-testing/perl/PKGBUILD
@@ -0,0 +1,102 @@
+# $Id: PKGBUILD 8709 2008-08-16 04:12:51Z eric $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=perl
+pkgver=5.10.0
+pkgrel=13
+pkgdesc="Practical Extraction and Report Language"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://www.perl.org"
+groups=('base')
+depends=('gdbm' 'db>=4.7' 'coreutils' 'glibc' 'sh')
+# for site_perl this is needed!
+#test without options=('emptydirs')
+source=(http://www.perl.com/CPAN/src/perl-${pkgver}.tar.gz
+# http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/DB_File-1.814.tar.gz
+ perlbin.sh perl-5.8.6-picdl.patch0
+ perl-5.10.0-archlinux-inc-order.patch)
+install=perl.install
+provides=(
+# extra
+perl-archive-tar perl-compress-raw-zlib perl-compress-zlib
+perl-extutils-cbuilder perl-io-compress-base perl-io-compress-zlib perl-io-zlib
+perl-module-pluggable perl-pod-escapes perl-pod-simple perl-module-build
+perl-version
+
+# aur
+perl-archive-extract perl-cpanplus perl-digest-sha perl-extutils-parsexs
+perl-file-fetch perl-ipc-cmd perl-locale-maketext-simple perl-log-message
+perl-log-message-simple perl-module-corelist perl-module-load
+perl-module-load-conditional perl-module-loaded perl-module-pluggable
+perl-object-accessor perl-params-check perl-term-ui perl-time-piece
+)
+md5sums=('d2c39b002ebfd2c3c5dba589365c5a71'
+ '9c4e3e56d71f123e92a68986df5ea924'
+ '319b56a7ce715fb7a494fe4d5cb9474c'
+ '0e4853bd75ee36b8f4c70b78c707b2fa')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+
+ # Update some modules provided with perl:
+ # replace the old DB_File with the newest one from CPAN,
+ # since it supports sleepycat's db 4.1.x
+# cd ext
+# rm -rf DB_File
+# mv $startdir/src/DB_File-1.814 ./DB_File
+
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ../perl-5.10.0-archlinux-inc-order.patch
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # for x86_64
+ arch_opts="-Dcccdlflags='-fPIC'"
+ patch -Np0 -i ../perl-5.8.6-picdl.patch0 || return 1
+ else
+ # for i686
+ arch_opts=""
+ fi
+ ./Configure -des -Dusethreads -Doptimize="${CFLAGS}" -Dprefix=/usr \
+ -Dinstallprefix=${startdir}/pkg/usr -Dvendorprefix=/usr \
+ -Dprivlib=/usr/share/perl5/core_perl \
+ -Darchlib=/usr/lib/perl5/core_perl \
+ -Dsitelib=/usr/share/perl5/site_perl/${pkgver} \
+ -Dsitearch=/usr/lib/perl5/site_perl/${pkgver} \
+ -Dvendorlib=/usr/share/perl5/vendor_perl \
+ -Dvendorarch=/usr/lib/perl5/vendor_perl \
+ -Dotherlibdirs=/usr/lib/perl5/current:/usr/lib/perl5/site_perl/current \
+ -Dscriptdir='/usr/bin/perlbin/core' \
+ -Dsitescript='/usr/bin/perlbin/site' \
+ -Dvendorscript='/usr/bin/perlbin/vendor' \
+ -Dman1ext=1perl -Dman3ext=3perl ${arch_opts}
+
+ make || return 1
+ make install
+
+ ### Perl Settings ###
+ # Change man page extensions for site and vendor module builds.
+ sed -e '/^man1ext=/ s/1perl/1p/' -e '/^man3ext=/ s/3perl/3pm/' \
+ -i ${startdir}/pkg/usr/lib/perl5/core_perl/Config_heavy.pl
+
+ ### CPAN Settings ###
+ # Set CPAN default config to use the site directories.
+ sed -e '/(makepl_arg =>/ s/""/"INSTALLDIRS=site"/' \
+ -e '/(mbuildpl_arg =>/ s/""/"installdirs=site"/' \
+ -i ${startdir}/pkg/usr/share/perl5/core_perl/CPAN/FirstTime.pm
+
+ ### CPANPLUS Settings ###
+ # Set CPANPLUS default config to use the site directories.
+ sed -e "/{'makemakerflags'}/ s/'';/'INSTALLDIRS=site';/" \
+ -e "/{'buildflags'}/ s/'';/'installdirs=site';/" \
+ -i ${startdir}/pkg/usr/share/perl5/core_perl/CPANPLUS/Config.pm
+
+ # Profile script so set paths to perl scripts.
+ install -D -m755 ${startdir}/src/perlbin.sh \
+ ${startdir}/pkg/etc/profile.d/perlbin.sh
+
+ (cd ${startdir}/pkg/usr/bin; mv perl${pkgver} perl)
+ (cd ${startdir}/pkg/usr/bin/perlbin/core; \
+ ln -sf c2ph pstruct; ln -sf s2p psed)
+ grep -Rl "${startdir}/pkg" ${startdir}/pkg/usr | \
+ xargs sed -i "s^${startdir}/pkg^^g"
+}
diff --git a/abs/core-testing/perl/archlinux-cpan-installdir.patch b/abs/core-testing/perl/archlinux-cpan-installdir.patch
new file mode 100644
index 0000000..1e005d8
--- /dev/null
+++ b/abs/core-testing/perl/archlinux-cpan-installdir.patch
@@ -0,0 +1,17 @@
+Some modules which are included in the perl core set INSTALLDIRS => 'perl'
+explicitly in Makefile.PL. This makes sense for the normal @INC ordering but
+not for Arch Linux. Provide a sensible default.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- lib/CPAN/FirstTime.pm.orig 2007-11-04 22:35:31.000000000 -0500
++++ lib/CPAN/FirstTime.pm 2007-11-04 22:37:59.000000000 -0500
+@@ -358,7 +358,7 @@
+
+ };
+
+- $default = $CPAN::Config->{makepl_arg} || "";
++ $default = $CPAN::Config->{makepl_arg} || "INSTALLDIRS=site";
+ $CPAN::Config->{makepl_arg} =
+ prompt("Parameters for the 'perl Makefile.PL' command?
+ Typical frequently used settings:
diff --git a/abs/core-testing/perl/archlinux-inc-order.patch b/abs/core-testing/perl/archlinux-inc-order.patch
new file mode 100644
index 0000000..a0c7a9c
--- /dev/null
+++ b/abs/core-testing/perl/archlinux-inc-order.patch
@@ -0,0 +1,101 @@
+Tweak @INC so that the ordering is:
+ site (5.8.8)
+ vendor (all)
+ core (5.8.8)
+ obsolete (pre-5.8.8-9) vendor builds
+
+The rationale being that an admin (via site), or module packager (vendor) can
+chose to shadow core modules when there is a newer version than is included in
+core.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- perl.c.orig 2006-01-31 07:34:47.000000000 -0500
++++ perl.c 2007-10-31 22:46:56.000000000 -0400
+@@ -4771,44 +4771,12 @@
+
+ /* Use the ~-expanded versions of APPLLIB (undocumented),
+ ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
++ Arch Linux: SITEARCH SITELIB VENDORARCH VENDORLIB ARCHLIB PRIVLIB OTHER
+ */
+ #ifdef APPLLIB_EXP
+ incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
+ #endif
+
+-#ifdef ARCHLIB_EXP
+- incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
+-#endif
+-#ifdef MACOS_TRADITIONAL
+- {
+- Stat_t tmpstatbuf;
+- SV * privdir = NEWSV(55, 0);
+- char * macperl = PerlEnv_getenv("MACPERL");
+-
+- if (!macperl)
+- macperl = "";
+-
+- Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+- Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+-
+- SvREFCNT_dec(privdir);
+- }
+- if (!PL_tainting)
+- incpush(":", FALSE, FALSE, TRUE);
+-#else
+-#ifndef PRIVLIB_EXP
+-# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+-#endif
+-#if defined(WIN32)
+- incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
+-#else
+- incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
+-#endif
+-
+ #ifdef SITEARCH_EXP
+ /* sitearch is always relative to sitelib on Windows for
+ * DLL-based path intuition to work correctly */
+@@ -4850,6 +4818,40 @@
+ incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
+ #endif
+
++/* Arch Linux: core libs after site and vendor libs. */
++#ifdef ARCHLIB_EXP
++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
++#endif
++#ifdef MACOS_TRADITIONAL
++ {
++ Stat_t tmpstatbuf;
++ SV * privdir = NEWSV(55, 0);
++ char * macperl = PerlEnv_getenv("MACPERL");
++
++ if (!macperl)
++ macperl = "";
++
++ Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
++ Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
++
++ SvREFCNT_dec(privdir);
++ }
++ if (!PL_tainting)
++ incpush(":", FALSE, FALSE, TRUE);
++#else
++#ifndef PRIVLIB_EXP
++# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
++#endif
++#if defined(WIN32)
++ incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
++#else
++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
+ #endif
diff --git a/abs/core-testing/perl/perl-5.10.0-archlinux-cpan-installdir.patch b/abs/core-testing/perl/perl-5.10.0-archlinux-cpan-installdir.patch
new file mode 100644
index 0000000..0770a5e
--- /dev/null
+++ b/abs/core-testing/perl/perl-5.10.0-archlinux-cpan-installdir.patch
@@ -0,0 +1,11 @@
+--- lib/CPAN/FirstTime.pm.orig 2007-12-24 23:21:42.000000000 -0500
++++ lib/CPAN/FirstTime.pm 2007-12-24 23:26:04.000000000 -0500
+@@ -940,7 +940,7 @@
+ }
+
+ if (!$matcher or 'makepl_arg make_arg' =~ /$matcher/) {
+- my_dflt_prompt(makepl_arg => "", $matcher);
++ my_dflt_prompt(makepl_arg => "INSTALLDIRS=site", $matcher);
+ my_dflt_prompt(make_arg => "", $matcher);
+ }
+
diff --git a/abs/core-testing/perl/perl-5.10.0-archlinux-inc-order.patch b/abs/core-testing/perl/perl-5.10.0-archlinux-inc-order.patch
new file mode 100644
index 0000000..1c85eb8
--- /dev/null
+++ b/abs/core-testing/perl/perl-5.10.0-archlinux-inc-order.patch
@@ -0,0 +1,101 @@
+Tweak @INC so that the ordering is:
+ site (5.8.8)
+ vendor (all)
+ core (5.8.8)
+ obsolete (pre-5.8.8-9) vendor builds
+
+The rationale being that an admin (via site), or module packager (vendor) can
+chose to shadow core modules when there is a newer version than is included in
+core.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- perl.c.orig 2007-12-18 05:47:08.000000000 -0500
++++ perl.c 2007-12-24 23:15:23.000000000 -0500
+@@ -4748,44 +4748,12 @@
+
+ /* Use the ~-expanded versions of APPLLIB (undocumented),
+ ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
++ Arch Linux: SITEARCH SITELIB VENDORARCH VENDORLIB ARCHLIB PRIVLIB OTHER
+ */
+ #ifdef APPLLIB_EXP
+ incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE);
+ #endif
+
+-#ifdef ARCHLIB_EXP
+- incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
+-#endif
+-#ifdef MACOS_TRADITIONAL
+- {
+- Stat_t tmpstatbuf;
+- SV * privdir = newSV(0);
+- char * macperl = PerlEnv_getenv("MACPERL");
+-
+- if (!macperl)
+- macperl = "";
+-
+- Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
+- Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
+-
+- SvREFCNT_dec(privdir);
+- }
+- if (!PL_tainting)
+- incpush(":", FALSE, FALSE, TRUE, FALSE);
+-#else
+-#ifndef PRIVLIB_EXP
+-# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+-#endif
+-#if defined(WIN32)
+- incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
+-#else
+- incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
+-#endif
+-
+ #ifdef SITEARCH_EXP
+ /* sitearch is always relative to sitelib on Windows for
+ * DLL-based path intuition to work correctly */
+@@ -4828,6 +4796,40 @@
+ incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE);
+ #endif
+
++/* Arch Linux: core libs after site and vendor libs. */
++#ifdef ARCHLIB_EXP
++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
++#endif
++#ifdef MACOS_TRADITIONAL
++ {
++ Stat_t tmpstatbuf;
++ SV * privdir = newSV(0);
++ char * macperl = PerlEnv_getenv("MACPERL");
++
++ if (!macperl)
++ macperl = "";
++
++ Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
++ Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
++
++ SvREFCNT_dec(privdir);
++ }
++ if (!PL_tainting)
++ incpush(":", FALSE, FALSE, TRUE, FALSE);
++#else
++#ifndef PRIVLIB_EXP
++# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
++#endif
++#if defined(WIN32)
++ incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
++#else
++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE);
+ #endif
diff --git a/abs/core-testing/perl/perl-5.8.6-picdl.patch0 b/abs/core-testing/perl/perl-5.8.6-picdl.patch0
new file mode 100644
index 0000000..f69a680
--- /dev/null
+++ b/abs/core-testing/perl/perl-5.8.6-picdl.patch0
@@ -0,0 +1,13 @@
+--- Makefile.SH.orig 2003-11-29 01:16:15.000000000 -0800
++++ Makefile.SH 2003-11-29 01:16:52.000000000 -0800
+@@ -129,8 +129,8 @@
+
+ ;;
+
+-*) pldlflags=''
+- static_target='static'
++*) pldlflags="$cccdlflags"
++ static_target='static_pic'
+ ;;
+ esac
+
diff --git a/abs/core-testing/perl/perl-5.8.8-gcc-4.2.0.patch b/abs/core-testing/perl/perl-5.8.8-gcc-4.2.0.patch
new file mode 100644
index 0000000..679a7ab
--- /dev/null
+++ b/abs/core-testing/perl/perl-5.8.8-gcc-4.2.0.patch
@@ -0,0 +1,10 @@
+--- perl-5.8.x/makedepend.SH 2006-06-13 15:31:22.000000000 -0400
++++ perl-5.8.x-andy/makedepend.SH 2006-07-25 14:45:11.000000000 -0400
+@@ -167,6 +167,7 @@
+ -e '/^#.*<builtin>/d' \
+ -e '/^#.*<built-in>/d' \
+ -e '/^#.*<command line>/d' \
++ -e '/^#.*<command-line>/d' \
+ -e '/^#.*"-"/d' \
+ -e '/: file path prefix .* never used$/d' \
+ -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
diff --git a/abs/core-testing/perl/perl-5.8.8-utf-regexes.patch b/abs/core-testing/perl/perl-5.8.8-utf-regexes.patch
new file mode 100644
index 0000000..5799fff
--- /dev/null
+++ b/abs/core-testing/perl/perl-5.8.8-utf-regexes.patch
@@ -0,0 +1,59 @@
+CVE-2007-5116 perl regular expression UTF parsing errors
+https://bugzilla.redhat.com/show_bug.cgi?id=323571
+
+--- regcomp.c 2006-01-08 12:59:27.000000000 -0800
++++ regcomp.c 2007-10-05 12:07:55.000000000 -0700
+@@ -135,7 +135,8 @@
+ I32 extralen;
+ I32 seen_zerolen;
+ I32 seen_evals;
+- I32 utf8;
++ I32 utf8; /* pattern is utf8 or not */
++ I32 orig_utf8; /* pattern was originally utf8 */
+ #if ADD_TO_REGEXEC
+ char *starttry; /* -Dr: where regtry was called. */
+ #define RExC_starttry (pRExC_state->starttry)
+@@ -161,6 +162,7 @@
+ #define RExC_seen_zerolen (pRExC_state->seen_zerolen)
+ #define RExC_seen_evals (pRExC_state->seen_evals)
+ #define RExC_utf8 (pRExC_state->utf8)
++#define RExC_orig_utf8 (pRExC_state->orig_utf8)
+
+ #define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
+ #define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
+@@ -1749,15 +1751,17 @@
+ if (exp == NULL)
+ FAIL("NULL regexp argument");
+
+- RExC_utf8 = pm->op_pmdynflags & PMdf_CMP_UTF8;
++ RExC_orig_utf8 = RExC_utf8 = pm->op_pmdynflags & PMdf_CMP_UTF8;
+
+- RExC_precomp = exp;
+ DEBUG_r({
+ if (!PL_colorset) reginitcolors();
+ PerlIO_printf(Perl_debug_log, "%sCompiling REx%s `%s%*s%s'\n",
+ PL_colors[4],PL_colors[5],PL_colors[0],
+- (int)(xend - exp), RExC_precomp, PL_colors[1]);
++ (int)(xend - exp), exp, PL_colors[1]);
+ });
++
++redo_first_pass:
++ RExC_precomp = exp;
+ RExC_flags = pm->op_pmflags;
+ RExC_sawback = 0;
+
+@@ -1783,6 +1787,17 @@
+ RExC_precomp = Nullch;
+ return(NULL);
+ }
++ if (RExC_utf8 && !RExC_orig_utf8) {
++ STRLEN len = xend-exp;
++ DEBUG_r(PerlIO_printf(Perl_debug_log,
++ "UTF8 mismatch! Converting to utf8 for resizing and compile\n"));
++ exp = (char*)Perl_bytes_to_utf8(aTHX_ (U8*)exp, &len);
++ xend = exp + len;
++ RExC_orig_utf8 = RExC_utf8;
++ SAVEFREEPV(exp);
++ goto redo_first_pass;
++ }
++
diff --git a/abs/core-testing/perl/perl.install b/abs/core-testing/perl/perl.install
new file mode 100644
index 0000000..f0ff3fb
--- /dev/null
+++ b/abs/core-testing/perl/perl.install
@@ -0,0 +1,54 @@
+# arg 1: the new package version
+post_install() {
+ for ver in 5.8.{0,1,2,3,4,5,6,7,8}; do
+ [ -h usr/lib/perl5/$ver ] && rm usr/lib/perl5/$ver
+ [ -h usr/lib/perl5/site_perl/$ver ] && rm usr/lib/perl5/site_perl/$ver
+ [ -h usr/bin/perl$ver ] && rm usr/bin/perl$ver
+ done
+
+ echo
+ echo " This version of perl follows the new perl directory hierarchy (see"
+ echo " http://wiki.archlinux.org/index.php/Perl_Policy)."
+ echo
+ echo " - The perl package and its modules install in the core_perl directories"
+ echo " - Perl modules provided by Arch Linux install in vendor_perl directories"
+ echo " - CPAN/CPANPLUS installs should be placed in site_perl directories"
+ echo " - Older modules in the 'current' directory should still work"
+ echo " - Programs with embedded perl interpreters need to be rebuilt"
+ echo
+ echo " Users of the CPAN or CPANPLUS shells should modify the configuration"
+ echo " to use the site_perl directories. Under the CPAN shell use:"
+ echo " o conf makepl_arg INSTALLDIRS=site"
+ echo " o conf mbuildpl_arg installdirs=site"
+ echo " Under the CPANPLUS shell:"
+ echo " s conf buildflags installdirs=site"
+ echo " s conf makemakerflags INSTALLDIRS=site"
+ echo " Then save the configuration."
+ echo
+ echo " The following official packages can be removed since the modules are"
+ echo " now included in the standard perl library:"
+ echo " perl-archive-tar perl-compress-raw-zlib perl-compress-zlib"
+ echo " perl-extutils-cbuilder perl-io-compress-base perl-io-compress-zlib"
+ echo " perl-io-zlib perl-module-pluggable perl-pod-escapes perl-pod-simple"
+ echo " perl-module-build perl-version"
+ echo
+ echo " These community packages are also included in the standard perl library:"
+ echo " perl-archive-extract perl-cpanplus perl-digest-sha perl-file-fetch"
+ echo " perl-extutils-parsexs perl-ipc-cmd perl-locale-maketext-simple"
+ echo " perl-log-message perl-log-message-simple perl-module-corelist"
+ echo " perl-module-load perl-module-load-conditional perl-module-loaded"
+ echo " perl-module-pluggable perl-object-accessor perl-params-check"
+ echo " perl-term-ui perl-time-piece"
+ echo
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/perl/perlbin.sh b/abs/core-testing/perl/perlbin.sh
new file mode 100755
index 0000000..49aeb2d
--- /dev/null
+++ b/abs/core-testing/perl/perlbin.sh
@@ -0,0 +1,2 @@
+# Set path to perl scripts.
+export PATH="${PATH}:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core"
diff --git a/abs/core-testing/perl_modules/perl-archive-zip/PKGBUILD b/abs/core-testing/perl_modules/perl-archive-zip/PKGBUILD
new file mode 100644
index 0000000..0559fe6
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-archive-zip/PKGBUILD
@@ -0,0 +1,28 @@
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-archive-zip
+_realname=Archive-Zip
+pkgver=1.23
+pkgrel=2
+pkgdesc="Provide a perl interface to ZIP archive files"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/${_realname}-${pkgver}.tar.gz)
+md5sums=('7ffcbdc1b603307235fb8d42084cb84d')
+
+
+build() {
+ cd ${startdir}/src/${_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=${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-testing/perl_modules/perl-class-methodmaker/PKGBUILD b/abs/core-testing/perl_modules/perl-class-methodmaker/PKGBUILD
new file mode 100644
index 0000000..29da312
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-class-methodmaker/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-class-methodmaker
+pkgver=2.11
+pkgrel=1
+pkgdesc="Create generic class methods"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~schwigon/Class-MethodMaker"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SC/SCHWIGON/class-methodmaker/Class-MethodMaker-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/Class-MethodMaker-$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
+}
+md5sums=('61ed8327e50b99e574c5f5ce1a835d36')
diff --git a/abs/core-testing/perl_modules/perl-crypt-ssleay/PKGBUILD b/abs/core-testing/perl_modules/perl-crypt-ssleay/PKGBUILD
new file mode 100644
index 0000000..03c05ce
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-crypt-ssleay/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-crypt-ssleay
+pkgver=0.57
+pkgrel=2
+pkgdesc="OpenSSL glue that provides LWP https support"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DLAND/Crypt-SSLeay"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DL/DLAND/Crypt-SSLeay-$pkgver.tar.gz)
+md5sums=('82264180f5911dce33dbd85e24b1f36b')
+
+build() {
+ cd $startdir/src/Crypt-SSLeay-$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-testing/perl_modules/perl-date-manip/PKGBUILD b/abs/core-testing/perl_modules/perl-date-manip/PKGBUILD
new file mode 100644
index 0000000..be50d1a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-date-manip/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-date-manip
+_realname=Date-Manip
+pkgver=5.54
+pkgrel=1
+pkgdesc="Date::Manip - date manipulation routines"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/${_realname}-${pkgver}.tar.gz)
+md5sums=('16c343329bad644b17f4f8ec5fb243cf')
+
+build() {
+ cd ${startdir}/src/${_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=${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-testing/perl_modules/perl-dbd-mysql/PKGBUILD b/abs/core-testing/perl_modules/perl-dbd-mysql/PKGBUILD
new file mode 100644
index 0000000..c6e4cb8
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-dbd-mysql/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-dbd-mysql
+_realname=DBD-mysql
+pkgver=4.006
+pkgrel=1
+pkgdesc="Perl/CPAN DBD::mysql module for interacting with MySQL via DBD"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('libmysqlclient' 'perl-dbi' 'perl>=5.10.0')
+makedepends=('mysql')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/${_realname}-${pkgver}.tar.gz)
+md5sums=('133ac08c22bb19194ad8b895e3204310')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install 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-testing/perl_modules/perl-dbi/PKGBUILD b/abs/core-testing/perl_modules/perl-dbi/PKGBUILD
new file mode 100644
index 0000000..c6c5599
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-dbi/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Matt Thompson <mattt@defunct.ca>
+pkgname=perl-dbi
+_realname=DBI
+pkgver=1.601
+pkgrel=1
+pkgdesc="Database independent interface for Perl"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/T/TI/TIMB/${_realname}-${pkgver}.tar.gz)
+md5sums=('d80677bd8113ec8cb0438b8703f3c418')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-fcgi/PKGBUILD b/abs/core-testing/perl_modules/perl-fcgi/PKGBUILD
new file mode 100644
index 0000000..73b9ef1
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-fcgi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-fcgi
+pkgver=0.67
+pkgrel=4
+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')
+
+build() {
+ cd $startdir/src/FCGI-$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-testing/perl_modules/perl-file-slurp/PKGBUILD b/abs/core-testing/perl_modules/perl-file-slurp/PKGBUILD
new file mode 100644
index 0000000..5e96fd8
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-file-slurp/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-file-slurp
+pkgver=9999.13
+pkgrel=1
+pkgdesc="Read/write/append files quickly"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DROLSKY/File-Slurp"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DR/DROLSKY/File-Slurp-$pkgver.tar.gz)
+md5sums=('ac3cd9d466b99d1534762ff3549aaa66')
+
+build() {
+ cd $startdir/src/File-Slurp-$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-testing/perl_modules/perl-html-parser/PKGBUILD b/abs/core-testing/perl_modules/perl-html-parser/PKGBUILD
new file mode 100644
index 0000000..43c3b8a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-html-parser/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-html-parser
+_realname=HTML-Parser
+pkgver=3.56
+pkgrel=3
+pkgdesc="Perl HTML parser class"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-html-tagset' 'perl>=5.10.0')
+options=(!emptydirs)
+replaces=('html-parser')
+provides=('html-parser')
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('bddc432e5ed9df4d4153a62234f04fc2')
+
+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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-html-tagset/PKGBUILD b/abs/core-testing/perl_modules/perl-html-tagset/PKGBUILD
new file mode 100644
index 0000000..047f39c
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-html-tagset/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: kevin <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-html-tagset
+_realname=HTML-Tagset
+pkgver=3.10
+pkgrel=3
+pkgdesc="Data tables useful in parsing HTML"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+replaces=('html-tagset')
+provides=('html-tagset')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/P/PE/PETDANCE/${_realname}-${pkgver}.tar.gz)
+md5sums=('89bdd351272ccd285fa61c5b2ce451ab')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-html-tree/PKGBUILD b/abs/core-testing/perl_modules/perl-html-tree/PKGBUILD
new file mode 100644
index 0000000..f946545
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-html-tree/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-html-tree
+pkgver=3.23
+pkgrel=6
+pkgdesc="Make parse trees out of HTML source"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PETEK/HTML-Tree"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-html-tagset>=3.02' 'perl-html-parser>=3.46')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PE/PETEK/HTML-Tree-$pkgver.tar.gz)
+md5sums=('6352f50be402301f79b580dd235d7762')
+
+build() {
+ cd $startdir/src/HTML-Tree-$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-testing/perl_modules/perl-http-cache-transparent/PKGBUILD b/abs/core-testing/perl_modules/perl-http-cache-transparent/PKGBUILD
new file mode 100644
index 0000000..23a7170
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-http-cache-transparent/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-http-cache-transparent
+pkgver=1.0
+pkgrel=2
+pkgdesc="Cache the result of http-gets persistently"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~MATTIASH/HTTP-Cache-Transparent"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-libwww')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MA/MATTIASH/HTTP-Cache-Transparent-$pkgver.tar.gz)
+md5sums=('e198345ce8eee2562c807e84d65e3b4f')
+
+build() {
+ cd $startdir/src/HTTP-Cache-Transparent-$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-testing/perl_modules/perl-io-socket-ssl/PKGBUILD b/abs/core-testing/perl_modules/perl-io-socket-ssl/PKGBUILD
new file mode 100644
index 0000000..75a906d
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-io-socket-ssl/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-io-socket-ssl
+_realname=IO-Socket-SSL
+pkgver=1.12
+pkgrel=1
+pkgdesc="IO::Socket::SSL - Nearly transparent SSL encapsulation for IO::Socket::INET"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-net-ssleay' 'perl>=5.10.0')
+options=(!emptydirs)
+replaces=('io-socket-ssl')
+provides=('io-socket-ssl')
+source=(http://www.cpan.org/authors/id/S/SU/SULLR/${_realname}-${pkgver}.tar.gz)
+md5sums=('0f6e80c15341094df16828a25dbaeeaa')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-io-stringy/PKGBUILD b/abs/core-testing/perl_modules/perl-io-stringy/PKGBUILD
new file mode 100644
index 0000000..0fdf300
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-io-stringy/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-io-stringy
+pkgver=2.110
+pkgrel=6
+pkgdesc="I/O on in-core objects like strings/arrays"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DSKOLL/IO-stringy"
+license=('GPL' 'PerlArtistic')
+depends=('perl')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DS/DSKOLL/IO-stringy-$pkgver.tar.gz)
+md5sums=('2e6a976cfa5521e815c1fdf4006982de')
+
+build() {
+ cd $startdir/src/IO-stringy-$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-testing/perl_modules/perl-libwww/PKGBUILD b/abs/core-testing/perl_modules/perl-libwww/PKGBUILD
new file mode 100644
index 0000000..254519a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-libwww/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-libwww
+_realname=libwww-perl
+pkgver=5.808
+pkgrel=2
+pkgdesc="A set of Perl modules which provides a simple and consistent API to the WWW."
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-uri' 'perl-html-parser' 'perl>=5.10.0')
+
+options=(!emptydirs)
+replaces=('libwww-perl')
+provides=('libwww-perl')
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('72120d9195ab1649c2d787eb1102a90c')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD b/abs/core-testing/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD
new file mode 100644
index 0000000..b926acd
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-en-numbers-ordinate
+pkgver=1.02
+pkgrel=2
+pkgdesc="Go from cardinal (53) to ordinal (53rd)"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~SBURKE/Lingua-EN-Numbers-Ordinate"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SB/SBURKE/Lingua-EN-Numbers-Ordinate-$pkgver.tar.gz)
+md5sums=('e92078fafd9108a137972c4e9bae9e99')
+
+build() {
+ cd $startdir/src/Lingua-EN-Numbers-Ordinate-$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-testing/perl_modules/perl-lingua-en-numbers/PKGBUILD b/abs/core-testing/perl_modules/perl-lingua-en-numbers/PKGBUILD
new file mode 100644
index 0000000..53b50a8
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-lingua-en-numbers/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-en-numbers
+pkgver=1.01
+pkgrel=2
+pkgdesc="Turn 407 into four hundred and seven, etc."
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~SBURKE/Lingua-EN-Numbers"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SB/SBURKE/Lingua-EN-Numbers-$pkgver.tar.gz)
+md5sums=('e2f9252b1cdc5002e1f912e20b2f5bbb')
+
+build() {
+ cd $startdir/src/Lingua-EN-Numbers-$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-testing/perl_modules/perl-lingua-preferred/PKGBUILD b/abs/core-testing/perl_modules/perl-lingua-preferred/PKGBUILD
new file mode 100644
index 0000000..23a6507
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-lingua-preferred/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-preferred
+pkgver=0.2.4
+pkgrel=2
+pkgdesc="Pick a language based on user's preferences"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~EDAVIS/Lingua-Preferred"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/E/ED/EDAVIS/Lingua-Preferred-$pkgver.tar.gz)
+md5sums=('37e883fafb05b1439de1121f41e8ad75')
+
+build() {
+ cd $startdir/src/Lingua-Preferred-$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-testing/perl_modules/perl-mailtools/PKGBUILD b/abs/core-testing/perl_modules/perl-mailtools/PKGBUILD
new file mode 100644
index 0000000..fae63ee
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-mailtools/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-mailtools
+_realname=MailTools
+pkgver=2.04
+pkgrel=1
+pkgdesc="Perl module that provides email tools"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/${_realname}-${pkgver}.tar.gz)
+md5sums=('d21ea4f375d1e5f3da6b0a4e8ba1e2c6')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-mime-lite/PKGBUILD b/abs/core-testing/perl_modules/perl-mime-lite/PKGBUILD
new file mode 100644
index 0000000..f2fd37a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-mime-lite/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-mime-lite
+_realname=MIME-Lite
+pkgver=3.021
+pkgrel=1
+pkgdesc="Perl module that provides lightweight MIME generator"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-mailtools' 'perl-mime-types' 'perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/${_realname}-$pkgver.tar.gz)
+md5sums=('7b3f4b9b3f8a0023dbc62859ef9a775f')
+
+build() {
+ cd $startdir/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-mime-tools/ChangeLog b/abs/core-testing/perl_modules/perl-mime-tools/ChangeLog
new file mode 100644
index 0000000..0ece331
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-mime-tools/ChangeLog
@@ -0,0 +1,4 @@
+
+2008-01-05 Douglas Soares de Andrade <dsa@aur.archlinux.org>
+
+ * Updated for x86_64
diff --git a/abs/core-testing/perl_modules/perl-mime-tools/PKGBUILD b/abs/core-testing/perl_modules/perl-mime-tools/PKGBUILD
new file mode 100644
index 0000000..1979431
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-mime-tools/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-mime-tools
+pkgver=5.426
+pkgrel=1
+pkgdesc="Perl modules for parsing and creating MIME entities"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DONEILL/MIME-tools"
+license=('GPL' 'PerlArtistic')
+depends=('perl-mailtools' 'perl-io-stringy>=2.11' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DO/DONEILL/MIME-tools-$pkgver.tar.gz)
+md5sums=('87ab3a328e56268f551ff3ef5f51f416')
+
+build() {
+ cd $startdir/src/MIME-tools-$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-testing/perl_modules/perl-mime-types/PKGBUILD b/abs/core-testing/perl_modules/perl-mime-types/PKGBUILD
new file mode 100644
index 0000000..3cc06cb
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-mime-types/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot
+# Contributor: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-mime-types
+_realname=MIME-Types
+pkgver=1.24
+pkgrel=1
+pkgdesc="Perl/CPAN Module MIME::Types : Information and processing MIME types"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+makedepends=('perl-test-pod')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/M/MA/MARKOV/${_realname}-${pkgver}.tar.gz)
+md5sums=('fe43cf2caac763f8b02fdd4ced3fd038')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install 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-testing/perl_modules/perl-net-ssleay/PKGBUILD b/abs/core-testing/perl_modules/perl-net-ssleay/PKGBUILD
new file mode 100644
index 0000000..d2ead9d
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-net-ssleay/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-net-ssleay
+_realname=Net_SSLeay.pm
+pkgver=1.30
+pkgrel=2
+pkgdesc="Perl extension for using OpenSSL"
+arch=(i686 x86_64)
+license=('custom:BSD')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0' 'openssl')
+options=(!emptydirs)
+replaces=('net-ssleay')
+provides=('net-ssleay')
+source=(http://www.cpan.org/authors/id/F/FL/FLORA/${_realname}-${pkgver}.tar.gz)
+md5sums=('b0cd6c1681bbc0695d81be5cd852d1d0')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+
+ install -D -m644 README ${startdir}/pkg/usr/share/licenses/${pkgname}/README
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-soap-lite/PKGBUILD b/abs/core-testing/perl_modules/perl-soap-lite/PKGBUILD
new file mode 100644
index 0000000..d732ea6
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-soap-lite/PKGBUILD
@@ -0,0 +1,24 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-soap-lite
+pkgver=0.710.08
+pkgrel=1
+pkgdesc="Client and server side SOAP implementation"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~MKUTTER/SOAP-Lite"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-crypt-ssleay' 'perl-mime-lite' 'perl-libwww' 'perl-uri' \
+ 'perl-mime-tools' 'perl-io-socket-ssl' 'perlxml>=2.23' 'perl-fcgi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MK/MKUTTER/SOAP-Lite-$pkgver.tar.gz)
+md5sums=('e7869ad91fee76cc1782fe29fe3a989d')
+
+build() {
+ cd $startdir/src/SOAP-Lite-$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-testing/perl_modules/perl-term-progressbar/PKGBUILD b/abs/core-testing/perl_modules/perl-term-progressbar/PKGBUILD
new file mode 100644
index 0000000..133603f
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-term-progressbar/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was autocreated. See http://xtermin.us/archperl/ for details
+# Maintainer: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-term-progressbar
+pkgver=2.09
+pkgrel=3
+pkgdesc="Perl/CPAN Module Term::ProgressBar : Progress bar in just ASCII using Term"
+arch=("i686" "x86_64")
+url="http://search.cpan.org/FLUFFY/Term-ProgressBar"
+license=("GPL" "PerlArtistic")
+source=("http://www.cpan.org/authors/id/F/FL/FLUFFY/Term-ProgressBar-2.09.tar.gz")
+md5sums=('440dfd04fe51a12d314e9adf2445f04a')
+makedepends=("perl-class-methodmaker" "perl-term-readkey")
+depends=("perl-class-methodmaker" "perl-term-readkey")
+
+build() {
+ cd $startdir/src/Term-ProgressBar-2.09
+ 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-testing/perl_modules/perl-term-readkey/PKGBUILD b/abs/core-testing/perl_modules/perl-term-readkey/PKGBUILD
new file mode 100644
index 0000000..4c4fdee
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-term-readkey/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Wael Nasreddine <gandalf@siemens-mobiles.org>
+
+pkgname=perl-term-readkey
+pkgver=2.30
+pkgrel=2
+pkgdesc="A perl module dedicated to providing simple control over terminal driver modes."
+arch=('i686' 'x86_64')
+license=('custom')
+depends=('perl>=5.10.0' 'glibc')
+url="http://cpan.org/modules/by-module/Term"
+source=(http://cpan.org/modules/by-module/Term/TermReadKey-$pkgver.tar.gz)
+md5sums=('f0ef2cea8acfbcc58d865c05b0c7e1ff')
+options=('!emptydirs')
+build()
+{
+ cd $startdir/src/TermReadKey-$pkgver
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -d $startdir/pkg/usr/share/licenses/$pkgname/
+ head -7 README > $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
diff --git a/abs/core-testing/perl_modules/perl-text-bidi/PKGBUILD b/abs/core-testing/perl_modules/perl-text-bidi/PKGBUILD
new file mode 100644
index 0000000..e667f5e
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-text-bidi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-text-bidi
+pkgver=0.03
+pkgrel=3
+pkgdesc="Unicode bidi algorithm-libfribidi interface"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~KAMENSKY/Text-Bidi"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'fribidi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/K/KA/KAMENSKY/Text-Bidi-$pkgver.tar.gz)
+md5sums=('93e124628ff2983e32ac478f25f8d627')
+
+build() {
+ cd $startdir/src/Text-Bidi-$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-testing/perl_modules/perl-text-iconv/PKGBUILD b/abs/core-testing/perl_modules/perl-text-iconv/PKGBUILD
new file mode 100644
index 0000000..1e35fce
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-text-iconv/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+# Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-text-iconv
+_realname=Text-Iconv
+pkgver=1.7
+pkgrel=2
+pkgdesc="Interface to iconv codeset conversion"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/${_realname}/"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MP/MPIOTR/${_realname}-${pkgver}.tar.gz)
+md5sums=('81b26e069eaebb084e91ea3c009b67ae')
+
+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 '*.pod' -delete
+}
diff --git a/abs/core-testing/perl_modules/perl-text-kakasi/PKGBUILD b/abs/core-testing/perl_modules/perl-text-kakasi/PKGBUILD
new file mode 100644
index 0000000..19499af
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-text-kakasi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-text-kakasi
+pkgver=2.04
+pkgrel=3
+pkgdesc="Perl frontend to kakasi"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DANKOGAI/Text-Kakasi"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0''kakasi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DA/DANKOGAI/Text-Kakasi-$pkgver.tar.gz)
+md5sums=('5a9e381cb93edfd707124a63c60f96b1')
+
+build() {
+ cd $startdir/src/Text-Kakasi-$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-testing/perl_modules/perl-timedate/PKGBUILD b/abs/core-testing/perl_modules/perl-timedate/PKGBUILD
new file mode 100644
index 0000000..fc72d6a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-timedate/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-timedate
+_realname=TimeDate
+pkgver=1.16
+pkgrel=3
+pkgdesc="Date formating subroutines"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+source=(http://www.cpan.org/authors/id/G/GB/GBARR/${_realname}-${pkgver}.tar.gz)
+options=(!emptydirs)
+replaces=('timedate')
+provides=('timedate')
+md5sums=('b3cc35a7cabd106ac8829d2f2ff4bd9d')
+
+build() {
+ cd $startdir/src/${_realname}-${pkgver}
+
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-tk-tablematrix/PKGBUILD b/abs/core-testing/perl_modules/perl-tk-tablematrix/PKGBUILD
new file mode 100644
index 0000000..4244683
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-tk-tablematrix/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD,v 1.8 2008/03/24 17:11:47 sergej Exp $
+# Maintainer: Sergej Pupykin <sergej@aur.archlinux.org>
+# Maintainer: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-tk-tablematrix
+pkgver=1.23
+pkgrel=4
+pkgdesc="Display data in TableSpreadsheet format"
+arch=("i686" "x86_64")
+url="http://search.cpan.org/CERNEY/Tk-TableMatrix"
+license=("GPL" "PerlArtistic")
+depends=('perl-tk')
+options=('!emptydirs')
+source=("http://www.cpan.org/authors/id/C/CE/CERNEY/Tk-TableMatrix-$pkgver.tar.gz")
+md5sums=('6b7653d129bf1a8327054a88b58d6364')
+
+build() {
+ cd $startdir/src/Tk-TableMatrix-$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
+ rm -f $startdir/pkg/usr/lib/perl5/vendor_perl/auto/Tk/pTk/extralibs.ld
+}
diff --git a/abs/core-testing/perl_modules/perl-tk/PKGBUILD b/abs/core-testing/perl_modules/perl-tk/PKGBUILD
new file mode 100644
index 0000000..7a16357
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-tk/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: Jason Chu <jchu@xentac.net>
+
+pkgname=perl-tk
+_realname=Tk
+#stable pkgver=804.027
+pkgver=804.028
+pkgrel=1
+pkgdesc="This module/script allows perl to interface with tk"
+license=('PerlArtistic' 'GPL' 'custom')
+arch=(i686 x86_64)
+depends=('libx11' 'libpng' 'libjpeg' 'tk' 'perl>=5.10.0')
+#
+# Using an "unauthorized" version because the official
+# release does not build under perl 5.10
+#source=(http://cpan.org/authors/id/N/NI/NI-S/${_realname}-${pkgver}.tar.gz)
+#
+source=(http://search.cpan.org/CPAN/authors/id/S/SR/SREZIC/${_realname}-${pkgver}.tar.gz)
+md5sums=('7153c1c411b0dd005a0660179e5c5900')
+url="http://search.cpan.org/dist/${_realname}/"
+options=(!emptydirs)
+replaces=('perltk')
+provides=('perltk')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ /bin/chmod -R u+w *
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+
+ # license
+ install -D -m644 pTk/license.terms \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/tk.license
+ install -D -m644 pTk/Tix.license \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/tix.license
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-unicode-string/PKGBUILD b/abs/core-testing/perl_modules/perl-unicode-string/PKGBUILD
new file mode 100644
index 0000000..06ebb3e
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-unicode-string/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-unicode-string
+_realname=Unicode-String
+pkgver=2.09
+pkgrel=3
+pkgdesc="String of Unicode characters for perl (UCS2/UTF16)"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('553e68e603723bf7c631f8701ab0d678')
+
+build() {
+ cd ${startdir}/src/${_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=${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-testing/perl_modules/perl-unicode-utf8simple/PKGBUILD b/abs/core-testing/perl_modules/perl-unicode-utf8simple/PKGBUILD
new file mode 100644
index 0000000..a5b9dfb
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-unicode-utf8simple/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-unicode-utf8simple
+pkgver=1.06
+pkgrel=2
+pkgdesc="Conversions to/from UTF8 from/to characterse"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~GUS/Unicode-UTF8simple"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/G/GU/GUS/Unicode-UTF8simple-$pkgver.tar.gz)
+md5sums=('1d90907170ed41690a572a2d6ed6e7da')
+
+build() {
+ cd $startdir/src/Unicode-UTF8simple-$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-testing/perl_modules/perl-uri/PKGBUILD b/abs/core-testing/perl_modules/perl-uri/PKGBUILD
new file mode 100644
index 0000000..ec8f2c5
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-uri/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-uri
+_realname=URI
+pkgver=1.35
+pkgrel=3
+pkgdesc="Perl Module: form Resource Identifiers (absolute and relative)"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-$pkgver.tar.gz)
+replaces=('uri')
+provides=('uri')
+md5sums=('1a933b1114c41a25587ee59ba8376f7c')
+
+build() {
+ cd $startdir/src/${_realname}-$pkgver
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core-testing/perl_modules/perl-www-mechanize/PKGBUILD b/abs/core-testing/perl_modules/perl-www-mechanize/PKGBUILD
new file mode 100644
index 0000000..9bbd409
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-www-mechanize/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD,v 1.11 2008/03/24 16:16:28 sergej Exp $
+# Maintainer: Sergej Pupykin <sergej@aur.archlinux.org>
+# Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-www-mechanize
+pkgver=1.34
+pkgrel=2
+pkgdesc="Automates web page form & link interaction"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PETDANCE/WWW-Mechanize"
+license=('GPL' 'PerlArtistic')
+depends=('perl-libwww' 'perl-html-parser' 'perl-uri')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PE/PETDANCE/WWW-Mechanize-$pkgver.tar.gz)
+md5sums=('77a5c025b9a722b62884b7740b8133f9')
+
+build() {
+ cd $startdir/src/WWW-Mechanize-$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-testing/perl_modules/perl-xml-libxml-common/ChangeLog b/abs/core-testing/perl_modules/perl-xml-libxml-common/ChangeLog
new file mode 100644
index 0000000..2f7b7c2
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-libxml-common/ChangeLog
@@ -0,0 +1,5 @@
+
+2007-12-29 Douglas Soares de Andrade <dsa@aur.archlinux.org>
+
+ * Fixed the package to build correctly in x86_64
+
diff --git a/abs/core-testing/perl_modules/perl-xml-libxml-common/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-libxml-common/PKGBUILD
new file mode 100644
index 0000000..3780531
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-libxml-common/PKGBUILD
@@ -0,0 +1,25 @@
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-libxml-common
+pkgver=0.13
+pkgrel=3
+pkgdesc="Routines and Constants common for XML::LibXML and XML::GDOME"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PHISH/XML-LibXML-Common"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'libxml2')
+provides=('perl-libxml-common')
+replaces=('perl-libxml-common')
+conflicts=('perl-libxml-common')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PH/PHISH/XML-LibXML-Common-$pkgver.tar.gz)
+md5sums=('13b6d93f53375d15fd11922216249659')
+
+build() {
+ cd $startdir/src/XML-LibXML-Common-$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-testing/perl_modules/perl-xml-libxml/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-libxml/PKGBUILD
new file mode 100644
index 0000000..0ed0971
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-libxml/PKGBUILD
@@ -0,0 +1,26 @@
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-libxml
+pkgver=1.66
+pkgrel=3
+pkgdesc="Interface to the libxml library"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PAJAS/XML-LibXML"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-xml-libxml-common>=0.13' 'perl-xml-sax>=0.11' 'perl-xml-namespacesupport>=1.07')
+provides=('perl-libxml')
+replaces=('perl-libxml')
+conflicts=('perl-libxml')
+install=('perl-xml-libxml.install')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PA/PAJAS/XML-LibXML-$pkgver.tar.gz)
+md5sums=('18e765429a4b22c8fb68b5273ead1e3c')
+
+build() {
+ cd $startdir/src/XML-LibXML-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make pure_install doc_install DESTDIR=$startdir/pkg || return 1
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core-testing/perl_modules/perl-xml-libxml/perl-xml-libxml.install b/abs/core-testing/perl_modules/perl-xml-libxml/perl-xml-libxml.install
new file mode 100644
index 0000000..6085ff0
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-libxml/perl-xml-libxml.install
@@ -0,0 +1,19 @@
+post_install() {
+ echo ":: Installing SAX XML Parsers"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX::Parser))->save_parsers()"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()"
+}
+
+post_upgrade() {
+ libxmlcount=`grep -c XML::LibXML::SAX /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini`
+ if [[ $libxmlcount == 0 ]]; then
+ echo ":: Installing SAX XML Parsers"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX::Parser))->save_parsers()"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()"
+ fi
+}
+
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/perl_modules/perl-xml-namespacesupport/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-namespacesupport/PKGBUILD
new file mode 100644
index 0000000..a0950d8
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-namespacesupport/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-namespacesupport
+pkgver=1.09
+pkgrel=3
+pkgdesc="Generic namespace helpers (ported from SAX2)"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~RBERJON/XML-NamespaceSupport"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/R/RB/RBERJON/XML-NamespaceSupport-$pkgver.tar.gz)
+md5sums=('b0867d7b599d8a63ba630fa6227936fe')
+
+build() {
+ cd $startdir/src/XML-NamespaceSupport-$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-testing/perl_modules/perl-xml-sax/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-sax/PKGBUILD
new file mode 100644
index 0000000..016fbef
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-sax/PKGBUILD
@@ -0,0 +1,26 @@
+# Maintainer: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-sax
+pkgver=0.16
+pkgrel=4
+pkgdesc="Simple API for XML "
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~GRANTM/XML-SAX"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-xml-namespacesupport>=0.03')
+options=('!emptydirs')
+install=(perl-xml-sax.install )
+source=("http://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-$pkgver.tar.gz" "perl-xml-sax.patch")
+md5sums=('4b07b6a9884f772ee07139b385661e9d'
+ '17a465d206f8ba43f34ca098d99f05fc')
+
+build() {
+ cd $startdir/src
+ patch -p0 < perl-xml-sax.patch || return 1
+ cd $startdir/src/XML-SAX-$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-testing/perl_modules/perl-xml-sax/perl-xml-sax.install b/abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.install
new file mode 100644
index 0000000..7b1e1f2
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.install
@@ -0,0 +1,15 @@
+post_install() {
+if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then
+ perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null
+fi
+}
+
+post_upgrade() {
+if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then
+ perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null
+fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.patch b/abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.patch
new file mode 100644
index 0000000..88e653d
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-sax/perl-xml-sax.patch
@@ -0,0 +1,45 @@
+--- XML-SAX-0.16/Makefile.PL.orig 2008-04-08 10:36:43.718155829 +0200
++++ XML-SAX-0.16/Makefile.PL 2008-04-08 10:37:17.347001804 +0200
+@@ -12,42 +12,3 @@
+ },
+ );
+
+-sub MY::install {
+- package MY;
+- my $script = shift->SUPER::install(@_);
+-
+- # Only modify existing ParserDetails.ini if user agrees
+-
+- my $write_ini_ok = 0;
+-
+- eval { require XML::SAX };
+- if ($@) {
+- $write_ini_ok = 1;
+- }
+- else {
+- my $dir = File::Basename::dirname($INC{'XML/SAX.pm'});
+- if (-e File::Spec->catfile($dir, 'SAX', 'ParserDetails.ini')) {
+- $write_ini_ok =
+- ExtUtils::MakeMaker::prompt(
+- "Do you want XML::SAX to alter ParserDetails.ini?", "Y"
+- ) =~ /^y/i;
+- }
+- else {
+- $write_ini_ok = 1;
+- }
+- }
+-
+- if ($write_ini_ok) {
+- $script =~ s/install :: (.*)$/install :: $1 install_sax_pureperl/m;
+- $script .= <<"INSTALL";
+-
+-install_sax_pureperl :
+-\t\@\$(PERL) -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()"
+-
+-INSTALL
+-
+- }
+-
+- return $script;
+-}
+-
diff --git a/abs/core-testing/perl_modules/perl-xml-simple/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-simple/PKGBUILD
new file mode 100644
index 0000000..98e3428
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-simple/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=perl-xml-simple
+_realname=XML-Simple
+pkgver=2.18
+pkgrel=2
+pkgdesc="Simple XML parser for perl"
+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/G/GR/GRANTM/${_realname}-${pkgver}.tar.gz)
+md5sums=('593aa8001e5c301cdcdb4bb3b63abc33')
+
+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-testing/perl_modules/perl-xml-twig/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-twig/PKGBUILD
new file mode 100644
index 0000000..b15b94b
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-twig/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+# Maintainer/Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-xml-twig
+_realname=XML-Twig
+pkgver=3.32
+pkgrel=2
+pkgdesc="A module for easy processing of XML"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/${_realname}/"
+license=('GPL' 'PerlArtistic')
+depends=('perlxml>=2.23' 'perl-text-iconv' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MI/MIROD/${_realname}-${pkgver}.tar.gz)
+md5sums=('9df9dcab00aa093c4e540caa5cb759fa')
+
+build() {
+ cd $startdir/src/${_realname}-${pkgver}
+ perl Makefile.PL -y INSTALLDIRS=vendor || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core-testing/perl_modules/perl-xml-writer/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-writer/PKGBUILD
new file mode 100644
index 0000000..2e4496a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-writer/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-writer
+pkgver=0.604
+pkgrel=1
+pkgdesc="Module for writing XML documents"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~JOSEPHW/XML-Writer"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-$pkgver.tar.gz)
+md5sums=('88cd8aec7da39028c2aaf809265a8d68')
+
+build() {
+ cd $startdir/src/XML-Writer-$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-testing/perlxml/PKGBUILD b/abs/core-testing/perlxml/PKGBUILD
new file mode 100644
index 0000000..c9b2f30
--- /dev/null
+++ b/abs/core-testing/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-testing/php/PKGBUILD b/abs/core-testing/php/PKGBUILD
new file mode 100644
index 0000000..68ece33
--- /dev/null
+++ b/abs/core-testing/php/PKGBUILD
@@ -0,0 +1,174 @@
+# $Id: PKGBUILD 4664 2008-07-08 13:58:05Z allan $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=php
+pkgver=5.2.6
+pkgrel=4
+_suhosinver=0.9.6.2
+pkgdesc='A high-level scripting language'
+arch=('i686' 'x86_64')
+license=('PHP')
+url='http://www.php.net'
+backup=('etc/php/php.ini')
+install=php.install
+depends=('glibc' 'readline' 'ncurses' 'libxml2' 'pcre')
+makedepends=('apache' 'imap' 'postgresql-libs' 'mysql' 'libldap' \
+ 'libpng' 'libjpeg' 'sqlite3' 'unixodbc' 'net-snmp' \
+ 'libmcrypt' 'tidyhtml' 'aspell' 'libtool' 'freetype2' 'libjpeg' \
+ 'curl' 'libxslt' 'pam' 'openssl' 'bzip2' 'gdbm' 'db>=4.7')
+optdepends=('bzip2: bz2' \
+ 'curl: curl' \
+ 'gdbm: dba' \
+ 'libpng: gd' \
+ 'libjpeg: gd' \
+ 'freetype2: gd' \
+ 'pam: imap' \
+ 'libldap: ldap' \
+ 'mcrypt: mcrypt' \
+ 'libtool: mcrypt' \
+ 'libmysqlclient: mysql/mysqli' \
+ 'unixodbc: odbc/pdo_odbc' \
+ 'openssl: openssl' \
+ 'postgresql-libs: pgsql/pdo_pgsql' \
+ 'aspell: pspell' \
+ 'net-snmp: snmp' \
+ 'sqlite3: sqlite' \
+ 'tidyhtml: tidy' \
+ 'libxslt: xsl' \
+ )
+options=('emptydirs')
+source=("http://www.php.net/distributions/${pkgname}-${pkgver}.tar.bz2" \
+ "http://download.suhosin.org/suhosin-patch-${pkgver}-${_suhosinver}.patch.gz" \
+ 'php.ini' 'apache.conf' 'db-configure.patch')
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+ 'f2ec986341a314c271259dbe4d940858'
+ '0ee1dad48f7d67af3d2c78ca6eed68ba'
+ '96ca078be6729b665be8a865535a97bf'
+ '74e5ce5a02488ec91b1c59f539e42936')
+
+build() {
+ phpconfig="--prefix=/usr \
+ --sysconfdir=/etc/php \
+ --with-layout=GNU \
+ --with-config-file-path=/etc/php \
+ --with-config-file-scan-dir=/etc/php/conf.d \
+ --enable-inline-optimization \
+ --disable-debug \
+ --disable-rpath \
+ --disable-static \
+ --enable-shared \
+ "
+
+ phpextensions="--with-openssl=shared \
+ --with-zlib=shared \
+ --enable-bcmath=shared \
+ --with-bz2=shared \
+ --enable-calendar=shared \
+ --with-curl=shared \
+ --enable-dba=shared \
+ --without-db2 \
+ --without-db3 \
+ --with-db4=shared \
+ --with-gdbm=shared \
+ --enable-dbase=shared \
+ --enable-exif=shared \
+ --enable-ftp=shared \
+ --with-gd=shared \
+ --enable-gd-native-ttf \
+ --with-jpeg-dir=shared,/usr \
+ --with-png-dir=shared,/usr \
+ --with-gettext=shared \
+ --with-imap=shared \
+ --with-imap-ssl=shared \
+ --with-ldap=shared \
+ --enable-mbstring=shared \
+ --with-mcrypt=shared \
+ --with-mysql=shared \
+ --with-mysql-sock=/tmp/mysql.sock \
+ --with-mysql=shared \
+ --with-mysqli=shared \
+ --with-ncurses=shared \
+ --with-unixODBC=shared,/usr \
+ --enable-pdo=shared \
+ --with-pdo-mysql=shared \
+ --with-pdo-sqlite=shared \
+ --with-pdo-odbc=shared,unixODBC,/usr \
+ --with-pdo-pgsql=shared \
+ --with-sqlite=shared \
+ --with-pgsql=shared \
+ --enable-shmop=shared \
+ --with-snmp=shared \
+ --enable-soap=shared \
+ --enable-sqlite-utf8=shared \
+ --enable-sysvmsg=shared \
+ --enable-sysvsem=shared \
+ --enable-sysvshm=shared \
+ --with-tidy=shared \
+ --with-xsl=shared \
+ --enable-zip=shared \
+ --enable-posix=shared \
+ --enable-sockets=shared \
+ --enable-xml \
+ --with-ttf=shared \
+ --enable-session=shared \
+ --with-regex=php \
+ --with-pcre-regex=/usr \
+ --enable-mbstring=all \
+ --enable-mbregex \
+ --enable-json=shared \
+ --with-iconv=shared \
+ --with-xmlrpc=shared \
+ --with-pspell=shared \
+ --with-freetype-dir=shared,/usr \
+ --with-mime-magic=shared \
+ "
+
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ # avoid linking against old db version
+ patch -p0 -i ${srcdir}/db-configure.patch || return 1
+
+ # apply suhosin patch
+ patch -p1 -i ${srcdir}/suhosin-patch-${pkgver}-${_suhosinver}.patch || return 1
+
+ # cli
+ ./configure ${phpconfig} \
+ --disable-cgi \
+ --with-readline \
+ --enable-pcntl \
+ --with-pear=/usr/share/pear \
+ ${phpextensions} || return 1
+ make || return 1
+ # make test
+ make INSTALL_ROOT=${pkgdir} install || return 1
+
+ # fix pear path
+ sed "s|$PWD||g" -i ${pkgdir}/usr/{bin/pear,share/pear/pearcmd.php}
+ # cleanup
+ rm -f ${pkgdir}`${pkgdir}/usr/bin/php-config --extension-dir`/*.a
+ rm -rf ${pkgdir}/{.registry,.channels,.depdb*,.lock,.filemap}
+ rmdir ${pkgdir}/usr/include/php/include
+ # install php.ini
+ install -D -m644 ${srcdir}/php.ini ${pkgdir}/etc/php/php.ini
+ install -d -m755 ${pkgdir}/etc/php/conf.d/
+
+ # cgi and fcgi
+ ./configure ${phpconfig} \
+ --enable-fastcgi \
+ --enable-cgi \
+ --enable-discard-path \
+ --enable-force-cgi-redirect \
+ --disable-cli \
+ ${phpextensions} || return 1
+ make || return 1
+ install -D -m755 sapi/cgi/php-cgi ${pkgdir}/usr/bin/php-cgi || return 1
+
+ # mod_php
+ ./configure ${phpconfig} \
+ --with-apxs2 \
+ --disable-cli \
+ ${phpextensions} || return 1
+ make || return 1
+ 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
+}
diff --git a/abs/core-testing/php/apache.conf b/abs/core-testing/php/apache.conf
new file mode 100644
index 0000000..86344c8
--- /dev/null
+++ b/abs/core-testing/php/apache.conf
@@ -0,0 +1,9 @@
+# Required modules: dir_module, php5_module
+
+<IfModule dir_module>
+ <IfModule php5_module>
+ DirectoryIndex index.php index.html
+ AddHandler application/x-httpd-php .php
+ AddHandler application/x-httpd-php-source .phps
+ </IfModule>
+</IfModule> \ No newline at end of file
diff --git a/abs/core-testing/php/db-configure.patch b/abs/core-testing/php/db-configure.patch
new file mode 100644
index 0000000..fdc82b9
--- /dev/null
+++ b/abs/core-testing/php/db-configure.patch
@@ -0,0 +1,51 @@
+--- configure.orig 2008-07-03 10:27:06.000000000 +0000
++++ configure 2008-07-03 10:30:56.000000000 +0000
+@@ -28399,43 +28399,15 @@
+
+ unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX THIS_RESULT
+
+- dbdp="/usr/local/BerkeleyDB.4."
+- for i in $PHP_DB4 ${dbdp}6 ${dbdp}5 ${dbdp}4 ${dbdp}3 ${dbdp}2 ${dbdp}1 ${dbdp}0 /usr/local /usr; do
+- if test -f "$i/db4/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/db4/db.h
+- break
+- elif test -f "$i/include/db4.6/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.6/db.h
+- break
+- elif test -f "$i/include/db4.5/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.5/db.h
+- break
+- elif test -f "$i/include/db4/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4/db.h
+- break
+- elif test -f "$i/include/db/db4.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db/db4.h
+- break
+- elif test -f "$i/include/db4.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.h
+- break
+- elif test -f "$i/include/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db.h
+- break
+- fi
+- done
++ if test -f "/usr/include/db.h"; then
++ THIS_PREFIX=/usr
++ THIS_INCLUDE=/usr/include/db.h
++ fi
+
+ if test -z "$THIS_INCLUDE"; then
+ { echo "configure: error: DBA: Could not find necessary header file(s)." 1>&2; exit 1; }
+ fi
+- for LIB in db-4.6 db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db; do
++ for LIB in db; do
+ if test -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.a || test -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.$SHLIB_SUFFIX_NAME; then
+ lib_found="";
+
diff --git a/abs/core-testing/php/php.ini b/abs/core-testing/php/php.ini
new file mode 100644
index 0000000..7f78d4a
--- /dev/null
+++ b/abs/core-testing/php/php.ini
@@ -0,0 +1,1304 @@
+[PHP]
+
+;;;;;;;;;;;;;;;;;;;
+; About php.ini ;
+;;;;;;;;;;;;;;;;;;;
+; This file controls many aspects of PHP's behavior. In order for PHP to
+; read it, it must be named 'php.ini'. PHP looks for it in the current
+; working directory, in the path designated by the environment variable
+; PHPRC, and in the path that was defined in compile time (in that order).
+; The path in which the php.ini file is looked for can be overridden using
+; the -c argument in command line mode.
+;
+; The syntax of the file is extremely simple. Whitespace and Lines
+; beginning with a semicolon are silently ignored (as you probably guessed).
+; Section headers (e.g. [Foo]) are also silently ignored, even though
+; they might mean something in the future.
+;
+; Directives are specified using the following syntax:
+; directive = value
+; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
+;
+; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
+; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
+; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
+;
+; Expressions in the INI file are limited to bitwise operators and parentheses:
+; | bitwise OR
+; & bitwise AND
+; ~ bitwise NOT
+; ! boolean NOT
+;
+; Boolean flags can be turned on using the values 1, On, True or Yes.
+; They can be turned off using the values 0, Off, False or No.
+;
+; An empty string can be denoted by simply not writing anything after the equal
+; sign, or by using the None keyword:
+;
+; foo = ; sets foo to an empty string
+; foo = none ; sets foo to an empty string
+; foo = "none" ; sets foo to the string 'none'
+;
+; If you use constants in your value, and these constants belong to a
+; dynamically loaded extension (either a PHP extension or a Zend extension),
+; you may only use these constants *after* the line that loads the extension.
+;
+;
+;;;;;;;;;;;;;;;;;;;
+; About this file ;
+;;;;;;;;;;;;;;;;;;;
+; This is the recommended, PHP 5-style version of the php.ini-dist file. It
+; sets some non standard settings, that make PHP more efficient, more secure,
+; and encourage cleaner coding.
+;
+; The price is that with these settings, PHP may be incompatible with some
+; applications, and sometimes, more difficult to develop with. Using this
+; file is warmly recommended for production sites. As all of the changes from
+; the standard settings are thoroughly documented, you can go over each one,
+; and decide whether you want to use it or not.
+;
+; For general information about the php.ini file, please consult the php.ini-dist
+; file, included in your PHP distribution.
+;
+; This file is different from the php.ini-dist file in the fact that it features
+; different values for several directives, in order to improve performance, while
+; possibly breaking compatibility with the standard out-of-the-box behavior of
+; PHP. Please make sure you read what's different, and modify your scripts
+; accordingly, if you decide to use this file instead.
+;
+; - register_long_arrays = Off [Performance]
+; Disables registration of the older (and deprecated) long predefined array
+; variables ($HTTP_*_VARS). Instead, use the superglobals that were
+; introduced in PHP 4.1.0
+; - display_errors = Off [Security]
+; With this directive set to off, errors that occur during the execution of
+; scripts will no longer be displayed as a part of the script output, and thus,
+; will no longer be exposed to remote users. With some errors, the error message
+; content may expose information about your script, web server, or database
+; server that may be exploitable for hacking. Production sites should have this
+; directive set to off.
+; - log_errors = On [Security]
+; This directive complements the above one. Any errors that occur during the
+; execution of your script will be logged (typically, to your server's error log,
+; but can be configured in several ways). Along with setting display_errors to off,
+; this setup gives you the ability to fully understand what may have gone wrong,
+; without exposing any sensitive information to remote users.
+; - output_buffering = 4096 [Performance]
+; Set a 4KB output buffer. Enabling output buffering typically results in less
+; writes, and sometimes less packets sent on the wire, which can often lead to
+; better performance. The gain this directive actually yields greatly depends
+; on which Web server you're working with, and what kind of scripts you're using.
+; - register_argc_argv = Off [Performance]
+; Disables registration of the somewhat redundant $argv and $argc global
+; variables.
+; - magic_quotes_gpc = Off [Performance]
+; Input data is no longer escaped with slashes so that it can be sent into
+; SQL databases without further manipulation. Instead, you should use the
+; function addslashes() on each input element you wish to send to a database.
+; - variables_order = "GPCS" [Performance]
+; The environment variables are not hashed into the $_ENV. To access
+; environment variables, you can use getenv() instead.
+; - error_reporting = E_ALL [Code Cleanliness, Security(?)]
+; By default, PHP suppresses errors of type E_NOTICE. These error messages
+; are emitted for non-critical errors, but that could be a symptom of a bigger
+; problem. Most notably, this will cause error messages about the use
+; of uninitialized variables to be displayed.
+; - allow_call_time_pass_reference = Off [Code cleanliness]
+; It's not possible to decide to force a variable to be passed by reference
+; when calling a function. The PHP 4 style to do this is by making the
+; function require the relevant argument by reference.
+; - short_open_tag = Off [Portability]
+; Using short tags is discouraged when developing code meant for redistribution
+; since short tags may not be supported on the target server.
+
+;;;;;;;;;;;;;;;;;;;;
+; Language Options ;
+;;;;;;;;;;;;;;;;;;;;
+
+; Enable the PHP scripting language engine under Apache.
+engine = On
+
+; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
+zend.ze1_compatibility_mode = Off
+
+; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
+; NOTE: Using short tags should be avoided when developing applications or
+; libraries that are meant for redistribution, or deployment on PHP
+; servers which are not under your control, because short tags may not
+; be supported on the target server. For portable, redistributable code,
+; be sure not to use short tags.
+short_open_tag = Off
+
+; Allow ASP-style <% %> tags.
+asp_tags = Off
+
+; The number of significant digits displayed in floating point numbers.
+precision = 14
+
+; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
+y2k_compliance = On
+
+; Output buffering allows you to send header lines (including cookies) even
+; after you send body content, at the price of slowing PHP's output layer a
+; bit. You can enable output buffering during runtime by calling the output
+; buffering functions. You can also enable output buffering for all files by
+; setting this directive to On. If you wish to limit the size of the buffer
+; to a certain size - you can use a maximum number of bytes instead of 'On', as
+; a value for this directive (e.g., output_buffering=4096).
+output_buffering = 4096
+
+; You can redirect all of the output of your scripts to a function. For
+; example, if you set output_handler to "mb_output_handler", character
+; encoding will be transparently converted to the specified encoding.
+; Setting any output handler automatically turns on output buffering.
+; Note: People who wrote portable scripts should not depend on this ini
+; directive. Instead, explicitly set the output handler using ob_start().
+; Using this ini directive may cause problems unless you know what script
+; is doing.
+; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
+; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
+; Note: output_handler must be empty if this is set 'On' !!!!
+; Instead you must use zlib.output_handler.
+;output_handler =
+
+; Transparent output compression using the zlib library
+; Valid values for this option are 'off', 'on', or a specific buffer size
+; to be used for compression (default is 4KB)
+; Note: Resulting chunk size may vary due to nature of compression. PHP
+; outputs chunks that are few hundreds bytes each as a result of
+; compression. If you prefer a larger chunk size for better
+; performance, enable output_buffering in addition.
+; Note: You need to use zlib.output_handler instead of the standard
+; output_handler, or otherwise the output will be corrupted.
+zlib.output_compression = Off
+;zlib.output_compression_level = -1
+
+; You cannot specify additional output handlers if zlib.output_compression
+; is activated here. This setting does the same as output_handler but in
+; a different order.
+;zlib.output_handler =
+
+; Implicit flush tells PHP to tell the output layer to flush itself
+; automatically after every output block. This is equivalent to calling the
+; PHP function flush() after each and every call to print() or echo() and each
+; and every HTML block. Turning this option on has serious performance
+; implications and is generally recommended for debugging purposes only.
+implicit_flush = Off
+
+; The unserialize callback function will be called (with the undefined class'
+; name as parameter), if the unserializer finds an undefined class
+; which should be instantiated.
+; A warning appears if the specified function is not defined, or if the
+; function doesn't include/implement the missing class.
+; So only set this entry, if you really want to implement such a
+; callback-function.
+unserialize_callback_func=
+
+; When floats & doubles are serialized store serialize_precision significant
+; digits after the floating point. The default value ensures that when floats
+; are decoded with unserialize, the data will remain the same.
+serialize_precision = 100
+
+; Whether to enable the ability to force arguments to be passed by reference
+; at function call time. This method is deprecated and is likely to be
+; unsupported in future versions of PHP/Zend. The encouraged method of
+; specifying which arguments should be passed by reference is in the function
+; declaration. You're encouraged to try and turn this option Off and make
+; sure your scripts work properly with it in order to ensure they will work
+; with future versions of the language (you will receive a warning each time
+; you use this feature, and the argument will be passed by value instead of by
+; reference).
+allow_call_time_pass_reference = Off
+
+;
+; Safe Mode
+;
+safe_mode = Off
+
+; By default, Safe Mode does a UID compare check when
+; opening files. If you want to relax this to a GID compare,
+; then turn on safe_mode_gid.
+safe_mode_gid = Off
+
+; When safe_mode is on, UID/GID checks are bypassed when
+; including files from this directory and its subdirectories.
+; (directory must also be in include_path or full path must
+; be used when including)
+safe_mode_include_dir =
+
+; When safe_mode is on, only executables located in the safe_mode_exec_dir
+; will be allowed to be executed via the exec family of functions.
+safe_mode_exec_dir =
+
+; Setting certain environment variables may be a potential security breach.
+; This directive contains a comma-delimited list of prefixes. In Safe Mode,
+; the user may only alter environment variables whose names begin with the
+; prefixes supplied here. By default, users will only be able to set
+; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
+;
+; Note: If this directive is empty, PHP will let the user modify ANY
+; environment variable!
+safe_mode_allowed_env_vars = PHP_
+
+; This directive contains a comma-delimited list of environment variables that
+; the end user won't be able to change using putenv(). These variables will be
+; protected even if safe_mode_allowed_env_vars is set to allow to change them.
+safe_mode_protected_env_vars = LD_LIBRARY_PATH
+
+; open_basedir, if set, limits all file operations to the defined directory
+; 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 = /srv/http/:/home/:/tmp/:/usr/share/pear/
+
+; This directive allows you to disable certain functions for security reasons.
+; It receives a comma-delimited list of function names. This directive is
+; *NOT* affected by whether Safe Mode is turned On or Off.
+disable_functions =
+
+; This directive allows you to disable certain classes for security reasons.
+; It receives a comma-delimited list of class names. This directive is
+; *NOT* affected by whether Safe Mode is turned On or Off.
+disable_classes =
+
+; Colors for Syntax Highlighting mode. Anything that's acceptable in
+; <span style="color: ???????"> would work.
+;highlight.string = #DD0000
+;highlight.comment = #FF9900
+;highlight.keyword = #007700
+;highlight.bg = #FFFFFF
+;highlight.default = #0000BB
+;highlight.html = #000000
+
+; If enabled, the request will be allowed to complete even if the user aborts
+; the request. Consider enabling it if executing long request, which may end up
+; being interrupted by the user or a browser timing out.
+; ignore_user_abort = On
+
+; Determines the size of the realpath cache to be used by PHP. This value should
+; be increased on systems where PHP opens many files to reflect the quantity of
+; the file operations performed.
+; realpath_cache_size=16k
+
+; Duration of time, in seconds for which to cache realpath information for a given
+; file or directory. For systems with rarely changing files, consider increasing this
+; value.
+; realpath_cache_ttl=120
+
+;
+; Misc
+;
+; Decides whether PHP may expose the fact that it is installed on the server
+; (e.g. by adding its signature to the Web server header). It is no security
+; threat in any way, but it makes it possible to determine whether you use PHP
+; on your server or not.
+expose_php = Off
+
+
+;;;;;;;;;;;;;;;;;;;
+; Resource Limits ;
+;;;;;;;;;;;;;;;;;;;
+
+max_execution_time = 30 ; Maximum execution time of each script, in seconds
+max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
+;max_input_nesting_level = 64 ; Maximum input variable nesting level
+memory_limit = 32M ; Maximum amount of memory a script may consume (32MB)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Error handling and logging ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; error_reporting is a bit-field. Or each number up to get desired error
+; reporting level
+; E_ALL - All errors and warnings (doesn't include E_STRICT)
+; E_ERROR - fatal run-time errors
+; E_RECOVERABLE_ERROR - almost fatal run-time errors
+; E_WARNING - run-time warnings (non-fatal errors)
+; E_PARSE - compile-time parse errors
+; E_NOTICE - run-time notices (these are warnings which often result
+; from a bug in your code, but it's possible that it was
+; intentional (e.g., using an uninitialized variable and
+; relying on the fact it's automatically initialized to an
+; empty string)
+; E_STRICT - run-time notices, enable to have PHP suggest changes
+; to your code which will ensure the best interoperability
+; and forward compatibility of your code
+; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
+; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
+; initial startup
+; E_COMPILE_ERROR - fatal compile-time errors
+; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
+; E_USER_ERROR - user-generated error message
+; E_USER_WARNING - user-generated warning message
+; E_USER_NOTICE - user-generated notice message
+;
+; Examples:
+;
+; - Show all errors, except for notices and coding standards warnings
+;
+;error_reporting = E_ALL & ~E_NOTICE
+;
+; - Show all errors, except for notices
+;
+;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+;
+; - Show only errors
+;
+;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
+;
+; - Show all errors, except coding standards warnings
+;
+error_reporting = E_ALL
+
+; Print out errors (as a part of the output). For production web sites,
+; you're strongly encouraged to turn this feature off, and use error logging
+; instead (see below). Keeping display_errors enabled on a production web site
+; may reveal security information to end users, such as file paths on your Web
+; server, your database schema or other information.
+;
+; possible values for display_errors:
+;
+; Off - Do not display any errors
+; stderr - Display errors to STDERR (affects only CGI/CLI binaries!)
+; On or stdout - Display errors to STDOUT (default)
+;
+; To output errors to STDERR with CGI/CLI:
+;display_errors = "stderr"
+;
+; Default
+;
+display_errors = Off
+
+; Even when display_errors is on, errors that occur during PHP's startup
+; sequence are not displayed. It's strongly recommended to keep
+; display_startup_errors off, except for when debugging.
+display_startup_errors = Off
+
+; Log errors into a log file (server-specific log, stderr, or error_log (below))
+; As stated above, you're strongly advised to use error logging in place of
+; error displaying on production web sites.
+log_errors = On
+
+; Set maximum length of log_errors. In error_log information about the source is
+; added. The default is 1024 and 0 allows to not apply any maximum length at all.
+log_errors_max_len = 1024
+
+; Do not log repeated messages. Repeated errors must occur in same file on same
+; line until ignore_repeated_source is set true.
+ignore_repeated_errors = Off
+
+; Ignore source of message when ignoring repeated messages. When this setting
+; is On you will not log errors with repeated messages from different files or
+; source lines.
+ignore_repeated_source = Off
+
+; If this parameter is set to Off, then memory leaks will not be shown (on
+; stdout or in the log). This has only effect in a debug compile, and if
+; error reporting includes E_WARNING in the allowed list
+report_memleaks = Off
+
+;report_zend_debug = 0
+
+; Store the last error/warning message in $php_errormsg (boolean).
+track_errors = Off
+
+; Disable the inclusion of HTML tags in error messages.
+; Note: Never use this feature for production boxes.
+;html_errors = Off
+
+; If html_errors is set On PHP produces clickable error messages that direct
+; to a page describing the error or function causing the error in detail.
+; You can download a copy of the PHP manual from http://www.php.net/docs.php
+; and change docref_root to the base URL of your local copy including the
+; leading '/'. You must also specify the file extension being used including
+; the dot.
+; Note: Never use this feature for production boxes.
+;docref_root = "/phpmanual/"
+;docref_ext = .html
+
+; String to output before an error message.
+;error_prepend_string = "<font color=ff0000>"
+
+; String to output after an error message.
+;error_append_string = "</font>"
+
+; Log errors to specified file.
+;error_log = filename
+
+; Log errors to syslog.
+error_log = syslog
+
+
+;;;;;;;;;;;;;;;;;
+; Data Handling ;
+;;;;;;;;;;;;;;;;;
+;
+; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
+
+; The separator used in PHP generated URLs to separate arguments.
+; Default is "&".
+;arg_separator.output = "&amp;"
+
+; List of separator(s) used by PHP to parse input URLs into variables.
+; Default is "&".
+; NOTE: Every character in this directive is considered as separator!
+;arg_separator.input = ";&"
+
+; This directive describes the order in which PHP registers GET, POST, Cookie,
+; Environment and Built-in variables (G, P, C, E & S respectively, often
+; referred to as EGPCS or GPC). Registration is done from left to right, newer
+; values override older values.
+variables_order = "GPCS"
+
+; Whether or not to register the EGPCS variables as global variables. You may
+; want to turn this off if you don't want to clutter your scripts' global scope
+; with user data. This makes most sense when coupled with track_vars - in which
+; case you can access all of the GPC variables through the $HTTP_*_VARS[],
+; variables.
+;
+; You should do your best to write your scripts so that they do not require
+; register_globals to be on; Using form variables as globals can easily lead
+; to possible security problems, if the code is not very well thought of.
+register_globals = Off
+
+; Whether or not to register the old-style input arrays, HTTP_GET_VARS
+; and friends. If you're not using them, it's recommended to turn them off,
+; for performance reasons.
+register_long_arrays = Off
+
+; This directive tells PHP whether to declare the argv&argc variables (that
+; would contain the GET information). If you don't use these variables, you
+; should turn it off for increased performance.
+register_argc_argv = Off
+
+; When enabled, the SERVER and ENV variables are created when they're first
+; used (Just In Time) instead of when the script starts. If these variables
+; are not used within a script, having this directive on will result in a
+; performance gain. The PHP directives register_globals, register_long_arrays,
+; and register_argc_argv must be disabled for this directive to have any affect.
+auto_globals_jit = On
+
+; Maximum size of POST data that PHP will accept.
+post_max_size = 8M
+
+; Magic quotes
+;
+
+; Magic quotes for incoming GET/POST/Cookie data.
+magic_quotes_gpc = Off
+
+; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
+magic_quotes_runtime = Off
+
+; Use Sybase-style magic quotes (escape ' with '' instead of \').
+magic_quotes_sybase = Off
+
+; Automatically add files before or after any PHP document.
+auto_prepend_file =
+auto_append_file =
+
+; As of 4.0b4, PHP always outputs a character encoding by default in
+; the Content-type: header. To disable sending of the charset, simply
+; set it to be empty.
+;
+; PHP's built-in default is text/html
+default_mimetype = "text/html"
+;default_charset = "iso-8859-1"
+
+; Always populate the $HTTP_RAW_POST_DATA variable.
+;always_populate_raw_post_data = On
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;
+; Paths and Directories ;
+;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; UNIX: "/path1:/path2"
+include_path = ".:/usr/share/pear"
+
+; The root of the PHP pages, used only if nonempty.
+; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
+; if you are running php as a CGI under any web server (other than IIS)
+; see documentation for security issues. The alternate is to use the
+; cgi.force_redirect configuration below
+doc_root =
+
+; The directory under which PHP opens the script using /~username used only
+; if nonempty.
+user_dir =
+
+; Directory in which the loadable extensions (modules) reside.
+extension_dir = "/usr/lib/php/20060613/"
+
+; Whether or not to enable the dl() function. The dl() function does NOT work
+; properly in multithreaded servers, such as IIS or Zeus, and is automatically
+; disabled on them.
+enable_dl = Off
+
+; cgi.force_redirect is necessary to provide security running PHP as a CGI under
+; most web servers. Left undefined, PHP turns this on by default. You can
+; turn it off here AT YOUR OWN RISK
+; **You CAN safely turn this off for IIS, in fact, you MUST.**
+; cgi.force_redirect = 1
+
+; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
+; every request.
+; cgi.nph = 1
+
+; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
+; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
+; will look for to know it is OK to continue execution. Setting this variable MAY
+; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
+; cgi.redirect_status_env = ;
+
+; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
+; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
+; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
+; this to 1 will cause PHP CGI to fix it's paths to conform to the spec. A setting
+; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
+; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
+; cgi.fix_pathinfo=1
+
+; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
+; security tokens of the calling client. This allows IIS to define the
+; security context that the request runs under. mod_fastcgi under Apache
+; does not currently support this feature (03/17/2002)
+; Set to 1 if running under IIS. Default is zero.
+; fastcgi.impersonate = 1;
+
+; Disable logging through FastCGI connection
+; fastcgi.logging = 0
+
+; cgi.rfc2616_headers configuration option tells PHP what type of headers to
+; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
+; is supported by Apache. When this option is set to 1 PHP will send
+; RFC2616 compliant header.
+; Default is zero.
+;cgi.rfc2616_headers = 0
+
+
+;;;;;;;;;;;;;;;;
+; File Uploads ;
+;;;;;;;;;;;;;;;;
+
+; Whether to allow HTTP file uploads.
+file_uploads = On
+
+; Temporary directory for HTTP uploaded files (will use system default if not
+; specified).
+;upload_tmp_dir =
+
+; Maximum allowed size for uploaded files.
+upload_max_filesize = 2M
+
+
+;;;;;;;;;;;;;;;;;;
+; Fopen wrappers ;
+;;;;;;;;;;;;;;;;;;
+
+; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
+allow_url_fopen = Off
+
+; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
+allow_url_include = Off
+
+; Define the anonymous ftp password (your email address)
+;from="john@doe.com"
+
+; Define the User-Agent string
+; user_agent="PHP"
+
+; Default timeout for socket based streams (seconds)
+default_socket_timeout = 60
+
+;;;;;;;;;;;;;;;;;;;;;;
+; Dynamic Extensions ;
+;;;;;;;;;;;;;;;;;;;;;;
+;
+; If you wish to have an extension loaded automatically, use the following
+; syntax:
+;
+; extension=modulename.extension
+;
+; For example, under UNIX:
+;
+; extension=msql.so
+;
+; Note that it should be the name of the module only; no directory information
+; needs to go here. Specify the location of the extension with the
+; extension_dir directive above.
+
+;;;;;;;;;;;;;;;;;;;
+; Module Settings ;
+;;;;;;;;;;;;;;;;;;;
+
+[Date]
+; Defines the default timezone used by the date functions
+;date.timezone =
+
+;date.default_latitude = 31.7667
+;date.default_longitude = 35.2333
+
+;date.sunrise_zenith = 90.583333
+;date.sunset_zenith = 90.583333
+
+[filter]
+;filter.default = unsafe_raw
+;filter.default_flags =
+
+[iconv]
+;iconv.input_encoding = ISO-8859-1
+;iconv.internal_encoding = ISO-8859-1
+;iconv.output_encoding = ISO-8859-1
+
+[sqlite]
+;sqlite.assoc_case = 0
+
+[xmlrpc]
+;xmlrpc_error_number = 0
+;xmlrpc_errors = 0
+
+[Pcre]
+;PCRE library backtracking limit.
+;pcre.backtrack_limit=100000
+
+;PCRE library recursion limit.
+;Please note that if you set this value to a high number you may consume all
+;the available process stack and eventually crash PHP (due to reaching the
+;stack size limit imposed by the Operating System).
+;pcre.recursion_limit=100000
+
+[Syslog]
+; Whether or not to define the various syslog variables (e.g. $LOG_PID,
+; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In
+; runtime, you can define these variables by calling define_syslog_variables().
+define_syslog_variables = Off
+
+[mail function]
+; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
+;sendmail_path =
+
+; Force the addition of the specified parameters to be passed as extra parameters
+; to the sendmail binary. These parameters will always replace the value of
+; the 5th parameter to mail(), even in safe mode.
+;mail.force_extra_parameters =
+
+[SQL]
+sql.safe_mode = Off
+
+[ODBC]
+;odbc.default_db = Not yet implemented
+;odbc.default_user = Not yet implemented
+;odbc.default_pw = Not yet implemented
+
+; Allow or prevent persistent links.
+odbc.allow_persistent = On
+
+; Check that a connection is still valid before reuse.
+odbc.check_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+odbc.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+odbc.max_links = -1
+
+; Handling of LONG fields. Returns number of bytes to variables. 0 means
+; passthru.
+odbc.defaultlrl = 4096
+
+; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char.
+; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
+; of uodbc.defaultlrl and uodbc.defaultbinmode
+odbc.defaultbinmode = 1
+
+[MySQL]
+; Allow or prevent persistent links.
+mysql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+mysql.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+mysql.max_links = -1
+
+; Default port number for mysql_connect(). If unset, mysql_connect() will use
+; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
+; compile-time value defined MYSQL_PORT (in that order).
+mysql.default_port =
+
+; Default socket name for local MySQL connects. If empty, uses the built-in
+; MySQL defaults.
+mysql.default_socket =
+
+; Default host for mysql_connect() (doesn't apply in safe mode).
+mysql.default_host =
+
+; Default user for mysql_connect() (doesn't apply in safe mode).
+mysql.default_user =
+
+; Default password for mysql_connect() (doesn't apply in safe mode).
+; Note that this is generally a *bad* idea to store passwords in this file.
+; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
+; and reveal this password! And of course, any users with read access to this
+; file will be able to reveal the password as well.
+mysql.default_password =
+
+; Maximum time (in seconds) for connect timeout. -1 means no limit
+mysql.connect_timeout = 60
+
+; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
+; SQL-Errors will be displayed.
+mysql.trace_mode = Off
+
+[MySQLi]
+
+; Maximum number of links. -1 means no limit.
+mysqli.max_links = -1
+
+; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
+; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
+; compile-time value defined MYSQL_PORT (in that order).
+mysqli.default_port = 3306
+
+; Default socket name for local MySQL connects. If empty, uses the built-in
+; MySQL defaults.
+mysqli.default_socket =
+
+; Default host for mysql_connect() (doesn't apply in safe mode).
+mysqli.default_host =
+
+; Default user for mysql_connect() (doesn't apply in safe mode).
+mysqli.default_user =
+
+; Default password for mysqli_connect() (doesn't apply in safe mode).
+; Note that this is generally a *bad* idea to store passwords in this file.
+; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
+; and reveal this password! And of course, any users with read access to this
+; file will be able to reveal the password as well.
+mysqli.default_pw =
+
+; Allow or prevent reconnect
+mysqli.reconnect = Off
+
+[mSQL]
+; Allow or prevent persistent links.
+msql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+msql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+msql.max_links = -1
+
+[OCI8]
+; enables privileged connections using external credentials (OCI_SYSOPER, OCI_SYSDBA)
+;oci8.privileged_connect = Off
+
+; Connection: The maximum number of persistent OCI8 connections per
+; process. Using -1 means no limit.
+;oci8.max_persistent = -1
+
+; Connection: The maximum number of seconds a process is allowed to
+; maintain an idle persistent connection. Using -1 means idle
+; persistent connections will be maintained forever.
+;oci8.persistent_timeout = -1
+
+; Connection: The number of seconds that must pass before issuing a
+; ping during oci_pconnect() to check the connection validity. When
+; set to 0, each oci_pconnect() will cause a ping. Using -1 disables
+; pings completely.
+;oci8.ping_interval = 60
+
+; Tuning: This option enables statement caching, and specifies how
+; many statements to cache. Using 0 disables statement caching.
+;oci8.statement_cache_size = 20
+
+; Tuning: Enables statement prefetching and sets the default number of
+; rows that will be fetched automatically after statement execution.
+;oci8.default_prefetch = 10
+
+; Compatibility. Using On means oci_close() will not close
+; oci_connect() and oci_new_connect() connections.
+;oci8.old_oci_close_semantics = Off
+
+[PostgresSQL]
+; Allow or prevent persistent links.
+pgsql.allow_persistent = On
+
+; Detect broken persistent links always with pg_pconnect().
+; Auto reset feature requires a little overheads.
+pgsql.auto_reset_persistent = Off
+
+; Maximum number of persistent links. -1 means no limit.
+pgsql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+pgsql.max_links = -1
+
+; Ignore PostgreSQL backends Notice message or not.
+; Notice message logging require a little overheads.
+pgsql.ignore_notice = 0
+
+; Log PostgreSQL backends Noitce message or not.
+; Unless pgsql.ignore_notice=0, module cannot log notice message.
+pgsql.log_notice = 0
+
+[Sybase]
+; Allow or prevent persistent links.
+sybase.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+sybase.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+sybase.max_links = -1
+
+;sybase.interface_file = "/usr/sybase/interfaces"
+
+; Minimum error severity to display.
+sybase.min_error_severity = 10
+
+; Minimum message severity to display.
+sybase.min_message_severity = 10
+
+; Compatibility mode with old versions of PHP 3.0.
+; If on, this will cause PHP to automatically assign types to results according
+; to their Sybase type, instead of treating them all as strings. This
+; compatibility mode will probably not stay around forever, so try applying
+; whatever necessary changes to your code, and turn it off.
+sybase.compatability_mode = Off
+
+[Sybase-CT]
+; Allow or prevent persistent links.
+sybct.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+sybct.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+sybct.max_links = -1
+
+; Minimum server message severity to display.
+sybct.min_server_severity = 10
+
+; Minimum client message severity to display.
+sybct.min_client_severity = 10
+
+[bcmath]
+; Number of decimal digits for all bcmath functions.
+bcmath.scale = 0
+
+[browscap]
+;browscap = extra/browscap.ini
+
+[Informix]
+; Default host for ifx_connect() (doesn't apply in safe mode).
+ifx.default_host =
+
+; Default user for ifx_connect() (doesn't apply in safe mode).
+ifx.default_user =
+
+; Default password for ifx_connect() (doesn't apply in safe mode).
+ifx.default_password =
+
+; Allow or prevent persistent links.
+ifx.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+ifx.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+ifx.max_links = -1
+
+; If on, select statements return the contents of a text blob instead of its id.
+ifx.textasvarchar = 0
+
+; If on, select statements return the contents of a byte blob instead of its id.
+ifx.byteasvarchar = 0
+
+; Trailing blanks are stripped from fixed-length char columns. May help the
+; life of Informix SE users.
+ifx.charasvarchar = 0
+
+; If on, the contents of text and byte blobs are dumped to a file instead of
+; keeping them in memory.
+ifx.blobinfile = 0
+
+; NULL's are returned as empty strings, unless this is set to 1. In that case,
+; NULL's are returned as string 'NULL'.
+ifx.nullformat = 0
+
+[Session]
+; Handler used to store/retrieve data.
+session.save_handler = files
+
+; Argument passed to save_handler. In the case of files, this is the path
+; where data files are stored.
+;
+; As of PHP 4.0.1, you can define the path as:
+;
+; session.save_path = "N;/path"
+;
+; where N is an integer. Instead of storing all the session files in
+; /path, what this will do is use subdirectories N-levels deep, and
+; store the session data in those directories. This is useful if you
+; or your OS have problems with lots of files in one directory, and is
+; a more efficient layout for servers that handle lots of sessions.
+;
+; NOTE 1: PHP will not create this directory structure automatically.
+; You can use the script in the ext/session dir for that purpose.
+; NOTE 2: See the section on garbage collection below if you choose to
+; use subdirectories for session storage
+;
+; The file storage module creates files using mode 600 by default.
+; You can change that by using
+;
+; session.save_path = "N;MODE;/path"
+;
+; where MODE is the octal representation of the mode. Note that this
+; does not overwrite the process's umask.
+session.save_path = "/tmp"
+
+; Whether to use cookies.
+session.use_cookies = 1
+
+;session.cookie_secure =
+
+; This option enables administrators to make their users invulnerable to
+; attacks which involve passing session ids in URLs; defaults to 0.
+; session.use_only_cookies = 1
+
+; Name of the session (used as cookie name).
+session.name = PHPSESSID
+
+; Initialize session on request startup.
+session.auto_start = 0
+
+; Lifetime in seconds of cookie or, if 0, until browser is restarted.
+session.cookie_lifetime = 0
+
+; The path for which the cookie is valid.
+session.cookie_path = /
+
+; The domain for which the cookie is valid.
+session.cookie_domain =
+
+; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
+session.cookie_httponly =
+
+; Handler used to serialize data. php is the standard serializer of PHP.
+session.serialize_handler = php
+
+; Define the probability that the 'garbage collection' process is started
+; on every session initialization.
+; The probability is calculated by using gc_probability/gc_divisor,
+; e.g. 1/100 means there is a 1% chance that the GC process starts
+; on each request.
+
+session.gc_probability = 1
+session.gc_divisor = 1000
+
+; After this number of seconds, stored data will be seen as 'garbage' and
+; cleaned up by the garbage collection process.
+session.gc_maxlifetime = 1440
+
+; NOTE: If you are using the subdirectory option for storing session files
+; (see session.save_path above), then garbage collection does *not*
+; happen automatically. You will need to do your own garbage
+; collection through a shell script, cron entry, or some other method.
+; For example, the following script would is the equivalent of
+; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
+; cd /path/to/sessions; find -cmin +24 | xargs rm
+
+; PHP 4.2 and less have an undocumented feature/bug that allows you to
+; to initialize a session variable in the global scope, albeit register_globals
+; is disabled. PHP 4.3 and later will warn you, if this feature is used.
+; You can disable the feature and the warning separately. At this time,
+; the warning is only displayed, if bug_compat_42 is enabled.
+
+session.bug_compat_42 = 0
+session.bug_compat_warn = 1
+
+; Check HTTP Referer to invalidate externally stored URLs containing ids.
+; HTTP_REFERER has to contain this substring for the session to be
+; considered as valid.
+session.referer_check =
+
+; How many bytes to read from the file.
+session.entropy_length = 0
+
+; Specified here to create the session id.
+session.entropy_file =
+
+;session.entropy_length = 16
+
+;session.entropy_file = /dev/urandom
+
+; Set to {nocache,private,public,} to determine HTTP caching aspects
+; or leave this empty to avoid sending anti-caching headers.
+session.cache_limiter = nocache
+
+; Document expires after n minutes.
+session.cache_expire = 180
+
+; trans sid support is disabled by default.
+; Use of trans sid may risk your users security.
+; Use this option with caution.
+; - User may send URL contains active session ID
+; to other person via. email/irc/etc.
+; - URL that contains active session ID may be stored
+; in publically accessible computer.
+; - User may access your site with the same session ID
+; always using URL stored in browser's history or bookmarks.
+session.use_trans_sid = 0
+
+; Select a hash function
+; 0: MD5 (128 bits)
+; 1: SHA-1 (160 bits)
+session.hash_function = 0
+
+; Define how many bits are stored in each character when converting
+; the binary hash data to something readable.
+;
+; 4 bits: 0-9, a-f
+; 5 bits: 0-9, a-v
+; 6 bits: 0-9, a-z, A-Z, "-", ","
+session.hash_bits_per_character = 5
+
+; The URL rewriter will look for URLs in a defined set of HTML tags.
+; form/fieldset are special; if you include them here, the rewriter will
+; add a hidden <input> field with the info which is otherwise appended
+; to URLs. If you want XHTML conformity, remove the form entry.
+; Note that all valid entries require a "=", even if no value follows.
+url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
+
+[MSSQL]
+; Allow or prevent persistent links.
+mssql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+mssql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+mssql.max_links = -1
+
+; Minimum error severity to display.
+mssql.min_error_severity = 10
+
+; Minimum message severity to display.
+mssql.min_message_severity = 10
+
+; Compatibility mode with old versions of PHP 3.0.
+mssql.compatability_mode = Off
+
+; Connect timeout
+;mssql.connect_timeout = 5
+
+; Query timeout
+;mssql.timeout = 60
+
+; Valid range 0 - 2147483647. Default = 4096.
+;mssql.textlimit = 4096
+
+; Valid range 0 - 2147483647. Default = 4096.
+;mssql.textsize = 4096
+
+; Limits the number of records in each batch. 0 = all records in one batch.
+;mssql.batchsize = 0
+
+; Specify how datetime and datetim4 columns are returned
+; On => Returns data converted to SQL server settings
+; Off => Returns values as YYYY-MM-DD hh:mm:ss
+;mssql.datetimeconvert = On
+
+; Use NT authentication when connecting to the server
+mssql.secure_connection = Off
+
+; Specify max number of processes. -1 = library default
+; msdlib defaults to 25
+; FreeTDS defaults to 4096
+;mssql.max_procs = -1
+
+; Specify client character set.
+; If empty or not set the client charset from freetds.comf is used
+; This is only used when compiled with FreeTDS
+;mssql.charset = "ISO-8859-1"
+
+[Assertion]
+; Assert(expr); active by default.
+;assert.active = On
+
+; Issue a PHP warning for each failed assertion.
+;assert.warning = On
+
+; Don't bail out by default.
+;assert.bail = Off
+
+; User-function to be called if an assertion fails.
+;assert.callback = 0
+
+; Eval the expression with current error_reporting(). Set to true if you want
+; error_reporting(0) around the eval().
+;assert.quiet_eval = 0
+
+[COM]
+; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
+;com.typelib_file =
+; allow Distributed-COM calls
+;com.allow_dcom = true
+; autoregister constants of a components typlib on com_load()
+;com.autoregister_typelib = true
+; register constants casesensitive
+;com.autoregister_casesensitive = false
+; show warnings on duplicate constant registrations
+;com.autoregister_verbose = true
+
+[mbstring]
+; language for internal character representation.
+;mbstring.language = Japanese
+
+; internal/script encoding.
+; Some encoding cannot work as internal encoding.
+; (e.g. SJIS, BIG5, ISO-2022-*)
+;mbstring.internal_encoding = EUC-JP
+
+; http input encoding.
+;mbstring.http_input = auto
+
+; http output encoding. mb_output_handler must be
+; registered as output buffer to function
+;mbstring.http_output = SJIS
+
+; enable automatic encoding translation according to
+; mbstring.internal_encoding setting. Input chars are
+; converted to internal encoding by setting this to On.
+; Note: Do _not_ use automatic encoding translation for
+; portable libs/applications.
+;mbstring.encoding_translation = Off
+
+; automatic encoding detection order.
+; auto means
+;mbstring.detect_order = auto
+
+; substitute_character used when character cannot be converted
+; one from another
+;mbstring.substitute_character = none;
+
+; overload(replace) single byte functions by mbstring functions.
+; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
+; etc. Possible values are 0,1,2,4 or combination of them.
+; For example, 7 for overload everything.
+; 0: No overload
+; 1: Overload mail() function
+; 2: Overload str*() functions
+; 4: Overload ereg*() functions
+;mbstring.func_overload = 0
+
+; enable strict encoding detection.
+;mbstring.strict_encoding = Off
+
+[FrontBase]
+;fbsql.allow_persistent = On
+;fbsql.autocommit = On
+;fbsql.show_timestamp_decimals = Off
+;fbsql.default_database =
+;fbsql.default_database_password =
+;fbsql.default_host =
+;fbsql.default_password =
+;fbsql.default_user = "_SYSTEM"
+;fbsql.generate_warnings = Off
+;fbsql.max_connections = 128
+;fbsql.max_links = 128
+;fbsql.max_persistent = -1
+;fbsql.max_results = 128
+
+[gd]
+; Tell the jpeg decode to libjpeg warnings and try to create
+; a gd image. The warning will then be displayed as notices
+; disabled by default
+;gd.jpeg_ignore_warning = 0
+
+[exif]
+; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
+; With mbstring support this will automatically be converted into the encoding
+; given by corresponding encode setting. When empty mbstring.internal_encoding
+; is used. For the decode settings you can distinguish between motorola and
+; intel byte order. A decode setting cannot be empty.
+;exif.encode_unicode = ISO-8859-15
+;exif.decode_unicode_motorola = UCS-2BE
+;exif.decode_unicode_intel = UCS-2LE
+;exif.encode_jis =
+;exif.decode_jis_motorola = JIS
+;exif.decode_jis_intel = JIS
+
+[Tidy]
+; The path to a default tidy configuration file to use when using tidy
+;tidy.default_config = /usr/local/lib/php/default.tcfg
+
+; Should tidy clean and repair output automatically?
+; WARNING: Do not use this option if you are generating non-html content
+; such as dynamic images
+tidy.clean_output = Off
+
+[soap]
+; Enables or disables WSDL caching feature.
+soap.wsdl_cache_enabled=1
+; Sets the directory name where SOAP extension will put cache files.
+soap.wsdl_cache_dir="/tmp"
+; (time to live) Sets the number of second while cached file will be used
+; instead of original one.
+soap.wsdl_cache_ttl=86400
+
+
+; available extensions
+;
+;extension=bcmath.so
+;extension=bz2.so
+;extension=calendar.so
+;extension=curl.so
+;extension=dba.so
+;extension=dbase.so
+;extension=exif.so
+;extension=ftp.so
+;extension=gd.so
+extension=gettext.so
+;extension=iconv.so
+;extension=imap.so
+;extension=json.so
+;extension=ldap.so
+;extension=mcrypt.so
+;extension=mime_magic.so
+;extension=mysql.so
+;extension=mysqli.so
+;extension=ncurses.so
+;extension=odbc.so
+;extension=openssl.so
+;extension=pdo.so
+;extension=pdo_mysql.so
+;extension=pdo_odbc.so
+;extension=pdo_pgsql.so
+;extension=pdo_sqlite.so
+;extension=pgsql.so
+;extension=posix.so
+;extension=pspell.so
+extension=session.so
+;extension=shmop.so
+;extension=snmp.so
+;extension=soap.so
+;extension=sockets.so
+;extension=sqlite.so
+;extension=sysvmsg.so
+;extension=sysvsem.so
+;extension=sysvshm.so
+;extension=tidy.so
+;extension=xmlrpc.so
+;extension=xsl.so
+;extension=zip.so
+extension=zlib.so
+
+
+; Local Variables:
+; tab-width: 4
+; End:
diff --git a/abs/core-testing/php/php.install b/abs/core-testing/php/php.install
new file mode 100644
index 0000000..0c7e289
--- /dev/null
+++ b/abs/core-testing/php/php.install
@@ -0,0 +1,97 @@
+post_install() {
+ echo '
+ ==> PHP modules
+
+ PHP has been built with optional modules. To enable these modules,
+ uncomment the modules from php.ini
+
+ Some of them require extra packages to be installed:
+
+ * bz2 : bzip2
+ * curl : curl
+ * dba : gdbm
+ * gd : libpng, libjpeg, freetype2
+ * imap : pam
+ * ldap : libldap
+ * mcrypt : mcrypt, libtool
+ * mysql/mysqli : libmysqlclient
+ * odbc/pdo_odbc : unixodbc
+ * openssl : openssl
+ * pgsql/pdo_pgsql : postgresql-libs
+ * pspell : aspell
+ * snmp : net-snmp
+ * sqlite : sqlite3
+ * tidy : tidyhtml
+ * xsl : libxslt
+
+ ==> PHP-CGI and FCGI
+
+ There are several cgi relevant settings in your php.ini. Make sure to
+ adjust them according to your needs. At least you should activate the
+ cgi.fix_pathinfo directive in php.ini by uncommenting it.
+
+ ==> PHP and Apache HTTPD
+
+ To use mod_php with the Apache webserver, add this to your httpd.conf:
+
+ LoadModule php5_module modules/libphp5.so
+ [..]
+ Include conf/extra/php5_module.conf
+
+ '
+}
+
+pre_upgrade() {
+ # we moved php.ini from /etc/ to /etc/php
+ # lets save the old file before pacman deletes it.
+ # can be removed later
+ if [ -f /etc/php.ini ] && [ $(vercmp '5.2.4-2' $2) -ge 0 ];then
+ echo 'Backing up old php.ini...'
+ mv /etc/php.ini /etc/php.ini.pacsave.tmp
+ fi
+}
+
+post_upgrade() {
+ post_install
+ echo '
+ ==> Review your php.ini
+
+ Your php installation has been updated. You should review your current
+ php.ini and check any upstream changes according to the default
+ configuration which can be found at php.ini.pacnew.
+ '
+ # if we upgraded from an installation with old config layout, move the old
+ # php.ini to the right place and inform the user about the changes.
+ # can be removed later
+ if [ -f /etc/php.ini.pacsave.tmp ] && [ $(vercmp '5.2.4-2' $2) -ge 0 ]; then
+ echo 'Restoring old php.ini...'
+ mv /etc/php/php.ini /etc/php/php.ini.pacnew
+ mv /etc/php.ini.pacsave.tmp /etc/php/php.ini
+ echo 'Updating extension dir...'
+ sed -i -e 's#extension_dir = "/usr/lib/php/extensions/php/"#extension_dir = "/usr/lib/php/20060613/"#g' /etc/php/php.ini
+ echo '
+ ==> Location of php.ini has changed
+
+ A previous configuration was found at /etc/php.ini. PHP stores its
+ configuration at /etc/php/ now. Your old php.ini was moved to
+ /etc/php/php.ini. You should merge your old file with the
+ default one that can be found at /etc/php/php.ini.pacnew.
+
+ Make sure to enable the modules you need. A lot of them are shared
+ objects now and not statically built into php.
+
+ External modules store their configuration in /etc/php/conf.d/. PHP
+ scans that directory for any ini files.
+ '
+ fi
+ # be nice to [testing] users and update php.ini to fix bug #8141.
+ # can be removed later
+ if [ $(vercmp '5.2.4-3' $2) -eq 0 ]; then
+ echo 'Updating extension dir...'
+ sed -i -e 's#extension_dir = "/usr/lib/php/extensions/"#extension_dir = "/usr/lib/php/20060613/"#g' /etc/php/php.ini
+ fi
+}
+
+op=$1
+shift
+[ "$(type -t "$op")" = "function" ] && $op "$@" \ No newline at end of file
diff --git a/abs/core-testing/pil/PKGBUILD b/abs/core-testing/pil/PKGBUILD
new file mode 100644
index 0000000..59e9b83
--- /dev/null
+++ b/abs/core-testing/pil/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: simo <simo@archlinux.org>
+pkgname=pil
+pkgver=1.1.6
+pkgrel=4
+pkgdesc="Python imaging library"
+arch=(i686 x86_64)
+url="http://www.pythonware.com/products/pil/index.htm"
+license=('custom:"pil"')
+depends=('python' 'libjpeg' 'freetype2')
+makedepends=('tk>=8.5.0')
+source=(http://effbot.org/downloads/Imaging-$pkgver.tar.gz)
+md5sums=('3a9b5c20ca52f0a9900512d2c7347622')
+
+build() {
+ cd $startdir/src/Imaging-$pkgver
+ python setup.py build_ext
+ python setup.py install --root=$startdir/pkg
+ mkdir -p $startdir/pkg/usr/include/python2.5/
+ cp libImaging/*.h $startdir/pkg/usr/include/python2.5/
+
+ # Install license
+ install -m644 -D $startdir/src/Imaging-$pkgver/README \
+ $startdir/pkg/usr/share/licenses/pil/README
+}
+
diff --git a/abs/core-testing/pixman/PKGBUILD b/abs/core-testing/pixman/PKGBUILD
new file mode 100644
index 0000000..a3fcb97
--- /dev/null
+++ b/abs/core-testing/pixman/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 490 2008-04-20 11:35:45Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=pixman
+pkgver=0.10.0
+pkgrel=1
+pkgdesc="Pixman library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org"
+license=()
+depends=('glibc')
+options=('!libtool')
+source=(http://xorg.freedesktop.org/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('fb23e17a8a0308e8fad6dc153753ba9a')
+
+build() {
+ cd "${startdir}/src/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR="${startdir}/pkg" install || return 1
+}
diff --git a/abs/core-testing/pkgconfig/PKGBUILD b/abs/core-testing/pkgconfig/PKGBUILD
new file mode 100644
index 0000000..2cecd38
--- /dev/null
+++ b/abs/core-testing/pkgconfig/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1407 2008-05-07 22:55:37Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=pkgconfig
+pkgver=0.23
+pkgrel=1
+pkgdesc="A system for managing library compile/link flags"
+arch=(i686 x86_64)
+url="http://pkgconfig.freedesktop.org/wiki/"
+license=('GPL')
+groups=('base-devel')
+depends=(glibc)
+source=(http://pkgconfig.freedesktop.org/releases/pkg-config-${pkgver}.tar.gz)
+md5sums=('d922a88782b64441d06547632fd85744')
+
+build() {
+ cd ${startdir}/src/pkg-config-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/all-wcprops b/abs/core-testing/plextor-convertX-driver/.svn/all-wcprops
new file mode 100644
index 0000000..a9a4baa
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/all-wcprops
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver
+END
+download.php?id=9719
+K 25
+svn:wc:ra_dav:version-url
+V 91
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/download.php%3Fid=9719
+END
+PKGBUILD
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/PKGBUILD
+END
+wis-go-0.9.8-2.6.17.patch
+K 25
+svn:wc:ra_dav:version-url
+V 94
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/wis-go-0.9.8-2.6.17.patch
+END
+convertX.install
+K 25
+svn:wc:ra_dav:version-url
+V 85
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/convertX.install
+END
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/entries b/abs/core-testing/plextor-convertX-driver/.svn/entries
new file mode 100644
index 0000000..24668fc
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/entries
@@ -0,0 +1,95 @@
+8
+
+dir
+26
+http://www.mythvantage.com/svn/MythVantage/trunk/multimedia/plextor-convertX-driver
+http://www.mythvantage.com/svn/MythVantage
+
+
+
+2008-08-11T22:07:32.420645Z
+3
+jams
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+aa4607db-271d-489d-aa74-f9b36e0b8801
+
+download.php?id=9719
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+046fc285320714abb64ca8d699d5daad
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+PKGBUILD
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+1a918566d44b59443786bfc0dc425bf8
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+install
+dir
+
+lib
+dir
+
+wis-go-0.9.8-2.6.17.patch
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+83d3108be840a45871c195a25c4de4ca
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+usr
+dir
+
+etc
+dir
+
+slack
+dir
+
+convertX.install
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+3f2eb8d111d0b1b43b4c53852610f4ec
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/format b/abs/core-testing/plextor-convertX-driver/.svn/format
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/format
@@ -0,0 +1 @@
+8
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base
new file mode 100644
index 0000000..1711062
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base
@@ -0,0 +1,31 @@
+
+
+pkgname=plextor-convertX-driver
+pkgver=0.9.8
+pkgrel=3
+_kernver=2.6.17-STB
+pkgdesc="ivtv - Drivers for many types of PVR cards"
+arch=(i686 x86_64)
+url="http://ivtvdriver.org"
+install="convertX.install"
+source=("http://oss.wischip.com/wis-go7007-linux-$pkgver.tar.bz2" "wis-go-0.9.8-2.6.17.patch")
+depends=(gcc 'udev>=070' 'fxload')
+
+
+build() {
+
+ # SET UP
+ patch -p0 < wis-go-0.9.8-2.6.17.patch
+ cd $startdir/src/wis-go7007-linux-0.9.8|| return 1
+
+ # build
+ make clean || return 1
+ make || return 1
+ mkdir -p $startdir/pkg/usr/src/linux-$_kernver/include/linux
+ mkdir -p $startdir/pkg/etc/udev/rules.d
+ mkdir -p $startdir/pkg/usr/bin
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+ install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
+ install -m755 apps/modet $startdir/pkg/usr/bin/modet
+}
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base
new file mode 100644
index 0000000..8dfd0b7
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base
new file mode 100644
index 0000000..516608c
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base
@@ -0,0 +1,460 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+
+<head>
+<title>LinuxPackages: Download Package</title>
+<meta name="Generator" content="PHP and good ole hand coded html">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="Author" content="{TG,robalo} at linuxpackages.net, {pimo,trotter} at opensys.ro">
+<meta name="Description" content="Slackware resources to help install and configure the Linux slackware distribution, Email list, Discussion Board, Howtos, Contributed packages, and much more">
+<meta name="Keywords" content="Linux Packages, Slackware, Linux, Help, Install, HOWTO, Sendmail, Slackbuilds, Software, News, ISDN, Security, Apache, Vhosting, Links, DNS, Sendmail, packages, programs">
+<link rel="alternate" type="application/rss+xml" title="Latest Packages RSS"
+ href="http://www.linuxpackages.net/backend/linuxpackages.rdf" />
+
+<link rel="stylesheet" href="lpstyle.css">
+<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
+ <!--
+ function open_window(url) {
+ var NEW_WIN = null;
+ NEW_WIN = window.open ("", "RecordViewer", "toolbar=no,width="+600+",height="+400+",directories=no,status=no,scrollbars=yes,resize=no,menubar=no");
+ NEW_WIN.location.href = url;
+ }
+ //-->
+ </SCRIPT>
+
+</head>
+<body bgcolor="#006699" text="#000000" link="#4b6d96" vlink="#4b6d96" alink="" marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0">
+<!-- <body bgcolor="" text="" link="" vlink="" alink="" marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0"> -->
+
+<table width="100%" cellpadding="10" cellspacing="0" border="0">
+<tr bgcolor="#FF9966"><form method="get" action="http://www.linuxpackages.net/search_view.php">
+<input type="hidden" name="by" value="name">
+<td width="265" align=right>
+<img src="/images/newlogo.gif" alt="LinuxPackages.net" width="265" height="43" border="0"></a><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="265" height="5" border="0"><br>
+&nbsp;<font color="#000000">SearchPkg:</font>
+<input name="name" type="text" size="12" value="">
+<select name="ver">
+<option value="11.0" >v11.0</option>
+<option value="10.2" >v10.2</option>
+<option value="10.1" >v10.1</option>
+<option value="10.0" >v10.0</option>
+<option value="9.1" >v9.1</option>
+<option value="9.0" >v9.0</option>
+<option value="8.1" >v8.1</option>
+<option value="8.0" >v8.0</option>
+<option value="" >any</option>
+</select>
+<input type="submit" value="Go">
+</td></form>
+<td width="468">
+<script language='JavaScript' type='text/javascript'>
+<!--
+ if (!document.phpAds_used) document.phpAds_used = ',';
+ phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
+
+ document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
+ document.write ("http://www.linuxpackages.net/adserv/adjs.php?n=" + phpAds_random);
+ document.write ("&amp;what=zone:5");
+ document.write ("&amp;exclude=" + document.phpAds_used);
+ if (document.referer)
+ document.write ("&amp;referer=" + escape(document.referer));
+ document.write ("'><" + "/script>");
+//-->
+</script><noscript><a href='http://www.linuxpackages.net/adserv/adclick.php?n=a1cec3e8'
+target='_blank'><img src='http://www.linuxpackages.net/adserv/adview.php?what=zone:5&amp;n=a1cec3e8'
+border='0' alt=''></a></noscript>
+<br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="468" height="1" border="0"><br>
+</td><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="60" border="0"><br>
+</td></tr>
+</table>
+
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#ffffff"><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="1" border="0"><br>
+</td></tr>
+<tr bgcolor="#004263"><td align="center">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="2" border="0"><br>
+<font color="#FF9966">
+<a href="http://www.linuxpackages.net/catalog" class="barlink">LP Store</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp<a href="http://www.linuxpackages.net/" class="barlink">Home</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/about.php" class="barlink">About</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/forum" class="barlink">Forums</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/site-links" class="barlink">Links</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/packages.php" class="barlink">Packages</a>
+</font><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+</td></tr>
+</table>
+
+<img src="http://www.linuxpackages.net/images/dot.gif" width="760" height="2" border="0"><br>
+<table width="100%" cellpadding="0" cellspacing="10" border="0"><tr>
+<td width="25%" valign="top">
+<!-- start left column -->
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+Information
+</font></b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<font color="#000000">
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/catalog">LP Store</a><br>
+
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/about.php">About this Site</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/packages.php">Packages</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/forum">Slackware</a><small><sup>&reg;</sup></small><a href="http://www.linuxpackages.net/forum"> Forums</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/faq">Slackware FAQ</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php">Slackware Documents </a><small>(<i>Updated</i>)</small><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://slackart.linuxpackages.net">Slackware Art </a><br>
+
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=package&title=Package+Howto">Building Packages</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=buildtools&title=Package+Tools">Package Tools</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=perfect-package&title=Perfect+Package">The Perfect package</a><small>(<i>Updated</i>)</small><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=contrib&title=Contribute">Submitting a Package</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/changelog.php">Slackware Changelog</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www2.linuxpackages.net/packages/SlackBuilds/">Build Script Archive</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/topcontrib.php">Top Contributors</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/mirrors.php">Mirror Status/Info</a><br>
+</font>
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<span class="module">Top 10 Downloads</span>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#dfdfdf"><td>
+<b>Packages</b><br>
+</td><td align=right>
+<b>Hits</b><br>
+</td></tr>
+<tr bgcolor="#FFFFFF"><td width="100%" colspan=2>
+<table width="100%" border=0 cellspacing=2 cellpadding=0>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7951">OpenOffice.org 2.0.3</a><br>
+</td><td align=right>
+<b>18540</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=760">Wine 0.9.7</a><br>
+</td><td align=right>
+<b>15526</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=5982">xmmsskins 1.0</a><br>
+</td><td align=right>
+<b>13202</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7608">K3b 0.12.17</a><br>
+</td><td align=right>
+<b>11383</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8096">openoffice.org 2.0ptBR</a><br>
+</td><td align=right>
+<b>10492</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8352">libdvdcss 1.2.9</a><br>
+</td><td align=right>
+<b>8839</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7419">slapt-get 0.9.11e</a><br>
+</td><td align=right>
+<b>5652</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7528">Freerock-Gnome 2.12.1</a><br>
+</td><td align=right>
+<b>4978</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8105">Frozen-Bubble 1.0.0</a><br>
+</td><td align=right>
+<b>3906</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7926">k3b 0.12.16</a><br>
+</td><td align=right>
+<b>3630</b>
+</td></tr>
+</table>
+
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+Email List
+</font></b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%" align=center>
+Subscribe to LinuxPackages Package annoucements to get updated when new packages or updates are posted.<br>
+<a href=/mailman/listinfo/pkg-annc>Click here to subscribe</a><br><br>
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<span class="module">Quick Links</span>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.slackware.com" target=_blank>Slackware.com</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://muse.linuxmafia.org" target=_blank>GShield Firewall</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.satlug.org" target=_blank>SATLUG</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://swaret.sourceforge.net/index.php" target=_blank>Swaret</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.abnormalpenguin.com/slackware-mirrors.php" target=_blank>Slack Mirrors List</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://software.jaos.org/" target=_blank>Slapt-Get</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.darklinux.net/slackupdate/" target=_blank>SlackUpdate</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.mutagenix.org/" target=_blank>Mutagenix</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://gsb.freerock.org" target=_blank>FreeRock Gnome</a><br>
+</td></tr></table>
+</td></tr></table>
+<!--//end left column//-->
+</td>
+<td width="75%" valign="top">
+<!-- start middle column -->
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+You are requesting file: wisgo7007sb-0.9.8-i486-1bif.tgz<br>
+Please select a mirror</font>
+</b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<table align="center" width="90%" bgcolor="#ffffff" cellpadding="0"
+cellspacing="0" border="0">
+<tbody>
+<tr>
+<td align="center" colspan="2">
+<table width="100%" cellpadding="1" cellspacing="1" border="0">
+<tbody>
+<tr>
+<th>
+</th>
+<th>Host<br></th>
+<th>Location<br>
+</th>
+<th>Continent<br>
+</th>
+<th>Download<br>
+</th>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.rol.ru/ target=_blank><img alt=Rol border="0"
+src=images/rol-logo-sm.gif width="100" height="41"></a></td>
+<td align="center">Rol</td>
+<td align="center">Moscow</td>
+<td align="center">Russia</td>
+<td align="center">
+<a href=http://slackware.rol.ru/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.reco-systems.de target=_blank><img alt=ReCo-Systems border="0"
+src=/images/logo_small.png width="100" height="41"></a></td>
+<td align="center">ReCo-Systems</td>
+<td align="center">Hannover Germany</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.reco-systems.de//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.reco-systems.de//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.slackware.hu target=_blank><img alt=Szombathely Linux Association border="0"
+src=/images/szle.jpg width="100" height="41"></a></td>
+<td align="center">Szombathely Linux Association</td>
+<td align="center">Hungary</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=ftp://ftp.slackware.hu/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.nymphomatic.org target=_blank><img alt=IEEE Student Branch border="0"
+src=images/evo.gif width="100" height="41"></a></td>
+<td align="center">IEEE Student Branch</td>
+<td align="center">Croatia</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://www.nymphomatic.org/mirror/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.nymphomatic.org/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.cgu.edu.tw target=_blank><img alt=Chang-Gung University border="0"
+src=images/cgu.png width="100" height="41"></a></td>
+<td align="center">Chang-Gung University</td>
+<td align="center">Taiwan</td>
+<td align="center">Asia</td>
+<td align="center">
+<a href=http://linuxpackages.cgucccc.org/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.software-mirror.com target=_blank><img alt=Software Mirror border="0"
+src=/images/sfmirror.gif width="100" height="41"></a></td>
+<td align="center">Software Mirror</td>
+<td align="center">Colorado</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://www.software-mirror.com/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.inode.at target=_blank><img alt=Inode.at border="0"
+src=/images/inode.jpg width="100" height="41"></a></td>
+<td align="center">Inode.at</td>
+<td align="center">Austria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.inode.at/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.inode.at/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.nyi.net target=_blank><img alt=NYI New York Internet border="0"
+src=/images/nyilogo.jpg width="100" height="41"></a></td>
+<td align="center">NYI New York Internet</td>
+<td align="center">New York USA</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://www2.linuxpackages.net/packages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp3.linuxpackages.net/pub/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.scarlet.be target=_blank><img alt=Scarlet.be border="0"
+src=/images/scarlet_lp.gif width="100" height="41"></a></td>
+<td align="center">Scarlet.be</td>
+<td align="center">Belgium</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://ftp.scarlet.be/pub/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.scarlet.be/pub/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.opensys.ro target=_blank><img alt=Open Systems border="0"
+src=/images/logoopensys.jpg width="100" height="41"></a></td>
+<td align="center">Open Systems</td>
+<td align="center">Romania</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://opensys.linuxpackages.net/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://opensys.linuxpackages.net/pub/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.telecoms.bg target=_blank><img alt=Telecoms border="0"
+src=images/evo.gif width="100" height="41"></a></td>
+<td align="center">Telecoms</td>
+<td align="center">Varna Bulgaria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.telecoms.bg/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.telecoms.bg/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.naist.jp/ target=_blank><img alt=Naist border="0"
+src=/images/naist.png width="100" height="41"></a></td>
+<td align="center">Naist</td>
+<td align="center">Japan</td>
+<td align="center">Asia</td>
+<td align="center">
+<a href=http://ftp.naist.jp/pub/Linux/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.nara.wide.ad.jp/pub/Linux/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://mirrors.unixsol.org/ target=_blank><img alt=Unixsol border="0"
+src=/images/unixsol.png width="100" height="41"></a></td>
+<td align="center">Unixsol</td>
+<td align="center">Sofia Bulgaria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://mirrors.unixsol.org/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://mirrors.unixsol.org/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.cs.utah.edu/ target=_blank><img alt=University of Utah border="0"
+src=images/UUSC.png width="100" height="41"></a></td>
+<td align="center">University of Utah</td>
+<td align="center">Utah</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://linuxpackages.cs.utah.edu//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://mirror.cs.utah.edu/pub/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+</tbody>
+</table>
+</td>
+</tr>
+</tbody>
+</table>
+<br><center>Not all mirrors may be updated right away with new packages.</center>
+</td></tr></table>
+</td></tr></table>
+<!--//end middle column//-->
+</td>
+</tr></table>
+
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#ffffff"><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="1" border="0"><br>
+</td></tr>
+<tr bgcolor="#FF9966"><td align=center>
+<br>Copyright &copy;1997-2004 LinuxPackages Network. All rights reserved.<br>
+Slackware is a registered trademark of Patrick Volkerding and Slackware Linux, Inc.<br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="5" border="0"><br>
+<a href="http://www.linuxpackages.net/advertise.php">Advertising</a> - <a href="http://www.linuxpackages.net/catalog/privacy.php">Privacy Statement</a> - Terms of Use - Build: 2002071201<br>
+<a href=http://www.nyi.net>FTP Hosting provided by The New York Internet Company</a><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+</td></tr>
+</table>
+</body>
+</html>
diff --git a/abs/core-testing/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base b/abs/core-testing/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base
new file mode 100644
index 0000000..694a2f6
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base
@@ -0,0 +1,76 @@
+diff -ur wis-go7007-linux-0.9.8/kernel/go7007-usb.c wis-go7007-linux-0.9.8-new/kernel/go7007-usb.c
+--- wis-go7007-linux-0.9.8/kernel/go7007-usb.c 2006-04-02 00:57:04.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/go7007-usb.c 2006-04-03 12:58:44.000000000 +0200
+@@ -27,7 +27,7 @@
+ #include <linux/usb.h>
+ #include <linux/i2c.h>
+ #include <asm/byteorder.h>
+-#include <media/audiochip.h>
++#include <media/tvaudio.h>
+
+ #include "go7007-priv.h"
+ #include "wis-i2c.h"
+@@ -225,17 +225,17 @@
+ .inputs = {
+ {
+ .video_input = 1,
+- .audio_input = AUDIO_EXTERN,
++ .audio_input = TVAUDIO_INPUT_EXTERN,
+ .name = "Composite",
+ },
+ {
+ .video_input = 8,
+- .audio_input = AUDIO_EXTERN,
++ .audio_input = TVAUDIO_INPUT_EXTERN,
+ .name = "S-Video",
+ },
+ {
+ .video_input = 3,
+- .audio_input = AUDIO_TUNER,
++ .audio_input = TVAUDIO_INPUT_TUNER,
+ .name = "Tuner",
+ },
+ },
+diff -ur wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c wis-go7007-linux-0.9.8-new/kernel/go7007-v4l2.c
+--- wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c 2006-04-02 01:22:03.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/go7007-v4l2.c 2006-04-03 12:55:52.000000000 +0200
+@@ -939,7 +939,7 @@
+ if (go->i2c_adapter_online) {
+ i2c_clients_command(&go->i2c_adapter, DECODER_SET_INPUT,
+ &go->board_info->inputs[*input].video_input);
+- i2c_clients_command(&go->i2c_adapter, AUDC_SET_INPUT,
++ i2c_clients_command(&go->i2c_adapter, VIDIOC_S_AUDIO,
+ &go->board_info->inputs[*input].audio_input);
+ }
+ return 0;
+diff -ur wis-go7007-linux-0.9.8/kernel/wis-uda1342.c wis-go7007-linux-0.9.8-new/kernel/wis-uda1342.c
+--- wis-go7007-linux-0.9.8/kernel/wis-uda1342.c 2006-04-02 00:37:32.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/wis-uda1342.c 2006-04-03 13:07:04.000000000 +0200
+@@ -20,7 +20,7 @@
+ #include <linux/version.h>
+ #include <linux/i2c.h>
+ #include <linux/videodev.h>
+-#include <media/audiochip.h>
++#include <media/tvaudio.h>
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+ #include <media/v4l2-common.h>
+ #endif
+@@ -38,15 +38,15 @@
+ unsigned int cmd, void *arg)
+ {
+ switch (cmd) {
+- case AUDC_SET_INPUT:
++ case VIDIOC_S_AUDIO:
+ {
+ int *inp = arg;
+
+ switch (*inp) {
+- case AUDIO_TUNER:
++ case TVAUDIO_INPUT_TUNER:
+ write_reg(client, 0x00, 0x1441); /* select input 2 */
+ break;
+- case AUDIO_EXTERN:
++ case TVAUDIO_INPUT_EXTERN:
+ write_reg(client, 0x00, 0x1241); /* select input 1 */
+ break;
+ default:
diff --git a/abs/core-testing/plextor-convertX-driver/PKGBUILD b/abs/core-testing/plextor-convertX-driver/PKGBUILD
new file mode 100755
index 0000000..102d539
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/PKGBUILD
@@ -0,0 +1,30 @@
+
+
+pkgname=plextor-convertX-driver
+pkgver=0.9.8
+pkgrel=2
+_kernver=2.6.26-ARCH
+pkgdesc="Drivers for Plextor tuners"
+arch=(i686 x86_64)
+url="http://nikosapi.org/software/WIS_Go7007"
+install="convertX.install"
+source=("http://nikosapi.org/software/WIS_Go7007/wis-go7007-linux-0.9.8-2.tar.bz2" 'wis-go7007-2.6.26-nopage.diff')
+depends=('udev>=070' 'fxload')
+makedepends=('gcc')
+
+build() {
+
+ # SET UP
+ cd $startdir/src/wis-go7007-linux-0.9.8-2 || return 1
+ patch -Np1 -i ../wis-go7007-2.6.26-nopage.diff || return 1
+ # build
+ make clean || return 1
+ make || return 1
+ mkdir -p $startdir/pkg/usr/src/linux-$_kernver/include/linux
+ mkdir -p $startdir/pkg/etc/udev/rules.d
+ mkdir -p $startdir/pkg/usr/bin
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+ install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
+ install -m755 apps/modet $startdir/pkg/usr/bin/modet
+}
diff --git a/abs/core-testing/plextor-convertX-driver/convertX.install b/abs/core-testing/plextor-convertX-driver/convertX.install
new file mode 100755
index 0000000..8dfd0b7
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/convertX.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff b/abs/core-testing/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff
new file mode 100644
index 0000000..2fd1cca
--- /dev/null
+++ b/abs/core-testing/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff
@@ -0,0 +1,26 @@
+diff -urN wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c
+--- wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c 2007-05-09 13:56:07.000000000 -0400
++++ wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c 2008-08-03 16:01:35.000000000 -0400
+@@ -1375,6 +1375,7 @@
+ }
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ /* This is really only going to ever be called when we
+ * do get_user_pages() in VIDIOC_QBUF */
+ static struct page *go7007_vm_nopage(struct vm_area_struct *vma,
+@@ -1392,11 +1393,14 @@
+ *type = VM_FAULT_MINOR;
+ return page;
+ }
++#endif
+
+ static struct vm_operations_struct go7007_vm_ops = {
+ .open = go7007_vm_open,
+ .close = go7007_vm_close,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ .nopage = go7007_vm_nopage,
++#endif
+ };
+
+ static int go7007_mmap(struct file *file, struct vm_area_struct *vma)
diff --git a/abs/core-testing/pm-utils/11netcfg b/abs/core-testing/pm-utils/11netcfg
new file mode 100644
index 0000000..1b4d05e
--- /dev/null
+++ b/abs/core-testing/pm-utils/11netcfg
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+. /usr/lib/pm-utils/functions
+
+suspend_netcfg() {
+ netcfg2 all-suspend
+}
+
+resume_netcfg() {
+ netcfg2 all-resume
+}
+
+if [ -x /usr/bin/netcfg2 ]; then
+ case "$1" in
+ hibernate|suspend)
+ suspend_netcfg
+ ;;
+ thaw|resume)
+ resume_netcfg
+ ;;
+ *)
+ ;;
+ esac
+fi
+
+exit $?
diff --git a/abs/core-testing/pm-utils/PKGBUILD b/abs/core-testing/pm-utils/PKGBUILD
new file mode 100644
index 0000000..0ca060c
--- /dev/null
+++ b/abs/core-testing/pm-utils/PKGBUILD
@@ -0,0 +1,29 @@
+#$Id: PKGBUILD 7546 2008-08-02 21:35:07Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=pm-utils
+pkgver=1.1.2.4
+pkgrel=1
+pkgdesc="Utilities and scripts for power management"
+arch=('i686' 'x86_64')
+url="http://pm-utils.freedesktop.org"
+license=('GPL')
+depends=('glibc' 'vbetool' 'procps')
+makedepends=('xmlto')
+install=pm-utils.install
+source=(http://pm-utils.freedesktop.org/releases/${pkgname}-${pkgver}.tar.gz
+ service.patch
+ 11netcfg)
+md5sums=('5aa6d338fb8172f1826a1b08ae601a42'
+ '3e170a6c7ae7d9110f95bab54235c089'
+ '9839687c8787d99fd4ff36aa3238c27b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ${startdir}/src/service.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ #Install additional hooks
+ install -m755 ${startdir}/src/11netcfg ${startdir}/pkg/usr/lib/pm-utils/sleep.d/11netcfg || return 1
+}
diff --git a/abs/core-testing/pm-utils/pm-utils.install b/abs/core-testing/pm-utils/pm-utils.install
new file mode 100644
index 0000000..5e8232d
--- /dev/null
+++ b/abs/core-testing/pm-utils/pm-utils.install
@@ -0,0 +1,15 @@
+# arg 1: the new package version
+post_install() {
+ cat << _EOF
+
+Powersave has been deprecated as suspend/resume framework and has been replaced
+by pm-utils. Pm-utils provides everything you need for suspend/resume, but does
+not load your cpufreq modules like powersaved does. You have to load these
+modules by hand if you want to use them.
+
+_EOF
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/pm-utils/service.patch b/abs/core-testing/pm-utils/service.patch
new file mode 100644
index 0000000..422b3f5
--- /dev/null
+++ b/abs/core-testing/pm-utils/service.patch
@@ -0,0 +1,15 @@
+--- pm/functions.in~ 2008-04-10 17:39:48.000000000 +0000
++++ pm/functions.in 2008-04-10 17:39:58.000000000 +0000
+@@ -138,10 +138,10 @@
+ if ! command_exists service; then
+ service()
+ {
+- if [ -x "/etc/init.d/$1" ]; then
++ if [ -x "/etc/rc.d/$1" ]; then
+ svc="$1"
+ shift
+- "/etc/init.d/$svc" "$@"
++ "/etc/rc.d/$svc" "$@"
+ else
+ log "$1" $": unrecognized service" 1>&2
+ return 1
diff --git a/abs/core-testing/popt/PKGBUILD b/abs/core-testing/popt/PKGBUILD
new file mode 100644
index 0000000..a8cdec7
--- /dev/null
+++ b/abs/core-testing/popt/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=popt
+pkgver=1.10.6
+pkgrel=12
+_rpmver=4.4.6
+pkgdesc="A commandline option parser"
+arch=(i686 x86_64)
+url="http://rpm.net.in/mirror/rpm-4.4.x/"
+license=('GPL' 'MIT')
+groups=('base')
+depends=('glibc')
+options=('!libtool')
+source=(http://wraptastic.org/pub/rpm-4.4.x/rpm-${_rpmver}.tar.gz)
+md5sums=('baa6f371446c65b4080d1cd1f194a7ae')
+
+build() {
+ cd $startdir/src/rpm-${_rpmver}/popt
+ if [ "$CARCH" = "x86_64" ]; then
+ sed -i -e "s/@MARK64@//" Makefile.am
+ sed -i -e "s/@MARK64@//" Makefile.in
+ fi
+
+ # fix from BLFS
+ sed -i -e "/*origOptString ==/c 0)" popt.c
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/ppp/PKGBUILD b/abs/core-testing/ppp/PKGBUILD
new file mode 100644
index 0000000..24f40a7
--- /dev/null
+++ b/abs/core-testing/ppp/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=ppp
+pkgver=2.4.4
+pkgrel=15
+pkgdesc="A daemon which implements the PPP protocol for dial-up networking"
+arch=(i686 x86_64)
+url="http://www.samba.org/ppp/"
+license=('custom:GPL/BSD')
+groups=('base')
+depends=('glibc' 'libpcap>=0.9.8')
+backup=(etc/ppp/{chap-secrets,pap-secrets,options,ip-up,ip-down})
+source=(ftp://ftp.samba.org/pub/ppp/ppp-$pkgver.tar.gz \
+ options pon poff ppp plog pon.1 ip-up ip-down)
+md5sums=('183800762e266132218b204dfb428d29' '7a9259a8f038073eeea7e4552ff1849f'\
+ '48c024f73a80c8b69c4def22f86902cc' '2d811f8470ccdea3b8c4505a438483e9'\
+ '7561c73b557292d5ba1a9c5dbd270fde' '86cdaf133f7a79fb464f02d83afc7734'\
+ '44cc662ba9aa61dd9add3ddd4c5ded57' 'fac0c773490371ea673f4be0977a230f'\
+ 'a88b40b1bf91eb5cca3762b7195e4fe2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ # fix CFLAGS
+ sed -i "s:-O2 -pipe -Wall -g:${CFLAGS}:" pppd/Makefile.linux
+ sed -i "s:-g -O2:${CFLAGS}:" pppd/plugins/Makefile.linux
+ sed -i "s:-O2:${CFLAGS}:" pppstats/Makefile.linux
+ sed -i "s:-O2 -g -pipe:${CFLAGS}:" chat/Makefile.linux
+ sed -i "s:-O:${CFLAGS}:" pppdump/Makefile.linux
+
+ # enable active filter
+ sed -i "s:^#FILTER=y:FILTER=y:" pppd/Makefile.linux
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg/usr install
+ install -D -m644 $startdir/src/options $startdir/pkg/etc/ppp/options
+ install -D -m755 $startdir/src/ip-up $startdir/pkg/etc/ppp/ip-up
+ install -D -m755 $startdir/src/ip-down $startdir/pkg/etc/ppp/ip-down
+ install -D -m755 $startdir/src/pon $startdir/pkg/usr/bin/pon
+ install -D -m755 $startdir/src/poff $startdir/pkg/usr/bin/poff
+ install -D -m755 $startdir/src/plog $startdir/pkg/usr/sbin/plog
+ install -D -m600 etc.ppp/pap-secrets $startdir/pkg/etc/ppp/pap-secrets
+ install -D -m600 etc.ppp/chap-secrets $startdir/pkg/etc/ppp/chap-secrets
+ install -D -m755 $startdir/src/ppp $startdir/pkg/etc/rc.d/ppp
+ install -D -m644 $startdir/src/pon.1 $startdir/pkg/usr/man/man1/pon.1
+ mkdir -p $startdir/pkg/etc/ppp/peers
+}
diff --git a/abs/core-testing/ppp/ip-down b/abs/core-testing/ppp/ip-down
new file mode 100644
index 0000000..3a88c49
--- /dev/null
+++ b/abs/core-testing/ppp/ip-down
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+# This script is run by pppd after the connection has ended.
+#
diff --git a/abs/core-testing/ppp/ip-up b/abs/core-testing/ppp/ip-up
new file mode 100644
index 0000000..57e09c0
--- /dev/null
+++ b/abs/core-testing/ppp/ip-up
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+# This script is run by pppd when there's a successful ppp connection.
+#
diff --git a/abs/core-testing/ppp/options b/abs/core-testing/ppp/options
new file mode 100644
index 0000000..6369184
--- /dev/null
+++ b/abs/core-testing/ppp/options
@@ -0,0 +1,352 @@
+# /etc/ppp/options
+#
+# Originally created by Jim Knoble <jmknoble@mercury.interpath.net>
+# Modified for Debian by alvar Bray <alvar@meiko.co.uk>
+# Modified for PPP Server setup by Christoph Lameter <clameter@debian.org>
+# Modified for ArchLinux by Manolis Tzanidakis <manolis@archlinux.org>
+#
+# To quickly see what options are active in this file, use this command:
+# egrep -v '#|^ *$' /etc/ppp/options
+
+# Specify which DNS Servers the incoming Win95 or WinNT Connection should use
+# Two Servers can be remotely configured
+# ms-dns 192.168.1.1
+# ms-dns 192.168.1.2
+
+# Specify which WINS Servers the incoming connection Win95 or WinNT should use
+# ms-wins 192.168.1.50
+# ms-wins 192.168.1.51
+
+# Run the executable or shell command specified after pppd has
+# terminated the link. This script could, for example, issue commands
+# to the modem to cause it to hang up if hardware modem control signals
+# were not available.
+#disconnect "chat -- \d+++\d\c OK ath0 OK"
+
+# async character map -- 32-bit hex; each bit is a character
+# that needs to be escaped for pppd to receive it. 0x00000001
+# represents '\x01', and 0x80000000 represents '\x1f'.
+asyncmap 0
+
+# Require the peer to authenticate itself before allowing network
+# packets to be sent or received.
+# Please do not disable this setting. It is expected to be standard in
+# future releases of pppd. Use the call option (see manpage) to disable
+# authentication for specific peers.
+auth
+
+# Use hardware flow control (i.e. RTS/CTS) to control the flow of data
+# on the serial port.
+crtscts
+
+# Use software flow control (i.e. XON/XOFF) to control the flow of data
+# on the serial port.
+#xonxoff
+
+# Specifies that certain characters should be escaped on transmission
+# (regardless of whether the peer requests them to be escaped with its
+# async control character map). The characters to be escaped are
+# specified as a list of hex numbers separated by commas. Note that
+# almost any character can be specified for the escape option, unlike
+# the asyncmap option which only allows control characters to be
+# specified. The characters which may not be escaped are those with hex
+# values 0x20 - 0x3f or 0x5e.
+#escape 11,13,ff
+
+# Don't use the modem control lines.
+#local
+
+# Specifies that pppd should use a UUCP-style lock on the serial device
+# to ensure exclusive access to the device.
+lock
+
+# Don't show the passwords when logging the contents of PAP packets.
+# This is the default.
+hide-password
+
+# When logging the contents of PAP packets, this option causes pppd to
+# show the password string in the log message.
+#show-password
+
+# Use the modem control lines. On Ultrix, this option implies hardware
+# flow control, as for the crtscts option. (This option is not fully
+# implemented.)
+modem
+
+# Set the MRU [Maximum Receive Unit] value to <n> for negotiation. pppd
+# will ask the peer to send packets of no more than <n> bytes. The
+# minimum MRU value is 128. The default MRU value is 1500. A value of
+# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
+# bytes of data).
+#mru 542
+
+# Set the interface netmask to <n>, a 32 bit netmask in "decimal dot"
+# notation (e.g. 255.255.255.0).
+#netmask 255.255.255.0
+
+# Disables the default behaviour when no local IP address is specified,
+# which is to determine (if possible) the local IP address from the
+# hostname. With this option, the peer will have to supply the local IP
+# address during IPCP negotiation (unless it specified explicitly on the
+# command line or in an options file).
+#noipdefault
+
+# Enables the "passive" option in the LCP. With this option, pppd will
+# attempt to initiate a connection; if no reply is received from the
+# peer, pppd will then just wait passively for a valid LCP packet from
+# the peer (instead of exiting, as it does without this option).
+#passive
+
+# With this option, pppd will not transmit LCP packets to initiate a
+# connection until a valid LCP packet is received from the peer (as for
+# the "passive" option with old versions of pppd).
+#silent
+
+# Don't request or allow negotiation of any options for LCP and IPCP
+# (use default values).
+#-all
+
+# Disable Address/Control compression negotiation (use default, i.e.
+# address/control field disabled).
+#-ac
+
+# Disable asyncmap negotiation (use the default asyncmap, i.e. escape
+# all control characters).
+#-am
+
+# Don't fork to become a background process (otherwise pppd will do so
+# if a serial device is specified).
+#-detach
+
+# Disable IP address negotiation (with this option, the remote IP
+# address must be specified with an option on the command line or in
+# an options file).
+#-ip
+
+# Disable IPCP negotiation and IP communication. This option should
+# only be required if the peer is buggy and gets confused by requests
+# from pppd for IPCP negotiation.
+#noip
+
+# Disable magic number negotiation. With this option, pppd cannot
+# detect a looped-back line.
+#-mn
+
+# Disable MRU [Maximum Receive Unit] negotiation (use default, i.e.
+# 1500).
+#-mru
+
+# Disable protocol field compression negotiation (use default, i.e.
+# protocol field compression disabled).
+#-pc
+
+# Require the peer to authenticate itself using PAP.
+#+pap
+
+# Don't agree to authenticate using PAP.
+#-pap
+
+# Require the peer to authenticate itself using CHAP [Cryptographic
+# Handshake Authentication Protocol] authentication.
+#+chap
+
+# Don't agree to authenticate using CHAP.
+#-chap
+
+# Disable negotiation of Van Jacobson style IP header compression (use
+# default, i.e. no compression).
+#-vj
+
+# Increase debugging level (same as -d). If this option is given, pppd
+# will log the contents of all control packets sent or received in a
+# readable form. The packets are logged through syslog with facility
+# daemon and level debug. This information can be directed to a file by
+# setting up /etc/syslog.conf appropriately (see syslog.conf(5)). (If
+# pppd is compiled with extra debugging enabled, it will log messages
+# using facility local2 instead of daemon).
+#debug
+
+# Append the domain name <d> to the local host name for authentication
+# purposes. For example, if gethostname() returns the name porsche,
+# but the fully qualified domain name is porsche.Quotron.COM, you would
+# use the domain option to set the domain name to Quotron.COM.
+#domain <d>
+
+# Enable debugging code in the kernel-level PPP driver. The argument n
+# is a number which is the sum of the following values: 1 to enable
+# general debug messages, 2 to request that the contents of received
+# packets be printed, and 4 to request that the contents of transmitted
+# packets be printed.
+#kdebug n
+
+# Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
+# requests a smaller value via MRU negotiation, pppd will request that
+# the kernel networking code send data packets of no more than n bytes
+# through the PPP network interface.
+#mtu <n>
+
+# Set the name of the local system for authentication purposes to <n>.
+# This is a privileged option. With this option, pppd will use lines in the
+# secrets files which have <n> as the second field when looking for a
+# secret to use in authenticating the peer. In addition, unless overridden
+# with the user option, <n> will be used as the name to send to the peer
+# when authenticating the local system to the peer. (Note that pppd does
+# not append the domain name to <n>.)
+#name <n>
+
+# Enforce the use of the hostname as the name of the local system for
+# authentication purposes (overrides the name option).
+#usehostname
+
+# Set the assumed name of the remote system for authentication purposes
+# to <n>.
+#remotename <n>
+
+# Add an entry to this system's ARP [Address Resolution Protocol]
+# table with the IP address of the peer and the Ethernet address of this
+# system.
+proxyarp
+
+# Use the system password database for authenticating the peer using
+# PAP. Note: mgetty already provides this option. If this is specified
+# then dialin from users using a script under Linux to fire up ppp wont work.
+# login
+
+# If this option is given, pppd will send an LCP echo-request frame to the
+# peer every n seconds. Normally the peer should respond to the echo-request
+# by sending an echo-reply. This option can be used with the
+# lcp-echo-failure option to detect that the peer is no longer connected.
+lcp-echo-interval 30
+
+# If this option is given, pppd will presume the peer to be dead if n
+# LCP echo-requests are sent without receiving a valid LCP echo-reply.
+# If this happens, pppd will terminate the connection. Use of this
+# option requires a non-zero value for the lcp-echo-interval parameter.
+# This option can be used to enable pppd to terminate after the physical
+# connection has been broken (e.g., the modem has hung up) in
+# situations where no hardware modem control lines are available.
+lcp-echo-failure 4
+
+# Set the LCP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#lcp-restart <n>
+
+# Set the maximum number of LCP terminate-request transmissions to <n>
+# (default 3).
+#lcp-max-terminate <n>
+
+# Set the maximum number of LCP configure-request transmissions to <n>
+# (default 10).
+#lcp-max-configure <n>
+
+# Set the maximum number of LCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#lcp-max-failure <n>
+
+# Set the IPCP restart interval (retransmission timeout) to <n>
+# seconds (default 3).
+#ipcp-restart <n>
+
+# Set the maximum number of IPCP terminate-request transmissions to <n>
+# (default 3).
+#ipcp-max-terminate <n>
+
+# Set the maximum number of IPCP configure-request transmissions to <n>
+# (default 10).
+#ipcp-max-configure <n>
+
+# Set the maximum number of IPCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#ipcp-max-failure <n>
+
+# Set the PAP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#pap-restart <n>
+
+# Set the maximum number of PAP authenticate-request transmissions to
+# <n> (default 10).
+#pap-max-authreq <n>
+
+# Set the maximum time that pppd will wait for the peer to authenticate
+# itself with PAP to <n> seconds (0 means no limit).
+#pap-timeout <n>
+
+# Set the CHAP restart interval (retransmission timeout for
+# challenges) to <n> seconds (default 3).
+#chap-restart <n>
+
+# Set the maximum number of CHAP challenge transmissions to <n>
+# (default 10).
+#chap-max-challenge
+
+# If this option is given, pppd will rechallenge the peer every <n>
+# seconds.
+#chap-interval <n>
+
+# With this option, pppd will accept the peer's idea of our local IP
+# address, even if the local IP address was specified in an option.
+#ipcp-accept-local
+
+# With this option, pppd will accept the peer's idea of its (remote) IP
+# address, even if the remote IP address was specified in an option.
+#ipcp-accept-remote
+
+# Disable the IPXCP and IPX protocols.
+# To let pppd pass IPX packets comment this out --- you'll probably also
+# want to install ipxripd, and have the Internal IPX Network option enabled
+# in your kernel. /usr/doc/HOWTO/IPX-HOWTO.gz contains more info.
+noipx
+
+# Exit once a connection has been made and terminated. This is the default,
+# unless the `persist' or `demand' option has been specified.
+#nopersist
+
+# Do not exit after a connection is terminated; instead try to reopen
+# the connection.
+#persist
+
+# Terminate after n consecutive failed connection attempts.
+# A value of 0 means no limit. The default value is 10.
+#maxfail <n>
+
+# Initiate the link only on demand, i.e. when data traffic is present.
+# With this option, the remote IP address must be specified by the user on
+# the command line or in an options file. Pppd will initially configure
+# the interface and enable it for IP traffic without connecting to the peer.
+# When traffic is available, pppd will connect to the peer and perform
+# negotiation, authentication, etc. When this is completed, pppd will
+# commence passing data packets (i.e., IP packets) across the link.
+#demand
+
+# Specifies that pppd should disconnect if the link is idle for <n> seconds.
+# The link is idle when no data packets (i.e. IP packets) are being sent or
+# received. Note: it is not advisable to use this option with the persist
+# option without the demand option. If the active-filter option is given,
+# data packets which are rejected by the specified activity filter also
+# count as the link being idle.
+#idle <n>
+
+# Specifies how many seconds to wait before re-initiating the link after
+# it terminates. This option only has any effect if the persist or demand
+# option is used. The holdoff period is not applied if the link was
+# terminated because it was idle.
+#holdoff <n>
+
+# Wait for up n milliseconds after the connect script finishes for a valid
+# PPP packet from the peer. At the end of this time, or when a valid PPP
+# packet is received from the peer, pppd will commence negotiation by
+# sending its first LCP packet. The default value is 1000 (1 second).
+# This wait period only applies if the connect or pty option is used.
+#connect-delay <n>
+
+# Packet filtering: for more information, see pppd(8)
+# Any packets matching the filter expression will be interpreted as link
+# activity, and will cause a "demand" connection to be activated, and reset
+# the idle connection timer. (idle option)
+# The filter expression is akin to that of tcpdump(1)
+#active-filter <filter-expression>
+
+# uncomment the line below this if you use PPPoE
+#plugin /usr/lib/pppd/plugins/pppoe.so
+
+# ---<End of File>---
diff --git a/abs/core-testing/ppp/plog b/abs/core-testing/ppp/plog
new file mode 100644
index 0000000..84d2c73
--- /dev/null
+++ b/abs/core-testing/ppp/plog
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -s /var/log/ppp.log ]; then
+ exec tail "$@" /var/log/ppp.log
+else
+ exec tail "$@" /var/log/syslog | grep ' \(pppd\|chat\)\['
+fi
diff --git a/abs/core-testing/ppp/poff b/abs/core-testing/ppp/poff
new file mode 100644
index 0000000..8b4dffc
--- /dev/null
+++ b/abs/core-testing/ppp/poff
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+# Written by John Hasler <john@dhh.gt.org> and based on work
+# by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
+
+if [ -x /usr/bin/kill ]; then
+ KILL="/usr/bin/kill"
+else
+ KILL="/bin/kill"
+fi
+SIG=TERM
+DONE="stopped"
+MODE=""
+
+usage ()
+{
+ cat <<!EOF!
+usage: $0 [option] [provider]
+options:
+ -r Cause pppd to drop the line and redial.
+ -d Toggle the state of pppd's debug option.
+ -c Cause pppd to renegotiate compression.
+ -a Stop all pppd's. 'provider' will be ignored.
+ -h Print this help summary and exit.
+ -v Print version and exit.
+ none Stop pppd.
+
+Options may not be combined.
+
+If 'provider' is omitted pppd will be stopped or signalled if and only if
+there is exactly one running unless the '-a' option was given. If
+'provider' is supplied the pppd controlling the connection to that
+provider will be stopped or signalled.
+!EOF!
+}
+
+# Get option. If there are none replace the "?" that getopts puts in
+# FLAG on error with "null".
+getopts rdcavh FLAG
+if [ "$?" -ne 0 ]; then
+ FLAG="null"
+fi
+
+# Check for additional options. Should be none.
+getopts :rdcavh DUMMY
+if [ "$?" -eq 0 ]; then
+ echo "$0: Illegal option -- ${OPTARG}."
+ exit 1
+fi
+
+case $FLAG in
+ "r") SIG=HUP; DONE=signalled; shift ;;
+ "d") SIG=USR1; DONE=signalled; shift ;;
+ "c") SIG=USR2; DONE=signalled; shift ;;
+ "a") MODE="all"; shift ;;
+ "v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
+ "h") usage; exit 0 ;;
+ "?") exit 1;
+esac
+
+# Get the PIDs of all the pppds running. Could also get these from
+# /var/run, but pppd doesn't create .pid files until ppp is up.
+PIDS=`pidof pppd`
+
+# poff is pointless if pppd isn't running.
+if test -z "$PIDS"; then
+ echo "$0: No pppd is running. None ${DONE}."
+ exit 1
+fi
+
+# Find out how many pppd's are running.
+N=`echo "$PIDS" | wc -w`
+
+# If there are no arguments we can't do anything if there is more than one
+# pppd running.
+if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
+ echo "$0: More than one pppd running and no "-a" option and
+no arguments supplied. Nothing ${DONE}."
+ exit 1
+fi
+
+# If either there are no arguments or '-a' was specified kill all the
+# pppd's.
+if test "$#" -eq 0 -o "$MODE" = "all" ; then
+ $KILL -$SIG $PIDS || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+ exit 0
+fi
+
+# There is an argument, so kill the pppd started on that provider.
+PID=`ps axw | grep "[ /]pppd call $1 *\$" | awk '{print $1}'`
+if test -n "$PID" ; then
+ $KILL -$SIG $PID || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+else
+ echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
+ exit 1
+fi
+exit 0
diff --git a/abs/core-testing/ppp/pon b/abs/core-testing/ppp/pon
new file mode 100644
index 0000000..3688505
--- /dev/null
+++ b/abs/core-testing/ppp/pon
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+case "$1" in
+ -*) echo "
+Usage: pon [provider] [arguments]
+
+If you specify one argument, a PPP connection will be started using
+settings from the appropriate file in the /etc/ppp/peers/ directory, and
+any additional arguments supplied will be passed as extra arguments to
+pppd.
+"
+ exit 0
+ ;;
+esac
+
+if [ -z "$1" -a ! -f /etc/ppp/peers/provider ]; then
+ echo "
+Please configure /etc/ppp/peers/provider or use a command line argument to
+use another file in /etc/ppp/peers/ directory.
+"
+ exit 1
+fi
+
+if [ "$1" -a ! -f "/etc/ppp/peers/$1" ]; then
+ echo "
+The file /etc/ppp/peers/$1 does not exist.
+"
+ exit 1
+fi
+
+exec /usr/sbin/pppd call ${@:-provider}
+
diff --git a/abs/core-testing/ppp/pon.1 b/abs/core-testing/ppp/pon.1
new file mode 100644
index 0000000..bb32205
--- /dev/null
+++ b/abs/core-testing/ppp/pon.1
@@ -0,0 +1,121 @@
+.\" This manual is published under the GPL.
+.\" All guidelines specified in the GPL apply here.
+.\" To get an ascii file:
+.\" groff -man -Tascii pon.1 > pon.txt
+.\"
+.TH PON 1 "July 2000" "Debian Project" "Debian PPPD"
+.SH NAME
+pon, poff, plog \- starts up, shuts down or lists the log of PPP connections
+.SH SYNOPSIS
+.B pon
+[ isp-name [ options ] ]
+.br
+.B poff
+[ -r ] [ -d ] [ -c ] [ -a ] [ -h ] [ isp-name ]
+.br
+.B plog
+[ arguments ]
+.SH DESCRIPTION
+This manual page describes the \fBpon\fP, \fBplog\fP and \fBpoff\fP
+scripts, which allow users to control PPP connections.
+..
+.SS pon
+\fBpon\fP, invoked without arguments, runs the \fI/etc/ppp/ppp_on_boot\fP
+file, if it exists and is executable. Otherwise, a PPP connection will be
+started using configuration from \fI/etc/ppp/peers/provider\fP.
+This is the default behaviour unless an \fBisp-name\fP argument is given.
+.PP
+For instance, to use ISP configuration "myisp" run:
+.IP
+pon myisp
+.PP
+\fBpon\fP will then use the options file \fI/etc/ppp/peers/myisp\fP.
+You can pass additional \fBoptions\fP after the ISP name, too.
+\fBpon\fP can be used to run multiple, simultaneous PPP connections.
+..
+.SS poff
+\fBpoff\fP closes a PPP connection. If more than one PPP connection exists,
+the one named in the argument to \fBpoff\fP will be killed, e.g.
+.IP
+poff myprovider2
+.PP
+will terminate the connection to myprovider2, and leave the PPP connections
+to e.g. "myprovider1" or "myprovider3" up and running.
+.PP
+\fBpoff\fP takes the following command line options:
+.RS
+.TP
+.B "\-r"
+causes the connection to be redialed after it is dropped.
+.TP
+.B "\-d"
+toggles the state of pppd's debug option.
+.TP
+.B "\-c"
+causes
+.BR pppd (8)
+to renegotiate compression.
+.TP
+.B "\-a"
+stops all running ppp connections. If the argument \fBisp-name\fP
+is given it will be ignored.
+.TP
+.B "\-h"
+displays help information.
+.TP
+.B "\-v"
+prints the version and exits.
+.PP
+If no argument is given, \fBpoff\fP will stop or signal pppd if and only
+if there is exactly one running. If more than one connection is active,
+it will exit with an error code of 1.
+..
+.SS plog
+\fBplog\fP shows you the last few lines of \fI/var/log/ppp.log\fP. If that
+file doesn't exist, it shows you the last few lines of your
+\fI/var/log/syslog\fP file, but excluding the lines not generated by pppd.
+This script makes use of the
+.BR tail (1)
+command, so arguments that can be passed to
+.BR tail (1)
+can also be passed to \fBplog\fP.
+.PP
+Note: the \fBplog\fP script can only be used by root or another system
+administrator in group "adm", due to security reasons. Also, to have all
+pppd-generated information in one logfile, that plog can show, you need the
+following line in your \fI/etc/syslog.conf\fP file:
+.PP
+local2.* -/var/log/ppp.log
+.RE
+.SH FILES
+.TP
+.I /etc/ppp/options
+PPPd system options file.
+.TP
+.I /etc/ppp/pap-secrets
+System PAP passwords file.
+.TP
+.I /etc/ppp/chap-secrets
+System CHAP passwords file.
+.TP
+.I /etc/ppp/peers/
+Directory holding the peer options files. The default file is called
+\fIprovider\fP.
+.TP
+.I /etc/chatscripts/provider
+The chat script invoked from the default \fI/etc/ppp/peers/provider\fP.
+.TP
+.I /var/log/ppp.log
+The default PPP log file.
+.SH AUTHORS
+The p-commands were written by Christoph Lameter <clameter@debian.org>.
+Updated and revised by Philip Hands <phil@hands.com>.
+.br
+This manual was written by Othmar Pasteka <othmar@tron.at>. Modified
+by Rob Levin <lilo@openprojects.net>, with some extensions taken from
+the old p-commands manual written by John Hasler <jhasler@debian.org>.
+.SH "SEE ALSO"
+.BR pppd (8),
+.BR chat (8),
+.BR tail (1).
+
diff --git a/abs/core-testing/ppp/ppp b/abs/core-testing/ppp/ppp
new file mode 100644
index 0000000..16e01ba
--- /dev/null
+++ b/abs/core-testing/ppp/ppp
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/pppd`
+case "$1" in
+ start)
+ stat_busy "Starting PPP daemon"
+ [ -z "$PID" ] && /usr/bin/pon
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon ppp
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping PPP daemon"
+ [ ! -z "$PID" ] && poff -a &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ppp
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/printproto/PKGBUILD b/abs/core-testing/printproto/PKGBUILD
new file mode 100644
index 0000000..11595db
--- /dev/null
+++ b/abs/core-testing/printproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 567 2008-04-21 09:43:18Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=printproto
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 print extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('7321847a60748b4d2f1fa16db4b6ede8')
diff --git a/abs/core-testing/procinfo/PKGBUILD b/abs/core-testing/procinfo/PKGBUILD
new file mode 100644
index 0000000..ccff37e
--- /dev/null
+++ b/abs/core-testing/procinfo/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=procinfo
+pkgver=19
+pkgrel=11
+pkgdesc="Displays useful information from /proc"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('glibc' 'ncurses' 'perl')
+source=(ftp://ftp.cistron.nl/pub/people/00-OLD/svm/$pkgname-18.tar.gz
+ procinfo-19.2.patch)
+md5sums=('27658d0a69040aca05a65b9888599d50'
+ '6520e2f7d7884069d3ee41251d36a86c')
+
+build() {
+ cd $startdir/src/$pkgname-18
+ patch -Np1 -i ../procinfo-19.2.patch || return 1
+ make LDLIBS=-lncurses || return 1
+ make prefix=$startdir/pkg/usr install
+}
+
diff --git a/abs/core-testing/procinfo/procinfo-19.2.patch b/abs/core-testing/procinfo/procinfo-19.2.patch
new file mode 100644
index 0000000..1fb622a
--- /dev/null
+++ b/abs/core-testing/procinfo/procinfo-19.2.patch
@@ -0,0 +1,325 @@
+diff -ruN procinfo-18/procinfo.c procinfo-19/procinfo.c
+--- procinfo-18/procinfo.c 2001-02-25 12:29:16.000000000 +0100
++++ procinfo-19/procinfo.c 2005-07-02 17:37:31.000000000 +0200
+@@ -5,9 +5,10 @@
+ Displays general info from /proc.
+
+ Date: 1995-07-08 05:30:34
+- Last Change: 2001-02-25 00:27:21
++ Last Change: 2005-07-02 17:25:53
+
+ Copyright (c) 1994-2001 svm@kozmix.cistron.nl
++ Copyright (c) 2004-2005 procinfo@meisel.cc (upgrades for 2.6 kernel)
+
+ This software is released under the GNU Public Licence. See the file
+ `COPYING' for details. Since you're probably running Linux I'm sure
+@@ -26,6 +27,7 @@
+ #include <string.h>
+ #include <termios.h>
+ #include <termcap.h>
++#include <ctype.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/param.h> /* for HZ -- should be in <time.h> ? */
+@@ -72,9 +74,9 @@
+ int nr_irqs = 0;
+ int nr_cpus = 0;
+
+-FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp,
++FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp, *diskstatsfp,
+ *devicesfp, *filesystemsfp, *interruptsfp, *dmafp, *cmdlinefp,
+- *versionfp, *cpuinfofp;
++ *versionfp, *cpuinfofp, *vmstatfp;
+
+ char line[1024], cmdline[1024], booted[40], *version = NULL, *message = NULL;
+
+@@ -89,9 +91,13 @@
+ {
+ unsigned long elapsed;
+ char loadavg[32];
+- int i;
++ int i, havetwosix = 0, lastdisk;
+ static int have_m_c = -1; /* Do we have cache info? */
+ static int have_m_l = -1; /* Do we have new-style-one-datum-per-line? */
++ char devicename[10];
++ char *last;
++ unsigned int q,w,a,s,d,f,g,h,j,k,l,y,x;
++ int disk_counter = 0, ret;
+
+
+ /**** /proc/uptime ****/
+@@ -237,6 +243,50 @@
+
+ printf ("Bootup: %s Load average: %s\n\n", booted, loadavg);
+
++/**** /proc/vmstat ... 2.6.x kernel only ****/
++ if (vmstatfp) {
++ havetwosix = 1;
++ fseek (vmstatfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), vmstatfp)) {
++ char *type = strtok (line, " ");
++ if (ISSTR ("pgpgin")) {
++ new.pgin = VAL;
++ } else if (ISSTR ("pgpgout")) {
++ new.pgout = VAL;
++ } else if (ISSTR ("pgactivate")) {
++ new.pgac = VAL;
++ } else if (ISSTR ("pgdeactivate")) {
++ new.pgdeac = VAL;
++ } else if (ISSTR ("pgfault")) {
++ new.pgfault = VAL;
++ } else if (ISSTR ("pswpin")) {
++ new.swin = VAL;
++ } else if (ISSTR ("pswpout")) {
++ new.swout = VAL;
++ }
++ }
++ }
++
++/**** /proc/diskstats ... 2.6.x kernel only ****/
++ if (diskstatsfp) {
++ havetwosix = 1;
++ fseek (diskstatsfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), diskstatsfp)) {
++ char *type = strtok (line, "\n");
++ ret = sscanf (type, "%d%d%s%d%d%d%d%d%d%d%d%d%d%d", &q, &w, devicename, &a, &s, &d, &f, &g, &h, &j, &k, &l, &y, &x);
++ if (ret != 14) /* Everything with less than 14 elements is not a disk device */
++ continue;
++ last = devicename+strlen(devicename)-1;
++ if (isalpha(*last)) {/* Is the last char is a number ignore it .. like fd0 */
++ if (++disk_counter > 7) /* 7 disks is all we have room for */
++ continue;
++ else {
++ new.disk_r[disk_counter-1] = a;
++ new.disk_w[disk_counter-1] = g;
++ }
++ }
++ }
++ }
+
+ /**** /proc/stat ****/
+
+@@ -249,6 +299,9 @@
+ new.cpu_nice = VAL;
+ new.cpu_sys = VAL;
+ new.cpu_idle = VAL;
++ new.cpu_iowait = VAL;
++ new.cpu_hirq = VAL;
++ new.cpu_sirq = VAL;
+ /*
+ * according to bug #1959, sometimes the cpu_idle
+ * seems to go backwards(!) on SMP boxes. This may
+@@ -262,34 +315,54 @@
+ new.disk[1] = VAL;
+ new.disk[2] = VAL;
+ new.disk[3] = VAL;
++ new.disk[4] = VAL;
++ new.disk[5] = VAL;
++ new.disk[6] = VAL;
+ } else if (ISSTR ("disk_rio") && io_or_blk == 0) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
+ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_rblk") && io_or_blk == 1) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
+ } else if (ISSTR ("disk_wblk") && io_or_blk == 1) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_io:")) {
+- int disk_counter = 0, ret;
+ unsigned int q, w, e, r, t, y, u; /* I'm NOT in the mood today. */
+ char *barf;
+
+ while ((barf = strtok (NULL, " "))) {
+
+- if (++disk_counter > 4) /* 4 is all we have room for */
++ if (++disk_counter > 7) /* 7 is all we have room for */
+ continue;
+
+ ret = sscanf (barf, "(%d,%d):(%d,%d,%d,%d,%d)",
+@@ -374,7 +447,10 @@
+
+ printf ("system: %s %s",
+ hms (bDIFF (cpu_sys)), perc (bDIFF (cpu_sys), elapsed, nr_cpus));
+- printf (" swap in :%9lu", bDIFF (swin));
++ if (havetwosix)
++ printf (" page act:%9lu", bDIFF (pgac));
++ else
++ printf (" swap in :%9lu", bDIFF (swin));
+ if (new.disk_r[2])
+ printf (" disk 3: %8lur%8luw\n", bDIFF (disk_r[2]),
+ bDIFF (disk_w[2]));
+@@ -383,14 +459,53 @@
+ else
+ putchar ('\n');
+
++ if (havetwosix) {
++ printf ("IOwait: %s %s",
++ hms (bDIFF (cpu_iowait)), perc (bDIFF (cpu_iowait), elapsed, nr_cpus));
++ printf (" page dea:%9lu", bDIFF (pgdeac));
++ if (new.disk_r[3])
++ printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
++ bDIFF (disk_w[3]));
++ else if (new.disk[3])
++ printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ else
++ putchar ('\n');
++
++ printf ("hw irq: %s %s",
++ hms (bDIFF (cpu_hirq)), perc (bDIFF (cpu_hirq), elapsed, nr_cpus));
++ printf (" page flt:%9lu", bDIFF (pgfault));
++ if (new.disk_r[4])
++ printf (" disk 5: %8lur%8luw\n", bDIFF (disk_r[4]),
++ bDIFF (disk_w[4]));
++ else if (new.disk[4])
++ printf (" disk 5: %8lu\n", bDIFF (disk[4]));
++ else
++ putchar ('\n');
++
++ printf ("sw irq: %s %s",
++ hms (bDIFF (cpu_sirq)), perc (bDIFF (cpu_sirq), elapsed, nr_cpus));
++ printf (" swap in :%9lu", bDIFF (swin));
++ if (new.disk_r[5])
++ printf (" disk 6: %8lur%8luw\n", bDIFF (disk_r[5]),
++ bDIFF (disk_w[5]));
++ else if (new.disk[5])
++ printf (" disk 6: %8lu\n", bDIFF (disk[5]));
++ else
++ putchar ('\n');
++ }
++
+ printf ("idle : %s %s",
+ hms (bDIFF (cpu_idle)), perc (bDIFF (cpu_idle), elapsed, nr_cpus));
+ printf (" swap out:%9lu", bDIFF (swout));
+- if (new.disk_r[3])
+- printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
+- bDIFF (disk_w[3]));
+- else if (new.disk[3])
+- printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ if (havetwosix)
++ lastdisk = 5;
++ else
++ lastdisk = 2;
++ if (new.disk_r[lastdisk])
++ printf (" disk %d: %8lur%8luw\n", lastdisk+1, bDIFF (disk_r[lastdisk]),
++ bDIFF (disk_w[lastdisk]));
++ else if (new.disk[lastdisk])
++ printf (" disk %d: %8lu\n", lastdisk+1, bDIFF (disk[lastdisk]));
+ else
+ putchar ('\n');
+
+@@ -786,6 +901,8 @@
+ meminfofp = myfopen (PROC_DIR "meminfo");
+ statfp = myfopen (PROC_DIR "stat");
+ /* These may be missing, so check for NULL later. */
++ diskstatsfp = fopen (PROC_DIR "diskstats", "r");
++ vmstatfp = fopen (PROC_DIR "vmstat", "r");
+ modulesfp = fopen (PROC_DIR "modules", "r");
+ devicesfp = fopen (PROC_DIR "devices", "r");
+ filesystemsfp = fopen (PROC_DIR "filesystems", "r");
+@@ -990,6 +1107,9 @@
+ new.disk_r[1] = new.disk_w[1] =
+ new.disk_r[2] = new.disk_w[2] =
+ new.disk_r[3] = new.disk_w[3] = 0;
++ new.disk_r[4] = new.disk_w[4] = 0;
++ new.disk_r[5] = new.disk_w[5] = 0;
++ new.disk_r[6] = new.disk_w[6] = 0;
+ redrawn = 1;
+ message = io_or_blk ? "showing I/O in blocks" :
+ "showing I/O per requests";
+diff -ruN procinfo-18/procinfo.h procinfo-19/procinfo.h
+--- procinfo-18/procinfo.h 2001-02-25 00:30:45.000000000 +0100
++++ procinfo-19/procinfo.h 2005-07-02 17:37:54.000000000 +0200
+@@ -3,9 +3,10 @@
+ procinfo.h
+
+ Date: 1995-04-15 23:54:06
+- Last Change: 2001-02-24 23:43:08
++ Last Change: 2005-07-02 17:37:32
+
+ Copyright (C) 1995-2001 Sander van Malssen <svm@kozmix.cistron.nl>
++ Copyright (c) 2004-2005 procinfo@meisel.cc (upgrades for 2.6 kernel)
+
+ This software is released under the GNU Public Licence. See the file
+ `COPYING' for details. Since you're probably running Linux I'm sure
+@@ -47,7 +48,7 @@
+ new.x)
+
+ #define bDIFF(x) (show_diff ? \
+- (unsigned long) (((new.x)-(old.x))/rate) : \
++ (unsigned long) ((((new.x)-(old.x))/rate)*10) : \
+ (show_from_baseline ? \
+ new.x - base.x : new.x))
+
+@@ -81,11 +82,11 @@
+ unsigned long uptime;
+ long m_to, m_us, m_fr, m_sh, m_bu, m_ca;
+ long s_to, s_us, s_fr;
+- unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle;
+- unsigned long disk[5];
+- unsigned long disk_r[5];
+- unsigned long disk_w[5];
+- unsigned long pgin, pgout, swin, swout;
++ unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle, cpu_iowait, cpu_hirq, cpu_sirq;
++ unsigned long disk[8];
++ unsigned long disk_r[8];
++ unsigned long disk_w[8];
++ unsigned long pgin, pgout, pgac, pgdeac, pgfault, swin, swout;
+ unsigned long *intr; /* Phew. That's better. */
+ unsigned long old_intr;
+ unsigned long ctxt;
+diff -ruN procinfo-18/routines.c procinfo-19/routines.c
+--- procinfo-18/routines.c 2001-02-25 00:30:45.000000000 +0100
++++ procinfo-19/routines.c 2005-07-02 17:18:36.000000000 +0200
+@@ -388,9 +388,13 @@
+ hms (unsigned long t)
+ {
+ unsigned int d, h, m, s;
++ unsigned long q;
+ static char buf[22];
+
+- t = t * 100 / HZ;
++ q = 100 / HZ; /* We need this because the libc does something funny here */
++ /* if we try to use: t = t * 100 / HZ; here! */
++ /* procinfo@meisel.cc 11. Feb. 2004 */
++ t = t * q;
+ d = (int) (t / 8640000);
+ t = t - (long) (d * 8640000);
+ h = (int) (t / 360000);
+@@ -424,6 +428,7 @@
+ /* if (v > 1000)
+ return "+++.+%";
+ else */
++ //sprintf (buf, "%3u.%u%%", v, v % 10);
+ sprintf (buf, "%3u.%u%%", v / 10, v % 10);
+ return buf;
+ }
diff --git a/abs/core-testing/procps/PKGBUILD b/abs/core-testing/procps/PKGBUILD
new file mode 100644
index 0000000..84b063c
--- /dev/null
+++ b/abs/core-testing/procps/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=procps
+pkgver=3.2.7
+pkgrel=13
+pkgdesc="Utilities for monitoring your system and processes on your system"
+arch=(i686 x86_64)
+url="http://procps.sf.net"
+license=('LGPL')
+groups=('base')
+depends=('ncurses')
+backup=('etc/sysctl.conf')
+source=(http://procps.sourceforge.net/procps-$pkgver.tar.gz sysctl.conf)
+md5sums=('f490bca772b16472962c7b9f23b1e97d' '03571b4a24037f8ac283f3d8af02423f')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ /bin/sed -i "s:\$(lib64):lib:" Makefile
+ make || return 1
+ make DESTDIR=$startdir/pkg ldconfig=/bin/true install
+ install -D -m644 ../sysctl.conf $startdir/pkg/etc/sysctl.conf
+ install -d $startdir/pkg/usr/include/proc
+ install -m644 proc/*.h $startdir/pkg/usr/include/proc
+}
diff --git a/abs/core-testing/procps/sysctl.conf b/abs/core-testing/procps/sysctl.conf
new file mode 100644
index 0000000..8e725de
--- /dev/null
+++ b/abs/core-testing/procps/sysctl.conf
@@ -0,0 +1,13 @@
+#
+# Kernel sysctl configuration
+#
+
+# Disable packet forwarding
+net.ipv4.ip_forward=0
+
+# Disable the magic-sysrq key
+kernel.sysrq = 0
+
+# Enable TCP SYN Cookie Protection
+net.ipv4.tcp_syncookies = 1
+
diff --git a/abs/core-testing/psmisc/PKGBUILD b/abs/core-testing/psmisc/PKGBUILD
new file mode 100644
index 0000000..c6df5b5
--- /dev/null
+++ b/abs/core-testing/psmisc/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+
+pkgname=psmisc
+pkgver=22.6
+pkgrel=10
+pkgdesc="Miscellaneous procfs tools"
+arch=('i686' 'x86_64')
+url="http://psmisc.sourceforge.net"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'ncurses')
+source=(http://downloads.sourceforge.net/psmisc/$pkgname-$pkgver.tar.gz)
+md5sums=('2e81938855cf5cc38856bd4a31d79a4c')
+sha1sums=('cb15c23e9cfe618e9de5f066525bce7dc7b77421')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+# we use sysvinit's pidof program
+ rm -f $startdir/pkg/usr/man/man1/pidof.1
+ rm -f $startdir/pkg/usr/bin/pidof
+}
diff --git a/abs/core-testing/pycairo/PKGBUILD b/abs/core-testing/pycairo/PKGBUILD
new file mode 100644
index 0000000..283ed43
--- /dev/null
+++ b/abs/core-testing/pycairo/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1020 2008-04-27 18:50:59Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pycairo
+pkgver=1.4.12
+pkgrel=1
+pkgdesc="Python bindings for the cairo graphics library"
+arch=(i686 x86_64)
+license=('LGPL' 'MPL')
+depends=('python>=2.5' 'cairo>=1.6.4')
+options=('!libtool')
+source=(http://cairographics.org/releases/${pkgname}-${pkgver}.tar.gz)
+url="http://www.cairographics.org/"
+md5sums=('c63199d35b1e1d3c5133509f315f70d7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/pygobject/PKGBUILD b/abs/core-testing/pygobject/PKGBUILD
new file mode 100644
index 0000000..159de7a
--- /dev/null
+++ b/abs/core-testing/pygobject/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 2539 2008-06-06 13:24:21Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pygobject
+pkgver=2.14.2
+pkgrel=1
+pkgdesc="Python bindings for GObject"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('python>=2.5.1-5' 'glib2>=2.16.3')
+source=(http://ftp.gnome.org/pub/gnome/sources/pygobject/2.14/${pkgname}-${pkgver}.tar.bz2)
+options=('!libtool')
+url="http://www.pygtk.org/"
+md5sums=('0e9e9300e81847f4f7266f49d3bebbaf')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/pygtk/PKGBUILD b/abs/core-testing/pygtk/PKGBUILD
new file mode 100644
index 0000000..71bec7d
--- /dev/null
+++ b/abs/core-testing/pygtk/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=pygtk
+pkgver=2.12.1
+pkgrel=1
+pkgdesc="Python bindings for the GTK widget set"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('libglade>=2.6.2' 'pycairo>=1.4.0' 'pygobject>=2.14.1' 'python-numeric>=24.2-2' 'gtk2>=2.12.0')
+options=('!libtool')
+url="http://www.pygtk.org/"
+source=(http://ftp.gnome.org/pub/gnome/sources/pygtk/2.12/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a816346d750d61e3fa67a200e4292694')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/SUBDIRS = codegen . $(GTK_SUBDIR) examples tests docs/SUBDIRS = codegen . $(GTK_SUBDIR) examples tests/' Makefile.in
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m644 gtk/gtk-extrafuncs.defs ${startdir}/pkg/usr/share/pygtk/2.0/defs/
+}
diff --git a/abs/core-testing/python-numeric/PKGBUILD b/abs/core-testing/python-numeric/PKGBUILD
new file mode 100644
index 0000000..9ec5dec
--- /dev/null
+++ b/abs/core-testing/python-numeric/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor orelien <aurelien.foret@wanadoo.fr>
+
+pkgname=python-numeric
+pkgver=24.2
+pkgrel=2
+pkgdesc="Numerical Python adds a fast array facility to the Python language."
+arch=(i686 x86_64)
+depends=('python>=2.5')
+source=(http://heanet.dl.sourceforge.net/sourceforge/numpy/Numeric-${pkgver}.tar.gz)
+replaces=('numeric')
+url="http://numeric.scipy.org/"
+md5sums=(2ae672656e06716a149acb048cca3093)
+
+build() {
+ cd ${startdir}/src/Numeric-${pkgver}
+ python setup.py install --root=${startdir}/pkg
+}
diff --git a/abs/core-testing/python-pexpect/PKGBUILD b/abs/core-testing/python-pexpect/PKGBUILD
new file mode 100644
index 0000000..638fc1f
--- /dev/null
+++ b/abs/core-testing/python-pexpect/PKGBUILD
@@ -0,0 +1,17 @@
+# Maintainer: Aaron Schaefer <aaron@elasticdog.com>
+pkgname=python-pexpect
+pkgver=2.3
+pkgrel=1
+pkgdesc='A pure Python Expect-like module'
+arch=('i686' 'x86_64')
+url='http://pexpect.sourceforge.net/'
+license=('MIT')
+depends=('python')
+source=("http://downloads.sourceforge.net/sourceforge/pexpect/pexpect-$pkgver.tar.gz")
+md5sums=('bf107cf54e67bc6dec5bea1f3e6a65c3')
+
+build() {
+ cd $startdir/src/pexpect-$pkgver
+ python setup.py install --root=$startdir/pkg || return 1
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core-testing/python/PKGBUILD b/abs/core-testing/python/PKGBUILD
new file mode 100644
index 0000000..bc812de
--- /dev/null
+++ b/abs/core-testing/python/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id: PKGBUILD 4689 2008-07-08 21:50:56Z andyrtr $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributer: Jason Chu <jason@archlinux.org>
+
+pkgname=python
+pkgver=2.5.2
+pkgrel=5
+_pybasever=2.5
+pkgdesc="A high-level scripting language"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://www.python.org"
+depends=('db4.5' 'bzip2' 'gdbm' 'openssl>=0.9.8d' 'zlib')
+makedepends=('tk>=8.5.0' 'sqlite3')
+provides=('python-elementree' 'python-ctypes')
+replaces=('python-elementree' 'python-ctypes')
+install=python.install
+source=(http://www.python.org/ftp/python/${pkgver}/Python-${pkgver}.tar.bz2
+ modulator-launcher
+ pynche-launcher
+ Python-2.4.4-gdbm-1.patch
+ python-2.5.CVE-2007-4965-int-overflow.patch
+ python2.6-set_wakeup_fd4.patch
+ Python-2.5.2-idlelib.patch)
+md5sums=('afb5451049eda91fbde10bd5a4b7fadc'
+ 'faa0d4b947bfe67fc8684b5c464f46f2'
+ '60a44af1d8af276274e20c564c0f3d8b'
+ '2b61e06365e9fb5f3af22d946efa8be6'
+ '491416c1b337fc61b6cdf5981d895a7d'
+ 'ec56710959deb01b5fa35829cafec6a3'
+ 'e6441e0b013ac64795221154e0495e10')
+
+build() {
+ cd ${startdir}/src/Python-${pkgver}
+ patch -Np1 -i ${srcdir}/Python-2.4.4-gdbm-1.patch || return 1
+ # fix http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4965
+ patch -Np1 -i ${srcdir}/python-2.5.CVE-2007-4965-int-overflow.patch || return 1
+
+ patch -Np2 -i ${srcdir}/python2.6-set_wakeup_fd4.patch || return 1
+ patch -Np0 -i ${srcdir}/Python-2.5.2-idlelib.patch
+
+ ./configure --prefix=/usr --enable-shared --with-threads --enable-unicode
+ make || return 1
+ make DESTDIR=${pkgdir} install
+
+ rm ${pkgdir}/usr/bin/python
+ ln -sf python${_pybasever} ${pkgdir}/usr/bin/python
+
+ # Install the tools
+ #modulator
+ install -m755 ${srcdir}/modulator-launcher ${pkgdir}/usr/bin/modulator
+ cp -r Tools/modulator ${pkgdir}/usr/lib/python${_pybasever}/site-packages/
+
+ #pynche
+ install -m755 ${srcdir}/pynche-launcher ${pkgdir}/usr/bin/pynche
+ rm -f Tools/pynche/*.pyw
+ cp -r Tools/pynche ${pkgdir}/usr/lib/python${_pybasever}/site-packages/
+
+ #gettext
+ install -m755 Tools/i18n/pygettext.py ${pkgdir}/usr/bin/
+ install -m755 Tools/i18n/msgfmt.py ${pkgdir}/usr/bin/
+
+ mkdir -p ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts
+ install Tools/scripts/README ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts/
+ install Tools/scripts/*py ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts/
+
+ # license
+ install -D -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/python/Python-2.4.4-gdbm-1.patch b/abs/core-testing/python/Python-2.4.4-gdbm-1.patch
new file mode 100644
index 0000000..4b6c7eb
--- /dev/null
+++ b/abs/core-testing/python/Python-2.4.4-gdbm-1.patch
@@ -0,0 +1,17 @@
+--- Python-2.4.4/setup.py.orig 2007-01-14 12:50:46.000000000 -0600
++++ Python-2.4.4/setup.py 2007-01-14 12:54:02.000000000 -0600
+@@ -685,12 +685,12 @@
+ if self.compiler.find_library_file(lib_dirs, 'ndbm'):
+ ndbm_libs = ['ndbm']
+ else:
+- ndbm_libs = []
++ ndbm_libs = ['gdbm', 'gdbm_compat']
+ exts.append( Extension('dbm', ['dbmmodule.c'],
+ define_macros=[('HAVE_NDBM_H',None)],
+ libraries = ndbm_libs ) )
+ elif (self.compiler.find_library_file(lib_dirs, 'gdbm')
+- and find_file("gdbm/ndbm.h", inc_dirs, []) is not None):
++ and find_file("ndbm.h", inc_dirs, []) is not None):
+ exts.append( Extension('dbm', ['dbmmodule.c'],
+ define_macros=[('HAVE_GDBM_NDBM_H',None)],
+ libraries = ['gdbm'] ) )
diff --git a/abs/core-testing/python/Python-2.5.2-idlelib.patch b/abs/core-testing/python/Python-2.5.2-idlelib.patch
new file mode 100644
index 0000000..50c987a
--- /dev/null
+++ b/abs/core-testing/python/Python-2.5.2-idlelib.patch
@@ -0,0 +1,17 @@
+--- Lib/idlelib/WidgetRedirector.py.orig 2008-04-23 23:39:57.000000000 -0700
++++ Lib/idlelib/WidgetRedirector.py 2008-04-23 23:46:55.000000000 -0700
+@@ -53,7 +53,13 @@
+ if m:
+ return m(*args)
+ else:
+- return self.tk.call((self.orig, cmd) + args)
++ #return self.tk.call((self.orig, cmd) + args)
++ r = self.tk.call((self.orig, cmd) + args)
++ if isinstance(r, tuple):
++ # convert to string ourselves so we get a Tcl list
++ # that can be converted back into a tuple
++ r = ' '.join(map(str, r))
++ return r
+ except TclError:
+ return ""
+
diff --git a/abs/core-testing/python/db4.6-setup.py-detection.patch b/abs/core-testing/python/db4.6-setup.py-detection.patch
new file mode 100644
index 0000000..873f175
--- /dev/null
+++ b/abs/core-testing/python/db4.6-setup.py-detection.patch
@@ -0,0 +1,11 @@
+--- setup.py 2008-02-23 20:58:52.000000000 +0000
++++ setup.py.new 2008-02-23 21:04:18.000000000 +0000
+@@ -608,7 +608,7 @@
+ # a release. Most open source OSes come with one or more
+ # versions of BerkeleyDB already installed.
+
+- max_db_ver = (4, 5)
++ max_db_ver = (4, 6)
+ # NOTE: while the _bsddb.c code links against BerkeleyDB 4.6.x
+ # we leave that version disabled by default as it has proven to be
+ # quite a buggy library release on many platforms.
diff --git a/abs/core-testing/python/modulator-launcher b/abs/core-testing/python/modulator-launcher
new file mode 100644
index 0000000..732f05c
--- /dev/null
+++ b/abs/core-testing/python/modulator-launcher
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec /usr/lib/python2.5/site-packages/modulator/modulator.py
diff --git a/abs/core-testing/python/pynche-launcher b/abs/core-testing/python/pynche-launcher
new file mode 100644
index 0000000..ab3a6d8
--- /dev/null
+++ b/abs/core-testing/python/pynche-launcher
@@ -0,0 +1,3 @@
+#!/bin/bash
+/usr/lib/python2.5/site-packages/pynche/pynche
+
diff --git a/abs/core-testing/python/python-2.5.CVE-2007-4965-int-overflow.patch b/abs/core-testing/python/python-2.5.CVE-2007-4965-int-overflow.patch
new file mode 100644
index 0000000..843acbf
--- /dev/null
+++ b/abs/core-testing/python/python-2.5.CVE-2007-4965-int-overflow.patch
@@ -0,0 +1,217 @@
+diff -rup Python-2.5-orig/Modules/imageop.c Python-2.5/Modules/imageop.c
+--- Python-2.5-orig/Modules/imageop.c 2006-01-19 01:09:39.000000000 -0500
++++ Python-2.5/Modules/imageop.c 2007-09-19 16:42:44.000000000 -0400
+@@ -78,7 +78,7 @@ imageop_crop(PyObject *self, PyObject *a
+ char *cp, *ncp;
+ short *nsp;
+ Py_Int32 *nlp;
+- int len, size, x, y, newx1, newx2, newy1, newy2;
++ int len, size, x, y, newx1, newx2, newy1, newy2, nlen;
+ int ix, iy, xstep, ystep;
+ PyObject *rv;
+
+@@ -90,13 +90,19 @@ imageop_crop(PyObject *self, PyObject *a
+ PyErr_SetString(ImageopError, "Size should be 1, 2 or 4");
+ return 0;
+ }
+- if ( len != size*x*y ) {
++ /* ( len != size*x*y ) */
++ if ( size != ((len / x) / y) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+ xstep = (newx1 < newx2)? 1 : -1;
+ ystep = (newy1 < newy2)? 1 : -1;
+
++ nlen = (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size;
++ if ( size != ((nlen / (abs(newx2-newx1)+1)) / (abs(newy2-newy1)+1)) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ rv = PyString_FromStringAndSize(NULL,
+ (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size);
+ if ( rv == 0 )
+@@ -132,7 +138,7 @@ imageop_scale(PyObject *self, PyObject *
+ char *cp, *ncp;
+ short *nsp;
+ Py_Int32 *nlp;
+- int len, size, x, y, newx, newy;
++ int len, size, x, y, newx, newy, nlen;
+ int ix, iy;
+ int oix, oiy;
+ PyObject *rv;
+@@ -145,12 +151,18 @@ imageop_scale(PyObject *self, PyObject *
+ PyErr_SetString(ImageopError, "Size should be 1, 2 or 4");
+ return 0;
+ }
+- if ( len != size*x*y ) {
++ /* ( len != size*x*y ) */
++ if ( size != ((len / x) / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
++ nlen = newx*newy*size;
++ if ( size != ((nlen / newx) / newy) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+
+- rv = PyString_FromStringAndSize(NULL, newx*newy*size);
++ rv = PyString_FromStringAndSize(NULL, nlen);
+ if ( rv == 0 )
+ return 0;
+ ncp = (char *)PyString_AsString(rv);
+@@ -190,7 +202,8 @@ imageop_tovideo(PyObject *self, PyObject
+ PyErr_SetString(ImageopError, "Size should be 1 or 4");
+ return 0;
+ }
+- if ( maxx*maxy*width != len ) {
++ /* if ( maxx*maxy*width != len ) */
++ if ( maxx != ((len / maxy) / maxz) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -240,7 +253,8 @@ imageop_grey2mono(PyObject *self, PyObje
+ if ( !PyArg_ParseTuple(args, "s#iii", &cp, &len, &x, &y, &tres) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -281,7 +295,8 @@ imageop_grey2grey4(PyObject *self, PyObj
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -320,7 +335,8 @@ imageop_grey2grey2(PyObject *self, PyObj
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -358,7 +374,8 @@ imageop_dither2mono(PyObject *self, PyOb
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -404,7 +421,8 @@ imageop_dither2grey2(PyObject *self, PyO
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -443,7 +461,11 @@ imageop_mono2grey(PyObject *self, PyObje
+ if ( !PyArg_ParseTuple(args, "s#iiii", &cp, &len, &x, &y, &v0, &v1) )
+ return 0;
+
+- nlen = x*y;
++ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+7)/8 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -481,6 +503,10 @@ imageop_grey22grey(PyObject *self, PyObj
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+3)/4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -517,6 +543,10 @@ imageop_grey42grey(PyObject *self, PyObj
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+1)/2 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -554,6 +584,10 @@ imageop_rgb2rgb8(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen*4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -598,6 +632,10 @@ imageop_rgb82rgb(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -648,6 +686,10 @@ imageop_rgb2grey(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen*4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -693,6 +735,10 @@ imageop_grey2rgb(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+diff -rup Python-2.5-orig/Modules/rgbimgmodule.c Python-2.5/Modules/rgbimgmodule.c
+--- Python-2.5-orig/Modules/rgbimgmodule.c 2006-08-11 23:18:50.000000000 -0400
++++ Python-2.5/Modules/rgbimgmodule.c 2007-09-19 17:00:06.000000000 -0400
+@@ -299,6 +299,11 @@ longimagedata(PyObject *self, PyObject *
+ xsize = image.xsize;
+ ysize = image.ysize;
+ zsize = image.zsize;
++ tablen = xsize * ysize * zsize * sizeof(Py_Int32);
++ if (xsize != (((tablen / ysize) / zsize) / sizeof(Py_Int32))) {
++ PyErr_NoMemory();
++ goto finally;
++ }
+ if (rle) {
+ tablen = ysize * zsize * sizeof(Py_Int32);
+ starttab = (Py_Int32 *)malloc(tablen);
diff --git a/abs/core-testing/python/python.install b/abs/core-testing/python/python.install
new file mode 100644
index 0000000..f00a943
--- /dev/null
+++ b/abs/core-testing/python/python.install
@@ -0,0 +1,13 @@
+post_install() {
+ cat << _EOF
+
+==> Python requires "tk" to use IDLE, pynche and modulator
+
+_EOF
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/python/python2.6-set_wakeup_fd4.patch b/abs/core-testing/python/python2.6-set_wakeup_fd4.patch
new file mode 100644
index 0000000..b945a26
--- /dev/null
+++ b/abs/core-testing/python/python2.6-set_wakeup_fd4.patch
@@ -0,0 +1,94 @@
+--- python/trunk/Modules/signalmodule.c 2007/12/10 23:00:12 59460
++++ python/trunk/Modules/signalmodule.c 2007/12/19 19:41:06 59574
+@@ -12,6 +12,8 @@
+
+ #include <signal.h>
+
++#include <sys/stat.h>
++
+ #ifndef SIG_ERR
+ #define SIG_ERR ((PyOS_sighandler_t)(-1))
+ #endif
+@@ -75,6 +77,8 @@
+ PyObject *func;
+ } Handlers[NSIG];
+
++static sig_atomic_t wakeup_fd = -1;
++
+ /* Speed up sigcheck() when none tripped */
+ static volatile sig_atomic_t is_tripped = 0;
+
+@@ -128,6 +132,8 @@
+ cleared in PyErr_CheckSignals() before .tripped. */
+ is_tripped = 1;
+ Py_AddPendingCall(checksignals_witharg, NULL);
++ if (wakeup_fd != -1)
++ write(wakeup_fd, "\0", 1);
+ #ifdef WITH_THREAD
+ }
+ #endif
+@@ -267,6 +273,50 @@
+ anything else -- the callable Python object used as a handler");
+
+
++static PyObject *
++signal_set_wakeup_fd(PyObject *self, PyObject *args)
++{
++ struct stat buf;
++ int fd, old_fd;
++ if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd))
++ return NULL;
++#ifdef WITH_THREAD
++ if (PyThread_get_thread_ident() != main_thread) {
++ PyErr_SetString(PyExc_ValueError,
++ "set_wakeup_fd only works in main thread");
++ return NULL;
++ }
++#endif
++ if (fd != -1 && fstat(fd, &buf) != 0) {
++ PyErr_SetString(PyExc_ValueError, "invalid fd");
++ return NULL;
++ }
++ old_fd = wakeup_fd;
++ wakeup_fd = fd;
++ return PyLong_FromLong(old_fd);
++}
++
++PyDoc_STRVAR(set_wakeup_fd_doc,
++"set_wakeup_fd(fd) -> fd\n\
++\n\
++Sets the fd to be written to (with '\\0') when a signal\n\
++comes in. A library can use this to wakeup select or poll.\n\
++The previous fd is returned.\n\
++\n\
++The fd must be non-blocking.");
++
++/* C API for the same, without all the error checking */
++int
++PySignal_SetWakeupFd(int fd)
++{
++ int old_fd = wakeup_fd;
++ if (fd < 0)
++ fd = -1;
++ wakeup_fd = fd;
++ return old_fd;
++}
++
++
+ /* List of functions defined in the module */
+ static PyMethodDef signal_methods[] = {
+ #ifdef HAVE_ALARM
+@@ -274,11 +324,12 @@
+ #endif
+ {"signal", signal_signal, METH_VARARGS, signal_doc},
+ {"getsignal", signal_getsignal, METH_VARARGS, getsignal_doc},
++ {"set_wakeup_fd", signal_set_wakeup_fd, METH_VARARGS, set_wakeup_fd_doc},
+ #ifdef HAVE_PAUSE
+ {"pause", (PyCFunction)signal_pause,
+ METH_NOARGS,pause_doc},
+ #endif
+- {"default_int_handler", signal_default_int_handler,
++ {"default_int_handler", signal_default_int_handler,
+ METH_VARARGS, default_int_handler_doc},
+ {NULL, NULL} /* sentinel */
+ };
diff --git a/abs/core-testing/qt3/PKGBUILD b/abs/core-testing/qt3/PKGBUILD
new file mode 100644
index 0000000..870305a
--- /dev/null
+++ b/abs/core-testing/qt3/PKGBUILD
@@ -0,0 +1,101 @@
+# $Id: PKGBUILD 4788 2008-07-10 10:21:45Z pierre $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+pkgname=qt3
+pkgver=3.3.8
+pkgrel=8
+pkgdesc="The QT gui toolkit."
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.trolltech.com/products/qt/index.html"
+pkgfqn=qt-x11-free-${pkgver}
+install=qt.install
+depends=('libpng' 'libjpeg' 'libxmu' 'libxcursor' 'libxinerama' 'mesa' \
+ 'libxft' 'libxrandr')
+makedepends=('mysql' 'postgresql>=8.2.3' 'sqlite3' 'unixodbc' 'libmng')
+source=(ftp://ftp.trolltech.com/qt/source/${pkgfqn}.tar.bz2 qt.profile \
+ qt-copy-kde-patches.tar.bz2 qt-patches.tar.bz2 utf8-bug-qt3.diff \
+ qt-font-default-subst.diff mysql.patch)
+options=(!libtool)
+md5sums=('cf3c43a7dfde5bfb76f8001102fe6e85'
+ 'f72d1eb4eb49b9a9467c1f6035194266'
+ 'f2a2dbdbfee9422c90efc3ef3f86197c'
+ 'c8937968e9807b3cdcdf0505728d99ce'
+ 'f6b3b39040f2b8f19ba1cf1445468c28'
+ '9370d82e85f2c799335ed0dcc1d53189'
+ '7d40ed1bd40d33d8b9b27a2076a5d22a')
+
+# qt-copy-kde-patches come from http://websvn.kde.org/trunk/qt-copy/patches/
+# other qt-patches come from fedora and gentoo
+
+build() {
+ unset QMAKESPEC
+ export QTDIR=$startdir/src/$pkgfqn
+ export PATH=${QTDIR}/bin:${PATH}
+ export LD_LIBRARY_PATH=${QTDIR}/lib:${LD_LIBRARY_PATH}
+ export QMAKESPEC=$QTDIR/mkspecs/linux-g++
+ cd $startdir/src/$pkgfqn
+ # apply qt patches from kde.org
+ for i in ../qt-copy-kde-patches/*; do
+ patch -Np0 -i $i || return 1
+ done
+ # apply other qt patches and one security fix from debian/gentoo
+ for i in ../qt-patches/*; do
+ patch -Np1 -i $i || return 1
+ done
+ # fix utf8 bug
+ patch -Np0 -i ../utf8-bug-qt3.diff || return 1
+ # fix asia fonts
+ patch -Np0 -i ../qt-font-default-subst.diff || return 1
+ # fix segfaults on exit when using mysql DB driver
+ patch -Np0 -i ../mysql.patch || return 1
+ # start compiling qt
+ sed -i 's|-cp -P -f|-cp -L -f|' qmake/Makefile.unix
+ rm -rf doc/html examples tutorial
+ sed -i "s|sub-tutorial sub-examples||" Makefile
+ sed -i "s|-O2|$CXXFLAGS|" mkspecs/linux-g++/qmake.conf
+ sed -i "s|-I. |$CXXFLAGS -I. |" qmake/Makefile.unix
+ sed -i "s|read acceptance|acceptance=yes|" configure
+
+ # remove unwanted mkspecs
+ rm -rf mkspecs/{*aix*,*bsd*,cygwin*,dgux*,darwin*,hpux*,hurd*,irix*,lynxos*,macx*,qnx*,reliant*,sco*,solaris*,tru64*,unixware*,win32*}
+
+ if [ "$CARCH" = "x86_64" ]; then
+ export ARCH="-64"
+ else unset ARCH
+ fi
+
+ ./configure -prefix /opt/qt -platform linux-g++$ARCH \
+ -system-zlib -qt-gif -release -shared -sm -nis -thread -stl \
+ -{system-lib,plugin-imgfmt-}{png,jpeg,mng} \
+ -no-g++-exceptions -plugin-sql-{mysql,psql,sqlite,odbc}
+
+ # fix /opt/qt/lib path
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/src/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/designer/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/editor/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/assistant/lib/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/uilib/Makefile
+
+ cd $startdir/src/$pkgfqn
+ make -C qmake || return 1
+ cd $startdir/src/$pkgfqn/plugins/src/sqldrivers/mysql
+ $startdir/src/$pkgfqn/bin/qmake -o Makefile "INCPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient" mysql.pro
+ cd $startdir/src/$pkgfqn/plugins/src/sqldrivers/psql
+ $startdir/src/$pkgfqn/bin/qmake -o Makefile "INCPATH+=/usr/src/include /usr/include/postgresql/server" "LIBS+=-L/usr/lib -lpq" psql.pro
+
+ cd $startdir/src/$pkgfqn
+ # fix the broken makefiles
+ #sed -i 's|[[:space:]]*strip.*doc/html.*$|#|g' src/Makefile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install
+ rm -rf $startdir/pkg/opt/qt/{phrasebooks,templates,translations}
+ sed -i "s|-L$startdir/src/$pkgfqn/lib ||g" $startdir/pkg/opt/qt/lib/*.prl
+ install -D -m755 qmake/qmake $startdir/pkg/opt/qt/bin/qmake
+ install -D -m755 $startdir/qt.profile $startdir/pkg/etc/profile.d/qt3.sh
+ rm -f $startdir/pkg/opt/qt/mkspecs/linux-g++$ARCH/linux-g++$ARCH
+
+ # install man pages
+ mkdir -p $startdir/pkg/opt/qt/man
+ cp -r $startdir/src/$pkgfqn/doc/man/{man1,man3} $startdir/pkg/opt/qt/man/
+}
diff --git a/abs/core-testing/qt3/mysql.patch b/abs/core-testing/qt3/mysql.patch
new file mode 100644
index 0000000..5f61edc
--- /dev/null
+++ b/abs/core-testing/qt3/mysql.patch
@@ -0,0 +1,47 @@
+--- src/sql/drivers/mysql/qsql_mysql.cpp
++++ src/sql/drivers/mysql/qsql_mysql.cpp
+@@ -37,7 +37,6 @@
+ #include "qsql_mysql.h"
+ #include <private/qsqlextension_p.h>
+
+-#include <qapplication.h>
+ #include <qdatetime.h>
+ #include <qvaluevector.h>
+ #include <qsqlrecord.h>
+@@ -341,14 +340,6 @@ int QMYSQLResult::numRowsAffected()
+ }
+
+ /////////////////////////////////////////////////////////
+-static void qServerEnd()
+-{
+-#ifndef Q_NO_MYSQL_EMBEDDED
+-# if MYSQL_VERSION_ID >= 40000
+- mysql_server_end();
+-# endif // MYSQL_VERSION_ID
+-#endif // Q_NO_MYSQL_EMBEDDED
+-}
+
+ static void qServerInit()
+ {
+@@ -366,9 +357,7 @@ static void qServerInit()
+ qWarning( "QMYSQLDriver::qServerInit: unable to start server." );
+ # endif
+ }
+- qAddPostRoutine(qServerEnd);
+ init = TRUE;
+-
+ # endif // MYSQL_VERSION_ID
+ #endif // Q_NO_MYSQL_EMBEDDED
+ }
+@@ -411,6 +400,11 @@ QMYSQLDriver::~QMYSQLDriver()
+ QSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );
+ delete ext;
+ }
++#ifndef Q_NO_MYSQL_EMBEDDED
++# if MYSQL_VERSION_ID > 40000
++ mysql_server_end();
++# endif
++#endif
+ }
+
+ bool QMYSQLDriver::hasFeature( DriverFeature f ) const
diff --git a/abs/core-testing/qt3/qt-copy-kde-patches.tar.bz2 b/abs/core-testing/qt3/qt-copy-kde-patches.tar.bz2
new file mode 100644
index 0000000..19d8999
--- /dev/null
+++ b/abs/core-testing/qt3/qt-copy-kde-patches.tar.bz2
Binary files differ
diff --git a/abs/core-testing/qt3/qt-font-default-subst.diff b/abs/core-testing/qt3/qt-font-default-subst.diff
new file mode 100644
index 0000000..3e286f7
--- /dev/null
+++ b/abs/core-testing/qt3/qt-font-default-subst.diff
@@ -0,0 +1,77 @@
+--- src/kernel/qfontdatabase_x11.cpp
++++ src/kernel/qfontdatabase_x11.cpp
+@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s
+ if (script == QFont::Latin)
+ // add Euro character
+ FcCharSetAddChar(cs, 0x20ac);
+- if (script == QFont::Han_SimplifiedChinese)
+- FcCharSetAddChar(cs, 0x3400);
+- if (script == QFont::Han_TraditionalChinese){
+- FcCharSetAddChar(cs, 0x3435);
+- FcCharSetAddChar(cs, 0xE000);
+- FcCharSetAddChar(cs, 0xF6B1);
+- }
+- if (script == QFont::MiscellaneousSymbols)
+- FcCharSetAddChar(cs, 0x2714);
+ FcPatternAddCharSet(pattern, FC_CHARSET, cs);
+ FcCharSetDestroy(cs);
+ }
+@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c
+ FcPatternPrint(pattern);
+ #endif
+
++ // XftFontMatch calls the right ConfigSubstitute variants, but as we use
++ // FcFontMatch/Sort here we have to do it manually.
+ FcConfigSubstitute(0, pattern, FcMatchPattern);
++ XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern);
++
+ // qDebug("1: pattern contains:");
+ // FcPatternPrint(pattern);
+
+@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c
+ value.u.s = (const FcChar8 *)cs.data();
+ FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue);
+ }
+-#ifdef FONT_MATCH_DEBUG
+- printf("final pattern contains:\n");
+- FcPatternPrint(pattern);
+-#endif
+ }
+
+ if (script != QFont::Unicode) {
+@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c
+ if (script == QFont::Latin)
+ // add Euro character
+ FcCharSetAddChar(cs, 0x20ac);
+- if (script == QFont::Han_SimplifiedChinese)
+- FcCharSetAddChar(cs, 0x3400);
+- if (script == QFont::Han_TraditionalChinese) {
+- FcCharSetAddChar(cs, 0x3435);
+- FcCharSetAddChar(cs, 0xE000);
+- FcCharSetAddChar(cs, 0xF6B1);
+- }
+- if (script == QFont::MiscellaneousSymbols)
+- FcCharSetAddChar(cs, 0x2714);
+ FcPatternAddCharSet(pattern, FC_CHARSET, cs);
+ FcCharSetDestroy(cs);
+ }
+
++#ifdef FONT_MATCH_DEBUG
++ printf("final pattern contains:\n");
++ FcPatternPrint(pattern);
++#endif
++
+ QFontEngine *fe = 0;
+
+ for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) {
+--- src/kernel/qfontdatabase.cpp
++++ src/kernel/qfontdatabase.cpp
+@@ -554,7 +554,7 @@ static const unsigned short sample_chars
+ // GeometricSymbols,
+ { 0x2500, 0x0 },
+ // MiscellaneousSymbols,
+- { 0x2640, 0x0 },
++ { 0x2640, 0x2714, 0x0 },
+ // EnclosedAndSquare,
+ { 0x2460, 0x0 },
+ // Braille,
diff --git a/abs/core-testing/qt3/qt-patches.tar.bz2 b/abs/core-testing/qt3/qt-patches.tar.bz2
new file mode 100644
index 0000000..4e46465
--- /dev/null
+++ b/abs/core-testing/qt3/qt-patches.tar.bz2
Binary files differ
diff --git a/abs/core-testing/qt3/qt.install b/abs/core-testing/qt3/qt.install
new file mode 100644
index 0000000..4e2d6b6
--- /dev/null
+++ b/abs/core-testing/qt3/qt.install
@@ -0,0 +1,24 @@
+post_install() {
+ if ! [ `grep '/opt/qt/lib' etc/ld.so.conf` ]; then
+ echo "/opt/qt/lib" >>etc/ld.so.conf
+ sbin/ldconfig -r .
+ fi
+ echo "INFORMATION:"
+ echo "Documentation is seperated it's called qt3-doc"
+}
+
+post_upgrade() {
+ /bin/true
+}
+
+pre_remove() {
+ cat etc/ld.so.conf | grep -v '/opt/qt/lib' >/tmp/.pacqt
+ mv /tmp/.pacqt etc/ld.so.conf
+ chmod 644 etc/ld.so.conf
+ sbin/ldconfig -r .
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/qt3/qt.profile b/abs/core-testing/qt3/qt.profile
new file mode 100644
index 0000000..ed4d232
--- /dev/null
+++ b/abs/core-testing/qt3/qt.profile
@@ -0,0 +1,4 @@
+export QTDIR=/opt/qt
+export QT_XFT=true
+export PATH=$PATH:$QTDIR/bin
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt/lib/pkgconfig
diff --git a/abs/core-testing/qt3/utf8-bug-qt3.diff b/abs/core-testing/qt3/utf8-bug-qt3.diff
new file mode 100644
index 0000000..43e84a9
--- /dev/null
+++ b/abs/core-testing/qt3/utf8-bug-qt3.diff
@@ -0,0 +1,101 @@
+--- src/codecs/qutfcodec.cpp
++++ src/codecs/qutfcodec.cpp
+@@ -154,6 +154,7 @@
+
+ class QUtf8Decoder : public QTextDecoder {
+ uint uc;
++ uint min_uc;
+ int need;
+ bool headerDone;
+ public:
+@@ -167,8 +168,9 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uchar ch;
++ int error = -1;
+ for (int i=0; i<len; i++) {
+- ch = *chars++;
++ ch = chars[i];
+ if (need) {
+ if ( (ch&0xc0) == 0x80 ) {
+ uc = (uc << 6) | (ch & 0x3f);
+@@ -182,6 +184,8 @@
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
+ headerDone = TRUE;
++ } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ *qch++ = QChar::replacement;
+ } else {
+ if (headerDone || QChar(uc) != QChar::byteOrderMark)
+ *qch++ = uc;
+@@ -190,6 +194,7 @@
+ }
+ } else {
+ // error
++ i = error;
+ *qch++ = QChar::replacement;
+ need = 0;
+ }
+@@ -200,12 +205,21 @@
+ } else if ((ch & 0xe0) == 0xc0) {
+ uc = ch & 0x1f;
+ need = 1;
++ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
++ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
++ error = i;
++ min_uc = 0x10000;
++ } else {
++ // error
++ *qch++ = QChar::replacement;
+ }
+ }
+ }
+--- src/tools/qstring.cpp
++++ src/tools/qstring.cpp
+@@ -5805,6 +5805,7 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uint uc = 0;
++ uint min_uc = 0;
+ int need = 0;
+ int error = -1;
+ uchar ch;
+@@ -5822,6 +5823,12 @@
+ unsigned short low = uc%0x400 + 0xdc00;
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
++ } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ // overlong seqence, UTF16 surrogate or BOM
++ i = error;
++ qch = addOne(qch, result);
++ *qch++ = QChar(0xdbff);
++ *qch++ = QChar(0xde00+((uchar)utf8[i]));
+ } else {
+ *qch++ = uc;
+ }
+@@ -5844,14 +5851,17 @@
+ uc = ch & 0x1f;
+ need = 1;
+ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
+ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
+ error = i;
++ min_uc = 0x10000;
+ } else {
+ // Error
+ qch = addOne(qch, result);
diff --git a/abs/core-testing/randrproto/PKGBUILD b/abs/core-testing/randrproto/PKGBUILD
new file mode 100644
index 0000000..d81ad0e
--- /dev/null
+++ b/abs/core-testing/randrproto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4331 2008-07-06 17:35:48Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=randrproto
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X11 RandR extension wire protocol"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0458f24d6a77ff4bc5182816f482afa1')
+
+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-testing/readline/PKGBUILD b/abs/core-testing/readline/PKGBUILD
new file mode 100644
index 0000000..0eb9b8f
--- /dev/null
+++ b/abs/core-testing/readline/PKGBUILD
@@ -0,0 +1,59 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=readline
+pkgver=5.2
+pkgrel=16
+pkgdesc="GNU readline library"
+arch=(i686 x86_64)
+url="ftp://ftp.cwru.edu/pub/bash/"
+license=('GPL')
+groups=('base')
+depends=(glibc ncurses)
+backup=("etc/inputrc")
+source=(ftp://ftp.cwru.edu/pub/bash/readline-${pkgver}.tar.gz
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-001
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-002
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-003
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-004
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-005
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-006
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-007
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-008
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-009
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-010
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-011
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-012
+ inputrc)
+md5sums=('e39331f32ad14009b9ff49cc10c5e751'
+ '9d4d41622aa9b230c57f68548ce87d8f'
+ 'f03e512d14206e37f7d6a748b56b9476'
+ '252b42d8750f1a94b6bdf086612dceb2'
+ 'a32333c2e603a3ed250514e91050e552'
+ '8106796c09b789523a3a78ab69c04b6d'
+ '512188e2bf0837f7eca19dbf71f182ae'
+ 'ac17aca62eb6fb398c9f2fe9de540aff'
+ '2484c392db021905f112cf97a94dfd4c'
+ 'fc6eb35d07914fae5c57d49c12483ff7'
+ '7a2bf3dc7ac7680b1461a5701100e91b'
+ 'ef6cef6822663470f6ac8c517c5a7ec6'
+ 'e3e9f441c8111589855bc363e5640f6c'
+ 'e5fc955f56d9fa5beb871f3279b8fa8b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ for i in 001 002 003 004 005 006 007 008 009 010 011 012; do
+ patch -Np2 -i ${startdir}/src/readline52-${i} || return 1
+ done
+ ./configure --prefix=/usr
+ make SHLIB_LIBS=-lncurses || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ mkdir -p ${startdir}/pkg/etc
+ install -m644 ../inputrc ${startdir}/pkg/etc/inputrc
+
+ cd ${startdir}/pkg
+ mkdir -pv lib
+ mv -v usr/lib/lib{readline,history}.so.5* lib/
+ ln -svf ../../lib/libreadline.so.5 usr/lib/libreadline.so
+ ln -svf ../../lib/libhistory.so.5 usr/lib/libhistory.so
+}
diff --git a/abs/core-testing/readline/inputrc b/abs/core-testing/readline/inputrc
new file mode 100644
index 0000000..6ad9dd9
--- /dev/null
+++ b/abs/core-testing/readline/inputrc
@@ -0,0 +1,40 @@
+# do not bell on tab-completion
+#set bell-style none
+
+set meta-flag on
+set input-meta on
+set convert-meta off
+set output-meta on
+
+$if mode=emacs
+
+# for linux console and RH/Debian xterm
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+"\e[5~": beginning-of-history
+"\e[6~": end-of-history
+"\e[7~": beginning-of-line
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+"\e[5C": forward-word
+"\e[5D": backward-word
+"\e\e[C": forward-word
+"\e\e[D": backward-word
+"\e[1;5C": forward-word
+"\e[1;5D": backward-word
+
+# for rxvt
+"\e[8~": end-of-line
+
+# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
+"\eOH": beginning-of-line
+"\eOF": end-of-line
+
+# for freebsd console
+"\e[H": beginning-of-line
+"\e[F": end-of-line
+$endif
+
+# Include user-specific configuration
+$include ~/.inputrc
+
diff --git a/abs/core-testing/readline/readline.install b/abs/core-testing/readline/readline.install
new file mode 100644
index 0000000..6b5a1dc
--- /dev/null
+++ b/abs/core-testing/readline/readline.install
@@ -0,0 +1,9 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">> You can safely ignore any \"cannot open shared object\" errors you see above"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/recordproto/PKGBUILD b/abs/core-testing/recordproto/PKGBUILD
new file mode 100644
index 0000000..c71b2de
--- /dev/null
+++ b/abs/core-testing/recordproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=recordproto
+pkgver=1.13.2
+pkgrel=1
+pkgdesc="X11 Record extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0ed4706564a34fc2aff724aa16d3ff00')
+sha1sums=('833ef2bc4b084281f85eeba5d4ba03441bd3a534')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/reiserfsprogs/PKGBUILD b/abs/core-testing/reiserfsprogs/PKGBUILD
new file mode 100644
index 0000000..6e3cb6d
--- /dev/null
+++ b/abs/core-testing/reiserfsprogs/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=reiserfsprogs
+pkgver=3.6.20
+pkgrel=12
+pkgdesc="Reiserfs utilities"
+arch=(i686 x86_64)
+url="http://www.namesys.com"
+license=('GPL')
+groups=('base')
+depends=('e2fsprogs')
+source=(ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz
+ #namesys server is down atm
+ #ftp://ftp.namesys.com/pub/$pkgname/$pkgname-$pkgver.tar.gz
+)
+md5sums=('3b3392f59c5d302cf858bc4cf194b258')
+
+build() {
+ export MAKEFLAGS="-j1"
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/sbin $startdir/pkg
+ #ln -s reiserfsck $startdir/pkg/sbin/fsck.reiserfs
+}
diff --git a/abs/core-testing/renderproto/PKGBUILD b/abs/core-testing/renderproto/PKGBUILD
new file mode 100644
index 0000000..8d140d3
--- /dev/null
+++ b/abs/core-testing/renderproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=renderproto
+pkgver=0.9.3
+pkgrel=1
+pkgdesc="X11 Render extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('598bc9a493deee2e48e4434e94467189')
diff --git a/abs/core-testing/rp-pppoe/PKGBUILD b/abs/core-testing/rp-pppoe/PKGBUILD
new file mode 100644
index 0000000..1b4724d
--- /dev/null
+++ b/abs/core-testing/rp-pppoe/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 5374 2008-07-15 17:18:23Z daniel $
+# Contributor: orelien <aurelien.foret@wanadoo.fr>
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=rp-pppoe
+pkgver=3.10
+pkgrel=10
+pkgdesc="Roaring Penguin's Point-to-Point Protocol over Ethernet client"
+arch=(i686 x86_64)
+url="http://www.roaringpenguin.com/pppoe/"
+license=('GPL')
+groups=('base')
+depends=('ppp')
+options=('!makeflags')
+backup=(etc/ppp/pppoe.conf etc/ppp/firewall-standalone etc/ppp/firewall-masq etc/ppp/pppoe-server-options)
+source=(http://www.roaringpenguin.com/files/download/rp-pppoe-$pkgver.tar.gz adsl)
+md5sums=('d58a13cc4185bca6121a606ff456dec0'
+ 'adace1ad441aa88dcb3db52fb7f9c97f')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver/src
+ ./configure --prefix=/usr --enable-plugin=/ppp-2.4.4
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -m755 -D ../../adsl $startdir/pkg/etc/rc.d/adsl
+}
diff --git a/abs/core-testing/rp-pppoe/adsl b/abs/core-testing/rp-pppoe/adsl
new file mode 100755
index 0000000..33bd918
--- /dev/null
+++ b/abs/core-testing/rp-pppoe/adsl
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting ADSL Connection"
+ /usr/sbin/pppoe-start &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon adsl
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping ADSL Connection"
+ /usr/sbin/pppoe-stop &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon adsl
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/rt2500/PKGBUILD b/abs/core-testing/rt2500/PKGBUILD
new file mode 100644
index 0000000..67798b6
--- /dev/null
+++ b/abs/core-testing/rt2500/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=rt2500
+_kernver=2.6.26-ARCH
+pkgver=1.1.0_B4
+_pkgver=1.1.0-b4
+pkgrel=24
+pkgdesc="Drivers for rt2500 chipset wireless cards"
+url="http://rt2x00.serialmonkey.com/wiki/index.php/Main_Page"
+license=('GPL2')
+depends=('kernel26>=2.6.26-1' 'kernel26<2.6.27')
+arch=('i686' 'x86_64')
+install=rt2500.install
+source=(http://downloads.sourceforge.net/sourceforge/rt2400/rt2500-${_pkgver}.tar.gz \
+ kernel-2.6.22.patch kernel-2.6.24.patch)
+md5sums=('83b8b9a091705c08d99268479f3b3b6a'
+ 'a74f8e9cbba7b29620f11fba8fd7c50d'
+ 'ccf0da667cc6642dacf39dea1aac254f')
+
+build() {
+ cd $startdir/src/rt2500-$_pkgver/
+ patch -Np1 -i ../kernel-2.6.22.patch || return 1
+ patch -Np1 -i ../kernel-2.6.24.patch || return 1
+ cd $startdir/src/rt2500-$_pkgver/Module
+ make KERNDIR=/lib/modules/$_kernver/build || return 1
+ install -D -m 644 rt2500.ko $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/rt2500.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core-testing/rt2500/kernel-2.6.22.patch b/abs/core-testing/rt2500/kernel-2.6.22.patch
new file mode 100644
index 0000000..530bf0a
--- /dev/null
+++ b/abs/core-testing/rt2500/kernel-2.6.22.patch
@@ -0,0 +1,24125 @@
+diff -Nur rt2500-1.1.0-b4/CHANGELOG rt2500-cvs-2007061011/CHANGELOG
+--- rt2500-1.1.0-b4/CHANGELOG 2006-06-17 22:12:57.000000000 +0200
++++ rt2500-cvs-2007061011/CHANGELOG 2007-06-08 20:09:53.000000000 +0200
+@@ -1,28 +1,40 @@
+-/***************************************************************************
+- * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net *
+- * *
+- * 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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2003. *
++/***************************************************************************
++ * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net *
++ * *
++ * 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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2003. *
+ ***************************************************************************/
+-
++
+ Changelog for 802.11g rt2500 driver and RAConfig2500 Utility
+
+- Version: 1.1.0-beta4
++ Version: CVS
++ * Forward compatibility with kernel 2.6.22 pci bus driver i/f changes
++ and skbuff changes.
++ * SIOCGIWSCAN returns EAGAIN until all channels scanned.
++ * More cruft removal.
++ * Updated base code to Ralink 1.4.6.6 driver version.
++ * In-kernel compile support (Bug #1642144): Declare debug var
++ as static. Implement as bit mask.
++ * Fix to WPA RSN IE mismatched bug
++ * Compatibility fixes for kernels >= 2.6.19
++ * Fix essid truncation on kernels >= 2.6.19
++
++ Version: 1.1.0-beta4
+ * Fix pre-up config panic (1307957)
+ * Fix noise levels in scan results (1246025)
+ * RFMON TX Support for aircrack
+@@ -31,9 +43,9 @@
+ * Promisc/Monitor code missing node->AP packets (1009565)
+ * Channel set in RFMON before ifup now works (1254806)
+ * Fixes for suspend/resume
+- * Enhancement for RaConfig to support non-ra? interfaces
++ * Enhancement for RaConfig to support non-ra? interfaces
+ * Channel list updates after region change
+- * TxPower changes to support dBm values
++ * TxPower changes to support dBm values
+ * Pre-up panic for setting WirelessMode
+ * Cleanup of iwpriv syntax
+ * Fixes for SMP support (1099089)
+@@ -47,7 +59,7 @@
+ * Power Saving Modes (1159331)
+ * Bridging with other interfaces
+
+- Version: 1.1.0-beta3
++ Version: 1.1.0-beta3
+ * PCI Management Cleanup
+ * Fix for RaConfig crashing on statistics (ChrisH)
+ * Big-Endian fix for RaConfig
+@@ -63,15 +75,15 @@
+ * Fix iwconfig - Link Quality(means Channel Quality), Signal level and Noise level.
+ * Fix iwlist ra0 channel - print out
+
+- Version: 1.1.0-beta2
++ Version: 1.1.0-beta2
+ * Removed Kernel tainting
+ * Updated all file headers for this project
+ * kmalloc stability fixes to the MLME
+ * Cleanup on memory management functions (NDisFill/Move/Zero)
+ * Rollin of Robin Cornelius RFMon Patch
+ * RFMon support through iwconfig mode
+- * Debugging and general logging cleanups
+- * Rolling of changes in Ralink 1.4.5.0 release
++ * Debugging and general logging cleanups
++ * Rolling of changes in Ralink 1.4.5.0 release
+ * Debug switching
+ * Spinlock changes for stability
+ * GCC 3.4 compilation
+@@ -86,5 +98,5 @@
+
+ Version: 1.0.0
+ * Initial baseline code from Ralink (1.4.4.0)
+-
+-
++
++
+diff -Nur rt2500-1.1.0-b4/LICENSE rt2500-cvs-2007061011/LICENSE
+--- rt2500-1.1.0-b4/LICENSE 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/LICENSE 2007-05-29 05:57:52.000000000 +0200
+@@ -1,340 +1,340 @@
+- GNU GENERAL PUBLIC LICENSE
+- Version 2, June 1991
+-
+- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- Everyone is permitted to copy and distribute verbatim copies
+- of this license document, but changing it is not allowed.
+-
+- Preamble
+-
+- The licenses for most software are designed to take away your
+-freedom to share and change it. By contrast, the GNU General Public
+-License is intended to guarantee your freedom to share and change free
+-software--to make sure the software is free for all its users. This
+-General Public License applies to most of the Free Software
+-Foundation's software and to any other program whose authors commit to
+-using it. (Some other Free Software Foundation software is covered by
+-the GNU Library General Public License instead.) You can apply it to
+-your programs, too.
+-
+- When we speak of free software, we are referring to freedom, not
+-price. Our General Public Licenses are designed to make sure that you
+-have the freedom to distribute copies of free software (and charge for
+-this service if you wish), that you receive source code or can get it
+-if you want it, that you can change the software or use pieces of it
+-in new free programs; and that you know you can do these things.
+-
+- To protect your rights, we need to make restrictions that forbid
+-anyone to deny you these rights or to ask you to surrender the rights.
+-These restrictions translate to certain responsibilities for you if you
+-distribute copies of the software, or if you modify it.
+-
+- For example, if you distribute copies of such a program, whether
+-gratis or for a fee, you must give the recipients all the rights that
+-you have. You must make sure that they, too, receive or can get the
+-source code. And you must show them these terms so they know their
+-rights.
+-
+- We protect your rights with two steps: (1) copyright the software, and
+-(2) offer you this license which gives you legal permission to copy,
+-distribute and/or modify the software.
+-
+- Also, for each author's protection and ours, we want to make certain
+-that everyone understands that there is no warranty for this free
+-software. If the software is modified by someone else and passed on, we
+-want its recipients to know that what they have is not the original, so
+-that any problems introduced by others will not reflect on the original
+-authors' reputations.
+-
+- Finally, any free program is threatened constantly by software
+-patents. We wish to avoid the danger that redistributors of a free
+-program will individually obtain patent licenses, in effect making the
+-program proprietary. To prevent this, we have made it clear that any
+-patent must be licensed for everyone's free use or not licensed at all.
+-
+- The precise terms and conditions for copying, distribution and
+-modification follow.
+-
+- GNU GENERAL PUBLIC LICENSE
+- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+-
+- 0. This License applies to any program or other work which contains
+-a notice placed by the copyright holder saying it may be distributed
+-under the terms of this General Public License. The "Program", below,
+-refers to any such program or work, and a "work based on the Program"
+-means either the Program or any derivative work under copyright law:
+-that is to say, a work containing the Program or a portion of it,
+-either verbatim or with modifications and/or translated into another
+-language. (Hereinafter, translation is included without limitation in
+-the term "modification".) Each licensee is addressed as "you".
+-
+-Activities other than copying, distribution and modification are not
+-covered by this License; they are outside its scope. The act of
+-running the Program is not restricted, and the output from the Program
+-is covered only if its contents constitute a work based on the
+-Program (independent of having been made by running the Program).
+-Whether that is true depends on what the Program does.
+-
+- 1. You may copy and distribute verbatim copies of the Program's
+-source code as you receive it, in any medium, provided that you
+-conspicuously and appropriately publish on each copy an appropriate
+-copyright notice and disclaimer of warranty; keep intact all the
+-notices that refer to this License and to the absence of any warranty;
+-and give any other recipients of the Program a copy of this License
+-along with the Program.
+-
+-You may charge a fee for the physical act of transferring a copy, and
+-you may at your option offer warranty protection in exchange for a fee.
+-
+- 2. You may modify your copy or copies of the Program or any portion
+-of it, thus forming a work based on the Program, and copy and
+-distribute such modifications or work under the terms of Section 1
+-above, provided that you also meet all of these conditions:
+-
+- a) You must cause the modified files to carry prominent notices
+- stating that you changed the files and the date of any change.
+-
+- b) You must cause any work that you distribute or publish, that in
+- whole or in part contains or is derived from the Program or any
+- part thereof, to be licensed as a whole at no charge to all third
+- parties under the terms of this License.
+-
+- c) If the modified program normally reads commands interactively
+- when run, you must cause it, when started running for such
+- interactive use in the most ordinary way, to print or display an
+- announcement including an appropriate copyright notice and a
+- notice that there is no warranty (or else, saying that you provide
+- a warranty) and that users may redistribute the program under
+- these conditions, and telling the user how to view a copy of this
+- License. (Exception: if the Program itself is interactive but
+- does not normally print such an announcement, your work based on
+- the Program is not required to print an announcement.)
+-
+-These requirements apply to the modified work as a whole. If
+-identifiable sections of that work are not derived from the Program,
+-and can be reasonably considered independent and separate works in
+-themselves, then this License, and its terms, do not apply to those
+-sections when you distribute them as separate works. But when you
+-distribute the same sections as part of a whole which is a work based
+-on the Program, the distribution of the whole must be on the terms of
+-this License, whose permissions for other licensees extend to the
+-entire whole, and thus to each and every part regardless of who wrote it.
+-
+-Thus, it is not the intent of this section to claim rights or contest
+-your rights to work written entirely by you; rather, the intent is to
+-exercise the right to control the distribution of derivative or
+-collective works based on the Program.
+-
+-In addition, mere aggregation of another work not based on the Program
+-with the Program (or with a work based on the Program) on a volume of
+-a storage or distribution medium does not bring the other work under
+-the scope of this License.
+-
+- 3. You may copy and distribute the Program (or a work based on it,
+-under Section 2) in object code or executable form under the terms of
+-Sections 1 and 2 above provided that you also do one of the following:
+-
+- a) Accompany it with the complete corresponding machine-readable
+- source code, which must be distributed under the terms of Sections
+- 1 and 2 above on a medium customarily used for software interchange; or,
+-
+- b) Accompany it with a written offer, valid for at least three
+- years, to give any third party, for a charge no more than your
+- cost of physically performing source distribution, a complete
+- machine-readable copy of the corresponding source code, to be
+- distributed under the terms of Sections 1 and 2 above on a medium
+- customarily used for software interchange; or,
+-
+- c) Accompany it with the information you received as to the offer
+- to distribute corresponding source code. (This alternative is
+- allowed only for noncommercial distribution and only if you
+- received the program in object code or executable form with such
+- an offer, in accord with Subsection b above.)
+-
+-The source code for a work means the preferred form of the work for
+-making modifications to it. For an executable work, complete source
+-code means all the source code for all modules it contains, plus any
+-associated interface definition files, plus the scripts used to
+-control compilation and installation of the executable. However, as a
+-special exception, the source code distributed need not include
+-anything that is normally distributed (in either source or binary
+-form) with the major components (compiler, kernel, and so on) of the
+-operating system on which the executable runs, unless that component
+-itself accompanies the executable.
+-
+-If distribution of executable or object code is made by offering
+-access to copy from a designated place, then offering equivalent
+-access to copy the source code from the same place counts as
+-distribution of the source code, even though third parties are not
+-compelled to copy the source along with the object code.
+-
+- 4. You may not copy, modify, sublicense, or distribute the Program
+-except as expressly provided under this License. Any attempt
+-otherwise to copy, modify, sublicense or distribute the Program is
+-void, and will automatically terminate your rights under this License.
+-However, parties who have received copies, or rights, from you under
+-this License will not have their licenses terminated so long as such
+-parties remain in full compliance.
+-
+- 5. You are not required to accept this License, since you have not
+-signed it. However, nothing else grants you permission to modify or
+-distribute the Program or its derivative works. These actions are
+-prohibited by law if you do not accept this License. Therefore, by
+-modifying or distributing the Program (or any work based on the
+-Program), you indicate your acceptance of this License to do so, and
+-all its terms and conditions for copying, distributing or modifying
+-the Program or works based on it.
+-
+- 6. Each time you redistribute the Program (or any work based on the
+-Program), the recipient automatically receives a license from the
+-original licensor to copy, distribute or modify the Program subject to
+-these terms and conditions. You may not impose any further
+-restrictions on the recipients' exercise of the rights granted herein.
+-You are not responsible for enforcing compliance by third parties to
+-this License.
+-
+- 7. If, as a consequence of a court judgment or allegation of patent
+-infringement or for any other reason (not limited to patent issues),
+-conditions are imposed on you (whether by court order, agreement or
+-otherwise) that contradict the conditions of this License, they do not
+-excuse you from the conditions of this License. If you cannot
+-distribute so as to satisfy simultaneously your obligations under this
+-License and any other pertinent obligations, then as a consequence you
+-may not distribute the Program at all. For example, if a patent
+-license would not permit royalty-free redistribution of the Program by
+-all those who receive copies directly or indirectly through you, then
+-the only way you could satisfy both it and this License would be to
+-refrain entirely from distribution of the Program.
+-
+-If any portion of this section is held invalid or unenforceable under
+-any particular circumstance, the balance of the section is intended to
+-apply and the section as a whole is intended to apply in other
+-circumstances.
+-
+-It is not the purpose of this section to induce you to infringe any
+-patents or other property right claims or to contest validity of any
+-such claims; this section has the sole purpose of protecting the
+-integrity of the free software distribution system, which is
+-implemented by public license practices. Many people have made
+-generous contributions to the wide range of software distributed
+-through that system in reliance on consistent application of that
+-system; it is up to the author/donor to decide if he or she is willing
+-to distribute software through any other system and a licensee cannot
+-impose that choice.
+-
+-This section is intended to make thoroughly clear what is believed to
+-be a consequence of the rest of this License.
+-
+- 8. If the distribution and/or use of the Program is restricted in
+-certain countries either by patents or by copyrighted interfaces, the
+-original copyright holder who places the Program under this License
+-may add an explicit geographical distribution limitation excluding
+-those countries, so that distribution is permitted only in or among
+-countries not thus excluded. In such case, this License incorporates
+-the limitation as if written in the body of this License.
+-
+- 9. The Free Software Foundation may publish revised and/or new versions
+-of the General Public License from time to time. Such new versions will
+-be similar in spirit to the present version, but may differ in detail to
+-address new problems or concerns.
+-
+-Each version is given a distinguishing version number. If the Program
+-specifies a version number of this License which applies to it and "any
+-later version", you have the option of following the terms and conditions
+-either of that version or of any later version published by the Free
+-Software Foundation. If the Program does not specify a version number of
+-this License, you may choose any version ever published by the Free Software
+-Foundation.
+-
+- 10. If you wish to incorporate parts of the Program into other free
+-programs whose distribution conditions are different, write to the author
+-to ask for permission. For software which is copyrighted by the Free
+-Software Foundation, write to the Free Software Foundation; we sometimes
+-make exceptions for this. Our decision will be guided by the two goals
+-of preserving the free status of all derivatives of our free software and
+-of promoting the sharing and reuse of software generally.
+-
+- NO WARRANTY
+-
+- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+-REPAIR OR CORRECTION.
+-
+- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+-POSSIBILITY OF SUCH DAMAGES.
+-
+- END OF TERMS AND CONDITIONS
+-
+- How to Apply These Terms to Your New Programs
+-
+- If you develop a new program, and you want it to be of the greatest
+-possible use to the public, the best way to achieve this is to make it
+-free software which everyone can redistribute and change under these terms.
+-
+- To do so, attach the following notices to the program. It is safest
+-to attach them to the start of each source file to most effectively
+-convey the exclusion of warranty; and each file should have at least
+-the "copyright" line and a pointer to where the full notice is found.
+-
+- &lt;one line to give the program's name and a brief idea of what it does.&gt;
+- Copyright (C) &lt;year&gt; &lt;name of author&gt;
+-
+- 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
+-
+-
+-Also add information on how to contact you by electronic and paper mail.
+-
+-If the program is interactive, make it output a short notice like this
+-when it starts in an interactive mode:
+-
+- Gnomovision version 69, Copyright (C) year name of author
+- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+- This is free software, and you are welcome to redistribute it
+- under certain conditions; type `show c' for details.
+-
+-The hypothetical commands `show w' and `show c' should show the appropriate
+-parts of the General Public License. Of course, the commands you use may
+-be called something other than `show w' and `show c'; they could even be
+-mouse-clicks or menu items--whatever suits your program.
+-
+-You should also get your employer (if you work as a programmer) or your
+-school, if any, to sign a "copyright disclaimer" for the program, if
+-necessary. Here is a sample; alter the names:
+-
+- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+- `Gnomovision' (which makes passes at compilers) written by James Hacker.
+-
+- &lt;signature of Ty Coon&gt;, 1 April 1989
+- Ty Coon, President of Vice
+-
+-This General Public License does not permit incorporating your program into
+-proprietary programs. If your program is a subroutine library, you may
+-consider it more useful to permit linking proprietary applications with the
+-library. If this is what you want to do, use the GNU Library General
++ GNU GENERAL PUBLIC LICENSE
++ Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users. This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it. (Some other Free Software Foundation software is covered by
++the GNU Library General Public License instead.) You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++ To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have. You must make sure that they, too, receive or can get the
++source code. And you must show them these terms so they know their
++rights.
++
++ We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++ Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software. If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++ Finally, any free program is threatened constantly by software
++patents. We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary. To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ GNU GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License. The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language. (Hereinafter, translation is included without limitation in
++the term "modification".) Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++ 1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++ 2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) You must cause the modified files to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ b) You must cause any work that you distribute or publish, that in
++ whole or in part contains or is derived from the Program or any
++ part thereof, to be licensed as a whole at no charge to all third
++ parties under the terms of this License.
++
++ c) If the modified program normally reads commands interactively
++ when run, you must cause it, when started running for such
++ interactive use in the most ordinary way, to print or display an
++ announcement including an appropriate copyright notice and a
++ notice that there is no warranty (or else, saying that you provide
++ a warranty) and that users may redistribute the program under
++ these conditions, and telling the user how to view a copy of this
++ License. (Exception: if the Program itself is interactive but
++ does not normally print such an announcement, your work based on
++ the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++ a) Accompany it with the complete corresponding machine-readable
++ source code, which must be distributed under the terms of Sections
++ 1 and 2 above on a medium customarily used for software interchange; or,
++
++ b) Accompany it with a written offer, valid for at least three
++ years, to give any third party, for a charge no more than your
++ cost of physically performing source distribution, a complete
++ machine-readable copy of the corresponding source code, to be
++ distributed under the terms of Sections 1 and 2 above on a medium
++ customarily used for software interchange; or,
++
++ c) Accompany it with the information you received as to the offer
++ to distribute corresponding source code. (This alternative is
++ allowed only for noncommercial distribution and only if you
++ received the program in object code or executable form with such
++ an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it. For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable. However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License. Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++ 5. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Program or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++ 6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++ 7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all. For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded. In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++ 9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation. If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++ 10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission. For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this. Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++ NO WARRANTY
++
++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ &lt;one line to give the program's name and a brief idea of what it does.&gt;
++ Copyright (C) &lt;year&gt; &lt;name of author&gt;
++
++ 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
++
++
++Also add information on how to contact you by electronic and paper mail.
++
++If the program is interactive, make it output a short notice like this
++when it starts in an interactive mode:
++
++ Gnomovision version 69, Copyright (C) year name of author
++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, the commands you use may
++be called something other than `show w' and `show c'; they could even be
++mouse-clicks or menu items--whatever suits your program.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the program, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
++ `Gnomovision' (which makes passes at compilers) written by James Hacker.
++
++ &lt;signature of Ty Coon&gt;, 1 April 1989
++ Ty Coon, President of Vice
++
++This General Public License does not permit incorporating your program into
++proprietary programs. If your program is a subroutine library, you may
++consider it more useful to permit linking proprietary applications with the
++library. If this is what you want to do, use the GNU Library General
+ Public License instead of this License.
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/Makefile rt2500-cvs-2007061011/Module/Makefile
+--- rt2500-1.1.0-b4/Module/Makefile 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/Makefile 2007-05-29 05:54:38.000000000 +0200
+@@ -1,39 +1,39 @@
+-###########################################################################
+-# RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. #
+-# #
+-# Licensed under the GNU GPL #
+-# Original code supplied under license from RaLink Inc, 2004. #
+-###########################################################################
+-
+-###########################################################################
+-# Module Name: Makefile
+-#
+-# Abstract: Makefile for rt2500 kernel module
+-#
+-# Revision History:
+-# Who When What
+-# -------- ----------- -----------------------------
+-# MarkW 8th Dec 04 Rewrite of Makefile
++###########################################################################
++# RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. #
++# #
++# Licensed under the GNU GPL #
++# Original code supplied under license from RaLink Inc, 2004. #
++###########################################################################
++
++###########################################################################
++# Module Name: Makefile
++#
++# Abstract: Makefile for rt2500 kernel module
++#
++# Revision History:
++# Who When What
++# -------- ----------- -----------------------------
++# MarkW 8th Dec 04 Rewrite of Makefile
+ # AmirS 1st Jan 05 Update for gmake compat
+ # MarkW 20th Jan 05 Fixed permissions on directory
+ # MichalL 5th Mar 05 Module installation fixes
+ # MarkW 29th Jul 05 Allow install dir override
+-###########################################################################
++###########################################################################
+
+
+
+@@ -41,7 +41,7 @@
+
+ MODULE_NAME := rt2500
+
+-#PATCHLEVEL := 6
++#PATCHLEVEL := 6
+ #KERNDIR=/usr/src/linux-2.6
+ #MODDIR=/lib/modules/2.6.12/extra
+
+@@ -94,7 +94,7 @@
+ $(LD) $(EXTRA_LDFLAGS) -r -o $@ $($(MODULE_NAME)-objs)
+ endif
+
+-KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(PWD) $(KERNEL_OUTPUT)
++KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(CURDIR) $(KERNEL_OUTPUT)
+
+ module:
+ @$(MAKE) $(KBUILD_PARAMS) modules; \
+@@ -110,22 +110,29 @@
+ exit 1; \
+ fi
+
++debugfs:
++ @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=-I$(src) -DRT2500_DBG -DRT2X00DEBUGFS' modules; \
++ if ! [ -f $(MODULE_OBJECT) ]; then \
++ echo "$(MODULE_OBJECT) failed to build!"; \
++ exit 1; \
++ fi
++
+ clean:
+ @rm -f $(RESMAN_GLUE_OBJS) $(RESMAN_CORE_OBJS) .*.{cmd,flags}
+ @rm -f $(MODULE_NAME).{o,ko,mod.{o,c}} built-in.o $(VERSION_HEADER) *~
+- @rm -fr .tmp_versions
++ @rm -fr .tmp_versions Module.symvers
+
+ modules_install:
+-ifeq ($(PATCHLEVEL),4)
+- if ! [ -f $(MODULE_OBJECT) ]; then \
+- module; \
++ @if ! [ -f $(MODULE_OBJECT) ]; then \
++ $(MAKE) module; \
+ fi
++ifeq ($(PATCHLEVEL),4)
+ @echo "install '$(MODULE_OBJECT)' to $(MODULE_ROOT)"
+ install -m 755 -o 0 -g 0 -d $(MODULE_ROOT)
+ install -m 644 -o 0 -g 0 $(MODULE_OBJECT) $(MODULE_ROOT)
+- /sbin/depmod -a
++ /sbin/depmod -ae
+ else
+- echo "2.6 module install"
++ @echo "2.6 module install"
+ make $(KBUILD_PARAMS) modules_install
+ /sbin/depmod -a
+ endif
+@@ -144,7 +151,7 @@
+ install -m 755 -o 0 -g 0 -d $(MODULE_ROOT)
+ install -m 644 -o 0 -g 0 $(MODULE_OBJECT) $(MODULE_ROOT)
+ /sbin/depmod -a
+-
++
+ @if ! grep -q 'wlan0' /etc/modprobe.conf ; then \
+ echo "append 'alias wlan0 rt2500' to /etc/modprobe.conf"; \
+ echo "alias wlan0 rt2500" >> /etc/modprobe.conf ; \
+diff -Nur rt2500-1.1.0-b4/Module/README rt2500-cvs-2007061011/Module/README
+--- rt2500-1.1.0-b4/Module/README 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/README 2007-05-29 05:54:39.000000000 +0200
+@@ -1,7 +1,7 @@
+ Installation instructions for the rt2500 Module
+
+ ======================================================================
+-Build Instructions:
++Build Instructions:
+ ====================
+ For 2.4 or 2.6 series kernel:
+ a. $tar -xvzf rt2500-x.x.x.tar.gz
+@@ -9,10 +9,10 @@
+
+ b. $make # compile driver source code
+
+-c. $make install # installs kernel module driver
++c. $make install # installs kernel module driver
++
++(read end of file for FedoraCore3 specific information)
+
+-(read end of file for FedoraCore3 specific information)
+-
+ ======================================================================
+ To BUILD UTILITY
+ ====================
+@@ -21,26 +21,26 @@
+
+ b. run 'qmake -o Makefile raconfig2500.pro'
+ If qmake command is not found in your system, you can download
+- the QT tool 'qt-x11-free-3.2.1' or later at
++ the QT tool 'qt-x11-free-3.2.1' or later at
+ http://www.trolltech.com/
+-
+- (qmake comes with RedHat 7.3 or later QT Package)
++
++ (qmake comes with RedHat 7.3 or later QT Package)
+
+ c. run 'make" to compile the utility source code.
+-
++
+ d. After all, an execution file would be generated "RaConfig2500"
+ run "RaConfig2500" to config the driver as you want
+
+
+
+ ======================================================================
+-CONFIGURATION:
++CONFIGURATION:
+ ====================
+-RT2500 driver can be configured via following interfaces,
++RT2500 driver can be configured via following interfaces,
+ i.e. (i)"iwconfig" command, (ii)"iwpriv" command, (iii) configuration
+ file, (iv) RaConfig2500
+
+-i) iwconfig comes with kernel.
++i) iwconfig comes with kernel.
+ ii) iwpriv usage, please refer to file "iwpriv_usage.txt" for details.
+ iii)copy configuration file "RT2500STA.dat" to
+ /etc/Wireless/RT2500STA/RT2500STA.dat.
+@@ -48,7 +48,7 @@
+ iv) RT2500 provides API : RaConfig2500, please go to directory
+ ./Utility and refer to how-to-compile.txt
+
+-
++
+ Configuration File : RT2500STA.dat
+
+ # Copy this file to /etc/Wireless/RT2500STA/RT2500STA.dat
+@@ -56,7 +56,7 @@
+ # module.
+ #
+ # Use "vi -b RT2500STA.dat" to modify settings according to your need.
+-#
++#
+ # 1.) set NetworkType to "Adhoc" for using Adhoc-mode, otherwise
+ # using as Infrastructure-mode.
+ # 2.) set Channel to "0" for auto-select on Infrastructure mode.
+@@ -94,7 +94,7 @@
+ FragThreshold=2312
+ PSMode=CAM
+ -----------------------------------------------
+-syntax is 'Param'='Value' and described below.
++syntax is 'Param'='Value' and described below.
+
+ 1. CountryRegion=value
+ value
+@@ -125,13 +125,14 @@
+ OPEN For Open System
+ SHARED For Shared key system
+ AUTO
+- WPAPSK
++ WPANONE For pre-shared key in adhoc mode
++ WPAPSK For pre-shared key in infrastructure mode
+ 7. EncrypType=value
+ value
+ NONE :For AuthMode=OPEN
+ WEP :For AuthMode=OPEN or AuthMode=SHARED
+- TKIP :For AuthMode=WPAPSK
+- AES :For AuthMode=WPAPSK
++ TKIP :For AuthMode=WPAPSK or AuthMode=WPANONE
++ AES :For AuthMode=WPAPSK or AuthMode=WPANONE
+ 8. DefaultKeyID=value
+ value
+ 1 ~ 4
+@@ -189,7 +190,7 @@
+ 1: 1 Mbps
+ 2: 2 Mbps
+ 3: 5.5 Mbps
+- 4: 11 Mbps
++ 4: 11 Mbps
+ 5: 6 Mbps //WirelessMode must be 0
+ 6: 9 Mbps //WirelessMode must be 0
+ 7: 12 Mbps //WirelessMode must be 0
+@@ -210,13 +211,13 @@
+
+ 23. AdhocOfdm=value
+ value
+- 0: Tx MAX rate will be 11Mbps in Adhoc mode.
+- 1: Tx MAX rate will be 54Mbps in Adhoc mode.
++ 0: Tx MAX rate will be 11Mbps in Adhoc mode.
++ 1: Tx MAX rate will be 54Mbps in Adhoc mode.
+
+ 24. StaWithEtherBridge=value
+ value
+- 0: Disable sta with ethernet to wireless bridge.
+- 1: Enable sta with ethernet to wireless bridge.
++ 0: Disable sta with ethernet to wireless bridge.
++ 1: Enable sta with ethernet to wireless bridge.
+
+
+ MORE INFORMATION
+@@ -224,25 +225,25 @@
+ If you want for rt2500 driver to auto-load at boot time:
+ A) choose ra0 for first RT2500 WLAN card, ra1 for second RT2500 WLAN
+ card, etc.
+-
+-B) create(edit) 'ifcfg-ra0' file in /etc/sysconfig/network-scripts/,
++
++B) create(edit) 'ifcfg-ra0' file in /etc/sysconfig/network-scripts/,
+ edit( or add the line) in /etc/modules.conf:
+- alias ra0 rt2500
+-
+-C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-ra0
++ alias ra0 rt2500
++
++C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-ra0
+ DEVICE='ra0'
+- ONBOOT='yes'
++ ONBOOT='yes'
+
+
+ NOTE:
+ if you use dhcp, add this line too .
+ BOOTPROTO='dhcp'
+
+-*D) To ease the Default Gateway setting,
++*D) To ease the Default Gateway setting,
+ add the line
+- GATEWAY=x.x.x.x
++ GATEWAY=x.x.x.x
+ in /etc/sysconfig/network
+-
++
+ INFORMATION FOR FEDORA CORE 3 USERS (USE AT YOUR OWN RISK !!!)
+ ======================================================================
+ While this information is directed to Fedora Core 3 users, there is no
+@@ -267,8 +268,8 @@
+ alias added to modprobe.conf (2.6 kernels) or modules.conf
+ (2.4 kernels).
+
+-Start 'system-config-network',
+-New->Wireless connection,
++Start 'system-config-network',
++New->Wireless connection,
+ Select 'RaLink Ralink RT2500 802.11 Cardbus Reference Card (wlan0)'
+ If it does not appear, well then it didn't work for you :)
+
+diff -Nur rt2500-1.1.0-b4/Module/TESTING rt2500-cvs-2007061011/Module/TESTING
+--- rt2500-1.1.0-b4/Module/TESTING 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/TESTING 2007-05-29 05:54:39.000000000 +0200
+@@ -1,51 +1,63 @@
+-Below is information on how you can help out the team with testing
+-of the rt2500 kernel module.
++Below are the steps you need to follow to help out the team with
++testing/debugging of the rt2500 kernel module:
+
+-1. Get the latest source from the CVS tree. Easiest way todo this is to
+-get the nightly tarball from our website at
+- http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz
+-
+-2. Enable module debugging. Todo this run 'make clean' to remove any
+-compiled objects you have and then run 'make debug'.
+-This will recompile the Module with debugging turned on and reinstall
+-it over your existing module.
+-
+-3. Install the module as per the INSTALL instructions.
+- e.g. make install
+-
+-4. Ensure there are no compies of the module in memory.
+- ifconfig ra0 down
+- rmmod rt2500
+-
+-5. Load the module with full debug enabled using the commands
+- modprobe rt2500 debug=1
+-
+-6. Check the output of your syslog (most likely /var/log/messages).
+-If you don't see any debug you need to add the following line to
+-your /etc/syslog.conf and reboot.
+- kern.* /var/log/debug
+-
+-7. Any bugs/issues you find please report the following information
+-to the rt2400-devel mailing list
+- * Steps to reproduce
+- * The whole contents of your debugging output
+- * Your hardware architecture (i.e. x86, AMD64, Sparc)
+- * Your kernel version (i.e. 2.4.25 or 2.6.4)
+- * Your rt2400 hardware manufacturer and model
+- * Anything else you may think will help us resolve the issue
+- (even a patch if you are so inclined)
+-
+-8. Sign up to the rt2400-devel mailing list and watch out for requests
+-for testing. Whenever we do major changes to the source and always
+-just before a release we will call for testing to be done before we
+-make the general release.
++
++1. Get the latest source from the CVS tree.
++ Easiest way to do this is to download the hourly tarball from our website:
++ http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz
++ Alternatively, you can anonymously check out the current CVS code:
++ $ cvs -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 login
++ $ cvs -z3 -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 \
++ co -P source/rt2500
++
++2. Compile the module with debug logging:
++ $ make clean
++ $ make debug
++
++3. Ensure there are no copies of the module left in memory:
++ # ifconfig ra0 down
++ # rmmod rt2500
++
++4. Load the module with full debug enabled:
++ # insmod rt2500.ko debug=31
++ Then proceed as usual (config, ifup, etc)...
++
++5. Check the debug output.
++ It is located in your system log file (most likely /var/log/debug or
++ /var/log/syslog). If you don't see any debug you probably need to add the
++ following line to your /etc/syslog.conf and reboot:
++ kern.=debug /var/log/debug
++ If you system hard-locks before it's able to log anything interesting
++ in these files, you'll have to rely on the netconsole module to remotely
++ log your kernel messages to another box (see netconsole.txt in your
++ kernel sources Documentation folder).
++
++6. Report the following to the rt2400-devel mailing list (or rt2500 forum):
++ * Steps to reproduce the bug
++ * The _whole_content_ of your debugging output
++ * Your module details, i.e. the output of:
++ # modinfo rt2500.ko
++ * Your kernel details, i.e. the output of:
++ $ uname -a
++ * Your rt2500 hardware manufacturer, model and revision
++ * Anything else you think may help us resolve the issue (even a patch if
++ you are so inclined)
++
++7. Monitor the mailing list (or forum thread) for replies/further queries. :-)
++
++
++Whenever we do major changes to the source - and always just before a release -
++we will call for testing to be done before we make the general release. You're
++very much welcome to help us with this testing and report any success/issue you
++experience with this code.
+
+
+ !!!! NOTE !!!!
+
+-AS PER STEP 7 ABOVE. Please provide the whole debug output. The last
+-few lines are hardly any good. If it's large (which it will be) then
+-GZip it and either upload it somewhere and give it a link or email
+-it directly to the developer you are working with.
++AS PER STEP 6 ABOVE: Please provide the *whole* debug output! The last few lines
++are hardly any good.
++If it's large (which it will be) then GZip it. Either attach it to your forum
++post or, if you're going to report via the mailing list, upload it somewhere and
++give a link to it (or email it directly to the developer you are working with).
+
+-!!!! END NOTE !!!!
++!!!! END NOTE !!!!
+diff -Nur rt2500-1.1.0-b4/Module/assoc.c rt2500-cvs-2007061011/Module/assoc.c
+--- rt2500-1.1.0-b4/Module/assoc.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/assoc.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: assoc.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: assoc.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 5th Jun 05 Fix no-SSID broadcasting assoc.
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -78,15 +78,15 @@
+ };
+ UCHAR CipherSuiteWpaPskAesLen = (sizeof(CipherSuiteWpaPskAes) / sizeof(UCHAR));
+
+-/*
++/*
+ ==========================================================================
+- Description:
++ Description:
+ association state machine init, including state transition and timer init
+- Parameters:
++ Parameters:
+ S - pointer to the association state machine
+ Note:
+- The state machine looks like the following
+-
++ The state machine looks like the following
++
+ ASSOC_IDLE ASSOC_WAIT_RSP REASSOC_WAIT_RSP DISASSOC_WAIT_RSP
+ MT2_MLME_ASSOC_REQ mlme_assoc_req_action invalid_state_when_assoc invalid_state_when_assoc invalid_state_when_assoc
+ MT2_MLME_REASSOC_REQ mlme_reassoc_req_action invalid_state_when_reassoc invalid_state_when_reassoc invalid_state_when_reassoc
+@@ -103,9 +103,9 @@
+ ==========================================================================
+ */
+ VOID AssocStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(S, (STATE_MACHINE_FUNC*)Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, (STATE_MACHINE_FUNC)Drop, ASSOC_IDLE, ASSOC_MACHINE_BASE);
+
+@@ -115,7 +115,7 @@
+ StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)MlmeDisassocReqAction);
+ StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction);
+ // StateMachineSetAction(S, ASSOC_IDLE, MT2_CLS3ERR, (STATE_MACHINE_FUNC)Cls3errAction);
+-
++
+ // second column
+ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc);
+ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc);
+@@ -151,14 +151,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Association timeout procedure. After association timeout, this function
++ Association timeout procedure. After association timeout, this function
+ will be called and it will put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID AssocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_ASSOC_TIMEOUT \n");
+@@ -169,14 +169,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Reassociation timeout procedure. After reassociation timeout, this
++ Reassociation timeout procedure. After reassociation timeout, this
+ function will be called and put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID ReassocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_REASSOC_TIMEOUT \n");
+@@ -187,14 +187,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Disassociation timeout procedure. After disassociation timeout, this
++ Disassociation timeout procedure. After disassociation timeout, this
+ function will be called and put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID DisassocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_DISASSOC_TIMEOUT \n");
+@@ -222,8 +222,8 @@
+ ==========================================================================
+ */
+ VOID MlmeAssocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR ApAddr;
+ MACHDR AssocHdr;
+@@ -243,9 +243,9 @@
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Block Assoc request durning WPA block period!\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+- }
++ }
+ // check sanity first
+- else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
++ else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
+ {
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+ COPY_MAC_ADDR(&pAd->Mlme.AssocAux.Addr, &ApAddr);
+@@ -255,23 +255,23 @@
+ pAd->Mlme.AssocAux.ListenIntv = ListenIntv;
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeAssocReqAction() allocate memory failed \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ // Add by James 03/06/27
+ pAd->PortCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); //+ sizeof(NDIS_802_11_FIXED_IEs); // Filled in assoc request
+ pAd->PortCfg.AssocInfo.AvailableRequestFixedIEs =
+ NDIS_802_11_AI_REQFI_CAPABILITIES | NDIS_802_11_AI_REQFI_LISTENINTERVAL | NDIS_802_11_AI_REQFI_CURRENTAPADDRESS;
+ pAd->PortCfg.AssocInfo.RequestFixedIEs.Capabilities = CapabilityInfo;
+- pAd->PortCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv;
++ pAd->PortCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv;
+ memcpy(pAd->PortCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, &AssocHdr, sizeof(NDIS_802_11_MAC_ADDRESS));
+ pAd->PortCfg.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); // No request Variables IEs
+-
++
+ // First add SSID
+ VarIesOffset = 0;
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &SsidIe, 1);
+@@ -299,7 +299,7 @@
+ 2, &CapabilityInfo,
+ 2, &ListenIntv,
+ 1, &SsidIe,
+- 1, &pAd->Mlme.SyncAux.SsidLen,
++ 1, &pAd->Mlme.SyncAux.SsidLen,
+ pAd->Mlme.SyncAux.SsidLen, pAd->Mlme.SyncAux.Ssid,
+ 1, &RateIe,
+ 1, &pAd->PortCfg.SupRateLen,
+@@ -310,11 +310,11 @@
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+ 1, &ExtRateIe,
+ 1, &pAd->PortCfg.ExtRateLen,
+- pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
++ pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+-
++
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled))
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -323,7 +323,7 @@
+ CipherSuiteWpaTkipLen, &CipherSuiteWpaTkip[0],
+ END_OF_ARGS);
+ FrameLen += tmp;
+-
++
+ // Add by James 03/06/27
+ // Third add RSN
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &WpaIe, 1);
+@@ -339,9 +339,9 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+-
++
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled))
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -350,7 +350,7 @@
+ CipherSuiteWpaAesLen, &CipherSuiteWpaAes[0],
+ END_OF_ARGS);
+ FrameLen += tmp;
+-
++
+ // Add by James 03/06/27
+ // Third add RSN
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &WpaIe, 1);
+@@ -366,7 +366,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled))
+ {
+@@ -392,7 +392,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled))
+ {
+@@ -418,7 +418,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else
+ {
+@@ -429,14 +429,14 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ RTMPSetTimer(pAd, &pAd->Mlme.AssocAux.AssocTimer, Timeout);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -450,7 +450,7 @@
+ Description:
+ mlme reassoc req handling procedure
+ Parameters:
+- Elem -
++ Elem -
+ Pre:
+ -# SSID (Adapter->PortCfg.ssid[])
+ -# BSSID (AP address, Adapter->PortCfg.bssid)
+@@ -460,8 +460,8 @@
+ ==========================================================================
+ */
+ VOID MlmeReassocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR ApAddr;
+ MACHDR ReassocHdr;
+@@ -479,14 +479,14 @@
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Block ReAssoc request durning WPA block period!\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+- }
++ }
+ // the parameters are the same as the association
+- else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
++ else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
+ {
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if(NStatus != NDIS_STATUS_SUCCESS)
++ if(NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeReassocReqAction() allocate memory failed \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -509,8 +509,8 @@
+ 2, &ListenIntv,
+ ETH_ALEN, &pAd->PortCfg.Bssid,
+ 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
+- pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
++ 1, &pAd->PortCfg.SsidLen,
++ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+ 1, &RateIe,
+ 1, &pAd->PortCfg.SupRateLen,
+ pAd->PortCfg.SupRateLen, pAd->PortCfg.SupRate,
+@@ -520,16 +520,16 @@
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+ 1, &ExtRateIe,
+ 1, &pAd->PortCfg.ExtRateLen,
+- pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
++ pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ RTMPSetTimer(pAd, &pAd->Mlme.AssocAux.ReassocTimer, Timeout); /* in mSec */
+ pAd->Mlme.AssocMachine.CurrState = REASSOC_WAIT_RSP;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -546,8 +546,8 @@
+ ==========================================================================
+ */
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DISASSOC_REQ_STRUCT *DisassocReq;
+ MACHDR DisassocHdr;
+@@ -560,25 +560,25 @@
+ DisassocReq = (MLME_DISASSOC_REQ_STRUCT *)(Elem->Msg);
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - MlmeDisassocReqAction() allocate memory failed\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.DisassocTimer);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Send DISASSOC request\n");
+ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, &pAd->PortCfg.Bssid, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &DisassocHdr,
+- 2, &DisassocReq->Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &DisassocHdr,
++ 2, &DisassocReq->Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ memset(&(pAd->PortCfg.Bssid), 0, ETH_ALEN);
+-
++
+ pAd->PortCfg.DisassocReason = REASON_DISASSOC_STA_LEAVING;
+ COPY_MAC_ADDR(&pAd->PortCfg.DisassocSta, &DisassocReq->Addr);
+
+@@ -595,31 +595,31 @@
+ ==========================================================================
+ */
+ VOID PeerAssocRspAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT CapabilityInfo, Status, Aid;
+ UCHAR Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen;
+ MACADDR Addr2;
+ BOOLEAN ExtendedRateIeExist;
+
+- if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
++ if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
+ {
+ // The frame is for me ?
+- if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr))
++ if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+- if(Status == MLME_SUCCESS)
++ if(Status == MLME_SUCCESS)
+ {
+ // go to procedure listed on page 376
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO; // pAd->PortCfg.SupportedCapabilityInfo;
+ AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);
+- }
++ }
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, Status);
+- }
++ }
+ }
+ else
+ {
+@@ -636,8 +636,8 @@
+ ==========================================================================
+ */
+ VOID PeerReassocRspAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT CapabilityInfo;
+ USHORT Status;
+@@ -647,24 +647,24 @@
+ MACADDR Addr2;
+ BOOLEAN ExtendedRateIeExist;
+
+- if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
++ if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
+ {
+ if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr)) // The frame is for me ?
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+-
+- if(Status == MLME_SUCCESS)
++
++ if(Status == MLME_SUCCESS)
+ {
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO; // pAd->PortCfg.SupportedCapabilityInfo;
+ // go to procedure listed on page 376
+ AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);
+- }
++ }
+
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, Status);
+- }
++ }
+ }
+ else
+ {
+@@ -675,28 +675,28 @@
+ /*
+ ==========================================================================
+ Description:
+- procedures on IEEE 802.11/1999 p.376
++ procedures on IEEE 802.11/1999 p.376
+ Parametrs:
+ ==========================================================================
+ */
+ VOID AssocPostProc(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR Addr2,
+- IN USHORT CapabilityInfo,
+- IN USHORT Aid,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR Addr2,
++ IN USHORT CapabilityInfo,
++ IN USHORT Aid,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+- IN BOOLEAN ExtendedRateIeExist)
++ IN BOOLEAN ExtendedRateIeExist)
+ {
+ ULONG Idx;
+ UCHAR RateIe = IE_SUPP_RATES;
+ UCHAR VarIesOffset;
+
+- // 2003/12/11 - skip the following because experiment show that we can not
++ // 2003/12/11 - skip the following because experiment show that we can not
+ // trust the "privacy" bit in AssocRsp. We can only trust "Privacy" bit specified in
+ // BEACON and ProbeRsp.
+ // pAd->PortCfg.PrivacyInvoked = CAP_IS_PRIVACY_ON(CapabilityInfo);
+-
++
+ pAd->PortCfg.Aid = Aid;
+ memcpy(pAd->PortCfg.SupportedRates, Rates, RatesLen);
+ pAd->PortCfg.SupportedRatesLen = RatesLen;
+@@ -709,7 +709,7 @@
+
+ // Set New WPA information
+ Idx = BssTableSearch(&pAd->PortCfg.BssTab, Addr2);
+- if (Idx == BSS_NOT_FOUND)
++ if (Idx == BSS_NOT_FOUND)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, "ASSOC - Can't find BSS after receiving Assoc response\n");
+ }
+@@ -736,7 +736,7 @@
+ // Second add RSN
+ memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, pAd->PortCfg.BssTab.BssEntry[Idx].VarIEs, pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen);
+ VarIesOffset += pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen;
+-
++
+ // Set Variable IEs Length
+ pAd->PortCfg.ResVarIELen = VarIesOffset;
+ pAd->PortCfg.AssocInfo.ResponseIELength = VarIesOffset;
+@@ -747,22 +747,22 @@
+ /*
+ ==========================================================================
+ Description:
+- left part of IEEE 802.11/1999 p.374
++ left part of IEEE 802.11/1999 p.374
+ Parameters:
+ Elem - MLME message containing the received frame
+ ==========================================================================
+ */
+ VOID PeerDisassocAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Reason;
+
+- if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Reason))
++ if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Reason))
+ {
+- if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(&pAd->PortCfg.Bssid, &Addr2))
+- {
++ if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(&pAd->PortCfg.Bssid, &Addr2))
++ {
+ LinkDown(pAd);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+
+@@ -786,8 +786,8 @@
+ ==========================================================================
+ */
+ VOID AssocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - AssocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -801,8 +801,8 @@
+ ==========================================================================
+ */
+ VOID ReassocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - ReassocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -816,8 +816,8 @@
+ ==========================================================================
+ */
+ VOID DisassocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - DisassocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -825,30 +825,30 @@
+ }
+
+ VOID InvalidStateWhenAssoc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenAssoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenAssoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+ VOID InvalidStateWhenReassoc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenReassoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenReassoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+ VOID InvalidStateWhenDisassociate(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenDisassoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenDisassoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+@@ -858,15 +858,15 @@
+ ==========================================================================
+ Description:
+ right part of IEEE 802.11/1999 page 374
+- Note:
++ Note:
+ This event should never cause ASSOC state machine perform state
+ transition, and has no relationship with CNTL machine. So we separate
+ this routine as a service outside of ASSOC state transition table.
+ ==========================================================================
+ */
+ VOID Cls3errAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR pAddr)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR pAddr)
+ {
+ MACHDR DisassocHdr;
+ CHAR *OutBuffer = NULL;
+@@ -875,19 +875,19 @@
+ USHORT Reason = REASON_CLS3ERR;
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ return;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Class 3 Error, Send DISASSOC frame\n");
+ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &DisassocHdr,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &DisassocHdr,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+ pAd->PortCfg.DisassocReason = REASON_CLS3ERR;
+ COPY_MAC_ADDR(&pAd->PortCfg.DisassocSta, pAddr);
+ }
+-
++
+
+diff -Nur rt2500-1.1.0-b4/Module/auth.c rt2500-cvs-2007061011/Module/auth.c
+--- rt2500-1.1.0-b4/Module/auth.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/auth.c 2007-05-06 11:13:44.000000000 +0200
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: auth.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: auth.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -41,7 +41,7 @@
+ Sm - pointer to the auth state machine
+ Note:
+ The state machine looks like this
+-
++
+ AUTH_REQ_IDLE AUTH_WAIT_SEQ2 AUTH_WAIT_SEQ4
+ MT2_MLME_AUTH_REQ mlme_auth_req_action invalid_state_when_auth invalid_state_when_auth
+ MT2_MLME_DEAUTH_REQ mlme_deauth_req_action mlme_deauth_req_action mlme_deauth_req_action
+@@ -52,12 +52,12 @@
+ */
+
+ void AuthStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *Sm,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *Sm,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_REQ_IDLE, AUTH_MACHINE_BASE);
+-
++
+ // the first column
+ StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)MlmeAuthReqAction);
+ // StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_DEAUTH_REQ, (STATE_MACHINE_FUNC)MlmeDeauthReqAction);
+@@ -69,14 +69,14 @@
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_CLS2ERR, (STATE_MACHINE_FUNC)Cls2errAction);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq2Action);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);
+-
++
+ // the third column
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth);
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_DEAUTH_REQ, (STATE_MACHINE_FUNC)MlmeDeauthReqAction);
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_CLS2ERR, (STATE_MACHINE_FUNC)Cls2errAction);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq4Action);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);
+-
++
+ RTMPInitTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AuthTimeout);
+ }
+
+@@ -90,7 +90,7 @@
+ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AUTH - AuthTimeout\n");
+ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+@@ -103,8 +103,8 @@
+ ==========================================================================
+ */
+ VOID MlmeAuthReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr;
+ USHORT Alg, Seq, Status;
+@@ -121,16 +121,15 @@
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+- else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr, &Timeout, &Alg))
++ else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr, &Timeout, &Alg))
+ {
+- // reset timer
+- RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
++ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+ pAd->Mlme.AuthAux.Addr = Addr;
+ pAd->Mlme.AuthAux.Alg = Alg;
+ pAd->PortCfg.Mauth = FALSE;
+ Seq = 1;
+ Status = MLME_SUCCESS;
+-
++
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if(NStatus != NDIS_STATUS_SUCCESS)
+ {
+@@ -142,18 +141,18 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#1 (Alg=%d)...\n", Alg);
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &AuthHdr,
+- 2, &Alg,
+- 2, &Seq,
+- 2, &Status,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &AuthHdr,
++ 2, &Alg,
++ 2, &Seq,
++ 2, &Status,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+ RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, Timeout);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2;
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "AUTH - MlmeAuthReqAction() sanity check failed. BUG!!!!!\n");
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -167,8 +166,8 @@
+ ==========================================================================
+ */
+ VOID PeerAuthRspAtSeq2Action(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Seq, Status, RemoteStatus, Alg;
+@@ -180,21 +179,21 @@
+ NDIS_STATUS NStatus;
+ ULONG FrameLen = 0;
+
+- if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
++ if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
+ {
+- if (MAC_ADDR_EQUAL(&pAd->Mlme.AuthAux.Addr, &Addr2) && Seq == 2)
++ if (MAC_ADDR_EQUAL(&pAd->Mlme.AuthAux.Addr, &Addr2) && Seq == 2)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status);
+ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+-
+- if (Status == MLME_SUCCESS)
++
++ if (Status == MLME_SUCCESS)
+ {
+- if (pAd->Mlme.AuthAux.Alg == Ndis802_11AuthModeOpen)
++ if (pAd->Mlme.AuthAux.Alg == Ndis802_11AuthModeOpen)
+ {
+ pAd->PortCfg.Mauth = TRUE;
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_SUCCESS);
+- }
++ }
+ else
+ {
+ // 2. shared key, need to be challenged
+@@ -208,7 +207,7 @@
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#3...\n");
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr2, &pAd->PortCfg.Bssid);
+ AuthHdr.Wep = 1;
+@@ -234,9 +233,9 @@
+ RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2);
+ RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128);
+ RTMPSetICV(pAd, CyperChlgText + 140);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &AuthHdr,
+- CIPHER_TEXT_LEN + 16, CyperChlgText,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &AuthHdr,
++ CIPHER_TEXT_LEN + 16, CyperChlgText,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ #ifdef BIG_ENDIAN
+@@ -245,8 +244,8 @@
+ RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AUTH_TIMEOUT);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4;
+ }
+- }
+- else
++ }
++ else
+ {
+ pAd->PortCfg.AuthFailReason = Status;
+ COPY_MAC_ADDR(&pAd->PortCfg.AuthFailSta, &Addr2);
+@@ -267,29 +266,29 @@
+ ==========================================================================
+ */
+ VOID PeerAuthRspAtSeq4Action(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Alg, Seq, Status;
+ CHAR ChlgText[CIPHER_TEXT_LEN];
+
+- if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
++ if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
+ {
+- if(MAC_ADDR_EQUAL(&(pAd->Mlme.AuthAux.Addr), &Addr2) && Seq == 4)
++ if(MAC_ADDR_EQUAL(&(pAd->Mlme.AuthAux.Addr), &Addr2) && Seq == 4)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#4 to me\n");
+ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+-
+- if(Status == MLME_SUCCESS)
++
++ if(Status == MLME_SUCCESS)
+ {
+ pAd->PortCfg.Mauth = TRUE;
+- }
+- else
++ }
++ else
+ {
+ pAd->PortCfg.AuthFailReason = Status;
+ pAd->PortCfg.AuthFailSta = Addr2;
+- }
++ }
+
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, Status);
+@@ -307,8 +306,8 @@
+ ==========================================================================
+ */
+ VOID MlmeDeauthReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DEAUTH_REQ_STRUCT *Info;
+ MACHDR Hdr;
+@@ -329,12 +328,12 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send DE-AUTH request...\n");
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, &Info->Addr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &Hdr,
+- 2, &Info->Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &Hdr,
++ 2, &Info->Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ pAd->PortCfg.DeauthReason = Info->Reason;
+ COPY_MAC_ADDR(&pAd->PortCfg.DeauthSta, &Info->Addr);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -347,8 +346,8 @@
+ ==========================================================================
+ */
+ VOID AuthTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - AuthTimeoutAction\n");
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -361,8 +360,8 @@
+ ==========================================================================
+ */
+ VOID InvalidStateWhenAuth(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - InvalidStateWhenAuth (state=%d), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -379,24 +378,24 @@
+ ==========================================================================
+ */
+ VOID Cls2errAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR pAddr)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR pAddr)
+ {
+ MACHDR Hdr;
+ UCHAR *OutBuffer = NULL;
+ NDIS_STATUS NStatus;
+ ULONG FrameLen = 0;
+ USHORT Reason = REASON_CLS2ERR;
+-
++
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+ return;
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Class 2 error, Send DEAUTH frame...\n");
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, pAddr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &Hdr,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &Hdr,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+diff -Nur rt2500-1.1.0-b4/Module/auth_rsp.c rt2500-cvs-2007061011/Module/auth_rsp.c
+--- rt2500-1.1.0-b4/Module/auth_rsp.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/auth_rsp.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: auth_rsp.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: auth_rsp.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -40,8 +40,8 @@
+ Parameters:
+ Sm - the state machine
+ Note:
+- the state machine looks like the following
+-
++ the state machine looks like the following
++
+ AUTH_RSP_IDLE AUTH_RSP_WAIT_CHAL
+ MT2_AUTH_CHALLENGE_TIMEOUT auth_rsp_challenge_timeout_action auth_rsp_challenge_timeout_action
+ MT2_PEER_AUTH_ODD peer_auth_at_auth_rsp_idle_action peer_auth_at_auth_rsp_wait_action
+@@ -49,9 +49,9 @@
+ ==========================================================================
+ */
+ VOID AuthRspStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTATE_MACHINE Sm,
+- IN STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN PSTATE_MACHINE Sm,
++ IN STATE_MACHINE_FUNC Trans[])
+ {
+ ULONG NOW;
+
+@@ -83,10 +83,10 @@
+ ==========================================================================
+ */
+ VOID AuthRspChallengeTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AUTH_RSP - AuthRspChallengeTimeout \n");
+ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_RSP_STATE_MACHINE, MT2_AUTH_CHALLENGE_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+@@ -98,12 +98,12 @@
+ ==========================================================================
+ */
+ VOID PeerAuthSimpleRspGenAndSend(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACHDR Hdr,
+- IN USHORT Alg,
+- IN USHORT Seq,
+- IN USHORT Reason,
+- IN USHORT Status)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACHDR Hdr,
++ IN USHORT Alg,
++ IN USHORT Seq,
++ IN USHORT Reason,
++ IN USHORT Status)
+ {
+ MACHDR AuthHdr;
+ UINT FrameLen = 0;
+@@ -118,11 +118,11 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "Send AUTH response (seq#2)...\n");
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Hdr->Addr2, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &AuthHdr,
+- 2, &Alg,
+- 2, &Seq,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &AuthHdr,
++ 2, &Alg,
++ 2, &Seq,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+@@ -139,8 +139,8 @@
+ ==========================================================================
+ */
+ VOID PeerDeauthAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMLME_QUEUE_ELEM Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN PMLME_QUEUE_ELEM Elem)
+ {
+ MACADDR Addr2;
+ USHORT Reason;
+diff -Nur rt2500-1.1.0-b4/Module/connect.c rt2500-cvs-2007061011/Module/connect.c
+--- rt2500-1.1.0-b4/Module/connect.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/connect.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: connect.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * Ivo (rt2400) 15th Dec 04 Timing ESSID set
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: connect.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * Ivo (rt2400) 15th Dec 04 Timing ESSID set
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -62,11 +62,11 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+- // Control state machine differs from other state machines, the interface
++ // Control state machine differs from other state machines, the interface
+ // follows the standard interface
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+ }
+@@ -77,9 +77,9 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlMachinePerformAction(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ switch (Elem->MsgType)
+ {
+@@ -94,7 +94,7 @@
+ return;
+ }
+
+- switch(pAd->Mlme.CntlMachine.CurrState)
++ switch(pAd->Mlme.CntlMachine.CurrState)
+ {
+ case CNTL_IDLE:
+ CntlIdleProc(pAd, Elem);
+@@ -105,17 +105,17 @@
+ case CNTL_WAIT_JOIN:
+ CntlWaitJoinProc(pAd, Elem);
+ break;
+-
++
+ // CNTL_WAIT_REASSOC is the only state in CNTL machine that does
+- // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)".
+- // Therefore not protected by NDIS's "only one outstanding OID request"
++ // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)".
++ // Therefore not protected by NDIS's "only one outstanding OID request"
+ // rule. Which means NDIS may SET OID in the middle of ROAMing attempts.
+ // Current approach is to block new SET request at RTMPSetInformation()
+ // when CntlMachine.CurrState is not CNTL_IDLE
+ case CNTL_WAIT_REASSOC:
+ CntlWaitReassocProc(pAd, Elem);
+ break;
+-
++
+ case CNTL_WAIT_START:
+ CntlWaitStartProc(pAd, Elem);
+ break;
+@@ -130,7 +130,7 @@
+ break;
+
+ case CNTL_WAIT_OID_LIST_SCAN:
+- if(Elem->MsgType == MT2_SCAN_CONF)
++ if(Elem->MsgType == MT2_SCAN_CONF)
+ {
+ // Resume TxRing after SCANING complete. We hope the out-of-service time
+ // won't be too long to let upper layer time-out the waiting frames
+@@ -143,9 +143,9 @@
+ if (pAd->MediaState == NdisMediaStateDisconnected)
+ MlmeAutoReconnectLastSSID(pAd);
+ break;
+-
++
+ case CNTL_WAIT_OID_DISASSOC:
+- if (Elem->MsgType == MT2_DISASSOC_CONF)
++ if (Elem->MsgType == MT2_DISASSOC_CONF)
+ {
+ LinkDown(pAd);
+
+@@ -169,11 +169,11 @@
+ ==========================================================================
+ */
+ VOID CntlIdleProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+-
++
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
+ {
+ if (pAd->Mlme.CntlAux.CurrReqIsFromNdis)
+@@ -183,7 +183,7 @@
+ return;
+ }
+
+- switch(Elem->MsgType)
++ switch(Elem->MsgType)
+ {
+ case OID_802_11_DISASSOCIATE:
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+@@ -198,7 +198,7 @@
+ case MT2_MLME_ROAMING_REQ:
+ CntlMlmeRoamingProc(pAd, Elem);
+ break;
+-
++
+ default:
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Illegal message in CntlIdleProc(MsgType=%d)\n",Elem->MsgType);
+ break;
+@@ -220,7 +220,7 @@
+ // for best SCANNING reult;
+ AsicRestoreBbpSensibility(pAd);
+
+- // record current BSS if network is connected.
++ // record current BSS if network is connected.
+ // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS.
+ if (pAd->MediaState == NdisMediaStateConnected) // if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+ {
+@@ -230,19 +230,19 @@
+ memcpy(&CurrBss, &pAd->PortCfg.BssTab.BssEntry[BssIdx], sizeof(BSS_ENTRY));
+
+ // 2003-2-20 reset this RSSI to a low value but not zero. In normal case, the coming SCAN
+- // should return a correct RSSI to overwrite this. If no BEEACON received after SCAN,
++ // should return a correct RSSI to overwrite this. If no BEEACON received after SCAN,
+ // at least we still report a "greater than 0" RSSI since we claim it's CONNECTED.
+ CurrBss.Rssi = 18; // about -82 dB
+ }
+ }
+-
++
+ // clean up previous SCAN result, add current BSS back to table if any
+- BssTableInit(&pAd->PortCfg.BssTab);
++ BssTableInit(&pAd->PortCfg.BssTab);
+ if (BssIdx != BSS_NOT_FOUND)
+ {
+- // DDK Note: If the NIC is associated with a particular BSSID and SSID
+- // that are not contained in the list of BSSIDs generated by this scan, the
+- // BSSID description of the currently associated BSSID and SSID should be
++ // DDK Note: If the NIC is associated with a particular BSSID and SSID
++ // that are not contained in the list of BSSIDs generated by this scan, the
++ // BSSID description of the currently associated BSSID and SSID should be
+ // appended to the list of BSSIDs in the NIC's database.
+ // To ensure this, we append this BSS as the first entry in SCAN result
+ memcpy(&pAd->PortCfg.BssTab.BssEntry[0], &CurrBss, sizeof(BSS_ENTRY));
+@@ -251,7 +251,7 @@
+
+ BroadSsid[0] = '\0';
+ ScanParmFill(pAd, &ScanReq, BroadSsid, 0, BSS_ANY, SCAN_PASSIVE);
+- MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ,
+ sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN;
+ }
+@@ -262,15 +262,15 @@
+ ==========================================================================
+ */
+ VOID CntlOidSsidProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM * Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM * Elem)
+ {
+ NDIS_802_11_SSID *OidSsid = (NDIS_802_11_SSID *)Elem->Msg;
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+ ULONG Now;
+
+- // Step 0.
+- // record the desired SSID and all matching BSSes into CntlAux.SsidBssTab for
++ // Step 0.
++ // record the desired SSID and all matching BSSes into CntlAux.SsidBssTab for
+ // later-on iteration. Sort by RSSI order
+ memcpy(pAd->Mlme.CntlAux.Ssid, OidSsid->Ssid, OidSsid->SsidLength);
+ pAd->Mlme.CntlAux.SsidLen = (UCHAR)OidSsid->SsidLength;
+@@ -286,11 +286,11 @@
+ if (((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAd->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
+ {
+- // For WPA, WPA-PSK, if the 1x port is not secured, we have to redo
++ // For WPA, WPA-PSK, if the 1x port is not secured, we have to redo
+ // connection process
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+@@ -299,7 +299,7 @@
+ // Config has changed, we have to reconnect the same AP
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP Because config changed...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+@@ -313,24 +313,24 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- }
+- else if (INFRA_ON(pAd))
++ }
++ }
++ else if (INFRA_ON(pAd))
+ {
+ // case 1. active association existent
+ // roaming is done within miniport driver, nothing to do with configuration
+- // utility. so upon a new SET(OID_802_11_SSID) is received, we just
+- // disassociate with the current (or previous) associated AP, if any,
+- // then perform a new association with this new SSID, no matter the
++ // utility. so upon a new SET(OID_802_11_SSID) is received, we just
++ // disassociate with the current (or previous) associated AP, if any,
++ // then perform a new association with this new SSID, no matter the
+ // new/old SSID are the same or npt.
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+ else
+- {
++ {
+ if (ADHOC_ON(pAd))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - drop current ADHOC\n");
+@@ -356,7 +356,7 @@
+ {
+ IterateOnBssTab(pAd);
+ }
+- }
++ }
+ }
+
+ /*
+@@ -365,18 +365,18 @@
+ ==========================================================================
+ */
+ VOID CntlOidRTBssidProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM * Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM * Elem)
+ {
+ ULONG BssIdx;
+ MACADDR *pOidBssid = (MACADDR *)Elem->Msg;
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+ MLME_JOIN_REQ_STRUCT JoinReq;
+-
++
+ COPY_MAC_ADDR(&pAd->Mlme.CntlAux.Bssid, pOidBssid);
+ BssIdx = BssTableSearch(&pAd->PortCfg.BssTab, pOidBssid);
+-
+- if (BssIdx == BSS_NOT_FOUND)
++
++ if (BssIdx == BSS_NOT_FOUND)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n");
+ if (pAd->Mlme.CntlAux.CurrReqIsFromNdis)
+@@ -394,7 +394,7 @@
+
+ // Add SSID into Mlme.CntlAux for site surey joining hidden SSID
+ pAd->Mlme.CntlAux.SsidLen = pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].SsidLen;
+- memcpy(pAd->Mlme.CntlAux.Ssid, pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].Ssid, pAd->Mlme.CntlAux.SsidLen);
++ memcpy(pAd->Mlme.CntlAux.Ssid, pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].Ssid, pAd->Mlme.CntlAux.SsidLen);
+
+ // 2002-11-26 skip the following checking. i.e. if user wants to re-connect to same AP
+ // we just follow normal procedure. The reason of user doing this may because he/she changed
+@@ -412,15 +412,15 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ }
++ else
+ {
+ if (INFRA_ON(pAd))
+ {
+ // disassoc from current AP first
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP ...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+@@ -434,7 +434,7 @@
+ pAd->MediaState = NdisMediaStateDisconnected;
+ DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event C!\n");
+ }
+-
++
+ // No active association, join the BSS immediately
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pOidBssid->Octet[0],pOidBssid->Octet[1],pOidBssid->Octet[2],
+@@ -444,27 +444,27 @@
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN;
+ }
+- }
++ }
+ }
+
+ // Roaming is the only external request triggering CNTL state machine
+-// despite of other "SET OID" operation. All "SET OID" related oerations
++// despite of other "SET OID" operation. All "SET OID" related oerations
+ // happen in sequence, because no other SET OID will be sent to this device
+ // until the the previous SET operation is complete (successful o failed).
+ // So, how do we quarantee this ROAMING request won't corrupt other "SET OID"?
+ // or been corrupted by other "SET OID"?
+ VOID CntlMlmeRoamingProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- // TODO:
++ // TODO:
+ // AP in different channel may show lower RSSI than actual value??
+ // should we add a weighting factor to compensate it?
+ DBGPRINT(RT_DEBUG_TRACE,"CNTL - Roaming in CntlAux.RoamTab...\n");
+ BssTableSortByRssi(&pAd->Mlme.CntlAux.RoamTab);
+ pAd->Mlme.CntlAux.RoamIdx=0;
+ IterateOnBssTab2(pAd);
+-
++
+ }
+
+ /*
+@@ -473,17 +473,17 @@
+ ==========================================================================
+ */
+ VOID CntlWaitDisassocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_START_REQ_STRUCT StartReq;
+-
+- if (Elem->MsgType == MT2_DISASSOC_CONF)
++
++ if (Elem->MsgType == MT2_DISASSOC_CONF)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Dis-associate successful\n");
+ LinkDown(pAd);
+
+- // case 1. no matching BSS, and user wants ADHOC, so we just start a new one
++ // case 1. no matching BSS, and user wants ADHOC, so we just start a new one
+ if ((pAd->Mlme.CntlAux.SsidBssTab.BssNr==0) && (pAd->PortCfg.BssType == BSS_INDEP))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n",pAd->Mlme.CntlAux.Ssid);
+@@ -505,16 +505,16 @@
+ ==========================================================================
+ */
+ VOID CntlWaitJoinProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_JOIN_CONF)
++ if (Elem->MsgType == MT2_JOIN_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ // 1. joined an IBSS, we are pretty much done here
+ if (pAd->PortCfg.BssType == BSS_INDEP)
+@@ -524,9 +524,9 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ // 2. joined a new INFRA network, start from authentication
+- else
++ else
+ {
+ // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeShared) ||
+@@ -538,7 +538,7 @@
+ {
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+ }
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH;
+@@ -549,7 +549,7 @@
+ // 3. failed, try next BSS
+ pAd->Mlme.CntlAux.BssIdx++;
+ IterateOnBssTab(pAd);
+- }
++ }
+ }
+ }
+
+@@ -560,18 +560,18 @@
+ ==========================================================================
+ */
+ VOID CntlWaitStartProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Result;
+
+- if (Elem->MsgType == MT2_START_CONF)
++ if (Elem->MsgType == MT2_START_CONF)
+ {
+ memcpy(&Result, Elem->Msg, sizeof(USHORT));
+- if (Result == MLME_SUCCESS)
++ if (Result == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - We have started a new ADHOC network\n");
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->PortCfg.Bssid.Octet[0],
+ pAd->PortCfg.Bssid.Octet[1],
+ pAd->PortCfg.Bssid.Octet[2],
+@@ -601,29 +601,29 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAuthProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_ASSOC_REQ_STRUCT AssocReq;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_AUTH_CONF)
++ if (Elem->MsgType == MT2_AUTH_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH OK\n");
+- AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
++ AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
+ sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC;
+- }
++ }
+ else
+ {
+- // This fail may because of the AP already keep us in its MAC table without
++ // This fail may because of the AP already keep us in its MAC table without
+ // ageing-out. The previous authentication attempt must have let it remove us.
+ // so try Authentication again may help. For D-Link DWL-900AP+ compatibility.
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, try again...\n");
+@@ -638,7 +638,7 @@
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+ }
+
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2;
+@@ -652,26 +652,26 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAuthProc2(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_ASSOC_REQ_STRUCT AssocReq;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_AUTH_CONF)
++ if (Elem->MsgType == MT2_AUTH_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH OK\n");
+- AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
++ AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
+ sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC;
+- }
++ }
+ else
+ {
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) &&
+@@ -679,12 +679,12 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, try OPEN system...\n");
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2;
+ }
+- else
++ else
+ {
+ // not success, try next BSS
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, give up; try next BSS\n");
+@@ -693,7 +693,7 @@
+ IterateOnBssTab(pAd);
+ }
+ }
+- }
++ }
+ }
+
+ /*
+@@ -702,15 +702,15 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAssocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+
+- if (Elem->MsgType == MT2_ASSOC_CONF)
++ if (Elem->MsgType == MT2_ASSOC_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Association successful on BSS #%d\n",pAd->Mlme.CntlAux.BssIdx);
+ LinkUp(pAd, BSS_INFRA);
+@@ -718,8 +718,8 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ }
++ else
+ {
+ // not success, try next BSS
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Association fails on BSS #%d\n",pAd->Mlme.CntlAux.BssIdx);
+@@ -735,21 +735,21 @@
+ ==========================================================================
+ */
+ VOID CntlWaitReassocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Result;
+
+- if (Elem->MsgType == MT2_REASSOC_CONF)
++ if (Elem->MsgType == MT2_REASSOC_CONF)
+ {
+ memcpy(&Result, Elem->Msg, sizeof(USHORT));
+- if (Result == MLME_SUCCESS)
++ if (Result == MLME_SUCCESS)
+ {
+ BSS_ENTRY *pBss = &pAd->Mlme.CntlAux.RoamTab.BssEntry[pAd->Mlme.CntlAux.RoamIdx];
+
+ // COPY_MAC_ADDR(&pAd->PortCfg.Bssid, &pBss->Bssid);
+ // AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+-
++
+ // The following steps are supposed to be done after JOIN in normal procedure
+ // But since this RE-ASSOC skips the JOIN procedure, we have to do it after
+ // RE-ASSOC succeeds. If RE-ASSOC fails, then stay at original AP without any change
+@@ -768,14 +768,14 @@
+ pAd->PortCfg.CfpDurRemain = pBss->CfpDurRemaining;
+ pAd->PortCfg.CfpCount = pBss->CfpCount;
+
+- //
++ //
+ // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC
+ //
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Re-assocition successful on BSS #%d\n", pAd->Mlme.CntlAux.RoamIdx);
+ LinkUp(pAd, BSS_INFRA);
+- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
++ }
++ else
+ {
+ // reassoc failed, try to pick next BSS in the BSS Table
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Re-assocition fails on BSS #%d\n", pAd->Mlme.CntlAux.RoamIdx);
+@@ -792,7 +792,7 @@
+ */
+ VOID LinkUp(
+ IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssType)
++ IN UCHAR BssType)
+ {
+ ULONG Now;
+
+@@ -810,7 +810,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - !!! Set to short preamble!!!\n");
+ MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
+ }
+-
++
+ pAd->PortCfg.BssType = BssType;
+ if (BssType == BSS_INDEP)
+ {
+@@ -856,11 +856,11 @@
+ // NOTE:
+ // the decision to use "RTC/CTS" or "CTS-to-self" protection or not may change dynamically
+ // due to new STA association to the AP. so we have to decide that upon parsing BEACON, not here
+-
++
+ ComposePsPoll(pAd);
+ ComposeNullFrame(pAd);
+ AsicEnableBssSync(pAd);
+-
++
+ // only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode
+ // should wait until at least 2 active nodes in this BSSID.
+ pAd->MediaState = NdisMediaStateConnected;
+@@ -885,7 +885,7 @@
+ ==========================================================================
+ */
+ VOID LinkDown(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - !!! LINK DOWN !!!\n");
+
+@@ -913,7 +913,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event A!\n");
+ BssTableDeleteEntry(&pAd->PortCfg.BssTab, &(pAd->PortCfg.Bssid));
+
+- // restore back to -
++ // restore back to -
+ // 1. long slot (20 us) or short slot (9 us) time
+ // 2. turn on/off RTS/CTS and/or CTS-to-self protection
+ // 3. short preamble
+@@ -970,9 +970,9 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlConfirm(
+- IN PRTMP_ADAPTER pAd,
+- IN ULONG MsgType,
+- IN USHORT Msg)
++ IN PRTMP_ADAPTER pAd,
++ IN ULONG MsgType,
++ IN USHORT Msg)
+ {
+ MlmeEnqueue(&pAd->Mlme.Queue, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg);
+ }
+@@ -983,16 +983,16 @@
+ ==========================================================================
+ */
+ VOID IterateOnBssTab(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_START_REQ_STRUCT StartReq;
+ MLME_JOIN_REQ_STRUCT JoinReq;
+ ULONG BssIdx;
+
+ BssIdx = pAd->Mlme.CntlAux.BssIdx;
+- if (BssIdx < pAd->Mlme.CntlAux.SsidBssTab.BssNr)
++ if (BssIdx < pAd->Mlme.CntlAux.SsidBssTab.BssNr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - Trying BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Trying BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[0],
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[1],
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[2],
+@@ -1018,12 +1018,12 @@
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - All BSS fail; reply NDIS_STATUS_NOT_ACCEPTED\n");
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ }
+
+ // for re-association only
+ VOID IterateOnBssTab2(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_REASSOC_REQ_STRUCT ReassocReq;
+ ULONG BssIdx;
+@@ -1034,19 +1034,19 @@
+
+ if (BssIdx < pAd->Mlme.CntlAux.RoamTab.BssNr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - try BSS #%d %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - try BSS #%d %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ BssIdx, pBss->Bssid.Octet[0],pBss->Bssid.Octet[1],pBss->Bssid.Octet[2],
+ pBss->Bssid.Octet[3],pBss->Bssid.Octet[4],pBss->Bssid.Octet[5]);
+
+ AsicSwitchChannel(pAd, pBss->Channel);
+ AsicLockChannel(pAd, pBss->Channel);
+-
++
+ // reassociate message has the same structure as associate message
+- AssocParmFill(pAd, &ReassocReq, &pBss->Bssid, pBss->CapabilityInfo,
++ AssocParmFill(pAd, &ReassocReq, &pBss->Bssid, pBss->CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ,
+ sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq);
+-
++
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC;
+ }
+ else // no more BSS
+@@ -1055,7 +1055,7 @@
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ }
+
+ /*
+@@ -1064,9 +1064,9 @@
+ ==========================================================================
+ */
+ VOID JoinParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
+- IN ULONG BssIdx)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
++ IN ULONG BssIdx)
+ {
+ JoinReq->BssIdx = BssIdx;
+ }
+@@ -1077,12 +1077,12 @@
+ ==========================================================================
+ */
+ VOID AssocParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
+- IN MACADDR *Addr,
+- IN USHORT CapabilityInfo,
+- IN ULONG Timeout,
+- IN USHORT ListenIntv)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
++ IN MACADDR *Addr,
++ IN USHORT CapabilityInfo,
++ IN ULONG Timeout,
++ IN USHORT ListenIntv)
+ {
+ COPY_MAC_ADDR(&AssocReq->Addr, Addr);
+ // Add mask to support 802.11b mode only
+@@ -1097,12 +1097,12 @@
+ ==========================================================================
+ */
+ VOID ScanParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN UCHAR ScanType)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN UCHAR ScanType)
+ {
+ ScanReq->SsidLen = SsidLen;
+ memcpy(ScanReq->Ssid, Ssid, SsidLen);
+@@ -1116,10 +1116,10 @@
+ ==========================================================================
+ */
+ VOID DisassocParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
+- IN MACADDR *Addr,
+- IN USHORT Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
++ IN MACADDR *Addr,
++ IN USHORT Reason)
+ {
+ COPY_MAC_ADDR(&DisassocReq->Addr, Addr);
+ DisassocReq->Reason = Reason;
+@@ -1131,12 +1131,12 @@
+ ==========================================================================
+ */
+ VOID StartParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_START_REQ_STRUCT *StartReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_START_REQ_STRUCT *StartReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen)
+ {
+- memcpy(StartReq->Ssid, Ssid, SsidLen);
++ memcpy(StartReq->Ssid, Ssid, SsidLen);
+ StartReq->SsidLen = SsidLen;
+ }
+
+@@ -1146,10 +1146,10 @@
+ ==========================================================================
+ */
+ VOID AuthParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
+- IN MACADDR *Addr,
+- IN USHORT Alg)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
++ IN MACADDR *Addr,
++ IN USHORT Alg)
+ {
+ COPY_MAC_ADDR(&AuthReq->Addr, Addr);
+ AuthReq->Alg = Alg;
+@@ -1187,9 +1187,9 @@
+ ==========================================================================
+ */
+ ULONG MakeIbssBeacon(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+- UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
++ UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
+ DsLen = 1, IbssLen = 2;
+ UCHAR ExtRateIe = IE_EXT_SUPP_RATES, ExtRatesLen;
+ UCHAR ErpIe[3] = {IE_ERP, 1, 0x04};
+@@ -1244,28 +1244,28 @@
+
+ // compose IBSS beacon frame
+ MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Bssid);
+- Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
+- (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
++ Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
++ (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
+ (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);
+ CapabilityInfo = CAP_GENERATE(0, 1, 0, 0, Privacy, (pAd->PortCfg.WindowsTxPreamble == Rt802_11PreambleShort));
+ if (SupportedRatesLen <= 8)
+ {
+ MakeOutgoingFrame(pBeaconFrame, &FrameLen,
+- MAC_HDR_LEN, &BcnHdr,
++ MAC_HDR_LEN, &BcnHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ END_OF_ARGS);
+ }
+@@ -1274,21 +1274,21 @@
+ ExtRatesLen = SupportedRatesLen - 8;
+ SupportedRatesLen = 8;
+ MakeOutgoingFrame(pBeaconFrame, &FrameLen,
+- MAC_HDR_LEN, &BcnHdr,
++ MAC_HDR_LEN, &BcnHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ 3, ErpIe,
+ 1, &ExtRateIe,
+@@ -1301,7 +1301,7 @@
+ {
+ ULONG tmp;
+ UCHAR WpaIe = IE_WPA;
+-
++
+ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) // Tkip
+ {
+ MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp,
+@@ -1325,7 +1325,7 @@
+ RTMPFrameEndianChange(pAd, pBeaconFrame, DIR_WRITE, FALSE);
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, FALSE, CIPHER_NONE, FALSE, FALSE, TRUE, SHORT_RETRY, IFS_NEW_BACKOFF,
++ RTMPWriteTxDescriptor(pTxD, FALSE, CIPHER_NONE, FALSE, FALSE, TRUE, SHORT_RETRY, IFS_NEW_BACKOFF,
+ pAd->PortCfg.MlmeRate, 4, FrameLen, pAd->PortCfg.TxPreambleInUsed, 0);
+
+ DBGPRINT(RT_DEBUG_TRACE, "MakeIbssBeacon (len=%d)\n", FrameLen);
+diff -Nur rt2500-1.1.0-b4/Module/eeprom.c rt2500-cvs-2007061011/Module/eeprom.c
+--- rt2500-1.1.0-b4/Module/eeprom.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/eeprom.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: eeprom.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: eeprom.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -183,7 +183,7 @@
+ RaiseClock(pAd, &x);
+ LowerClock(pAd, &x);
+
+- // output the read_opcode and register number in that order
++ // output the read_opcode and register number in that order
+ ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3);
+ ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum);
+
+diff -Nur rt2500-1.1.0-b4/Module/iwpriv_usage.txt rt2500-cvs-2007061011/Module/iwpriv_usage.txt
+--- rt2500-1.1.0-b4/Module/iwpriv_usage.txt 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/iwpriv_usage.txt 2007-01-09 12:47:14.000000000 +0100
+@@ -1,151 +1,161 @@
+-
+-This file provides some basic examples on the configuration of the driver using standard linux wireless tools. Where possible iwconfig should be used to adjust settings. Some settings are currently not avaiable via iwconfig and these include WPA, for these functions it is currently necessary to use iwpriv.
+-
+-
+-Configuration Examples
+-===================================================================
+--------------------------------------------------------------------------------------------------------
+-Example I: Config STA to link with AP which is OPEN/NONE(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwconfig ra0 key open
+- 3. iwconfig ra0 key off
+- 4. iwconfig ra0 essid "AP's SSID"
+-
+-Example II: Config STA to link with AP which is SHARED/WEP(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwconfig ra0 key restricted
+- 3. iwconfig ra0 Key [1] "s:AP's wep key"
+- 4. iwconfig ra0 key [1]
+- 5. iwconfig ra0 essid "AP's SSID"
+-
+-Example III: Config STA to create/link as adhoc mode
+- 1. iwconfig ra0 mode ad-hoc
+- 2. iwconfig ra0 key off
+- 4. iwconfig ra0 essid "AP's SSID"
+-
+-Example IV: Config STA to link with AP which is WPAPSK/TKIP(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwpriv ra0 set AuthMode=WPAPSK
+- 3. iwpriv ra0 set EncrypType=TKIP
+- 4. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
+- 5. iwconfig ra0 essid "AP's SSID"
+-
+-Example V: Config STA to link with AP which is WPAPSK/AES(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwpriv ra0 set AuthMode=WPAPSK
+- 3. iwpriv ra0 set EncrypType=AES
+- 5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
+- 6. iwconfig ra0 essid "AP's SSID"
+-
+-
+-
+-iwpriv
+-=================
+-This is detailed explanation of each parameters for iwpriv.
+-Before reading this document, make sure you already read README.
+-
+--------------------------------------------------------------------------------------------------------
+-USAGE:
+- iwpriv ra0 set [parameters]=[val]
+-
+-where
+-
+-[parameters] [val] range explaination
+------------------ ----------------------- ---------------------------------------------
+-CountryRegion {0~7} Set country region
+- 0: use 1 ~ 11 Channel
+- 1: use 1 ~ 11 Channel
+- 2: use 1 ~ 13 Channel
+- 3: use 10, 11 Channel
+- 4: use 10 ~ 13 Channel
+- 5: use 14 Channel
+- 6: use 1 ~ 14 Channel
+- 7: use 3 ~ 9 Channel
+-
+-WirelessMode {0~2} Set Wireless Mode
+- 0:11b/g mixed, 1:11B only
+-
+-TxRate {0~12} Set TxRate
+- 0:Auto, 1:1Mbps, 2:2Mbps, 3:5.5Mbps, 4:11Mbps,
+- 5:6Mbps, 6:9Mbps, 7:12Mbps, 8:18Mbps, 9:24Mbps,
+- 10:36Mbps, 11:48Mbps, 12:54Mbps
+-
+-BGProtection {0~2} Set 11B/11G Protection
+- 0:Auto, 1:Always on, 2:Always off
+-
+-TxPreamble {0~2} Set TxPreamble
+- 0:Preamble Long, 1:Preamble Short, 2:Auto
+-
+-TxBurst {0,1} Set TxBurst Enable or Disable
+- 0:Disable, 1:Enable
+-
+-TurboRate {0,1} Set TurboRate Enable or Disable
+- 0:Disable, 1:Enable
+-
+-AdhocOfdm {0, 1} Set Adhoc mode tx rate
+- 0: adhere WIFI spec., 1: violate WIFI spec.
+- (802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode)
+- AuthMode {OPEN,SHARED,WPAPSK} Set Authentication mode
+-
+-EncrypType {NONE,WEP,TKIP,AES} Set Encryption Type
+-
+-WPAPSK {8~63 ASCII or 64 HEX characters} WPA Pre-Shared Key
+-
+-ApClient {0,1} Set ApClient mode
+- 0:Disable, 1:Enable
+-
+-iwlist
+-=================
+-This is detailed explanation of each parameters for iwlist.
+-
+--------------------------------------------------------------------------------------------------------
+-
+-iwlist ra0 scanning ; list the result after scanning(site survey)
+-
+-
+-
+-
+-----------------------------------------------------------------------------------------------------------------------------------
+-
+-
+-Deprecated iwpriv
+-=================
+-
+-*** PLEASE DO NOT USE THESE FUNCTIONS, THIS IS FOR HISTORICAL REFERENCE ONLY ***
+-As the configuration utility still uses some iwpriv commands they have not been
+-removed from the driver yet. These commands are likely to dissapear if the utility is
+-updated.
+-
+-** ALL THESE COMMANDS HAVE A IWCONFIG REPLACEMENT, USE IT ****
+-
+-SSID {0~z, less than 32 characters} Set SoftAP SSID
+-
+-Channel {1~14} depends on country region Set Channel
+-
+-RTSThreshold {1~2347} Set RTS Threshold
+-
+-FragThreshold {256~2346} Set Fragment Threshold
+-
+-NetworkType {Infra,Adhoc} Set Network type
+-
+-DefaultKeyID {1~4} Set Default Key ID
+-
+-Key1 {5 ascii characters or Set Key1 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key2 {5 ascii characters or Set Key2 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key3 {5 ascii characters or Set Key3 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key4 {5 ascii characters or Set Key4 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
++This file provides some basic examples on the configuration of the
++driver using standard linux wireless tools. Where possible iwconfig
++should be used to adjust settings. Some settings are currently not
++avaiable via iwconfig and these include WPA, for these functions it is
++currently necessary to use iwpriv.
++
++
++Configuration Examples
++======================================================================
++----------------------------------------------------------------------
++Example I: STA with AP using OPEN/NONE(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwconfig ra0 key open
++ 3. iwconfig ra0 key off
++ 4. iwconfig ra0 essid "AP's SSID"
++
++Example II: STA with AP using SHARED/WEP(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwconfig ra0 key restricted
++ 3. iwconfig ra0 Key [1] "s:AP's wep key"
++ 4. iwconfig ra0 key [1]
++ 5. iwconfig ra0 essid "AP's SSID"
++
++Example III: STA using adhoc mode
++ 1. iwconfig ra0 mode ad-hoc
++ 2. iwconfig ra0 key off
++ 4. iwconfig ra0 essid "STA's SSID"
++
++Example IV: STA with AP using WPAPSK/TKIP(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwpriv ra0 set AuthMode=WPAPSK
++ 3. iwpriv ra0 set EncrypType=TKIP
++ 4. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
++ 5. iwconfig ra0 essid "AP's SSID"
++
++Example V: STA with AP using WPAPSK/AES(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwpriv ra0 set AuthMode=WPAPSK
++ 3. iwpriv ra0 set EncrypType=AES
++ 5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
++ 6. iwconfig ra0 essid "AP's SSID"
++
++
++
++iwpriv
++=================
++This is detailed explanation of each parameters for iwpriv.
++Before reading this document, make sure you already read README.
++
++----------------------------------------------------------------------
++USAGE:
++ iwpriv ra0 set [parameters]=[val]
++
++where
++
++[parameters] [val] range explanation
++------------ -------------------- ---------------------
++CountryRegion {0~7} Set country region
++ 0: use 1 ~ 11 Channel
++ 1: use 1 ~ 11 Channel
++ 2: use 1 ~ 13 Channel
++ 3: use 10, 11 Channel
++ 4: use 10 ~ 13 Channel
++ 5: use 14 Channel
++ 6: use 1 ~ 14 Channel
++ 7: use 3 ~ 9 Channel
++
++WirelessMode {0~2} Set Wireless Mode
++ 0:11b/g mixed, 1:11B only
++
++TxRate {0~12} Set TxRate
++ 0:Auto, 1:1Mbps, 2:2Mbps,
++ 3:5.5Mbps, 4:11Mbps, 5:6Mbps,
++ 6:9Mbps, 7:12Mbps, 8:18Mbps,
++ 9:24Mbps, 10:36Mbps,
++ 11:48Mbps, 12:54Mbps
++
++BGProtection {0~2} Set 11B/11G Protection
++ 0:Auto, 1:Always on,
++ 2:Always off
++
++TxPreamble {0~2} Set TxPreamble
++ 0:Preamble Long,
++ 1:Preamble Short,
++ 2:Auto
++
++TxBurst {0,1} Enable/Disable
++ 0:Disable, 1:Enable
++
++TurboRate {0,1} Enable/Disable
++ 0:Disable, 1:Enable
++
++AdhocOfdm {0, 1} Adhoc mode OFDM
++ 0: Disallow 1: Allow
++
++AuthMode {OPEN,SHARED,WPAPSK} Authentication mode
++
++EncrypType {NONE,WEP,TKIP,AES} Encryption Type
++
++WPAPSK {8~63 ASCII or 64 HEX characters}
++ WPA Pre-Shared Key
++
++ApClient {0,1} Set ApClient mode
++ 0:Disable, 1:Enable
++
++iwlist
++=================
++This is detailed explanation of each parameters for iwlist.
++
++----------------------------------------------------------------------
++
++iwlist ra0 scanning; list the result after scanning(site survey)
++
++
++
++
++----------------------------------------------------------------------
++
++
++Deprecated iwpriv
++=================
++
++*** PLEASE DO NOT USE THESE FUNCTIONS, THIS IS FOR HISTORICAL
++ REFERENCE ONLY ***
++As the configuration utility still uses some iwpriv commands they have
++not been removed from the driver yet. These commands are likely to
++dissapear if the utility is updated.
++
++** ALL THESE COMMANDS HAVE A IWCONFIG REPLACEMENT, USE IT ****
++
++SSID {0~z, less than 32 characters} Set SoftAP SSID
++
++Channel {1~14} depends on country region Set Channel
++
++RTSThreshold {1~2347} Set RTS Threshold
++
++FragThreshold {256~2346} Set Fragment Threshold
++
++NetworkType {Infra,Adhoc} Set Network type
++
++DefaultKeyID {1~4} Set Default Key ID
++
++Key1 {5 ascii characters or Set Key1 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key2 {5 ascii characters or Set Key2 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key3 {5 ascii characters or Set Key3 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key4 {5 ascii characters or Set Key4 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
+diff -Nur rt2500-1.1.0-b4/Module/load rt2500-cvs-2007061011/Module/load
+--- rt2500-1.1.0-b4/Module/load 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/load 1970-01-01 01:00:00.000000000 +0100
+@@ -1,3 +0,0 @@
+-/sbin/insmod rt2500.o
+-/sbin/ifconfig ra0 inet 192.168.1.234 up
+-/sbin/route add default gw 192.168.1.1
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/md5.c rt2500-cvs-2007061011/Module/md5.c
+--- rt2500-1.1.0-b4/Module/md5.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/md5.c 2007-05-29 05:49:17.000000000 +0200
+@@ -1,38 +1,38 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
+ * This MD5 code is based on code from Dynamics -- HUT Mobile IP *
+ * Copyright (C) 1998-2001, Dynamics group *
+- ***************************************************************************/
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: md5.c
+- *
++ *
+ * Abstract: contain MD5 and AES cipher algorithm
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * JanL 28th Oct 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * JanL 28th Oct 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -48,7 +48,8 @@
+ * md5_mac() determines the message authentication code by using secure hash
+ * MD5(key | data | key).
+ */
+-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
++void md5_mac(UCHAR *key, ULONG key_len, UCHAR *data, ULONG data_len,
++ UCHAR *mac)
+ {
+ MD5_CTX context;
+
+@@ -71,12 +72,13 @@
+ * hmac_md5() determines the message authentication code using HMAC-MD5.
+ * This implementation is based on the sample code presented in RFC 2104.
+ */
+-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
++void hmac_md5(UCHAR *key, ULONG key_len, UCHAR *data, ULONG data_len,
++ UCHAR *mac)
+ {
+ MD5_CTX context;
+- u8 k_ipad[65]; /* inner padding - key XORd with ipad */
+- u8 k_opad[65]; /* outer padding - key XORd with opad */
+- u8 tk[16];
++ UCHAR k_ipad[65]; /* inner padding - key XORd with ipad */
++ UCHAR k_opad[65]; /* outer padding - key XORd with opad */
++ UCHAR tk[16];
+ int i;
+
+ //assert(key != NULL && data != NULL && mac != NULL);
+@@ -128,25 +130,6 @@
+ MD5Final(mac, &context); /* finish up 2nd pass */
+ }
+
+-
+-/* ===== start - public domain MD5 implementation ===== */
+-/*
+- * This code implements the MD5 message-digest algorithm.
+- * The algorithm is due to Ron Rivest. This code was
+- * written by Colin Plumb in 1993, no copyright is claimed.
+- * This code is in the public domain; do with it what you wish.
+- *
+- * Equivalent code is available from RSA Data Security, Inc.
+- * This code has been tested against that, and is equivalent,
+- * except that you don't need to include two pages of legalese
+- * with every copy.
+- *
+- * To compute the message digest of a chunk of bytes, declare an
+- * MD5Context structure, pass it to MD5Init, call MD5Update as
+- * needed on buffers full of bytes, and then call MD5Final, which
+- * will fill a supplied 16-byte array with the digest.
+- */
+-
+ #ifndef BIG_ENDIAN
+ #define byteReverse(buf, len) /* Nothing */
+ #else
+@@ -160,588 +143,808 @@
+ }
+ #endif
+
++/* ========================== MD5 implementation =========================== */
++// four base functions for MD5
++#define MD5_F1(x, y, z) (((x) & (y)) | ((~x) & (z)))
++#define MD5_F2(x, y, z) (((x) & (z)) | ((y) & (~z)))
++#define MD5_F3(x, y, z) ((x) ^ (y) ^ (z))
++#define MD5_F4(x, y, z) ((y) ^ ((x) | (~z)))
++#define CYCLIC_LEFT_SHIFT(w, s) (((w) << (s)) | ((w) >> (32-(s))))
++
++#define MD5Step(f, w, x, y, z, data, t, s) \
++ ( w += f(x, y, z) + data + t, w = (CYCLIC_LEFT_SHIFT(w, s)) & 0xffffffff, w += x )
++
+ /*
+- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+- * initialization constants.
++ * Function Description:
++ * Initiate MD5 Context satisfied in RFC 1321
++ *
++ * Arguments:
++ * pCtx Pointer to MD5 context
++ *
++ * Return Value:
++ * None
+ */
+-void MD5Init(struct MD5Context *ctx)
++VOID MD5Init(MD5_CTX *pCtx)
+ {
+- ctx->buf[0] = 0x67452301;
+- ctx->buf[1] = 0xefcdab89;
+- ctx->buf[2] = 0x98badcfe;
+- ctx->buf[3] = 0x10325476;
++ pCtx->Buf[0] = 0x67452301;
++ pCtx->Buf[1] = 0xefcdab89;
++ pCtx->Buf[2] = 0x98badcfe;
++ pCtx->Buf[3] = 0x10325476;
+
+- ctx->bits[0] = 0;
+- ctx->bits[1] = 0;
++ pCtx->LenInBitCount[0] = 0;
++ pCtx->LenInBitCount[1] = 0;
+ }
+
+ /*
+- * Update context to reflect the concatenation of another buffer full
+- * of bytes.
++ * Function Description:
++ * Update MD5 Context, allow of an arrary of octets as the next portion
++ * of the message
++ *
++ * Arguments:
++ * pCtx Pointer to MD5 context
++ * pData Pointer to input data
++ * LenInBytes The length of input data (unit: byte)
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called after MD5Init or MD5Update(itself)
+ */
+-void MD5Update(struct MD5Context *ctx, unsigned char *buf, unsigned len)
++VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
+ {
+- u32 t;
++ ULONG TfTimes;
++ ULONG temp;
++ unsigned int i;
+
+- /* Update bitcount */
++ temp = pCtx->LenInBitCount[0];
+
+- t = ctx->bits[0];
+- if ((ctx->bits[0] = t + ((u32) len << 3)) < t)
+- ctx->bits[1]++; /* Carry from low to high */
+- ctx->bits[1] += len >> 29;
+-
+- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+-
+- /* Handle any leading odd-sized chunks */
+-
+- if (t) {
+- unsigned char *p = (unsigned char *) ctx->in + t;
+-
+- t = 64 - t;
+- if (len < t) {
+- memcpy(p, buf, len);
+- return;
+- }
+- memcpy(p, buf, t);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- buf += t;
+- len -= t;
+- }
+- /* Process data in 64-byte chunks */
++ pCtx->LenInBitCount[0] =
++ (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
+
+- while (len >= 64) {
+- memcpy(ctx->in, buf, 64);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- buf += 64;
+- len -= 64;
+- }
++ if (pCtx->LenInBitCount[0] < temp)
++ pCtx->LenInBitCount[1]++; //carry in
++
++ pCtx->LenInBitCount[1] += LenInBytes >> 29;
++
++ // mod 64 bytes
++ temp = (temp >> 3) & 0x3f;
++
++ // process lacks of 64-byte data
++ if (temp) {
++ UCHAR *pAds = (UCHAR *) pCtx->Input + temp;
++
++ if ((temp + LenInBytes) < 64) {
++ memcpy(pAds, (UCHAR *) pData, LenInBytes);
++ return;
++ }
+
+- /* Handle any remaining bytes of data. */
++ memcpy(pAds, (UCHAR *) pData, 64 - temp);
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
+
+- memcpy(ctx->in, buf, len);
++ pData += 64 - temp;
++ LenInBytes -= 64 - temp;
++ } // end of if (temp)
++
++ TfTimes = (LenInBytes >> 6);
++
++ for (i = TfTimes; i > 0; i--) {
++ memcpy(pCtx->Input, (UCHAR *) pData, 64);
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ pData += 64;
++ LenInBytes -= 64;
++ } // end of for
++
++ // buffering lacks of 64-byte data
++ if (LenInBytes)
++ memcpy(pCtx->Input, (UCHAR *) pData, LenInBytes);
+ }
+
+ /*
+- * Final wrapup - pad to 64-byte boundary with the bit pattern
+- * 1 0* (64-bit count of bits processed, MSB-first)
++ * Function Description:
++ * Append padding bits and length of original message in the tail
++ * The message digest has to be completed in the end
++ *
++ * Arguments:
++ * Digest Output of Digest-Message for MD5
++ * pCtx Pointer to MD5 context
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called after MD5Update
+ */
+-void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
++VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
+ {
+- unsigned count;
+- unsigned char *p;
+-
+- /* Compute number of bytes mod 64 */
+- count = (ctx->bits[0] >> 3) & 0x3F;
+-
+- /* Set the first char of padding to 0x80. This is safe since there is
+- always at least one byte free */
+- p = ctx->in + count;
+- *p++ = 0x80;
+-
+- /* Bytes of padding needed to make 64 bytes */
+- count = 64 - 1 - count;
+-
+- /* Pad out to 56 mod 64 */
+- if (count < 8) {
+- /* Two lots of padding: Pad the first block to 64 bytes */
+- memset(p, 0, count);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+-
+- /* Now fill the next block with 56 bytes */
+- memset(ctx->in, 0, 56);
+- } else {
+- /* Pad block to 56 bytes */
+- memset(p, 0, count - 8);
+- }
+- byteReverse(ctx->in, 14);
++ UCHAR Remainder;
++ UCHAR PadLenInBytes;
++ UCHAR *pAppend = 0;
++ unsigned int i;
++
++ Remainder = (UCHAR) ((pCtx->LenInBitCount[0] >> 3) & 0x3f);
++
++ PadLenInBytes = (Remainder < 56) ? (56 - Remainder) : (120 - Remainder);
++
++ pAppend = (UCHAR *) pCtx->Input + Remainder;
++
++ // padding bits without crossing block(64-byte based) boundary
++ if (Remainder < 56) {
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ PadLenInBytes);
++
++ // add data-length field, from low to high
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> (i << 3)) & 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> (i << 3)) & 0xff);
++ }
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of if
++
++ // padding bits with crossing block(64-byte based) boundary
++ else {
++ // the first block ===
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ (64 - Remainder - 1));
++ PadLenInBytes -= (64 - Remainder - 1);
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ // the second block ===
++ memset((UCHAR *) pCtx->Input, 0, PadLenInBytes);
++
++ // add data-length field
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> (i << 3)) & 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> (i << 3)) & 0xff);
++ }
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of else
++
++ memcpy((UCHAR *) Digest, (ULONG *) pCtx->Buf, 16); // output
++ byteReverse((UCHAR *) Digest, 4);
++ memset(pCtx, 0, sizeof(pCtx)); // memory free
++}
+
+- /* Append length in bits and transform */
+- ((u32 *) ctx->in)[14] = ctx->bits[0];
+- ((u32 *) ctx->in)[15] = ctx->bits[1];
++/*
++ * Function Description:
++ * The central algorithm of MD5, consists of four rounds and sixteen
++ * steps per round
++ *
++ * Arguments:
++ * Buf Buffers of four states (output: 16 bytes)
++ * Mes Input data (input: 64 bytes)
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called by MD5Update or MD5Final
++ */
++VOID MD5Transform(ULONG Buf[4], ULONG Mes[16])
++{
++ ULONG Reg[4], Temp;
++ unsigned int i;
+
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- byteReverse((unsigned char *) ctx->buf, 4);
+- memcpy(digest, ctx->buf, 16);
+- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
++ static UCHAR LShiftVal[16] = {
++ 7, 12, 17, 22,
++ 5, 9, 14, 20,
++ 4, 11, 16, 23,
++ 6, 10, 15, 21,
++ };
++
++ // [equal to 4294967296*abs(sin(index))]
++ static ULONG MD5Table[64] = {
++ 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
++ 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
++ 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
++ 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
++
++ 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
++ 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
++ 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
++ 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
++
++ 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
++ 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
++ 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
++ 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
++
++ 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
++ 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
++ 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
++ 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
++ };
++
++ for (i = 0; i < 4; i++)
++ Reg[i] = Buf[i];
++
++ // 64 steps in MD5 algorithm
++ for (i = 0; i < 16; i++) {
++ MD5Step(MD5_F1, Reg[0], Reg[1], Reg[2], Reg[3], Mes[i],
++ MD5Table[i], LShiftVal[i & 0x3]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 16; i < 32; i++) {
++ MD5Step(MD5_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(5 * (i & 0xf) + 1) & 0xf], MD5Table[i],
++ LShiftVal[(0x1 << 2) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 32; i < 48; i++) {
++ MD5Step(MD5_F3, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(3 * (i & 0xf) + 5) & 0xf], MD5Table[i],
++ LShiftVal[(0x1 << 3) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 48; i < 64; i++) {
++ MD5Step(MD5_F4, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(7 * (i & 0xf)) & 0xf], MD5Table[i],
++ LShiftVal[(0x3 << 2) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++
++ // (temporary)output
++ for (i = 0; i < 4; i++)
++ Buf[i] += Reg[i];
+ }
+
+-//#ifndef ASM_MD5
+-#if 1
++/* ========================= SHA-1 implementation ========================== */
++// four base functions for SHA-1
++#define SHA1_F1(b, c, d) (((b) & (c)) | ((~b) & (d)))
++#define SHA1_F2(b, c, d) ((b) ^ (c) ^ (d))
++#define SHA1_F3(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
++
++#define SHA1Step(f, a, b, c, d, e, w, k) \
++ ( e += ( f(b, c, d) + w + k + CYCLIC_LEFT_SHIFT(a, 5)) & 0xffffffff, \
++ b = CYCLIC_LEFT_SHIFT(b, 30) )
+
+-/* The four core functions - F1 is optimized somewhat */
+-
+-/* #define F1(x, y, z) (x & y | ~x & z) */
+-#define F1(x, y, z) (z ^ (x & (y ^ z)))
+-#define F2(x, y, z) F1(z, x, y)
+-#define F3(x, y, z) (x ^ y ^ z)
+-#define F4(x, y, z) (y ^ (x | ~z))
++//Initiate SHA-1 Context satisfied in RFC 3174
++VOID SHAInit(SHA_CTX * pCtx)
++{
++ pCtx->Buf[0] = 0x67452301;
++ pCtx->Buf[1] = 0xefcdab89;
++ pCtx->Buf[2] = 0x98badcfe;
++ pCtx->Buf[3] = 0x10325476;
++ pCtx->Buf[4] = 0xc3d2e1f0;
+
+-/* This is the central step in the MD5 algorithm. */
+-#define MD5STEP(f, w, x, y, z, data, s) \
+- ( w += f(x, y, z) + data, w =( w<<s | w>>(32-s))&0xffffffff, w += x )
++ pCtx->LenInBitCount[0] = 0;
++ pCtx->LenInBitCount[1] = 0;
++}
+
+ /*
+- * The core of the MD5 algorithm, this alters an existing MD5 hash to
+- * reflect the addition of 16 longwords of new data. MD5Update blocks
+- * the data and converts bytes into longwords for this routine.
++ * Function Description:
++ * Update SHA-1 Context, allow of an arrary of octets as the next
++ * portion of the message
++ *
++ * Arguments:
++ * pCtx Pointer to SHA-1 context
++ * pData Pointer to input data
++ * LenInBytes The length of input data (unit: byte)
++ *
++ * Return Value:
++ * error indicate more than pow(2,64) bits of data
++ *
++ * Note:
++ * Called after SHAInit or SHAUpdate(itself)
+ */
+-void MD5Transform(u32 buf[4], u32 in[16])
++UCHAR SHAUpdate(SHA_CTX * pCtx, UCHAR * pData, ULONG LenInBytes)
+ {
+- register u32 a, b, c, d;
++ ULONG TfTimes;
++ ULONG temp1, temp2;
++ unsigned int i;
++ UCHAR err = 1;
++
++ temp1 = pCtx->LenInBitCount[0];
++ temp2 = pCtx->LenInBitCount[1];
++
++ pCtx->LenInBitCount[0] =
++ (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
++ if (pCtx->LenInBitCount[0] < temp1)
++ pCtx->LenInBitCount[1]++; //carry in
++
++ pCtx->LenInBitCount[1] =
++ (ULONG) (pCtx->LenInBitCount[1] + (LenInBytes >> 29));
++ if (pCtx->LenInBitCount[1] < temp2)
++ return (err); //check total length of original data
++
++ // mod 64 bytes
++ temp1 = (temp1 >> 3) & 0x3f;
++
++ // process lacks of 64-byte data
++ if (temp1) {
++ UCHAR *pAds = (UCHAR *) pCtx->Input + temp1;
++
++ if ((temp1 + LenInBytes) < 64) {
++ memcpy(pAds, (UCHAR *) pData, LenInBytes);
++ return (0);
++ }
++
++ memcpy(pAds, (UCHAR *) pData, 64 - temp1);
++ byteReverse((UCHAR *) pCtx->Input, 16);
++
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ pData += 64 - temp1;
++ LenInBytes -= 64 - temp1;
++ } // end of if (temp1)
++
++ TfTimes = (LenInBytes >> 6);
++
++ for (i = TfTimes; i > 0; i--) {
++ memcpy(pCtx->Input, (UCHAR *) pData, 64);
++ byteReverse((UCHAR *) pCtx->Input, 16);
++
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ pData += 64;
++ LenInBytes -= 64;
++ } // end of for
++
++ // buffering lacks of 64-byte data
++ if (LenInBytes)
++ memcpy(pCtx->Input, (UCHAR *) pData, LenInBytes);
+
+- a = buf[0];
+- b = buf[1];
+- c = buf[2];
+- d = buf[3];
+-
+- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+-
+- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+-
+- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+-
+- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+-
+- buf[0] += a;
+- buf[1] += b;
+- buf[2] += c;
+- buf[3] += d;
++ return (0);
+ }
+-#endif
+
+-void SHAInit(SHA_CTX *ctx) {
+- int i;
+-
+- ctx->lenW = 0;
+- ctx->sizeHi = ctx->sizeLo = 0;
+-
+- /* Initialize H with the magic constants (see FIPS180 for constants)
+- */
+- ctx->H[0] = 0x67452301L;
+- ctx->H[1] = 0xefcdab89L;
+- ctx->H[2] = 0x98badcfeL;
+- ctx->H[3] = 0x10325476L;
+- ctx->H[4] = 0xc3d2e1f0L;
+-
+- for (i = 0; i < 80; i++)
+- ctx->W[i] = 0;
+- }
+-
+-#define SHA_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xffffffffL)
+-
+-void SHAHashBlock(SHA_CTX *ctx) {
+- int t;
+- unsigned long A,B,C,D,E,TEMP;
+-
+- for (t = 16; t <= 79; t++)
+- ctx->W[t] = SHA_ROTL(ctx->W[t-3] ^ ctx->W[t-8] ^ ctx->W[t-14] ^ ctx->W[t-16], 1);
+-
+- A = ctx->H[0];
+- B = ctx->H[1];
+- C = ctx->H[2];
+- D = ctx->H[3];
+- E = ctx->H[4];
+-
+- for (t = 0; t <= 19; t++) {
+- TEMP = (SHA_ROTL(A,5) + (((C^D)&B)^D) + E + ctx->W[t] + 0x5a827999L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 20; t <= 39; t++) {
+- TEMP = (SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0x6ed9eba1L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 40; t <= 59; t++) {
+- TEMP = (SHA_ROTL(A,5) + ((B&C)|(D&(B|C))) + E + ctx->W[t] + 0x8f1bbcdcL) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 60; t <= 79; t++) {
+- TEMP = (SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0xca62c1d6L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+-
+- ctx->H[0] += A;
+- ctx->H[1] += B;
+- ctx->H[2] += C;
+- ctx->H[3] += D;
+- ctx->H[4] += E;
++// Append padding bits and length of original message in the tail
++// The message digest has to be completed in the end
++VOID SHAFinal(SHA_CTX * pCtx, UCHAR Digest[20])
++{
++ UCHAR Remainder;
++ UCHAR PadLenInBytes;
++ UCHAR *pAppend = 0;
++ unsigned int i;
++
++ Remainder = (UCHAR) ((pCtx->LenInBitCount[0] >> 3) & 0x3f);
++
++ pAppend = (UCHAR *) pCtx->Input + Remainder;
++
++ PadLenInBytes = (Remainder < 56) ? (56 - Remainder) : (120 - Remainder);
++
++ // padding bits without crossing block(64-byte based) boundary
++ if (Remainder < 56) {
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ PadLenInBytes);
++
++ // add data-length field, from high to low
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> ((3 - i) << 3)) &
++ 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> ((3 - i) << 3)) &
++ 0xff);
++ }
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 14);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of if
++
++ // padding bits with crossing block(64-byte based) boundary
++ else {
++ // the first block ===
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ (64 - Remainder - 1));
++ PadLenInBytes -= (64 - Remainder - 1);
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ // the second block ===
++ memset((UCHAR *) pCtx->Input, 0, PadLenInBytes);
++
++ // add data-length field
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> ((3 - i) << 3)) &
++ 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> ((3 - i) << 3)) &
++ 0xff);
++ }
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of else
++
++ //Output, bytereverse
++ for (i = 0; i < 20; i++) {
++ Digest[i] = (UCHAR) (pCtx->Buf[i >> 2] >> 8 * (3 - (i & 0x3)));
++ }
++
++ memset(pCtx, 0, sizeof(pCtx)); // memory free
+ }
+
+-void SHAUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len)
++// The central algorithm of SHA-1, consists of four rounds and
++// twenty steps per round
++VOID SHATransform(ULONG Buf[5], ULONG Mes[20])
+ {
+- int i;
+-
+- /* Read the data into W and process blocks as they get full
+- */
+- for (i = 0; i < len; i++) {
+- ctx->W[ctx->lenW / 4] <<= 8;
+- ctx->W[ctx->lenW / 4] |= (unsigned long)dataIn[i];
+- if ((++ctx->lenW) % 64 == 0) {
+- SHAHashBlock(ctx);
+- ctx->lenW = 0;
+- }
+- ctx->sizeLo += 8;
+- ctx->sizeHi += (ctx->sizeLo < 8);
+- }
++ ULONG Reg[5], Temp;
++ unsigned int i;
++ ULONG W[80];
++
++ static ULONG SHA1Table[4] = { 0x5a827999, 0x6ed9eba1,
++ 0x8f1bbcdc, 0xca62c1d6
++ };
++
++ Reg[0] = Buf[0];
++ Reg[1] = Buf[1];
++ Reg[2] = Buf[2];
++ Reg[3] = Buf[3];
++ Reg[4] = Buf[4];
++
++ //the first octet of a word is stored in the 0th element, bytereverse
++ for (i = 0; i < 16; i++) {
++ W[i] = (Mes[i] >> 24) & 0xff;
++ W[i] |= (Mes[i] >> 8) & 0xff00;
++ W[i] |= (Mes[i] << 8) & 0xff0000;
++ W[i] |= (Mes[i] << 24) & 0xff000000;
++ }
++
++ for (i = 0; i < 64; i++)
++ W[16 + i] =
++ CYCLIC_LEFT_SHIFT(W[i] ^ W[2 + i] ^ W[8 + i] ^ W[13 + i],
++ 1);
++
++ // 80 steps in SHA-1 algorithm
++ for (i = 0; i < 80; i++) {
++ if (i < 20)
++ SHA1Step(SHA1_F1, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[0]);
++
++ else if (i >= 20 && i < 40)
++ SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[1]);
++
++ else if (i >= 40 && i < 60)
++ SHA1Step(SHA1_F3, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[2]);
++
++ else
++ SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[3]);
++
++ // one-word right shift
++ Temp = Reg[4];
++ Reg[4] = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++
++ } // end of for-loop
++
++ // (temporary)output
++ for (i = 0; i < 5; i++)
++ Buf[i] += Reg[i];
+ }
+
+-
+-void SHAFinal(SHA_CTX *ctx, unsigned char hashout[20]) {
+- unsigned char pad0x80 = 0x80;
+- unsigned char pad0x00 = 0x00;
+- unsigned char padlen[8];
+- int i;
+-
+- /* Pad with a binary 1 (e.g. 0x80), then zeroes, then length
+- */
+- padlen[0] = (unsigned char)((ctx->sizeHi >> 24) & 255);
+- padlen[1] = (unsigned char)((ctx->sizeHi >> 16) & 255);
+- padlen[2] = (unsigned char)((ctx->sizeHi >> 8) & 255);
+- padlen[3] = (unsigned char)((ctx->sizeHi >> 0) & 255);
+- padlen[4] = (unsigned char)((ctx->sizeLo >> 24) & 255);
+- padlen[5] = (unsigned char)((ctx->sizeLo >> 16) & 255);
+- padlen[6] = (unsigned char)((ctx->sizeLo >> 8) & 255);
+- padlen[7] = (unsigned char)((ctx->sizeLo >> 0) & 255);
+- SHAUpdate(ctx, &pad0x80, 1);
+- while (ctx->lenW != 56)
+- SHAUpdate(ctx, &pad0x00, 1);
+- SHAUpdate(ctx, padlen, 8);
+-
+- /* Output hash
+- */
+- for (i = 0; i < 20; i++) {
+- hashout[i] = (unsigned char)(ctx->H[i / 4] >> 24);
+- ctx->H[i / 4] <<= 8;
+- }
+-
+- /*
+- * Re-initialize the context (also zeroizes contents)
+- */
+- SHAInit(ctx);
+-}
++/* ========================= AES En/Decryption ========================== */
+
+ /* forward S-box */
+-
+-static uint32 FSb[256] =
+-{
+- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
+- 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
+- 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
+- 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
+- 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
+- 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
+- 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
+- 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
+- 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
+- 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
+- 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
+- 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
+- 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
+- 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
+- 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
+- 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
+- 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
++static uint32 FSb[256] = {
++ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
++ 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
++ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
++ 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
++ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
++ 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
++ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
++ 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
++ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
++ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
++ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
++ 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
++ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
++ 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
++ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
++ 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
++ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
++ 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
++ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
++ 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
++ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
++ 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
++ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
++ 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
++ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
++ 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
++ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
++ 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
++ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
++ 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
++ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
++ 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+ };
+
+ /* forward table */
+-
+-#define FT \
++#define FT \
+ \
+- V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \
+- V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \
+- V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \
+- V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \
+- V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \
+- V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \
+- V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \
+- V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \
+- V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \
+- V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \
+- V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \
+- V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \
+- V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \
+- V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \
+- V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \
+- V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \
+- V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \
+- V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \
+- V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \
+- V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \
+- V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \
+- V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \
+- V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \
+- V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \
+- V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \
+- V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \
+- V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \
+- V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \
+- V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \
+- V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \
+- V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \
+- V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \
+- V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \
+- V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \
+- V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \
+- V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \
+- V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \
+- V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \
+- V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \
+- V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \
+- V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \
+- V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \
+- V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \
+- V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \
+- V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \
+- V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \
+- V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \
+- V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \
+- V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \
+- V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \
+- V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \
+- V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \
+- V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \
+- V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \
+- V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \
+- V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \
+- V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \
+- V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \
+- V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \
+- V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \
+- V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \
+- V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \
+- V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \
+- V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A)
++ V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \
++ V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \
++ V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \
++ V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \
++ V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \
++ V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \
++ V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \
++ V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \
++ V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \
++ V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \
++ V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \
++ V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \
++ V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \
++ V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \
++ V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \
++ V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \
++ V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \
++ V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \
++ V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \
++ V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \
++ V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \
++ V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \
++ V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \
++ V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \
++ V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \
++ V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \
++ V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \
++ V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \
++ V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \
++ V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \
++ V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \
++ V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \
++ V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \
++ V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \
++ V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \
++ V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \
++ V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \
++ V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \
++ V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \
++ V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \
++ V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \
++ V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \
++ V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \
++ V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \
++ V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \
++ V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \
++ V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \
++ V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \
++ V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \
++ V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \
++ V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \
++ V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \
++ V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \
++ V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \
++ V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \
++ V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \
++ V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \
++ V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \
++ V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \
++ V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \
++ V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \
++ V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \
++ V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \
++ V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A)
+
+-#define V(a,b,c,d) 0x##a##b##c##d
++#define V(a,b,c,d) 0x##a##b##c##d
+ static uint32 FT0[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##d##a##b##c
++#define V(a,b,c,d) 0x##d##a##b##c
+ static uint32 FT1[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##c##d##a##b
++#define V(a,b,c,d) 0x##c##d##a##b
+ static uint32 FT2[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##b##c##d##a
++#define V(a,b,c,d) 0x##b##c##d##a
+ static uint32 FT3[256] = { FT };
++
+ #undef V
+
+ #undef FT
+
+ /* reverse S-box */
+
+-static uint32 RSb[256] =
+-{
+- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
+- 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
+- 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
+- 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
+- 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
+- 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
+- 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
+- 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
+- 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
+- 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
+- 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
+- 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
+- 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
+- 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
+- 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
+- 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
+- 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
++static uint32 RSb[256] = {
++ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
++ 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
++ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
++ 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
++ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
++ 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
++ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
++ 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
++ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
++ 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
++ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
++ 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
++ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
++ 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
++ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
++ 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
++ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
++ 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
++ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
++ 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
++ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
++ 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
++ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
++ 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
++ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
++ 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
++ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
++ 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
++ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
++ 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
++ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
++ 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+ };
+
+ /* reverse table */
+
+-#define RT \
++#define RT \
+ \
+- V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \
+- V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \
+- V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \
+- V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \
+- V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \
+- V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \
+- V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \
+- V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \
+- V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \
+- V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \
+- V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \
+- V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \
+- V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \
+- V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \
+- V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \
+- V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \
+- V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \
+- V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \
+- V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \
+- V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \
+- V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \
+- V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \
+- V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \
+- V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \
+- V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \
+- V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \
+- V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \
+- V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \
+- V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \
+- V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \
+- V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \
+- V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \
+- V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \
+- V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \
+- V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \
+- V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \
+- V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \
+- V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \
+- V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \
+- V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \
+- V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \
+- V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \
+- V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \
+- V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \
+- V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \
+- V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \
+- V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \
+- V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \
+- V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \
+- V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \
+- V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \
+- V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \
+- V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \
+- V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \
+- V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \
+- V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \
+- V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \
+- V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \
+- V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \
+- V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \
+- V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \
+- V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \
+- V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \
+- V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42)
++ V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \
++ V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \
++ V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \
++ V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \
++ V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \
++ V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \
++ V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \
++ V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \
++ V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \
++ V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \
++ V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \
++ V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \
++ V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \
++ V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \
++ V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \
++ V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \
++ V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \
++ V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \
++ V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \
++ V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \
++ V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \
++ V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \
++ V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \
++ V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \
++ V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \
++ V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \
++ V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \
++ V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \
++ V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \
++ V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \
++ V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \
++ V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \
++ V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \
++ V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \
++ V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \
++ V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \
++ V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \
++ V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \
++ V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \
++ V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \
++ V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \
++ V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \
++ V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \
++ V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \
++ V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \
++ V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \
++ V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \
++ V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \
++ V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \
++ V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \
++ V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \
++ V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \
++ V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \
++ V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \
++ V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \
++ V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \
++ V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \
++ V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \
++ V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \
++ V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \
++ V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \
++ V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \
++ V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \
++ V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42)
+
+-#define V(a,b,c,d) 0x##a##b##c##d
++#define V(a,b,c,d) 0x##a##b##c##d
+ static uint32 RT0[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##d##a##b##c
++#define V(a,b,c,d) 0x##d##a##b##c
+ static uint32 RT1[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##c##d##a##b
++#define V(a,b,c,d) 0x##c##d##a##b
+ static uint32 RT2[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##b##c##d##a
++#define V(a,b,c,d) 0x##b##c##d##a
+ static uint32 RT3[256] = { RT };
++
+ #undef V
+
+ #undef RT
+
+ /* round constants */
+
+-static uint32 RCON[10] =
+-{
+- 0x01000000, 0x02000000, 0x04000000, 0x08000000,
+- 0x10000000, 0x20000000, 0x40000000, 0x80000000,
+- 0x1B000000, 0x36000000
++static uint32 RCON[10] = {
++ 0x01000000, 0x02000000, 0x04000000, 0x08000000,
++ 0x10000000, 0x20000000, 0x40000000, 0x80000000,
++ 0x1B000000, 0x36000000
+ };
+
+-/* key schedule tables */
++/* key schedule tables */
+
+ static int KT_init = 1;
+
+@@ -750,451 +953,445 @@
+ static uint32 KT2[256];
+ static uint32 KT3[256];
+
+-/* platform-independant 32-bit integer manipulation macros */
++/* platform-independant 32-bit integer manipulation macros */
++
++#define GET_UINT32(n,b,i) \
++{ \
++ (n) = ( (uint32) (b)[(i) ] << 24 ) \
++ | ( (uint32) (b)[(i) + 1] << 16 ) \
++ | ( (uint32) (b)[(i) + 2] << 8 ) \
++ | ( (uint32) (b)[(i) + 3] ); \
++}
+
+-#define GET_UINT32(n,b,i) \
+-{ \
+- (n) = ( (uint32) (b)[(i) ] << 24 ) \
+- | ( (uint32) (b)[(i) + 1] << 16 ) \
+- | ( (uint32) (b)[(i) + 2] << 8 ) \
+- | ( (uint32) (b)[(i) + 3] ); \
+-}
+-
+-#define PUT_UINT32(n,b,i) \
+-{ \
+- (b)[(i) ] = (uint8) ( (n) >> 24 ); \
+- (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
+- (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
+- (b)[(i) + 3] = (uint8) ( (n) ); \
++#define PUT_UINT32(n,b,i) \
++{ \
++ (b)[(i) ] = (uint8) ( (n) >> 24 ); \
++ (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
++ (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
++ (b)[(i) + 3] = (uint8) ( (n) ); \
+ }
+
+ /* AES key scheduling routine */
+
+-int aes_set_key( aes_context *ctx, uint8 *key, int nbits )
++int aes_set_key(aes_context * ctx, uint8 * key, int nbits)
+ {
+- int i;
+- uint32 *RK, *SK;
+-
+- switch( nbits )
+- {
+- case 128: ctx->nr = 10; break;
+- case 192: ctx->nr = 12; break;
+- case 256: ctx->nr = 14; break;
+- default : return( 1 );
+- }
+-
+- RK = ctx->erk;
+-
+- for( i = 0; i < (nbits >> 5); i++ )
+- {
+- GET_UINT32( RK[i], key, i * 4 );
+- }
+-
+- /* setup encryption round keys */
+-
+- switch( nbits )
+- {
+- case 128:
+-
+- for( i = 0; i < 10; i++, RK += 4 )
+- {
+- RK[4] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[3] >> 24 ) ] );
+-
+- RK[5] = RK[1] ^ RK[4];
+- RK[6] = RK[2] ^ RK[5];
+- RK[7] = RK[3] ^ RK[6];
+- }
+- break;
+-
+- case 192:
+-
+- for( i = 0; i < 8; i++, RK += 6 )
+- {
+- RK[6] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[5] >> 24 ) ] );
+-
+- RK[7] = RK[1] ^ RK[6];
+- RK[8] = RK[2] ^ RK[7];
+- RK[9] = RK[3] ^ RK[8];
+- RK[10] = RK[4] ^ RK[9];
+- RK[11] = RK[5] ^ RK[10];
+- }
+- break;
+-
+- case 256:
+-
+- for( i = 0; i < 7; i++, RK += 8 )
+- {
+- RK[8] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[7] >> 24 ) ] );
+-
+- RK[9] = RK[1] ^ RK[8];
+- RK[10] = RK[2] ^ RK[9];
+- RK[11] = RK[3] ^ RK[10];
+-
+- RK[12] = RK[4] ^
+- ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[11] ) ] );
+-
+- RK[13] = RK[5] ^ RK[12];
+- RK[14] = RK[6] ^ RK[13];
+- RK[15] = RK[7] ^ RK[14];
+- }
+- break;
+- }
+-
+- /* setup decryption round keys */
++ int i;
++ uint32 *RK, *SK;
+
+- if( KT_init )
+- {
+- for( i = 0; i < 256; i++ )
+- {
+- KT0[i] = RT0[ FSb[i] ];
+- KT1[i] = RT1[ FSb[i] ];
+- KT2[i] = RT2[ FSb[i] ];
+- KT3[i] = RT3[ FSb[i] ];
+- }
++ switch (nbits) {
++ case 128:
++ ctx->nr = 10;
++ break;
++ case 192:
++ ctx->nr = 12;
++ break;
++ case 256:
++ ctx->nr = 14;
++ break;
++ default:
++ return (1);
++ }
++
++ RK = ctx->erk;
++
++ for (i = 0; i < (nbits >> 5); i++) {
++ GET_UINT32(RK[i], key, i * 4);
++ }
++
++ /* setup encryption round keys */
++
++ switch (nbits) {
++ case 128:
++
++ for (i = 0; i < 10; i++, RK += 4) {
++ RK[4] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[3] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[3] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[3])] << 8) ^
++ (FSb[(uint8) (RK[3] >> 24)]);
++
++ RK[5] = RK[1] ^ RK[4];
++ RK[6] = RK[2] ^ RK[5];
++ RK[7] = RK[3] ^ RK[6];
++ }
++ break;
++
++ case 192:
++
++ for (i = 0; i < 8; i++, RK += 6) {
++ RK[6] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[5] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[5] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[5])] << 8) ^
++ (FSb[(uint8) (RK[5] >> 24)]);
++
++ RK[7] = RK[1] ^ RK[6];
++ RK[8] = RK[2] ^ RK[7];
++ RK[9] = RK[3] ^ RK[8];
++ RK[10] = RK[4] ^ RK[9];
++ RK[11] = RK[5] ^ RK[10];
++ }
++ break;
++
++ case 256:
++
++ for (i = 0; i < 7; i++, RK += 8) {
++ RK[8] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[7] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[7] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[7])] << 8) ^
++ (FSb[(uint8) (RK[7] >> 24)]);
++
++ RK[9] = RK[1] ^ RK[8];
++ RK[10] = RK[2] ^ RK[9];
++ RK[11] = RK[3] ^ RK[10];
++
++ RK[12] = RK[4] ^
++ (FSb[(uint8) (RK[11] >> 24)] << 24) ^
++ (FSb[(uint8) (RK[11] >> 16)] << 16) ^
++ (FSb[(uint8) (RK[11] >> 8)] << 8) ^
++ (FSb[(uint8) (RK[11])]);
++
++ RK[13] = RK[5] ^ RK[12];
++ RK[14] = RK[6] ^ RK[13];
++ RK[15] = RK[7] ^ RK[14];
++ }
++ break;
++ }
++
++ /* setup decryption round keys */
++
++ if (KT_init) {
++ for (i = 0; i < 256; i++) {
++ KT0[i] = RT0[FSb[i]];
++ KT1[i] = RT1[FSb[i]];
++ KT2[i] = RT2[FSb[i]];
++ KT3[i] = RT3[FSb[i]];
++ }
++
++ KT_init = 0;
++ }
++
++ SK = ctx->drk;
++
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++
++ for (i = 1; i < ctx->nr; i++) {
++ RK -= 8;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++ }
++
++ RK -= 8;
++
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
+
+- KT_init = 0;
+- }
+-
+- SK = ctx->drk;
+-
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+-
+- for( i = 1; i < ctx->nr; i++ )
+- {
+- RK -= 8;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+- }
+-
+- RK -= 8;
+-
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+-
+- return( 0 );
++ return (0);
+ }
+
+-/* AES 128-bit block encryption routine */
++/* AES 128-bit block encryption routine */
+
+-void aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] )
++void aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16])
+ {
+- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+
+- RK = ctx->erk;
+- GET_UINT32( X0, input, 0 ); X0 ^= RK[0];
+- GET_UINT32( X1, input, 4 ); X1 ^= RK[1];
+- GET_UINT32( X2, input, 8 ); X2 ^= RK[2];
+- GET_UINT32( X3, input, 12 ); X3 ^= RK[3];
+-
+-#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
+-{ \
+- RK += 4; \
+- \
+- X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y1 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y2 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y3 ) ]; \
+- \
+- X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y2 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y3 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y0 ) ]; \
+- \
+- X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y3 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y0 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y1 ) ]; \
+- \
+- X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y0 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y1 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y2 ) ]; \
+-}
+-
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */
+-
+- if( ctx->nr > 10 )
+- {
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */
+- }
+-
+- if( ctx->nr > 12 )
+- {
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */
+- }
+-
+- /* last round */
+-
+- RK += 4;
++ RK = ctx->erk;
++ GET_UINT32(X0, input, 0);
++ X0 ^= RK[0];
++ GET_UINT32(X1, input, 4);
++ X1 ^= RK[1];
++ GET_UINT32(X2, input, 8);
++ X2 ^= RK[2];
++ GET_UINT32(X3, input, 12);
++ X3 ^= RK[3];
++
++#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
++{ \
++ RK += 4; \
++ \
++ X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y1 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y2 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y3 ) ]; \
++ \
++ X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y2 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y3 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y0 ) ]; \
++ \
++ X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y3 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y0 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y1 ) ]; \
++ \
++ X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y0 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y1 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y2 ) ]; \
++}
+
+- X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y3 ) ] );
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
++
++ if (ctx->nr > 10) {
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
++ }
++
++ if (ctx->nr > 12) {
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
++ }
++
++ /* last round */
++
++ RK += 4;
++
++ X0 = RK[0] ^ (FSb[(uint8) (Y0 >> 24)] << 24) ^
++ (FSb[(uint8) (Y1 >> 16)] << 16) ^
++ (FSb[(uint8) (Y2 >> 8)] << 8) ^ (FSb[(uint8) (Y3)]);
++
++ X1 = RK[1] ^ (FSb[(uint8) (Y1 >> 24)] << 24) ^
++ (FSb[(uint8) (Y2 >> 16)] << 16) ^
++ (FSb[(uint8) (Y3 >> 8)] << 8) ^ (FSb[(uint8) (Y0)]);
++
++ X2 = RK[2] ^ (FSb[(uint8) (Y2 >> 24)] << 24) ^
++ (FSb[(uint8) (Y3 >> 16)] << 16) ^
++ (FSb[(uint8) (Y0 >> 8)] << 8) ^ (FSb[(uint8) (Y1)]);
++
++ X3 = RK[3] ^ (FSb[(uint8) (Y3 >> 24)] << 24) ^
++ (FSb[(uint8) (Y0 >> 16)] << 16) ^
++ (FSb[(uint8) (Y1 >> 8)] << 8) ^ (FSb[(uint8) (Y2)]);
++
++ PUT_UINT32(X0, output, 0);
++ PUT_UINT32(X1, output, 4);
++ PUT_UINT32(X2, output, 8);
++ PUT_UINT32(X3, output, 12);
++}
+
+- X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y0 ) ] );
++/* AES 128-bit block decryption routine */
+
+- X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y1 ) ] );
++void aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16])
++{
++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+
+- X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y2 ) ] );
++ RK = ctx->drk;
+
+- PUT_UINT32( X0, output, 0 );
+- PUT_UINT32( X1, output, 4 );
+- PUT_UINT32( X2, output, 8 );
+- PUT_UINT32( X3, output, 12 );
++ GET_UINT32(X0, input, 0);
++ X0 ^= RK[0];
++ GET_UINT32(X1, input, 4);
++ X1 ^= RK[1];
++ GET_UINT32(X2, input, 8);
++ X2 ^= RK[2];
++ GET_UINT32(X3, input, 12);
++ X3 ^= RK[3];
++
++#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
++{ \
++ RK += 4; \
++ \
++ X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y3 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y2 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y1 ) ]; \
++ \
++ X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y0 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y3 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y2 ) ]; \
++ \
++ X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y1 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y0 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y3 ) ]; \
++ \
++ X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y2 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y1 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y0 ) ]; \
+ }
+
+-/* AES 128-bit block decryption routine */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
++
++ if (ctx->nr > 10) {
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
++ }
++
++ if (ctx->nr > 12) {
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
++ }
++
++ /* last round */
++
++ RK += 4;
++
++ X0 = RK[0] ^ (RSb[(uint8) (Y0 >> 24)] << 24) ^
++ (RSb[(uint8) (Y3 >> 16)] << 16) ^
++ (RSb[(uint8) (Y2 >> 8)] << 8) ^ (RSb[(uint8) (Y1)]);
++
++ X1 = RK[1] ^ (RSb[(uint8) (Y1 >> 24)] << 24) ^
++ (RSb[(uint8) (Y0 >> 16)] << 16) ^
++ (RSb[(uint8) (Y3 >> 8)] << 8) ^ (RSb[(uint8) (Y2)]);
++
++ X2 = RK[2] ^ (RSb[(uint8) (Y2 >> 24)] << 24) ^
++ (RSb[(uint8) (Y1 >> 16)] << 16) ^
++ (RSb[(uint8) (Y0 >> 8)] << 8) ^ (RSb[(uint8) (Y3)]);
++
++ X3 = RK[3] ^ (RSb[(uint8) (Y3 >> 24)] << 24) ^
++ (RSb[(uint8) (Y2 >> 16)] << 16) ^
++ (RSb[(uint8) (Y1 >> 8)] << 8) ^ (RSb[(uint8) (Y0)]);
++
++ PUT_UINT32(X0, output, 0);
++ PUT_UINT32(X1, output, 4);
++ PUT_UINT32(X2, output, 8);
++ PUT_UINT32(X3, output, 12);
++}
+
+-void aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] )
++void hmac_sha1(unsigned char *text, int text_len, unsigned char *key,
++ int key_len, unsigned char *digest)
+ {
+- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+-
+- RK = ctx->drk;
+-
+- GET_UINT32( X0, input, 0 ); X0 ^= RK[0];
+- GET_UINT32( X1, input, 4 ); X1 ^= RK[1];
+- GET_UINT32( X2, input, 8 ); X2 ^= RK[2];
+- GET_UINT32( X3, input, 12 ); X3 ^= RK[3];
+-
+-#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
+-{ \
+- RK += 4; \
+- \
+- X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y3 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y2 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y1 ) ]; \
+- \
+- X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y0 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y3 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y2 ) ]; \
+- \
+- X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y1 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y0 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y3 ) ]; \
+- \
+- X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y2 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y1 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y0 ) ]; \
+-}
+-
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */
+-
+- if( ctx->nr > 10 )
+- {
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */
+- }
+-
+- if( ctx->nr > 12 )
+- {
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */
+- }
++ SHA_CTX context;
++ unsigned char k_ipad[65]; /* inner padding - key XORd with ipad */
++ unsigned char k_opad[65]; /* outer padding - key XORd with opad */
++ int i;
++
++ /* if key is longer than 64 bytes reset it to key=SHA1(key) */
++ if (key_len > 64) {
++ SHA_CTX tctx;
++
++ SHAInit(&tctx);
++ SHAUpdate(&tctx, key, key_len);
++ SHAFinal(&tctx, key);
++
++ key_len = 20;
++ }
++
++ /*
++ * the HMAC_SHA1 transform looks like:
++ *
++ * SHA1(K XOR opad, SHA1(K XOR ipad, text))
++ *
++ * where K is an n byte key
++ * ipad is the byte 0x36 repeated 64 times
++ * opad is the byte 0x5c repeated 64 times
++ * and text is the data being protected
++ */
++
++ /* start out by storing key in pads */
++ memset(k_ipad, 0, sizeof k_ipad);
++ memset(k_opad, 0, sizeof k_opad);
++ memcpy(k_ipad, key, key_len);
++ memcpy(k_opad, key, key_len);
++
++ /* XOR key with ipad and opad values */
++ for (i = 0; i < 64; i++) {
++ k_ipad[i] ^= 0x36;
++ k_opad[i] ^= 0x5c;
++ }
++
++ /* perform inner SHA1 */
++ SHAInit(&context); /* init context for 1st pass */
++ SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
++ SHAUpdate(&context, text, text_len); /* then text of datagram */
++ SHAFinal(&context, digest); /* finish up 1st pass */
++
++ /* perform outer SHA1 */
++ SHAInit(&context); /* init context for 2nd pass */
++ SHAUpdate(&context, k_opad, 64); /* start with outer pad */
++ SHAUpdate(&context, digest, 20); /* then results of 1st hash */
++ SHAFinal(&context, digest); /* finish up 2nd pass */
++}
+
+- /* last round */
++/*
++* F(P, S, c, i) = U1 xor U2 xor ... Uc
++* U1 = PRF(P, S || Int(i))
++* U2 = PRF(P, U1)
++* Uc = PRF(P, Uc-1)
++*/
+
+- RK += 4;
++void F(char *password, unsigned char *ssid, int ssidlength, int iterations,
++ int count, unsigned char *output)
++{
++ unsigned char digest[36], digest1[SHA_DIGEST_LEN];
++ int i, j;
+
+- X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y1 ) ] );
+-
+- X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y2 ) ] );
+-
+- X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y3 ) ] );
+-
+- X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y0 ) ] );
+-
+- PUT_UINT32( X0, output, 0 );
+- PUT_UINT32( X1, output, 4 );
+- PUT_UINT32( X2, output, 8 );
+- PUT_UINT32( X3, output, 12 );
+-}
+-
+-void hmac_sha1(unsigned char *text, int text_len, unsigned char *key, int key_len, unsigned char *digest)
+-{
+- SHA_CTX context;
+- unsigned char k_ipad[65]; /* inner padding - key XORd with ipad */
+- unsigned char k_opad[65]; /* outer padding - key XORd with opad */
+- int i;
+-
+- /* if key is longer than 64 bytes reset it to key=SHA1(key) */
+- if (key_len > 64)
+- {
+- SHA_CTX tctx;
+-
+- SHAInit(&tctx);
+- SHAUpdate(&tctx, key, key_len);
+- SHAFinal(&tctx, key);
+-
+- key_len = 20;
+- }
+-
+- /*
+- * the HMAC_SHA1 transform looks like:
+- *
+- * SHA1(K XOR opad, SHA1(K XOR ipad, text))
+- *
+- * where K is an n byte key
+- * ipad is the byte 0x36 repeated 64 times
+- * opad is the byte 0x5c repeated 64 times
+- * and text is the data being protected
+- */
+-
+- /* start out by storing key in pads */
+- memset(k_ipad, 0, sizeof k_ipad);
+- memset(k_opad, 0, sizeof k_opad);
+- memcpy(k_ipad, key, key_len);
+- memcpy(k_opad, key, key_len);
+-
+- /* XOR key with ipad and opad values */
+- for (i = 0; i < 64; i++)
+- {
+- k_ipad[i] ^= 0x36;
+- k_opad[i] ^= 0x5c;
+- }
+-
+- /* perform inner SHA1*/
+- SHAInit(&context); /* init context for 1st pass */
+- SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
+- SHAUpdate(&context, text, text_len); /* then text of datagram */
+- SHAFinal(&context, digest); /* finish up 1st pass */
+-
+- /* perform outer SHA1 */
+- SHAInit(&context); /* init context for 2nd pass */
+- SHAUpdate(&context, k_opad, 64); /* start with outer pad */
+- SHAUpdate(&context, digest, 20); /* then results of 1st hash */
+- SHAFinal(&context, digest); /* finish up 2nd pass */
+-}
++ /* U1 = PRF(P, S || int(i)) */
++ memcpy(digest, ssid, ssidlength);
++ digest[ssidlength] = (unsigned char)((count >> 24) & 0xff);
++ digest[ssidlength + 1] = (unsigned char)((count >> 16) & 0xff);
++ digest[ssidlength + 2] = (unsigned char)((count >> 8) & 0xff);
++ digest[ssidlength + 3] = (unsigned char)(count & 0xff);
++ hmac_sha1(digest, ssidlength + 4, (unsigned char *)password, (int)strlen(password), digest1); // for WPA update
++
++ /* output = U1 */
++ memcpy(output, digest1, SHA_DIGEST_LEN);
++
++ for (i = 1; i < iterations; i++) {
++ /* Un = PRF(P, Un-1) */
++ hmac_sha1(digest1, SHA_DIGEST_LEN, (unsigned char *)password, (int)strlen(password), digest); // for WPA update
++ memcpy(digest1, digest, SHA_DIGEST_LEN);
++
++ /* output = output xor Un */
++ for (j = 0; j < SHA_DIGEST_LEN; j++) {
++ output[j] ^= digest[j];
++ }
++ }
++}
+
+ /*
+-* F(P, S, c, i) = U1 xor U2 xor ... Uc
+-* U1 = PRF(P, S || Int(i))
+-* U2 = PRF(P, U1)
+-* Uc = PRF(P, Uc-1)
+-*/
+-
+-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output)
+-{
+- unsigned char digest[36], digest1[SHA_DIGEST_LEN];
+- int i, j;
+-
+- /* U1 = PRF(P, S || int(i)) */
+- memcpy(digest, ssid, ssidlength);
+- digest[ssidlength] = (unsigned char)((count>>24) & 0xff);
+- digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff);
+- digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff);
+- digest[ssidlength+3] = (unsigned char)(count & 0xff);
+- hmac_sha1(digest, ssidlength+4, (unsigned char*) password, (int) strlen(password), digest1); // for WPA update
+-
+- /* output = U1 */
+- memcpy(output, digest1, SHA_DIGEST_LEN);
+-
+- for (i = 1; i < iterations; i++)
+- {
+- /* Un = PRF(P, Un-1) */
+- hmac_sha1(digest1, SHA_DIGEST_LEN, (unsigned char*) password, (int) strlen(password), digest); // for WPA update
+- memcpy(digest1, digest, SHA_DIGEST_LEN);
+-
+- /* output = output xor Un */
+- for (j = 0; j < SHA_DIGEST_LEN; j++)
+- {
+- output[j] ^= digest[j];
+- }
+- }
+-}
+-/*
+-* password - ascii string up to 63 characters in length
+-* ssid - octet string up to 32 octets
+-* ssidlength - length of ssid in octets
+-* output must be 40 octets in length and outputs 256 bits of key
+-*/
+-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output)
+-{
+- if ((strlen(password) > 63) || (ssidlength > 32))
+- return 0;
+-
+- F(password, ssid, ssidlength, 4096, 1, output);
+- F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]);
+- return 1;
++* password - ascii string up to 63 characters in length
++* ssid - octet string up to 32 octets
++* ssidlength - length of ssid in octets
++* output must be 40 octets in length and outputs 256 bits of key
++*/
++int PasswordHash(char *password, unsigned char *ssid, int ssidlength,
++ unsigned char *output)
++{
++ if ((strlen(password) > 63) || (ssidlength > 32))
++ return 0;
++
++ F(password, ssid, ssidlength, 4096, 1, output);
++ F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]);
++ return 1;
+ }
+diff -Nur rt2500-1.1.0-b4/Module/md5.h rt2500-cvs-2007061011/Module/md5.h
+--- rt2500-1.1.0-b4/Module/md5.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/md5.h 2007-05-29 05:49:17.000000000 +0200
+@@ -1,94 +1,96 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
+ * This MD5 code is based on code from Dynamics -- HUT Mobile IP *
+ * Copyright (C) 1998-2001, Dynamics group *
+- ***************************************************************************/
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: md5.h
+- *
++ *
+ * Abstract: contain MD5 and AES cipher algorithm
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+-#ifndef MD5_H
+-#define MD5_H
++#ifndef __MD5_H__
++#define __MD5_H__
+
+ #define MD5_MAC_LEN 16
+ #define SHA_DIGEST_LEN 20
+
+-struct MD5Context {
+- u32 buf[4];
+- u32 bits[2];
+- u8 in[64];
+-};
++typedef struct _MD5_CTX {
++ ULONG Buf[4]; // buffers of four states
++ UCHAR Input[64]; // input message
++ ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
++} MD5_CTX;
++
++VOID MD5Init(MD5_CTX * pCtx);
++VOID MD5Update(MD5_CTX * pCtx, UCHAR * pData, ULONG LenInBytes);
++VOID MD5Final(UCHAR Digest[16], MD5_CTX * pCtx);
++VOID MD5Transform(ULONG Buf[4], ULONG Mes[16]);
++
++void md5_mac(UCHAR * key, ULONG key_len, UCHAR * data, ULONG data_len,
++ UCHAR * mac);
++void hmac_md5(UCHAR * key, ULONG key_len, UCHAR * data, ULONG data_len,
++ UCHAR * mac);
++
++#endif // __MD5_H__
++
++/******************************************************************************/
++
++VOID SHAInit(SHA_CTX * pCtx);
++UCHAR SHAUpdate(SHA_CTX * pCtx, UCHAR * pData, ULONG LenInBytes);
++VOID SHAFinal(SHA_CTX * pCtx, UCHAR Digest[20]);
++VOID SHATransform(ULONG Buf[5], ULONG Mes[20]);
++
++void hmac_sha1(unsigned char *text, int text_len, unsigned char *key,
++ int key_len, unsigned char *digest);
++void F(char *password, unsigned char *ssid, int ssidlength, int iterations,
++ int count, unsigned char *output);
++int PasswordHash(char *password, unsigned char *ssid, int ssidlength,
++ unsigned char *output);
++
++/******************************************************************************/
++#ifndef _AES_H
++#define _AES_H
+
+-void MD5Init(struct MD5Context *context);
+-void MD5Update(struct MD5Context *context, unsigned char *buf, unsigned len);
+-void MD5Final(unsigned char digest[16], struct MD5Context *context);
+-void MD5Transform(u32 buf[4], u32 in[16]);
+-
+-typedef struct MD5Context MD5_CTX;
+-
+-
+-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
+-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
+-
+-#endif /* MD5_H */
+-
+-#ifndef _AES_H
+-#define _AES_H
+-
+-#ifndef uint8
+-#define uint8 unsigned char
++#ifndef uint8
++#define uint8 unsigned char
+ #endif
+
+-#ifndef uint32
+-#define uint32 unsigned long int
++#ifndef uint32
++#define uint32 unsigned long int
+ #endif
+
+-typedef struct
+-{
+- uint32 erk[64]; /* encryption round keys */
+- uint32 drk[64]; /* decryption round keys */
+- int nr; /* number of rounds */
+-}
+-aes_context;
+-
+-int aes_set_key( aes_context *ctx, uint8 *key, int nbits );
+-void aes_encrypt( aes_context *ctx, uint8 input[16], uint8 output[16] );
+-void aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] );
+-
+-
+-void SHAInit(SHA_CTX *ctx);
+-void SHAUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len);
+-void SHAFinal(SHA_CTX *ctx, unsigned char hashout[20]);
+-void SHAHashBlock(SHA_CTX *ctx);
+-void hmac_sha1(unsigned char *text, int text_len, unsigned char *key, int key_len, unsigned char *digest);
+-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output);
+-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output);
+-
+-#endif /* aes.h */
++typedef struct {
++ uint32 erk[64]; /* encryption round keys */
++ uint32 drk[64]; /* decryption round keys */
++ int nr; /* number of rounds */
++} aes_context;
++
++int aes_set_key(aes_context * ctx, uint8 * key, int nbits);
++void aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16]);
++void aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16]);
+
++#endif /* aes.h */
+diff -Nur rt2500-1.1.0-b4/Module/mlme.c rt2500-cvs-2007061011/Module/mlme.c
+--- rt2500-1.1.0-b4/Module/mlme.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/mlme.c 2007-05-15 21:41:34.000000000 +0200
+@@ -1,54 +1,54 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: mlme.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 8th Dec 04 kmalloc ATOMIC fixes
+- * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- * Ivo (rt2400) 15th Dec 04 Uninitialised timer
++ * RobinC 10th Dec 04 RFMON Support
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * Ivo (rt2400) 15th Dec 04 Uninitialised timer
+ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * BrunoH 3rd Feb 04 Fix for 802.11b adhoc association
+- * JohnC 19th Mar 04 Fixes for quality reporting
++ * JohnC 19th Mar 04 Fixes for quality reporting
+ * MarkW 13th Jun 05 Fix to allow adhoc network creation
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+ #include <stdarg.h>
+
+-// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than
+-// this value, then it's quaranteed capable of operating in 36 mbps TX rate in
++// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than
++// this value, then it's quaranteed capable of operating in 36 mbps TX rate in
+ // clean environment.
+ // TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100
+ CHAR RssiSafeLevelForTxRate[] ={ -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 };
+
+- // 1 2 5.5 11
++ // 1 2 5.5 11
+ UCHAR Phy11BNextRateDownward[] = {RATE_1, RATE_1, RATE_2, RATE_5_5};
+ UCHAR Phy11BNextRateUpward[] = {RATE_2, RATE_5_5, RATE_11, RATE_11};
+
+@@ -68,10 +68,10 @@
+
+ USHORT OldRateUpPER[] = { 40, 40, 40, 40, 30, 30, 30, 30, 20, 20, 10, 10 }; // in percentage
+ USHORT OldRateDownPER[] = { 45, 45, 45, 45, 35, 35, 35, 35, 25, 25, 25, 12 }; // in percentage
+-
++
+ UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100};
+ USHORT RateIdTo500Kbps[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200};
+-
++
+ RTMP_RF_REGS RF2522RegTable[] = {
+ // ch R1 R2 R3(TX0~4=0) R4
+ {1, 0x94002050, 0x940c1fda, 0x94000101, 0},
+@@ -144,10 +144,10 @@
+ {14, 0x94032020, 0x94000d1a, 0x94000101, 0x94000a03}
+ };
+ #define NUM_OF_2524_CHNL (sizeof(RF2524RegTable) / sizeof(RTMP_RF_REGS))
+-
++
+ RTMP_RF_REGS RF2525RegTable[] = {
+ // ch R1 R2 R3(TX0~4=0) R4
+- {1, 0x94022020, 0x94080c9e, 0x94060111, 0x94000a1b}, // {1, 0x94022010, 0x9408062e, 0x94060111, 0x94000a23},
++ {1, 0x94022020, 0x94080c9e, 0x94060111, 0x94000a1b}, // {1, 0x94022010, 0x9408062e, 0x94060111, 0x94000a23},
+ {2, 0x94022020, 0x94080ca2, 0x94060111, 0x94000a1b},
+ {3, 0x94022020, 0x94080ca6, 0x94060111, 0x94000a1b},
+ {4, 0x94022020, 0x94080caa, 0x94060111, 0x94000a1b},
+@@ -157,15 +157,15 @@
+ {8, 0x94022020, 0x94080cba, 0x94060111, 0x94000a1b},
+ {9, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
+ {10, 0x94022020, 0x94080d02, 0x94060111, 0x94000a1b},
+- {11, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b}, // {11, 0x94022010, 0x94080682, 0x94060111, 0x94000a23},
++ {11, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b}, // {11, 0x94022010, 0x94080682, 0x94060111, 0x94000a23},
+ {12, 0x94022020, 0x94080d0a, 0x94060111, 0x94000a1b},
+- {13, 0x94022020, 0x94080d0e, 0x94060111, 0x94000a1b}, // {13, 0x94022010, 0x94080686, 0x94060111, 0x94000a23},
++ {13, 0x94022020, 0x94080d0e, 0x94060111, 0x94000a1b}, // {13, 0x94022010, 0x94080686, 0x94060111, 0x94000a23},
+ {14, 0x94022020, 0x94080d1a, 0x94060111, 0x94000a03}
+ };
+ #define NUM_OF_2525_CHNL (sizeof(RF2525RegTable) / sizeof(RTMP_RF_REGS))
+
+ RTMP_RF_REGS RF2525HBOffsetRegTable[] = {
+- {1, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
++ {1, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
+ {2, 0x94022020, 0x94080d02, 0x94060111, 0x94000a1b},
+ {3, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b},
+ {4, 0x94022020, 0x94080d0a, 0x94060111, 0x94000a1b},
+@@ -175,9 +175,9 @@
+ {8, 0x94022020, 0x94080d1a, 0x94060111, 0x94000a1b},
+ {9, 0x94022020, 0x94080d1e, 0x94060111, 0x94000a1b},
+ {10, 0x94022020, 0x94080d22, 0x94060111, 0x94000a1b},
+- {11, 0x94022020, 0x94080d26, 0x94060111, 0x94000a1b},
++ {11, 0x94022020, 0x94080d26, 0x94060111, 0x94000a1b},
+ {12, 0x94022020, 0x94080d2a, 0x94060111, 0x94000a1b},
+- {13, 0x94022020, 0x94080d2e, 0x94060111, 0x94000a1b},
++ {13, 0x94022020, 0x94080d2e, 0x94060111, 0x94000a1b},
+ {14, 0x94022020, 0x94080d3a, 0x94060111, 0x94000a03}
+ };
+
+@@ -195,7 +195,7 @@
+ {8, 0x94022020, 0x94081192, 0x94060111, 0x94000a0b},
+ {9, 0x94022020, 0x94081196, 0x94060111, 0x94000a0b},
+ {10, 0x94022020, 0x9408119a, 0x94060111, 0x94000a0b},
+- {11, 0x94022020, 0x9408119e, 0x94060111, 0x94000a0b},
++ {11, 0x94022020, 0x9408119e, 0x94060111, 0x94000a0b},
+ {12, 0x94022020, 0x940811a2, 0x94060111, 0x94000a0b},
+ {13, 0x94022020, 0x940811a6, 0x94060111, 0x94000a0b},
+ {14, 0x94022020, 0x940811ae, 0x94060111, 0x94000a1b}
+@@ -212,7 +212,7 @@
+ {8, 0x94022010, 0x940808aa, 0x94060111, 0x94000a07},
+ {9, 0x94022010, 0x940808aa, 0x94060111, 0x94000a1b},
+ {10, 0x94022010, 0x940808ae, 0x94060111, 0x94000a07},
+- {11, 0x94022010, 0x940808ae, 0x94060111, 0x94000a1b},
++ {11, 0x94022010, 0x940808ae, 0x94060111, 0x94000a1b},
+ {12, 0x94022010, 0x940808b2, 0x94060111, 0x94000a07},
+ {13, 0x94022010, 0x940808b2, 0x94060111, 0x94000a1b},
+ {14, 0x94022010, 0x940808b6, 0x94060111, 0x94000a23}
+@@ -238,7 +238,7 @@
+ {14, 0x94022020, 0x940011ae, 0x94000101, 0x94000a1b},
+
+ // still lack of MMAC(Japan) ch 34,38,42,46
+-
++
+ {36, 0x94022010, 0x94018896, 0x94000101, 0x94000a1f},
+ {40, 0x94022010, 0x9401889a, 0x94000101, 0x94000a1f},
+ {44, 0x94022010, 0x9401889e, 0x94000101, 0x94000a1f},
+@@ -247,7 +247,7 @@
+ {66, 0x94022010, 0x940188aa, 0x94000101, 0x94000a1f},
+ {60, 0x94022010, 0x940188ae, 0x94000101, 0x94000a1f},
+ {64, 0x94022010, 0x940188b2, 0x94000101, 0x94000a1f},
+-
++
+ {100, 0x94022010, 0x94008802, 0x94000101, 0x94000a0f},
+ {104, 0x94022010, 0x94008806, 0x94000101, 0x94000a0f},
+ {108, 0x94022010, 0x9400880a, 0x94000101, 0x94000a0f},
+@@ -259,7 +259,7 @@
+ {132, 0x94022010, 0x94008822, 0x94000101, 0x94000a0f},
+ {136, 0x94022010, 0x94008826, 0x94000101, 0x94000a0f},
+ {140, 0x94022010, 0x9400882a, 0x94000101, 0x94000a0f},
+-
++
+ {149, 0x94022020, 0x940090a6, 0x94000101, 0x94000a07},
+ {153, 0x94022020, 0x940090ae, 0x94000101, 0x94000a07},
+ {157, 0x94022020, 0x940090b6, 0x94000101, 0x94000a07},
+@@ -270,14 +270,14 @@
+ /*
+ ==========================================================================
+ Description:
+- initialize the MLME task and its data structure (queue, spinlock,
++ initialize the MLME task and its data structure (queue, spinlock,
+ timer, state machines).
+ Return:
+ always return NDIS_STATUS_SUCCESS
+ ==========================================================================
+ */
+ NDIS_STATUS MlmeInit(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+
+@@ -285,8 +285,8 @@
+ return Status;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--> MLME Initialize\n");
+-
+- do
++
++ do
+ {
+ pAd->Mlme.Running = FALSE;
+ spin_lock_init(&pAd->Mlme.TaskLock);
+@@ -298,10 +298,10 @@
+ // init state machines
+ ASSERT(ASSOC_FUNC_SIZE == MAX_ASSOC_MSG * MAX_ASSOC_STATE);
+ AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, pAd->Mlme.AssocFunc);
+-
++
+ ASSERT(AUTH_FUNC_SIZE == MAX_AUTH_MSG * MAX_AUTH_STATE);
+ AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, pAd->Mlme.AuthFunc);
+-
++
+ ASSERT(AUTH_RSP_FUNC_SIZE == MAX_AUTH_RSP_MSG * MAX_AUTH_RSP_STATE);
+ AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, pAd->Mlme.AuthRspFunc);
+
+@@ -310,8 +310,8 @@
+
+ ASSERT(WPA_PSK_FUNC_SIZE == MAX_WPA_PSK_MSG * MAX_WPA_PSK_STATE);
+ WpaPskStateMachineInit(pAd,&pAd->Mlme.WpaPskMachine,pAd->Mlme.WpaPskFunc);
+-
+- // Since we are using switch/case to implement it, the init is different from the above
++
++ // Since we are using switch/case to implement it, the init is different from the above
+ // state machine init
+ MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL);
+
+@@ -332,7 +332,7 @@
+ } while (FALSE);
+
+ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MLME_INITIALIZED);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<-- MLME Initialize\n");
+
+ return Status;
+@@ -347,83 +347,70 @@
+ Mlme has to be initialized, and there are something inside the queue
+ Note:
+ This function is invoked from MPSetInformation and MPReceive;
+- This task guarantee only one MlmeHandler will run.
++ This task guarantee only one MlmeHandler will run.
+ ==========================================================================
+ */
+ VOID MlmeHandler(
+- IN PRTMP_ADAPTER pAd)
+-{
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- schedule_work(&pAd->mlme_work);
+-}
+-
+-VOID MlmeWork(void *vpAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+- PRTMP_ADAPTER pAd = vpAd;
+-#endif
+ MLME_QUEUE_ELEM *Elem = NULL;
+ unsigned long flags;
+- int loops = 0;
+
+ // Only accept MLME and Frame from peer side, no other (control/data) frame should
+ // get into this state machine
+
+- spin_lock_irqsave(&pAd->Mlme.TaskLock,flags);
+- if(pAd->Mlme.Running)
++ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
++ if(pAd->Mlme.Running)
+ {
+- spin_unlock_irqrestore(&pAd->Mlme.TaskLock,flags);
++ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ return;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.Running = TRUE;
+ }
+- spin_unlock_irqrestore(&pAd->Mlme.TaskLock,flags);
++ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
++
++ while (TRUE) {
++ spin_lock_irqsave(&pAd->Mlme.Queue.Lock, flags);
++ if (!MlmeDequeue(&pAd->Mlme.Queue, &Elem)) {
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
++ break;
++ }
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
++
++ if (pAd->PortCfg.BssType == BSS_MONITOR)
++ continue;
+
+- while (MlmeDequeue(&pAd->Mlme.Queue, &Elem))
+- {
+ //From message type, determine which state machine I should drive
+- if (pAd->PortCfg.BssType != BSS_MONITOR)
++ switch (Elem->Machine)
+ {
+- // if dequeue success
+- switch (Elem->Machine)
+- {
+- case ASSOC_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem);
+- break;
+- case AUTH_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem);
+- break;
+- case AUTH_RSP_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem);
+- break;
+- case SYNC_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem);
+- break;
+- case MLME_CNTL_STATE_MACHINE:
+- MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem);
+- break;
+- case WPA_PSK_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem);
+- break;
+- default:
+- DBGPRINT(RT_DEBUG_TRACE, "ERROR: Illegal machine in MlmeHandler()\n");
+- break;
+- } // end of switch
++ case ASSOC_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem);
++ break;
++ case AUTH_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem);
++ break;
++ case AUTH_RSP_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem);
++ break;
++ case SYNC_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem);
++ break;
++ case MLME_CNTL_STATE_MACHINE:
++ MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem);
++ break;
++ case WPA_PSK_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem);
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_TRACE, "ERROR: Illegal machine in MlmeHandler()\n");
++ break;
++ } // end of switch
+
+- // free MLME element
+- Elem->Occupied = FALSE;
+- Elem->MsgLen = 0;
+-
+- }
+- else
+- {
+- printk(KERN_ERR DRV_NAME "ERROR: empty Elem in MlmeQueue\n");
+- }
+- loops++;
+- if (loops > 50)
+- /* something wrong - avoid locking up the computer solid */
+- break;
++ // free MLME element
++ Elem->Occupied = FALSE;
++ Elem->MsgLen = 0;
+ }
+
+ spin_lock_irqsave(&pAd->Mlme.TaskLock,flags);
+@@ -442,7 +429,7 @@
+ ==========================================================================
+ */
+ VOID MlmeHalt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisReq;
+ MLME_QUEUE_ELEM *MsgElem;
+@@ -455,8 +442,8 @@
+ return;
+
+ DBGPRINT(RT_DEBUG_TRACE, "==> MlmeHalt\n");
+-
+- if (INFRA_ON(pAd) && !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
++
++ if (INFRA_ON(pAd) && !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
+ {
+ COPY_MAC_ADDR(&DisReq.Addr, &pAd->PortCfg.Bssid);
+ DisReq.Reason = REASON_DISASSOC_STA_LEAVING;
+@@ -476,7 +463,7 @@
+ // disable BEACON generation and other BEACON related hardware timers
+ AsicDisableSync(pAd);
+ }
+-
++
+ // Cancel pending timers
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+@@ -496,7 +483,7 @@
+
+ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ udelay(1000);
+-
++
+ MlmeQueueDestroy(&pAd->Mlme.Queue);
+ StateMachineDestroy(&pAd->Mlme.AssocMachine);
+ StateMachineDestroy(&pAd->Mlme.AuthMachine);
+@@ -506,11 +493,11 @@
+ //NdisFreeSpinLock(&pAd->Mlme.Queue.Lock);
+ //NdisFreeSpinLock(&pAd->Mlme.TaskLock);
+ // NdisFreeSpinLock(&pAd->PortCfg.MacTab.Lock);
+-
++
+ MlmeFreeMemoryHandler(pAd); //Free MLME memory handler
+
+ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MLME_INITIALIZED);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<== MlmeHalt\n");
+ kfree(MsgElem);
+ }
+@@ -519,42 +506,33 @@
+ ==========================================================================
+ Description:
+ This routine is executed periodically to -
+- 1. Decide if it's a right time to turn on PwrMgmt bit of all
++ 1. Decide if it's a right time to turn on PwrMgmt bit of all
+ outgoiing frames
+ 2. Calculate ChannelQuality based on statistics of the last
+- period, so that TX rate won't toggling very frequently between a
++ period, so that TX rate won't toggling very frequently between a
+ successful TX and a failed TX.
+- 3. If the calculated ChannelQuality indicated current connection not
++ 3. If the calculated ChannelQuality indicated current connection not
+ healthy, then a ROAMing attempt is tried here.
+ ==========================================================================
+ */
+ #define ADHOC_BEACON_LOST_TIME (10*HZ) // 4 sec
+ VOID MlmePeriodicExec(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ ULONG Now32;
+ CSR15_STRUC Csr15;
+
+- if (pAd->PortCfg.BssType == BSS_MONITOR)
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+- return;
+- }
+-
+- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+- return;
+- }
+-
+- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
++ if ((pAd->PortCfg.BssType == BSS_MONITOR)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)
++ ) {
++ RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+ return;
+ }
+
+- // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a
++ // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a
+ // valid indication of the distance between this AP and its clients.
+ if (pAd->MediaState == NdisMediaStateConnected)
+ {
+@@ -568,7 +546,7 @@
+ else
+ pAd->PortCfg.NumOfAvgRssiSample = 0;
+ }
+-
++
+ Now32 = jiffies;
+
+ if (pAd->RalinkCounters.MgmtRingFullCount >= 2)
+@@ -579,7 +557,7 @@
+ {
+ pAd->RalinkCounters.MgmtRingFullCount = 0;
+ }
+-
++
+ if ((pAd->PortCfg.bBlockAssoc == TRUE) && (pAd->PortCfg.LastMicErrorTime + (60 * HZ) < Now32))
+ {
+ pAd->PortCfg.bBlockAssoc = FALSE;
+@@ -600,11 +578,11 @@
+ }
+
+
+-#ifndef WIFI_TEST
++#ifndef WIFI_TEST
+ // danamic tune BBP R17 to find a balance between sensibility and noise isolation
+- // 2003-12-05 For 2560C and before, to avoid collision with MAC ASIC, limit
++ // 2003-12-05 For 2560C and before, to avoid collision with MAC ASIC, limit
+ // BBP R17 tuning to be within 20 seconds after LINK UP. 2560D (R0=4) and
+- // after can always enable R17 tuning
++ // after can always enable R17 tuning
+ if (pAd->PortCfg.Rt2560Version >= RT2560_VER_D)
+ AsicBbpTuning(pAd);
+ else if ((pAd->MediaState == NdisMediaStateConnected) && (pAd->Mlme.PeriodicRound <= 20))
+@@ -642,23 +620,23 @@
+ if (pAd->PortCfg.MicErrCnt >= 3)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+-
++
+ // disassoc from current AP first
+ DBGPRINT(RT_DEBUG_TRACE, "MLME - disassociate with current AP after sending second continuous EAPOL frame\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_MIC_FAILURE);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ pAd->PortCfg.bBlockAssoc = TRUE;
+ }
+-
+- else
++
++ else
+ {
+ // send out a NULL frame every 10 sec. for what??? inform "PwrMgmt" bit?
+ if ((pAd->Mlme.PeriodicRound % 10) == 8)
+ EnqueueNullFrame(pAd, pAd->PortCfg.TxRate);
+-
++
+ if (CQI_IS_BAD(pAd->Mlme.ChannelQuality))
+ {
+ pAd->RalinkCounters.BadCQIAutoRecoveryCount ++;
+@@ -669,7 +647,7 @@
+ else if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) || CQI_IS_POOR(pAd->Mlme.ChannelQuality))
+ {
+ // perform aggresive roaming only when SECURITY OFF or WEP64/128;
+- // WPA and WPA-PSK has no aggresive roaming because re-negotiation
++ // WPA and WPA-PSK has no aggresive roaming because re-negotiation
+ // between 802.1x supplicant and authenticator/AAA server is required
+ // but can't be guaranteed.
+ if (pAd->PortCfg.AuthMode < Ndis802_11AuthModeWPA)
+@@ -686,7 +664,7 @@
+ // minimum BEACON to tell the peer I'm alive.
+ // drawback is that this BEACON won't well align at TBTT boundary.
+ RTMP_IO_READ32(pAd, CSR15, &Csr15.word); // read-n-clear "BcnSent" bit
+- if (Csr15.field.BeaconSent == 0)
++ if (Csr15.field.BeaconSent == 0)
+ EnqueueBeaconFrame(pAd); // software send BEACON
+ }
+ else
+@@ -697,14 +675,14 @@
+ (pAd->PortCfg.MaxDesiredRate > RATE_11) &&
+ ((pAd->PortCfg.Last11bBeaconRxTime + (5 * HZ)) < Now32))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "last 11B peer left, update Tx rates\n");
++ DBGPRINT(RT_DEBUG_TRACE, "last 11B peer left, update Tx rates\n");
+ memcpy(pAd->PortCfg.SupportedRates, pAd->PortCfg.IbssConfig.SupportedRates, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->PortCfg.SupportedRatesLen = pAd->PortCfg.IbssConfig.SupportedRatesLen;
+ MlmeUpdateTxRates(pAd, FALSE);
+ MakeIbssBeacon(pAd); // supported rates changed
+ }
+ }
+-
++
+ #ifndef SINGLE_ADHOC_LINKUP
+ // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState
+ // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can
+@@ -712,7 +690,7 @@
+ if ((pAd->PortCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < Now32) &&
+ (pAd->MediaState == NdisMediaStateConnected))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n");
++ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n");
+
+ pAd->MediaState = NdisMediaStateDisconnected;
+ // clean up previous SCAN result, add current BSS back to table if any
+@@ -731,7 +709,7 @@
+ if ((pAd->PortCfg.BssTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ MLME_SCAN_REQ_STRUCT ScanReq;
+-
++
+ if ((pAd->PortCfg.LastScanTime + 10 * HZ) < Now32)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - No matching BSS, start a new scan\n");
+@@ -745,7 +723,7 @@
+ }
+ else if (pAd->PortCfg.BssType == BSS_INDEP) // Quit the forever scan when in a very clean room
+ MlmeAutoRecoverNetwork(pAd);
+- //MlmeAutoReconnectLastSSID(pAd);
++ //MlmeAutoReconnectLastSSID(pAd);
+ }
+ else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)
+ {
+@@ -759,7 +737,7 @@
+ }
+ else
+ MlmeAutoReconnectLastSSID(pAd);
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "pAd->PortCfg.AutoReconnect is TRUE\n");
+ }
+ }
+@@ -772,7 +750,7 @@
+
+ RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+ }
+-
++
+ VOID MlmeAutoScan(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -783,17 +761,17 @@
+
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+ MlmeHandler(pAd);
+ }
+ }
+-
++
+ VOID MlmeAutoRecoverNetwork(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -808,18 +786,18 @@
+
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_SSID,
+- sizeof(NDIS_802_11_SSID),
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_SSID,
++ sizeof(NDIS_802_11_SSID),
+ &OidSsid);
+ MlmeHandler(pAd);
+ }
+
+ }
+-
++
+ VOID MlmeAutoReconnectLastSSID(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -833,12 +811,12 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Driver auto reconnect to last OID_802_11_SSID setting - %s\n", pAd->Mlme.CntlAux.Ssid);
+
+ // We will only try this attemp once, therefore change the AutoReconnect flag afterwards.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_SSID,
+- sizeof(NDIS_802_11_SSID),
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_SSID,
++ sizeof(NDIS_802_11_SSID),
+ &OidSsid);
+ MlmeHandler(pAd);
+ }
+@@ -867,17 +845,17 @@
+ for (i = 0; i < pBssTab->BssNr; i++)
+ {
+ pBss = &pBssTab->BssEntry[i];
+-
+- if ((pBssTab->BssEntry[i].LastBeaconRxTime + BEACON_LOST_TIME) < Now32)
++
++ if ((pBssTab->BssEntry[i].LastBeaconRxTime + BEACON_LOST_TIME) < Now32)
+ continue; // AP disappear
+ if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING)
+ continue; // RSSI too weak. forget it.
+ if (MAC_ADDR_EQUAL(&pBssTab->BssEntry[i].Bssid, &pAd->PortCfg.Bssid))
+ continue; // skip current AP
+- if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) && (pAd->PortCfg.LastRssi + RSSI_DELTA > pBss->Rssi))
++ if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) && (pAd->PortCfg.LastRssi + RSSI_DELTA > pBss->Rssi))
+ continue; // we're still okay, only AP with stronger RSSI is eligible for roaming
+
+- // AP passing all above rules is put into roaming candidate table
++ // AP passing all above rules is put into roaming candidate table
+ memcpy(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY));
+ pRoamTab->BssNr += 1;
+ }
+@@ -889,23 +867,23 @@
+ {
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself, not from NDIS.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
+ pAd->RalinkCounters.PoorCQIRoamingCount ++;
+ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - Roaming attempt #%d\n", pAd->RalinkCounters.PoorCQIRoamingCount);
+ MlmeEnqueue(&pAd->Mlme.Queue, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL);
+ MlmeHandler(pAd);
+ }
+ }
+-
++
+ }
+
+ /*
+ ==========================================================================
+ Description:
+- This routine calculates TxPER, RxPER of the past N-sec period. And
+- according to the calculation result, ChannelQuality is calculated here
+- to decide if current AP is still doing the job.
++ This routine calculates TxPER, RxPER of the past N-sec period. And
++ according to the calculation result, ChannelQuality is calculated here
++ to decide if current AP is still doing the job.
+
+ If ChannelQuality is not good, a ROAMing attempt may be tried later.
+ Output:
+@@ -923,11 +901,11 @@
+ //
+ // monitor TX counters change for the past period
+ //
+- TxFailCnt = pAd->WlanCounters.FailedCount.vv.LowPart -
++ TxFailCnt = pAd->WlanCounters.FailedCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.FailedCount.vv.LowPart;
+- TxRetryCnt = pAd->WlanCounters.RetryCount.vv.LowPart -
++ TxRetryCnt = pAd->WlanCounters.RetryCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.RetryCount.vv.LowPart;
+- TxOkCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart -
++ TxOkCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.TransmittedFragmentCount.vv.LowPart;
+ TxCnt = TxOkCnt + TxFailCnt;
+
+@@ -947,16 +925,16 @@
+ pAd->WlanCounters.FCSErrorCount.vv.LowPart += ((Cnt0 & 0x0000ffff) >> 7);
+ if (pAd->WlanCounters.FCSErrorCount.vv.LowPart < OldFcsCount)
+ pAd->WlanCounters.FCSErrorCount.vv.HighPart++;
+-
++
+ // Add FCS error count to private counters
+ OldFcsCount = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart;
+ pAd->RalinkCounters.RealFcsErrCount.vv.LowPart += Cnt0;
+ if (pAd->RalinkCounters.RealFcsErrCount.vv.LowPart < OldFcsCount)
+ pAd->RalinkCounters.RealFcsErrCount.vv.HighPart++;
+-
+- RxOkCnt = pAd->WlanCounters.ReceivedFragmentCount.vv.LowPart -
++
++ RxOkCnt = pAd->WlanCounters.ReceivedFragmentCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.ReceivedFragmentCount.vv.LowPart;
+- RxFailCnt = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart -
++ RxFailCnt = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.FCSErrorCount.vv.LowPart;
+ RxCnt = RxOkCnt + RxFailCnt;
+
+@@ -966,8 +944,8 @@
+ //
+ // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER
+ //
+- // This value also decides when all roaming fails (or no roaming candidates at
+- // all), should this STA stay with original AP, or a LinkDown signal
++ // This value also decides when all roaming fails (or no roaming candidates at
++ // all), should this STA stay with original AP, or a LinkDown signal
+ // is indicated to NDIS
+ //
+ if (INFRA_ON(pAd) &&
+@@ -977,7 +955,7 @@
+ // Ignore lost beacon if traffic still goes well
+ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) && (TxOkCnt < 2))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "BEACON lost for more than %d sec with TxOkCnt=%d, let CQI = 0\n", BEACON_LOST_TIME/HZ, TxOkCnt);
++ DBGPRINT(RT_DEBUG_TRACE, "BEACON lost for more than %d sec with TxOkCnt=%d, let CQI = 0\n", BEACON_LOST_TIME/HZ, TxOkCnt);
+ pAd->Mlme.ChannelQuality = 0;
+ // Lost AP, send disconnect & link down event
+ LinkDown(pAd);
+@@ -986,19 +964,19 @@
+ else
+ {
+ // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0)
+- pAd->Mlme.ChannelQuality = (RSSI_WEIGHTING * pAd->PortCfg.LastRssi +
+- TX_WEIGHTING * (100 - TxPRR) +
++ pAd->Mlme.ChannelQuality = (RSSI_WEIGHTING * pAd->PortCfg.LastRssi +
++ TX_WEIGHTING * (100 - TxPRR) +
+ RX_WEIGHTING* (100 - RxPER)) / 100;
+ if (pAd->Mlme.ChannelQuality >= 100)
+ pAd->Mlme.ChannelQuality = 100;
+ }
+-
++
+ // latch current WLAN counters for next check-for-roaming usage
+ memcpy(&pAd->Mlme.PrevWlanCounters, &pAd->WlanCounters, sizeof(COUNTER_802_11));
+ // make sure copy the real FCS counts into previous mlme counter structure.
+ pAd->Mlme.PrevWlanCounters.FCSErrorCount = pAd->RalinkCounters.RealFcsErrCount;
+-
+- DBGPRINT(RT_DEBUG_INFO, "MMCHK - CQI= %d, (Tx Fail=%d/Retry=%d/Total=%d, Rx Fail=%d/Total=%d, RSSI=%d dbm)\n",
++
++ DBGPRINT(RT_DEBUG_INFO, "MMCHK - CQI= %d, (Tx Fail=%d/Retry=%d/Total=%d, Rx Fail=%d/Total=%d, RSSI=%d dbm)\n",
+ pAd->Mlme.ChannelQuality, TxFailCnt, TxRetryCnt, TxCnt, RxFailCnt, RxCnt, pAd->PortCfg.LastRssi - pAd->PortCfg.RssiToDbm);
+
+ }
+@@ -1006,13 +984,13 @@
+ /*
+ ==========================================================================
+ Description:
+- This routine calculates the acumulated TxPER of eaxh TxRate. And
+- according to the calculation result, change PortCfg.TxRate which
+- is the stable TX Rate we expect the Radio situation could sustained.
++ This routine calculates the acumulated TxPER of eaxh TxRate. And
++ according to the calculation result, change PortCfg.TxRate which
++ is the stable TX Rate we expect the Radio situation could sustained.
+
+- PortCfg.TxRate will change dynamically within {RATE_1/RATE_6, MaxTxRate}
++ PortCfg.TxRate will change dynamically within {RATE_1/RATE_6, MaxTxRate}
+ Output:
+- PortCfg.TxRate -
++ PortCfg.TxRate -
+ NOTE:
+ call this routine every second
+ ==========================================================================
+@@ -1032,9 +1010,9 @@
+ {
+ if (pAd->PortCfg.EnableAutoRateSwitching == FALSE)
+ break;
+-
++
+ // if no traffic in the past 1-sec period, don't change TX rate,
+- // but clear all bad history. because the bad history may affect the next
++ // but clear all bad history. because the bad history may affect the next
+ // Chariot throughput test
+ if (TxTotalCnt == 0)
+ {
+@@ -1043,7 +1021,7 @@
+ memset(pAd->DrsCounters.PER, 0, MAX_LEN_OF_SUPPORTED_RATES);
+ break;
+ }
+-
++
+ // decide the next upgrade rate and downgrade rate, if any
+ if (pAd->PortCfg.PhyMode == PHY_11BG_MIXED)
+ {
+@@ -1062,7 +1040,7 @@
+ }
+ else // PHY_11ABG_MIXED
+ {
+- if (pAd->PortCfg.Channel > 14)
++ if (pAd->PortCfg.Channel > 14)
+ {
+ UpRate = Phy11ANextRateUpward[CurrRate];
+ DownRate = Phy11ANextRateDownward[CurrRate];
+@@ -1081,7 +1059,7 @@
+ if (TxTotalCnt > 15)
+ {
+ TxErrorRatio = ((pAd->DrsCounters.OneSecTxRetryOkCount + pAd->DrsCounters.OneSecTxFailCount) *100) / TxTotalCnt;
+-
++
+ // 2560D and after has implemented ASIC-based OFDM rate switching,
+ // but not 2560C & before. thus software use different PER for rate switching
+ if (pAd->PortCfg.Rt2560Version >= RT2560_VER_D)
+@@ -1106,20 +1084,20 @@
+ fUpgradeQuality = TRUE;
+ if (pAd->DrsCounters.TxQuality[CurrRate])
+ pAd->DrsCounters.TxQuality[CurrRate] --; // quality very good in CurrRate
+-
++
+ if (pAd->DrsCounters.TxRateUpPenalty)
+ pAd->DrsCounters.TxRateUpPenalty --;
+ else if (pAd->DrsCounters.TxQuality[UpRate])
+ pAd->DrsCounters.TxQuality[UpRate] --; // may improve next UP rate's quality
+ }
+-
++
+ }
+-
++
+ // if not enough TX samples, decide by heuristic rules
+ else
+ {
+ TxErrorRatio = 0;
+-
++
+ // Downgrade TX quality upon any TX failure in the past second
+ if (pAd->DrsCounters.OneSecTxFailCount)
+ {
+@@ -1155,22 +1133,22 @@
+
+ if (pAd->DrsCounters.fNoisyEnvironment)
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"DRS(noisy):");
++ DBGPRINT(RT_DEBUG_TRACE,"DRS(noisy):");
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"DRS:");
++ DBGPRINT(RT_DEBUG_TRACE,"DRS:");
+ }
+- DBGPRINT(RT_DEBUG_TRACE, "Qty[%d]=%d PER=%d%% %d-sec, Qty[%d]=%d, Pty=%d\n",
++ DBGPRINT(RT_DEBUG_TRACE, "Qty[%d]=%d PER=%d%% %d-sec, Qty[%d]=%d, Pty=%d\n",
+ RateIdToMbps[CurrRate], pAd->DrsCounters.TxQuality[CurrRate],
+ TxErrorRatio,
+ pAd->DrsCounters.CurrTxRateStableTime,
+ RateIdToMbps[UpRate], pAd->DrsCounters.TxQuality[UpRate],
+ pAd->DrsCounters.TxRateUpPenalty);
+-
++
+ // 2004-3-13 special case: Claim noisy environment
+- // decide if there was a false "rate down" in the past 2 sec due to noisy
+- // environment. if so, we would rather switch back to the higher TX rate.
++ // decide if there was a false "rate down" in the past 2 sec due to noisy
++ // environment. if so, we would rather switch back to the higher TX rate.
+ // criteria -
+ // 1. there's a higher rate available, AND
+ // 2. there was a rate-down happened, AND
+@@ -1179,8 +1157,8 @@
+ if ((UpRate != CurrRate) &&
+ (pAd->DrsCounters.LastSecTxRateChangeAction == 2) &&
+ (TxTotalCnt > 15) && // this line is to prevent the case that not enough TX sample causing PER=0%
+- (pAd->DrsCounters.PER[CurrRate] < 75) &&
+- ((pAd->DrsCounters.PER[CurrRate] > 20) || (pAd->DrsCounters.fNoisyEnvironment)) &&
++ (pAd->DrsCounters.PER[CurrRate] < 75) &&
++ ((pAd->DrsCounters.PER[CurrRate] > 20) || (pAd->DrsCounters.fNoisyEnvironment)) &&
+ ((pAd->DrsCounters.PER[CurrRate]+5) > pAd->DrsCounters.PER[UpRate]))
+ {
+ // we believe this is a noisy environment. better stay at UpRate
+@@ -1218,12 +1196,12 @@
+
+ if (JumpUpRate > pAd->PortCfg.MaxTxRate)
+ JumpUpRate = pAd->PortCfg.MaxTxRate;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"DRS: #### leave Noisy environment ####, RSSI=%d, JumpUpRate=%d\n",
+
+ pAd->PortCfg.AvgRssi - RSSI_TO_DBM_OFFSET, RateIdToMbps[JumpUpRate]);
+
+-
++
+ if (JumpUpRate > CurrRate)
+ {
+ pAd->PortCfg.TxRate = JumpUpRate;
+@@ -1231,15 +1209,15 @@
+ }
+ }
+
+- // we're going to upgrade CurrRate to UpRate at next few seconds,
+- // but before that, we'd better try a NULL frame @ UpRate and
++ // we're going to upgrade CurrRate to UpRate at next few seconds,
++ // but before that, we'd better try a NULL frame @ UpRate and
+ // see if UpRate is stable or not. If this NULL frame fails, it will
+ // downgrade TxQuality[CurrRate], so that STA won't switch to
+ // to UpRate in the next second
+ // 2004-04-07 requested by David Tung - sent test frames only in OFDM rates
+- if (fUpgradeQuality &&
+- INFRA_ON(pAd) &&
+- (UpRate != CurrRate) &&
++ if (fUpgradeQuality &&
++ INFRA_ON(pAd) &&
++ (UpRate != CurrRate) &&
+ (UpRate > RATE_11) &&
+ (pAd->DrsCounters.TxQuality[CurrRate] <= 1) &&
+ (pAd->DrsCounters.TxQuality[UpRate] <= 1))
+@@ -1260,16 +1238,16 @@
+ #endif
+ pAd->PortCfg.TxRate = DownRate;
+ }
+- else if ((pAd->DrsCounters.TxQuality[CurrRate] <= 0) &&
++ else if ((pAd->DrsCounters.TxQuality[CurrRate] <= 0) &&
+ (pAd->DrsCounters.TxQuality[UpRate] <=0) &&
+ (CurrRate != UpRate))
+ {
+ pAd->PortCfg.TxRate = UpRate;
+ }
+-
++
+ }while (FALSE);
+
+-
++
+ // if rate-up happen, clear all bad history of all TX rates
+ if (pAd->PortCfg.TxRate > CurrRate)
+ {
+@@ -1291,7 +1269,7 @@
+ pAd->DrsCounters.TxRateUpPenalty = 2; // add 2 sec penalty
+ else // >= 8 sec
+ pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty
+-
++
+ pAd->DrsCounters.CurrTxRateStableTime = 0;
+ pAd->DrsCounters.LastSecTxRateChangeAction = 2; // rate DOWN
+ pAd->DrsCounters.TxQuality[pAd->PortCfg.TxRate] = 0;
+@@ -1299,7 +1277,7 @@
+ }
+ else
+ pAd->DrsCounters.LastSecTxRateChangeAction = 0; // rate no change
+-
++
+ // reset all OneSecxxx counters
+ pAd->DrsCounters.OneSecTxFailCount = 0;
+ pAd->DrsCounters.OneSecTxOkCount = 0;
+@@ -1309,10 +1287,10 @@
+ /*
+ ==========================================================================
+ Description:
+- This routine is executed periodically inside MlmePeriodicExec() after
++ This routine is executed periodically inside MlmePeriodicExec() after
+ association with an AP.
+ It checks if PortCfg.Psm is consistent with user policy (recorded in
+- PortCfg.WindowsPowerMode). If not, enforce user policy. However,
++ PortCfg.WindowsPowerMode). If not, enforce user policy. However,
+ there're some conditions to consider:
+ 1. we don't support power-saving in ADHOC mode, so Psm=PWR_ACTIVE all
+ the time when Mibss==TRUE
+@@ -1334,7 +1312,7 @@
+ // 4. CNTL state machine is not doing SCANning
+ // 5. no TX SUCCESS event for the past period
+ PowerMode = pAd->PortCfg.WindowsPowerMode;
+-
++
+ if (INFRA_ON(pAd) &&
+ (PowerMode != Ndis802_11PowerModeCAM) &&
+ (pAd->PortCfg.Psm == PWR_ACTIVE) &&
+@@ -1344,21 +1322,21 @@
+ MlmeSetPsmBit(pAd, PWR_SAVE);
+ EnqueueNullFrame(pAd, pAd->PortCfg.TxRate);
+ }
+-
++
+ // latch current count for next-time comparison
+ pAd->Mlme.PrevTxCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart;
+
+ }
+
+ VOID MlmeSetPsmBit(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN USHORT psm)
+ {
+ TXCSR7_STRUC txcsr7;
+-
++
+ txcsr7.word = 0;
+- pAd->PortCfg.Psm = psm;
+-
++ pAd->PortCfg.Psm = psm;
++
+ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - change PSM bit to %d <<<\n", psm);
+ if (psm == PWR_SAVE)
+ {
+@@ -1373,14 +1351,14 @@
+ }
+
+ VOID MlmeSetTxPreamble(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN USHORT TxPreamble)
+ {
+ ULONG Plcp1MCsr = 0x00700400; // 0x13c, ACK/CTS PLCP at 1 Mbps
+ ULONG Plcp2MCsr = 0x00380401; // 0x140, ACK/CTS PLCP at 2 Mbps
+ ULONG Plcp5MCsr = 0x00150402; // 0x144, ACK/CTS PLCP at 5.5 Mbps
+ ULONG Plcp11MCsr = 0x000b8403; // 0x148, ACK/CTS PLCP at 11 Mbps
+-
++
+ if (TxPreamble == Rt802_11PreambleShort)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeSetTxPreamble (= SHORT PREAMBLE)\n");
+@@ -1401,7 +1379,7 @@
+ RTMP_IO_WRITE32(pAd, PLCP5MCSR, Plcp5MCsr);
+ RTMP_IO_WRITE32(pAd, PLCP11MCSR, Plcp11MCsr);
+ }
+-
++
+ VOID MlmeUpdateTxRates(
+ IN PRTMP_ADAPTER pAd,
+ IN BOOLEAN bLinkUp)
+@@ -1436,14 +1414,14 @@
+
+ // 2003-12-10 802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode
+ if ((pAd->PortCfg.BssType == BSS_INDEP) &&
+- (pAd->PortCfg.PhyMode == PHY_11BG_MIXED) &&
++ (pAd->PortCfg.PhyMode == PHY_11BG_MIXED) &&
+ (pAd->PortCfg.AdhocMode == 0) &&
+ (MaxDesire > RATE_11))
+ MaxDesire = RATE_11;
+-
++
+ pAd->PortCfg.MaxDesiredRate = MaxDesire;
+-
+- // Auto rate switching is enabled only if more than one DESIRED RATES are
++
++ // Auto rate switching is enabled only if more than one DESIRED RATES are
+ // specified; otherwise disabled
+ if (num <= 1)
+ pAd->PortCfg.EnableAutoRateSwitching = FALSE;
+@@ -1455,66 +1433,66 @@
+ {
+ switch (pAd->PortCfg.SupportedRates[i] & 0x7f)
+ {
+- case 2: Rate = RATE_1;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0001;
++ case 2: Rate = RATE_1;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0001;
+ break;
+- case 4: Rate = RATE_2;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0002;
++ case 4: Rate = RATE_2;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0002;
+ break;
+- case 11:
+- Rate = RATE_5_5;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0004;
++ case 11:
++ Rate = RATE_5_5;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0004;
+ break;
+- case 22:
+- Rate = RATE_11;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0008;
++ case 22:
++ Rate = RATE_11;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0008;
+ break;
+- case 12:
+- Rate = RATE_6;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0010;
++ case 12:
++ Rate = RATE_6;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0010;
+ break;
+- case 18:
+- Rate = RATE_9;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0020;
++ case 18:
++ Rate = RATE_9;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0020;
+ break;
+- case 24:
+- Rate = RATE_12;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0040;
++ case 24:
++ Rate = RATE_12;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0040;
+ break;
+- case 36:
+- Rate = RATE_18;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0080;
++ case 36:
++ Rate = RATE_18;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0080;
+ break;
+- case 48:
+- Rate = RATE_24;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0100;
++ case 48:
++ Rate = RATE_24;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0100;
+ break;
+- case 72:
+- Rate = RATE_36;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0200;
++ case 72:
++ Rate = RATE_36;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0200;
+ break;
+- case 96:
+- Rate = RATE_48;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0400;
++ case 96:
++ Rate = RATE_48;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0400;
+ break;
+- case 108:
+- Rate = RATE_54;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0800;
++ case 108:
++ Rate = RATE_54;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0800;
+ break;
+- default:
+- Rate = RATE_1;
++ default:
++ Rate = RATE_1;
+ break;
+ }
+ if (MaxSupport < Rate) MaxSupport = Rate;
+@@ -1530,7 +1508,7 @@
+ pAd->PortCfg.ExpectedACKRate[i] = CurrBasicRate;
+ DBGPRINT(RT_DEBUG_INFO,"Expected ACK rate[%d] = %d Mbps\n", RateIdToMbps[i], RateIdToMbps[CurrBasicRate]);
+ }
+-
++
+ // max tx rate = min {max desire rate, max supported rate}
+ if (MaxSupport < MaxDesire)
+ pAd->PortCfg.MaxTxRate = MaxSupport;
+@@ -1547,13 +1525,13 @@
+ {
+ if (pAd->PortCfg.Channel > 14)
+ pAd->PortCfg.TxRate = RATE_6; // 802.11a
+- else
++ else
+ {
+ short dbm = pAd->PortCfg.AvgRssi - pAd->PortCfg.RssiToDbm;
+ if (bLinkUp == TRUE && pAd->PortCfg.MaxTxRate >= RATE_24)
+ pAd->PortCfg.TxRate = RATE_24;
+ else
+- pAd->PortCfg.TxRate = pAd->PortCfg.MaxTxRate;
++ pAd->PortCfg.TxRate = pAd->PortCfg.MaxTxRate;
+ if (dbm < -75)
+ pAd->PortCfg.TxRate = RATE_11;
+ else if ((dbm < -70) && (pAd->PortCfg.TxRate > RATE_24))
+@@ -1568,7 +1546,7 @@
+ case PHY_11BG_MIXED:
+ case PHY_11B:
+ pAd->PortCfg.MlmeRate = RATE_2;
+-#ifdef WIFI_TEST
++#ifdef WIFI_TEST
+ pAd->PortCfg.RtsRate = RATE_11;
+ #else
+ pAd->PortCfg.RtsRate = RATE_2;
+@@ -1595,10 +1573,10 @@
+ pAd->PortCfg.RtsRate = RATE_2;
+ break;
+ }
+-
+- DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, Rate Switching =%d)\n",
++
++ DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, Rate Switching =%d)\n",
+ RateIdToMbps[MaxDesire], RateIdToMbps[MaxSupport], RateIdToMbps[pAd->PortCfg.MaxTxRate], pAd->PortCfg.EnableAutoRateSwitching);
+- DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04x)\n",
++ DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04x)\n",
+ RateIdToMbps[pAd->PortCfg.TxRate], RateIdToMbps[pAd->PortCfg.RtsRate], BasicRateBitmap);
+ }
+
+@@ -1623,14 +1601,14 @@
+ {
+ ASIC_LED_ACT_OFF(pAd);
+ }
+-
++
+ // Clean up old bss table
+ BssTableInit(&pAd->PortCfg.BssTab);
+ }
+
+ VOID MlmeRadioOn(
+ IN PRTMP_ADAPTER pAd)
+-{
++{
+ // Turn on radio
+ RTMP_IO_WRITE32(pAd, PWRCSR0, 0x3f3b3100);
+
+@@ -1665,12 +1643,12 @@
+ * \post
+ */
+ VOID BssTableInit(
+- IN BSS_TABLE *Tab)
++ IN BSS_TABLE *Tab)
+ {
+ int i;
+
+ Tab->BssNr = 0;
+- for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++)
++ for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++)
+ {
+ memset(&Tab->BssEntry[i], 0, sizeof(BSS_ENTRY));
+ }
+@@ -1678,23 +1656,23 @@
+
+ /*! \brief search the BSS table by SSID
+ * \param p_tab pointer to the bss table
+- * \param ssid SSID string
++ * \param ssid SSID string
+ * \return index of the table, BSS_NOT_FOUND if not in the table
+ * \pre
+ * \post
+ * \note search by sequential search
+ */
+ ULONG BssTableSearch(
+- IN BSS_TABLE *Tab,
+- IN PMACADDR Bssid)
++ IN BSS_TABLE *Tab,
++ IN PMACADDR Bssid)
+ {
+ UCHAR i;
+-
+- for (i = 0; i < Tab->BssNr; i++)
++
++ for (i = 0; i < Tab->BssNr; i++)
+ {
+ //printf("comparing %s and %s\n", p_tab->bss[i].ssid, ssid);
+- if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
+- {
++ if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
++ {
+ return i;
+ }
+ }
+@@ -1702,15 +1680,15 @@
+ }
+
+ VOID BssTableDeleteEntry(
+- IN OUT BSS_TABLE *Tab,
+- IN PMACADDR Bssid)
++ IN OUT BSS_TABLE *Tab,
++ IN PMACADDR Bssid)
+ {
+ UCHAR i, j;
+-
+- for (i = 0; i < Tab->BssNr; i++)
++
++ for (i = 0; i < Tab->BssNr; i++)
+ {
+ //printf("comparing %s and %s\n", p_tab->bss[i].ssid, ssid);
+- if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
++ if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
+ {
+ for (j = i; j < Tab->BssNr - 1; j++)
+ {
+@@ -1724,36 +1702,63 @@
+
+ UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
++
++static NDIS_802_11_WEP_STATUS setWepStatus(
++ IN USHORT mask, // Peer cipher capability set
++ IN NDIS_802_11_WEP_STATUS WepStatus) // local cipher selection
++{
++ static const unsigned char transtoieee[] = {
++ CIPHER_TYPE_WEP104,0,0,0,CIPHER_TYPE_TKIP,0,CIPHER_TYPE_CCMP,0
++ };
++ static const unsigned char transtondis[] = {
++ Ndis802_11EncryptionDisabled, Ndis802_11WEPEnabled,
++ Ndis802_11Encryption2Enabled, Ndis802_11WEPKeyAbsent,
++ Ndis802_11Encryption3Enabled, Ndis802_11WEPEnabled
++ };
++ NDIS_802_11_WEP_STATUS wepstatus = Ndis802_11WEPDisabled;
++ USHORT suite = transtoieee[WepStatus];
++
++ DBGPRINT(RT_DEBUG_TRACE, " - (%s) mask 0x%04x wepstatus %d ieee %d\n",
++ __FUNCTION__, mask, WepStatus, suite);
++
++ if (suite && (mask & 0x01 << suite)) {
++ wepstatus = transtondis[suite];
++ }
++ return wepstatus;
++
++} /* End setWepStatus () */
++
+ /*! \brief
+- * \param
++ * \param
+ * \return
+ * \pre
+ * \post
+ */
+ VOID BssEntrySet(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_ENTRY *pBss,
+- IN MACADDR *pBssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_ENTRY *pBss,
++ IN MACADDR *pBssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
+ IN BOOLEAN CfExist,
+- IN CF_PARM *pCfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN CF_PARM *pCfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
+- IN PNDIS_802_11_VARIABLE_IEs pVIE)
++ IN USHORT VarIELen, // Length of all saved IEs.
++ IN PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ COPY_MAC_ADDR(&pBss->Bssid, pBssid);
+ // Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID
+- pBss->Hidden = 1;
++ pBss->Hidden = 1;
+ if (SsidLen > 0)
+ {
+ // For hidden SSID AP, it might send beacon with SSID len equal to 0
+@@ -1769,17 +1774,17 @@
+ }
+ pBss->BssType = BssType;
+ pBss->BeaconPeriod = BeaconPeriod;
+- if (BssType == BSS_INFRA)
++ if (BssType == BSS_INFRA)
+ {
+- if (CfExist)
++ if (CfExist)
+ {
+ pBss->CfpCount = pCfParm->CfpCount;
+ pBss->CfpPeriod = pCfParm->CfpPeriod;
+ pBss->CfpMaxDuration = pCfParm->CfpMaxDuration;
+ pBss->CfpDurRemaining = pCfParm->CfpDurRemaining;
+ }
+- }
+- else
++ }
++ else
+ {
+ pBss->AtimWin = AtimWin;
+ }
+@@ -1801,15 +1806,23 @@
+ pBss->FixIEs.Capabilities = CapabilityInfo;
+
+ // New for microsoft Variable IEs
+- if (pVIE->Length != 0)
++ pBss->VarIELen = VarIELen;
++ if (VarIELen != 0)
+ {
+- pBss->VarIELen = pVIE->Length + 2;
+- memcpy(pBss->VarIEs, pVIE, pBss->VarIELen);
+- pBss->WepStatus = BssCipherParse(pBss->VarIEs);
++ memcpy(pBss->VarIEs, pVIE, VarIELen);
++ pBss->CipherCap = BssCipherParse((PBEACON_EID_STRUCT)pBss->VarIEs,
++ VarIELen);
++ if (pBss->CipherCap & (0x01 << CIPHER_TYPE_GRP)) {
++ pBss->WepStatus = setWepStatus(pBss->CipherCap >> 8,
++ pAd->PortCfg.WepStatus);
++ }
++ else {
++ pBss->WepStatus = setWepStatus(pBss->CipherCap,
++ pAd->PortCfg.WepStatus);
++ }
+ }
+ else
+ {
+- pBss->VarIELen = 0;
+ // No SSN ID, if security is on, this is WEP algorithm
+ if (pBss->Privacy)
+ pBss->WepStatus = Ndis802_11WEPEnabled;
+@@ -1817,9 +1830,11 @@
+ else
+ pBss->WepStatus = Ndis802_11WEPDisabled;
+ }
++ DBGPRINT(RT_DEBUG_TRACE, "%s: Ndis WepStatus (Local=%d, Remote=%d)\n",
++ __FUNCTION__, pAd->PortCfg.WepStatus, pBss->WepStatus);
+ }
+
+-/*!
++/*!
+ * \brief insert an entry into the bss table
+ * \param p_tab The BSS table
+ * \param Bssid BSSID
+@@ -1840,17 +1855,17 @@
+ * \note If SSID is identical, the old entry will be replaced by the new one
+ */
+ ULONG BssTableSetEntry(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *Tab,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *Tab,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
+ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+@@ -1858,50 +1873,52 @@
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ ULONG Idx;
++
+ Idx = BssTableSearch(Tab, Bssid);
+- if (Idx == BSS_NOT_FOUND)
++ if (Idx == BSS_NOT_FOUND)
+ {
+ if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE)
+ return BSS_NOT_FOUND;
+-
++
+ Idx = Tab->BssNr;
+ BssEntrySet(pAd, &Tab->BssEntry[Idx], Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
+ CfExist, CfParm, AtimWin, CapabilityInfo, Rates, RatesLen, ExtendedRateIeExist,
+- ChannelNo, Rssi, Noise, TimeStamp, pVIE);
++ ChannelNo, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ Tab->BssNr++;
+- }
++ }
+ else
+ {
+ BssEntrySet(pAd, &Tab->BssEntry[Idx], Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
+ CfExist, CfParm, AtimWin, CapabilityInfo, Rates, RatesLen, ExtendedRateIeExist,
+- ChannelNo, Rssi, Noise, TimeStamp, pVIE);
++ ChannelNo, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ }
+-
++
+ return Idx;
+ }
+
+ VOID BssTableSsidSort(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *OutTab,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *OutTab,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen)
+ {
+ INT i;
+ BssTableInit(OutTab);
+
+- for (i = 0; i < pAd->PortCfg.BssTab.BssNr; i++)
++ for (i = 0; i < pAd->PortCfg.BssTab.BssNr; i++)
+ {
+ BSS_ENTRY *pInBss = &pAd->PortCfg.BssTab.BssEntry[i];
+-
+- if ((pInBss->BssType == pAd->PortCfg.BssType) &&
++
++ if ((pInBss->BssType == pAd->PortCfg.BssType) &&
+ ((pInBss->SsidLen==SsidLen) && RTMPEqualMemory(pInBss->Ssid, Ssid, (ULONG) SsidLen)))
+ {
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+@@ -1911,24 +1928,24 @@
+ // CCX also require not even try to connect it!!
+ if (SsidLen == 0)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
++
+ OutTab->BssNr++;
+ }
+ else if ((pInBss->BssType == pAd->PortCfg.BssType) && (SsidLen == 0))
+ {
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
++
+ OutTab->BssNr++;
+ }
+ #if 0
+@@ -1937,36 +1954,36 @@
+ // Add for hidden SSID. But we have to verify the security suite too.
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
+- OutTab->BssNr++;
++
++ OutTab->BssNr++;
+ }
+-#endif
++#endif
+ if (OutTab->BssNr >= MAX_LEN_OF_BSS_TABLE)
+ break;
+-
++
+ }
+-
++
+ BssTableSortByRssi(OutTab);
+ }
+
+ VOID BssTableSortByRssi(
+- IN OUT BSS_TABLE *OutTab)
++ IN OUT BSS_TABLE *OutTab)
+ {
+ INT i, j;
+ BSS_ENTRY TmpBss;
+
+- for (i = 0; i < OutTab->BssNr - 1; i++)
++ for (i = 0; i < OutTab->BssNr - 1; i++)
+ {
+- for (j = i+1; j < OutTab->BssNr; j++)
++ for (j = i+1; j < OutTab->BssNr; j++)
+ {
+- if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi)
++ if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi)
+ {
+ memcpy(&TmpBss, &OutTab->BssEntry[j], sizeof(BSS_ENTRY));
+ memcpy(&OutTab->BssEntry[j], &OutTab->BssEntry[i], sizeof(BSS_ENTRY));
+@@ -1976,34 +1993,178 @@
+ }
+ }
+
+-NDIS_802_11_WEP_STATUS BssCipherParse(
+- IN PUCHAR pCipher)
++/*
++ * ============================================================================
++ * Description:
++ * Scan cipher suite list and return cipher capability set.
++ * ============================================================================
++ */
++static USHORT scan_csl(
++ IN suite_list_t *psl,
++ IN USHORT curtype)
+ {
+- PBEACON_EID_STRUCT pEid;
+- PUCHAR pTmp;
++ USHORT ciphertype = curtype; // Cipher "capability set"
++ int i, j;
++
++ DBGPRINT(RT_DEBUG_TRACE, " - scan %d pair cipher(s)\n", psl->count);
++
++ for (i = 0, j = psl->count; i < j; i++) {
+
+- pEid = (PBEACON_EID_STRUCT) pCipher;
++ if (psl->suite[i].type < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x01 << psl->suite[i].type;
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR, " - invalid pair cipher type %d\n",
++ psl->suite[i].type);
++ }
++ DBGPRINT(RT_DEBUG_TRACE, " - (pair) CipherType now=0x%04x\n",
++ ciphertype);
++ }
++ return ciphertype;
+
+- // Double check sanity information, although it should be done at peer beacon sanity check already.
+- if (pEid->Eid != IE_WPA)
+- return (Ndis802_11WEPDisabled);
+-
+- // Double check Var IE length, it must be no less than 0x16
+- if (pEid->Len < 0x16)
+- return (Ndis802_11WEPDisabled);
+-
+- // Skip OUI, version, and multicast suite
+- // This part should be improved in the future when AP supported multiple cipher suite.
+- // For now, it's OK since almost all APs have fixed cipher suite supported.
+- pTmp = (PUCHAR) pEid->Octet;
+- pTmp += 9;
+-
+- if (*pTmp == 4) // AES
+- return (Ndis802_11Encryption3Enabled);
+- else if (*pTmp == 2) // TKIP
+- return (Ndis802_11Encryption2Enabled);
++} /* End scan_csl () */
++
++USHORT BssCipherParse(
++ IN PBEACON_EID_STRUCT pEid,
++ IN USHORT VarIELen) // Length of all saved IEs.
++{
++ USHORT ciphertype = 0;
++ PBEACON_EID_STRUCT ptEid;
++ USHORT len;
++
++ DBGPRINT(RT_DEBUG_TRACE, "%s: using VarIELen=%d\n", __FUNCTION__, VarIELen);
++
++ // Handle the stinerman problem (a too-short WPA IE followed by
++ // a long-enough WPA IE from an AP), the onishin/dacull problem
++ // (a RSN - WPA2 - IE followed by a WPA1 IE from an AP), and the
++ // holtzmichel problem (a WPA1 IE followed by a WPA2 IE). We end
++ // up using the *last* one we find. This may (or may not) really
++ // be the thing to do. - bb
++ for (ptEid = pEid, len = 0; len < VarIELen;
++ len += ptEid->Len + 2,
++ ptEid = (PBEACON_EID_STRUCT)((UCHAR *)pEid + len)) {
++
++ DBGPRINT(RT_DEBUG_TRACE, " - examining IE=%d, Len=%d\n",
++ ptEid->Eid, ptEid->Len);
++
++ switch (ptEid->Eid) {
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, " - Not a WPA/WPA2 IE=%d, Len=%d\n",
++ ptEid->Eid, ptEid->Len);
++ break;
++
++ case IE_WPA: {
++ #define p ((PRSN_EID_STRUCT)ptEid)
++
++ // Double check Var IE length, it must be no less than 0x16
++ // Silently ignore if not
++ if (ptEid->Len < 0x16) {
++ DBGPRINT(RT_DEBUG_ERROR, " - Len %d too short\n",
++ ptEid->Len);
++ break;
++ }
++ // Skip OUI, version, and multicast suite
++ // This part should be improved in the future when AP
++ // supported multiple cipher suite. For now, it's OK since
++ // almost all APs have fixed cipher suite supported.
++ // (The future is now - bb)
++ if (p->Multicast[3] < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x100 << p->Multicast[3];
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_WPA invalid group cipher %d\n",
++ p->Multicast[3]);
++ }
++ DBGPRINT(RT_DEBUG_TRACE, " - WPA CipherType now=0x%04x\n",
++ ciphertype);
+
+- return (Ndis802_11WEPDisabled);
++ if (p->Length >= sizeof(RSN_EID_STRUCT) -
++ offsetof(RSN_EID_STRUCT, Oui)) {
++ suite_list_p psl = (suite_list_p)((UCHAR *)p +
++ offsetof(RSN_EID_STRUCT, Count));
++
++ if (psl->count * sizeof(suite_sel_t) +
++ offsetof(RSN_EID_STRUCT,Count) -
++ offsetof(RSN_EID_STRUCT,Oui) >
++ p->Length) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - malformed WPA pair cipher count "
++ "(needs %d bytes, %d bytes avail)\n",
++ psl->count*sizeof(suite_sel_t) +
++ offsetof(RSN_EID_STRUCT,Count) -
++ offsetof(RSN_EID_STRUCT,Oui),
++ p->Length);
++ break;
++ }
++ ciphertype = scan_csl(psl, ciphertype);
++ }
++ else {
++ ciphertype |= 0x01; // Indicate use group cipher
++ }
++ #undef p
++ break;
++ }
++ case IE_RSN: { // 802.11i pp. 27 - 32
++ #define p ((rsn_ie_p)ptEid)
++
++ if (p->length == sizeof(p->version)) {
++ ciphertype = 0x01 | 0x100 << CIPHER_TYPE_CCMP;
++ break;
++ }
++ if (p->length >= sizeof(p->version) + sizeof(p->gcsuite)) {
++
++ // Right now, we use the group cipher suite since it
++ // appears (to me, at any rate) that that's what is
++ // being used from the WPA IE.
++ // (SWAG - cf. RSN_EID_STRUCT - is that WPA_IE is RSN_IE
++ // with 4 bytes in front of the version tag. So we
++ // use the group cipher suite ala case IE_WPA above.)
++ // cf. the Holtzmichel problem: Looks like the Sinus 154
++ // Basic 3 includes either 3 pairwise cipher suites, or
++ // 1 pairwise cipher suite, 1 AKM suite, and an RSN
++ // capabilities field, because the len is 20.
++ if (p->gcsuite.type < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x100 << p->gcsuite.type;
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid group cipher %d\n",
++ p->gcsuite.type);
++ }
++ DBGPRINT(RT_DEBUG_TRACE,
++ " - (grp) CipherType now=0x%04x\n", ciphertype);
++ }
++ if (p->length > sizeof(p->version) + sizeof(p->gcsuite)) {
++ suite_list_p psl = (suite_list_p)((UCHAR *)p +
++ offsetof(rsn_ie_t, version) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t));
++
++ if (psl->count * sizeof(suite_sel_t) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t) >
++ p->length) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - malformed RSN pair cipher count "
++ "(needs %d bytes, %d bytes avail)\n",
++ psl->count*sizeof(suite_sel_t) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t),
++ p->length);
++ break;
++ }
++ ciphertype = scan_csl(psl, ciphertype);
++ }
++ else {
++ ciphertype |= 0x01; // Indicate use group cipher
++ }
++ #undef p
++ break;
++ } /* End case IE_RSN */
++ } /* End switch EID */
++ } /* End for () */
++
++ DBGPRINT(RT_DEBUG_TRACE, "%s: return CipherType=0x%04x\n",
++ __FUNCTION__, ciphertype);
++ return ciphertype;
+ }
+
+ // ===========================================================================================
+@@ -2017,16 +2178,16 @@
+ * \post
+ */
+ VOID MacAddrRandomBssid(
+- IN PRTMP_ADAPTER pAd,
+- OUT MACADDR *Addr)
++ IN PRTMP_ADAPTER pAd,
++ OUT MACADDR *Addr)
+ {
+ INT i;
+
+- for (i = 0; i < ETH_ALEN; i++)
++ for (i = 0; i < ETH_ALEN; i++)
+ {
+ Addr->Octet[i] = RandomByte(pAd);
+ }
+-
++
+ Addr->Octet[0] = (Addr->Octet[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx
+ }
+
+@@ -2042,12 +2203,12 @@
+ * \note this function initializes the following field
+ */
+ VOID MgtMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PMACHDR Hdr,
+- IN UCHAR Subtype,
+- IN UCHAR ToDs,
+- IN PMACADDR Ds,
+- IN PMACADDR Bssid)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PMACHDR Hdr,
++ IN UCHAR Subtype,
++ IN UCHAR ToDs,
++ IN PMACADDR Ds,
++ IN PMACADDR Bssid)
+ {
+ memset(Hdr, 0, sizeof(MACHDR));
+ Hdr->Type = BTYPE_MGMT;
+@@ -2063,8 +2224,8 @@
+ // ===========================================================================================
+
+ /*!***************************************************************************
+- * This routine build an outgoing frame, and fill all information specified
+- * in argument list to the frame body. The actual frame size is the summation
++ * This routine build an outgoing frame, and fill all information specified
++ * in argument list to the frame body. The actual frame size is the summation
+ * of all arguments.
+ * input params:
+ * Buffer - pointer to a pre-allocated memory segment
+@@ -2073,12 +2234,12 @@
+ * function will FAIL!!!
+ * return:
+ * Size of the buffer
+- * usage:
++ * usage:
+ * MakeOutgoingFrame(Buffer, output_length, 2, &fc, 2, &dur, 6, p_addr1, 6,p_addr2, END_OF_ARGS);
+ ****************************************************************************/
+ ULONG MakeOutgoingFrame(
+- OUT CHAR *Buffer,
+- OUT ULONG *FrameLen, ...)
++ OUT CHAR *Buffer,
++ OUT ULONG *FrameLen, ...)
+ {
+ CHAR *p;
+ int leng;
+@@ -2088,10 +2249,10 @@
+ // calculates the total length
+ TotLeng = 0;
+ va_start(Args, FrameLen);
+- do
++ do
+ {
+ leng = va_arg(Args, int);
+- if (leng == END_OF_ARGS)
++ if (leng == END_OF_ARGS)
+ {
+ break;
+ }
+@@ -2117,7 +2278,7 @@
+ * \note Because this is done only once (at the init stage), no need to be locked
+ */
+ NDIS_STATUS MlmeQueueInit(
+- IN MLME_QUEUE *Queue)
++ IN MLME_QUEUE *Queue)
+ {
+ INT i;
+
+@@ -2127,7 +2288,7 @@
+ Queue->Head = 0;
+ Queue->Tail = 0;
+
+- for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++)
++ for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++)
+ {
+ Queue->Entry[i].Occupied = FALSE;
+ Queue->Entry[i].MsgLen = 0;
+@@ -2150,11 +2311,11 @@
+ * \note The message has to be initialized
+ */
+ BOOLEAN MlmeEnqueue(
+- OUT MLME_QUEUE *Queue,
+- IN ULONG Machine,
+- IN ULONG MsgType,
+- IN ULONG MsgLen,
+- IN VOID *Msg)
++ OUT MLME_QUEUE *Queue,
++ IN ULONG Machine,
++ IN ULONG MsgType,
++ IN ULONG MsgLen,
++ IN VOID *Msg)
+ {
+ INT Tail;
+ unsigned long flags;
+@@ -2164,30 +2325,25 @@
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv mlme frame too large, size = %d \n", MsgLen);
+ return FALSE;
+ }
+-
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (MlmeQueueFull(Queue))
+- {
++
++ spin_lock_irqsave(&Queue->Lock, flags);
++ if (Queue->Num == MAX_LEN_OF_MLME_QUEUE) {
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ printk(KERN_ERR DRV_NAME "MlmeEnqueue full, msg dropped and may corrupt MLME\n");
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ return FALSE;
+ }
+-
+- Tail = Queue->Tail;
+- Queue->Tail++;
++ Tail = Queue->Tail++;
++ Queue->Tail %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num++;
+- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Tail = 0;
+- }
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeEnqueue, num=%d\n",Queue->Num);
+-
++
+ Queue->Entry[Tail].Occupied = TRUE;
+ Queue->Entry[Tail].Machine = Machine;
+ Queue->Entry[Tail].MsgType = MsgType;
+ Queue->Entry[Tail].MsgLen = MsgLen;
+- memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
++ if (Msg != NULL)
++ memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+ return TRUE;
+ }
+
+@@ -2203,14 +2359,14 @@
+ * \post
+ */
+ BOOLEAN MlmeEnqueueForRecv(
+- IN PRTMP_ADAPTER pAd,
+- OUT MLME_QUEUE *Queue,
+- IN ULONG TimeStampHigh,
++ IN PRTMP_ADAPTER pAd,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG TimeStampHigh,
+ IN ULONG TimeStampLow,
+ IN UCHAR Rssi,
+- IN UCHAR Noise,
+- IN ULONG MsgLen,
+- IN VOID *Msg)
++ IN UCHAR Noise,
++ IN ULONG MsgLen,
++ IN VOID *Msg)
+ {
+ INT Tail, Machine;
+ MACFRAME *Fr = (MACFRAME *)Msg;
+@@ -2225,31 +2381,25 @@
+ }
+
+
+- if (!MsgTypeSubst(Fr, &Machine, &MsgType))
++ if (!MsgTypeSubst(Fr, &Machine, &MsgType))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv (drop mgmt->subtype=%d)\n",Fr->Hdr.SubType);
+ return FALSE;
+ }
+
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (MlmeQueueFull(Queue))
+- {
++ spin_lock_irqsave(&Queue->Lock, flags);
++ if (Queue->Num == MAX_LEN_OF_MLME_QUEUE) {
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv (queue full error) \n");
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ return FALSE;
+ }
+-
+- // OK, we got all the informations, it is time to put things into queue
+- Tail = Queue->Tail;
+- Queue->Tail++;
++ Tail = Queue->Tail++;
++ Queue->Tail %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num++;
+- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Tail = 0;
+- }
+-
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeEnqueueForRecv, num=%d\n",Queue->Num);
+-
++
++ // OK, we got all the informations, it is time to put things into queue
+ Queue->Entry[Tail].Occupied = TRUE;
+ Queue->Entry[Tail].Machine = Machine;
+ Queue->Entry[Tail].MsgType = MsgType;
+@@ -2258,8 +2408,8 @@
+ Queue->Entry[Tail].TimeStamp.vv.HighPart = TimeStampHigh;
+ Queue->Entry[Tail].Rssi = Rssi;
+ Queue->Entry[Tail].Noise = (Noise > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) Noise);
+- memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
++ if (Msg != NULL)
++ memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+
+ MlmeHandler(pAd);
+
+@@ -2267,6 +2417,7 @@
+ }
+
+ /*! \brief Dequeue a message from the MLME Queue
++ * WARNING: Must be call with Mlme.Queue.Lock held
+ * \param *Queue The MLME Queue
+ * \param *Elem The message dequeued from MLME Queue
+ * \return TRUE if the Elem contains something, FALSE otherwise
+@@ -2274,23 +2425,14 @@
+ * \post
+ */
+ BOOLEAN MlmeDequeue(
+- IN MLME_QUEUE *Queue,
+- OUT MLME_QUEUE_ELEM **Elem)
++ IN MLME_QUEUE *Queue,
++ OUT MLME_QUEUE_ELEM **Elem)
+ {
+- unsigned long flags;
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (Queue->Num == 0) {
+- spin_unlock_irqrestore(&(Queue->Lock),flags);
++ if (Queue->Num == 0)
+ return FALSE;
+- }
+- *Elem = &(Queue->Entry[Queue->Head]);
++ *Elem = &Queue->Entry[Queue->Head++];
++ Queue->Head %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num--;
+- Queue->Head++;
+- if (Queue->Head == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Head = 0;
+- }
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeDequeue, num=%d\n",Queue->Num);
+
+ return TRUE;
+@@ -2308,29 +2450,27 @@
+ DBGPRINT(RT_DEBUG_ERROR, "Failure to initialize mlme.\n");
+ // Continue the reset procedure...
+ }
+-
++
+ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
+- if(pAd->Mlme.Running)
++ if(pAd->Mlme.Running)
+ {
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ return;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.Running = TRUE;
+ }
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+
+ // Remove all Mlme queues elements
+- while (MlmeDequeue(&pAd->Mlme.Queue, &Elem))
+- {
+- //From message type, determine which state machine I should drive
+-
+- // free MLME element
+- Elem->Occupied = FALSE;
+- Elem->MsgLen = 0;
+-
+- }
++ spin_lock_irqsave(&pAd->Mlme.Queue.Lock, flags);
++ while (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) {
++ // free MLME element
++ Elem->Occupied = FALSE;
++ Elem->MsgLen = 0;
++ }
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
+
+ // Cancel all timer events
+ // Be careful to cancel new added timer
+@@ -2356,54 +2496,22 @@
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE;
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+-
++
+ // Remove running state
+ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
+ pAd->Mlme.Running = FALSE;
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ }
+
+-/*! \brief test if the MLME Queue is empty
+- * \param *Queue The MLME Queue
+- * \return TRUE if the Queue is empty, FALSE otherwise
+- * \pre
+- * \post
+- */
+-BOOLEAN MlmeQueueEmpty(
+- IN MLME_QUEUE *Queue)
+-{
+- BOOLEAN Ans;
+-
+- Ans = (Queue->Num == 0);
+-
+- return Ans;
+-}
+-
+-/*! \brief test if the MLME Queue is full
+- * \param *Queue The MLME Queue
+- * \return TRUE if the Queue is empty, FALSE otherwise
+- * \pre
+- * \post
+- */
+-BOOLEAN MlmeQueueFull(
+- IN MLME_QUEUE *Queue)
+-{
+- BOOLEAN Ans;
+-
+- Ans = (Queue->Num == MAX_LEN_OF_MLME_QUEUE);
+-
+- return Ans;
+-}
+-
+ /*! \brief The destructor of MLME Queue
+- * \param
++ * \param
+ * \return
+ * \pre
+ * \post
+ * \note Clear Mlme Queue, Set Queue->Num to Zero.
+ */
+ VOID MlmeQueueDestroy(
+- IN MLME_QUEUE *Queue)
++ IN MLME_QUEUE *Queue)
+ {
+ unsigned long flags;
+ spin_lock_irqsave(&(Queue->Lock), flags);
+@@ -2422,22 +2530,22 @@
+ * \post
+ */
+ BOOLEAN MsgTypeSubst(
+- IN MACFRAME *Fr,
+- OUT INT *Machine,
+- OUT INT *MsgType)
++ IN MACFRAME *Fr,
++ OUT INT *Machine,
++ OUT INT *MsgType)
+ {
+ USHORT Seq;
+ UCHAR EAPType;
+
+ // The only data type will pass to this function is EAPOL frame
+- if (Fr->Hdr.Type == BTYPE_DATA)
+- {
++ if (Fr->Hdr.Type == BTYPE_DATA)
++ {
+ *Machine = WPA_PSK_STATE_MACHINE;
+ EAPType = *((UCHAR*)Fr + LENGTH_802_11 + LENGTH_802_1_H + 1);
+ return(WpaMsgTypeSubst(EAPType, MsgType));
+ }
+
+- switch (Fr->Hdr.SubType)
++ switch (Fr->Hdr.SubType)
+ {
+ case SUBTYPE_ASSOC_REQ:
+ *Machine = ASSOC_STATE_MACHINE;
+@@ -2478,17 +2586,17 @@
+ case SUBTYPE_AUTH:
+ // get the sequence number from payload 24 Mac Header + 2 bytes algorithm
+ memcpy(&Seq, &Fr->Octet[2], sizeof(USHORT));
+- if (Seq == 1 || Seq == 3)
++ if (Seq == 1 || Seq == 3)
+ {
+ *Machine = AUTH_RSP_STATE_MACHINE;
+ *MsgType = MT2_PEER_AUTH_ODD;
+- }
+- else if (Seq == 2 || Seq == 4)
++ }
++ else if (Seq == 2 || Seq == 4)
+ {
+ *Machine = AUTH_STATE_MACHINE;
+ *MsgType = MT2_PEER_AUTH_EVEN;
+- }
+- else
++ }
++ else
+ {
+ return FALSE;
+ }
+@@ -2510,25 +2618,25 @@
+ // ===========================================================================================
+
+ /*! \brief Initialize the state machine.
+- * \param *S pointer to the state machine
++ * \param *S pointer to the state machine
+ * \param Trans State machine transition function
+- * \param StNr number of states
+- * \param MsgNr number of messages
+- * \param DefFunc default function, when there is invalid state/message combination
+- * \param InitState initial state of the state machine
++ * \param StNr number of states
++ * \param MsgNr number of messages
++ * \param DefFunc default function, when there is invalid state/message combination
++ * \param InitState initial state of the state machine
+ * \param Base StateMachine base, internal use only
+ * \pre p_sm should be a legal pointer
+ * \post
+ */
+
+ VOID StateMachineInit(
+- IN STATE_MACHINE *S,
+- IN STATE_MACHINE_FUNC Trans[],
+- IN ULONG StNr,
+- IN ULONG MsgNr,
+- IN STATE_MACHINE_FUNC DefFunc,
+- IN ULONG InitState,
+- IN ULONG Base)
++ IN STATE_MACHINE *S,
++ IN STATE_MACHINE_FUNC Trans[],
++ IN ULONG StNr,
++ IN ULONG MsgNr,
++ IN STATE_MACHINE_FUNC DefFunc,
++ IN ULONG InitState,
++ IN ULONG Base)
+ {
+ ULONG i, j;
+
+@@ -2538,22 +2646,22 @@
+ S->Base = Base;
+
+ S->TransFunc = Trans;
+-
++
+ // init all state transition to default function
+- for (i = 0; i < StNr; i++)
++ for (i = 0; i < StNr; i++)
+ {
+- for (j = 0; j < MsgNr; j++)
++ for (j = 0; j < MsgNr; j++)
+ {
+ S->TransFunc[i * MsgNr + j] = DefFunc;
+ }
+ }
+-
++
+ // set the starting state
+ S->CurrState = InitState;
+
+ }
+
+-/*! \brief This function fills in the function pointer into the cell in the state machine
++/*! \brief This function fills in the function pointer into the cell in the state machine
+ * \param *S pointer to the state machine
+ * \param St state
+ * \param Msg incoming message
+@@ -2562,20 +2670,20 @@
+ * \post
+ */
+ VOID StateMachineSetAction(
+- IN STATE_MACHINE *S,
+- IN ULONG St,
+- IN ULONG Msg,
+- IN STATE_MACHINE_FUNC Func)
++ IN STATE_MACHINE *S,
++ IN ULONG St,
++ IN ULONG Msg,
++ IN STATE_MACHINE_FUNC Func)
+ {
+ ULONG MsgIdx;
+-
++
+ MsgIdx = Msg - S->Base;
+
+- if (St < S->NrState && MsgIdx < S->NrMsg)
++ if (St < S->NrState && MsgIdx < S->NrMsg)
+ {
+ // boundary checking before setting the action
+ S->TransFunc[St * S->NrMsg + MsgIdx] = Func;
+- }
++ }
+ }
+
+ /*! \brief The destructor of the state machine
+@@ -2583,7 +2691,7 @@
+ * \note doing nothing at this moment, may need to do something if the implementation changed
+ */
+ VOID
+-StateMachineDestroy(IN STATE_MACHINE *S)
++StateMachineDestroy(IN STATE_MACHINE *S)
+ {
+ }
+
+@@ -2594,9 +2702,9 @@
+ * \return None
+ */
+ VOID StateMachinePerformAction(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base]))(pAd, Elem);
+ }
+@@ -2604,14 +2712,14 @@
+ /*
+ ==========================================================================
+ Description:
+- The drop function, when machine executes this, the message is simply
+- ignored. This function does nothing, the message is freed in
++ The drop function, when machine executes this, the message is simply
++ ignored. This function does nothing, the message is freed in
+ StateMachinePerformAction()
+ ==========================================================================
+ */
+ VOID Drop(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ #if 0
+ if ((Elem->MsgType == MT2_PEER_BEACON) ||
+@@ -2622,7 +2730,7 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("Warn:>>Drop Msg=%d<<\n",Elem->MsgType));
+ }
+-#endif
++#endif
+ }
+
+ // ===========================================================================================
+@@ -2635,12 +2743,12 @@
+ ==========================================================================
+ */
+ VOID LfsrInit(
+- IN PRTMP_ADAPTER pAd,
+- IN ULONG Seed)
++ IN PRTMP_ADAPTER pAd,
++ IN ULONG Seed)
+ {
+- if (Seed == 0)
++ if (Seed == 0)
+ pAd->Mlme.ShiftReg = 1;
+- else
++ else
+ pAd->Mlme.ShiftReg = Seed;
+ }
+
+@@ -2650,21 +2758,21 @@
+ ==========================================================================
+ */
+ UCHAR RandomByte(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ ULONG i;
+ UCHAR R, Result;
+
+ R = 0;
+
+- for (i = 0; i < 8; i++)
++ for (i = 0; i < 8; i++)
+ {
+- if (pAd->Mlme.ShiftReg & 0x00000001)
++ if (pAd->Mlme.ShiftReg & 0x00000001)
+ {
+ pAd->Mlme.ShiftReg = ((pAd->Mlme.ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000;
+ Result = 1;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.ShiftReg = pAd->Mlme.ShiftReg >> 1;
+ Result = 0;
+@@ -2681,17 +2789,17 @@
+ ==========================================================================
+ */
+ VOID AsicSwitchChannel(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR Channel)
++ IN PRTMP_ADAPTER pAd,
++ IN UCHAR Channel)
+ {
+ ULONG R3;
+ UCHAR index;
+ int Value;
+
+ // TODO: need to update E2PROM format to add 802.11a channel's TX power calibration values
+- if (Channel <= 14)
++ if (Channel <= 14)
+ R3 = pAd->PortCfg.ChannelTxPower[Channel - 1];
+- else
++ else
+ R3 = pAd->PortCfg.ChannelTxPower[0];
+
+ if (R3 > 31) R3 = 31;
+@@ -2706,10 +2814,10 @@
+ Value = (Value > 31) ? 31 : Value;
+ Value = (Value < 0) ? 0 : Value;
+ R3 = Value;
+-
++
+ // Krellan: Save value for readout to user
+ pAd->PortCfg.TxPowerDriver = R3;
+-
++
+ R3 = R3 << 9; // shift TX power control to correct RF R3 bit position
+
+ switch (pAd->PortCfg.RfType)
+@@ -2772,7 +2880,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_2525:
+ for (index = 0; index < NUM_OF_2525_CHNL; index++)
+ {
+@@ -2800,7 +2908,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_2525E:
+ for (index = 0; index < NUM_OF_2525E_CHNL; index++)
+ {
+@@ -2820,7 +2928,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_5222:
+ for (index = 0; index < NUM_OF_5222_CHNL; index++)
+ {
+@@ -2846,12 +2954,12 @@
+ }
+
+ DBGPRINT(RT_DEBUG_INFO, "AsicSwitchChannel(RF=%d) to #%d, TXPwr=%d, R1=0x%08x, R2=0x%08x, R3=0x%08x, R4=0x%08x\n",
+- pAd->PortCfg.RfType,
+- pAd->PortCfg.LatchRfRegs.Channel,
++ pAd->PortCfg.RfType,
++ pAd->PortCfg.LatchRfRegs.Channel,
+ pAd->PortCfg.TxPower,
+- pAd->PortCfg.LatchRfRegs.R1,
+- pAd->PortCfg.LatchRfRegs.R2,
+- pAd->PortCfg.LatchRfRegs.R3,
++ pAd->PortCfg.LatchRfRegs.R1,
++ pAd->PortCfg.LatchRfRegs.R2,
++ pAd->PortCfg.LatchRfRegs.R3,
+ pAd->PortCfg.LatchRfRegs.R4);
+ }
+
+@@ -2865,8 +2973,8 @@
+ ==========================================================================
+ */
+ VOID AsicLockChannel(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR Channel)
++ IN PRTMP_ADAPTER pAd,
++ IN UCHAR Channel)
+ {
+ UCHAR r70;
+ ULONG FcsCnt;
+@@ -2899,14 +3007,14 @@
+ case RFIC_2525E:
+ pAd->PortCfg.LatchRfRegs.R1 &= 0xfffdffff; // RF R1.bit17 "tune_en1" OFF
+ pAd->PortCfg.LatchRfRegs.R3 &= 0xfffffeff; // RF R3.bit8 "tune_en2" OFF
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R1);
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R1);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
+ DBGPRINT(RT_DEBUG_INFO, "AsicRfTuningExec(R1=0x%x,R3=0x%x)\n",pAd->PortCfg.LatchRfRegs.R1,pAd->PortCfg.LatchRfRegs.R3);
+ break;
+-
++
+ case RFIC_2523:
+ pAd->PortCfg.LatchRfRegs.R3 &= 0xfffffeff; // RF R3.bit8 "tune_en2" OFF
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
+ DBGPRINT(RT_DEBUG_INFO, "AsicRfTuningExec(R3=0x%x)\n",pAd->PortCfg.LatchRfRegs.R3);
+ break;
+
+@@ -2929,16 +3037,16 @@
+ ==========================================================================
+ */
+ VOID AsicAdjustTxPower(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ ULONG R3, Channel, CurrTxPwr;
+ int Value;
+
+ if ((pAd->PortCfg.Channel >= 1) && (pAd->PortCfg.Channel <= 14))
+ Channel = pAd->PortCfg.Channel;
+- else
++ else
+ Channel = 1; // don't have calibration info for 11A, temporarily use Channel 1
+-
++
+ // get TX Power base from E2PROM
+ R3 = pAd->PortCfg.ChannelTxPower[Channel - 1];
+ if (R3 > 31) R3 = 31;
+@@ -2948,7 +3056,7 @@
+ Value = (Value > 31) ? 31 : Value;
+ Value = (Value < 0) ? 0 : Value;
+ R3 = Value;
+-
++
+ // E2PROM setting is calibrated for maximum TX power (i.e. 100%)
+ // We lower TX power here according to the percentage specified from UI
+ if (pAd->PortCfg.TxPowerAuto == TRUE) // AUTO TX POWER control
+@@ -2959,10 +3067,10 @@
+ // low TX power upon very-short distance to AP to solve some vendor's AP RX problem
+ // in this case, no TSSI compensation is required.
+
+- if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
++ if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
+ (pAd->PortCfg.AvgRssi > (pAd->PortCfg.RssiToDbm - RSSI_FOR_LOWEST_TX_POWER)))
+ R3 -= LOWEST_TX_POWER_DELTA;
+- else if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
++ else if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
+ (pAd->PortCfg.AvgRssi > (pAd->PortCfg.RssiToDbm - RSSI_FOR_LOW_TX_POWER)))
+ R3 -= LOW_TX_POWER_DELTA;
+
+@@ -2973,7 +3081,7 @@
+ R3 +=2;
+ if (R3 > 31) R3 = 31;
+ }
+-
++
+ // 2 exclusive rules applied on CCK rates only -
+ // 1. always plus 2 db for CCK
+ // 2. adjust TX Power based on TSSI
+@@ -2986,10 +3094,10 @@
+ R3 += 2; // plus 2 db
+ if (R3 > 31) R3 = 31;
+ }
+-
+- // Auto calibrate Tx AGC if bAutoTxAgc is TRUE and TX rate is CCK,
++
++ // Auto calibrate Tx AGC if bAutoTxAgc is TRUE and TX rate is CCK,
+ // because E2PROM's TSSI reference is valid only in CCK range.
+- else
++ else
+ {
+ UCHAR R1,TxPowerRef, TssiRef;
+
+@@ -3005,7 +3113,7 @@
+ // Need R3 adjustment. However, we have to make sure there is only
+ // plus / minus 5 variation allowed
+ if (TssiRef > R1)
+- {
++ {
+ R3 = (R3 < (ULONG) (TxPowerRef + 5)) ? (R3 + 1) : R3;
+ if (R3 > 31)
+ R3 = 31;
+@@ -3020,7 +3128,7 @@
+ }
+ }
+ }
+-
++
+ }
+ }
+ else // fixed AUTO TX power
+@@ -3035,7 +3143,7 @@
+
+ // Krellan: Save value for readout to user
+ pAd->PortCfg.TxPowerDriver = R3;
+-
++
+ // compare the desired R3.TxPwr value with current R3, if not equal
+ // set new R3.TxPwr
+ CurrTxPwr = (pAd->PortCfg.LatchRfRegs.R3 >> 9) & 0x0000001f;
+@@ -3058,8 +3166,8 @@
+ ==========================================================================
+ */
+ VOID AsicSleepThenAutoWakeup(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT TbttNumToNextWakeUp)
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT TbttNumToNextWakeUp)
+ {
+ CSR20_STRUC Csr20;
+ PWRCSR1_STRUC Pwrcsr1;
+@@ -3067,9 +3175,9 @@
+ // we have decided to SLEEP, so at least do it for a BEACON period.
+ if (TbttNumToNextWakeUp==0)
+ TbttNumToNextWakeUp=1;
+-
++
+ // PWRCSR0 remains untouched
+-
++
+ // set CSR20 for next wakeup
+ Csr20.word = 0;
+ Csr20.field.NumBcnBeforeWakeup = TbttNumToNextWakeUp - 1;
+@@ -3141,17 +3249,17 @@
+ ==========================================================================
+ */
+ VOID AsicSetBssid(
+- IN PRTMP_ADAPTER pAd,
+- IN MACADDR *Bssid)
++ IN PRTMP_ADAPTER pAd,
++ IN MACADDR *Bssid)
+ {
+ ULONG Addr4;
+
+- Addr4 = (ULONG)(Bssid->Octet[0]) |
+- (ULONG)(Bssid->Octet[1] << 8) |
++ Addr4 = (ULONG)(Bssid->Octet[0]) |
++ (ULONG)(Bssid->Octet[1] << 8) |
+ (ULONG)(Bssid->Octet[2] << 16) |
+ (ULONG)(Bssid->Octet[3] << 24);
+ RTMP_IO_WRITE32(pAd, CSR5, Addr4);
+-
++
+ Addr4 = (ULONG)(Bssid->Octet[4]) | (ULONG)(Bssid->Octet[5] << 8);
+ RTMP_IO_WRITE32(pAd, CSR6, Addr4);
+ }
+@@ -3162,7 +3270,7 @@
+ ==========================================================================
+ */
+ VOID AsicDisableSync(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ // TIMECSR_STRUC TimeCsr;
+ DBGPRINT(RT_DEBUG_TRACE, "--->Disable TSF synchronization\n");
+@@ -3174,7 +3282,7 @@
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+ #endif
+
+-#if 0
++#if 0
+ RTMP_IO_READ32(pAd, TIMECSR, &TimeCsr.word);
+
+ // restore to 33 PCI-tick-per-Usec. for 2560a only where PCI-clock is used as TSF timing source
+@@ -3192,7 +3300,7 @@
+ ==========================================================================
+ */
+ VOID AsicEnableBssSync(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ CSR12_STRUC Csr12;
+ CSR13_STRUC Csr13;
+@@ -3201,14 +3309,14 @@
+ BOOLEAN IsApPc;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--->AsicEnableBssSync(INFRA mode)\n");
+-
++
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+-
++
+ Csr12.word = 0;
+ Csr12.field.BeaconInterval = pAd->PortCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU
+ Csr12.field.CfpMaxDuration = pAd->PortCfg.CfpMaxDuration << 4; // ASIC register in units of 1/16 TU
+ RTMP_IO_WRITE32(pAd, CSR12, Csr12.word);
+-
++
+ Csr13.word = 0;
+ Csr13.field.CfpPeriod = pAd->PortCfg.CfpDurRemain << 4; // ASIC register in units of 1/16 TU
+ RTMP_IO_WRITE32(pAd, CSR13, Csr13.word);
+@@ -3218,14 +3326,14 @@
+ Bcncsr1.field.BeaconCwMin = 5;
+ RTMP_IO_WRITE32(pAd, BCNCSR1, Bcncsr1.word);
+
+- IsApPc = (CAP_IS_CF_POLLABLE_ON(pAd->PortCfg.CapabilityInfo) &&
++ IsApPc = (CAP_IS_CF_POLLABLE_ON(pAd->PortCfg.CapabilityInfo) &&
+ CAP_IS_CF_POLL_REQ_ON(pAd->PortCfg.CapabilityInfo));
+ IsApPc = FALSE; // TODO: not support so far
+-
++
+ Csr14.word = 0;
+ Csr14.field.TsfCount = 1;
+ Csr14.field.TsfSync = 1; // sync TSF in INFRASTRUCTURE mode
+- if (IsApPc)
++ if (IsApPc)
+ {
+ Csr14.field.CfpCntPreload = pAd->PortCfg.CfpCount;
+ Csr14.field.Tcfp = 1;
+@@ -3234,13 +3342,13 @@
+ // Csr14.field.TbcnPreload = (pAd->PortCfg.BeaconPeriod - 30) << 4; // TODO: ???? 1 TU ???
+ Csr14.field.Tbcn = 1;
+ RTMP_IO_WRITE32(pAd, CSR14, Csr14.word);
+-
++
+ }
+
+ /*
+ ==========================================================================
+ Description:
+- Note:
++ Note:
+ BEACON frame in shared memory should be built ok before this routine
+ can be called. Otherwise, a garbage frame maybe transmitted out every
+ Beacon period.
+@@ -3254,7 +3362,7 @@
+ CSR14_STRUC Csr14;
+ // BCNCSR_STRUC Bcncsr;
+ BCNCSR1_STRUC Bcncsr1;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "--->AsicEnableIbssSync(ADHOC mode)\n");
+
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+@@ -3279,7 +3387,7 @@
+ Bcncsr1.field.Preload = 700; // 24 + ((MAC_HDR_LEN << 4) / RateIdTo500Kbps[pAd->PortCfg.MlmeRate]);
+ }
+ RTMP_IO_WRITE32(pAd, BCNCSR1, Bcncsr1.word);
+-
++
+ Csr14.word = 0;
+ Csr14.field.TsfCount = 1;
+ Csr14.field.TsfSync = 2; // sync TSF in IBSS mode
+@@ -3289,16 +3397,16 @@
+ }
+
+ VOID AsicLedPeriodicExec(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ ULONG LedCsr = 0x0000461E; // 0x0000461E;
+-
++
+ pAd->PortCfg.LedCntl.fOdd = ! pAd->PortCfg.LedCntl.fOdd;
+
+- if (INFRA_ON(pAd) || ADHOC_ON(pAd))
++ if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+ LedCsr |= 0x00010000; // enable hardwired TX activity LED
+- if (pAd->PortCfg.LedCntl.fOdd && pAd->PortCfg.LedCntl.fRxActivity)
++ if (pAd->PortCfg.LedCntl.fOdd && pAd->PortCfg.LedCntl.fRxActivity)
+ LedCsr |= 0x00020000; // turn on software-based RX activity LED
+ pAd->PortCfg.LedCntl.fRxActivity = FALSE;
+
+@@ -3315,17 +3423,17 @@
+ // pAd->PortCfg.CurrentRxAntenna
+ // 0xff: diversity, 0:antenna A, 1:antenna B
+ VOID AsicSetRxAnt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+-
++
+ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ pAd->PortCfg.RxAnt.AvgRssi[0] = (-95 + 120) << 3; // reset Ant-A's RSSI history
+ pAd->PortCfg.RxAnt.AvgRssi[1] = (-95 + 120) << 3; // reset Ant-B's RSSI history
+
+ pAd->PortCfg.RxAnt.PrimaryInUsed = TRUE;
+-
++
+ if (pAd->PortCfg.CurrentRxAntenna == 0xff) // Diversity
+ {
+ pAd->PortCfg.RxAnt.PrimaryRxAnt = 1; // assume ant-B
+@@ -3344,7 +3452,7 @@
+
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - set RxAnt=%d, primary=%d, second=%d\n",
+ pAd->PortCfg.CurrentRxAntenna, pAd->PortCfg.RxAnt.PrimaryRxAnt, pAd->PortCfg.RxAnt.SecondaryRxAnt);
+-
++
+ // use primary antenna
+ RTMP_IO_READ32(pAd, BBPCSR1, &Bbpcsr1);
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+@@ -3352,34 +3460,34 @@
+ if (pAd->PortCfg.RxAnt.PrimaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+ {
+ TxValue = (TxValue & 0xFC) | 0x02;
+- RxValue = 0x1e;
++ RxValue = 0x1e;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00020002;
+ }
+ RTMP_IO_WRITE32(pAd, BBPCSR1, Bbpcsr1);
+ //RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, BBP_Tx_Configure, TxValue);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, BBP_Rx_Configure, RxValue);
+-
++
+ }
+
+ // switch to secondary RxAnt for a while to collect it's average RSSI
+-// also set a timeout routine to DO the actual evaluation. If evaluation
++// also set a timeout routine to DO the actual evaluation. If evaluation
+ // result shows a much better RSSI using secondary RxAnt, then a official
+ // RX antenna switch is performed.
+ VOID AsicEvaluateSecondaryRxAnt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+
+ if (pAd->PortCfg.CurrentRxAntenna != 0xff)
+ return;
+-
++
+ pAd->PortCfg.RxAnt.PrimaryInUsed = FALSE;
+ pAd->PortCfg.RxAnt.FirstPktArrivedWhenEvaluate = FALSE;
+ pAd->PortCfg.RxAnt.RcvPktNumWhenEvaluate = 0;
+@@ -3387,16 +3495,16 @@
+ // pAd->PortCfg.RxAnt.AvgRssi[pAd->PortCfg.RxAnt.SecondaryRxAnt] = 0;
+
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - evaluate Ant #%d\n", pAd->PortCfg.RxAnt.SecondaryRxAnt);
+-
++
+ // temporarily switch to secondary antenna
+ RxValue = pAd->PortCfg.BbpWriteLatch[BBP_Rx_Configure];
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+ RTMP_IO_READ32(pAd, BBPCSR1, &Bbpcsr1);
+-
++
+ if (pAd->PortCfg.RxAnt.SecondaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+@@ -3411,7 +3519,7 @@
+
+ // a one-shot timer to end the evalution
+ if (pAd->MediaState == NdisMediaStateConnected)
+- RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 150);
++ RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 150);
+ else
+ RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 300);
+ }
+@@ -3419,17 +3527,17 @@
+ // this timeout routine collect AvgRssi[SecondaryRxAnt] and decide if
+ // SecondaryRxAnt is much better than PrimaryRxAnt
+ VOID AsicRxAntEvalTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - AsicRxAntEvalTimeout, \n");
+ // Do nothing if the driver is starting halt state.
+ // This might happen when timer already been fired before cancel timer with mlmehalt
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
+ return;
+-
++
+ if (pAd->PortCfg.RxAnt.PrimaryInUsed == TRUE)
+
+ return;
+@@ -3445,7 +3553,7 @@
+ pAd->PortCfg.RxAnt.PrimaryRxAnt = pAd->PortCfg.RxAnt.SecondaryRxAnt;
+ pAd->PortCfg.RxAnt.SecondaryRxAnt = temp;
+ pAd->PortCfg.LastAvgRssi = (pAd->PortCfg.RxAnt.AvgRssi[pAd->PortCfg.RxAnt.SecondaryRxAnt] >> 3) - pAd->PortCfg.RssiToDbm;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - Switch to Ant #%d, RSSI[0,1]=<%d, %d>\n",
+ pAd->PortCfg.RxAnt.PrimaryRxAnt, pAd->PortCfg.RxAnt.AvgRssi[0], pAd->PortCfg.RxAnt.AvgRssi[1]);
+ }
+@@ -3453,7 +3561,7 @@
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+-
++
+ // end of evaluation, swicth back to primary antenna
+ RxValue = pAd->PortCfg.BbpWriteLatch[BBP_Rx_Configure];
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+@@ -3461,7 +3569,7 @@
+ if (pAd->PortCfg.RxAnt.PrimaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+@@ -3491,7 +3599,7 @@
+ */
+ VOID AsicSetSlotTime(
+ IN PRTMP_ADAPTER pAd,
+- IN BOOLEAN UseShortSlotTime)
++ IN BOOLEAN UseShortSlotTime)
+ {
+ CSR11_STRUC Csr11;
+ CSR18_STRUC Csr18;
+@@ -3499,7 +3607,7 @@
+ UCHAR PhyMode;
+
+ pAd->PortCfg.ShortSlotInUsed = UseShortSlotTime;
+-
++
+ PhyMode = pAd->PortCfg.PhyMode;
+ if (PhyMode == PHY_11ABG_MIXED)
+ {
+@@ -3527,7 +3635,7 @@
+ else
+ Csr19.field.EIFS = 60; // roughly = SIFS + ACK @6Mbps
+ RTMP_IO_WRITE32(pAd, CSR19, Csr19.word);
+-
++
+ #if 1
+ // force using short SLOT time for FAE to demo performance only
+ if (pAd->PortCfg.EnableTxBurst == 1)
+@@ -3543,7 +3651,7 @@
+ ==========================================================================
+ Description:
+ This routine is used for 2560a only where 2560a still use non-accurate
+- PCI-clock as TSF 1-usec source. we have to dynamically change tick-per-usec
++ PCI-clock as TSF 1-usec source. we have to dynamically change tick-per-usec
+ to avoid ADHOC synchronization issue with SYMBOL 11b card
+ ==========================================================================
+ */
+@@ -3575,7 +3683,7 @@
+ /*
+ ==========================================================================
+ Description:
+- danamic tune BBP R17 to find a balance between sensibility and
++ danamic tune BBP R17 to find a balance between sensibility and
+ noise isolation
+ ==========================================================================
+ */
+@@ -3586,13 +3694,13 @@
+ UCHAR R17;
+ ULONG FalseCcaUpperThreshold = pAd->PortCfg.BbpTuning.FalseCcaUpperThreshold << 7;
+ int dbm = pAd->PortCfg.AvgRssi - pAd->PortCfg.RssiToDbm;
+-
++
+ if ((! pAd->PortCfg.BbpTuningEnable) || (pAd->PortCfg.BbpTuning.VgcDelta==0))
+ return;
+-
++
+ R17 = pAd->PortCfg.BbpWriteLatch[17];
+
+- if ((pAd->PortCfg.Rt2560Version >= RT2560_VER_D) &&
++ if ((pAd->PortCfg.Rt2560Version >= RT2560_VER_D) &&
+ (pAd->MediaState == NdisMediaStateConnected))
+ {
+ // Rule 0.
+@@ -3609,7 +3717,7 @@
+ return;
+ }
+ // Rule 1. "special big-R17 for short-distance" when not SCANNING
+- else if ((dbm >= RSSI_FOR_LOW_SENSIBILITY) &&
++ else if ((dbm >= RSSI_FOR_LOW_SENSIBILITY) &&
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ if (R17 != BBP_R17_LOW_SENSIBILITY)
+@@ -3621,7 +3729,7 @@
+ return;
+ }
+ // Rule 2. "special mid-R17 for mid-distance" when not SCANNING
+- else if ((dbm >= RSSI_FOR_MID_SENSIBILITY) &&
++ else if ((dbm >= RSSI_FOR_MID_SENSIBILITY) &&
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ if (R17 != BBP_R17_MID_SENSIBILITY)
+@@ -3632,7 +3740,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "RSSI = %d dbm, fixed R17 at 0x%x\n", dbm, R17);
+ return;
+ }
+- // Rule 3. leave "short or mid-distance" condition, restore R17 to the
++ // Rule 3. leave "short or mid-distance" condition, restore R17 to the
+ // dynamic tuning range <E2PROM-6, BBP_R17_DYNAMIC_UP_BOUND>
+ else if (R17 >= BBP_R17_MID_SENSIBILITY)
+ {
+@@ -3642,13 +3750,13 @@
+ return;
+ }
+ }
+-
++
+ // Rule 3. otherwise, R17 is currenly in dyanmic tuning range: <E2PROM-6, BBP_R17_DYNAMIC_UP_BOUND>.
+ // Keep dynamic tuning based on False CCA conter
+-
++
+ RTMP_IO_READ32(pAd, CNT3, &Value);
+ pAd->PrivateInfo.CCAErrCnt = (Value & 0x0000ffff);
+- DBGPRINT(RT_DEBUG_INFO, "CCA flase alarm = %d, Avg RSSI= %d dbm\n",
++ DBGPRINT(RT_DEBUG_INFO, "CCA flase alarm = %d, Avg RSSI= %d dbm\n",
+ pAd->PrivateInfo.CCAErrCnt, dbm);
+
+ if ((pAd->PrivateInfo.CCAErrCnt > FalseCcaUpperThreshold) &&
+@@ -3697,7 +3805,7 @@
+
+ Return Value:
+ None
+-
++
+ Note:
+
+ ========================================================================
+@@ -3714,7 +3822,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "==> MlmeFreeMemory\n");
+ spin_lock(&pAd->MemLock);
+ if (pAd->Mlme.MemHandler.MemRunning)
+- {
++ {
+ //Mlme memory handler is busy.
+ //Move it to the Pending array for later free
+ pAd->Mlme.MemHandler.MemFreePending[pAd->Mlme.MemHandler.PendingCount++] = (PULONG) AllocVa;
+@@ -3738,7 +3846,7 @@
+ while (pMlmeMemoryStruct)
+ {
+ if (pMlmeMemoryStruct->AllocVa == (PVOID) pAd->Mlme.MemHandler.MemFreePending[Index])
+- {
++ {
+ //Found virtual address in the in-used link list
+ //Remove it from the memory in-used link list, and move it to the unused link list
+ if (pPrevious == NULL)
+@@ -3865,7 +3973,7 @@
+ pAd->Mlme.MemHandler.MemRunning = FALSE;
+ spin_unlock(&pAd->MemLock);
+
+- DBGPRINT(RT_DEBUG_INFO, "<== MlmeFreeMemory [IN:%d][UN:%d][Pending:%d]\n",
++ DBGPRINT(RT_DEBUG_INFO, "<== MlmeFreeMemory [IN:%d][UN:%d][Pending:%d]\n",
+ pAd->Mlme.MemHandler.InUseCount, pAd->Mlme.MemHandler.UnUseCount, pAd->Mlme.MemHandler.PendingCount);
+ }
+
+@@ -3883,7 +3991,7 @@
+ NDIS_STATUS_SUCCESS
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_RESOURCES
+-
++
+ Note:
+
+ ========================================================================
+@@ -3911,7 +4019,7 @@
+ }
+
+ if (pAd->Mlme.MemHandler.pUnUseHead == NULL)
+- { //There are no available memory for caller use
++ { //There are no available memory for caller use
+ Status = NDIS_STATUS_RESOURCES;
+ pAd->Mlme.MemHandler.MemRunning = FALSE;
+ spin_unlock(&pAd->MemLock);
+@@ -3963,7 +4071,7 @@
+ Return Value:
+ NDIS_STATUS_SUCCESS
+ NDIS_STATUS_RESOURCES
+-
++
+ Note:
+
+ ========================================================================
+@@ -3994,7 +4102,7 @@
+ //
+ if (Number > MAX_MLME_HANDLER_MEMORY)
+ Number = MAX_MLME_HANDLER_MEMORY;
+-
++
+ for (i = 0; i < Number; i++)
+ {
+ //Allocate a nonpaged memory for link list use.
+diff -Nur rt2500-1.1.0-b4/Module/mlme.h rt2500-cvs-2007061011/Module/mlme.h
+--- rt2500-1.1.0-b4/Module/mlme.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/mlme.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,43 +1,43 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: mlme.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * John 28th Aug 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * John 28th Aug 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __MLME_H__
+ #define __MLME_H__
+
+ #include "oid.h"
+
+-// maximum supported capability information -
++// maximum supported capability information -
+ // ESS, IBSS, Privacy, Short Preamble, Short Slot
+ #define SUPPORTED_CAPABILITY_INFO 0x0433
+
+@@ -61,7 +61,7 @@
+
+ #define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm
+ #define RSSI_FOR_MID_TX_POWER 55 // -55 db is considered mid-distance
+-#define RSSI_FOR_LOW_TX_POWER 45 // -45 db is considered very short distance and
++#define RSSI_FOR_LOW_TX_POWER 45 // -45 db is considered very short distance and
+ // eligible to use a lower TX power
+ #define RSSI_FOR_LOWEST_TX_POWER 30
+ #define MID_TX_POWER_DELTA 0 // -3 db from full TX power upon mid-distance to AP
+@@ -212,7 +212,7 @@
+ #define TX_FER_TOO_HIGH(TxFER) ((TxFER) > 15) // consider rate down if FER>15%
+ #define TX_FER_VERY_LOW(TxFER) ((TxFER) < 7) // consider rate up if FER<7%
+ #define FAIR_FER 10 // any value between TOO_HIGH and VERY_LOW
+-#define DRS_TX_QUALITY_WORST_BOUND 3
++#define DRS_TX_QUALITY_WORST_BOUND 3
+ #define DRS_PENALTY 8
+
+ // Ralink timer control block
+@@ -329,13 +329,14 @@
+ USHORT CfpDurRemaining;
+ UCHAR SsidLen;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+-
++
+ ULONG LastBeaconRxTime; // OS's timestamp
+
+ // New for microsoft WPA support
++ USHORT CipherCap; // Pair (0:7), Group (8:15) cipher cap
+ NDIS_802_11_FIXED_IEs FixIEs;
+ NDIS_802_11_WEP_STATUS WepStatus;
+- UCHAR VarIELen; // Length of next VIE include EID & Length
++ USHORT VarIELen; // Length of all saved IEs.
+ UCHAR VarIEs[MAX_VIE_LEN];
+ } BSS_ENTRY, *PBSS_ENTRY;
+
+@@ -384,7 +385,7 @@
+ ULONG BssIdx;
+ ULONG RoamIdx;
+ BOOLEAN CurrReqIsFromNdis; // TRUE - then we should call NdisMSetInformationComplete()
+- // FALSE - req is from driver itself.
++ // FALSE - req is from driver itself.
+ // no NdisMSetInformationComplete() is required
+ } CNTL_AUX, *PCNTL_AUX;
+
+@@ -394,7 +395,7 @@
+ USHORT CapabilityInfo;
+ USHORT ListenIntv;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+- UCHAR SsidLen;
++ UCHAR SsidLen;
+ RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer;
+ } ASSOC_AUX, *PASSOC_AUX;
+
+@@ -482,10 +483,10 @@
+ typedef struct PACKED _BEACON_EID_STRUCT {
+ UCHAR Eid;
+ UCHAR Len;
+- CHAR Octet[1];
++ UCHAR Octet[1];
+ } BEACON_EID_STRUCT,*PBEACON_EID_STRUCT;
+
+-// New for WPA cipher suite
++// New for WPA cipher suite
+ typedef struct PACKED _RSN_EID_STRUCT {
+ UCHAR Eid;
+ UCHAR Length;
+@@ -497,6 +498,98 @@
+ UCHAR Oui[4];
+ } Unicast[1];
+ } RSN_EID_STRUCT, *PRSN_EID_STRUCT;
++#define MIN_WPA_KEYDATA_LEN (4 + sizeof(ie_version_t) + sizeof(suite_sel_t) + \
++ 2*sizeof(suite_list_t))
++
++
++/* Country Information Element (802.11d pp. 4, 5) */
++
++typedef struct country_subelement {
++ unsigned char first_chan,
++ num_chans;
++ signed char max_tx_pwr; // in dBm
++} PACKED country_subelement_t, *country_subelement_p;
++
++typedef struct country_string { // (all alpha)
++ UCHAR co[2]; // ISO/IEC 3166-1 country code
++ UCHAR env; // ' '/'O'/'I' - 802.11d pp. 19
++} PACKED country_string_t, *country_string_p;
++
++typedef struct country_ie {
++ UCHAR eid;
++ UCHAR length;
++ country_string_t cs;
++ country_subelement_t chans[1];
++ UCHAR pad[0]; // may or may not be present
++} PACKED country_ie_t, *country_ie_p;
++
++
++/* WPA2 (cf. 802.11i pp. 27 ff.) */
++
++// access
++#define wtohs(x) (le16_to_cpu(x))// sic (802.11 is "native" little-endian)
++#define htows(x) (cpu_to_le16(x))// i.e. opposite of internet byte order
++
++// primitives
++typedef USHORT ie_version_t;
++typedef USHORT ie_count_t;
++typedef UCHAR ie_oui_t[3]; // Organizationally Unique Identifier
++typedef UCHAR pmkid_t[16], *pmkid_p;// 802.11i pp. 76
++
++typedef struct rsncap {
++#ifdef BIG_ENDIAN
++ USHORT Reserved:10;
++ USHORT GTKSAReplayCounter:2; // 0/2/4/16 replay counters
++ USHORT PTKSAReplayCounter:2;
++ USHORT NoPairwise:1; // WEP key 0 and pairwise key n/a
++ USHORT PreAuth:1; // AP STA supports pre-authentication
++#else
++ USHORT PreAuth:1; // AP STA supports pre-authentication
++ USHORT NoPairwise:1; // WEP key 0 and pairwise key n/a
++ USHORT PTKSAReplayCounter:2;
++ USHORT GTKSAReplayCounter:2; // 0/2/4/16 replay counters
++ USHORT Reserved:10;
++#endif
++} PACKED rsncap_t, *rsncap_p;
++
++typedef struct suite_sel {
++ ie_oui_t oui;
++ UCHAR type;
++} PACKED suite_sel_t, *suite_sel_p;
++
++/* Cipher suite selectors - 802.11i pp. 28, 29 */
++#define CIPHER_TYPE_GRP 0
++#define CIPHER_TYPE_WEP40 1
++#define CIPHER_TYPE_TKIP 2
++#define CIPHER_TYPE_RES 3
++#define CIPHER_TYPE_CCMP 4
++#define CIPHER_TYPE_WEP104 5
++#define NUM_CIPHER_TYPES 6
++
++/* Authentication and Key Management suite selectors - 802.11i pp. 30 */
++#define AKM_TYPE_802_1X 1
++#define AKM_TYPE_PSK 2
++
++typedef struct suite_list {
++ ie_count_t count;
++ suite_sel_t suite[1];
++} PACKED suite_list_t, *suite_list_p;
++
++typedef struct pmkid_list {
++ ie_count_t count;
++ pmkid_t list[1];
++} PACKED pmkid_list_t, *pmkid_list_p;
++
++typedef struct rsn_ie {
++ UCHAR eid;
++ UCHAR length;
++ ie_version_t version;
++
++ // Optional fields
++ suite_sel_t gcsuite; // Group Cipher Suite
++} PACKED rsn_ie_t, *rsn_ie_p;
++#define MIN_RSN_KEYDATA_LEN (sizeof(ie_version_t) + sizeof(suite_sel_t) + \
++ 2*sizeof(suite_list_t))
+
+ extern UCHAR RateIdToMbps[];
+ extern USHORT RateIdTo500Kbps[];
+diff -Nur rt2500-1.1.0-b4/Module/oid.h rt2500-cvs-2007061011/Module/oid.h
+--- rt2500-1.1.0-b4/Module/oid.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/oid.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: oid.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * RobinC 10th Dec 04 RFMON Support
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * RobinC 10th Dec 04 RFMON Support
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #ifndef _OID_H_
+ #define _OID_H_
+@@ -56,7 +57,8 @@
+ #define RTPRIV_IOCTL_BBP SIOCIWFIRSTPRIV + 0x03
+ #define RTPRIV_IOCTL_MAC SIOCIWFIRSTPRIV + 0x05
+ #define RTPRIV_IOCTL_E2P SIOCIWFIRSTPRIV + 0x07
+-#define RTPRIV_IOCTL_RFMONTX SIOCIWFIRSTPRIV + 0x0D
++#define RTPRIV_IOCTL_SET_RFMONTX SIOCIWFIRSTPRIV + 0x0C
++#define RTPRIV_IOCTL_GET_RFMONTX SIOCIWFIRSTPRIV + 0x0D
+
+ #define OID_GET_SET_TOGGLE 0x8000
+
+@@ -168,8 +170,8 @@
+ // Added new types for OFDM 5G and 2.4G
+ typedef enum _NDIS_802_11_NETWORK_TYPE
+ {
+- Ndis802_11FH,
+- Ndis802_11DS,
++ Ndis802_11FH,
++ Ndis802_11DS,
+ Ndis802_11OFDM5,
+ Ndis802_11OFDM24,
+ Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound
+@@ -199,7 +201,7 @@
+ typedef struct _NDIS_802_11_CONFIGURATION_FH
+ {
+ ULONG Length; // Length of structure
+- ULONG HopPattern; // As defined by 802.11, MSB set
++ ULONG HopPattern; // As defined by 802.11, MSB set
+ ULONG HopSet; // to one if non-802.11
+ ULONG DwellTime; // units are Kusec
+ } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
+@@ -237,7 +239,7 @@
+ typedef struct _NDIS_802_11_KEY
+ {
+ ULONG Length; // Length of this structure
+- ULONG KeyIndex;
++ ULONG KeyIndex;
+ ULONG KeyLength; // length of key in bytes
+ NDIS_802_11_MAC_ADDRESS BSSID;
+ NDIS_802_11_KEY_RSC KeyRSC;
+@@ -247,8 +249,8 @@
+ typedef struct _NDIS_802_11_REMOVE_KEY
+ {
+ ULONG Length; // Length of this structure
+- ULONG KeyIndex;
+- NDIS_802_11_MAC_ADDRESS BSSID;
++ ULONG KeyIndex;
++ NDIS_802_11_MAC_ADDRESS BSSID;
+ } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
+
+ typedef struct PACKED _NDIS_802_11_WEP
+@@ -285,7 +287,7 @@
+ typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates
+ typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates
+
+-typedef struct PACKED _NDIS_802_11_SSID
++typedef struct PACKED _NDIS_802_11_SSID
+ {
+ ULONG SsidLength; // length of SSID field below, in bytes;
+ // this can be zero.
+@@ -338,14 +340,14 @@
+ NDIS_WLAN_BSSID_EX Bssid[1];
+ } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
+
+-typedef struct _NDIS_802_11_FIXED_IEs
++typedef struct _NDIS_802_11_FIXED_IEs
+ {
+ UCHAR Timestamp[8];
+ USHORT BeaconInterval;
+ USHORT Capabilities;
+ } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
+
+-typedef struct _NDIS_802_11_VARIABLE_IEs
++typedef struct _NDIS_802_11_VARIABLE_IEs
+ {
+ UCHAR ElementID;
+ UCHAR Length; // Number of bytes in data field
+@@ -428,7 +430,7 @@
+ NDIS_802_11_STATUS_INDICATION Status;
+ NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
+ } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
+-
++
+ typedef struct _NDIS_802_11_TEST
+ {
+ ULONG Length;
+diff -Nur rt2500-1.1.0-b4/Module/rt2560.h rt2500-cvs-2007061011/Module/rt2560.h
+--- rt2500-1.1.0-b4/Module/rt2560.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rt2560.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt2560.h
+- *
++ *
+ * Abstract: RT2560 ASIC related definition & structures
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ ***************************************************************************/
+
+ #ifndef __RT2560_H__
+ #define __RT2560_H__
+@@ -370,10 +370,10 @@
+
+ // Word 5
+ ULONG Eiv;
+-
++
+ // Word 6-9
+ UCHAR Key[16];
+-
++
+ // Word 10 - 11 Reserved, not necessary to put into the structure.
+ #ifdef BIG_ENDIAN
+ ULONG Rsv2:31;
+@@ -676,7 +676,7 @@
+ #endif
+ } field;
+ ULONG word;
+-} CSR11_STRUC, *PCSR11_STRUC;
++} CSR11_STRUC, *PCSR11_STRUC;
+
+ //
+ // CSR12: Synchronization configuration register 0
+@@ -869,7 +869,7 @@
+ // =================================================================================
+
+ //
+-// TXCSR0 <0x0060> : TX Control Register
++// TXCSR0 <0x0060> : TX Control Register
+ //
+ typedef union _TXCSR0_STRUC {
+ struct {
+@@ -880,13 +880,13 @@
+ ULONG KickAtim:1; // Kick ATIM ring
+ ULONG KickTx:1; // Kick Tx ring
+ #else
+- ULONG KickTx:1; // Kick Tx ring
++ ULONG KickTx:1; // Kick Tx ring
+ ULONG KickAtim:1; // Kick ATIM ring
+ ULONG KickPrio:1; // Kick priority ring
+ ULONG Abort:1; // Abort all transmit related ring operation
+ ULONG Rsvd:28;
+ #endif
+- } field;
++ } field;
+ ULONG word;
+ } TXCSR0_STRUC, *PTXCSR0_STRUC;
+
+@@ -1184,7 +1184,7 @@
+ ULONG BbpDesireState:2;
+ ULONG SetState:1;
+ #else
+- ULONG SetState:1;
++ ULONG SetState:1;
+ ULONG BbpDesireState:2;
+ ULONG RfDesireState:2;
+ ULONG BbpCurrState:2;
+@@ -1304,13 +1304,13 @@
+ #ifdef BIG_ENDIAN
+ ULONG Rsvd:15;
+ ULONG WriteControl:1; // 1: Write BBP, 0: Read BBP
+- ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
++ ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
+ ULONG RegNum:7; // Selected BBP register
+ ULONG Value:8; // Register value to program into BBP
+ #else
+ ULONG Value:8; // Register value to program into BBP
+ ULONG RegNum:7; // Selected BBP register
+- ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
++ ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
+ ULONG WriteControl:1; // 1: Write BBP, 0: Read BBP
+ ULONG Rsvd:15;
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rt2x00debug.h rt2500-cvs-2007061011/Module/rt2x00debug.h
+--- rt2500-1.1.0-b4/Module/rt2x00debug.h 1970-01-01 01:00:00.000000000 +0100
++++ rt2500-cvs-2007061011/Module/rt2x00debug.h 2007-02-20 20:02:18.000000000 +0100
+@@ -0,0 +1,76 @@
++/*
++ Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
++ <http://rt2x00.serialmonkey.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.
++ */
++
++/*
++ Module: rt2x00debug
++ Abstract: Data structures for the rt2x00debug module.
++ Supported chipsets: RT2460, RT2560, RT2570,
++ rt2561, rt2561s, rt2661 & rt2573.
++ */
++
++typedef void (debug_access_t)(void *dev, const unsigned long word, void *data);
++
++struct rt2x00debug_reg {
++ debug_access_t *read;
++ debug_access_t *write;
++
++ unsigned int word_size;
++ unsigned int length;
++};
++
++struct rt2x00debug {
++ /*
++ * Name of the interface.
++ */
++ char intf_name[16];
++
++ /*
++ * Reference to the modules structure.
++ */
++ struct module *owner;
++
++ /*
++ * Driver module information
++ */
++ char *mod_name;
++ char *mod_version;
++
++ /*
++ * Register access information.
++ */
++ struct rt2x00debug_reg reg_csr;
++ struct rt2x00debug_reg reg_eeprom;
++ struct rt2x00debug_reg reg_bbp;
++
++ /*
++ * Pointer to driver structure where
++ * this debugfs entry belongs to.
++ */
++ void *dev;
++
++ /*
++ * Pointer to rt2x00debug private data,
++ * individual driver should not touch this.
++ */
++ void *priv;
++};
++
++extern int rt2x00debug_register(struct rt2x00debug *debug);
++extern void rt2x00debug_deregister(struct rt2x00debug *debug);
+diff -Nur rt2500-1.1.0-b4/Module/rt_config.h rt2500-cvs-2007061011/Module/rt_config.h
+--- rt2500-1.1.0-b4/Module/rt_config.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rt_config.h 2007-06-10 18:35:24.000000000 +0200
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt_config.h
+- *
++ *
+ * Abstract: Central header file for all includes
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 21st Dec 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 21st Dec 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RT_CONFIG_H__
+ #define __RT_CONFIG_H__
+@@ -39,14 +39,14 @@
+ #define NIC_DEVICE_NAME "RT2500STA"
+
+ #define DRV_NAME "rt2500"
+-#define DRV_VERSION "1.1.0 BETA4"
+-#define DRV_RELDATE "2006/06/18"
++#define DRV_VERSION "1.1.0 CVS"
++#define DRV_RELDATE "2007061011"
+ #define DRV_VERSION_MAJOR 1
+-#define DRV_VERSION_MINOR 1
++#define DRV_VERSION_MINOR 1
+ #define DRV_VERSION_SUB 0
+-#define DRV_BUILD_YEAR 2006
+-#define DRV_BUILD_MONTH 06
+-#define DRV_BUILD_DAY 18
++#define DRV_BUILD_YEAR 2007
++#define DRV_BUILD_MONTH 05
++#define DRV_BUILD_DAY 13
+
+ /* Operational parameters that are set at compile time. */
+ #if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
+@@ -55,7 +55,6 @@
+ #error You must compile this driver with "-O".
+ #endif
+
+-#include <linux/config.h> //can delete
+ #include <linux/module.h>
+ #include <linux/version.h>
+ #include <linux/kernel.h>
+@@ -71,7 +70,6 @@
+ #include <linux/skbuff.h>
+ #include <linux/init.h> //can delete
+ #include <linux/delay.h> // can delete
+-#include <linux/ethtool.h>
+ #include <linux/wireless.h>
+ #include <linux/proc_fs.h>
+ #include <linux/delay.h>
+@@ -90,9 +88,9 @@
+
+ // The type definition has to be placed before including rt2460.h
+ #ifndef ULONG
+-#define CHAR char
++#define CHAR signed char
+ #define INT int
+-#define SHORT int
++#define SHORT short
+ #define UINT u32
+ #define ULONG u32
+ #define USHORT u16
+@@ -144,6 +142,7 @@
+ #include "rtmp_type.h"
+ #include "rtmp_def.h"
+ #include "rt2560.h"
++#include "rt2x00debug.h"
+ #include "rtmp.h"
+ #include "mlme.h"
+ #include "oid.h"
+@@ -156,7 +155,7 @@
+ RT2560A = 0,
+ };
+
+-#ifdef RTMP_EMBEDDED
++#if 1 //#ifdef RTMP_EMBEDDED
+ #undef GFP_KERNEL
+ #define GFP_KERNEL (GFP_DMA | GFP_ATOMIC)
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rtmp.h rt2500-cvs-2007061011/Module/rtmp.h
+--- rt2500-1.1.0-b4/Module/rtmp.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp.h 2007-06-08 20:09:53.000000000 +0200
+@@ -1,43 +1,44 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt_config.h
+- *
++ *
+ * Abstract: Central header file for all includes
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 21st Dec 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 21st Dec 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * Flavio (rt2400) 8th Dec 04 Elegant irqreturn_t handling
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- * MarkW (rt2400) 15th Dec 04 Spinlock fix
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW (rt2400) 15th Dec 04 Spinlock fix
+ * Ivo (rt2400) 15th Dec 04 Debug level switching
+ * GregorG 29th Mar 05 Big endian fixes
+- ***************************************************************************/
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #ifndef __RTMP_H__
+ #define __RTMP_H__
+@@ -62,6 +63,13 @@
+ #endif /*(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) */
+ #endif /* pci_name */
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22))
++#define pci_module_init pci_register_driver
++#endif
++
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
++#define skb_reset_mac_header(skb) (skb->mac.raw = skb->data)
++#endif
+
+ // Krellan: Limit range of user TxPower settings from -31 to +0 dBm.
+ // We could accept -31 to +31 dBm, relative to 0 dBm which is defined
+@@ -87,21 +95,40 @@
+ //
+ // MACRO for debugging information
+ //
+-extern int debug;
+ #ifdef RT2500_DBG
+-#define DBGPRINT(Level, fmt, args...) \
+- if(debug){printk(Level DRV_NAME ": " fmt, ## args);}
++extern VOID rt2500_setdbg(long);
++extern INT rt2500_dbgprint(int, const char *, ...);
++#define DBGPRINT(mask, fmt, args...) \
++ (rt2500_dbgprint(mask, KERN_DEBUG DRV_NAME ": " fmt, ## args))
++
++/* Do not enclose in parentheses ()! */
++#define DBGENTER DBGPRINT(RT_DEBUG_TRACE, "==> %s\n", __FUNCTION__)
++#define DBGRETURN DBGPRINT(RT_DEBUG_TRACE, "<== %s\n", __FUNCTION__)
++
++#define DBGHEXSTR(level, prefix, src, len) \
++ { \
++ char buf[128]; /* allows 64 bytes/512 bits */ \
++ int i, j; \
++ unsigned char *p; \
++ \
++ if (len > 0) { \
++ j = len < sizeof(buf)/2? len: sizeof(buf)/2 - 1; \
++ \
++ for (p = (unsigned char *)(src), i = 0; i < j; i++) { \
++ sprintf(&buf[i*2], "%02x", *p++); \
++ } \
++ DBGPRINT(level, prefix "%s\n", buf); \
++ } \
++ }
+ #else
++#define DBGENTER
++#define DBGRETURN
+ #define DBGPRINT(Level, fmt, args...) \
+ while(0){}
++#define DBGHEXSTR(level, prefix, src, len) \
++ while(0){}
+ #endif
+
+-//
+-// spin_lock enhanced for Nested spin lock
+-//
+-
+-extern unsigned long IrqFlags;
+-
+ // Assert MACRO to make sure program running
+ //
+ #undef ASSERT
+@@ -145,12 +172,12 @@
+ // ULONG Register_Offset,
+ // ULONG Value)
+ //
+-#ifdef RTMP_EMBEDDED
++#if 0 //#ifdef RTMP_EMBEDDED
+ #define RTMP_IO_READ32(_A, _R, _pV) (*_pV = PCIMemRead32(__mem_pci(_A->CSRBaseAddress+_R)))
+ #define RTMP_IO_WRITE32(_A, _R, _V) (PCIMemWrite32(__mem_pci(_A->CSRBaseAddress+_R),_V))
+ #else
+-#define RTMP_IO_READ32(_A, _R, _pV) (*_pV = readl( (void*) (_A->CSRBaseAddress + _R) ) )
+-#define RTMP_IO_WRITE32(_A, _R, _V) (writel(_V, (void*) (_A->CSRBaseAddress + _R) ) )
++#define RTMP_IO_READ32(_A, _R, _pV) (*_pV = readl((void*)(_A->CSRBaseAddress + _R) ) )
++#define RTMP_IO_WRITE32(_A, _R, _V) (writel(_V, (void*)(_A->CSRBaseAddress + _R) ) )
+ #endif
+
+ //
+@@ -363,7 +390,7 @@
+ ULONG RxRingErrCount;
+ ULONG EncryptCount;
+ ULONG KickTxCount;
+- ULONG TxRingErrCount;
++ ULONG TxRingErrCount;
+ LARGE_INTEGER RealFcsErrCount;
+ } COUNTER_RALINK, *PCOUNTER_RALINK;
+
+@@ -400,10 +427,10 @@
+ typedef struct _WPA_KEY {
+ UCHAR KeyLen; // Key length for each key, 0: entry is invalid
+ UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
+- UCHAR RxMic[8];
+- UCHAR TxMic[8];
++ UCHAR RxMic[8]; // Message Integrity Code
++ UCHAR TxMic[8]; // MIC
+ NDIS_802_11_MAC_ADDRESS BssId; // For pairwise key only
+- UCHAR TxTsc[6]; // 48bit TSC value
++ UCHAR TxTsc[6]; // 48bit TKIP Sequence Counter value
+ UCHAR RxTsc[6]; // 48bit TSC value
+ UCHAR Type; // Indicate Pairwise / Group
+ } WPA_KEY, *PWPA_KEY;
+@@ -413,7 +440,7 @@
+ {
+ union
+ {
+- struct
++ struct
+ {
+ UCHAR rc0;
+ UCHAR rc1;
+@@ -436,38 +463,36 @@
+ UCHAR Byte;
+ } CONTROL;
+ } field;
+-
++
+ ULONG word;
+ } IV16;
+-
++
+ ULONG IV32;
+ } TKIP_IV, *PTKIP_IV;
+ #endif
+
+-typedef struct _IV_CONTROL_
++typedef struct PACKED _IV_CONTROL_
+ {
+- union
+- {
+- struct
+- {
++ union PACKED {
++ struct PACKED {
+ #ifdef BIG_ENDIAN
+- ULONG KeyID:2;
+- ULONG ExtIV:1;
+- ULONG Rsvd:5;
+- ULONG rc2:8;
+- ULONG rc1:8;
+- ULONG rc0:8;
++ ULONG KeyID:2;
++ ULONG ExtIV:1;
++ ULONG Rsvd:5;
++ ULONG rc2:8;
++ ULONG rc1:8;
++ ULONG rc0:8;
+ #else
+- ULONG rc0:8;
+- ULONG rc1:8;
+- ULONG rc2:8;
+- ULONG Rsvd:5;
+- ULONG ExtIV:1;
+- ULONG KeyID:2;
++ ULONG rc0:8;
++ ULONG rc1:8;
++ ULONG rc2:8;
++ ULONG Rsvd:5;
++ ULONG ExtIV:1;
++ ULONG KeyID:2;
+ #endif
+- }field;
+- ULONG word;
+- }IV16;
++ }field;
++ ULONG word;
++ }IV16;
+
+ ULONG IV32;
+ } TKIP_IV, *PTKIP_IV;
+@@ -499,7 +524,7 @@
+
+ typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
+ BOOLEAN PrimaryInUsed;
+- BOOLEAN FirstPktArrivedWhenEvaluate;
++ BOOLEAN FirstPktArrivedWhenEvaluate;
+ UCHAR PrimaryRxAnt; // 0:Ant-A, 1:Ant-B
+ UCHAR SecondaryRxAnt; // 0:Ant-A, 1:Ant-B
+ UCHAR CurrentRxAnt; // 0:Ant-A, 1:Ant-B
+@@ -535,7 +560,7 @@
+
+ NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
+ NDIS_802_11_WEP_STATUS WepStatus;
+-
++
+ // MIB:ieee802dot11.dot11smt(1).dot11WEPDefaultKeysTable(3)
+ WEP_KEY SharedKey[SHARE_KEY_NO]; // Keep for backward compatiable
+ WPA_KEY PairwiseKey[PAIRWISE_KEY_NO];
+@@ -566,8 +591,8 @@
+ // MIB:ieee802dot11.dot11mac(2).dot11OperationTable(1)
+ USHORT RtsThreshold; // in units of BYTE
+ USHORT FragmentThreshold;
+- BOOLEAN bFragmentZeroDisable; // Microsoft use 0 as disable
+-
++ BOOLEAN bFragmentZeroDisable; // Microsoft use 0 as disable
++
+ // MIB:ieee802dot11.dot11phy(4).dot11PhyAntennaTable(2)
+ UCHAR CurrentTxAntenna;
+ UCHAR CurrentRxAntenna;
+@@ -582,19 +607,19 @@
+ UCHAR TxPowerDriver; // Driver's last TxPower setting written to hardware, in raw units
+ int TxPowerUser; // User's desired fixed TxPower setting, in dBm
+ BOOLEAN TxPowerAuto; // 1 - enable auto TxPower; 0 - fixed
+-
++
+ // MIB:ieee802dot11.dot11phy(4).dot11PhyDSSSTable(5)
+ UCHAR Channel; // current (I)BSS channel used in the station
+ UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
+-
++
+ // MIB:ieee802dot11.dot11phy(4).dot11AntennasListTable(8)
+ BOOLEAN AntennaSupportTx;
+ BOOLEAN AntennaSupportRx;
+ BOOLEAN AntennaSupportDiversityRx;
+
+ // Use user changed MAC
+- BOOLEAN bLocalAdminMAC;
+-
++ BOOLEAN bLocalAdminMAC;
++
+ // MIB:ieee802dot11.dot11phy(4).dot11SupportedDataRatesTxTable(9)
+ // MIB:ieee802dot11.dot11phy(4).dot11SupportedDataRatesRxTable(10)
+ UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES]; // Supported rates
+@@ -661,7 +686,7 @@
+ UCHAR ChannelList[MAX_LEN_OF_CHANNELS]; // list all supported channels for site survey
+ UCHAR ChannelListNum; // number of channel in ChannelList[]
+ BOOLEAN bShowHiddenSSID;
+-
++
+ // configuration to be used when this STA starts a new ADHOC network
+ IBSS_CONFIG IbssConfig;
+
+@@ -679,7 +704,7 @@
+ UCHAR LedMode;
+ RALINK_TIMER_STRUCT RfTuningTimer;
+ STA_WITH_ETHER_BRIDGE StaWithEtherBridge;
+-
++
+ // New for WPA, windows want us to to keep association information and
+ // Fixed IEs from last association response
+ NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
+@@ -700,7 +725,7 @@
+ ULONG BGProtectionInUsed; // 0: not in-used, 1: in-used
+ ULONG ShortSlotInUsed; // 0: not in-used, 1: in-used
+ USHORT TxPreambleInUsed; // Rt802_11PreambleLong, Rt802_11PreambleShort
+-
++
+ // PCI clock adjustment round
+ UCHAR PciAdjustmentRound;
+
+@@ -718,8 +743,8 @@
+
+
+ ULONG SystemErrorBitmap; // b0: E2PROM version error
+-
+- // This soft Rx Antenna Diversity mechanism is used only when user set
++
++ // This soft Rx Antenna Diversity mechanism is used only when user set
+ // RX Antenna = DIVERSITY ON
+ SOFT_RX_ANT_DIVERSITY RxAnt;
+
+@@ -753,13 +778,13 @@
+ STATE_MACHINE_FUNC CntlFunc[CNTL_FUNC_SIZE], AssocFunc[ASSOC_FUNC_SIZE];
+ STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE], AuthRspFunc[AUTH_RSP_FUNC_SIZE];
+ STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE], WpaPskFunc[WPA_PSK_FUNC_SIZE];
+-
++
+ ASSOC_AUX AssocAux;
+ AUTH_AUX AuthAux;
+ AUTH_RSP_AUX AuthRspAux;
+ SYNC_AUX SyncAux;
+ CNTL_AUX CntlAux;
+-
++
+ COUNTER_802_11 PrevWlanCounters;
+ ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
+
+@@ -770,7 +795,7 @@
+ UINT ShiftReg;
+ PSPOLL_FRAME PsFr;
+ MACHDR NullFr;
+-
++
+ RALINK_TIMER_STRUCT PeriodicTimer;
+ ULONG PeriodicRound;
+ ULONG PrevTxCnt;
+@@ -849,7 +874,7 @@
+ typedef struct PACKED _TUPLE_CACHE {
+ BOOLEAN Valid;
+ MACADDR MAC;
+- USHORT Sequence;
++ USHORT Sequence;
+ USHORT Frag;
+ } TUPLE_CACHE, *PTUPLE_CACHE;
+
+@@ -872,7 +897,7 @@
+ typedef struct PACKED _TKIP_KEY_INFO {
+ UINT nBytesInM; // # bytes in M for MICKEY
+ ULONG IV16;
+- ULONG IV32;
++ ULONG IV32;
+ ULONG K0; // for MICKEY Low
+ ULONG K1; // for MICKEY Hig
+ ULONG L; // Current state for MICKEY
+@@ -937,12 +962,14 @@
+ //
+ typedef struct _RTMP_ADAPTER
+ {
+- char nickn[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
++ char nickn[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
+ int chip_id;
+
+ unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use
+ // NdisReadRegisterXx or NdisWriteRegisterXx
+
++ struct rt2x00debug debug;
++
+ // configuration
+ UCHAR PermanentAddress[ETH_ALEN]; // Factory default MAC address
+ UCHAR CurrentAddress[ETH_ALEN]; // User changed MAC address
+@@ -958,7 +985,7 @@
+ struct ring_desc BeaconRing; // Beacon Ring, only one
+
+ MGMT_STRUC MgmtRing[MGMT_RING_SIZE]; // management ring size
+-
++
+ ULONG CurRxIndex; // Next RxD read pointer
+ ULONG CurDecryptIndex; // Next RxD decrypt read pointer
+ ULONG CurTxIndex; // Next TxD write pointer
+@@ -985,17 +1012,17 @@
+ struct sk_buff_head TxSwQueue0; // Tx software priority queue 0 mapped to 0.1
+ struct sk_buff_head TxSwQueue1; // Tx software priority queue 1 mapped to 2.3
+ struct sk_buff_head TxSwQueue2; // Tx software priority queue 2 mapped to 4.5
+- struct sk_buff_head TxSwQueue3;
++ struct sk_buff_head TxSwQueue3;
+
+ USHORT Sequence; // Current sequence number
+
+ TUPLE_CACHE TupleCache[MAX_CLIENT]; // Maximum number of tuple caches, only useful in Ad-Hoc
+ UCHAR TupleCacheLastUpdateIndex; // 0..MAX_CLIENT-1
+ FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
+-
++
+ // For MiniportTransferData
+ PUCHAR pRxData; // Pointer to current RxRing offset / fragment frame offset
+-
++
+ // Counters for 802.3 & generic.
+ // Add 802.11 specific counters later
+ COUNTER_802_3 Counters; // 802.3 counters
+@@ -1021,11 +1048,11 @@
+ BOOLEAN bAcceptBroadcast;
+ BOOLEAN bAcceptAllMulticast;
+ BOOLEAN bAcceptPromiscuous;
+-
++
+ // Control to check Tx hang
+ BOOLEAN bTxBusy;
+ //PQUEUE_ENTRY FirstEntryInQueue; // The first packet in Tx queue
+-
++
+ // Control disconnect / connect event generation
+ ULONG LinkDownTime;
+ ULONG LastRxRate;
+@@ -1044,7 +1071,7 @@
+
+ BOOLEAN bNetDeviceStopQueue;
+ BOOLEAN NeedSwapToLittleEndian;
+-
++
+ #if WIRELESS_EXT >= 12
+ struct iw_statistics iw_stats;
+ #endif
+@@ -1054,9 +1081,6 @@
+ ATE_INFO ate;
+ #endif //#ifdef RALINK_ATE
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- struct work_struct mlme_work;
+-#endif
+ } RTMP_ADAPTER, *PRTMP_ADAPTER;
+
+ //
+@@ -1064,10 +1088,9 @@
+ //
+ typedef struct _SHA_CTX
+ {
+- ULONG H[5];
+- ULONG W[80];
+- INT lenW;
+- ULONG sizeHi, sizeLo;
++ ULONG Buf[5]; // buffers of five states
++ UCHAR Input[80]; // input message
++ ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
+ } SHA_CTX;
+
+ //
+@@ -1085,7 +1108,7 @@
+ IN PRTMP_ADAPTER pAd)
+ {
+ // 0xFF37 : Txdone & Rxdone, 0xFF07: Txdonw, Rxdone, PrioDone, AtimDone,
+- RTMP_IO_WRITE32(pAd, CSR8, 0xFE14);
++ RTMP_IO_WRITE32(pAd, CSR8, 0xFE14);
+ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
+ }
+
+@@ -1096,10 +1119,16 @@
+ INT RT2500_close(
+ IN struct net_device *net_dev);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+ irqreturn_t RTMPIsr(
+- IN INT irq,
+- IN VOID *dev_instance,
++ IN INT irq,
++ IN VOID *dev_instance,
+ IN struct pt_regs *rgs);
++#else
++irqreturn_t RTMPIsr(
++ IN INT irq,
++ IN VOID *dev_instance);
++#endif
+
+ VOID RT2500_timer(
+ IN unsigned long data);
+@@ -1108,16 +1137,16 @@
+ IN struct net_device *net_dev);
+
+ INT RTMPSendPackets(
+- IN struct sk_buff *skb,
++ IN struct sk_buff *skb,
+ IN struct net_device *net_dev);
+
+ INT RT2500_probe(
+- IN struct pci_dev *pPci_Dev,
++ IN struct pci_dev *pPci_Dev,
+ IN const struct pci_device_id *ent);
+
+ INT RT2500_ioctl(
+- IN struct net_device *net_dev,
+- IN OUT struct ifreq *rq,
++ IN struct net_device *net_dev,
++ IN OUT struct ifreq *rq,
+ IN INT cmd);
+
+ VOID RTMPRingCleanUp(
+@@ -1179,7 +1208,7 @@
+ INT RTMPGetKeyParameter(
+ IN PUCHAR section,
+ IN PCHAR key,
+- OUT PCHAR dest,
++ OUT PCHAR dest,
+ IN INT destsize,
+ IN PCHAR buffer);
+
+@@ -1187,7 +1216,7 @@
+ IN PRTMP_ADAPTER pAd);
+
+ #define RTMPEqualMemory(p1,p2,n) (memcmp((p1),(p2),(n)) == 0)
+-
++
+ ULONG RTMPCompareMemory(
+ IN PVOID pSrc1,
+ IN PVOID pSrc2,
+@@ -1244,7 +1273,7 @@
+ NDIS_STATUS RTMPSendPacket(
+ IN PRTMP_ADAPTER pAdapter,
+ IN struct sk_buff *skb);
+-
++
+ //VOID RTMPDeQueuePacket(
+ // IN PRTMP_ADAPTER pAdapter,
+ // IN PQUEUE_HEADER pQueue);
+@@ -1320,8 +1349,8 @@
+ IN UCHAR TxRate);
+
+ NDIS_STATUS RTMPApplyPacketFilter(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PRXD_STRUC pRxD,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PRXD_STRUC pRxD,
+ IN PHEADER_802_11 pHeader);
+
+ struct sk_buff_head* RTMPCheckTxSwQueue(
+@@ -1329,20 +1358,20 @@
+ OUT UCHAR *AccessCategory);
+
+ VOID RTMPReportMicError(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PWPA_KEY pWpaKey);
+ //
+ // Private routines in rtmp_wep.c
+ //
+ VOID RTMPInitWepEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN UCHAR KeyId,
+- IN UCHAR KeyLen,
++ IN UCHAR KeyLen,
+ IN PUCHAR pDest);
+
+ VOID RTMPEncryptData(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDest,
+ IN UINT Len);
+@@ -1366,7 +1395,7 @@
+
+ VOID ARCFOUR_DECRYPT(
+ IN PARCFOURCONTEXT Ctx,
+- IN PUCHAR pDest,
++ IN PUCHAR pDest,
+ IN PUCHAR pSrc,
+ IN UINT Len);
+
+@@ -1394,18 +1423,18 @@
+ IN PRTMP_ADAPTER pAd);
+
+ VOID AsicSwitchChannel(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN UCHAR Channel);
+
+ VOID AsicLockChannel(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Channel) ;
+
+ VOID AsicRfTuningExec(
+ IN unsigned long data);
+
+ VOID AsicSleepThenAutoWakeup(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT TbttNumToNextWakeUp);
+
+ VOID AsicForceSleep(
+@@ -1415,7 +1444,7 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID AsicSetBssid(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MACADDR *Bssid);
+
+ VOID AsicDisableSync(
+@@ -1453,16 +1482,16 @@
+ IN PRTMP_ADAPTER pAd);
+
+ VOID MacAddrRandomBssid(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ OUT PMACADDR Addr);
+
+ VOID MgtMacHeaderInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT PMACHDR Hdr,
+- IN UCHAR Subtype,
+- IN UCHAR ToDs,
+-// IN UCHAR AddrType,
+- IN PMACADDR Ds,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT PMACHDR Hdr,
++ IN UCHAR Subtype,
++ IN UCHAR ToDs,
++// IN UCHAR AddrType,
++ IN PMACADDR Ds,
+ IN PMACADDR Bssid);
+
+ VOID MlmeRadioOff(
+@@ -1475,66 +1504,69 @@
+ IN BSS_TABLE *Tab);
+
+ ULONG BssTableSearch(
+- IN BSS_TABLE *Tab,
++ IN BSS_TABLE *Tab,
+ IN PMACADDR Bssid);
+
+ VOID BssTableDeleteEntry(
+- IN OUT BSS_TABLE *Tab,
++ IN OUT BSS_TABLE *Tab,
+ IN PMACADDR Bssid);
+
+ VOID BssEntrySet(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT BSS_ENTRY *Bss,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
++ IN PRTMP_ADAPTER pAdapter,
++ OUT BSS_ENTRY *Bss,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
+ IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ ULONG BssTableSetEntry(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT BSS_TABLE *Tab,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ OUT BSS_TABLE *Tab,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ VOID BssTableSsidSort(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *OutTab,
+- IN CHAR Ssid[],
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *OutTab,
++ IN CHAR Ssid[],
+ IN UCHAR SsidLen);
+
+ VOID BssTableSortByRssi(
+ IN OUT BSS_TABLE *OutTab);
+
+-NDIS_802_11_WEP_STATUS BssCipherParse(
+- IN PUCHAR pCipher);
++USHORT BssCipherParse(
++ IN PBEACON_EID_STRUCT pEid,
++ IN USHORT VarIELen); // Length of all saved IEs.
+
+ NDIS_STATUS MlmeQueueInit(
+ IN MLME_QUEUE *Queue);
+@@ -1543,70 +1575,64 @@
+ IN MLME_QUEUE *Queue);
+
+ BOOLEAN MlmeEnqueue(
+- OUT MLME_QUEUE *Queue,
+- IN ULONG Machine,
+- IN ULONG MsgType,
+- IN ULONG MsgLen,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG Machine,
++ IN ULONG MsgType,
++ IN ULONG MsgLen,
+ IN VOID *Msg);
+
+ BOOLEAN MlmeEnqueueForRecv(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT MLME_QUEUE *Queue,
+- IN ULONG TimeStampHigh,
+- IN ULONG TimeStampLow,
+- IN UCHAR Rssi,
++ IN PRTMP_ADAPTER pAdapter,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG TimeStampHigh,
++ IN ULONG TimeStampLow,
++ IN UCHAR Rssi,
+ IN UCHAR Noise,
+- IN ULONG MsgLen,
++ IN ULONG MsgLen,
+ IN PVOID Msg);
+
+ BOOLEAN MlmeDequeue(
+- IN MLME_QUEUE *Queue,
++ IN MLME_QUEUE *Queue,
+ OUT MLME_QUEUE_ELEM **Elem);
+
+ VOID MlmeRestartStateMachine(
+ IN PRTMP_ADAPTER pAd);
+
+-BOOLEAN MlmeQueueEmpty(
+- IN MLME_QUEUE *Queue);
+-
+-BOOLEAN MlmeQueueFull(
+- IN MLME_QUEUE *Queue);
+-
+ BOOLEAN MsgTypeSubst(
+- IN MACFRAME *Fr,
+- OUT INT *Machine,
++ IN MACFRAME *Fr,
++ OUT INT *Machine,
+ OUT INT *MsgType);
+
+ VOID StateMachineInit(
+- IN STATE_MACHINE *Sm,
+- IN STATE_MACHINE_FUNC Trans[],
+- IN ULONG StNr,
+- IN ULONG MsgNr,
+- IN STATE_MACHINE_FUNC DefFunc,
+- IN ULONG InitState,
++ IN STATE_MACHINE *Sm,
++ IN STATE_MACHINE_FUNC Trans[],
++ IN ULONG StNr,
++ IN ULONG MsgNr,
++ IN STATE_MACHINE_FUNC DefFunc,
++ IN ULONG InitState,
+ IN ULONG Base);
+
+ VOID StateMachineSetAction(
+- IN STATE_MACHINE *S,
+- IN ULONG St,
+- ULONG Msg,
++ IN STATE_MACHINE *S,
++ IN ULONG St,
++ ULONG Msg,
+ IN STATE_MACHINE_FUNC F);
+
+ VOID StateMachinePerformAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Drop(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID StateMachineDestroy(
+ IN STATE_MACHINE *Sm);
+
+ VOID AssocStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *Sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID ReassocTimeout(
+@@ -1620,43 +1646,43 @@
+
+ //----------------------------------------------
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeAssocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeReassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAssocRspAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerReassocRspAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerDisassocAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID DisassocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID AssocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ReassocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Cls3errAction(
+@@ -1682,60 +1708,60 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID AssocPostProc(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MACADDR *Addr2,
+- IN USHORT CapabilityInfo,
+- IN USHORT Aid,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN MACADDR *Addr2,
++ IN USHORT CapabilityInfo,
++ IN USHORT Aid,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist);
+
+ VOID AuthStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PSTATE_MACHINE sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PSTATE_MACHINE sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID AuthTimeout(
+ IN unsigned long data);
+
+ VOID MlmeAuthReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthRspAtSeq2Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthRspAtSeq4Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID AuthTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Cls2errAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PMACADDR pAddr);
+
+ VOID MlmeDeauthReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenAuth(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ //VOID MlmeDeauthReqProc(
+-// IN PRTMP_ADAPTER pAdapter,
+-// IN MACADDR *Addr,
++// IN PRTMP_ADAPTER pAdapter,
++// IN MACADDR *Addr,
+ // IN USHORT Reason);
+
+ //=============================================
+
+ VOID AuthRspStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PSTATE_MACHINE Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PSTATE_MACHINE Sm,
+ IN STATE_MACHINE_FUNC Trans[]);
+
+
+@@ -1743,34 +1769,34 @@
+ IN unsigned long data);
+
+ VOID AuthRspChallengeTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthAtAuthRspIdleAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthAtAuthRspWaitAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerDeauthAction(
+- IN PRTMP_ADAPTER pAdaptor,
++ IN PRTMP_ADAPTER pAdaptor,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthSimpleRspGenAndSend(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PMACHDR Hdr,
+- IN USHORT Alg,
+- IN USHORT Seq,
+- IN USHORT Reason,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PMACHDR Hdr,
++ IN USHORT Alg,
++ IN USHORT Seq,
++ IN USHORT Reason,
+ IN USHORT Status);
+
+ //========================================
+
+ VOID SyncStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *Sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID BeaconTimeout(
+@@ -1783,23 +1809,23 @@
+ IN unsigned long data);
+
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenScan(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenJoin(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenStart(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID EnqueueProbeRequest(
+@@ -1808,61 +1834,61 @@
+ //=========================================
+
+ VOID MlmeCntlInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID MlmeCntlMachinePerformAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlIdleProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlOidScanProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlOidSsidProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM * Elem);
+
+ VOID CntlOidRTBssidProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlMlmeRoamingProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitDisassocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitJoinProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitReassocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitStartProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAuthProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAuthProc2(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAssocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID LinkUp(
+@@ -1873,8 +1899,8 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID MlmeCntlConfirm(
+- IN PRTMP_ADAPTER pAdapter,
+- IN ULONG MsgType,
++ IN PRTMP_ADAPTER pAdapter,
++ IN ULONG MsgType,
+ IN USHORT Msg);
+
+ VOID IterateOnBssTab(
+@@ -1884,42 +1910,42 @@
+ IN PRTMP_ADAPTER pAdapter);;
+
+ VOID JoinParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
+ IN ULONG BssIdx);
+
+ VOID AssocParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
+- IN MACADDR *Addr,
+- IN USHORT CapabilityInfo,
+- IN ULONG Timeout,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
++ IN MACADDR *Addr,
++ IN USHORT CapabilityInfo,
++ IN ULONG Timeout,
+ IN USHORT ListenIntv);
+
+ VOID ScanParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN UCHAR ScanType);
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN UCHAR ScanType);
+
+ VOID DisassocParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
+- IN MACADDR *Addr,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
++ IN MACADDR *Addr,
+ IN USHORT Reason);
+
+ VOID StartParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_START_REQ_STRUCT *StartReq,
+- IN CHAR Ssid[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_START_REQ_STRUCT *StartReq,
++ IN CHAR Ssid[],
+ IN UCHAR SsidLen);
+
+ VOID AuthParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
+- IN MACADDR *Addr,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
++ IN MACADDR *Addr,
+ IN USHORT Alg);
+
+ VOID EnqueuePsPoll(
+@@ -1933,39 +1959,39 @@
+ IN UCHAR TxRate);
+
+ VOID MlmeJoinReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeStartReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ScanTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID BeaconTimeoutAtJoinAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeaconAtScanAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeaconAtJoinAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerProbeReqAction(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ScanNextChannel(
+@@ -1975,142 +2001,143 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ BOOLEAN MlmeScanReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT UCHAR *BssType,
+- OUT CHAR ssid[],
+- OUT UCHAR *SsidLen,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT UCHAR *BssType,
++ OUT CHAR ssid[],
++ OUT UCHAR *SsidLen,
+ OUT UCHAR *ScanType);
+
+ BOOLEAN PeerBeaconAndProbeRspSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT MACADDR *Bssid,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *BssType,
+- OUT USHORT *BeaconPeriod,
+- OUT UCHAR *Channel,
+- OUT LARGE_INTEGER *Timestamp,
+- OUT BOOLEAN *CfExist,
+- OUT CF_PARM *Cf,
+- OUT USHORT *AtimWin,
+- OUT USHORT *CapabilityInfo,
+- OUT UCHAR Rate[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT MACADDR *Bssid,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *BssType,
++ OUT USHORT *BeaconPeriod,
++ OUT UCHAR *Channel,
++ OUT LARGE_INTEGER *Timestamp,
++ OUT BOOLEAN *CfExist,
++ OUT CF_PARM *Cf,
++ OUT USHORT *AtimWin,
++ OUT USHORT *CapabilityInfo,
++ OUT UCHAR Rate[],
+ OUT UCHAR *RateLen,
+ OUT BOOLEAN *ExtendedRateIeExist,
+ OUT UCHAR *Erp,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *MessageToMe,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *MessageToMe,
+ OUT UCHAR *Legacy,
+ OUT UCHAR SupRate[],
+ OUT UCHAR *SupRateLen,
+ OUT UCHAR ExtRate[],
+ OUT UCHAR *ExtRateLen,
++ OUT USHORT *VarIELen, // Length of all saved IEs.
+ OUT PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ //BOOLEAN JoinParmSanity(
+-// IN PRTMP_ADAPTER pAdapter,
+-// IN VOID *Msg,
+-// IN ULONG MsgLen,
++// IN PRTMP_ADAPTER pAdapter,
++// IN VOID *Msg,
++// IN ULONG MsgLen,
+ // OUT ULONG *BssIdx,
+-// OUT UCHAR SupportedRates[],
++// OUT UCHAR SupportedRates[],
+ // OUT UCHAR *SupportedRatesLen);
+
+ BOOLEAN MlmeAssocReqSanity(
+ IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *ApAddr,
+- OUT USHORT *CapabilityInfo,
+- OUT ULONG *Timeout,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *ApAddr,
++ OUT USHORT *CapabilityInfo,
++ OUT ULONG *Timeout,
+ OUT USHORT *ListenIntv);
+
+ BOOLEAN MlmeAuthReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT ULONG *Timeout,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT ULONG *Timeout,
+ OUT USHORT *Alg);
+
+ BOOLEAN MlmeStartReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT CHAR Ssid[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT CHAR Ssid[],
+ OUT UCHAR *Ssidlen);
+
+ BOOLEAN PeerAuthSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT USHORT *Alg,
+- OUT USHORT *Seq,
+- OUT USHORT *Status,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT USHORT *Alg,
++ OUT USHORT *Seq,
++ OUT USHORT *Status,
+ OUT CHAR ChlgText[]);
+
+ BOOLEAN PeerAssocRspSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *CapabilityInfo,
+- OUT USHORT *Status,
+- OUT USHORT *Aid,
+- OUT UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *CapabilityInfo,
++ OUT USHORT *Status,
++ OUT USHORT *Aid,
++ OUT UCHAR Rates[],
+ OUT UCHAR *RatesLen,
+ OUT BOOLEAN *ExtendedRateIeExist);
+
+ BOOLEAN PeerDisassocSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
+ OUT USHORT *Reason);
+
+ BOOLEAN PeerDeauthSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
+ OUT USHORT *Reason);
+
+ BOOLEAN PeerProbeReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
+ OUT MACADDR *Addr2,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen);
+-// OUT UCHAR Rates[],
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen);
++// OUT UCHAR Rates[],
+ // OUT UCHAR *RatesLen);
+
+ BOOLEAN GetTimBit(
+- IN CHAR *Ptr,
+- IN USHORT Aid,
+- OUT UCHAR *TimLen,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
++ IN CHAR *Ptr,
++ IN USHORT Aid,
++ OUT UCHAR *TimLen,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
+ OUT UCHAR *MessageToMe);
+
+ BOOLEAN GetLegacy(
+- IN CHAR *Ptr,
++ IN CHAR *Ptr,
+ OUT UCHAR *Legacy);
+
+ ULONG MakeOutgoingFrame(
+- OUT CHAR *Buffer,
++ OUT CHAR *Buffer,
+ OUT ULONG *Length, ...);
+
+ VOID LfsrInit(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Seed);
+
+ UCHAR RandomByte(
+@@ -2129,26 +2156,26 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID MlmeCheckForRoaming(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now32);
+
+ VOID MlmeCheckDynamicTxRateSwitching(
+ IN PRTMP_ADAPTER pAd);
+
+ VOID MlmeCheckChannelQuality(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now);
+
+ VOID MlmeCheckForPsmChange(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now32);
+
+ VOID MlmeSetPsmBit(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT psm);
+
+ VOID MlmeSetTxPreamble(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT TxPreamble);
+
+ VOID MlmeUpdateTxRates(
+@@ -2214,7 +2241,7 @@
+
+ VOID EWEN(
+ IN PRTMP_ADAPTER pAd);
+-
++
+ USHORT RTMP_EEPROM_READ16(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset);
+@@ -2223,16 +2250,16 @@
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Data);
+-
++
+ UCHAR ChannelSanity(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel);
+
+ //
+ // Prototypes of function definition in rtmp_tkip.c
+ //
+ VOID RTMPInitTkipEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pTKey,
+ IN UCHAR KeyId,
+ IN PUCHAR pTA,
+@@ -2242,14 +2269,14 @@
+ OUT PULONG pIV32);
+
+ VOID RTMPInitMICEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN PUCHAR pDA,
+ IN PUCHAR pSA,
+ IN PUCHAR pMICKey);
+
+ BOOLEAN RTMPTkipCompareMICValue(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDA,
+ IN PUCHAR pSA,
+@@ -2272,12 +2299,12 @@
+ IN PUCHAR pMICKey,
+ IN UINT Len);
+
+-VOID RTMPTkipAppend(
+- IN PTKIP_KEY_INFO pTkip,
++VOID RTMPTkipAppend(
++ IN PTKIP_KEY_INFO pTkip,
+ IN PUCHAR pSrc,
+ IN UINT nBytes);
+
+-VOID RTMPTkipGetMIC(
++VOID RTMPTkipGetMIC(
+ IN PTKIP_KEY_INFO pTkip);
+
+ NDIS_STATUS RTMPWPAAddKeyProc(
+@@ -2292,7 +2319,7 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID RTMPSetPhyMode(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG phymode);
+
+ VOID RTMPSetDesiredRates(
+@@ -2313,102 +2340,102 @@
+ // Prototypes of function definition for *iwpriv* in rtmp_info.c
+ //
+ INT Set_CountryRegion_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_SSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WirelessMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_AdhocModeRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Channel_Proc(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR
+ arg);
+
+ #ifdef RT2500_DBG
+ INT Set_Debug_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+ #endif
+
+ INT Set_BGProtection_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxPreamble_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_StaWithEtherBridge_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_RTSThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_FragThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxBurst_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TurboRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_NetworkType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+-
++
+ INT Set_AuthMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_EncrypType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_DefaultKeyID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key1_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key2_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key3_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key4_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WPAPSK_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WPANONE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ VOID RTMPIoctlBBP(
+@@ -2425,10 +2452,14 @@
+ IN struct iwreq *wrq);
+ #endif
+
+-int RTMPIoctlRFMONTX(
+- IN OUT PRTMP_ADAPTER pAdapter,
++int RTMPIoctlSetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq);
+
++int RTMPIoctlGetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
++ OUT struct iwreq *wrq);
++
+ //
+ // prototype in wpa.c
+ //
+@@ -2437,31 +2468,31 @@
+ OUT ULONG *MsgType);
+
+ VOID WpaPskStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID WpaEAPOLKeyAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaPairMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaPairMsg3Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem);
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaGroupMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PHEADER_802_11 Hdr,
+- IN UCHAR wep,
+- IN PMACADDR pAddr1);
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PHEADER_802_11 Hdr,
++ IN UCHAR wep,
++ IN PMACADDR pAddr1);
+
+ VOID WpaHardEncrypt(
+ IN PRTMP_ADAPTER pAdapter,
+@@ -2495,15 +2526,15 @@
+ IN UINT len);
+
+ VOID GenRandom(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ OUT UCHAR *random);
+
+-VOID AES_GTK_KEY_UNWRAP(
++VOID AES_GTK_KEY_UNWRAP(
+ IN UCHAR *key,
+ OUT UCHAR *plaintext,
+ IN UCHAR *ciphertext);
+
+-ULONG RTMPTkipGetUInt32(
++ULONG RTMPTkipGetUInt32(
+ IN PUCHAR pMICKey);
+
+ char * rtstrstr(
+@@ -2512,39 +2543,39 @@
+
+ #ifdef RALINK_ATE
+ INT Set_ATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_DA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_SA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_BSSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_CHANNEL_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_POWER_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_LENGTH_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_COUNT_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_RATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ VOID RTMPStationStop(
+@@ -2559,11 +2590,15 @@
+
+ #ifdef BIG_ENDIAN
+ VOID RTMPFrameEndianChange(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR pData,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR pData,
+ IN ULONG Dir,
+ IN BOOLEAN FromRxDoneInt);
+
++VOID WriteBackToDescriptor(IN PUCHAR Dest,
++ IN PUCHAR Src,
++ IN BOOLEAN DoEncrypt, IN ULONG DescriptorType);
++
+ VOID RTMPDescriptorEndianChange(
+ IN PUCHAR pData,
+ IN ULONG DescriptorType);
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_data.c rt2500-cvs-2007061011/Module/rtmp_data.c
+--- rt2500-1.1.0-b4/Module/rtmp_data.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_data.c 2007-06-08 20:09:53.000000000 +0200
+@@ -1,42 +1,42 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_data.c
+- *
++ *
+ * Abstract: Data path subroutines
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
+ * John 25th Feb 03 Modify for rt2560
+- * MarkW 8th Dec 04 Baseline code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * MarkW 19th Feb 05 Fixes to incoming byte count
+ * GregorG 29th Mar 05 Big endian fixes
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -46,12 +46,12 @@
+
+ static UCHAR IPX[] = {0x81, 0x37};
+ static UCHAR APPLE_TALK[] = {0x80, 0xf3};
+-static UCHAR PlcpSignal[12] = {
++static UCHAR PlcpSignal[12] = {
+ 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */ // see BBP spec
+ 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */ // see IEEE802.11a-1999 p.14
+ 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ }; // see IEEE802.11a-1999 p.14
+ static UINT _11G_RATES[12] = { 0, 0, 0, 0, 6, 9, 12, 18, 24, 36, 48, 54 };
+-
++
+ #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _RxAnt, _rssi) \
+ { \
+ USHORT AvgRssi; \
+@@ -84,16 +84,16 @@
+
+ Routine Description:
+ Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound
+-
++
+ Arguments:
+ pRxD Pointer to the Rx descriptor
+-
++
+ Return Value:
+ NDIS_STATUS_SUCCESS No err
+ NDIS_STATUS_FAILURE Error
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ inline NDIS_STATUS RTMPCheckRxDescriptor(
+@@ -102,7 +102,7 @@
+ // Phy errors
+ if (pRxD->PhyErr)
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // CRC errors
+ if (pRxD->Crc)
+ return(NDIS_STATUS_FAILURE);
+@@ -120,15 +120,15 @@
+
+ Routine Description:
+ Endian conversion of Tx/Rx descriptor .
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pData Pointer to Tx/Rx descriptor
+ DescriptorType Direction of the frame
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+ Call this function when read or update descriptor
+ ========================================================================
+@@ -143,12 +143,26 @@
+ *(ULONG *)pData = SWAP32(*(ULONG *)pData); // Byte 0; this must be swapped last
+ }
+
++VOID WriteBackToDescriptor(IN PUCHAR Dest,
++ IN PUCHAR Src,
++ IN BOOLEAN DoEncrypt, IN ULONG DescriptorType)
++{
++ PULONG p1, p2;
++ UCHAR i;
++
++ p1 = ((PULONG) Dest) + 1;
++ p2 = ((PULONG) Src) + 1;
++ for (i = 1; i < RING_DESCRIPTOR_SIZE / 4; i++)
++ *p1++ = *p2++;
++ *(PULONG) Dest = *(PULONG) Src;
++}
++
+ /*
+ ========================================================================
+
+ Routine Description:
+ Endian conversion of all kinds of 802.11 frames .
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pData Pointer to the 802.11 frame structure
+@@ -157,14 +171,14 @@
+
+ Return Value:
+ None
+-
++
+ Note:
+ Call this function when read or update buffer data
+ ========================================================================
+ */
+ VOID RTMPFrameEndianChange(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR pData,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR pData,
+ IN ULONG Dir,
+ IN BOOLEAN FromRxDoneInt)
+ {
+@@ -182,7 +196,7 @@
+
+ // swab 16 bit fields - Duration/ID field
+ *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
+-
++
+ // swab 16 bit fields - Sequence Control field
+ *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
+
+@@ -210,7 +224,7 @@
+ // swab 16 bit fields - Status Code field
+ pMacHdr += 2;
+ *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
+-
++
+ // swab 16 bit fields - AID field
+ pMacHdr += 2;
+ *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
+@@ -271,6 +285,7 @@
+ *(USHORT *)pData = SWAP16(*(USHORT *)pData);
+ }
+ }
++
+ #endif
+
+ /*
+@@ -353,14 +368,14 @@
+ pAdapter->RalinkCounters.RxRingErrCount++;
+ break;
+ }
+-
++
+ #ifdef RALINK_ATE
+ if(pAdapter->ate.Mode == ATE_RXFRAME)
+ {
+ bDropFrame = TRUE;
+ }
+ #endif //#ifdef RALINK_ATE
+-
++
+ // Point to Rx ring buffer where stores the real data frame
+ pData = (PUCHAR) (pAdapter->RxRing[pAdapter->CurRxIndex].va_data_addr);
+ // Cast to 802.11 header for flags checking
+@@ -372,11 +387,11 @@
+
+ // Check for all RxD errors
+ Status = RTMPCheckRxDescriptor(pRxD);
+-
++
+ // Apply packet filtering rule based on microsoft requirements.
+ if (Status == NDIS_STATUS_SUCCESS)
+ Status = RTMPApplyPacketFilter(pAdapter, pRxD, pHeader);
+-
++
+ // Add receive counters
+ if (Status == NDIS_STATUS_SUCCESS)
+ {
+@@ -394,7 +409,7 @@
+ // Increase general counters
+ pAdapter->Counters.RxErrors++;
+ }
+-
++
+ // Check for retry bit, if this bit is on, search the cache with SA & sequence
+ // as index, if matched, discard this frame, otherwise, update cache
+ // This check only apply to unicast data & management frames
+@@ -453,7 +468,7 @@
+ bDropFrame = TRUE;
+ break;
+ }
+-
++
+ // Drop frame from AP while we are in Ad-hoc mode or not associated
+ if (pHeader->Controlhead.Frame.FrDs)
+ {
+@@ -471,11 +486,11 @@
+ bDropFrame = TRUE;
+ break;
+ }
+-
++
+ // Good data frame appears, increase the counters
+ INC_COUNTER(pAdapter->WlanCounters.ReceivedFragmentCount);
+- pAdapter->RalinkCounters.ReceivedByteCount += pRxD->DataByteCnt;
+-
++ pAdapter->RalinkCounters.ReceivedByteCount += pRxD->DataByteCnt;
++
+ // Process Multicast data frame
+ if (pRxD->Mcast)
+ {
+@@ -486,18 +501,18 @@
+
+ // Init WPA Key to NULL
+ pWpaKey = (PWPA_KEY) NULL;
+-
++
+ // Find the WPA key, either Group or Pairwise Key
+ if ((pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pHeader->Controlhead.Frame.Wep))
+ {
+ INT idx;
+-
++
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (pRxD->Bcast || pRxD->Mcast)
+ {
+-
++
+ idx = (*(pData + 3) & 0xc0) >> 6;
+- if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
++ if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
+ ((INFRA_ON(pAdapter) && (NdisEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))) ||
+ (ADHOC_ON(pAdapter) && (NdisEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6)))))
+ {
+@@ -520,15 +535,15 @@
+ break;
+ }
+ }
+-#if 1
++#if 1
+ // Use default Group Key if there is no Pairwise key present
+ if ((pWpaKey == NULL) && (pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
+ pWpaKey->Type = GROUP_KEY;
+ DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key\n");
+ }
+-#endif
++#endif
+ }
+ }
+
+@@ -542,16 +557,16 @@
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
+-
++ }
++
+ // Filter out Bcast frame which AP relayed for us
+ if (pHeader->Controlhead.Frame.FrDs && RTMPEqualMemory(&pHeader->Addr3, pAdapter->CurrentAddress, 6))
+ {
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
+-
++ }
++
+ // WEP encrypted frame
+ if (pHeader->Controlhead.Frame.Wep)
+ {
+@@ -560,27 +575,27 @@
+ {
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+- memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++ memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 5)
+ pRxD->CipherAlg = CIPHER_WEP64;
+ else
+- pRxD->CipherAlg = CIPHER_WEP128;
++ pRxD->CipherAlg = CIPHER_WEP128;
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL)) // TKIP
+ {
+ UCHAR Eiv_Tmp[4];
+-
++
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ // Swap EIV byte order, due to ASIC's bug.
+ Eiv_Tmp[0] = *(pData + 7);
+ Eiv_Tmp[1] = *(pData + 6);
+ Eiv_Tmp[2] = *(pData + 5);
+- Eiv_Tmp[3] = *(pData + 4);
++ Eiv_Tmp[3] = *(pData + 4);
+ memcpy((PUCHAR) &pRxD->Eiv, Eiv_Tmp, 4); //Get WEP EIV
+ // Copy TA into RxD
+ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_TKIP;
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL)) // AES
+@@ -588,9 +603,9 @@
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ memcpy((PUCHAR) &pRxD->Eiv, (pData + 4), 4); //Get WEP EIV
+ // Copy TA into RxD
+- memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
++ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_AES;
+ }
+ else
+@@ -606,17 +621,17 @@
+ pRxD->CipherAlg = CIPHER_NONE;
+ }
+ }
+-
++
+ // Begin process unicast to me frame
+ else if (pRxD->U2M || pAdapter->bAcceptPromiscuous == TRUE)
+ {
+- // Send PS-Poll for AP to send next data frame
++ // Send PS-Poll for AP to send next data frame
+ if ((pHeader->Controlhead.Frame.MoreData) && INFRA_ON(pAdapter) && (pAdapter->PortCfg.Psm == PWR_SAVE))
+ {
+ EnqueuePsPoll(pAdapter);
+ DBGPRINT(RT_DEBUG_TRACE, "Sending PS-POLL\n");
+ }
+-
++
+ //
+ // Begin frame processing
+ //
+@@ -634,11 +649,11 @@
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+- memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++ memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 5)
+ pRxD->CipherAlg = CIPHER_WEP64;
+ else
+- pRxD->CipherAlg = CIPHER_WEP128;
++ pRxD->CipherAlg = CIPHER_WEP128;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+ (pHeader->Frag == 0))
+@@ -659,18 +674,18 @@
+ if (pHeader->Controlhead.Frame.Wep)
+ {
+ UCHAR Eiv_Tmp[4];
+-
++
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ // Swap EIV byte order, due to ASIC's bug.
+ Eiv_Tmp[0] = *(pData + 7);
+ Eiv_Tmp[1] = *(pData + 6);
+ Eiv_Tmp[2] = *(pData + 5);
+- Eiv_Tmp[3] = *(pData + 4);
++ Eiv_Tmp[3] = *(pData + 4);
+ memcpy((PUCHAR) &pRxD->Eiv, Eiv_Tmp, 4); //Get WEP EIV
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+ // Copy TA into RxD
+ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_TKIP;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+@@ -694,9 +709,9 @@
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ memcpy((PUCHAR) &pRxD->Eiv, (pData + 4), 4); //Get WEP EIV
+ // Copy TA into RxD
+- memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
++ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_AES;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+@@ -719,7 +734,7 @@
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
++ }
+ else // Not encryptrd frames
+ {
+ pRxD->CipherAlg = CIPHER_NONE;
+@@ -756,13 +771,14 @@
+ pRxD->Drop = 0;
+ pRxD->IvOffset = LENGTH_802_11;
+ }
+-
++
+ pRxD->CipherOwner = DESC_OWN_NIC;
+
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pHeader, DIR_WRITE, TRUE);
+ RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
+- *pDestRxD = RxD;
++ //*pDestRxD = RxD;
++ WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, TRUE, TYPE_RXD);
+ #endif
+
+ pAdapter->CurRxIndex++;
+@@ -771,9 +787,9 @@
+ pAdapter->CurRxIndex = 0;
+ }
+ Count++;
+-
++
+ pAdapter->RalinkCounters.RxCount ++;
+-
++
+ } while (Count < MAX_RX_PROCESS);
+
+ // Kick Decrypt Control Register, based on ASIC's implementation
+@@ -810,10 +826,10 @@
+ #endif
+ UCHAR Count;
+ unsigned long irqflag;
+-
++
+ // Make sure Tx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++
+ Count = 0;
+ do
+ {
+@@ -832,22 +848,22 @@
+ }
+
+ RTMPHardTransmitDone(
+- pAdapter,
+- pTxD,
++ pAdapter,
++ pTxD,
+ pAdapter->TxRing[pAdapter->NextTxDoneIndex].FrameType);
+-
++
+ // It might happend with no Ndis packet to indicate back to upper layer
+ // Clear for NdisSendComplete request
+ pTxD->Valid = FALSE;
+-
++
+ // Increase Total transmit byte counter after real data sent out
+ pAdapter->RalinkCounters.TransmittedByteCount += pTxD->DataByteCnt;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+-
++
+ pAdapter->NextTxDoneIndex++;
+ if (pAdapter->NextTxDoneIndex >= TX_RING_SIZE)
+ {
+@@ -885,16 +901,16 @@
+
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+-
++
+ if(pAdapter->bNetDeviceStopQueue)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "NetDevice start queue!!!\n\n");
+ pAdapter->bNetDeviceStopQueue = FALSE;
+ netif_start_queue(pAdapter->net_dev);
+ }
+-
++
+ // Some Tx ring resource freed, check for pending send frame for hard transmit
+- if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
++ if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS)))
+ {
+@@ -932,10 +948,10 @@
+ UCHAR Count;
+ PMGMT_STRUC pMgmt;
+ unsigned long irqflag;
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+-
++ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
++
+ Count = 0;
+ do
+ {
+@@ -957,16 +973,16 @@
+ #endif
+ break;
+ }
+-
++
+ // No need to put in reply for MLME
+ RTMPHardTransmitDone(
+- pAdapter,
+- pTxD,
++ pAdapter,
++ pTxD,
+ pAdapter->PrioRing[pAdapter->NextPrioDoneIndex].FrameType);
+-
++
+ // It might happend with no Ndis packet to indicate back to upper layer
+- pTxD->Valid = FALSE;
+-
++ pTxD->Valid = FALSE;
++
+ // Increase Total transmit byte counter after real data sent out
+ pAdapter->RalinkCounters.TransmittedByteCount += pTxD->DataByteCnt;
+
+@@ -983,11 +999,11 @@
+ } while (++Count < MAX_TX_PROCESS);
+
+ // Make sure to release Prio ring resource
+- spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
+-
++ spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))
+ return;
+-
++
+
+ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+ if (pAdapter->PushMgmtIndex != pAdapter->PopMgmtIndex)
+@@ -1008,7 +1024,7 @@
+ }
+ }
+ }
+- }
++ }
+ spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
+ }
+
+@@ -1033,12 +1049,12 @@
+ {
+ // PTXD_STRUC pTxD;
+ // UCHAR Count;
+-
++
+ // Make sure Atim ring resource won't be used by other threads
+ //spin_lock_irqsave(&pAdapter->AtimRingLock);
+-
++
+ // Did not support ATIM, remove everything.
+-
++
+ // Make sure to release Atim ring resource
+ //spin_unlock_irqrestore(&pAdapter->AtimRingLock);
+ }
+@@ -1083,10 +1099,10 @@
+ ULONG i;
+ struct sk_buff *skb;
+ unsigned long irqflag;
+-
++
+ // Make sure Rx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->RxRingLock, irqflag);
+-
++
+ RTMP_IO_READ32(pAdapter, SECCSR0, &RegValue);
+ HwDecryptIndex = RegValue - pAdapter->RxRing[0].pa_addr;
+ do_div(HwDecryptIndex, RING_DESCRIPTOR_SIZE);
+@@ -1104,11 +1120,11 @@
+ pRxD = &RxD;
+ RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
+ #endif
+-
++
+ // In case of false alarm or processed at last instance
+ if ((pRxD->Owner != DESC_OWN_HOST) || (pRxD->CipherOwner != DESC_OWN_HOST))
+ break;
+-
++
+ // Point to Rx ring buffer where stores the real data frame
+ pData = (PUCHAR) (pAdapter->RxRing[pAdapter->CurDecryptIndex].va_data_addr);
+ // Cast to 802.11 header for flags checking
+@@ -1117,15 +1133,18 @@
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pHeader, DIR_READ, FALSE);
+ #endif
+- // Driver will check the decrypt algorithm and decide whether this ICV is true or not
++ // Driver will check the decrypt algorithm and decide whether this ICV is true or not
+ if ((pRxD->IcvError == 1) && (pRxD->CipherAlg == CIPHER_NONE))
+ pRxD->IcvError = 0;
+-
++
+ // Since we already process header at RxDone interrupt, there is no need to proces
+ // header sanity again, the only thing we have to check is icv_err bit
+- if (pRxD->IcvError == 1)
++ //if (pRxD->IcvError == 1)
++ if ((pRxD->IcvError == 1) && (pRxD->CipherAlg != CIPHER_NONE))
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Rx DecryptDone - ICV error (len %d)\n", pRxD->DataByteCnt);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "Rx DecryptDone - ICV error (CipherAlg=%d) (len %d)\n",
++ pRxD->CipherAlg, pRxD->DataByteCnt);
+ pRxD->Drop =1; // Drop frame with icv error
+ }
+ // Saved data pointer for management frame which will pass to MLME block
+@@ -1135,7 +1154,7 @@
+ {
+ struct sk_buff *skb;
+ wlan_ng_prism2_header *ph;
+-
++
+ if ((skb = __dev_alloc_skb(2048, GFP_DMA|GFP_ATOMIC)) != NULL)
+ {
+ if (pAdapter->PortCfg.MallowRFMONTx == TRUE)
+@@ -1196,12 +1215,12 @@
+
+ skb->dev = pAdapter->net_dev;
+ memcpy(skb_put(skb, pRxD->DataByteCnt), pData, pRxD->DataByteCnt);
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+ skb->pkt_type = PACKET_OTHERHOST;
+ skb->protocol = htons(ETH_P_802_2);
+ skb->ip_summed = CHECKSUM_NONE;
+ netif_rx(skb);
+- }
++ }
+ pRxD->Drop = 1;
+ }
+
+@@ -1211,7 +1230,7 @@
+ // The total available payload should exclude 24-byte 802.11 Header
+ // If Security is enabled, IV, EIV, ICV size is excluded by ASIC
+ PacketSize = (USHORT) pRxD->DataByteCnt - LENGTH_802_11;
+-
++
+ // Find the WPA key, either Group or Pairwise Key
+ // Although the data has been decrypted by ASIC,
+ // driver has to calculate the RxMIC which required the key.
+@@ -1221,7 +1240,7 @@
+ if ((pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pHeader->Controlhead.Frame.Wep))
+ {
+ INT idx;
+-
++
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (pRxD->Bcast || pRxD->Mcast)
+ {
+@@ -1231,7 +1250,7 @@
+ #else
+ idx = (pRxD->Iv & 0xc0000000) >> 30;
+ #endif
+- if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
++ if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
+ ((INFRA_ON(pAdapter) && (NdisEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))) ||
+ (ADHOC_ON(pAdapter) && (NdisEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6)))))
+ {
+@@ -1254,22 +1273,22 @@
+ break;
+ }
+ }
+-#if 1
++#if 1
+ // Use default Group Key if there is no Pairwise key present
+ if ((pWpaKey == NULL) && (pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
+ pWpaKey->Type = GROUP_KEY;
+ DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key\n");
+ }
+-#endif
++#endif
+ }
+
+ // If there is no WPA key matched, this frame should be dropped
+ if (pWpaKey == NULL)
+ pRxD->Drop = 1;
+ }
+-
++
+ //
+ // Start of main loop to parse receiving frames.
+ // The sequence will be Type first, then subtype...
+@@ -1287,10 +1306,10 @@
+ pSrcMac = (PUCHAR) &(pHeader->Addr3);
+ else
+ pSrcMac = (PUCHAR) &(pHeader->Controlhead.Addr2);
+-
++
+ // Process Broadcast & Multicast data frame
+ if (pRxD->Bcast || pRxD->Mcast)
+- {
++ {
+ // For TKIP frame, calculate the MIC value
+ if (pRxD->CipherAlg == CIPHER_TKIP)
+ {
+@@ -1302,7 +1321,7 @@
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // Minus MIC length
+ PacketSize -= 8;
+ if (RTMPTkipCompareMICValue(
+@@ -1313,7 +1332,7 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+@@ -1329,21 +1348,17 @@
+ // Rx TSC has done one full cycle, since re-key is done by transmitter
+ // We did not do anything for Rx path
+ }
+-
++
+ // build 802.3 header and decide if remove the 8-byte LLC/SNAP encapsulation
+ CONVERT_TO_802_3(Header802_3, pDestMac, pSrcMac, pData, PacketSize);
+-
++
+ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE; // for RX ACTIVITY LED
+
+ // For miniportTransferData
+ pAdapter->pRxData = pData;
+-
++
+ // Acknolwdge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(PacketSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(PacketSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); // 16 byte align the IP header
+@@ -1354,10 +1369,10 @@
+ pAdapter->net_dev->last_rx = jiffies;
+ pAdapter->stats.rx_packets++;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "!!! Broadcast Ethenet rx Indicated !!!\n");
+ }
+-
++
+ // Begin process unicast to me frame
+ else if (pRxD->U2M || pAdapter->bAcceptPromiscuous == TRUE)
+ {
+@@ -1383,12 +1398,12 @@
+ else if (pRxD->BBR0 == 110)
+ pAdapter->LastRxRate = 3;
+ }
+-
++
+ if (pHeader->Frag == 0) // First or Only fragment
+ {
+ // For TKIP frame, calculate the MIC value
+ if ((pHeader->Controlhead.Frame.MoreFrag == FALSE) &&
+- (pRxD->CipherAlg == CIPHER_TKIP) &&
++ (pRxD->CipherAlg == CIPHER_TKIP) &&
+ (pHeader->Controlhead.Frame.Wep))
+ {
+ if (pWpaKey == NULL)
+@@ -1407,17 +1422,17 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+ }
+-
++
+ pAdapter->FragFrame.Flags &= 0xFFFFFFFE;
+-
++
+ // Check for encapsulation other than RFC1042 & Bridge tunnel
+- if ((!RTMPEqualMemory(SNAP_802_1H, pData, 6)) &&
++ if ((!RTMPEqualMemory(SNAP_802_1H, pData, 6)) &&
+ (!RTMPEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)))
+ {
+ LLC_Len[0] = PacketSize / 256;
+@@ -1427,13 +1442,13 @@
+ else
+ {
+ char *pProto = pData + 6;
+-
++
+ // Remove 802.11 H header & reconstruct 802.3 header
+ // pData += (LENGTH_802_1_H - LENGTH_802_3_TYPE);
+ // Check for EAPOL frame when driver supplicant enabled
+ // TODO: It is not strickly correct. There is no fragment handling. It might damage driver
+ // TODO: But for WPAPSK, it's not likely fragment on EAPOL frame will happen
+- if (RTMPEqualMemory(EAPOL, pProto, 2) && ((pAdapter->PortCfg.WpaState != SS_NOTUSE)))
++ if (RTMPEqualMemory(EAPOL, pProto, 2) && ((pAdapter->PortCfg.WpaState != SS_NOTUSE)))
+ {
+ RTMP_IO_READ32(pAdapter, CSR17, &High32TSF); // TSF value
+ RTMP_IO_READ32(pAdapter, CSR16, &Low32TSF); // TSF vlaue
+@@ -1441,16 +1456,16 @@
+ // Enqueue this frame to MLME engine
+ MlmeEnqueueForRecv(
+ pAdapter,
+- &pAdapter->Mlme.Queue,
+- High32TSF,
++ &pAdapter->Mlme.Queue,
++ High32TSF,
+ Low32TSF,
+- (UCHAR)pRxD->BBR1, (UCHAR)pAdapter->PortCfg.LastR17Value,
+- PacketSize,
+- pManage);
++ (UCHAR)pRxD->BBR1, (UCHAR)pAdapter->PortCfg.LastR17Value,
++ PacketSize,
++ pManage);
+ break;
+ }
+
+- if ((RTMPEqualMemory(IPX, pProto, 2) || RTMPEqualMemory(APPLE_TALK, pProto, 2)) &&
++ if ((RTMPEqualMemory(IPX, pProto, 2) || RTMPEqualMemory(APPLE_TALK, pProto, 2)) &&
+ RTMPEqualMemory(SNAP_802_1H, pData, 6))
+ {
+ // preserved the LLC/SNAP filed
+@@ -1468,21 +1483,17 @@
+ pAdapter->FragFrame.Flags |= 0x01;
+ }
+ }
+-
++
+ // One & The only fragment
+ if (pHeader->Controlhead.Frame.MoreFrag == FALSE)
+ {
+ // For miniportTransferData
+ pAdapter->pRxData = pData;
+-
++
+ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE; // for RX ACTIVITY LED
+
+ // Acknowledge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(PacketSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(PacketSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); // 16 byte align the IP header
+@@ -1499,7 +1510,7 @@
+
+ // Increase general counters
+ pAdapter->Counters.GoodReceives++;
+-
++
+ }
+ // First fragment of fragmented frames
+ else
+@@ -1516,7 +1527,7 @@
+ else
+ {
+ // No LLC-SNAP header in except the first fragment frame
+-
++
+ if ((pHeader->Sequence != pAdapter->FragFrame.Sequence) ||
+ (pHeader->Frag != (pAdapter->FragFrame.LastFrag + 1)))
+ {
+@@ -1525,7 +1536,7 @@
+ memset(&pAdapter->FragFrame, 0, sizeof(FRAGMENT_FRAME));
+ Status = NDIS_STATUS_FAILURE;
+ break;
+- }
++ }
+ else if ((pAdapter->FragFrame.RxSize + PacketSize) > MAX_FRAME_SIZE)
+ {
+ // Fragment frame is too large, it exeeds the maximum frame size.
+@@ -1535,12 +1546,12 @@
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // concatenate this fragment into the re-assembly buffer
+ memcpy(&pAdapter->FragFrame.Buffer[LENGTH_802_3 + pAdapter->FragFrame.RxSize], pData, PacketSize);
+ pAdapter->FragFrame.RxSize += PacketSize;
+ pAdapter->FragFrame.LastFrag = pHeader->Frag; // Update fragment number
+-
++
+ // Last fragment
+ if (pHeader->Controlhead.Frame.MoreFrag == FALSE)
+ {
+@@ -1555,7 +1566,7 @@
+ }
+ // Minus MIC length
+ pAdapter->FragFrame.RxSize -= 8;
+-
++
+ if (pAdapter->FragFrame.Flags & 0x00000001)
+ {
+ // originally there's an LLC/SNAP field in the first fragment
+@@ -1563,9 +1574,9 @@
+ // this LLC/SNAP field upon calculating TKIP MIC
+ // Copy LLC data to the position in front of real data for MIC calculation
+ memcpy(&pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H],
+- pAdapter->FragFrame.Header_LLC,
++ pAdapter->FragFrame.Header_LLC,
+ LENGTH_802_1_H);
+- pData = (PUCHAR) &pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H];
++ pData = (PUCHAR) &pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H];
+ PacketSize = (USHORT)pAdapter->FragFrame.RxSize + LENGTH_802_1_H;
+ //cketSize = (USHORT)pAdapter->FragFrame.RxSize + 8;
+ }
+@@ -1583,29 +1594,25 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error 2\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error 2\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // TODO:
+ // Getting RxTSC from Rx descriptor
+- }
++ }
+
+ // for RX ACTIVITY LED
+- pAdapter->PortCfg.LedCntl.fRxActivity = TRUE;
++ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE;
+
+ // For miniportTransferData
+ pAdapter->pRxData = &pAdapter->FragFrame.Buffer[LENGTH_802_3];
+
+ memcpy(pAdapter->FragFrame.Buffer, pAdapter->FragFrame.Header802_3, LENGTH_802_3);
+ // Acknowledge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(pAdapter->FragFrame.RxSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(pAdapter->FragFrame.RxSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); /* 16 byte align the IP header */
+@@ -1619,7 +1626,7 @@
+
+ // Increase general counters
+ pAdapter->Counters.GoodReceives++;
+-
++
+ // Clear Fragment frame contents
+ memset(&pAdapter->FragFrame, 0, sizeof(FRAGMENT_FRAME));
+ DBGPRINT(RT_DEBUG_INFO, "!!! Frame with Fragment Indicated !!!\n");
+@@ -1627,42 +1634,42 @@
+ }
+ }
+ break;
+-
++
+ case BTYPE_MGMT:
+ // Read required regsiter for MLME engine
+ RTMP_IO_READ32(pAdapter, CSR17, &High32TSF); // TSF value
+ RTMP_IO_READ32(pAdapter, CSR16, &Low32TSF); // TSF vlaue
+-
++
+ // Enqueue this frame to MLME engine
+ MlmeEnqueueForRecv(
+ pAdapter,
+- &pAdapter->Mlme.Queue,
+- High32TSF,
++ &pAdapter->Mlme.Queue,
++ High32TSF,
+ Low32TSF,
+ (UCHAR)pRxD->BBR1,
+- (UCHAR)pAdapter->PortCfg.LastR17Value,
+- pRxD->DataByteCnt,
+- pManage);
++ (UCHAR)pAdapter->PortCfg.LastR17Value,
++ pRxD->DataByteCnt,
++ pManage);
+ break;
+-
++
+ case BTYPE_CNTL:
+ // Ignore ???
+ break;
+-
++
+ default :
+ break;
+ }
+ }
+-
++
+ pAdapter->CurDecryptIndex++;
+ if (pAdapter->CurDecryptIndex >= RX_RING_SIZE)
+ {
+ pAdapter->CurDecryptIndex = 0;
+ }
+ Count++;
+-
++
+ pAdapter->RalinkCounters.DecryptCount ++;
+-
++
+ // Clear Cipherowner bit & Rx Owner bit for all drop & non-drop frames
+ pRxD->CipherOwner = DESC_OWN_HOST;
+ pRxD->Owner = DESC_OWN_NIC;
+@@ -1673,7 +1680,7 @@
+ }
+ //} while (Count < RX_RING_SIZE);
+ //} while (pAdapter->CurDecryptIndex != HwDecryptIndex);
+-
++
+ // Make sure to release Rx ring resource
+ spin_unlock_irqrestore(&pAdapter->RxRingLock, irqflag);
+ }
+@@ -1706,10 +1713,10 @@
+ ULONG RegValue;
+ ULONGLONG HwEncryptIndex;
+ unsigned long irqflag;
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
++
+ RTMP_IO_READ32(pAdapter, SECCSR1, &RegValue);
+ HwEncryptIndex = RegValue - pAdapter->TxRing[0].pa_addr;
+ do_div(HwEncryptIndex, RING_DESCRIPTOR_SIZE);
+@@ -1749,17 +1756,18 @@
+ *pTmp = Eiv_Tmp[3];
+ *(pTmp + 1) = Eiv_Tmp[2];
+ *(pTmp + 2) = Eiv_Tmp[1];
+- *(pTmp + 3) = Eiv_Tmp[0];
++ *(pTmp + 3) = Eiv_Tmp[0];
+ }
+ // Sanity Check, CurTxIndex should equal to NextEncryptDoneIndex
+ // ASSERT(pAdapter->CurTxIndex == pAdapter->NextEncryptDoneIndex);
+-
++
+ pTxD->Valid = TRUE;
+ pTxD->Owner = DESC_OWN_NIC;
+
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
++ //*pDestTxD = TxD;
++ WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
+ #endif
+
+ pAdapter->NextEncryptDoneIndex++;
+@@ -1778,9 +1786,9 @@
+
+ // Kick Tx Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, TXCSR0, 0x1);
+-
++
+ // Make sure to release Tx ring resource
+- spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ }
+
+ /*
+@@ -1854,7 +1862,7 @@
+ INC_COUNTER(pAdapter->WlanCounters.RTSSuccessCount);
+ pTxD->RTS = 0;
+ }
+-
++
+ // Increase general counters
+ pAdapter->Counters.GoodTransmits++;
+ INC_COUNTER(pAdapter->WlanCounters.TransmittedFragmentCount);
+@@ -1865,22 +1873,22 @@
+ pAdapter->DrsCounters.OneSecTxOkCount ++;
+ }
+ break;
+-
++
+ case SUCCESS_WITH_RETRY: // Success with some retry
+ // DBGPRINT(RT_DEBUG_INFO, "TX Success with retry(=%d)<<<\n",pTxD->RetryCount);
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.RetryCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+ INC_COUNTER(pAdapter->WlanCounters.TransmittedFragmentCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.GoodTransmits++;
+-
++
+ if (pTxD->RetryCount > 1)
+ {
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.MultipleRetryCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.MoreCollisions++;
+ }
+@@ -1889,7 +1897,7 @@
+ // Increase general counters
+ pAdapter->Counters.OneCollision++;
+ }
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSSuccessCount);
+@@ -1901,7 +1909,7 @@
+ {
+ if (pTxD->TxRate > pAdapter->PortCfg.TxRate)
+ {
+- // DRS - must be NULL frame retried @ UpRate; downgrade
++ // DRS - must be NULL frame retried @ UpRate; downgrade
+ // TxQuality[UpRate] so that not upgrade TX rate
+ pAdapter->DrsCounters.TxQuality[pTxD->TxRate] += 2;
+ if (pAdapter->DrsCounters.TxQuality[pTxD->TxRate] > DRS_TX_QUALITY_WORST_BOUND)
+@@ -1917,10 +1925,10 @@
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.FailedCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+@@ -1932,7 +1940,7 @@
+ {
+ if (pTxD->TxRate > pAdapter->PortCfg.TxRate)
+ {
+- // DRS - must be NULL frame failed @ UpRate; downgrade
++ // DRS - must be NULL frame failed @ UpRate; downgrade
+ // TxQuality[UpRate] so that not upgrade TX rate
+ pAdapter->DrsCounters.TxQuality[pTxD->TxRate] = DRS_TX_QUALITY_WORST_BOUND;
+ }
+@@ -1942,35 +1950,35 @@
+ }
+ }
+ break;
+-
++
+ case FAIL_INVALID:
+ // DBGPRINT(RT_DEBUG_WARN, ("TX Failed (INVALID)<<<\n"));
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+ pTxD->RTS = 0;
+ }
+- break;
+-
++ break;
++
+ case FAIL_OTHER:
+ default:
+ // DBGPRINT(RT_DEBUG_ERROR, ("TX Failed (other=%d)<<<\n",pTxD->TxResult));
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.FailedCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+ pTxD->RTS = 0;
+ }
+- break;
++ break;
+ }
+ }
+
+@@ -1980,19 +1988,19 @@
+ Routine Description:
+ API for MLME to transmit management frame to AP (BSS Mode)
+ or station (IBSS Mode)
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ Buffer Pointer to memory of outgoing frame
+ Length Size of outgoing management frame
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_PENDING
+ NDIS_STATUS_SUCCESS
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS MiniportMMRequest(
+@@ -2001,28 +2009,28 @@
+ IN ULONG Length)
+ {
+ PMGMT_STRUC pMgmt;
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+ unsigned long irqflag;
+
+ DBGPRINT(RT_DEBUG_INFO, "---> MiniportMMRequest\n");
+ // Check management ring free avaliability
+ pMgmt = (PMGMT_STRUC) &pAdapter->MgmtRing[pAdapter->PushMgmtIndex];
+-
++
+ // This management cell has been occupied
+- if (pMgmt->Valid == TRUE)
++ if (pMgmt->Valid == TRUE)
+ {
+ // No Management ring buffer avaliable
+ MlmeFreeMemory(pAdapter, pBuffer);
+- Status = NDIS_STATUS_FAILURE;
++ Status = NDIS_STATUS_FAILURE;
+ DBGPRINT(RT_DEBUG_WARN, "<--- MiniportMMRequest (error:: MgmtRing full)\n");
+ pAdapter->RalinkCounters.MgmtRingFullCount++;
+ return (Status);
+ }
+-
++
+ // Insert this request into software managemnet ring
+ if (pBuffer)
+ {
+- pMgmt->pBuffer = pBuffer;
++ pMgmt->pBuffer = pBuffer;
+ pMgmt->Length = Length;
+ pMgmt->Valid = TRUE;
+ pAdapter->PushMgmtIndex++;
+@@ -2031,19 +2039,19 @@
+ {
+ pAdapter->PushMgmtIndex = 0;
+ }
+- }
++ }
+ else
+ {
+ // Null pBuffer, no need to free memory buffer.
+ // This should not happen
+ DBGPRINT(RT_DEBUG_WARN, "<--- MiniportMMRequest (error:: NULL msg)\n");
+- Status = NDIS_STATUS_FAILURE;
++ Status = NDIS_STATUS_FAILURE;
+ return (Status);
+ }
+-
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))
+ return (Status);
+-
++
+ // Check Free priority queue
+ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+ if (RTMPFreeDescriptorRequest(pAdapter, PRIO_RING, 1) == NDIS_STATUS_SUCCESS)
+@@ -2076,21 +2084,21 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware transmit function
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pBuffer Pointer to memory of outgoing frame
+ Length Size of outgoing management frame
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_PENDING
+ NDIS_STATUS_SUCCESS
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID MlmeHardTransmit(
+@@ -2103,15 +2111,15 @@
+ PTXD_STRUC pDestTxD;
+ TXD_STRUC TxD;
+ #endif
+- PUCHAR pDest;
++ PUCHAR pDest;
+ PHEADER_802_11 pHeader_802_11;
+ BOOLEAN AckRequired, InsertTimestamp;
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "MlmeHardTransmit\n");
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+-
+- pDest = (PUCHAR) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_data_addr;
++
++ pDest = (PUCHAR) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_addr;
+ #else
+@@ -2120,7 +2128,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if (pTxD->Owner == DESC_OWN_NIC)
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -2138,10 +2146,10 @@
+ // The buffer shouldn't be NULL
+ return;
+ }
+-
+- // outgoing frame always wakeup PHY to prevent frame lost
++
++ // outgoing frame always wakeup PHY to prevent frame lost
+ AsicForceWakeup(pAdapter);
+-
++
+ pHeader_802_11 = (PHEADER_802_11) pBuffer;
+ pHeader_802_11->Controlhead.Frame.PwrMgt = 0; // (pAdapter->PortCfg.Psm == PWR_SAVE);
+ InsertTimestamp = FALSE;
+@@ -2175,7 +2183,7 @@
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pBuffer, DIR_WRITE, FALSE);
+ #endif
+ memcpy(pDest, pBuffer, Length);
+-
++
+ // Initialize Priority Descriptor
+ // For inter-frame gap, the number is for this frame and next frame
+ // For MLME rate, we will fix as 2Mb to match other vendor's implement
+@@ -2193,28 +2201,28 @@
+ {
+ pAdapter->CurPrioIndex = 0;
+ }
+-
++
+ // Kick priority ring transmit
+ RTMP_IO_WRITE32(pAdapter,TXCSR0,0x4);
+-
++
+ // Make sure to release Prio ring resource
+-}
++}
+ /*
+ ========================================================================
+
+ Routine Description:
+ This routine is used to en-queue outgoing packets when
+ there is no enough shread memory
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pPacket Pointer to send packet
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPSendPacket(
+@@ -2225,51 +2233,42 @@
+ UINT AllowFragSize;
+ UCHAR NumberOfFrag;
+ UCHAR RTSRequired;
+- NDIS_STATUS Status = NDIS_STATUS_FAILURE;
+- UCHAR PsMode;
+-
++
+ struct sk_buff_head *pTxQueue = NULL;
+ ULONG Priority;
+ UCHAR AccessCategory;
+ unsigned long irqflag;
+-
+- DBGPRINT(RT_DEBUG_INFO, "<==== RTMPSendPacket\n");
+
+- // Init priority value
+- Priority = 0;
+- AccessCategory = 0;
+-
+- if (skb)
+- {
+- Priority = skb->priority;
+- // 802.11e/d4.4 June, 2003
+- if (Priority <=2)
+- AccessCategory = 0;
+- else if (Priority == 3)
+- AccessCategory = 1;
+- else if (Priority <= 5)
+- AccessCategory = 2;
+- else
+- AccessCategory = 3;
+- DBGPRINT(RT_DEBUG_INFO, "Priority = %d, AC = %d\n", Priority, AccessCategory);
+- }
++ DBGPRINT(RT_DEBUG_INFO, "====> RTMPSendPacket\n");
++
++ if (skb == NULL)
++ return NDIS_STATUS_SUCCESS;
++
++ Priority = skb->priority;
++ // 802.11e/d4.4 June, 2003
++ if (Priority <=2)
++ AccessCategory = 0;
++ else if (Priority == 3)
++ AccessCategory = 1;
++ else if (Priority <= 5)
++ AccessCategory = 2;
++ else
++ AccessCategory = 3;
++ DBGPRINT(RT_DEBUG_INFO, "Priority = %d, AC = %d\n", Priority,
++ AccessCategory);
+
+ // For TKIP, MIC value is treated as payload, it might be fragmented through
+ // different MPDUs.
+ if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
+- {
+ skb->data_len += 8;
+- }
+
+ pVirtualAddress = (PVOID)skb->data;
+
+ // Check for virtual address allocation, it might fail !!!
+ if (pVirtualAddress == NULL)
+- {
+- // Resourece is low, system did not allocation virtual address
++ // Resource is low, system did not allocate virtual address
+ // return NDIS_STATUS_FAILURE directly to upper layer
+- return (Status);
+- }
++ return NDIS_STATUS_FAILURE;
+
+ // Store Ethernet MAC address when APClinet mode on
+ if ((pAdapter->PortCfg.StaWithEtherBridge.Enable)
+@@ -2296,7 +2295,7 @@
+ pAdapter->CurrentAddress[3] = StaMacReg0.field.Byte3;
+ pAdapter->CurrentAddress[4] = StaMacReg1.field.Byte4;
+ pAdapter->CurrentAddress[5] = StaMacReg1.field.Byte5;
+-
++
+ RTMP_IO_WRITE32(pAdapter, CSR3, StaMacReg0.word);
+ RTMP_IO_WRITE32(pAdapter, CSR4, StaMacReg1.word);
+
+@@ -2304,7 +2303,7 @@
+ pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[0],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[1],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[2],
+ pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[3],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[4],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[5]);
+ }
+-
++
+ //
+ // Check for multicast or broadcast (First byte of DA)
+ //
+@@ -2322,37 +2321,30 @@
+ NumberOfFrag = ((skb->data_len - LENGTH_802_3 + LENGTH_802_1_H) / AllowFragSize) + 1;
+ // Minus 1 if the size just match to allowable fragment size
+ if (((skb->data_len - LENGTH_802_3 + LENGTH_802_1_H) % AllowFragSize) == 0)
+- {
+ NumberOfFrag--;
+- }
+ }
+
+- // Check for requirement of RTS
++ // Check for requirement of RTS
+ if (NumberOfFrag > 1)
+- {
+ // If multiple fragment required, RTS is required only for the first fragment
+ // if the fragment size large than RTS threshold
+ RTSRequired = (pAdapter->PortCfg.FragmentThreshold > pAdapter->PortCfg.RtsThreshold) ? 1 : 0;
+- }
+ else
+- {
+ RTSRequired = (skb->data_len > pAdapter->PortCfg.RtsThreshold) ? 1 : 0;
+- }
+- DBGPRINT(RT_DEBUG_INFO, "Number of fragments include RTS :%d\n", NumberOfFrag + RTSRequired);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Number of fragments include RTS :%d\n",
++ NumberOfFrag + RTSRequired);
++
++ // RTS/CTS may also be required in order to protect OFDM frame
++ if ((pAdapter->PortCfg.TxRate >= RATE_FIRST_OFDM_RATE) && pAdapter->PortCfg.BGProtectionInUsed)
++ RTSRequired = 1;
+
+- // RTS/CTS may also be required in order to protect OFDM frame
+- if ((pAdapter->PortCfg.TxRate >= RATE_FIRST_OFDM_RATE) && pAdapter->PortCfg.BGProtectionInUsed)
+- RTSRequired = 1;
+-
+ // Save framnet number to Ndis packet reserved field
+ RTMP_SET_PACKET_FRAGMENTS(skb, NumberOfFrag);
+
+ // Save RTS requirement to Ndis packet reserved field
+ RTMP_SET_PACKET_RTS(skb, RTSRequired);
+
+- // Make sure SendTxWait queue resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+-
+ // Select the right priority queue
+ // There should be no else statement since it should always fall within 0-3
+ if (AccessCategory== 0)
+@@ -2363,56 +2355,49 @@
+ pTxQueue = &pAdapter->TxSwQueue2;
+ else if (AccessCategory== 3)
+ pTxQueue = &pAdapter->TxSwQueue3;
+-
++
+ //
+ // For infrastructure mode, enqueue this frame immediately to sendwaitqueue
+ // For Ad-hoc mode, check the DA power state, then decide which queue to enqueue
+ //
+- if (INFRA_ON(pAdapter))
+- {
+- // In infrastructure mode, simply enqueue the packet into Tx waiting queue.
+- DBGPRINT(RT_DEBUG_INFO, "Infrastructure -> Enqueue one frame\n");
+-
+- // Enqueue Ndis packet to end of Tx wait queue
+- skb_queue_tail(pTxQueue, skb);
+- Status = NDIS_STATUS_SUCCESS;
+- }
+- else
+- {
+- // In IBSS mode, power state of destination should be considered.
+- PsMode = PWR_ACTIVE; // Faked
+- if (PsMode == PWR_ACTIVE)
+- {
+- DBGPRINT(RT_DEBUG_INFO,"Ad-Hoc -> Enqueue one frame\n");
+-
++ if (INFRA_ON(pAdapter)) {
++ // In infrastructure mode, simply enqueue the packet into Tx waiting queue.
++ DBGPRINT(RT_DEBUG_INFO,
++ "<=== RTMPSendPacket Infrastructure -> Enqueue one frame\n");
+ // Enqueue Ndis packet to end of Tx wait queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb_queue_tail(pTxQueue, skb);
+- Status = NDIS_STATUS_SUCCESS;
+- }
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
++ return NDIS_STATUS_SUCCESS;
+ }
+-
++ // Ad-hoc mode (power state of destination might be considered).
++ DBGPRINT(RT_DEBUG_INFO,
++ "<=== RTMPSendPacket Ad-Hoc -> Enqueue one frame\n");
++ // Enqueue Ndis packet to end of Tx wait queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ skb_queue_tail(pTxQueue, skb);
+ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+- return (Status);
++ return NDIS_STATUS_SUCCESS;
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- To do the enqueue operation and extract the first item of waiting
+- list. If a number of available shared memory segments could meet
++ To do the enqueue operation and extract the first item of waiting
++ list. If a number of available shared memory segments could meet
+ the request of extracted item, the extracted item will be fragmented
+ into shared memory segments.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pQueue Pointer to Waiting Queue
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPDeQueuePacket(
+@@ -2424,69 +2409,64 @@
+ struct sk_buff_head *pQueue;
+ UCHAR AccessCategory;
+ struct sk_buff *skb;
+- unsigned long irqflag;
+-
+- // Make sure SendTxWait queue resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ unsigned long irqflag;
+
+- while (Count < MAX_TX_PROCESS)
+- // Check queue before dequeue
+- // while ((pQueue->Head != NULL) && (Count < MAX_TX_PROCESS))
+- {
++ while (Count < MAX_TX_PROCESS) {
+ // Reset is in progress, stop immediately
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS))
+ break;
+
+ pQueue = RTMPCheckTxSwQueue(pAdapter, &AccessCategory);
+ if(!pQueue)
+- break;
++ break;
+
+ // Dequeue the first entry from head of queue list
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb = skb_dequeue(pQueue);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+
+ if(!skb)
+- break;
++ break;
+
+ // RTS or CTS-to-self for B/G protection mode has been set already.
+- // There is no need to re-do it here.
++ // There is no need to re-do it here.
+ // Total fragment required = number of fragment + RST if required
+ FragmentRequired = RTMP_GET_PACKET_FRAGMENTS(skb) + RTMP_GET_PACKET_RTS(skb);
+-
+- if (RTMPFreeDescriptorRequest(pAdapter, TX_RING, FragmentRequired) == NDIS_STATUS_SUCCESS)
+- {
+- // Avaliable ring descriptors are enough for this frame
+- // Call hard transmit
+- Status = RTMPHardEncrypt(pAdapter, skb, FragmentRequired, pAdapter->PortCfg.EnableTxBurst, AccessCategory);
+
+- if (Status == NDIS_STATUS_FAILURE)
+- {
+- // Packet failed due to various Ndis Packet error
+- dev_kfree_skb_irq(skb);
+- break;
+- }
+- else if (Status == NDIS_STATUS_RESOURCES)
+- {
+- // Not enough free tx ring, it might happen due to free descriptor inquery might be not correct
+- // It also might change to NDIS_STATUS_FAILURE to simply drop the frame
+- // Put the frame back into head of queue
+- skb_queue_head(pQueue, skb);
+- break;
+- }
+- Count++;
+- }
+- else
+- {
++ if (RTMPFreeDescriptorRequest(pAdapter, TX_RING,
++ FragmentRequired) != NDIS_STATUS_SUCCESS) {
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb_queue_head(pQueue, skb);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+ pAdapter->PrivateInfo.TxRingFullCnt++;
+- DBGPRINT(RT_DEBUG_INFO,"RTMPDequeuePacket --> Not enough free Tx Ring descriptor (CurEncryptIndex=%d,CurTxIndex=%d, NextTxDoneIndex=%d)!!!\n",
+- pAdapter->CurEncryptIndex, pAdapter->CurTxIndex, pAdapter->NextTxDoneIndex);
++ DBGPRINT(RT_DEBUG_INFO,
++ "RTMPDequeuePacket --> Not enough free Tx Ring descriptor (CurEncryptIndex=%d,CurTxIndex=%d, NextTxDoneIndex=%d)!!!\n",
++ pAdapter->CurEncryptIndex,
++ pAdapter->CurTxIndex,
++ pAdapter->NextTxDoneIndex);
+ break;
+ }
++ // Available ring descriptors are enough for this frame
++ // Call hard transmit
++ Status = RTMPHardEncrypt(pAdapter, skb, FragmentRequired, pAdapter->PortCfg.EnableTxBurst, AccessCategory);
++ if (Status == NDIS_STATUS_FAILURE) {
++ // Packet failed due to various Ndis Packet error
++ dev_kfree_skb_irq(skb);
++ break;
++ } else if (Status == NDIS_STATUS_RESOURCES) {
++ // Not enough free tx ring, it might happen due to free descriptor inquery might be not correct
++ // It also might change to NDIS_STATUS_FAILURE to simply drop the frame
++ // Put the frame back into head of queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ skb_queue_head(pQueue, skb);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
++ break;
++ }
++
++ Count++;
+ }
+
+- // Release TxSwQueue0 resources
+- spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+-}
++}
+
+ /*
+ ========================================================================
+@@ -2494,17 +2474,17 @@
+ Routine Description:
+ This subroutine will scan through releative ring descriptor to find
+ out avaliable free ring descriptor and compare with request size.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ RingType Selected Ring
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE Not enough free descriptor
+ NDIS_STATUS_SUCCESS Enough free descriptor
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPFreeDescriptorRequest(
+@@ -2557,18 +2537,18 @@
+ {
+ Index = 0;
+ }
+-
++
+ } while (FreeNumber < NumberRequired); // Quit here ! Free number is enough !
+-
++
+ if (FreeNumber >= NumberRequired)
+ {
+ Status = NDIS_STATUS_SUCCESS;
+ }
+-
++
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ break;
+-
++
+ case PRIO_RING:
+ Index = pAdapter->CurPrioIndex;
+ do
+@@ -2581,7 +2561,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ // While Owner bit is NIC, obviously ASIC still need it.
+ // If valid bit is TRUE, indicate that TxDone has not process yet
+ // We should not use it until TxDone finish cleanup job
+@@ -2594,26 +2574,26 @@
+ {
+ break;
+ }
+-
++
+ Index++;
+ if (Index >= PRIO_RING_SIZE) // Wrap around issue
+ {
+ Index = 0;
+ }
+-
++
+ } while (FreeNumber < NumberRequired); // Quit here ! Free number is enough !
+-
++
+ if (FreeNumber >= NumberRequired)
+ {
+ Status = NDIS_STATUS_SUCCESS;
+ }
+-
++
+ break;
+
+ default:
+ break;
+ }
+-
++
+ return (Status);
+ }
+
+@@ -2631,7 +2611,7 @@
+ TXD_STRUC TxD;
+ #endif
+ unsigned long irqflag;
+-
++
+ if (pBuffer == NULL)
+ {
+ return;
+@@ -2642,19 +2622,19 @@
+ MlmeFreeMemory(pAdapter, pBuffer);
+ return;
+ }
+-
++
+ // WPA 802.1x secured port control
+- if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+- (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
++ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
+ {
+ MlmeFreeMemory(pAdapter, pBuffer);
+ return;
+- }
+-
++ }
++
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+
+- // outgoing frame always wakeup PHY to prevent frame lost and
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ AsicForceWakeup(pAdapter);
+ #if 0
+@@ -2664,13 +2644,13 @@
+ DBGPRINT(RT_DEBUG_TRACE,("Drop Null frame due to Tx queue not empty!\n"));
+ }
+ else
+-#endif
++#endif
+ {
+ // Make sure Tx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++
+ // Get the Tx Ring descriptor & Dma Buffer address
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -2679,11 +2659,11 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_HOST) && (pTxD->CipherOwn == DESC_OWN_HOST) && (pTxD->Valid == FALSE))
+ {
+ HEADER_802_11 *pHeader_802_11;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[TxRate]);
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pBuffer, DIR_WRITE, FALSE);
+@@ -2693,14 +2673,14 @@
+
+ pHeader_802_11 = (PHEADER_802_11) pDest;
+ pHeader_802_11->Controlhead.Frame.PwrMgt = (pAdapter->PortCfg.Psm == PWR_SAVE);
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ pTxD = pDestTxD;
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, FALSE, FALSE, LONG_RETRY, IFS_BACKOFF,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, FALSE, FALSE, LONG_RETRY, IFS_BACKOFF,
+ TxRate, 4, Length, pAdapter->PortCfg.TxPreambleInUsed, 0);
+
+ // Increase & maintain Tx Ring Index
+@@ -2709,13 +2689,13 @@
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+-
++
+ pAdapter->RalinkCounters.EncryptCount++;
+
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
+- }
++
++ }
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ }
+ MlmeFreeMemory(pAdapter, pBuffer);
+@@ -2725,20 +2705,20 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware encryption before really
+ sent out to air.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to outgoing Ndis frame
+ NumberOfFrag Number of fragment required
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPHardEncrypt(
+@@ -2794,7 +2774,7 @@
+ if (pAdapter->PortCfg.BssType == BSS_MONITOR && pAdapter->PortCfg.MallowRFMONTx == TRUE)
+ {
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_DATA;
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ memcpy(pDest,skb->data,skb->len);
+@@ -2812,25 +2792,25 @@
+ FrameGap = IFS_SIFS;
+ else
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+-
+- // outgoing frame always wakeup PHY to prevent frame lost and
++
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ if (pAdapter->PortCfg.Psm == PWR_SAVE)
+ {
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ }
+ AsicForceWakeup(pAdapter);
+-
++
+ // Sequence Number is identical for all fragments belonged to the same frame
+ // Sequence is 0 - 4095
+ pAdapter->Sequence = ((pAdapter->Sequence) + 1) & (MAX_SEQ_NUMBER);
+-
++
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+
+ pVirtualAddress = skb->data;
+ NdisBufferLength = skb->len;
+-
++
+ if ((*((PUCHAR) pVirtualAddress) & 0x01) != 0) // Multicast or Broadcast
+ {
+ INC_COUNTER(pAdapter->WlanCounters.MulticastTransmittedFrameCount);
+@@ -2843,7 +2823,7 @@
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_FAILURE);
+ }
+-
++
+ //
+ // Start making 802.11 frame header
+ //
+@@ -2855,14 +2835,14 @@
+ memcpy(&Header_802_11.Addr3, (PUCHAR) pVirtualAddress, ETH_ALEN);
+ Header_802_11.Controlhead.Frame.ToDs = 1;
+ }
+- else
++ else
+ {
+ // Address 1 - DA, Address 2 - this STA, Address 3 - BSSID
+ memcpy(&Header_802_11.Controlhead.Addr1, (PUCHAR) pVirtualAddress, ETH_ALEN);
+ memcpy(&Header_802_11.Addr3, &pAdapter->PortCfg.Bssid, ETH_ALEN);
+ }
+ memcpy(&Header_802_11.Controlhead.Addr2, pAdapter->CurrentAddress, ETH_ALEN);
+-
++
+ Header_802_11.Sequence = pAdapter->Sequence; // Sequence number
+ Header_802_11.Controlhead.Frame.Type = BTYPE_DATA; // Frame type
+ Header_802_11.Controlhead.Frame.PwrMgt = (pAdapter->PortCfg.Psm == PWR_SAVE);
+@@ -2878,9 +2858,9 @@
+ }
+ else
+ EAPOLFrame = FALSE;
+-
++
+ // WPA 802.1x secured port control
+- if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ ((pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) || (pAdapter->PortCfg.MicErrCnt >= 2)) &&
+ (EAPOLFrame == FALSE))
+@@ -2889,28 +2869,28 @@
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_FAILURE);
+- }
+-
++ }
++
+ MICFrag = FALSE; // Flag to indicate MIC shall spread into two MPDUs
+ Encapped = FALSE;
+ pEncap = NULL;
+-
++
+ pSrc = (PUCHAR) pVirtualAddress;
+ Protocol = *(pSrc + 12) * 256 + *(pSrc + 13);
+ if (Protocol > 1500) // CHeck for LLC encaped
+ {
+ pEncap = SNAP_802_1H;
+ Encapped = TRUE;
+- if (RTMPEqualMemory(IPX, pSrc + 12, 2) ||
++ if (RTMPEqualMemory(IPX, pSrc + 12, 2) ||
+ RTMPEqualMemory(APPLE_TALK, pSrc + 12, 2))
+ {
+ pEncap = SNAP_BRIDGE_TUNNEL;
+ }
+ }
+
+- if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) &&
++ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) &&
+ (pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+- EncryptionOverhead = 8; // WEP: IV + ICV
++ EncryptionOverhead = 8; // WEP: IV + ICV
+ else if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
+ EncryptionOverhead = 12; // TKIP: IV + EIV + ICV, MIC already added to TotalPacketLength
+ else if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
+@@ -2925,11 +2905,11 @@
+ {
+ PCONTROL_HEADER pControlHeader;
+ ULONG NextFragSize;
+-
++
+ // RTS-protected frame should use LONG_RETRY (=4), other frames use SHORT_RETRY (=7)
+ RetryMode = LONG_RETRY;
+-
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -2938,7 +2918,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -2961,11 +2941,11 @@
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+-
++
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_RESOURCES);
+ }
+-
++
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_CNTL;
+ pControlHeader = (PCONTROL_HEADER) pDest;
+ memset(pControlHeader, 0, sizeof(CONTROL_HEADER));
+@@ -2987,27 +2967,32 @@
+ }
+ pControlHeader->Duration = 2 * (pAdapter->PortCfg.Dsifs)
+ + RTMPCalcDuration(pAdapter, pAdapter->PortCfg.TxRate, NextFragSize + EncryptionOverhead)
+- + AckDuration;
++ + AckDuration;
+
+ // Write Tx descriptor
+ // Don't kick tx start until all frames are prepared
+ // RTS has to set more fragment bit for fragment burst
+- // RTS did not encrypt
++ // RTS did not encrypt
+ if (pAdapter->PortCfg.BGProtectionInUsed == 1)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"Making CTS-to-self Frame\n");
+- pControlHeader->Frame.Subtype = SUBTYPE_CTS;
++ pControlHeader->Frame.Subtype = SUBTYPE_CTS;
+ memcpy(&pControlHeader->Addr1, pAdapter->CurrentAddress, ETH_ALEN);
+
+ #ifdef BIG_ENDIAN
+- RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader, DIR_WRITE, FALSE);
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
+- pTxD = pDestTxD;
++ // Write Tx descriptor
++ // Don't kick tx start until all frames are prepared
++ // CTS has to set more fragment bit for fragment burst
++ // CTS did not encrypt
++ // CTS-to-self will never receive ACK
++ RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader,
++ DIR_WRITE, FALSE);
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ *pDestTxD = TxD;
++ pTxD = pDestTxD;
+ #endif
+
+-
+-#ifdef WIFI_TEST
++#ifdef WIFI_TEST
+ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, FALSE, FALSE, FALSE, SHORT_RETRY,
+ FrameGap, pAdapter->PortCfg.RtsRate, 4, 10, Rt802_11PreambleShort,
+ AccessCategory);
+@@ -3019,42 +3004,51 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Making RTS Frame\n");
+- pControlHeader->Frame.Subtype = SUBTYPE_RTS;
+- if (INFRA_ON(pAdapter))
+- memcpy(&pControlHeader->Addr1, &pAdapter->PortCfg.Bssid, ETH_ALEN);
+- else
+- memcpy(&pControlHeader->Addr1, (PUCHAR) pVirtualAddress, ETH_ALEN);
+- memcpy(&pControlHeader->Addr2, pAdapter->CurrentAddress, ETH_ALEN);
++ DBGPRINT(RT_DEBUG_TRACE,"Making RTS Frame\n");
++ pControlHeader->Frame.Subtype = SUBTYPE_RTS;
++ if (INFRA_ON(pAdapter))
++ memcpy(&pControlHeader->Addr1,
++ &pAdapter->PortCfg.Bssid, ETH_ALEN);
++ else
++ memcpy(&pControlHeader->Addr1,
++ (PUCHAR) pVirtualAddress, ETH_ALEN);
++ memcpy(&pControlHeader->Addr2,
++ pAdapter->CurrentAddress, ETH_ALEN);
++
++ // Write Tx descriptor
++ // Don't kick tx start until all frames are prepared
++ // RTS has to set more fragment bit for fragment burst
++ // RTS did not encrypt
++ pTxD->RTS = 1;
+ #ifdef BIG_ENDIAN
+- RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader, DIR_WRITE, FALSE);
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
+- pTxD = pDestTxD;
++ RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader,
++ DIR_WRITE, FALSE);
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ *pDestTxD = TxD;
++ pTxD = pDestTxD;
+ #endif
+ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, TRUE, FALSE, SHORT_RETRY,
+ FrameGap, pAdapter->PortCfg.RtsRate, 4, sizeof(CONTROL_HEADER),
+ pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+- pTxD->RTS = 1;
+ }
+-
++
+ FrameGap = IFS_SIFS; // Init frame gap for coming data after RTS
+ NumberRequired--;
+-
++
+ // Increase & maintain Tx Ring Index
+ pAdapter->CurEncryptIndex++;
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+- pAdapter->RalinkCounters.EncryptCount++;
++ pAdapter->RalinkCounters.EncryptCount++;
+ }
+
+ // Find the WPA key, either Group or Pairwise Key
+ if (pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA)
+ {
+ INT idx;
+-
++
+ pWpaKey = (PWPA_KEY) NULL;
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01)
+@@ -3101,17 +3095,17 @@
+ {
+ // Get the Tx Ring descriptor & Dma Buffer address
+ #ifndef BIG_ENDIAN
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pOriginDest = pDest;
+ pDestTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ TxD = *pDestTxD;
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -3127,12 +3121,14 @@
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
+ pTxD->Valid = FALSE;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
++ //*pDestTxD = TxD;
++ WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, FALSE,
++ TYPE_RXD);
+ #endif
+-
++
+ pAdapter->RalinkCounters.TxRingErrCount++;
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_RESOURCES);
+@@ -3144,7 +3140,7 @@
+ Header_802_11.Frag = 0; // Start of fragment burst / Single Frame
+ else
+ Header_802_11.Frag++; // Rest of fragmented frames.
+-
++
+ // Maximum allowable payload with one ring buffer, bound by fragment size
+ FreeFragSize = pAdapter->PortCfg.FragmentThreshold - LENGTH_CRC;
+
+@@ -3155,12 +3151,12 @@
+ {
+ ULONG NextFragSize;
+ Header_802_11.Controlhead.Frame.MoreFrag = 1;
+-
++
+ if (NumberRequired == 2)
+ NextFragSize = RemainSize - pAdapter->PortCfg.FragmentThreshold + LENGTH_802_11 + LENGTH_802_11 + LENGTH_CRC;
+ else
+ NextFragSize = pAdapter->PortCfg.FragmentThreshold;
+-
++
+ Header_802_11.Controlhead.Duration = 3 * pAdapter->PortCfg.Dsifs
+ + 2 * AckDuration
+ + RTMPCalcDuration(pAdapter, pAdapter->PortCfg.TxRate, NextFragSize + EncryptionOverhead);
+@@ -3168,7 +3164,7 @@
+ else // this is the last or only fragment
+ {
+ Header_802_11.Controlhead.Frame.MoreFrag = 0;
+-
++
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01) // multicast/broadcast
+ Header_802_11.Controlhead.Duration = 0;
+ else
+@@ -3183,7 +3179,7 @@
+ Header_802_11.Controlhead.Frame.Wep = 1;
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL))
+ Header_802_11.Controlhead.Frame.Wep = 1;
+-
++
+ //
+ // Copy 802.11 header to Tx ring buffer
+ //
+@@ -3191,12 +3187,15 @@
+ pDest += sizeof(Header_802_11);
+ FreeFragSize -= sizeof(Header_802_11);
+
+- DBGPRINT(RT_DEBUG_TRACE,"pWpaKey = %s\n", pWpaKey == NULL ? "NULL" : "not NULL");
++ DBGPRINT(RT_DEBUG_INFO, "pWpaKey = %s\n",
++ pWpaKey == NULL ? "NULL" : "not NULL");
+
+ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) && (EAPOLFrame == FALSE) &&
+ (pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11Encryption1Enabled::DefaultKeyId = %d\n", pAdapter->PortCfg.DefaultKeyId);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption1Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
+ // Prepare IV, IV offset, Key for Hardware encryption
+ RTMPInitWepEngine(
+ pAdapter,
+@@ -3216,12 +3215,14 @@
+ memcpy(
+ pTxD->Key,
+ pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key,
+- pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen);
++ pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen);
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
+ {
+ INT i = 0;
+- DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11Encryption2Enabled::DefaultKeyId = %d\n", pAdapter->PortCfg.DefaultKeyId);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption2Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
+ // Prepare 8 bytes TKIP encapsulation for MPDU
+ {
+ TKIP_IV tkipIv;
+@@ -3232,31 +3233,20 @@
+ tkipIv.IV16.field.rc2 = *pWpaKey->TxTsc;
+ tkipIv.IV16.field.ExtIV = 1;// 0: non-extended IV, 1: extended IV
+ tkipIv.IV16.field.KeyID = pAdapter->PortCfg.DefaultKeyId;
+- tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
+-#if 0 //jett, 2004-1222 ------------------
+-#if BIG_ENDIAN == TRUE
+- pTxD->Iv = (tkipIv.IV16.field.rc0 << 24) | (tkipIv.IV16.field.rc1 << 16) | (tkipIv.IV16.field.rc2 << 8) | (tkipIv.IV16.field.CONTROL.Byte);
+-#endif
+-
+-#ifdef RTMP_EMBEDDED
+- pTxD->Iv = (tkipIv.IV16.field.CONTROL.Byte << 24) | (tkipIv.IV16.field.rc2 << 16) | (tkipIv.IV16.field.rc1 << 8) | (tkipIv.IV16.field.rc0);
+-#else
+- pTxD->Iv = tkipIv.IV16.word;
+-#endif
+-#else //----------------------------------
++ //tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ memcpy(&tkipIv.IV32, &pWpaKey->TxTsc[2], 4);
+ #ifdef BIG_ENDIAN
+- pTxD->Iv = SWAP32(tkipIv.IV16.word);
++ pTxD->Iv = SWAP32(tkipIv.IV16.word);
+ #else
+- pTxD->Iv = tkipIv.IV16.word;
++ pTxD->Iv = tkipIv.IV16.word;
+ #endif
+-#endif //----------------------------------
+
+ *((PUCHAR) &pTxD->Eiv) = *((PUCHAR) &tkipIv.IV32 + 3);
+ *((PUCHAR) &pTxD->Eiv + 1) = *((PUCHAR) &tkipIv.IV32 + 2);
+ *((PUCHAR) &pTxD->Eiv + 2) = *((PUCHAR) &tkipIv.IV32 + 1);
+ *((PUCHAR) &pTxD->Eiv + 3) = *((PUCHAR) &tkipIv.IV32);
+ }
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -3264,13 +3254,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+ // Copy TKey
+ memcpy(pTxD->Key, pWpaKey->Key, 16);
+-
++
+ // Set Cipher suite
+ CipherAlg = CIPHER_TKIP;
+ }
+@@ -3279,15 +3269,20 @@
+ INT i;
+ PUCHAR pTmp;
+
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption3Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
++
+ i = 0;
+ pTmp = (PUCHAR) &Iv16;
+ *pTmp = pWpaKey->TxTsc[0];
+ *(pTmp + 1) = pWpaKey->TxTsc[1];
+ *(pTmp + 2) = 0;
+ *(pTmp + 3) = (pAdapter->PortCfg.DefaultKeyId << 6) | 0x20;
+-
+- Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
+-
++
++ //Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
++ memcpy(&Iv32, &pWpaKey->TxTsc[2], 4);
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -3300,7 +3295,7 @@
+ // TODO: TSC has done one full cycle, do re-keying stuff follow specs
+ // Should send a special event microsoft defined to request re-key
+ }
+-
++
+ memcpy(&pTxD->Iv, &Iv16, 4); // Copy IV
+ memcpy(&pTxD->Eiv, &Iv32, 4); // Copy EIV
+ pTxD->IvOffset = LENGTH_802_11; // Set IV offset
+@@ -3308,8 +3303,11 @@
+ CipherAlg = CIPHER_AES; // Set Cipher suite
+ }
+ else
++ {
++ DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11EncryptionDisabled\n");
+ CipherAlg = CIPHER_NONE;
+-
++ }
++
+ //
+ // Only the first fragment required LLC-SNAP header !!!
+ //
+@@ -3332,7 +3330,7 @@
+ pSrc = (PUCHAR) pVirtualAddress;
+ memcpy(pDest, pSrc + 12, 2);
+ pDest += 2;
+-
++
+ // Exclude 802.3 header size, we will recalculate the size at
+ // the end of fragment preparation.
+ NdisBufferLength -= LENGTH_802_3;
+@@ -3346,11 +3344,11 @@
+ // Calculate MSDU MIC Value
+ RTMPCalculateMICValue(pAdapter, skb, pEncap, 0, pWpaKey);
+ }
+-
++
+ pSrc = (PUCHAR) pVirtualAddress + LENGTH_802_3;
+ NdisBufferLength -= LENGTH_802_3;
+ }
+-
++
+ // Start copying payload
+ BytesCopied = 0;
+ do
+@@ -3375,23 +3373,25 @@
+ pDest += NdisBufferLength;
+ FreeFragSize -= NdisBufferLength;
+ }
+-
++
+ // No more buffer descriptor
+ // Add MIC value if needed
+- if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) &&
++ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) &&
+ (MICFrag == FALSE) &&
+ (pWpaKey != NULL))
+ {
+- INT i;
+-
+ NdisBufferLength = 8; // Set length to MIC length
+- DBGPRINT(RT_DEBUG_INFO, "Calculated TX MIC value =");
+- for (i = 0; i < 8; i++)
+- {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PrivateInfo.Tx.MIC[i]);
+- }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+-
++ DBGPRINT(RT_DEBUG_INFO,
++ "--- TX MIC=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
++ pAdapter->PrivateInfo.Tx.MIC[0],
++ pAdapter->PrivateInfo.Tx.MIC[1],
++ pAdapter->PrivateInfo.Tx.MIC[2],
++ pAdapter->PrivateInfo.Tx.MIC[3],
++ pAdapter->PrivateInfo.Tx.MIC[4],
++ pAdapter->PrivateInfo.Tx.MIC[5],
++ pAdapter->PrivateInfo.Tx.MIC[6],
++ pAdapter->PrivateInfo.Tx.MIC[7]);
++
+ if (FreeFragSize >= NdisBufferLength)
+ {
+ memcpy(pDest, pAdapter->PrivateInfo.Tx.MIC, NdisBufferLength);
+@@ -3413,7 +3413,7 @@
+ }
+ }
+ } while (FALSE); // End of copying payload
+-
++
+ // Real packet size, No 802.1H header for fragments except the first one.
+ if ((StartOfFrame == TRUE) && (Encapped == TRUE))
+ {
+@@ -3425,7 +3425,7 @@
+ }
+
+ RemainSize = RemainSize - BytesCopied;
+-
++
+ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) && (Header_802_11.Controlhead.Frame.Wep == 1))
+ {
+ // IV + ICV which ASIC added after encryption done
+@@ -3441,7 +3441,7 @@
+ // IV + EIV + HW MIC
+ TxSize += 16;
+ }
+-
++
+ // Prepare Tx descriptors before kicking tx.
+ // The BBP register index in Tx descriptor has to be configured too.
+ #ifdef BIG_ENDIAN
+@@ -3453,12 +3453,12 @@
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01)
+ {
+ // Multicast, retry bit is off
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, FALSE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, FALSE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, TxSize, pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+ }
+ else
+ {
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, TxSize, pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+ }
+
+@@ -3467,23 +3467,23 @@
+ StartOfFrame = FALSE;
+ FrameGap = IFS_SIFS;
+ NumberRequired--;
+-
++
+ // Increase & maintain Tx Ring Index
+ pAdapter->CurEncryptIndex++;
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+-
++
+ pAdapter->RalinkCounters.EncryptCount++;
+-
++
+ } while (NumberRequired > 0);
+
+ skip_packet_handling:
+-
++
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
++
+ // Acknowledge protocol send complete of pending packet.
+ dev_kfree_skb_irq(skb);
+
+@@ -3497,19 +3497,19 @@
+ ========================================================================
+
+ Routine Description:
+- Calculates the duration which is required to transmit out frames
++ Calculates the duration which is required to transmit out frames
+ with given size and specified rate.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ Rate Transmit rate
+ Size Frame size in units of byte
+-
++
+ Return Value:
+ Duration number in units of usec
+
+ Note:
+-
++
+ ========================================================================
+ */
+ USHORT RTMPCalcDuration(
+@@ -3525,7 +3525,7 @@
+ Duration = 96; // 72+24 preamble+plcp
+ else
+ Duration = 192; // 144+48 preamble+plcp
+-
++
+ Duration += (USHORT)((Size << 4) / RateIdTo500Kbps[Rate]);
+ if ((Size << 4) % RateIdTo500Kbps[Rate])
+ Duration ++;
+@@ -3537,18 +3537,18 @@
+ if ((11 + Size * 4) % RateIdTo500Kbps[Rate])
+ Duration += 4;
+ }
+-
++
+ return (USHORT)Duration;
+-
++
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- Calculates the duration which is required to transmit out frames
++ Calculates the duration which is required to transmit out frames
+ with given size and specified rate.
+-
++
+ Arguments:
+ pTxD Pointer to transmit descriptor
+ Ack Setting for Ack requirement bit
+@@ -3560,10 +3560,10 @@
+ Length Frame length
+ TxPreamble Short or Long preamble when using CCK rates
+ AccessCategory - 0-3, according to 802.11e/d4.4 June/2003
+-
++
+ Return Value:
+ None
+-
++
+ ========================================================================
+ */
+ VOID RTMPWriteTxDescriptor(
+@@ -3624,7 +3624,7 @@
+ pTxD->Aifs = 2;
+ break;
+ }
+-
++
+ if (Rate < RATE_FIRST_OFDM_RATE)
+ pTxD->Ofdm = 0;
+ else
+@@ -3671,7 +3671,7 @@
+ pTxD->PlcpLengthHigh = Length / 64; // high 6-bit of total byte count
+ pTxD->PlcpLengthLow = Length % 64; // low 6-bit of total byte count
+ }
+-
++
+ if (DoEncrypt == TRUE) // Do encryption only
+ {
+ pTxD->Owner = DESC_OWN_HOST;
+@@ -3687,8 +3687,10 @@
+ pTxD->Owner = DESC_OWN_NIC;
+ }
+ #ifdef BIG_ENDIAN
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pSourceTxD = *pTxD;
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ //*pSourceTxD = *pTxD;
++ WriteBackToDescriptor((PUCHAR) pSourceTxD, (PUCHAR) pTxD, FALSE,
++ TYPE_TXD);
+ #endif
+ }
+
+@@ -3697,17 +3699,17 @@
+
+ Routine Description:
+ Search tuple cache for receive duplicate frame from unicast frames.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pHeader 802.11 header of receiving frame
+-
++
+ Return Value:
+ TRUE found matched tuple cache
+ FALSE no matched found
+
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPSearchTupleCache(
+@@ -3720,12 +3722,12 @@
+ {
+ if (pAdapter->TupleCache[Index].Valid == FALSE)
+ continue;
+-
++
+ if (RTMPEqualMemory(&pAdapter->TupleCache[Index].MAC, &pHeader->Controlhead.Addr2, 6) &&
+ (pAdapter->TupleCache[Index].Sequence == pHeader->Sequence) &&
+ (pAdapter->TupleCache[Index].Frag == pHeader->Frag))
+ {
+-// DBGPRINT(RT_DEBUG_TRACE,("DUPCHECK - duplicate frame hit entry %d\n", Index));
++// DBGPRINT(RT_DEBUG_TRACE,("DUPCHECK - duplicate frame hit entry %d\n", Index));
+ return (TRUE);
+ }
+ }
+@@ -3737,16 +3739,16 @@
+
+ Routine Description:
+ Update tuple cache for new received unicast frames.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pHeader 802.11 header of receiving frame
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPUpdateTupleCache(
+@@ -3765,7 +3767,7 @@
+ pAdapter->TupleCache[Index].Frag = pHeader->Frag;
+ pAdapter->TupleCache[Index].Valid = TRUE;
+ pAdapter->TupleCacheLastUpdateIndex = Index;
+- DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - Add Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - Add Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+ Index, pAdapter->TupleCache[Index].MAC.Octet[0], pAdapter->TupleCache[Index].MAC.Octet[1],
+ pAdapter->TupleCache[Index].MAC.Octet[2], pAdapter->TupleCache[Index].MAC.Octet[3],
+ pAdapter->TupleCache[Index].MAC.Octet[4], pAdapter->TupleCache[Index].MAC.Octet[5]);
+@@ -3794,7 +3796,7 @@
+ pAdapter->TupleCache[Index].Sequence = pHeader->Sequence;
+ pAdapter->TupleCache[Index].Frag = pHeader->Frag;
+ pAdapter->TupleCache[Index].Valid = TRUE;
+- DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - replace Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - replace Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+ Index, pAdapter->TupleCache[Index].MAC.Octet[0], pAdapter->TupleCache[Index].MAC.Octet[1],
+ pAdapter->TupleCache[Index].MAC.Octet[2], pAdapter->TupleCache[Index].MAC.Octet[3],
+ pAdapter->TupleCache[Index].MAC.Octet[4], pAdapter->TupleCache[Index].MAC.Octet[5]);
+@@ -3806,15 +3808,15 @@
+
+ Routine Description:
+ Suspend MSDU transmission
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSuspendMsduTransmission(
+@@ -3829,15 +3831,15 @@
+
+ Routine Description:
+ Resume MSDU transmission
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPResumeMsduTransmission(
+@@ -3863,40 +3865,40 @@
+ Routine Description:
+ Apply packet filter policy, return NDIS_STATUS_FAILURE if this frame
+ should be dropped.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pRxD Pointer to the Rx descriptor
+ pHeader Pointer to the 802.11 frame header
+-
++
+ Return Value:
+ NDIS_STATUS_SUCCESS Accept frame
+ NDIS_STATUS_FAILURE Drop Frame
+-
++
+ Note:
+ Maganement frame should bypass this filtering rule.
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPApplyPacketFilter(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PRXD_STRUC pRxD,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PRXD_STRUC pRxD,
+ IN PHEADER_802_11 pHeader)
+ {
+ UCHAR i;
+-
++
+ // 0. Management frame should bypass all these filtering rules.
+ if (pHeader->Controlhead.Frame.Type == BTYPE_MGMT)
+ {
+ return(NDIS_STATUS_SUCCESS);
+ }
+-
++
+ // 0.1 Drop all Rx frames if MIC countermeasures kicks in
+ if (pAdapter->PortCfg.MicErrCnt >= 2)
+ {
+ return(NDIS_STATUS_FAILURE);
+ }
+-
++
+ // 1. Drop unicast to me packet if NDIS_PACKET_TYPE_DIRECTED is FALSE
+ if (pRxD->U2M)
+ {
+@@ -3905,7 +3907,7 @@
+ return(NDIS_STATUS_FAILURE);
+ }
+ }
+-
++
+ // 2. Drop broadcast packet if NDIS_PACKET_TYPE_BROADCAST is FALSE
+ else if (pRxD->Bcast)
+ {
+@@ -3914,7 +3916,7 @@
+ return(NDIS_STATUS_FAILURE);
+ }
+ }
+-
++
+ // 3. Drop multicast packet if NDIS_PACKET_TYPE_ALL_MULTICAST is false
+ // and NDIS_PACKET_TYPE_MULTICAST is false.
+ // If NDIS_PACKET_TYPE_MULTICAST is true, but NDIS_PACKET_TYPE_ALL_MULTICAST is false.
+@@ -3964,8 +3966,8 @@
+ {
+ return(NDIS_STATUS_FAILURE);
+ }
+-
+- return(NDIS_STATUS_SUCCESS);
++
++ return(NDIS_STATUS_SUCCESS);
+ }
+
+ /*
+@@ -3973,15 +3975,15 @@
+
+ Routine Description:
+ Check and fine the packet waiting in SW queue with highest priority
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ pQueue Pointer to Waiting Queue
+
+ Note:
+-
++
+ ========================================================================
+ */
+ struct sk_buff_head* RTMPCheckTxSwQueue(
+@@ -4019,20 +4021,20 @@
+
+ Routine Description:
+ Process MIC error indication and record MIC error timer.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pWpaKey Pointer to the WPA key structure
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPReportMicError(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PWPA_KEY pWpaKey)
+ {
+ ULONG Now;
+@@ -4044,7 +4046,7 @@
+
+ // 0. Set Status to indicate auth error
+ Report.Status.StatusType = Ndis802_11StatusType_Authentication;
+-
++
+ // 1. Check for Group or Pairwise MIC error
+ if (pWpaKey->Type == PAIRWISE_KEY)
+ Report.Request.Flags = NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR;
+@@ -4069,13 +4071,13 @@
+ if ((pAdapter->PortCfg.LastMicErrorTime + (60 * HZ)) < Now)
+ {
+ // Update Last MIC error time, this did not violate two MIC errors within 60 seconds
+- pAdapter->PortCfg.LastMicErrorTime = Now;
++ pAdapter->PortCfg.LastMicErrorTime = Now;
+ }
+ else
+ {
+- pAdapter->PortCfg.LastMicErrorTime = Now;
++ pAdapter->PortCfg.LastMicErrorTime = Now;
+ // Violate MIC error counts, MIC countermeasures kicks in
+- pAdapter->PortCfg.MicErrCnt++;
++ pAdapter->PortCfg.MicErrCnt++;
+ // We shall block all reception
+ // We shall clean all Tx ring and disassoicate from AP after next EAPOL frame
+ RTMPRingCleanUp(pAdapter, TX_RING);
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_def.h rt2500-cvs-2007061011/Module/rtmp_def.h
+--- rt2500-1.1.0-b4/Module/rtmp_def.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_def.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_def.h
+- *
++ *
+ * Abstract: Miniport related definition header
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 1st Aug 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 1st Aug 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RTMP_DEF_H__
+ #define __RTMP_DEF_H__
+@@ -38,11 +38,12 @@
+ //
+ // Debug information verbosity: lower values indicate higher urgency
+ //
+-#define RT_DEBUG_ERROR KERN_ERR
+-#define RT_DEBUG_WARN KERN_WARNING
+-#define RT_DEBUG_TRACE KERN_NOTICE
+-#define RT_DEBUG_INFO KERN_INFO
+-#define RT_DEBUG_LOUD KERN_DEBUG
++#define RT_DEBUG_OFF 0
++#define RT_DEBUG_ERROR 1
++#define RT_DEBUG_WARN 2
++#define RT_DEBUG_TRACE 4
++#define RT_DEBUG_INFO 8
++#define RT_DEBUG_LOUD 16
+
+ //
+ // update the driver version number every time you release a new driver
+@@ -190,8 +191,8 @@
+ #define HASH_TABLE_SIZE 256
+ #define MAX_LEN_OF_MLME_BUFFER 1024
+ #define MAX_FRAME_LEN 2338
+-#define MAX_VIE_LEN 128 // New for WPA cipher suite variable IE sizes.
+-#define MAX_MLME_HANDLER_MEMORY 20 //each them cantains MAX_LEN_OF_MLME_BUFFER size
++#define MAX_VIE_LEN 257 // sum of WPAx IEs
++#define MAX_MLME_HANDLER_MEMORY 20 //each them cantains MAX_LEN_OF_MLME_BUFFER size
+ #define MAX_INI_BUFFER_SIZE 1024
+
+ #define MAX_TX_POWER_LEVEL 100 /* mW */
+@@ -265,7 +266,7 @@
+ #define MLME_SUCCESS 0
+ #define MLME_UNSPECIFY_FAIL 1
+ #define MLME_CANNOT_SUPPORT_CAP 10
+-#define MLME_REASSOC_DENY_ASSOC_EXIST 11
++#define MLME_REASSOC_DENY_ASSOC_EXIST 11
+ #define MLME_ASSOC_DENY_OUT_SCOPE 12
+ #define MLME_ALG_NOT_SUPPORT 13
+ #define MLME_SEQ_NR_OUT_OF_SEQUENCE 14
+@@ -317,7 +318,7 @@
+
+ #define MT2_MLME_ASSOC_REQ 0
+ #define MT2_MLME_REASSOC_REQ 1
+-#define MT2_MLME_DISASSOC_REQ 2
++#define MT2_MLME_DISASSOC_REQ 2
+ #define MT2_PEER_DISASSOC_REQ 3
+ #define MT2_PEER_ASSOC_REQ 4
+ #define MT2_PEER_ASSOC_RSP 5
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_info.c rt2500-cvs-2007061011/Module/rtmp_info.c
+--- rt2500-1.1.0-b4/Module/rtmp_info.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_info.c 2007-05-31 22:45:43.000000000 +0200
+@@ -1,49 +1,50 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_info.c
+- *
+- * Abstract: IOCTL related subroutines
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 3rd Jan 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract: IOCTL related subroutines
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 3rd Jan 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 15th Dec 04 Removed debug iwpriv
+ * RobinC 16th Dec 04 Fix for range values
+ * RobinC 16th Dec 04 support ifpreup scripts
+ * RobinC 17th Dec 04 Link Quality reporting
+ * MarkW 17th Dec 04 iwconfig frequency fix
+- * MarkW 17th Dec 04 Monitor mode through iwconfig
++ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * MarkW 22nd Dec 04 RSSI reporting for iwlist scanning
+ * MarkW 31st Jan 05 if pre-up fix for RaConfig
+ * LuisCorreia 23rd Feb 05 fix unknown IOCTL's
+ * MarkW 9th Mar 05 Quality reporting in scan for current
+ * MarkW 9th Jun 05 Fix channel change for ADHOC mode
+- ***************************************************************************/
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #include "rt_config.h"
+ #include <net/iw_handler.h>
+@@ -154,7 +155,7 @@
+ }
+
+ struct iw_priv_args privtab[] = {
+-{ RTPRIV_IOCTL_SET,
++{ RTPRIV_IOCTL_SET,
+ IW_PRIV_TYPE_CHAR | 1024, 0,
+ "set"},
+ { RTPRIV_IOCTL_BBP,
+@@ -166,9 +167,12 @@
+ { RTPRIV_IOCTL_E2P,
+ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,
+ "e2p"},
+-{ RTPRIV_IOCTL_RFMONTX,
+- IW_PRIV_TYPE_INT | 2, IW_PRIV_TYPE_CHAR | sizeof (char),
+- "rfmontx"}
++{ RTPRIV_IOCTL_SET_RFMONTX,
++ IW_PRIV_TYPE_INT | 2, 0,
++ "rfmontx"},
++{ RTPRIV_IOCTL_GET_RFMONTX,
++ 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
++ "get_rfmontx"}
+ };
+
+ static struct {
+@@ -198,6 +202,9 @@
+ {"Key4", Set_Key4_Proc},
+ {"WPAPSK", Set_WPAPSK_Proc},
+ {"WPANONE", Set_WPANONE_Proc},
++#ifdef RT2500_DBG
++ {"Debug", Set_Debug_Proc},
++#endif
+
+ #ifdef RALINK_ATE
+ {"ATE", Set_ATE_Proc }, // set ATE Mode to: STOP, TXCONT, TXCARR, TXFRAME, RXFRAME
+@@ -233,7 +240,13 @@
+ u16 val;
+ int i,chan;
+
+- DBGPRINT(RT_DEBUG_TRACE,"0. rtusb_ioctl_giwrange\n");
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++
++ DBGPRINT(RT_DEBUG_TRACE,"0. rt_ioctl_giwrange\n");
+ data->length = sizeof(struct iw_range);
+ memset(range, 0, sizeof(struct iw_range));
+
+@@ -266,7 +279,7 @@
+ {
+ range->freq[val].i = chan;
+ MAP_CHANNEL_ID_TO_KHZ(range->freq[val].i, range->freq[val].m);
+- range->freq[val].m*=100;
++ range->freq[val].m*=100;
+ range->freq[val].e = 1;
+ val++;
+ }
+@@ -335,8 +348,8 @@
+ char *this_char;
+ char *value;
+ int Status;
+-
+- while ((this_char = strsep(&extra, ",")) != NULL)
++
++ while ((this_char = strsep(&extra, ",")) != NULL)
+ {
+ if (!*this_char)
+ continue;
+@@ -349,8 +362,8 @@
+
+ for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++)
+ {
+- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
+- {
++ if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
++ {
+ if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value))
+ { //FALSE:Set private failed then return Invalid argument
+ Status = -EINVAL;
+@@ -382,6 +395,13 @@
+ PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ int Status = NDIS_STATUS_SUCCESS;
+ BOOLEAN StateMachineTouched = FALSE;
++
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ return 0;
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_MLME_INITIALIZED))
+@@ -390,7 +410,7 @@
+ Now = jiffies;
+
+ if ((pAdapter->MediaState == NdisMediaStateConnected) &&
+- ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)
+ )
+@@ -413,15 +433,17 @@
+ pAdapter->PortCfg.IgnoredScanNumber = 0;
+ pAdapter->PortCfg.LastScanTime = Now;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+
+ Status = NDIS_STATUS_SUCCESS;
+ StateMachineTouched = TRUE;
+ }while(0);
++ if(StateMachineTouched) // Upper layer sent a MLME-related operations
++ MlmeHandler(pAdapter);
+ return 0;
+ }
+ int
+@@ -437,7 +459,19 @@
+ char *current_val;
+ struct iw_event iwe;
+
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)){
++ /*
++ * Still scanning, indicate the caller should try again.
++ */
++ DBGPRINT(RT_DEBUG_TRACE, "%s: still scanning\n", __FUNCTION__);
++ return -EAGAIN;
++ }
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ if (current_ev >= end_buf)
+ break;
+@@ -511,25 +545,25 @@
+ iwe.u.qual.qual = pAdapter->Mlme.ChannelQuality;
+ else
+ iwe.u.qual.qual = 0;
+- iwe.u.qual.level = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
++ iwe.u.qual.level = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
+ iwe.u.qual.noise = pAdapter->PortCfg.BssTab.BssEntry[i].Noise;
+- //iwe.u.qual.noise = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value); // // noise level (dBm)
++ //iwe.u.qual.noise = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value); // // noise level (dBm)
+
+- current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_QUAL_LEN);
++ current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_QUAL_LEN);
+
+
+ //================================
+ memset(&iwe, 0, sizeof(iwe));
+ }
+ data->length = current_ev - extra;
+- DBGPRINT(RT_DEBUG_TRACE,"rtusb_ioctl_giwscan. %d BSS returned\n",pAdapter->PortCfg.BssTab.BssNr);
++ DBGPRINT(RT_DEBUG_TRACE,"rt_ioctl_giwscan. %d BSS returned\n",pAdapter->PortCfg.BssTab.BssNr);
+ return 0;
+ }
+ #endif
+ static const iw_handler rt_handler[] =
+ {
+ (iw_handler) NULL, /* SIOCSIWCOMMIT */
+- (iw_handler) NULL, /* SIOCGIWNAME 1 */
++ (iw_handler) NULL, /* SIOCGIWNAME 1 */
+ (iw_handler) NULL, /* SIOCSIWNWID */
+ (iw_handler) NULL, /* SIOCGIWNWID */
+ (iw_handler) NULL, /* SIOCSIWFREQ */
+@@ -641,9 +675,11 @@
+ }
+ break;
+ case OID_802_11_BSSID_LIST_SCAN:
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_MLME_INITIALIZED))
++ break;
+ Now = jiffies;
+- TxTotalCnt = pAdapter->DrsCounters.OneSecTxOkCount +
+- pAdapter->DrsCounters.OneSecTxRetryOkCount +
++ TxTotalCnt = pAdapter->DrsCounters.OneSecTxOkCount +
++ pAdapter->DrsCounters.OneSecTxRetryOkCount +
+ pAdapter->DrsCounters.OneSecTxFailCount;
+ DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_BSSID_LIST_SCAN, TxCnt = %d \n", TxTotalCnt);
+ // For XP WZC, we will allow scan every 10 times, roughly 10 minutes.
+@@ -657,9 +693,9 @@
+ pAdapter->PortCfg.IgnoredScanNumber++;
+ break;
+ }
+-
++
+ if ((pAdapter->MediaState == NdisMediaStateConnected) &&
+- ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)
+ )
+@@ -682,10 +718,10 @@
+ pAdapter->PortCfg.IgnoredScanNumber = 0;
+ pAdapter->PortCfg.LastScanTime = Now;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+
+ Status = NDIS_STATUS_SUCCESS;
+@@ -710,13 +746,13 @@
+ {
+ MlmeRestartStateMachine(pAdapter);
+ DBGPRINT(RT_DEBUG_TRACE, "!!! MLME busy, reset MLME state machine !!!\n");
+- }
++ }
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid
+@@ -746,11 +782,11 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID,
+ sizeof(NDIS_802_11_MAC_ADDRESS),
+ (VOID *)&Bssid);
+ Status = NDIS_STATUS_SUCCESS;
+@@ -906,7 +942,7 @@
+ }
+ break;
+ case OID_802_11_AUTHENTICATION_MODE:
+- if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
++ if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
+ Status = -EINVAL;
+ else
+ {
+@@ -941,7 +977,7 @@
+ Status = -EINVAL;
+ break;
+ }
+- if (BssType == Ndis802_11IBSS)
++ if (BssType == Ndis802_11IBSS)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_INDEP)
+ {
+@@ -951,7 +987,7 @@
+ pAdapter->PortCfg.BssType = BSS_INDEP;
+ DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (AD-HOC)\n");
+ }
+- else if (BssType == Ndis802_11Infrastructure)
++ else if (BssType == Ndis802_11Infrastructure)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_INFRA)
+ {
+@@ -1028,7 +1064,7 @@
+ break;
+ }
+ // save user's policy here, but not change PortCfg.Psm immediately
+- if (PowerMode == Ndis802_11PowerModeCAM)
++ if (PowerMode == Ndis802_11PowerModeCAM)
+ {
+ // clear PSM bit immediately
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+@@ -1037,7 +1073,7 @@
+ pAdapter->PortCfg.WindowsPowerMode = PowerMode;
+ pAdapter->PortCfg.WindowsBatteryPowerMode = PowerMode;
+ }
+- else if (PowerMode == Ndis802_11PowerModeMAX_PSP)
++ else if (PowerMode == Ndis802_11PowerModeMAX_PSP)
+ {
+ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
+ // to exclude certain situations.
+@@ -1048,7 +1084,7 @@
+ pAdapter->PortCfg.RecvDtim = TRUE; // FALSE;
+ pAdapter->PortCfg.DefaultListenCount = 5;
+ }
+- else if (PowerMode == Ndis802_11PowerModeFast_PSP)
++ else if (PowerMode == Ndis802_11PowerModeFast_PSP)
+ {
+ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
+ // to exclude certain situations.
+@@ -1236,6 +1272,8 @@
+ Status = -EOPNOTSUPP;
+ break;
+ }
++ if(StateMachineTouched) // Upper layer sent a MLME-related operations
++ MlmeHandler(pAdapter);
+
+ return Status;
+ }
+@@ -1305,8 +1343,8 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_BSSID_LIST (%d BSS returned)\n",pAdapter->PortCfg.BssTab.BssNr);
+ // Claculate total buffer size required
+ BssBufSize = sizeof(ULONG);
+-
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ // Align pointer to 4 bytes boundary.
+ Padding = 4 - (pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen & 0x0003);
+@@ -1328,13 +1366,13 @@
+ memset(pBuf, 0, BssBufSize);
+ pBssidList = (PNDIS_802_11_BSSID_LIST_EX) pBuf;
+ pBssidList->NumberOfItems = pAdapter->PortCfg.BssTab.BssNr;
+-
++
+ // Calculate total buffer length
+ BssLen = 4; // Consist of NumberOfItems
+ // Point to start of NDIS_WLAN_BSSID_EX
+ // pPtr = pBuf + sizeof(ULONG);
+ pPtr = (PUCHAR) &pBssidList->Bssid[0];
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ pBss = (PNDIS_WLAN_BSSID_EX) pPtr;
+ memcpy(&pBss->MacAddress, &pAdapter->PortCfg.BssTab.BssEntry[i].Bssid, ETH_ALEN);
+@@ -1348,7 +1386,7 @@
+ memcpy(pBss->Ssid.Ssid, pAdapter->PortCfg.BssTab.BssEntry[i].Ssid, pAdapter->PortCfg.BssTab.BssEntry[i].SsidLen);
+ }
+ pBss->Privacy = pAdapter->PortCfg.BssTab.BssEntry[i].Privacy;
+- pBss->Rssi = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - pAdapter->PortCfg.RssiToDbm;
++ pBss->Rssi = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - pAdapter->PortCfg.RssiToDbm;
+ pBss->NetworkTypeInUse = Ndis802_11DS;
+ pBss->Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);
+ pBss->Configuration.BeaconPeriod = pAdapter->PortCfg.BssTab.BssEntry[i].BeaconPeriod;
+@@ -1356,7 +1394,7 @@
+
+ MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.BssTab.BssEntry[i].Channel, pBss->Configuration.DSConfig);
+
+- if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == BSS_INFRA)
++ if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == BSS_INFRA)
+ pBss->InfrastructureMode = Ndis802_11Infrastructure;
+ else
+ pBss->InfrastructureMode = Ndis802_11IBSS;
+@@ -1370,12 +1408,12 @@
+ {
+ pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs);
+ memcpy(pBss->IEs, &pAdapter->PortCfg.BssTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs));
+- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs);
++ pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs);
+ }
+ else
+ {
+ pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen;
+- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs);
++ pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs);
+ memcpy(pBss->IEs, &pAdapter->PortCfg.BssTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs));
+ memcpy(pPtr, pAdapter->PortCfg.BssTab.BssEntry[i].VarIEs, pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen);
+ pPtr += pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen;
+@@ -1385,7 +1423,7 @@
+ if (Padding == 4)
+ Padding = 0;
+ pPtr += Padding;
+- pBss->Length = sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen + Padding;
++ pBss->Length = sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen + Padding;
+ BssLen += pBss->Length;
+ }
+ wrq->u.data.length = BssLen;
+@@ -1451,11 +1489,11 @@
+ wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION);
+ if(copy_to_user(wrq->u.data.pointer, &Configuration, wrq->u.data.length))
+ Status = -EFAULT;
+- DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,Channel=%d) \n",
++ DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,Channel=%d) \n",
+ Configuration.BeaconPeriod, Configuration.ATIMWindow, pAdapter->PortCfg.Channel);
+ break;
+ case OID_802_11_RSSI:
+- ulInfo = pAdapter->PortCfg.LastRssi - pAdapter->PortCfg.RssiToDbm;
++ ulInfo = pAdapter->PortCfg.LastRssi - pAdapter->PortCfg.RssiToDbm;
+ wrq->u.data.length = sizeof(ulInfo);
+ if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))
+ Status = -EFAULT;
+@@ -1484,7 +1522,7 @@
+ Statistics.FrameDuplicateCount.QuadPart = pAdapter->WlanCounters.FrameDuplicateCount.QuadPart;
+ Statistics.ReceivedFragmentCount.QuadPart = pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart;
+ Statistics.MulticastReceivedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastReceivedFrameCount.QuadPart;
+-#ifdef RT2500_DBG
++#ifdef RT2500_DBG
+ Statistics.FCSErrorCount = pAdapter->RalinkCounters.RealFcsErrCount;
+ #else
+ Statistics.FCSErrorCount.QuadPart = pAdapter->WlanCounters.FCSErrorCount.QuadPart;
+@@ -1611,8 +1649,8 @@
+ }
+
+ INT RT2500_ioctl(
+- IN struct net_device *net_dev,
+- IN OUT struct ifreq *rq,
++ IN struct net_device *net_dev,
++ IN OUT struct ifreq *rq,
+ IN INT cmd)
+ {
+ PRTMP_ADAPTER pAdapter= net_dev->priv;
+@@ -1624,16 +1662,17 @@
+ NDIS_802_11_RTS_THRESHOLD RtsThresh;
+ NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
+ NDIS_802_11_MAC_ADDRESS Bssid;
+- INT Status = NDIS_STATUS_SUCCESS;
++ INT Status = NDIS_STATUS_SUCCESS;
+ USHORT subcmd;
+ BOOLEAN StateMachineTouched = FALSE;
+ int i, chan = -1, index = 0, len = 0;
++ ULONG Length;
+
+
+ switch(cmd) {
+ case SIOCGIWNAME:
+ DBGPRINT(RT_DEBUG_TRACE, "IOCTL::SIOCGIWNAME\n");
+- strcpy(wrq->u.name, "RT2500 Wireless"); //Less then 16 bytes.
++ strcpy(wrq->u.name, "RT2500 Wireless"); //Less then 16 bytes.
+ break;
+ case SIOCSIWESSID: //Set ESSID
+ erq = &wrq->u.essid;
+@@ -1646,30 +1685,36 @@
+ break;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
++ Length = erq->length - 1; // minux null character.
++#else
++ Length = erq->length;
++#endif
++
+ if(RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ {
+- if (copy_from_user(Ssid.Ssid, erq->pointer, (erq->length - 1)))
++ if (copy_from_user(Ssid.Ssid, erq->pointer, Length))
+ {
+ Status = -EFAULT;
+ break;
+ }
+- Ssid.SsidLength = erq->length - 1; //minus null character.
++ Ssid.SsidLength = Length;
+ }else{
+ // This SEEMS to be needed to actual work RobinC when iface
+ // is down
+- if (copy_from_user(pAdapter->PortCfg.Ssid, erq->pointer, (erq->length - 1)))
++ if (copy_from_user(pAdapter->PortCfg.Ssid, erq->pointer, Length))
+ {
+ Status = -EFAULT;
+ break;
+ }
+- pAdapter->PortCfg.SsidLen = erq->length - 1; //minus null character.
++ pAdapter->PortCfg.SsidLen = Length;
+
+- memcpy(pAdapter->Mlme.CntlAux.Ssid, pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);
+- pAdapter->Mlme.CntlAux.SsidLen = pAdapter->PortCfg.SsidLen;
++ memcpy(pAdapter->Mlme.CntlAux.Ssid, pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);
++ pAdapter->Mlme.CntlAux.SsidLen = pAdapter->PortCfg.SsidLen;
+ }
+ }
+ else
+- Ssid.SsidLength = 0; // ANY ssid
++ Ssid.SsidLength = 0; // ANY ssid
+
+ pSsid = &Ssid;
+
+@@ -1686,10 +1731,10 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid
+@@ -1708,7 +1753,7 @@
+ Status = -EFAULT;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCGIWESSID (Len=%d, ssid=%s...)\n", erq->length, pAdapter->PortCfg.Ssid);
+ break;
+- case SIOCGIWNWID: // get network id
++ case SIOCGIWNWID: // get network id
+ Status = -EOPNOTSUPP;
+ break;
+ case SIOCSIWNWID: // set network id (the cell)
+@@ -1717,14 +1762,14 @@
+ case SIOCSIWFREQ: // set channel/frequency (Hz)
+ frq = &wrq->u.freq;
+ if((frq->e == 0) && (frq->m <= 1000))
+- chan = frq->m; // Setting by channel number
++ chan = frq->m; // Setting by channel number
+ else
+- MAP_KHZ_TO_CHANNEL_ID( (frq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G,
++ MAP_KHZ_TO_CHANNEL_ID( (frq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G,
+ pAdapter->PortCfg.IbssConfig.Channel = chan;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->PortCfg.IbssConfig.Channel);
+ if(RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE) && (pAdapter->PortCfg.BssType == BSS_MONITOR || pAdapter->PortCfg.BssType == BSS_INDEP))
+ {
+- pAdapter->PortCfg.Channel = chan;
++ pAdapter->PortCfg.Channel = chan;
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+ }
+@@ -1822,7 +1867,7 @@
+ if(wrq->u.encoding.pointer)
+ {
+ wrq->u.encoding.length = pAdapter->PortCfg.SharedKey[index].KeyLen;
+- if(copy_to_user(wrq->u.encoding.pointer,
++ if(copy_to_user(wrq->u.encoding.pointer,
+ pAdapter->PortCfg.SharedKey[index].Key,
+ pAdapter->PortCfg.SharedKey[index].KeyLen))
+ Status = -EFAULT;
+@@ -1843,14 +1888,15 @@
+ len = WEP_LARGE_KEY_LEN;
+
+ memset(pAdapter->PortCfg.SharedKey[index].Key, 0x00, MAX_LEN_OF_KEY);
+- if(copy_from_user(pAdapter->PortCfg.SharedKey[index].Key,
++ if(copy_from_user(pAdapter->PortCfg.SharedKey[index].Key,
+ wrq->u.encoding.pointer, len)){
+ Status = -EINVAL;
+ break;
+ }
+ pAdapter->PortCfg.SharedKey[index].KeyLen = len <= WEP_SMALL_KEY_LEN ? WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN;
+ }
+- pAdapter->PortCfg.DefaultKeyId = (UCHAR) index;
++ else
++ pAdapter->PortCfg.DefaultKeyId = (UCHAR) index;
+ if (wrq->u.encoding.flags & IW_ENCODE_DISABLED)
+ pAdapter->PortCfg.WepStatus = Ndis802_11WEPDisabled;
+ else
+@@ -1858,7 +1904,7 @@
+
+ if (wrq->u.encoding.flags & IW_ENCODE_RESTRICTED)
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeShared;
+- if (wrq->u.encoding.flags & IW_ENCODE_OPEN)
++ if (wrq->u.encoding.flags & IW_ENCODE_OPEN)
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen;
+
+ if(pAdapter->PortCfg.WepStatus == Ndis802_11WEPDisabled)
+@@ -1905,11 +1951,11 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID,
+ sizeof(NDIS_802_11_MAC_ADDRESS),
+ (VOID *)&Bssid);
+ Status = NDIS_STATUS_SUCCESS;
+@@ -1928,13 +1974,13 @@
+ BssType = Ndis802_11Infrastructure;
+ wrq->u.mode = IW_MODE_INFRA;
+ }
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ else if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+ {
+ BssType = Ndis802_11Monitor;
+ wrq->u.mode = IW_MODE_MONITOR;
+ }
+-#endif
++#endif
+ else
+ {
+ BssType = Ndis802_11AutoUnknown;
+@@ -1963,7 +2009,7 @@
+ pAdapter->PortCfg.BssType = BSS_INFRA;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWMODE (INFRA)\n");
+ }
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ else if (wrq->u.mode == IW_MODE_MONITOR)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_MONITOR)
+@@ -1974,7 +2020,7 @@
+ pAdapter->PortCfg.BssType = BSS_MONITOR;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWMODE (MONITOR)\n");
+ }
+-#endif
++#endif
+ else
+ {
+ Status = -ENOSYS;
+@@ -1999,7 +2045,7 @@
+ }
+ else
+ {
+- pAdapter->net_dev->type = 1;
++ pAdapter->net_dev->type = 1;
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
+ }
+ }
+@@ -2013,23 +2059,23 @@
+ Status = -EOPNOTSUPP;
+ break;
+ case SIOCGIWTXPOW: //get transmit power (dBm)
+-#if WIRELESS_EXT >= 17
++#if WIRELESS_EXT >= 17
+ // Krellan: Get TxPower in dBm now, not percentage
+ {
+ ULONG R3;
+ UCHAR Channel = pAdapter->PortCfg.Channel;
+-
++
+ // Krellan: This code comes from AsicSwitchChannel(),
+ // as we must know the channel we are currently on,
+ // in order to get the correct EEPROM-recommended
+ // value to establish as 0 dBm.
+- if (Channel <= 14)
++ if (Channel <= 14)
+ R3 = pAdapter->PortCfg.ChannelTxPower[Channel - 1];
+- else
++ else
+ R3 = pAdapter->PortCfg.ChannelTxPower[0];
+
+ if (R3 > 31) R3 = 31;
+-
++
+ wrq->u.txpower.value = pAdapter->PortCfg.TxPowerDriver - R3;
+ wrq->u.txpower.flags = IW_TXPOW_DBM;
+ wrq->u.txpower.fixed = !(pAdapter->PortCfg.TxPowerAuto);
+@@ -2061,7 +2107,7 @@
+ else
+ {
+ Value = wrq->u.txpower.value;
+-
++
+ if (Value < MIN_TXPOWER_DBM || Value > MAX_TXPOWER_DBM)
+ {
+ Status = -EINVAL;
+@@ -2107,14 +2153,14 @@
+ break;
+
+ case RTPRIV_IOCTL_SET:
+- {
++ {
+ char *this_char;
+ char *value;
+
+ if( !access_ok(VERIFY_READ, wrq->u.data.pointer, wrq->u.data.length) )
+ break;
+
+- while ((this_char = strsep((char**)&wrq->u.data.pointer, ",")) != NULL)
++ while ((this_char = strsep((char**)&wrq->u.data.pointer, ",")) != NULL)
+ {
+ if (!*this_char)
+ continue;
+@@ -2127,8 +2173,8 @@
+
+ for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++)
+ {
+- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
+- {
++ if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
++ {
+ if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value))
+ { //FALSE:Set private failed then return Invalid argument
+ Status = -EINVAL;
+@@ -2161,8 +2207,12 @@
+ break;
+ #endif
+
+- case RTPRIV_IOCTL_RFMONTX:
+- Status = RTMPIoctlRFMONTX(pAdapter, wrq);
++ case RTPRIV_IOCTL_SET_RFMONTX:
++ Status = RTMPIoctlSetRFMONTX(pAdapter, wrq);
++ break;
++
++ case RTPRIV_IOCTL_GET_RFMONTX:
++ Status = RTMPIoctlGetRFMONTX(pAdapter, wrq);
+ break;
+
+ default:
+@@ -2181,7 +2231,7 @@
+ UCHAR BCAST[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Add WPA key process
+
+@@ -2193,7 +2243,7 @@
+ NDIS_SUCCESS Add key successfully
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPWPAAddKeyProc(
+@@ -2228,7 +2278,7 @@
+ // 1. KeyIdx must be 0, otherwise, return NDIS_STATUS_INVALID_DATA
+ if (KeyIdx != 0)
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // 2. Check bTx, it must be true, otherwise, return NDIS_STATUS_INVALID_DATA
+ if (bTxKey == FALSE)
+ return(NDIS_STATUS_FAILURE);
+@@ -2236,7 +2286,7 @@
+ // 3. If BSSID is not all 0xff, return NDIS_STATUS_INVALID_DATA
+ if (NdisEqualMemory(pKey->BSSID, BCAST, 6))
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // 4. Selct RxMic / TxMic based on Supp / Authenticator
+ if (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPANone)
+ {
+@@ -2277,16 +2327,16 @@
+ // 6. Check RxTsc
+ if (bKeyRSC == TRUE)
+ {
+- memcpy(&pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, &pKey->KeyRSC, 6);
++ memcpy(&pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, &pKey->KeyRSC, 6);
+ }
+ else
+ {
+- memset(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, 0, 6);
++ memset(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, 0, 6);
+ }
+
+ // 7. Copy information into Pairwise Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.PairwiseKey[PairwiseIdx].KeyLen = 16;
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].KeyLen = 16;
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key, &pKey->KeyMaterial, 16);
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic, pRxMic, 8);
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic, pTxMic, 8);
+@@ -2300,36 +2350,43 @@
+ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxTsc[5] = 0;
+ Status = NDIS_STATUS_SUCCESS;
+
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Key = ");
++#ifdef RT2500_DBG
++ printk("Pairwise Key (Index-%d) = ", PairwiseIdx);
+ for (i = 0; i < 16; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Rx MIC Key = ");
++ printk("\n");
++ printk("PairwiseKey Rx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Tx MIC Key = ");
++ printk("\n");
++ printk("PairwiseKey Tx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP RxTSC = ");
++ printk("\n");
++ printk("RxTSC = ");
+ for (i = 0; i < 6; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
+- pKey->BSSID[0],pKey->BSSID[1],pKey->BSSID[2],pKey->BSSID[3],pKey->BSSID[4],pKey->BSSID[5]);
+-
++ printk("\n");
++ printk("BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
++ pKey->BSSID[0], pKey->BSSID[1], pKey->BSSID[2],
++ pKey->BSSID[3], pKey->BSSID[4], pKey->BSSID[5]);
++#endif
+ }
+ else // Group Key
+ {
++ DBGPRINT(RT_DEBUG_TRACE, "Ready to set Group key\n");
+ // 1. Check BSSID, if not current BSSID or Bcast, return NDIS_STATUS_INVALID_DATA
+ if ((!NdisEqualMemory(&pKey->BSSID, &BCAST, 6)) &&
+ (!NdisEqualMemory(&pKey->BSSID, &pAdapter->PortCfg.Bssid, 6)))
+@@ -2374,7 +2431,7 @@
+
+ // 6. Copy information into Group Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.GroupKey[KeyIdx].KeyLen = 16;
++ pAdapter->PortCfg.GroupKey[KeyIdx].KeyLen = 16;
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].Key, &pKey->KeyMaterial, 16);
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].RxMic, pRxMic, 8);
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].TxMic, pTxMic, 8);
+@@ -2397,33 +2454,35 @@
+ memcpy(pAdapter->PortCfg.SharedKey[KeyIdx].Key, &pKey->KeyMaterial, pKey->KeyLength);
+ }
+
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Key = ");
++#ifdef RT2500_DBG
++ printk("GroupKey Key (Index-%d) = ", KeyIdx);
+ for (i = 0; i < 16; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].Key[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].Key[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Rx MIC Key = ");
++ printk("\n");
++ printk("GroupKey Rx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxMic[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Tx MIC Key = ");
++ printk("\n");
++ printk("GroupKey Tx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].TxMic[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].TxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP RxTSC = ");
++ printk("\n");
++ printk("RxTSC = ");
+ for (i = 0; i < 6; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxTsc[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxTsc[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
+- pKey->BSSID[0],pKey->BSSID[1],pKey->BSSID[2],pKey->BSSID[3],pKey->BSSID[4],pKey->BSSID[5]);
+-
++ printk("\n");
++ printk("BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
++ pKey->BSSID[0], pKey->BSSID[1], pKey->BSSID[2],
++ pKey->BSSID[3], pKey->BSSID[4], pKey->BSSID[5]);
++#endif
+ }
+ return (Status);
+ }
+@@ -2499,7 +2558,7 @@
+ break;
+ }
+ }
+-
++
+ }
+ // c. If no pairwise supported, delete Group Key 0.
+ // The will be false since we do support pairwise keys.
+@@ -2545,7 +2604,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPWPARemoveAllKeys(
+@@ -2562,7 +2621,7 @@
+ {
+ pAdapter->PortCfg.PairwiseKey[i].KeyLen = 0;
+ }
+-
++
+ for (i = 0; i < GROUP_KEY_NO; i++)
+ {
+ pAdapter->PortCfg.GroupKey[i].KeyLen = 0;
+@@ -2578,7 +2637,7 @@
+ Arguments:
+ pAdapter Pointer to our adapter
+ phmode
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetPhyMode(
+@@ -2586,7 +2645,7 @@
+ IN ULONG phymode)
+ {
+ INT i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"RTMPSetPhyMode(=%d)\n", phymode);
+
+ // the selected phymode must be supported by the RF IC encoded in E2PROM
+@@ -2611,7 +2670,7 @@
+ if (i == pAdapter->PortCfg.ChannelListNum)
+ pAdapter->PortCfg.IbssConfig.Channel = FirstChannel(pAdapter);
+ pAdapter->PortCfg.Channel = pAdapter->PortCfg.IbssConfig.Channel;
+-
++
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+
+@@ -2859,7 +2918,7 @@
+ // Changing DesiredRate may affect the MAX TX rate we used to TX frames out
+ MlmeUpdateTxRates(pAdapter, FALSE);
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Country Region
+@@ -2868,7 +2927,7 @@
+ ==========================================================================
+ */
+ INT Set_CountryRegion_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG region;
+@@ -2886,7 +2945,7 @@
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set SSID
+@@ -2895,7 +2954,7 @@
+ ==========================================================================
+ */
+ INT Set_SSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ NDIS_802_11_SSID Ssid, *pSsid=NULL;
+@@ -2904,8 +2963,8 @@
+
+
+ /* Protect against oops if net is down, this will not work with if-preup
+- use iwconfig properly */
+- printk("'iwpriv <dev> set essid' is deprecated, please use 'iwconfg <dev> essid' instead\n");
++ use iwconfig properly */
++ printk("'iwpriv <dev> set essid' is deprecated, please use 'iwconfg <dev> essid' instead\n");
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ return FALSE;
+
+@@ -2916,8 +2975,8 @@
+ Ssid.SsidLength = strlen(arg);
+ pSsid = &Ssid;
+
+-
+-
++
++
+ if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE)
+ {
+ MlmeRestartStateMachine(pAdapter);
+@@ -2925,10 +2984,10 @@
+ }
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid);
+@@ -2944,7 +3003,7 @@
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Wireless Mode
+@@ -2953,26 +3012,24 @@
+ ==========================================================================
+ */
+ INT Set_WirelessMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG WirelessMode;
+ int success = TRUE;
+
+ WirelessMode = simple_strtol(arg, 0, 10);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_WirelessMode_Proc::(=%d)\n", WirelessMode);
+
+ if ((WirelessMode == PHY_11BG_MIXED) || (WirelessMode == PHY_11B) ||
+ (WirelessMode == PHY_11A) || (WirelessMode == PHY_11ABG_MIXED))
+- {
+ RTMPSetPhyMode(pAdapter, WirelessMode);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_WirelessMode_Proc::(=%d)\n", WirelessMode);
+- }
+ else
+ success = FALSE;
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxRate
+@@ -2981,7 +3038,7 @@
+ ==========================================================================
+ */
+ INT Set_TxRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TxRate;
+@@ -2996,7 +3053,7 @@
+ RTMPSetDesiredRates(pAdapter, (LONG) (rate_mapping[TxRate-1] * 1000000));
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set AdhocMode support Rate can or can not exceed 11Mbps against WiFi spec.
+@@ -3005,7 +3062,7 @@
+ ==========================================================================
+ */
+ INT Set_AdhocModeRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG AdhocMode;
+@@ -3017,13 +3074,13 @@
+ else if (AdhocMode == 0)
+ pAdapter->PortCfg.AdhocMode = 0;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_AdhocModeRate_Proc::(AdhocMode=%d)\n", pAdapter->PortCfg.AdhocMode);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Channel
+@@ -3032,7 +3089,7 @@
+ ==========================================================================
+ */
+ INT Set_Channel_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int success = TRUE;
+@@ -3051,7 +3108,32 @@
+
+ return success;
+ }
+-/*
++/*
++ ==========================================================================
++ Description:
++ For Debug information
++ Return:
++ TRUE if all parameters are OK, FALSE otherwise
++ ==========================================================================
++*/
++#ifdef RT2500_DBG
++INT Set_Debug_Proc(
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR arg)
++
++{
++ DBGPRINT(RT_DEBUG_TRACE, "**************************************************************\n");
++ DBGPRINT(RT_DEBUG_TRACE, "==> Set_Debug_Proc arg=%s\n", arg);
++ //To do here.
++
++ rt2500_setdbg(simple_strtoul(arg, 0, 0));
++
++ DBGPRINT(RT_DEBUG_TRACE, "<== Set_Debug_Proc\n");
++ DBGPRINT(RT_DEBUG_TRACE, "**************************************************************\n");
++ return TRUE;
++}
++#endif
++/*
+ ==========================================================================
+ Description:
+ Set 11B/11G Protection
+@@ -3060,7 +3142,7 @@
+ ==========================================================================
+ */
+ INT Set_BGProtection_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+
+ {
+@@ -3074,15 +3156,15 @@
+ break;
+ case 2: //Always OFF
+ pAdapter->PortCfg.UseBGProtection = 2;
+- break;
+- default: //Invalid argument
++ break;
++ default: //Invalid argument
+ return FALSE;
+ }
+ DBGPRINT(RT_DEBUG_TRACE, "Set_BGProtection_Proc::(BGProtection=%d)\n", pAdapter->PortCfg.UseBGProtection);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set StaWithEtherBridge function on/off
+@@ -3091,7 +3173,7 @@
+ ==========================================================================
+ */
+ INT Set_StaWithEtherBridge_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+
+ {
+@@ -3103,14 +3185,14 @@
+ case 1: //On
+ pAdapter->PortCfg.StaWithEtherBridge.Enable = TRUE;
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ return FALSE;
+ }
+ DBGPRINT(RT_DEBUG_TRACE, "Set_StaWithEtherBridge_Proc::(StaWithEtherBridge=%d)\n", pAdapter->PortCfg.StaWithEtherBridge.Enable);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxPreamble
+@@ -3119,7 +3201,7 @@
+ ==========================================================================
+ */
+ INT Set_TxPreamble_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ RT_802_11_PREAMBLE Preamble;
+@@ -3138,7 +3220,7 @@
+ pAdapter->PortCfg.WindowsTxPreamble = Preamble;
+ MlmeSetTxPreamble(pAdapter, Rt802_11PreambleLong);
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ return FALSE;
+ }
+
+@@ -3146,7 +3228,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set RTS Threshold
+@@ -3155,15 +3237,15 @@
+ ==========================================================================
+ */
+ INT Set_RTSThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+-
+-
++
++
+ {
+ NDIS_802_11_RTS_THRESHOLD RtsThresh;
+
+- printk("'iwpriv <dev> set RTSThreshold' is deprecated, please use 'iwconfg <dev> rts' instead\n");
+-
++ printk("'iwpriv <dev> set RTSThreshold' is deprecated, please use 'iwconfg <dev> rts' instead\n");
++
+ RtsThresh = simple_strtol(arg, 0, 10);
+
+ if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))
+@@ -3176,7 +3258,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAdapter->PortCfg.RtsThreshold);
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Fragment Threshold
+@@ -3185,14 +3267,14 @@
+ ==========================================================================
+ */
+ INT Set_FragThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
+
+- printk("'iwpriv <dev> set FragThreshold' is deprecated, please use 'iwconfg <dev> frag' instead\n");
+-
+-
++ printk("'iwpriv <dev> set FragThreshold' is deprecated, please use 'iwconfg <dev> frag' instead\n");
++
++
+ FragThresh = simple_strtol(arg, 0, 10);
+
+ if ( (FragThresh >= MIN_FRAG_THRESHOLD) && (FragThresh <= MAX_FRAG_THRESHOLD))
+@@ -3200,7 +3282,7 @@
+ else if (FragThresh == 0)
+ pAdapter->PortCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ if (pAdapter->PortCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)
+ pAdapter->PortCfg.bFragmentZeroDisable = TRUE;
+@@ -3211,7 +3293,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxBurst
+@@ -3220,7 +3302,7 @@
+ ==========================================================================
+ */
+ INT Set_TxBurst_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TxBurst;
+@@ -3232,13 +3314,13 @@
+ else if (TxBurst == 0)
+ pAdapter->PortCfg.EnableTxBurst = FALSE;
+ else
+- return FALSE; //Invalid argument
+-
++ return FALSE; //Invalid argument
++
+ DBGPRINT(RT_DEBUG_TRACE, "Set_TxBurst_Proc::(TxBurst=%d)\n", pAdapter->PortCfg.EnableTxBurst);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TurboRate Enable or Disable
+@@ -3247,7 +3329,7 @@
+ ==========================================================================
+ */
+ INT Set_TurboRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TurboRate;
+@@ -3259,13 +3341,13 @@
+ else if (TurboRate == 0)
+ pAdapter->PortCfg.EnableTurboRate = FALSE;
+ else
+- return FALSE; //Invalid argument
+-
++ return FALSE; //Invalid argument
++
+ DBGPRINT(RT_DEBUG_TRACE, "Set_TurboRate_Proc::(TurboRate=%d)\n", pAdapter->PortCfg.EnableTurboRate);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Short Slot Time Enable or Disable
+@@ -3274,7 +3356,7 @@
+ ==========================================================================
+ */
+ INT Set_ShortSlot_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG ShortSlot;
+@@ -3286,14 +3368,14 @@
+ else if (ShortSlot == 0)
+ pAdapter->PortCfg.UseShortSlotTime = FALSE;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAdapter->PortCfg.UseShortSlotTime);
+
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Network Type(Infrastructure/Adhoc mode)
+@@ -3302,17 +3384,17 @@
+ ==========================================================================
+ */
+ INT Set_NetworkType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+
+- printk("'iwpriv <dev> set NetworkType' is deprecated, please use 'iwconfg <dev> mode' instead\n");
+-
++ printk("'iwpriv <dev> set NetworkType' is deprecated, please use 'iwconfg <dev> mode' instead\n");
++
+ if (strcmp(arg, "Adhoc") == 0)
+ pAdapter->PortCfg.BssType = BSS_INDEP;
+ else //Default Infrastructure mode
+ pAdapter->PortCfg.BssType = BSS_INFRA;
+-
++
+ // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key
+ pAdapter->PortCfg.WpaState = SS_NOTUSE;
+
+@@ -3321,7 +3403,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Authentication mode
+@@ -3330,7 +3412,7 @@
+ ==========================================================================
+ */
+ INT Set_AuthMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ if ((strcmp(arg, "OPEN") == 0) || (strcmp(arg, "open") == 0))
+@@ -3344,7 +3426,7 @@
+ else if ((strcmp(arg, "WPANONE") == 0) || (strcmp(arg, "wpanone") == 0))
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeWPANone;
+ else
+- return FALSE;
++ return FALSE;
+
+ pAdapter->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+
+@@ -3353,7 +3435,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Encryption Type
+@@ -3362,7 +3444,7 @@
+ ==========================================================================
+ */
+ INT Set_EncrypType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ if ((strcmp(arg, "NONE") == 0) || (strcmp(arg, "none") == 0))
+@@ -3380,7 +3462,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Default Key ID
+@@ -3389,24 +3471,24 @@
+ ==========================================================================
+ */
+ INT Set_DefaultKeyID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG KeyIdx;
+-
+- printk("'iwpriv <dev> set DefaultKeyID' is deprecated, please use 'iwconfg <dev> key' instead\n");
+-
++
++ printk("'iwpriv <dev> set DefaultKeyID' is deprecated, please use 'iwconfg <dev> key' instead\n");
++
+ KeyIdx = simple_strtol(arg, 0, 10);
+ if((KeyIdx >= 1 ) && (KeyIdx <= 4))
+ pAdapter->PortCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1 );
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_DefaultKeyID_Proc::(DefaultKeyID=%d)\n", pAdapter->PortCfg.DefaultKeyId);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY1
+@@ -3415,22 +3497,22 @@
+ ==========================================================================
+ */
+ INT Set_Key1_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key1' is deprecated, please use 'iwconfg <dev> key [1] ' instead\n");
+-
++ printk("'iwpriv <dev> set Key1' is deprecated, please use 'iwconfg <dev> key [1] ' instead\n");
++
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+ {
+ case 5: //wep 40 Ascii type
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
++ memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 10: //wep 40 Hex type
+ for(i=0; i < KeyLen; i++)
+@@ -3440,12 +3522,12 @@
+ }
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+ AtoH(arg, pAdapter->PortCfg.SharedKey[0].Key, KeyLen / 2);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
+ break;
+ case 13: //wep 104 Ascii type
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
++ memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+ for(i=0; i < KeyLen; i++)
+@@ -3455,16 +3537,16 @@
+ }
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+ AtoH(arg, pAdapter->PortCfg.SharedKey[0].Key, KeyLen / 2);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::Invalid argument (=%s)\n", arg);
++ default: //Invalid argument
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY2
+@@ -3473,15 +3555,15 @@
+ ==========================================================================
+ */
+ INT Set_Key2_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key2' is deprecated, please use 'iwconfg <dev> key [2] ' instead\n");
++ printk("'iwpriv <dev> set Key2' is deprecated, please use 'iwconfg <dev> key [2] ' instead\n");
++
+
+-
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+@@ -3503,7 +3585,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAdapter->PortCfg.SharedKey[1].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[1].Key, arg, KeyLen);
++ memcpy(pAdapter->PortCfg.SharedKey[1].Key, arg, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -3516,14 +3598,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[1].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY3
+@@ -3532,13 +3614,13 @@
+ ==========================================================================
+ */
+ INT Set_Key3_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key3' is deprecated, please use 'iwconfg <dev> key [3] ' instead\n");
++ printk("'iwpriv <dev> set Key3' is deprecated, please use 'iwconfg <dev> key [3] ' instead\n");
+
+ KeyLen = strlen(arg);
+
+@@ -3574,14 +3656,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[2].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key3_Proc::(Key3=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key3_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY4
+@@ -3590,21 +3672,21 @@
+ ==========================================================================
+ */
+ INT Set_Key4_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key4' is deprecated, please use 'iwconfg <dev> key [4] ' instead\n");
+-
++ printk("'iwpriv <dev> set Key4' is deprecated, please use 'iwconfg <dev> key [4] ' instead\n");
++
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+ {
+ case 5: //wep 40 Ascii type
+ pAdapter->PortCfg.SharedKey[3].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[3].Key, arg, KeyLen);
++ memcpy(pAdapter->PortCfg.SharedKey[3].Key, arg, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 10: //wep 40 Hex type
+@@ -3632,14 +3714,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[3].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WPA PSK key
+@@ -3648,7 +3730,7 @@
+ ==========================================================================
+ */
+ INT Set_WPAPSK_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ UCHAR keyMaterial[40];
+@@ -3670,16 +3752,16 @@
+
+ memcpy(&pAdapter->PortCfg.PskKey.Key, &keyMaterial, 32);
+ }
+-
++
+ // Use RaConfig as PSK agent.
+ // Start STA supplicant state machine
+ pAdapter->PortCfg.WpaState = SS_START;
+-
++
+ return TRUE;
+ }
+
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WPA NONE key
+@@ -3689,7 +3771,7 @@
+ */
+
+ INT Set_WPANONE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ UCHAR keyMaterial[40];
+@@ -3700,17 +3782,17 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Set failed!!(WPANONE=%s), WPANONE key-string required 8 ~ 64 characters \n", arg);
+ return FALSE;
+ }
+-
++
+ if (strlen(arg) == 64)
+ {
+- AtoH(arg, pAdapter->PortCfg.PskKey.Key, 32);
++ AtoH(arg, keyMaterial, 32);
+ }
+ else
+ {
+ PasswordHash((char *)arg, pAdapter->Mlme.CntlAux.Ssid, pAdapter->Mlme.CntlAux.SsidLen, keyMaterial);
+-
+- memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32);
+ }
++ memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32);
++
+ // Use RaConfig as PSK agent.
+ // Start STA supplicant state machine
+ pAdapter->PortCfg.WpaState = SS_START;
+@@ -3718,7 +3800,7 @@
+ //-----------------------------------------------------------------------------
+ // pasted from "RTMPWPAAddKeyProc(...)"
+ // major on Group Key only.
+-
++
+ // Group Key
+ {
+ // 3. Set as default Tx Key if bTxKey is TRUE
+@@ -3733,10 +3815,10 @@
+
+ // 6. Copy information into Group Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.GroupKey[0].KeyLen = 16;
+- memcpy(pAdapter->PortCfg.GroupKey[0].Key, (PUCHAR)(keyMaterial) + 0, 16);
+- memcpy(pAdapter->PortCfg.GroupKey[0].RxMic, (PUCHAR)(keyMaterial) + 16, 8);
+- memcpy(pAdapter->PortCfg.GroupKey[0].TxMic, (PUCHAR)(keyMaterial) + 16, 8);
++ pAdapter->PortCfg.GroupKey[0].KeyLen = 16;
++ memcpy(pAdapter->PortCfg.GroupKey[0].Key, &keyMaterial[0], 16);
++ memcpy(pAdapter->PortCfg.GroupKey[0].RxMic, &keyMaterial[16], 8);
++ memcpy(pAdapter->PortCfg.GroupKey[0].TxMic, &keyMaterial[16], 8);
+ memcpy(pAdapter->PortCfg.GroupKey[0].BssId, &pAdapter->PortCfg.Bssid, 6);
+
+ // Init TxTsc to one based on WiFi WPA specs
+@@ -3754,7 +3836,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write BBP
+@@ -3766,7 +3848,7 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 bbp ==> read all BBP
+ 2.) iwpriv ra0 bbp 1,2,10,32 ==> raed BBP where ID=1,2,10,32
+ 3.) iwpriv ra0 bbp 1=10,17=3E ==> write BBP R1=0x10, R17=0x3E
+@@ -3887,9 +3969,9 @@
+ kfree(arg);
+ }
+
+-int RTMPIoctlRFMONTX(
++int RTMPIoctlSetRFMONTX(
+ IN PRTMP_ADAPTER pAdapter,
+- IN OUT struct iwreq *wrq)
++ IN struct iwreq *wrq)
+ {
+ char *pvalue;
+ char value;
+@@ -3898,7 +3980,7 @@
+ {
+ pvalue = wrq->u.data.pointer;
+ value = *pvalue;
+-
++
+ if (value == 1)
+ {
+ pAdapter->PortCfg.MallowRFMONTx = TRUE;
+@@ -3912,18 +3994,19 @@
+ else return -EINVAL;
+ }
+
+- /* Display the state. Use "value" to indicate it. */
+- value = pAdapter->PortCfg.MallowRFMONTx == TRUE ? '1'
+- : '0';
+- wrq->u.data.length = sizeof (char);
+-
+- if (copy_to_user (wrq->u.data.pointer, &value, wrq->u.data.length))
+- DBGPRINT (RT_DEBUG_ERROR, "RTMPIoctlRFMONTX - copy to user failure.\n");
++ return 0;
++}
+
++int RTMPIoctlGetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
++ OUT struct iwreq *wrq)
++{
++ *(int *) wrq->u.name = pAdapter->PortCfg.MallowRFMONTx == TRUE ? 1 : 0;
+ return 0;
++
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write MAC
+@@ -3935,13 +4018,13 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 mac 0 ==> read MAC where Addr=0x0
+ 2.) iwpriv ra0 mac 0=12 ==> write MAC where Addr=0x0, value=12
+ ==========================================================================
+ */
+ VOID RTMPIoctlMAC(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq)
+ {
+ char *this_char;
+@@ -3996,7 +4079,7 @@
+ {
+ this_char[4-k+j] = this_char[j];
+ }
+-
++
+ while(k < 4)
+ this_char[3-k++]='0';
+ this_char[4]='\0';
+@@ -4061,7 +4144,7 @@
+ {
+ temp2[8-k+j] = temp2[j];
+ }
+-
++
+ while(k < 8)
+ temp2[7-k++]='0';
+ temp2[8]='\0';
+@@ -4074,7 +4157,7 @@
+ macValue = *temp*256*256*256 + temp[1]*256*256 + temp[2]*256 + temp[3];
+
+ DBGPRINT(RT_DEBUG_TRACE, "macAddr=%02x, macValue=0x%x\n", macAddr, macValue);
+-
++
+ RTMP_IO_WRITE32(pAdapter, macAddr, macValue);
+ sprintf(msg+strlen(msg), "[0x%02X]:%02X ", macAddr, macValue);
+ count++;
+@@ -4093,7 +4176,7 @@
+ wrq->u.data.length = strlen(msg);
+ if(copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
+ DBGPRINT(RT_DEBUG_ERROR, "RTMPIoctlMAC - copy to user failure.\n");
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<==RTMPIoctlMAC\n");
+
+ kfree(msg);
+@@ -4102,7 +4185,7 @@
+
+ #ifdef RALINK_ATE
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write E2PROM
+@@ -4114,13 +4197,13 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 e2p 0 ==> read E2PROM where Addr=0x0
+ 2.) iwpriv ra0 e2p 0=1234 ==> write E2PROM where Addr=0x0, value=1234
+ ==========================================================================
+ */
+ VOID RTMPIoctlE2PROM(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq)
+ {
+ char *this_char;
+@@ -4136,7 +4219,7 @@
+
+ msg = kmalloc(1024, GFP_KERNEL);
+ arg = kmalloc(255, GFP_KERNEL);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==>RTMPIoctlE2PROM\n");
+ memset(msg, 0x00, 1024);
+ memset(arg, 0x00, 255);
+@@ -4178,7 +4261,7 @@
+ {
+ this_char[4-k+j] = this_char[j];
+ }
+-
++
+ while(k < 4)
+ this_char[3-k++]='0';
+ this_char[4]='\0';
+@@ -4186,7 +4269,7 @@
+ if(strlen(this_char) == 4)
+ {
+ AtoH(this_char, temp, 4);
+- eepAddr = *temp*256 + temp[1];
++ eepAddr = *temp*256 + temp[1];
+ if (eepAddr < 0xFFFF)
+ {
+ eepValue = RTMP_EEPROM_READ16(pAdapter, eepAddr);
+@@ -4243,7 +4326,7 @@
+ {
+ temp2[4-k+j] = temp2[j];
+ }
+-
++
+ while(k < 4)
+ temp2[3-k++]='0';
+ temp2[4]='\0';
+@@ -4255,7 +4338,7 @@
+ eepValue = *temp*256 + temp[1];
+
+ DBGPRINT(RT_DEBUG_TRACE, "eepAddr=%02x, eepValue=0x%x\n", eepAddr, eepValue);
+-
++
+ RTMP_EEPROM_WRITE16(pAdapter, eepAddr, eepValue);
+ sprintf(msg+strlen(msg), "[0x%02X]:%02X ", eepAddr, eepValue);
+ count++;
+@@ -4269,18 +4352,19 @@
+ if(strlen(msg) == 1)
+ sprintf(msg+strlen(msg), "===>Error command format!");
+
+- // Copy the information into the user buffer
+- DBGPRINT(RT_DEBUG_TRACE, "copy to user [msg=%s]\n", *msg);
++ // Copy the information into the user buffer
++ DBGPRINT(RT_DEBUG_TRACE, "copy to user [msg=%s]\n", *msg);
+ wrq->u.data.length = strlen(msg);
+- copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
+-
++ if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
++ DBGPRINT(RT_DEBUG_ERROR, "RTMPIoctlE2PROM - copy to user failure.\n");
++
+ DBGPRINT(RT_DEBUG_TRACE, "<==RTMPIoctlE2PROM\n");
+
+ kfree(msg);
+ kfree(arg);
+ }
+
+-UCHAR TempletFrame[24] = {0x08,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; // 802.11 MAC Header, Type:Data, Length:24bytes
++UCHAR TempletFrame[24] = {0x08,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; // 802.11 MAC Header, Type:Data, Length:24bytes
+
+ /*
+ ==========================================================================
+@@ -4297,7 +4381,7 @@
+ ==========================================================================
+ */
+ INT Set_ATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ USHORT BbpData;
+@@ -4305,7 +4389,7 @@
+ PTXD_STRUC pTxD;
+ PUCHAR pDest;
+ UINT i, j;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_Proc (arg = %s)\n", arg);
+
+ mdelay(5);
+@@ -4321,8 +4405,8 @@
+ BbpData = 0;
+ MacData &= 0xFBFFFFFF;
+
+- if (!strcmp(arg, "STASTOP"))
+- {
++ if (!strcmp(arg, "STASTOP"))
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: STASTOP\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4333,11 +4417,11 @@
+ LinkDown(pAdapter);
+ AsicEnableBssSync(pAdapter);
+ netif_stop_queue(pAdapter->net_dev);
+- RTMPStationStop(pAdapter);
++ RTMPStationStop(pAdapter);
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0xffffffff); // Stop Rx
+ }
+- else if (!strcmp(arg, "STASTART"))
+- {
++ else if (!strcmp(arg, "STASTART"))
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: STASTART\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4350,9 +4434,9 @@
+ RTMPStationStart(pAdapter);
+ }
+ else if (!strcmp(arg, "TXCONT")) // Continuous Tx
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: TXCONT\n");
+-
++
+ pAdapter->ate.Mode = ATE_TXCONT;
+
+ BbpData |= 0x80;
+@@ -4427,7 +4511,7 @@
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+ }
+ else if (!strcmp(arg, "TXFRAME")) // Tx Frames --------------------------------------
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: TXFRAME(Count=%d)\n", pAdapter->ate.TxCount);
+ pAdapter->ate.Mode = ATE_TXFRAME;
+
+@@ -4435,7 +4519,7 @@
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, 63, BbpData);
+
+ pAdapter->ate.TxDoneCount = 0;
+-
++
+ for (i = 0; (i < TX_RING_SIZE) && (i < pAdapter->ate.TxCount); i++)
+ {
+ pTxD = (PTXD_STRUC)pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+@@ -4467,7 +4551,7 @@
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+ }
+ else if (!strcmp(arg, "RXFRAME")) // Rx Frames --------------------------------------
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: RXFRAME\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4475,23 +4559,23 @@
+
+ pAdapter->ate.Mode = ATE_RXFRAME;
+ pAdapter->ate.TxDoneCount = pAdapter->ate.TxCount;
+-
++
+ RTMP_IO_WRITE32(pAdapter, TXCSR0, 0x08); // Abort Tx
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x56); // Start Rx
+ }
+ else
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: Invalid arg!\n");
+ return FALSE;
+ }
+
+ mdelay(5);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_Proc\n");
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR1=DA for TxFrames Return:
+@@ -4499,21 +4583,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_DA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_DA_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr1[i++], 2);
+@@ -4521,14 +4605,14 @@
+
+ if(i != 6)
+ return FALSE; //Invalid
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr1[0], pAdapter->ate.Addr1[1], pAdapter->ate.Addr1[2], pAdapter->ate.Addr1[3], pAdapter->ate.Addr1[4], pAdapter->ate.Addr1[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_DA_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR2=SA for TxFrames Return:
+@@ -4536,21 +4620,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_SA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_SA_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr2[i++], 2);
+@@ -4561,11 +4645,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr2[0], pAdapter->ate.Addr2[1], pAdapter->ate.Addr2[2], pAdapter->ate.Addr2[3], pAdapter->ate.Addr2[4], pAdapter->ate.Addr2[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_SA_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR3=BSSID for TxFrames Return:
+@@ -4573,21 +4657,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_BSSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_BSSID_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr3[i++], 2);
+@@ -4598,11 +4682,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr3[0], pAdapter->ate.Addr3[1], pAdapter->ate.Addr3[2], pAdapter->ate.Addr3[3], pAdapter->ate.Addr3[4], pAdapter->ate.Addr3[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_BSSID_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Channel Return:
+@@ -4610,11 +4694,11 @@
+ ==========================================================================
+ */
+ INT Set_ATE_CHANNEL_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_CHANNEL_Proc (arg = %s)\n", arg);
+-
++
+ pAdapter->ate.Channel = simple_strtol(arg, 0, 10);
+ if((pAdapter->ate.Channel < 1) || (pAdapter->ate.Channel > 14))
+ {
+@@ -4623,11 +4707,11 @@
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_CHANNEL_Proc (ATE Channel = %d)\n", pAdapter->ate.Channel);
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Power Return:
+@@ -4635,14 +4719,14 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_POWER_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG R3;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_POWER_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxPower = simple_strtol(arg, 0, 10);
+
+ if(pAdapter->ate.TxPower >= 32)
+@@ -4659,11 +4743,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxPower = %d\n", pAdapter->ate.TxPower);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_POWER_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Length Return:
+@@ -4671,12 +4755,12 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_LENGTH_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_LENGTH_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxLength = simple_strtol(arg, 0, 10);
+
+ if((pAdapter->ate.TxLength < 24) || (pAdapter->ate.TxLength > 1500))
+@@ -4687,11 +4771,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxLength = %d\n", pAdapter->ate.TxLength);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_LENGTH_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Count Return:
+@@ -4699,21 +4783,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_COUNT_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_COUNT_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxCount = simple_strtol(arg, 0, 10);
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxCount = %d\n", pAdapter->ate.TxCount);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_COUNT_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Rate
+@@ -4722,12 +4806,12 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_RATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_RATE_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxRate = simple_strtol(arg, 0, 10);
+
+ if(pAdapter->ate.TxRate > RATE_54)
+@@ -4738,7 +4822,7 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxRate = %d\n", pAdapter->ate.TxRate);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_RATE_Proc\n");
+-
++
+ return TRUE;
+ }
+
+@@ -4758,7 +4842,7 @@
+ RTMPCancelTimer(&pAd->PortCfg.RfTuningTimer);
+ if (pAd->PortCfg.LedMode == LED_MODE_TXRX_ACTIVITY)
+ RTMPCancelTimer(&pAd->PortCfg.LedCntl.BlinkTimer);
+- RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
++ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ DBGPRINT(RT_DEBUG_TRACE, "<== RTMPStationStop\n");
+ }
+
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_init.c rt2500-cvs-2007061011/Module/rtmp_init.c
+--- rt2500-1.1.0-b4/Module/rtmp_init.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_init.c 2007-05-06 11:13:43.000000000 +0200
+@@ -1,40 +1,40 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_init.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 1st Aug 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 1st Aug 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * LuisCorreia 15th Feb 05 Added Yann's patch for radio hw
+ * MarkW 12th Jul 05 Disabled all but CAM Power modes
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -84,9 +84,9 @@
+ // {PSCSR2, 0x00023f20}, // 0xd0
+ {PSCSR2, 0x00020002}, // 0xd0
+ {PSCSR3, 0x00000002}, // 0xd4
+- {TIMECSR, 0x00003f21}, // 0xDC, to slower down our 1-us tick
++ {TIMECSR, 0x00003f21}, // 0xDC, to slower down our 1-us tick
+ {CSR9, 0x00000780}, // 0x24
+- {CSR11, 0x07041483}, // 0x2C, lrc=7, src=4, slot=20us, CWmax=2^8, CWmax=2^3
++ {CSR11, 0x07041483}, // 0x2C, lrc=7, src=4, slot=20us, CWmax=2^8, CWmax=2^3
+ {CSR18, 0x00140000}, // SIFS=10us - TR switch time, PIFS=SIFS+20us
+ {CSR19, 0x016C0028}, // DIFS=SIFS+2*20us, EIFS=364us
+ {CNT3, 0x00000000}, // Backoff_CCA_Th, RX_&_TX_CCA_Th
+@@ -105,17 +105,17 @@
+ {ARTCSR1, 0x1d21252d}, // 0x150, alexsu : OFDM ACK/CTS payload consumed time for 18/12/9/6 mbps
+ {ARTCSR2, 0x1919191d}, // 0x154, alexsu : OFDM ACK/CTS payload consumed time for 54/48/36/24 mbps
+
+- {RXCSR0, 0xffffffff}, // 0x80
++ {RXCSR0, 0xffffffff}, // 0x80
+ {RXCSR3, 0xb3aab3af}, // 0x90. RT2530 BBP 51:RSSI, R42:OFDM rate, R47:CCK SIGNAL
+ {PCICSR, 0x000003b8}, // 0x8c, alexsu : PCI control register
+ {PWRCSR0, 0x3f3b3100}, // 0xC4
+ {GPIOCSR, 0x0000ff00}, // 0x120, GPIO default value
+ {TESTCSR, 0x000000f0}, // 0x138, Test CSR, make sure it's running at normal mode
+- {PWRCSR1, 0x000001ff}, // 0xd8
++ {PWRCSR1, 0x000001ff}, // 0xd8
+ {MACCSR0, 0x00213223}, // 0xE0, Enable Tx dribble mode - 2003/10/22:Gary
+ {MACCSR1, 0x00235518}, // 0xE4, Disable Rx Reset, tx dribble count, 2x30x16 = 960n,
+ {MACCSR2, 0x00000040}, // 0x0134, 64*33ns = 2us
+- {RALINKCSR, 0x9a009a11}, // 0xE8
++ {RALINKCSR, 0x9a009a11}, // 0xE8
+ {CSR7, 0xffffffff}, // 0x1C, Clear all pending interrupt source
+ {LEDCSR, 0x00001E46}, // default both LEDs off
+ {BBPCSR1, 0x82188200}, // for 2560+2522
+@@ -155,7 +155,7 @@
+
+ DBGPRINT(RT_DEBUG_INFO, "--> RTMPAllocDMAMemory\n");
+
+- // 1. Allocate Tx Ring DMA descriptor and buffer memory
++ // 1. Allocate Tx Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -165,14 +165,14 @@
+
+ // Zero init ring descriptors
+ memset(ring, 0, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE));
+-
++
+ // Allocate Ring data DMA blocks
+ ring_data = pci_alloc_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE), &ring_data_dma);
+-
++
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- printk(KERN_ERR DRV_NAME "Could not allocate DMA ring buffer memory.\n");
++ printk(KERN_ERR DRV_NAME "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_txring;
+ }
+
+@@ -185,7 +185,7 @@
+ pAd->TxRing[index].pa_addr = ring_dma;
+ ring += RING_DESCRIPTOR_SIZE;
+ ring_dma += RING_DESCRIPTOR_SIZE;
+-
++
+ // Init Tx DMA buffer
+ pAd->TxRing[index].data_size = TX_BUFFER_SIZE;
+ pAd->TxRing[index].va_data_addr = ring_data;
+@@ -207,7 +207,7 @@
+ index, (unsigned long)pAd->TxRing[index].va_data_addr, (UINT)pAd->TxRing[index].pa_data_addr, pAd->TxRing[index].data_size);
+ }
+
+- // 2. Allocate Prio Ring DMA descriptor and buffer memory
++ // 2. Allocate Prio Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -224,7 +224,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_prioring;
+ }
+
+@@ -259,7 +259,7 @@
+ index, (unsigned long)pAd->PrioRing[index].va_data_addr, (UINT)pAd->PrioRing[index].pa_data_addr, pAd->PrioRing[index].data_size);
+ }
+
+- // 3. Allocate Atim Ring DMA descriptor and buffer memory
++ // 3. Allocate Atim Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -276,7 +276,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_atimring;
+ }
+
+@@ -328,7 +328,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_rxring;
+ }
+
+@@ -386,7 +386,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, RING_DESCRIPTOR_SIZE, ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_beaconring;
+ }
+
+@@ -418,28 +418,28 @@
+
+ err_out_allocate_beaconring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
+ pAd->RxRing[0].va_data_addr, pAd->RxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->RxRing[0].va_addr, pAd->RxRing[0].pa_addr);
+ err_out_allocate_rxring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
+ pAd->AtimRing[0].va_data_addr, pAd->AtimRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->AtimRing[0].va_addr, pAd->AtimRing[0].pa_addr);
+ err_out_allocate_atimring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
+ pAd->PrioRing[0].va_data_addr, pAd->PrioRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->PrioRing[0].va_addr, pAd->PrioRing[0].pa_addr);
+ err_out_allocate_prioring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
+ pAd->TxRing[0].va_data_addr, pAd->TxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+@@ -472,35 +472,35 @@
+ DBGPRINT(RT_DEBUG_INFO, "--> RTMPFreeDMAMemory\n");
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
+ pAd->TxRing[0].va_data_addr, pAd->TxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->TxRing[0].va_addr, pAd->TxRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
+ pAd->PrioRing[0].va_data_addr, pAd->PrioRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->PrioRing[0].va_addr, pAd->PrioRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
+ pAd->AtimRing[0].va_data_addr, pAd->AtimRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->AtimRing[0].va_addr, pAd->AtimRing[0].pa_addr);
+-
++
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
+ pAd->RxRing[0].va_data_addr, pAd->RxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->RxRing[0].va_addr, pAd->RxRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * BEACON_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * BEACON_BUFFER_SIZE),
+ pAd->BeaconRing.va_data_addr, pAd->BeaconRing.pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * RING_DESCRIPTOR_SIZE),
+@@ -582,7 +582,7 @@
+ CSR4_STRUC StaMacReg1;
+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+
+- //
++ //
+ // Read MAC address from CSR3 & CSR4, these CSRs reflects real value
+ // stored with EEPROM.
+ //
+@@ -618,7 +618,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID NICReadEEPROMParameters(
+@@ -637,7 +637,7 @@
+ RTMP_IO_READ32(pAdapter, CSR21, &data);
+
+ if(data & 0x20)
+- pAdapter->EEPROMAddressNum = 6;
++ pAdapter->EEPROMAddressNum = 6;
+ else
+ pAdapter->EEPROMAddressNum = 8;
+
+@@ -655,7 +655,7 @@
+ for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++)
+ {
+ value = RTMP_EEPROM_READ16(pAdapter, EEPROM_BBP_BASE_OFFSET + i*2);
+-
++
+ pAdapter->EEPROMDefaultValue[i] = value;
+ }
+
+@@ -707,13 +707,13 @@
+ // Disable TxAgc if the value is not right
+ if ((pAdapter->PortCfg.ChannelTssiRef[i * 2] == 0xff) ||
+ (pAdapter->PortCfg.ChannelTssiRef[i * 2 + 1] == 0xff))
+- pAdapter->PortCfg.bAutoTxAgc = FALSE;
++ pAdapter->PortCfg.bAutoTxAgc = FALSE;
+ }
+-
++
+ // Tx Tssi delta offset 0x24
+ Power.word = RTMP_EEPROM_READ16(pAdapter, EEPROM_TSSI_DELTA_OFFSET);
+ pAdapter->PortCfg.ChannelTssiDelta = Power.field.Byte0;
+-
++
+ #endif
+
+ //CountryRegion byte offset = 0x35
+@@ -734,11 +734,11 @@
+ pAdapter->PortCfg.RssiToDbm = 0x79;
+ }
+ else
+- {
++ {
+ //pAdapter->PortCfg.R17Dec = 0x79 - Power.field.Byte0;
+ pAdapter->PortCfg.RssiToDbm = Power.field.Byte0;
+ }
+-
++
+
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICReadEEPROMParameters\n");
+ }
+@@ -769,11 +769,11 @@
+ EEPROM_NIC_CONFIG2_STRUC NicConfig2;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--> NICInitAsicFromEEPROM\n");
+-
++
+ for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++)
+ {
+ value = pAdapter->EEPROMDefaultValue[i];
+-
++
+ if((value != 0xFFFF) && (value != 0))
+ {
+ data = value | 0x18000;
+@@ -802,12 +802,12 @@
+ // Tx antenna select
+ if(Antenna.field.TxDefaultAntenna == 1) // Antenna A
+ {
+- TxValue = (TxValue & 0xFC) | 0x00;
++ TxValue = (TxValue & 0xFC) | 0x00;
+ BbpCsr1 = (BbpCsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else if(Antenna.field.TxDefaultAntenna == 2) // Antenna B
+ {
+- TxValue = (TxValue & 0xFC) | 0x02;
++ TxValue = (TxValue & 0xFC) | 0x02;
+ BbpCsr1 = (BbpCsr1 & 0xFFFCFFFC) | 0x00020002;
+ }
+ else // diverity - start from Antenna B
+@@ -818,12 +818,12 @@
+
+ // Rx antenna select
+ if(Antenna.field.RxDefaultAntenna == 1) // Antenna A
+- RxValue = (RxValue & 0xFC) | 0x00;
++ RxValue = (RxValue & 0xFC) | 0x00;
+ else if(Antenna.field.RxDefaultAntenna == 2) // Antenna B
+- RxValue = (RxValue & 0xFC) | 0x02;
++ RxValue = (RxValue & 0xFC) | 0x02;
+ else // Antenna Diversity
+- RxValue = (RxValue & 0xFC) | 0x02;
+-
++ RxValue = (RxValue & 0xFC) | 0x02;
++
+ // RT5222 needs special treatment to swap TX I/Q
+ if (pAdapter->PortCfg.RfType == RFIC_5222)
+ {
+@@ -831,13 +831,13 @@
+ TxValue |= 0x04; // TX I/Q flip
+ }
+ // RT2525E need to flip TX I/Q but not RX I/Q
+- else if (pAdapter->PortCfg.RfType == RFIC_2525E)
++ else if (pAdapter->PortCfg.RfType == RFIC_2525E)
+ {
+ BbpCsr1 |= 0x00040004;
+ TxValue |= 0x04; // TX I/Q flip
+ RxValue &= 0xfb; // RX I/Q no flip
+ }
+-
++
+ // Change to match microsoft definition, 0xff: diversity, 0: A, 1: B
+ pAdapter->PortCfg.CurrentTxAntenna--;
+ pAdapter->PortCfg.CurrentRxAntenna--;
+@@ -845,7 +845,7 @@
+ RTMP_IO_WRITE32(pAdapter, BBPCSR1, BbpCsr1);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, BBP_Tx_Configure, TxValue);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, BBP_Rx_Configure, RxValue);
+-
++
+ // 2003-12-16 software-based RX antenna diversity
+ // pAdapter->PortCfg.CurrentRxAntenna = 0xff; // Diversity ON
+ AsicSetRxAnt(pAdapter);
+@@ -869,7 +869,7 @@
+ if (0 && Antenna.field.HardwareRadioControl == 1)
+ {
+ pAdapter->PortCfg.bHardwareRadio = TRUE;
+-
++
+ // Read GPIO pin0 as Hardware controlled radio state
+ RTMP_IO_READ32(pAdapter, GPIOCSR, &data);
+ if ((data & 0x01) == 0)
+@@ -886,8 +886,8 @@
+ }
+ }
+ else
+- pAdapter->PortCfg.bHardwareRadio = FALSE;
+-
++ pAdapter->PortCfg.bHardwareRadio = FALSE;
++
+ NicConfig2.word = pAdapter->EEPROMDefaultValue[1];
+ if (NicConfig2.word == 0xffff)
+ NicConfig2.word = 0; // empty E2PROM, use default
+@@ -906,7 +906,7 @@
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, 17, r17);
+
+ // 2004-2-2 per David's request, lower R17 low-bound for very good quality NIC
+- pAdapter->PortCfg.VgcLowerBound -= 6;
++ pAdapter->PortCfg.VgcLowerBound -= 6;
+ DBGPRINT(RT_DEBUG_TRACE,"R17 tuning enable=%d, R17=0x%02x, range=<0x%02x, 0x%02x>\n",
+ pAdapter->PortCfg.BbpTuningEnable, r17, pAdapter->PortCfg.VgcLowerBound, pAdapter->PortCfg.BbpTuning.VgcUpperBound);
+ }
+@@ -916,7 +916,6 @@
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM\n");
+ }
+
+-extern VOID MlmeWork(void *vpAd);
+
+ void NICInitializeAdapter(IN PRTMP_ADAPTER pAdapter)
+ {
+@@ -938,7 +937,7 @@
+ TxCSR2.field.TxDSize = RING_DESCRIPTOR_SIZE;
+ TxCSR2.field.NumTxD = TX_RING_SIZE;
+ TxCSR2.field.NumAtimD = ATIM_RING_SIZE;
+- TxCSR2.field.NumPrioD = PRIO_RING_SIZE;
++ TxCSR2.field.NumPrioD = PRIO_RING_SIZE;
+ RTMP_IO_WRITE32(pAdapter, TXCSR2, TxCSR2.word);
+
+ // Write TXCSR3 register
+@@ -961,22 +960,19 @@
+ RxCSR1.field.RxDSize = RING_DESCRIPTOR_SIZE;
+ RxCSR1.field.NumRxD = RX_RING_SIZE;
+ RTMP_IO_WRITE32(pAdapter, RXCSR1, RxCSR1.word);
+-
++
+ // Write RXCSR2 register
+ Value = pAdapter->RxRing[0].pa_addr;
+ RTMP_IO_WRITE32(pAdapter, RX_RING_BASE_REG, Value);
+
+ // Write CSR1 for host ready
+- // Move Host reay to end of ASIC initialization
++ // Move Host reay to end of ASIC initialization
+ // to ensure no Rx will perform before ASIC init
+ // RTMP_IO_WRITE32(pAdapter, CSR1, 0x4);
+
+ // Initialze ASIC for TX & Rx operation
+ NICInitializeAsic(pAdapter);
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- INIT_WORK(&pAdapter->mlme_work, MlmeWork, (void*)pAdapter);
+-#endif
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAdapter\n");
+ }
+
+@@ -1036,13 +1032,13 @@
+ else if (pAdapter->bAcceptPromiscuous == TRUE)
+ {
+ // Register bits with "drop unicast not to me disabled"
+- RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x6e);
++ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x6e);
+ }
+ else
+ {
+ // Standard default register bits.
+- RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
+- }
++ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
++ }
+
+ // Clear old FCS jitter before init ASIC
+ RTMP_IO_READ32(pAdapter, CNT0, &Index);
+@@ -1172,10 +1168,10 @@
+ // Init send data structures and related parameters
+ NICInitTransmit(pAdapter);
+
+- NICInitializeAdapter(pAdapter);
++ NICInitializeAdapter(pAdapter);
+ NICInitAsicFromEEPROM(pAdapter);
+
+- // Switch to current channel, since during reset process, the connection should remains on.
++ // Switch to current channel, since during reset process, the connection should remains on.
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+ }
+@@ -1200,7 +1196,7 @@
+ {
+ if(ptr == buffer)
+ return TRUE;
+- else if (ptr > buffer)
++ else if (ptr > buffer)
+ {
+ while (ptr > buffer)
+ {
+@@ -1252,7 +1248,7 @@
+ }
+ else
+ return NULL;
+-}
++}
+ /**
+ * strstr - Find the first substring in a %NUL terminated string
+ * @s1: The string to be searched
+@@ -1261,7 +1257,7 @@
+ char * rtstrstr(const char * s1,const char * s2)
+ {
+ int l1, l2;
+-
++
+ l2 = strlen(s2);
+ if (!l2)
+ return (char *) s1;
+@@ -1283,7 +1279,7 @@
+ Arguments:
+ section the key of the secion
+ key Pointer to key string
+- dest Pointer to destination
++ dest Pointer to destination
+ destsize The datasize of the destination
+ buffer Pointer to the buffer to start find the key
+
+@@ -1298,7 +1294,7 @@
+ INT RTMPGetKeyParameter(
+ IN PUCHAR section,
+ IN PCHAR key,
+- OUT PCHAR dest,
++ OUT PCHAR dest,
+ IN INT destsize,
+ IN PCHAR buffer)
+ {
+@@ -1354,7 +1350,7 @@
+ break;
+ }
+
+- len = strlen(ptr);
++ len = strlen(ptr);
+ memset(dest, 0x00, destsize);
+ strncpy(dest, ptr, len >= destsize ? destsize: len);
+
+@@ -1409,7 +1405,7 @@
+ src = PROFILE_PATH;
+
+ // Save uid and gid used for filesystem access.
+- // Set user and group to 0 (root)
++ // Set user and group to 0 (root)
+ orgfsuid = current->fsuid;
+ orgfsgid = current->fsgid;
+ current->fsuid=current->fsgid = 0;
+@@ -1426,7 +1422,7 @@
+ else
+ {
+ /* The object must have a read method */
+- if (srcf->f_op && srcf->f_op->read)
++ if (srcf->f_op && srcf->f_op->read)
+ {
+ memset(buffer, 0x00, MAX_INI_BUFFER_SIZE);
+ retval=srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos);
+@@ -1502,7 +1498,7 @@
+ if (ChannelSanity(pAd, Channel) == TRUE)
+ {
+ pAd->PortCfg.Channel = Channel;
+- // If default profile in Registry is an ADHOC network, driver should use the specified channel
++ // If default profile in Registry is an ADHOC network, driver should use the specified channel
+ // number when starting IBSS the first time, because RaConfig is passive and will not set this
+ // via OID_802_11_CONFIGURATION upon driver bootup.
+ pAd->PortCfg.IbssConfig.Channel = pAd->PortCfg.Channel;
+@@ -1571,7 +1567,7 @@
+
+ if((ulInfo > 0) && (ulInfo <= MAX_RTS_THRESHOLD))
+ pAd->PortCfg.RtsThreshold = (USHORT)ulInfo;
+- else
++ else
+ pAd->PortCfg.RtsThreshold = MAX_RTS_THRESHOLD;
+
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(RTSThreshold=%d)\n", __FUNCTION__, pAd->PortCfg.RtsThreshold);
+@@ -1650,7 +1646,7 @@
+ {
+ DBGPRINT(RT_DEBUG_INFO, "MAX_PSP power mode not available - defaulting to CAM\n");
+ }
+- else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0)
++ else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0)
+ || (strcmp(tmpbuf, "FAST_PSP") == 0))
+ {
+ DBGPRINT(RT_DEBUG_INFO, "FAST_PSP power mode not available - defaulting to CAM\n");
+@@ -1763,7 +1759,7 @@
+ break;
+ }
+ }
+-
++
+ if (bIsHex)
+ {
+ pAd->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+@@ -1773,7 +1769,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[0].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[0].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key1=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1821,7 +1817,7 @@
+ break;
+ }
+ }
+-
++
+ if (bIsHex)
+ {
+ pAd->PortCfg.SharedKey[1].KeyLen = KeyLen / 2 ;
+@@ -1831,7 +1827,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[1].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[1].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[1].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key2=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1889,7 +1885,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[2].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[2].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[2].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key3=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1947,7 +1943,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[3].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[3].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[3].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key4=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -2023,10 +2019,10 @@
+ {
+ case TX_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->NextTxDoneIndex].va_addr;
+-
++
+ pTxD->Owner = DESC_OWN_HOST;
+ pTxD->Valid = FALSE;
+
+@@ -2036,7 +2032,7 @@
+ {
+ pAdapter->NextTxDoneIndex = 0;
+ }
+-
++
+ } while (Count < TX_RING_SIZE); // We have to scan all TX ring
+
+ // Check for packet in send tx wait waiting queue
+@@ -2047,7 +2043,7 @@
+
+ case PRIO_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pTxD = (PTXD_STRUC) pAdapter->PrioRing[pAdapter->NextPrioDoneIndex].va_addr;
+
+@@ -2085,7 +2081,7 @@
+
+ case RX_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pRxD = (PRXD_STRUC) pAdapter->RxRing[pAdapter->CurRxIndex].va_addr;
+
+@@ -2101,7 +2097,7 @@
+
+ } while (Count < RX_RING_SIZE); // We have to scan all Rx Ring
+ break;
+-
++
+ default:
+ break;
+
+@@ -2172,10 +2168,10 @@
+ {
+ UINT i;
+
+- DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n");
++ DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n");
+
+ pAdapter->PortCfg.UseBGProtection = 0; // 0: AUTO
+-
++
+ pAdapter->PortCfg.CapabilityInfo = 0x0000;
+ pAdapter->PortCfg.Psm = PWR_ACTIVE;
+ pAdapter->PortCfg.BeaconPeriod = 100; // in mSec
+@@ -2207,7 +2203,7 @@
+ pAdapter->PortCfg.LastMicErrorTime = 0;
+ pAdapter->PortCfg.MicErrCnt = 0;
+ pAdapter->PortCfg.bBlockAssoc = FALSE;
+- pAdapter->PortCfg.WpaState = SS_NOTUSE;
++ pAdapter->PortCfg.WpaState = SS_NOTUSE;
+
+ pAdapter->PortCfg.RtsThreshold = 2347;
+ pAdapter->PortCfg.FragmentThreshold = 2346;
+@@ -2261,7 +2257,7 @@
+ pAdapter->PortCfg.PhyMode = 0xff;
+ // RTMPSetPhyMode(pAdapter, PHY_11BG_MIXED); // default in 11BG mixed mode
+ // pAdapter->PortCfg.Channel = FirstChannel(pAdapter);
+- pAdapter->PortCfg.Dsifs = 10; // in units of usec
++ pAdapter->PortCfg.Dsifs = 10; // in units of usec
+ pAdapter->PortCfg.TxPreambleInUsed = Rt802_11PreambleLong; // use Long preamble on TX by defaut
+
+ // user desired power mode
+@@ -2274,7 +2270,7 @@
+ pAdapter->bAcceptMulticast = FALSE;
+ pAdapter->bAcceptBroadcast = TRUE;
+ pAdapter->bAcceptAllMulticast = TRUE;
+-
++
+ // parameters to be used when this STA starts a new ADHOC network
+ pAdapter->PortCfg.IbssConfig.BeaconPeriod = 100;
+ pAdapter->PortCfg.IbssConfig.AtimWin = 0;
+@@ -2363,8 +2359,8 @@
+ char *srcptr;
+ PUCHAR destTemp;
+
+- srcptr = src;
+- destTemp = (PUCHAR) dest;
++ srcptr = src;
++ destTemp = (PUCHAR) dest;
+
+ while(destlen--)
+ {
+@@ -2376,7 +2372,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init timer objects
+
+@@ -2390,7 +2386,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPInitTimer(
+@@ -2406,7 +2402,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init timer objects
+
+@@ -2418,7 +2414,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetTimer(
+@@ -2434,7 +2430,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Cancel timer objects
+
+@@ -2446,14 +2442,15 @@
+
+ Note:
+ Reset NIC to initial state AS IS system boot up time.
+-
++
+ ========================================================================
+ */
+ VOID RTMPCancelTimer(
+ IN PRALINK_TIMER_STRUCT pTimer)
+ {
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,27))
+- del_timer_sync(&pTimer->TimerObj);
++ if (timer_pending(&pTimer->TimerObj))
++ del_timer_sync(&pTimer->TimerObj);
+ #else
+ del_timer(&pTimer->TimerObj);
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_main.c rt2500-cvs-2007061011/Module/rtmp_main.c
+--- rt2500-1.1.0-b4/Module/rtmp_main.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_main.c 2007-05-29 05:49:17.000000000 +0200
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_main.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 25th Nov 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 25th Nov 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * Flavio (rt2400) 8th Dec 04 Elegant irqreturn_t handling
+ * Flavio (rt2400) 8th Dec 04 Remove local alloc_netdev
+@@ -45,26 +45,24 @@
+ * Tor Petterson 19th Apr 05 Power management: Suspend and Resume
+ * MarkW 15th Jul 05 Disable File Config under 4KSTACK
+ * IvD 15th Jul 05 Support File Config with 4KSTACK
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-unsigned long IrqFlags;
+-
+ // Global static variable, Debug level flag
+ // Don't hide this behind debug define. There should be as little difference between debug and no-debug as possible.
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+-int debug = 0; /* Default is off. */
++static int debug = 0; /* Default is off. */
+ MODULE_PARM(debug, "i");
+-MODULE_PARM_DESC(debug, "Enable level: accepted values: 1 to switch debug on, 0 to switch debug off.");
++MODULE_PARM_DESC(debug, "Debug mask: n selects filter, 0 for none");
+
+ static char *ifname = NULL ;
+ MODULE_PARM(ifname, "s");
+ MODULE_PARM_DESC(ifname, "Network device name (default ra%d)");
+ #else
+-int debug = 0; /* Default is off. */
++static int debug = 0; /* Default is off. */
+ module_param(debug, int, 0);
+-MODULE_PARM_DESC(debug, "Enable level: accepted values: 1 to switch debug on, 0 to switch debug off.");
++MODULE_PARM_DESC(debug, "Debug mask: n selects filter, 0 for none");
+
+ static char *ifname = NULL ;
+ module_param(ifname, charp, 0);
+@@ -79,78 +77,130 @@
+
+ extern const struct iw_handler_def rt2500_iw_handler_def;
+
++#ifdef RT2500_DBG
++VOID rt2500_setdbg(long mask)
++{
++ debug = mask;
++}
++INT rt2500_dbgprint(int mask, const char *fmt, ...)
++{
++ if(mask & debug) {
++ va_list args;
++ int i;
++
++ va_start(args, fmt);
++
++ //http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.9
++ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9))
++ i = vprintk(fmt, args);
++
++ #else
++ // Stack is safe because data is buffered before control returns
++ char printk_buf[160]; // Longest observed line is 147 chars.
++
++ vsnprintf(printk_buf, sizeof(printk_buf), fmt, args);
++ i = printk(printk_buf);
++ #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9)) */
++
++ va_end(args);
++ return i;
++ }
++ return 0;
++}
++#endif
++
++#ifdef RT2X00DEBUGFS
+ /*
+ * Register layout information.
+ */
+ #define CSR_REG_BASE 0x0000
+ #define CSR_REG_SIZE 0x0174
+ #define EEPROM_BASE 0x0000
+-#define EEPROM_SIZE 0x01ff
++#define EEPROM_SIZE 0x0200
++#define BBP_SIZE 0x0040
+
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+-static void
+-rt2x00_get_drvinfo(struct net_device *net_dev,
+- struct ethtool_drvinfo *drvinfo)
++static void rt2500pci_read_csr(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
++ RTMP_ADAPTER *pAd = dev;
+
+- strcpy(drvinfo->driver, NIC_DEVICE_NAME);
+- strcpy(drvinfo->version, DRV_VERSION);
+- strcpy(drvinfo->bus_info, pci_name(pAd->pPci_Dev));
++ RTMP_IO_READ32(pAd, CSR_REG_BASE + (word * sizeof(u32)), (u32*)data);
+ }
+
+-static int
+-rt2x00_get_regs_len(struct net_device *net_dev)
++static void rt2500pci_write_csr(void *dev, const unsigned long word,
++ void *data)
+ {
+- return CSR_REG_SIZE;
++ RTMP_ADAPTER *pAd = dev;
++
++ RTMP_IO_WRITE32(pAd, word, *((u32*)data));
+ }
+
+-static void
+-rt2x00_get_regs(struct net_device *net_dev,
+- struct ethtool_regs *regs, void *data)
++static void rt2500pci_read_eeprom(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
+- unsigned int counter;
++ RTMP_ADAPTER *pAd = dev;
+
+- regs->len = CSR_REG_SIZE;
++ *((u16*)data) = RTMP_EEPROM_READ16(pAd, word * sizeof(u16));
++}
+
+- for (counter = 0; counter < CSR_REG_SIZE; counter += sizeof(u32)) {
+- RTMP_IO_READ32(pAd, CSR_REG_BASE + counter, (u32*)data);
+- data += sizeof(u32);
+- }
++static void rt2500pci_write_eeprom(void *dev, const unsigned long word,
++ void *data)
++{
++ /* DANGEROUS, DON'T DO THIS! */
+ }
+
+-static int
+-rt2x00_get_eeprom_len(struct net_device *net_dev)
++static void rt2500pci_read_bbp(void *dev, const unsigned long word,
++ void *data)
+ {
+- return EEPROM_SIZE;
++ RTMP_ADAPTER *pAd = dev;
++
++ RTMP_BBP_IO_READ32_BY_REG_ID(pAd, word, ((u8*)data));
+ }
+
+-static int
+-rt2x00_get_eeprom(struct net_device *net_dev,
+- struct ethtool_eeprom *eeprom, u8 *data)
++static void rt2500pci_write_bbp(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
+- unsigned int counter;
++ RTMP_ADAPTER *pAd = dev;
+
+- for (counter = eeprom->offset; counter < eeprom->len; counter += sizeof(u16)) {
+- u16 value = RTMP_EEPROM_READ16(pAd, CSR_REG_BASE + counter);
+- memcpy(data, &value, sizeof(u16));
+- data += sizeof(u16);
+- }
++ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, word, *((u8*)data));
++}
+
+- return 0;
++static void rt2500pci_open_debugfs(RTMP_ADAPTER *pAd)
++{
++ struct rt2x00debug *debug = &pAd->debug;
++
++ debug->owner = THIS_MODULE;
++ debug->mod_name = DRV_NAME;
++ debug->mod_version = DRV_VERSION;
++ debug->reg_csr.read = rt2500pci_read_csr;
++ debug->reg_csr.write = rt2500pci_write_csr;
++ debug->reg_csr.word_size = sizeof(u32);
++ debug->reg_csr.length = CSR_REG_SIZE;
++ debug->reg_eeprom.read = rt2500pci_read_eeprom;
++ debug->reg_eeprom.write = rt2500pci_write_eeprom;
++ debug->reg_eeprom.word_size = sizeof(u16);
++ debug->reg_eeprom.length = EEPROM_SIZE;
++ debug->reg_bbp.read = rt2500pci_read_bbp;
++ debug->reg_bbp.write = rt2500pci_write_bbp;
++ debug->reg_bbp.word_size = sizeof(u8);
++ debug->reg_bbp.length = BBP_SIZE;
++ debug->dev = pAd;
++
++ snprintf(debug->intf_name, sizeof(debug->intf_name),
++ "%s", pAd->net_dev->name);
++
++ if (rt2x00debug_register(debug))
++ printk(KERN_ERR "Failed to register debug handler.\n");
+ }
+
+-static struct ethtool_ops rt2x00_ethtool_ops = {
+- .get_drvinfo = rt2x00_get_drvinfo,
+- .get_regs_len = rt2x00_get_regs_len,
+- .get_regs = rt2x00_get_regs,
+- .get_link = ethtool_op_get_link,
+- .get_eeprom_len = rt2x00_get_eeprom_len,
+- .get_eeprom = rt2x00_get_eeprom,
+-};
+-#endif
++static void rt2500pci_close_debugfs(RTMP_ADAPTER *pAd)
++{
++ rt2x00debug_deregister(&pAd->debug);
++}
++#else /* RT2X00DEBUGFS */
++static inline void rt2500pci_open_debugfs(RTMP_ADAPTER *pAd){}
++static inline void rt2500pci_close_debugfs(RTMP_ADAPTER *pAd){}
++#endif /* RT2X00DEBUGFS */
+
+ static INT __devinit RT2500_init_one (
+ IN struct pci_dev *pPci_Dev,
+@@ -158,6 +208,7 @@
+ {
+ INT rc;
+
++ if (debug) {} // shuts up compiler when RT2500_DBG not defined
+ // wake up and enable device
+ if (pci_enable_device (pPci_Dev))
+ {
+@@ -176,7 +227,7 @@
+ // PCI device probe & initialization function
+ //
+ INT __devinit RT2500_probe(
+- IN struct pci_dev *pPci_Dev,
++ IN struct pci_dev *pPci_Dev,
+ IN const struct pci_device_id *ent)
+ {
+ struct net_device *net_dev;
+@@ -194,7 +245,7 @@
+
+ // alloc_etherdev() will set net_dev->name
+ net_dev = alloc_etherdev(sizeof(RTMP_ADAPTER));
+- if (net_dev == NULL)
++ if (net_dev == NULL)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "init_ethernet failed\n");
+ goto err_out;
+@@ -204,9 +255,8 @@
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+ SET_NETDEV_DEV(net_dev, &(pPci_Dev->dev));
+- SET_ETHTOOL_OPS(net_dev, &rt2x00_ethtool_ops);
+ #endif
+-
++
+ if (pci_request_regions(pPci_Dev, print_name))
+ goto err_out_free_netdev;
+
+@@ -215,10 +265,10 @@
+
+ // map physical address to virtual address for accessing register
+ csr_addr = (unsigned long) ioremap(pci_resource_start(pPci_Dev, 0), pci_resource_len(pPci_Dev, 0));
+- if (!csr_addr)
++ if (!csr_addr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ioremap failed for device %s, region 0x%X @ 0x%lX\n",
+- print_name, (ULONG)pci_resource_len(pPci_Dev, 0), pci_resource_start(pPci_Dev, 0));
++ DBGPRINT(RT_DEBUG_TRACE, "ioremap failed for device %s, region 0x%X @ 0x%X\n",
++ print_name, (ULONG)pci_resource_len(pPci_Dev, 0), (ULONG)pci_resource_start(pPci_Dev, 0));
+ goto err_out_free_res;
+ }
+
+@@ -233,7 +283,7 @@
+
+ // Read MAC address
+ NICReadAdapterInfo(pAd);
+-
++
+ RTMP_IO_READ32(pAd, CSR3, &StaMacReg0.word);
+ RTMP_IO_READ32(pAd, CSR4, &StaMacReg1.word);
+ net_dev->dev_addr[0] = StaMacReg0.field.Byte0;
+@@ -256,13 +306,13 @@
+ #if WIRELESS_EXT < 17
+ net_dev->get_wireless_stats = RT2500_get_wireless_stats;
+ #endif
+- net_dev->wireless_handlers = (struct iw_handler_def *) &rt2500_iw_handler_def;
++ net_dev->wireless_handlers = (struct iw_handler_def *) &rt2500_iw_handler_def;
+ #endif
+
+ net_dev->set_multicast_list = RT2500_set_rx_mode;
+ net_dev->do_ioctl = RT2500_ioctl;
+ net_dev->set_mac_address = rt2500_set_mac_address;
+-
++
+
+ // register_netdev() will call dev_alloc_name() for us
+ // TODO: Remove the following line to keep the default eth%d name
+@@ -284,8 +334,8 @@
+ if (Status != NDIS_STATUS_SUCCESS)
+ goto err_out_unmap;
+
+- DBGPRINT(RT_DEBUG_TRACE, "%s: at 0x%lx, VA 0x%lx, IRQ %d. \n",
+- net_dev->name, pci_resource_start(pPci_Dev, 0), (unsigned long)csr_addr, pPci_Dev->irq);
++ DBGPRINT(RT_DEBUG_TRACE, "%s: at 0x%x, VA 0x%lx, IRQ %d. \n",
++ net_dev->name, (ULONG)pci_resource_start(pPci_Dev, 0), (unsigned long)csr_addr, pPci_Dev->irq);
+
+ // Set driver data
+ pci_set_drvdata(pPci_Dev, net_dev);
+@@ -295,15 +345,17 @@
+ // All this occurs while the net iface is down
+ // iwconfig can then be used to configure card BEFORE
+ // ifconfig ra0 up is applied.
+- // Note the RT2500STA.dat file will still overwrite settings
++ // Note the RT2500STA.dat file will still overwrite settings
+ // but it is useful for the settings iwconfig doesn't let you at
+- PortCfgInit(pAd);
++ PortCfgInit(pAd);
+
+ MlmeQueueInit(&pAd->Mlme.Queue); // (never fails)
+
+ // Build channel list for default physical mode
+ BuildChannelList(pAd);
+
++ rt2500pci_open_debugfs(pAd);
++
+ return 0;
+
+ err_out_unmap:
+@@ -447,7 +499,7 @@
+
+ if (pAdapter->PortCfg.BssType == BSS_MONITOR && pAdapter->PortCfg.MallowRFMONTx != TRUE)
+ {
+- dev_kfree_skb_irq(skb);
++ dev_kfree_skb_irq(skb);
+ return 0;
+ }
+
+@@ -465,7 +517,7 @@
+ // This function has to manage NdisSendComplete return call within its routine
+ // NdisSendComplete will acknowledge upper layer in two steps.
+ // 1. Within Packet Enqueue, set the NDIS_STATUS_PENDING
+- // 2. Within TxRingTxDone / PrioRingTxDone call NdisSendComplete with final status
++ // 2. Within TxRingTxDone / PrioRingTxDone call NdisSendComplete with final status
+ // initial skb->data_len=0, we will use this variable to store data size when fragment(in TKIP)
+ // and skb->len is actual data len
+ skb->data_len = skb->len;
+@@ -482,7 +534,7 @@
+ // There are two place calling dequeue for TX ring.
+ // 1. Here, right after queueing the frame.
+ // 2. At the end of TxRingTxDone service routine.
+- if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
++ if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS)))
+ {
+@@ -504,7 +556,7 @@
+ Arguments:
+ irq interrupt line
+ dev_instance Pointer to net_device
+- rgs store process's context before entering ISR,
++ rgs store process's context before entering ISR,
+ this parameter is just for debug purpose.
+
+ Return Value:
+@@ -514,10 +566,16 @@
+
+ ========================================================================
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+ irqreturn_t RTMPIsr(
+- IN INT irq,
+- IN VOID *dev_instance,
++ IN INT irq,
++ IN VOID *dev_instance,
+ IN struct pt_regs *rgs)
++#else
++irqreturn_t RTMPIsr(
++ IN INT irq,
++ IN VOID *dev_instance)
++#endif
+ {
+ struct net_device *net_dev = dev_instance;
+ PRTMP_ADAPTER pAdapter = net_dev->priv;
+@@ -643,29 +701,29 @@
+ if(!is_valid_ether_addr(&mac->sa_data[0]))
+ return -EINVAL;
+
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ BUG_ON(net_dev->addr_len != ETH_ALEN);
+-#endif
+-
++#endif
++
+ memcpy(net_dev->dev_addr, mac->sa_data, ETH_ALEN);
+ memcpy(pAd->CurrentAddress, mac->sa_data, ETH_ALEN);
+-
++
+ memset(&set_mac, 0x00, sizeof(INT));
+ set_mac = (net_dev->dev_addr[0]) |
+ (net_dev->dev_addr[1] << 8) |
+ (net_dev->dev_addr[2] << 16) |
+ (net_dev->dev_addr[3] << 24);
+-
++
+ RTMP_IO_WRITE32(pAd, CSR3, set_mac);
+-
++
+ memset(&set_mac, 0x00, sizeof(INT));
+ set_mac = (net_dev->dev_addr[4]) |
+ (net_dev->dev_addr[5] << 8);
+-
++
+ RTMP_IO_WRITE32(pAd, CSR4, set_mac);
+-
++
+ printk(KERN_INFO "***rt2x00***: Info - Mac address changed to: %02x:%02x:%02x:%02x:%02x:%02x.\n", net_dev->dev_addr[0], net_dev->dev_addr[1], net_dev->dev_addr[2], net_dev->dev_addr[3], net_dev->dev_addr[4], net_dev->dev_addr[5]);
+-
++
+ return 0;
+ }
+
+@@ -697,11 +755,13 @@
+
+ pAd->iw_stats.status = 0; // Status - device dependent for now
+
+- pAd->iw_stats.qual.qual = pAd->Mlme.ChannelQuality;//pAd->Mlme.RoamCqi; // link quality (%retries, SNR, %missed beacons or better...)
+- pAd->iw_stats.qual.level = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
+-
++ pAd->iw_stats.qual.qual = pAd->Mlme.ChannelQuality;// link quality (%retries, SNR, %missed beacons or better...)
++ pAd->iw_stats.qual.level = abs(pAd->PortCfg.LastRssi); // signal level (dBm)
++ pAd->iw_stats.qual.level += 256 - RSSI_TO_DBM_OFFSET;
++
+ pAd->iw_stats.qual.noise = (pAd->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAd->PortCfg.LastR17Value); // // noise level (dBm)
+- pAd->iw_stats.qual.updated = 3; // Flags to know if updated
++ pAd->iw_stats.qual.noise += 256 - 143;
++ pAd->iw_stats.qual.updated = 1; // Flags to know if updated
+
+ pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid
+ pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe
+@@ -791,7 +851,7 @@
+ IN struct net_device *net_dev)
+ {
+ RTMP_ADAPTER *pAd;
+- pAd = net_dev->priv;
++ pAd = net_dev->priv;
+ if (pAd->PortCfg.BssType == BSS_MONITOR)
+ {
+ RTMP_IO_WRITE32(pAd, RXCSR0, 0x46);
+@@ -808,7 +868,7 @@
+ pAd->bAcceptPromiscuous = FALSE;
+ RTMP_IO_WRITE32(pAd, RXCSR0, 0x7e);
+ DBGPRINT(RT_DEBUG_TRACE, "rt2500 acknowledge MONITOR/PROMISC off\n");
+- }
++ }
+
+ }
+
+@@ -867,7 +927,9 @@
+ IN struct pci_dev *pPci_Dev)
+ {
+ struct net_device *net_dev = pci_get_drvdata(pPci_Dev);
+- // RTMP_ADAPTER *pAd = net_dev->priv;
++ RTMP_ADAPTER *pAd = netdev_priv(net_dev);
++
++ rt2500pci_close_debugfs(pAd);
+
+ // Free Ring buffers
+ RTMPFreeDMAMemory(net_dev->priv);
+@@ -915,7 +977,7 @@
+
+ if(pAdapter->PortCfg.bRadio)
+ MlmeRadioOff(pAdapter);
+-
++
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14))
+ printk(KERN_NOTICE "%s: got suspend request (state %d)\n",
+ dev->name, state);
+@@ -944,7 +1006,11 @@
+ PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ int status;
+
+- pci_enable_device(pdev);
++ // FIXME: code should process error case correctly
++ if (pci_enable_device(pdev)) {
++ printk(KERN_ERR "rt2500: could not resume from suspend");
++ return -EIO;
++ }
+
+ printk(KERN_NOTICE "%s: got resume request\n", dev->name);
+
+@@ -991,7 +1057,7 @@
+ suspend: rt2500_suspend,
+ resume: rt2500_resume,
+ #endif /* CONFIG_PM */
+-#if LINUX_VERSION_CODE >= 0x20412 || BIG_ENDIAN == TRUE || RTMP_EMBEDDED == TRUE
++#if LINUX_VERSION_CODE >= 0x20412 || BIG_ENDIAN == TRUE
+ remove: __devexit_p(RT2500_remove_one),
+ #else
+ remove: __devexit(RT2500_remove_one),
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_tkip.c rt2500-cvs-2007061011/Module/rtmp_tkip.c
+--- rt2500-1.1.0-b4/Module/rtmp_tkip.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_tkip.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,125 +1,125 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_tkip.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulW 25th Feb 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulW 25th Feb 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-// Rotation functions on 32 bit values
++// Rotation functions on 32 bit values
+ #define ROL32( A, n ) ( ((A) << (n)) | ( ((A)>>(32-(n))) ) )
+-#define ROR32( A, n ) ROL32( (A), 32-(n) )
++#define ROR32( A, n ) ROL32( (A), 32-(n) )
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Convert from UCHAR[] to ULONG in a portable way
+-
++ Convert from UCHAR[] to ULONG in a portable way
++
+ Arguments:
+ pMICKey pointer to MIC Key
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+-ULONG RTMPTkipGetUInt32(
++ULONG RTMPTkipGetUInt32(
+ IN PUCHAR pMICKey)
+-{
+- ULONG res = 0;
++{
++ ULONG res = 0;
+ int i;
+-
+- for (i = 0; i < 4; i++)
+- {
+- res |= (*pMICKey++) << (8 * i);
++
++ for (i = 0; i < 4; i++)
++ {
++ res |= (*pMICKey++) << (8 * i);
+ }
+
+- return res;
+-}
++ return res;
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Convert from ULONG to UCHAR[] in a portable way
+-
++ Convert from ULONG to UCHAR[] in a portable way
++
+ Arguments:
+ pDst pointer to destination for convert ULONG to UCHAR[]
+ val the value for convert
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPTkipPutUInt32(
+ IN OUT PUCHAR pDst,
+- IN ULONG val)
+-{
++ IN ULONG val)
++{
+ int i;
+-
+- for(i = 0; i < 4; i++)
+- {
+- *pDst++ = (UCHAR) val;
+- val >>= 8;
+- }
+-}
++
++ for(i = 0; i < 4; i++)
++ {
++ *pDst++ = (UCHAR) val;
++ val >>= 8;
++ }
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Calculate the MIC Value.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to source data for Calculate MIC Value
+ Len Indicate the length of the source data
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+-VOID RTMPTkipAppend(
+- IN PTKIP_KEY_INFO pTkip,
++VOID RTMPTkipAppend(
++ IN PTKIP_KEY_INFO pTkip,
+ IN PUCHAR pSrc,
+- IN UINT nBytes)
++ IN UINT nBytes)
+ {
+ register ULONG M, L, R, nBytesInM;
+
+@@ -128,7 +128,7 @@
+ R = pTkip->R;
+ nBytesInM = pTkip->nBytesInM;
+ M = pTkip->M;
+-
++
+ // Alignment case
+ if((nBytesInM == 0) && ((((unsigned long)pSrc) & 0x3) == 0))
+ {
+@@ -141,7 +141,7 @@
+ #endif
+ pSrc += 4;
+ nBytes -= 4;
+-
++
+ L ^= M;
+ R ^= ROL32( L, 17 );
+ L += R;
+@@ -154,7 +154,7 @@
+ }
+ nBytesInM = 0;
+ M = 0;
+-
++
+ while(nBytes > 0)
+ {
+ M |= (*pSrc << (8* nBytesInM));
+@@ -162,7 +162,7 @@
+ nBytesInM++;
+ pSrc++;
+ nBytes--;
+-
++
+ if( nBytesInM >= 4 )
+ {
+ L ^= M;
+@@ -186,10 +186,10 @@
+ {
+ M |= (*pSrc << (8* nBytesInM));
+ nBytesInM++;
+-
++
+ pSrc++;
+ nBytes--;
+-
++
+ if( nBytesInM >= 4 )
+ {
+ L ^= M;
+@@ -207,23 +207,23 @@
+ }
+ }
+ }
+-
++
+ // load data from register to memory
+ pTkip->M = M;
+ pTkip->nBytesInM = nBytesInM;
+ pTkip->L = L;
+ pTkip->R = R;
+-}
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Get the MIC Value.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+
+@@ -231,7 +231,7 @@
+ the MIC Value is store in pAdapter->PrivateInfo.MIC
+ ========================================================================
+ */
+-VOID RTMPTkipGetMIC(
++VOID RTMPTkipGetMIC(
+ IN PTKIP_KEY_INFO pTkip)
+ {
+ static unsigned char Last[] = {"\x5a\x00\x00\x00\x00\x00\x00\x00"};
+@@ -242,14 +242,14 @@
+ // The appendByte function has already computed the result.
+ RTMPTkipPutUInt32(pTkip->MIC, pTkip->L);
+ RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R);
+-}
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Compare MIC value of received MSDU
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the received Plain text data
+@@ -257,13 +257,13 @@
+ pSA Pointer to SA address
+ pMICKey pointer to MIC Key
+ Len the length of the received plain text data exclude MIC value
+-
++
+ Return Value:
+ TRUE MIC value matched
+ FALSE MIC value mismatched
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPTkipCompareMICValue(
+@@ -288,19 +288,19 @@
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pSA, 6);
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, Priority, 4);
+-
++
+ // Calculate MIC value from plain text data
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pSrc, Len);
+
+ // Get MIC value from decrypted plain data
+ RTMPTkipGetMIC(&pAdapter->PrivateInfo.Rx);
+-
++
+ // Move MIC value from MSDU, this steps should move to data path.
+ // Since the MIC value might cross MPDUs.
+ if(!NdisEqualMemory(pAdapter->PrivateInfo.Rx.MIC, pSrc + Len, 8))
+ {
+ INT i;
+-
++
+ DBGPRINT(RT_DEBUG_ERROR, "! TKIP MIC Error !\n"); //MIC error.
+ DBGPRINT(RT_DEBUG_INFO, "Orig MIC value ="); //MIC error.
+ for (i = 0; i < 8; i++)
+@@ -324,7 +324,7 @@
+
+ Routine Description:
+ Compare MIC value of received MSDU
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pLLC LLC header
+@@ -333,13 +333,13 @@
+ pSA Pointer to SA address
+ pMICKey pointer to MIC Key
+ Len the length of the received plain text data exclude MIC value
+-
++
+ Return Value:
+ TRUE MIC value matched
+ FALSE MIC value mismatched
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPTkipCompareMICValueWithLLC(
+@@ -352,13 +352,13 @@
+ IN UINT Len)
+ {
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
+-
++
+ // Init MIC value calculation and reset the message
+ pAdapter->PrivateInfo.Rx.L = RTMPTkipGetUInt32(pMICKey);
+ pAdapter->PrivateInfo.Rx.R = RTMPTkipGetUInt32(pMICKey + 4);
+ pAdapter->PrivateInfo.Rx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Rx.M = 0;
+-
++
+ // DA
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pDA, 6);
+ // SA
+@@ -405,20 +405,20 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware transmit function
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to Ndis Packet for MIC calculation
+ pEncap Pointer to LLC encap data
+ LenEncap Total encap length, might be 0 which indicates no encap
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPCalculateMICValue(
+@@ -430,21 +430,21 @@
+ {
+ PUCHAR pSrc;
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
+-
++
+ pSrc = (PUCHAR) skb->data;
+-
++
+ // Init MIC value calculation and reset the message
+ pAdapter->PrivateInfo.Tx.L = RTMPTkipGetUInt32(pWpaKey->TxMic);
+ pAdapter->PrivateInfo.Tx.R = RTMPTkipGetUInt32(pWpaKey->TxMic + 4);
+ pAdapter->PrivateInfo.Tx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Tx.M = 0;
+-
++
+ // DA & SA field
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc, 12);
+-
++
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, Priority, 4);
+-
++
+ if (LenEncap > 0)
+ {
+ // LLC encapsulation
+@@ -454,7 +454,7 @@
+ }
+ else
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc + 14, skb->len - 14);
+-
++
+ // Compute the final MIC Value
+ RTMPTkipGetMIC(&pAdapter->PrivateInfo.Tx);
+ }
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_type.h rt2500-cvs-2007061011/Module/rtmp_type.h
+--- rt2500-1.1.0-b4/Module/rtmp_type.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_type.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_type.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 2md Jan 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 2md Jan 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RTMP_TYPE_H__
+ #define __RTMP_TYPE_H__
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_wep.c rt2500-cvs-2007061011/Module/rtmp_wep.c
+--- rt2500-1.1.0-b4/Module/rtmp_wep.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_wep.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,40 +1,40 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: rtmp_wep.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulW 28th Sep 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: rtmp_wep.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulW 28th Sep 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-ULONG FCSTAB_32[256] =
++ULONG FCSTAB_32[256] =
+ {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+ 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+@@ -56,57 +56,57 @@
+ 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+ 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+-};
++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
++ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
++ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
++ 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
++ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
++ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
++ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
++ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
++ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
++ 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
++ 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
++ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
++ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
++ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
++ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
++ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
++ 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
++ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
++ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
++ 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
++ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
++ 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
++ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
++ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
++ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
++ 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
++ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
++ 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
++ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
++ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
++ 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
++ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
++ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
++ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
++ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
++ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
++ 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
++ 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
++ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
++ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
++};
+
+ UCHAR WEPKEY[] = {
+ //IV
+- 0x00, 0x11, 0x22,
++ 0x00, 0x11, 0x22,
+ //WEP KEY
+- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC
++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC
+ };
+
+
+@@ -114,27 +114,27 @@
+ ========================================================================
+
+ Routine Description:
+- Init WEP function.
+-
++ Init WEP function.
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pKey Pointer to the WEP KEY
+ KeyId WEP Key ID
+ KeyLen the length of WEP KEY
+ pDest Pointer to the destination which Encryption data will store in.
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPInitWepEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN UCHAR KeyId,
+- IN UCHAR KeyLen,
++ IN UCHAR KeyLen,
+ IN OUT PUCHAR pDest)
+ {
+ UINT i;
+@@ -146,32 +146,32 @@
+ WEPKEY[i] = RandomByte(pAdapter); //Call mlme RandomByte() function.
+ ARCFOUR_INIT(&pAdapter->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV)
+
+- memcpy(pDest, WEPKEY, 3); //Append Init Vector
+- *(pDest+3) = (KeyId << 6); //Append KEYID
+-
++ memcpy(pDest, WEPKEY, 3); //Append Init Vector
++ *(pDest+3) = (KeyId << 6); //Append KEYID
++
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Encrypt transimitted data
+-
++ Encrypt transimitted data
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the transimitted source data that will be encrypt
+ pDest Pointer to the destination where entryption data will be store in.
+ Len Indicate the length of the source data
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPEncryptData(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDest,
+ IN UINT Len)
+@@ -184,19 +184,19 @@
+ ========================================================================
+
+ Routine Description:
+- Decrypt received data
+-
++ Decrypt received data
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the received data
+ Len the length of the received data
+-
++
+ Return Value:
+ TRUE Decrypt WEP data success
+ FALSE Decrypt WEP data failed
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPDecryptData(
+@@ -209,12 +209,12 @@
+ UCHAR KeyIdx;
+
+ memcpy(WEPKEY, pSrc, 3); //Get WEP IV
+-
++
+ KeyIdx = (*(pSrc + 3) & 0xc0) >> 6;
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 0)
+ return (FALSE);
+-
+- memcpy(WEPKEY + 3, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++
++ memcpy(WEPKEY + 3, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ ARCFOUR_INIT(&pAdapter->PrivateInfo.WEPCONTEXT, WEPKEY, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen + 3);
+ ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, pSrc, pSrc + 4, Len - 4);
+ memcpy(&trailfcs, pSrc + Len - 8, 4);
+@@ -236,18 +236,18 @@
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Encryption Algorithm "ARCFOUR" initialize
+-
++ The Stream Cipher Encryption Algorithm "ARCFOUR" initialize
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+ pKey Pointer to the WEP KEY
+ KeyLen Indicate the length fo the WEP KEY
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_INIT(
+@@ -260,7 +260,7 @@
+ UINT stateindex;
+ PUCHAR state;
+ UINT counter;
+-
++
+ state = Ctx->STATE;
+ Ctx->X = 0;
+ Ctx->Y = 0;
+@@ -284,16 +284,16 @@
+ ========================================================================
+
+ Routine Description:
+- Get bytes from ARCFOUR CONTEXT (S-BOX)
+-
++ Get bytes from ARCFOUR CONTEXT (S-BOX)
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+-
++
+ Return Value:
+- UCHAR - the value of the ARCFOUR CONTEXT (S-BOX)
+-
++ UCHAR - the value of the ARCFOUR CONTEXT (S-BOX)
++
+ Note:
+-
++
+ ========================================================================
+ */
+ UCHAR ARCFOUR_BYTE(
+@@ -303,7 +303,7 @@
+ UINT y;
+ UCHAR sx, sy;
+ PUCHAR state;
+-
++
+ state = Ctx->STATE;
+ x = (Ctx->X + 1) & 0xff;
+ sx = state[x];
+@@ -315,31 +315,31 @@
+ state[x] = sy;
+
+ return(state[(sx + sy) & 0xff]);
+-
++
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Decryption Algorithm
+-
++ The Stream Cipher Decryption Algorithm
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+- pDest Pointer to the Destination
++ pDest Pointer to the Destination
+ pSrc Pointer to the Source data
+ Len Indicate the length of the Source data
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_DECRYPT(
+ IN PARCFOURCONTEXT Ctx,
+- IN PUCHAR pDest,
++ IN PUCHAR pDest,
+ IN PUCHAR pSrc,
+ IN UINT Len)
+ {
+@@ -353,19 +353,19 @@
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Encryption Algorithm
+-
++ The Stream Cipher Encryption Algorithm
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+- pDest Pointer to the Destination
++ pDest Pointer to the Destination
+ pSrc Pointer to the Source data
+ Len Indicate the length of the Source dta
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_ENCRYPT(
+@@ -385,17 +385,17 @@
+
+ Routine Description:
+ Calculate a new FCS given the current FCS and the new data.
+-
++
+ Arguments:
+ Fcs the original FCS value
+ Cp pointer to the data which will be calculate the FCS
+ Len the length of the data
+-
++
+ Return Value:
+ ULONG - FCS 32 bits
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ ULONG RTMP_CALC_FCS32(
+@@ -406,24 +406,24 @@
+ while (Len--)
+ Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]);
+
+- return (Fcs);
+-}
++ return (Fcs);
++}
+
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Get last FCS and encrypt it to the destination
+-
++ Get last FCS and encrypt it to the destination
++
+ Arguments:
+- pDest Pointer to the Destination
+-
++ pDest Pointer to the Destination
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetICV(
+@@ -431,11 +431,11 @@
+ IN PUCHAR pDest)
+ {
+ pAdapter->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */
+-
++
+ #ifdef BIG_ENDIAN
+ pAdapter->PrivateInfo.FCSCRC32 = SWAP32(pAdapter->PrivateInfo.FCSCRC32);
+ #endif
+-
++
+ ARCFOUR_ENCRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAdapter->PrivateInfo.FCSCRC32, 4);
+ }
+
+diff -Nur rt2500-1.1.0-b4/Module/sanity.c rt2500-cvs-2007061011/Module/sanity.c
+--- rt2500-1.1.0-b4/Module/sanity.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/sanity.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,41 +1,42 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: sanity.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: sanity.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
++static const UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
++static const ie_oui_t wpa2_oui = {0x00, 0x0f, 0xac}; // 802.11i pp. 28, 30
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -44,13 +45,13 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeScanReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT UCHAR *BssType,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *ScanType)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT UCHAR *BssType,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *ScanType)
+ {
+ MLME_SCAN_REQ_STRUCT *Info;
+
+@@ -61,16 +62,16 @@
+ *ScanType = Info->ScanType;
+
+ if ((*BssType == BSS_INFRA || *BssType == BSS_INDEP || *BssType == BSS_ANY) &&
+- (*ScanType == SCAN_ACTIVE || *ScanType == SCAN_PASSIVE))
++ (*ScanType == SCAN_ACTIVE || *ScanType == SCAN_PASSIVE))
+ return TRUE;
+- else
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeScanReqSanity fail - wrong BssType or ScanType\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -79,16 +80,16 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeStartReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen)
+ {
+ MLME_START_REQ_STRUCT *Info;
+
+ Info = (MLME_START_REQ_STRUCT *)(Msg);
+-
++
+ if (Info->SsidLen > MAX_LEN_OF_SSID)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeStartReqSanity fail - wrong SSID length\n");
+@@ -101,7 +102,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -110,13 +111,13 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeAssocReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *ApAddr,
+- OUT USHORT *CapabilityInfo,
+- OUT ULONG *Timeout,
+- OUT USHORT *ListenIntv)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *ApAddr,
++ OUT USHORT *CapabilityInfo,
++ OUT ULONG *Timeout,
++ OUT USHORT *ListenIntv)
+ {
+ MLME_ASSOC_REQ_STRUCT *Info;
+
+@@ -129,7 +130,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -138,12 +139,12 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeAuthReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT ULONG *Timeout,
+- OUT USHORT *Alg)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT ULONG *Timeout,
++ OUT USHORT *Alg)
+ {
+ MLME_AUTH_REQ_STRUCT *Info;
+
+@@ -152,18 +153,18 @@
+ *Timeout = Info->Timeout;
+ *Alg = Info->Alg;
+
+- if ((*Alg == Ndis802_11AuthModeShared || *Alg == Ndis802_11AuthModeOpen) && !MAC_ADDR_IS_GROUP(*Addr))
++ if ((*Alg == Ndis802_11AuthModeShared || *Alg == Ndis802_11AuthModeOpen) && !MAC_ADDR_IS_GROUP(*Addr))
+ {
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeAuthReqSanity fail - wrong algorithm\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -172,16 +173,16 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerAssocRspSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *CapabilityInfo,
+- OUT USHORT *Status,
+- OUT USHORT *Aid,
+- OUT UCHAR Rates[],
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *CapabilityInfo,
++ OUT USHORT *Status,
++ OUT USHORT *Aid,
++ OUT UCHAR Rates[],
+ OUT UCHAR *RatesLen,
+- OUT BOOLEAN *ExtendedRateIeExist)
++ OUT BOOLEAN *ExtendedRateIeExist)
+ {
+ CHAR IeType, *Ptr;
+ MACFRAME *Fr = (MACFRAME *)Msg;
+@@ -195,7 +196,7 @@
+ // Mask out unnecessary capability information
+ *CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+
+- if (*Status == MLME_SUCCESS)
++ if (*Status == MLME_SUCCESS)
+ {
+ memcpy(Aid, &Fr->Octet[4], 2);
+ *Aid = (*Aid) & 0x3fff; // AID is low 14-bit
+@@ -207,8 +208,8 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity fail - wrong SupportedRates IE\n");
+ return FALSE;
+- }
+- else
++ }
++ else
+ memcpy(Rates, &Fr->Octet[8], *RatesLen);
+
+ // many AP implement proprietary IEs in non-standard order, we'd better
+@@ -235,7 +236,7 @@
+ }
+ break;
+ default:
+- DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity - ignore unrecognized EID = %d\n", eid_ptr->Eid);
++ DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity - ignore unrecognized EID=%d (Len=%d)\n", eid_ptr->Eid, eid_ptr->Len);
+ break;
+ }
+
+@@ -247,7 +248,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -256,11 +257,11 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerDisassocSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *Reason)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -270,7 +271,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -279,11 +280,11 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerDeauthSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *Reason)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -293,7 +294,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -302,14 +303,14 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerAuthSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT USHORT *Alg,
+- OUT USHORT *Seq,
+- OUT USHORT *Status,
+- CHAR *ChlgText)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT USHORT *Alg,
++ OUT USHORT *Seq,
++ OUT USHORT *Status,
++ CHAR *ChlgText)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -318,43 +319,43 @@
+ memcpy(Seq, &Fr->Octet[2], 2);
+ memcpy(Status, &Fr->Octet[4], 2);
+
+- if (*Alg == Ndis802_11AuthModeOpen)
++ if (*Alg == Ndis802_11AuthModeOpen)
+ {
+- if (*Seq == 1 || *Seq == 2)
++ if (*Seq == 1 || *Seq == 2)
+ {
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong Seg#\n");
+ return FALSE;
+ }
+- }
+- else if (*Alg == Ndis802_11AuthModeShared)
++ }
++ else if (*Alg == Ndis802_11AuthModeShared)
+ {
+- if (*Seq == 1 || *Seq == 4)
++ if (*Seq == 1 || *Seq == 4)
+ {
+ return TRUE;
+- }
+- else if (*Seq == 2 || *Seq == 3)
++ }
++ else if (*Seq == 2 || *Seq == 3)
+ {
+ memcpy(ChlgText, &Fr->Octet[8], CIPHER_TEXT_LEN);
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong Seg#\n");
+ return FALSE;
+ }
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong algorithm\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -363,14 +364,14 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerProbeReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
+ OUT MACADDR *Addr2,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen)
+-// OUT UCHAR Rates[],
+-// OUT UCHAR *RatesLen)
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen)
++// OUT UCHAR Rates[],
++// OUT UCHAR *RatesLen)
+ {
+ UCHAR Idx;
+ UCHAR RateLen;
+@@ -379,27 +380,27 @@
+
+ COPY_MAC_ADDR(Addr2, &Fr->Hdr.Addr2);
+
+- if ((Fr->Octet[0] != IE_SSID) || (Fr->Octet[1] > MAX_LEN_OF_SSID))
++ if ((Fr->Octet[0] != IE_SSID) || (Fr->Octet[1] > MAX_LEN_OF_SSID))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerProbeReqSanity fail - wrong SSID IE(Type=%d,Len=%d)\n",Fr->Octet[0],Fr->Octet[1]);
+ return FALSE;
+- }
+-
++ }
++
+ *SsidLen = Fr->Octet[1];
+ memcpy(Ssid, &Fr->Octet[2], *SsidLen);
+
+-#if 1
++#if 1
+ Idx = *SsidLen + 2;
+
+ // -- get supported rates from payload and advance the pointer
+ IeType = Fr->Octet[Idx];
+ RateLen = Fr->Octet[Idx + 1];
+- if (IeType != IE_SUPP_RATES)
++ if (IeType != IE_SUPP_RATES)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerProbeReqSanity fail - wrong SupportRates IE(Type=%d,Len=%d)\n",Fr->Octet[Idx],Fr->Octet[Idx+1]);
+ return FALSE;
+ }
+- else
++ else
+ {
+ if ((pAd->PortCfg.AdhocMode == 2) && (RateLen < 8))
+ return (FALSE);
+@@ -408,7 +409,95 @@
+ return TRUE;
+ }
+
+-/*
++static inline void handle_country_ie(
++ country_ie_p p)
++{
++ int i;
++
++ DBGPRINT(RT_DEBUG_INFO,
++ " - IE_COUNTRY (ID=%d) (Len=%d) "
++ "(string=\"%c%c:%c\")\n",
++ p->eid, p->length, p->cs.co[0], p->cs.co[1], p->cs.env);
++
++ // drop malformed elements
++ if (p->length & 1 || p->length < 6) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid length\n");
++ return;
++ }
++ for (i = 0; i < offsetof(country_string_t, env); i++) {
++ if (p->cs.co[i] < 'A' || p->cs.co[i] > 'z') {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid co fld\n");
++ return;
++ }
++ }
++ if (p->cs.env != ' ' && p->cs.env != 'O' && p->cs.env != 'I') {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid env field\n");
++ return;
++ }
++ if (p->length % 3 && *(char *)((char *)p + p->length + 1) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY pad non-null\n");
++ return;
++ }
++#ifdef RT2500_DBG
++ {
++ int num_subelements = p->length/3 - 1;
++ country_subelement_p sep = p->chans;
++ for (i = 0; i < num_subelements; i++, sep++)
++ {
++ DBGPRINT(RT_DEBUG_INFO,
++ " - Band %d First chan=%d, Num chans=%d, Max Tx Pwr=%d\n",
++ i, sep->first_chan, sep->num_chans, sep->max_tx_pwr);
++ }
++ }
++#endif /* RT2500_DBG */
++ /* TODO */
++
++} /* End handle_country_ie () */
++
++static inline int handle_rsn_ie(
++ rsn_ie_p p,
++ PNDIS_802_11_VARIABLE_IEs pVIE)
++{
++ DBGPRINT(RT_DEBUG_INFO,
++ " - IE_RSN (ID=%d, Len=%d)\n",
++ p->eid, p->length);
++
++ // drop malformed elements
++ if (p->length < 2 || p->length & 1) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid length\n");
++ return 0;
++ }
++ if (wtohs(p->version) != 1) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid version %d\n",
++ p->version);
++ return 0;
++ }
++ if (p->length >= 6) { // group cipher suite
++ if (!RTMPEqualMemory(&p->gcsuite.oui, wpa2_oui, sizeof(wpa2_oui)))
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid oui "
++ "%02x %02x %02x\n",
++ p->gcsuite.oui[0], p->gcsuite.oui[1], p->gcsuite.oui[2]);
++ return 0;
++ }
++ }
++ // Copy to pVIE which will report to microsoft bssid list.
++ pVIE->ElementID = p->eid;
++ pVIE->Length = p->length;
++ memcpy(pVIE->data, &p->version, p->length);
++
++ return (p->length + 2);
++
++} /* End handle_rsn_ie () */
++
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -417,47 +506,56 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerBeaconAndProbeRspSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT MACADDR *Bssid,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *BssType,
+- OUT USHORT *BeaconPeriod,
+- OUT UCHAR *Channel,
+- OUT LARGE_INTEGER *Timestamp,
+- OUT BOOLEAN *CfExist,
+- OUT CF_PARM *CfParm,
+- OUT USHORT *AtimWin,
+- OUT USHORT *CapabilityInfo,
+- OUT UCHAR Rate[],
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT MACADDR *Bssid,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *BssType,
++ OUT USHORT *BeaconPeriod,
++ OUT UCHAR *Channel,
++ OUT LARGE_INTEGER *Timestamp,
++ OUT BOOLEAN *CfExist,
++ OUT CF_PARM *CfParm,
++ OUT USHORT *AtimWin,
++ OUT USHORT *CapabilityInfo,
++ OUT UCHAR Rate[],
+ OUT UCHAR *RateLen,
+ OUT BOOLEAN *ExtendedRateIeExist,
+ OUT UCHAR *Erp,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *MessageToMe,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *MessageToMe,
+ OUT UCHAR *Legacy,
+ OUT UCHAR SupRate[],
+ OUT UCHAR *SupRateLen,
+ OUT UCHAR ExtRate[],
+ OUT UCHAR *ExtRateLen,
+- OUT PNDIS_802_11_VARIABLE_IEs pVIE)
++ OUT USHORT *VarIELen, // Length of all saved IEs.
++ OUT PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ CHAR *Ptr, TimLen;
+ MACFRAME *Fr;
+ PBEACON_EID_STRUCT eid_ptr;
+ UCHAR SubType;
+ UCHAR Sanity;
++ UCHAR VarIE[MAX_VIE_LEN];
++
++ // armor against buffer overflow
++ UCHAR *vielim = &VarIE[MAX_VIE_LEN];
++ NDIS_802_11_VARIABLE_IEs *ptVIE = (PNDIS_802_11_VARIABLE_IEs)VarIE;
++
++ DBGPRINT(RT_DEBUG_TRACE,"===> %s\n", __FUNCTION__);
+
+ // Add for 3 necessary EID field check
+ Sanity = 0;
+
+ *ExtendedRateIeExist = FALSE;
+ *Erp = 0;
++ *VarIELen = 0;
+
+ Fr = (MACFRAME *)Msg;
+
+@@ -481,40 +579,48 @@
+ // get capability info from payload and advance the pointer
+ memcpy(CapabilityInfo, Ptr, 2);
+ Ptr += 2;
+- if (CAP_IS_ESS_ON(*CapabilityInfo))
++ DBGPRINT(RT_DEBUG_INFO, " - CapabilityInfo=0x%.2x\n", *CapabilityInfo);
++ if (CAP_IS_ESS_ON(*CapabilityInfo))
+ {
+ *BssType = BSS_INFRA;
+- }
+- else
++ }
++ else
+ {
+ *BssType = BSS_INDEP;
+ }
+
+ // Mask out unnecessary capability information
+ *CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+-
++
+ eid_ptr = (PBEACON_EID_STRUCT) Ptr;
+
+ // get variable fields from payload and advance the pointer
+ while(((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen))
+ {
++ DBGPRINT(RT_DEBUG_INFO, " - IE #%d len=%d\n",
++ eid_ptr->Eid, eid_ptr->Len);
+ switch(eid_ptr->Eid)
+ {
+ case IE_SSID:
+- // Already has one SSID EID in this beacon, ignore the second one
++ // Already have one SSID EID in this beacon, ignore second one
+ if (Sanity & 0x1)
+ break;
+ if(eid_ptr->Len <= MAX_LEN_OF_SSID)
+ {
+ memcpy(Ssid, eid_ptr->Octet, eid_ptr->Len);
+- memset(Ssid + eid_ptr->Len,0,1);
++ if (eid_ptr->Len < MAX_LEN_OF_SSID)
++ memset(Ssid + eid_ptr->Len,0,1);
+ *SsidLen = eid_ptr->Len;
+ Sanity |= 0x1;
+- //DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - ESSID=%s Len=%d\n",Ssid,eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_INFO, " - SSID=%s Len=%d\n",
++ Ssid, eid_ptr->Len);
++ DBGHEXSTR(RT_DEBUG_INFO, " - SSID(hex)=",
++ Ssid, eid_ptr->Len);
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - bad IE_SSID len=%d\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+@@ -546,13 +652,15 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_SUPP_RATES (len=%d)\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+
+ case IE_FH_PARM:
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n");
++ DBGPRINT(RT_DEBUG_INFO, " - (IE_FH_PARM) \n");
+ break;
+
+ case IE_DS_PARM:
+@@ -561,14 +669,18 @@
+ *Channel = *eid_ptr->Octet;
+ if (ChannelSanity(pAd, *Channel) == 0)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (ch=%d)\n",*Channel);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_DS_PARM (ch=%d)\n",
++ __FUNCTION__, *Channel);
+ return FALSE;
+ }
+ Sanity |= 0x4;
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_DS_PARM (len=%d)\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+@@ -581,7 +693,8 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n");
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - wrong IE_CF_PARM\n",
++ __FUNCTION__);
+ return FALSE;
+ }
+ break;
+@@ -593,7 +706,8 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n");
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - wrong IE_IBSS_PARM\n",
++ __FUNCTION__);
+ return FALSE;
+ }
+ break;
+@@ -605,18 +719,45 @@
+ }
+ break;
+
++ case IE_COUNTRY:
++ handle_country_ie((country_ie_p)eid_ptr);
++ break;
++
+ // New for WPA
+ case IE_WPA:
+- // Check the OUI version, filter out non-standard usage
+- if (RTMPEqualMemory(eid_ptr->Octet, WPA_OUI, 4))
+- {
+- // Copy to pVIE which will report to microsoft bssid list.
+- pVIE->ElementID = eid_ptr->Eid;
+- pVIE->Length = eid_ptr->Len;
+- memcpy(pVIE->data, eid_ptr->Octet, eid_ptr->Len);
+- }
+- DBGPRINT(RT_DEBUG_INFO, "PeerBeaconAndProbeRspSanity - Receive IE_WPA\n");
+- break;
++ if (vielim >= (UCHAR *)ptVIE + eid_ptr->Len + 2)
++ {
++ // ptVIE will report to microsoft bssid list.
++ ptVIE->ElementID = eid_ptr->Eid;
++ ptVIE->Length = eid_ptr->Len;
++ memcpy(ptVIE->data, eid_ptr->Octet, eid_ptr->Len);
++ ptVIE = (PNDIS_802_11_VARIABLE_IEs)((UCHAR *)ptVIE +
++ ptVIE->Length + 2);
++ DBGPRINT(RT_DEBUG_INFO, " - OUI (%02x:%02x:%02x:%02x)\n",
++ eid_ptr->Octet[0], eid_ptr->Octet[1],
++ eid_ptr->Octet[2], eid_ptr->Octet[3]);
++ }
++ else
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_WPA rcv area needs %d bytes: has %d left\n",
++ eid_ptr->Len + 2, vielim - (UCHAR *)ptVIE);
++ }
++ break;
++
++ case IE_RSN:
++ if (vielim >= (UCHAR *)ptVIE + eid_ptr->Len + 2)
++ {
++ ptVIE = (PNDIS_802_11_VARIABLE_IEs)((UCHAR *)ptVIE +
++ handle_rsn_ie((rsn_ie_p)eid_ptr, ptVIE));
++ }
++ else
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN rcv area needs %d bytes: has %d left\n",
++ eid_ptr->Len + 2, vielim - (UCHAR *)ptVIE);
++ }
++ break;
+
+ case IE_EXT_SUPP_RATES:
+ // concatenate all extended rates to Rates[] and RateLen
+@@ -654,15 +795,20 @@
+ *Erp = (UCHAR)eid_ptr->Octet[0];
+ }
+ break;
+-
++
+ default:
+- DBGPRINT(RT_DEBUG_INFO, "PeerBeaconAndProbeRspSanity - unrecognized EID = %d\n", eid_ptr->Eid);
++ DBGPRINT(RT_DEBUG_ERROR, " - EID=%d (Len=%d) unrecognized\n",
++ eid_ptr->Eid, eid_ptr->Len);
+ break;
+ }
+-
++
+ eid_ptr = (PBEACON_EID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len);
+ }
+-
++ if ((UCHAR *)ptVIE > VarIE) {
++ int vielen = (UCHAR *)ptVIE - VarIE;
++ *VarIELen = vielen;
++ memcpy(pVIE, VarIE, vielen);
++ }
+
+ // in 802.11a band, AP may skip this DS IE in their BEACON
+ if ((pAd->PortCfg.Channel > 14) && ((Sanity & 0x04)==0))
+@@ -670,7 +816,8 @@
+ *Channel = pAd->PortCfg.Channel;
+ Sanity |= 0x04;
+ }
+-
++
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s: Sanity=0x%02x\n", __FUNCTION__, Sanity);
+ if (Sanity != 0x7)
+ {
+ DBGPRINT(RT_DEBUG_WARN, "PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity);
+@@ -683,19 +830,19 @@
+
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ BOOLEAN GetTimBit(
+- IN CHAR *Ptr,
+- IN USHORT Aid,
+- OUT UCHAR *TimLen,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *DtimCount,
++ IN CHAR *Ptr,
++ IN USHORT Aid,
++ OUT UCHAR *TimLen,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *DtimCount,
+ OUT UCHAR *DtimPeriod,
+- OUT UCHAR *MessageToMe)
++ OUT UCHAR *MessageToMe)
+ {
+ UCHAR BitCntl, N1, N2, MyByte, MyBit;
+ CHAR *IdxPtr;
+@@ -717,11 +864,11 @@
+ IdxPtr++;
+ BitCntl = *IdxPtr;
+
+- if ((*DtimCount == 0) && (BitCntl & 0x01))
++ if ((*DtimCount == 0) && (BitCntl & 0x01))
+ *BcastFlag = TRUE;
+- else
++ else
+ *BcastFlag = FALSE;
+-
++
+ #if 1
+ // Parse Partial Virtual Bitmap from TIM element
+ N1 = BitCntl & 0xfe; // N1 is the first bitmap byte#
+@@ -738,10 +885,10 @@
+
+ //if (*IdxPtr)
+ // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr));
+-
++
+ if (*IdxPtr & (0x01 << MyBit))
+ *MessageToMe = TRUE;
+- else
++ else
+ *MessageToMe = FALSE;
+ }
+ #else
+@@ -760,15 +907,15 @@
+ * \post
+ */
+ BOOLEAN GetLegacy(
+- IN CHAR *Ptr,
+- OUT UCHAR *Legacy)
++ IN CHAR *Ptr,
++ OUT UCHAR *Legacy)
+ {
+ *Legacy = 0;
+ return TRUE;
+ }
+
+ UCHAR ChannelSanity(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel)
+ {
+ UCHAR index;
+@@ -780,52 +927,52 @@
+ }
+ return 0;
+
+-#if 0
++#if 0
+ switch (pAd->PortCfg.CountryRegion)
+ {
+ case REGION_FCC: // 1 - 11
+ if ((channel > 0) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_IC: // 1 -11
+ if ((channel > 0) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_ETSI: // 1 - 13
+ if ((channel > 0) && (channel < 14))
+ return 1;
+ break;
+-
++
+ case REGION_SPAIN: // 10 - 11
+ if ((channel > 9) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_FRANCE: // 10 -13
+ if ((channel > 9) && (channel < 14))
+ return 1;
+ break;
+-
++
+ case REGION_MKK: // 14
+- if (channel == 14)
++ if (channel == 14)
+ return 1;
+ break;
+-
++
+ case REGION_MKK1: // 1 - 14
+ if ((channel > 0) && (channel < 15))
+ return 1;
+ break;
+-
++
+ case REGION_ISRAEL: // 3 - 9
+ if ((channel > 2) && (channel < 10))
+ return 1;
+ break;
+-
++
+ default: // Error
+- return 0;
+- }
++ return 0;
++ }
+ return (0);
+-#endif
++#endif
+ }
+diff -Nur rt2500-1.1.0-b4/Module/sync.c rt2500-cvs-2007061011/Module/sync.c
+--- rt2500-1.1.0-b4/Module/sync.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/sync.c 2007-05-15 21:41:35.000000000 +0200
+@@ -1,37 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: sync.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: sync.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 5th Jun 05 Fix no-SSID broadcasting assoc.
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -59,7 +59,7 @@
+ /*
+ ==========================================================================
+ Description:
+- The sync state machine,
++ The sync state machine,
+ Parameters:
+ Sm - pointer to the state machine
+ Note:
+@@ -93,9 +93,9 @@
+ ==========================================================================
+ */
+ VOID SyncStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *Sm,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *Sm,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, (STATE_MACHINE_FUNC)Drop, SYNC_IDLE, SYNC_MACHINE_BASE);
+
+@@ -105,7 +105,7 @@
+ StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)MlmeStartReqAction);
+ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeacon);
+ // StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_RSP, (STATE_MACHINE_FUNC)PeerBeacon);
+- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction);
++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction);
+
+ //column 2
+ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan);
+@@ -127,14 +127,14 @@
+ RTMPInitTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ScanTimeout);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Becaon timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID BeaconTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+@@ -143,30 +143,30 @@
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ATIM timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID AtimTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"SYNC - AtimTimeout \n");
+ MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_ATIM_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID ScanTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+@@ -175,15 +175,15 @@
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME SCAN req state machine procedure
+ ==========================================================================
+ */
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType;
+ ULONG Now;
+@@ -192,13 +192,13 @@
+ RTMPSuspendMsduTransmission(pAd);
+
+ // first check the parameter sanity
+- if (MlmeScanReqSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &BssType,
+- Ssid,
+- &SsidLen,
+- &ScanType))
++ if (MlmeScanReqSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &BssType,
++ Ssid,
++ &SsidLen,
++ &ScanType))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - MlmeScanReqAction\n");
+ Now = jiffies;
+@@ -212,12 +212,12 @@
+ pAd->Mlme.SyncAux.ScanType = ScanType;
+ pAd->Mlme.SyncAux.SsidLen = SsidLen;
+ memcpy(pAd->Mlme.SyncAux.Ssid, Ssid, SsidLen);
+-
++
+ // start from the first channel
+ pAd->Mlme.SyncAux.Channel = FirstChannel(pAd);
+ ScanNextChannel(pAd);
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "SYNC - MlmeScanReqAction() sanity check fail. BUG!!!\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+@@ -225,15 +225,15 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME JOIN req state machine procedure
+ ==========================================================================
+ */
+ VOID MlmeJoinReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ BSS_ENTRY *pBss;
+ MLME_JOIN_REQ_STRUCT *Info = (MLME_JOIN_REQ_STRUCT *)(Elem->Msg);
+@@ -255,7 +255,7 @@
+ AsicSwitchChannel(pAd, pBss->Channel);
+ AsicLockChannel(pAd, pBss->Channel);
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Switch to channel %d, SSID %s \n", pBss->Channel, pAd->Mlme.SyncAux.Ssid);
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->Mlme.SyncAux.Bssid.Octet[0], pAd->Mlme.SyncAux.Bssid.Octet[1],
+ pAd->Mlme.SyncAux.Bssid.Octet[2], pAd->Mlme.SyncAux.Bssid.Octet[3],
+ pAd->Mlme.SyncAux.Bssid.Octet[4], pAd->Mlme.SyncAux.Bssid.Octet[5]);
+@@ -264,17 +264,17 @@
+ pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME START Request state machine procedure, starting an IBSS
+ ==========================================================================
+ */
+ VOID MlmeStartReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen;
++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen;
+
+ // New for WPA security suites
+ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+@@ -293,20 +293,20 @@
+ TimeStamp.vv.LowPart = 0;
+ TimeStamp.vv.HighPart = 0;
+
+- if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen))
++ if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen))
+ {
+ // reset all the timers
+ RTMPCancelTimer(&pAd->Mlme.SyncAux.ScanTimer);
+ RTMPCancelTimer(&pAd->Mlme.SyncAux.BeaconTimer);
+
+- // PortCfg.PrivacyInvoked should have been set via OID_802_11_WEP_STATUS.
++ // PortCfg.PrivacyInvoked should have been set via OID_802_11_WEP_STATUS.
+ // pAd->PortCfg.PrivacyInvoked = FALSE;
+
+- memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
++ memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
+ pAd->PortCfg.SsidLen = SsidLen;
+ pAd->PortCfg.BssType = BSS_INDEP;
+- Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
+- (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
++ Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
++ (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
+ (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);
+ pAd->PortCfg.CapabilityInfo = CAP_GENERATE(0,1,0,0,Privacy, (pAd->PortCfg.WindowsTxPreamble == Rt802_11PreambleShort));
+ pAd->PortCfg.BeaconPeriod = pAd->PortCfg.IbssConfig.BeaconPeriod;
+@@ -328,7 +328,7 @@
+
+ // generate a radom number as BSSID
+ MacAddrRandomBssid(pAd, &pAd->PortCfg.Bssid);
+- AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
++ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+
+@@ -341,17 +341,17 @@
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+ Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &pAd->PortCfg.Bssid,
+- Ssid, SsidLen, pAd->PortCfg.BssType, pAd->PortCfg.BeaconPeriod,
+- CfExist, &CfParm, pAd->PortCfg.AtimWin, pAd->PortCfg.CapabilityInfo,
++ Ssid, SsidLen, pAd->PortCfg.BssType, pAd->PortCfg.BeaconPeriod,
++ CfExist, &CfParm, pAd->PortCfg.AtimWin, pAd->PortCfg.CapabilityInfo,
+ pAd->PortCfg.SupportedRates, pAd->PortCfg.SupportedRatesLen, TRUE,
+- pAd->PortCfg.Channel, Elem->Rssi, TimeStamp, pVIE);
++ pAd->PortCfg.Channel, Elem->Rssi, TimeStamp, 0, pVIE);
+ }
+ #endif
+
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_START_CONF, (USHORT)MLME_SUCCESS);
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "SYNC - MlmeStartReqAction() sanity check fail. BUG!!!\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+@@ -359,18 +359,18 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ peer sends beacon back when scanning
+ ==========================================================================
+ */
+ VOID PeerBeaconAtScanAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+- UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen,
++ UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen,
+ SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe, Legacy;
+ CF_PARM CfParm;
+ USHORT BeaconPeriod, AtimWin, CapabilityInfo;
+@@ -383,54 +383,55 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00);
+ Fr = (MACFRAME *) Elem->Msg;
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+- pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid, Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &CfParm,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid, Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &CfParm,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ ULONG Idx;
+ UCHAR Rssi = 0;
+ UCHAR Noise = 0;
+
+ // This correct im-proper RSSI indication during SITE SURVEY issue.
+- // Always report bigger RSSI during SCANNING when receiving multiple BEACONs from the same AP.
+- // This case happens because BEACONs come from adjacent channels, so RSSI become weaker as we
++ // Always report bigger RSSI during SCANNING when receiving multiple BEACONs from the same AP.
++ // This case happens because BEACONs come from adjacent channels, so RSSI become weaker as we
+ // switch to more far away channels.
+ Idx = BssTableSearch(&pAd->PortCfg.BssTab, &Bssid);
+ if (Idx != BSS_NOT_FOUND)
+- {
++ {
+ Rssi = pAd->PortCfg.BssTab.BssEntry[Idx].Rssi;
+ Noise = pAd->PortCfg.BssTab.BssEntry[Idx].Noise;
+ }
+@@ -445,25 +446,25 @@
+
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+- BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen, BssType,
+- BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo, Rates,
+- RatesLen, ExtendedRateIeExist, Channel, Rssi, Noise, TimeStamp, pVIE);
++ BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen, BssType,
++ BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo, Rates,
++ RatesLen, ExtendedRateIeExist, Channel, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ }
+ // sanity check fail, ignored
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ When waiting joining the (I)BSS, beacon received from external
+ ==========================================================================
+ */
+ VOID PeerBeaconAtJoinAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, RatesLen, MessageToMe,
++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, RatesLen, MessageToMe,
+ Rates[MAX_LEN_OF_SUPPORTED_RATES], DtimCount, DtimPeriod, BcastFlag, Legacy;
+ LARGE_INTEGER TimeStamp;
+ USHORT BeaconPeriod, AtimWin, CapabilityInfo;
+@@ -474,46 +475,48 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+ pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid,
+- Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &Cf,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid,
++ Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &Cf,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ // Disqualify 11b only adhoc when we are in 11g only adhoc mode
+ if ((BssType == BSS_INDEP) && (pAd->PortCfg.AdhocMode == 2) && (RatesLen < 12))
+ return;
+-
++
+ if (MAC_ADDR_EQUAL(&pAd->Mlme.SyncAux.Bssid, &Bssid))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - receive desired BEACON at JoinWaitBeacon...\n");
+@@ -522,7 +525,7 @@
+ // Update RSSI to prevent No signal display when cards first initialized
+ pAd->PortCfg.LastRssi = Elem->Rssi;
+ pAd->PortCfg.AvgRssi = Elem->Rssi;
+-
++
+ if (pAd->Mlme.SyncAux.SsidLen > 0)
+ {
+ memcpy(pAd->PortCfg.Ssid, pAd->Mlme.SyncAux.Ssid, pAd->Mlme.SyncAux.SsidLen);
+@@ -533,7 +536,7 @@
+ memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
+ pAd->PortCfg.SsidLen = SsidLen;
+ }
+-
++
+ COPY_MAC_ADDR(&pAd->PortCfg.Bssid, &Bssid);
+ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+
+@@ -620,22 +623,22 @@
+ {
+ pAd->PortCfg.ExtRateLen = 0;
+ }
+-
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP's SupportedRatesLen=%d, set STA's SupportedRateLen=%d\n",
++
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP's SupportedRatesLen=%d, set STA's SupportedRateLen=%d\n",
+ RatesLen, pAd->PortCfg.SupportedRatesLen);
+-
++
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+-
++
+ // Check for 802.11g information, if 802.11 b/g mixed mode.
+ // We can't support its short preamble for now.
+ pAd->PortCfg.CapabilityInfo = CapabilityInfo;
+
+- if ((BssType == BSS_INDEP) && (CAP_IS_IBSS_ON(CapabilityInfo)))
++ if ((BssType == BSS_INDEP) && (CAP_IS_IBSS_ON(CapabilityInfo)))
+ {
+ pAd->PortCfg.AtimWin = AtimWin;
+- }
+- else if (BssType == BSS_INFRA)
++ }
++ else if (BssType == BSS_INFRA)
+ {
+ pAd->PortCfg.CfpPeriod = Cf.CfpPeriod;
+ pAd->PortCfg.CfpMaxDuration = Cf.CfpMaxDuration;
+@@ -650,19 +653,19 @@
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_SUCCESS);
+ }
+ // not to me BEACON, ignored
+- }
++ }
+ // sanity check fail, ignore this frame
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ receive BEACON from peer
+ ==========================================================================
+ */
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+@@ -679,7 +682,8 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ if (!INFRA_ON(pAd) && !ADHOC_ON(pAd))
+@@ -688,35 +692,36 @@
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+ pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid,
+- Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &CfParm,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid,
++ Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &CfParm,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ BOOLEAN is_my_bssid, is_my_ssid;
+ ULONG Bssidx, Now;
+@@ -732,7 +737,7 @@
+ return;
+
+ //
+- // Housekeeping "SsidBssTab" table for later-on ROAMing usage.
++ // Housekeeping "SsidBssTab" table for later-on ROAMing usage.
+ //
+ Bssidx = BssTableSearch(&pAd->Mlme.CntlAux.SsidBssTab, &Bssid);
+ if (Bssidx == BSS_NOT_FOUND)
+@@ -743,24 +748,24 @@
+ return;
+ if (!RTMPEqualMemory(pAd->PortCfg.Ssid, pAd->Mlme.CntlAux.Ssid, pAd->PortCfg.SsidLen))
+ return;
+-
++
+ // discover new AP of this network, create BSS entry
+- Bssidx = BssTableSetEntry(pAd, &pAd->Mlme.CntlAux.SsidBssTab, &Bssid, Ssid, SsidLen,
+- BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
+- Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, pVIE);
++ Bssidx = BssTableSetEntry(pAd, &pAd->Mlme.CntlAux.SsidBssTab, &Bssid, Ssid, SsidLen,
++ BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
++ Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, VarIELen, pVIE);
+
+ if (Bssidx == BSS_NOT_FOUND) // return if BSS table full
+- return;
++ return;
+
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - New AP added to SsidBssTab[%d], RSSI=%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+- Bssidx, Elem->Rssi, Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - New AP added to SsidBssTab[%d], RSSI=%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ Bssidx, Elem->Rssi, Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
+ Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5]);
+ }
+
+ // if the ssid matched & bssid unmatched, we should select the bssid with large value.
+ // This might happened when two STA start at the same time
+- if (is_my_ssid && (! is_my_bssid) && ADHOC_ON(pAd))
+- {
++ if (is_my_ssid && (! is_my_bssid) && ADHOC_ON(pAd)
++ && (BssType == BSS_INDEP)) {
+ INT i;
+ // Add to safe guard adhoc wep status mismatch
+ if (pAd->PortCfg.WepStatus != pAd->Mlme.CntlAux.SsidBssTab.BssEntry[Bssidx].WepStatus)
+@@ -773,7 +778,7 @@
+ {
+ AsicDisableSync(pAd);
+ memcpy(&pAd->PortCfg.Bssid, &Bssid, 6);
+- AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
++ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+ MakeIbssBeacon(pAd);
+ AsicEnableIbssSync(pAd);
+ break;
+@@ -781,9 +786,9 @@
+ }
+ }
+
+- DBGPRINT(RT_DEBUG_INFO, "SYNC - PeerBeacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%02x\n",
+- Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
+- Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5],
++ DBGPRINT(RT_DEBUG_INFO, "SYNC - PeerBeacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%02x\n",
++ Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
++ Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5],
+ DtimCount, DtimPeriod, Elem->Rssi);
+
+ Now = jiffies;
+@@ -793,24 +798,24 @@
+
+ //
+ // BEACON from my BSSID - either IBSS or INFRA network
+- //
++ //
+ if (is_my_bssid)
+ {
+- // 2002/12/06 - patch Abocom AP bug, which forgets to set "Privacy" bit in
+- // AssocRsp even though this bit is ON in Beacon. So we update according
++ // 2002/12/06 - patch Abocom AP bug, which forgets to set "Privacy" bit in
++ // AssocRsp even though this bit is ON in Beacon. So we update according
+ // to following Beacon frame.
+ // pAd->PortCfg.PrivacyInvoked = CAP_IS_PRIVACY_ON(CapabilityInfo);
+-
++
+ pAd->PortCfg.LastBeaconRxTime = Now;
+ #if 1
+ // at least one 11b peer joined. downgrade the MaxTxRate to 11Mbps
+ // after last 11b peer left for several seconds, we'll auto switch back to 11G rate
+ // in MlmePeriodicExec()
+- if (ADHOC_ON(pAd) && (RatesLen <= 4))
++ if (ADHOC_ON(pAd) && (RatesLen <= 4))
+ {
+ // this timestamp is for MlmePeriodicExec() to check if all 11B peers have left
+ pAd->PortCfg.Last11bBeaconRxTime = Now;
+-
++
+ if (pAd->PortCfg.MaxTxRate > RATE_11)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - 11b peer joined. down-grade to 11b TX rates \n");
+@@ -828,22 +833,22 @@
+ (pAd->PortCfg.LastRssi < pAd->PortCfg.RssiTrigger))
+ {
+ // NDIS_802_11_RSSI Dbm = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET;
+- // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, less than threshold %d dBm\n",
++ // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, less than threshold %d dBm\n",
+ // Dbm, pAd->PortCfg.RssiTrigger - RSSI_TO_DBM_OFFSET);
+ }
+ else if ((pAd->PortCfg.RssiTriggerMode == RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD) &&
+ (pAd->PortCfg.LastRssi > pAd->PortCfg.RssiTrigger))
+ {
+ // NDIS_802_11_RSSI Dbm = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET;
+- // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, greater than threshold %d dBm\n",
++ // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, greater than threshold %d dBm\n",
+ // Dbm, pAd->PortCfg.RssiTrigger - RSSI_TO_DBM_OFFSET);
+ }
+
+ if (INFRA_ON(pAd)) // && (pAd->PortCfg.PhyMode == PHY_11BG_MIXED))
+ {
+ BOOLEAN bUseShortSlot, bUseBGProtection;
+-
+- // decide to use/change to -
++
++ // decide to use/change to -
+ // 1. long slot (20 us) or short slot (9 us) time
+ // 2. turn on/off RTS/CTS and/or CTS-to-self protection
+ // 3. short preamble
+@@ -867,7 +872,7 @@
+ }
+
+ // only INFRASTRUCTURE mode support power-saving feature
+- if (INFRA_ON(pAd) && (pAd->PortCfg.Psm == PWR_SAVE))
++ if (INFRA_ON(pAd) && (pAd->PortCfg.Psm == PWR_SAVE))
+ {
+ // 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL
+ // 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE
+@@ -882,17 +887,17 @@
+ else if (BcastFlag && (DtimCount == 0) && pAd->PortCfg.RecvDtim)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP backlog broadcast/multicast, stay AWAKE\n");
+- }
++ }
+ else if ((RTMPFreeDescriptorRequest(pAd, TX_RING, TX_RING_SIZE) != NDIS_STATUS_SUCCESS) ||
+ (RTMPFreeDescriptorRequest(pAd, PRIO_RING, PRIO_RING_SIZE) != NDIS_STATUS_SUCCESS))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - outgoing frame in TxRing/PrioRing, stay AWAKE\n");
+ }
+- else
++ else
+ {
+ USHORT NextDtim = DtimCount;
+
+- if (NextDtim == 0)
++ if (NextDtim == 0)
+ NextDtim = DtimPeriod;
+
+ TbttNumToNextWakeUp = pAd->PortCfg.DefaultListenCount;
+@@ -906,20 +911,21 @@
+
+ #ifndef SINGLE_ADHOC_LINKUP
+ // At least another peer in this IBSS, declare MediaState as CONNECTED
+- if (ADHOC_ON(pAd) && (pAd->MediaState == NdisMediaStateDisconnected))
+- {
++ if (ADHOC_ON(pAd)
++ && (pAd->MediaState == NdisMediaStateDisconnected)
++ && (BssType == BSS_INDEP)) {
+ pAd->MediaState = NdisMediaStateConnected;
+
+ // 2003/03/12 - john
+ // Make sure this entry in "PortCfg.BssTab" table, thus complies to Microsoft's policy that
+- // "site survey" result should always include the current connected network.
++ // "site survey" result should always include the current connected network.
+ //
+ Bssidx = BssTableSearch(&pAd->PortCfg.BssTab, &Bssid);
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+- Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen,
+- BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
+- Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, pVIE);
++ Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen,
++ BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
++ Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, VarIELen, pVIE);
+ }
+ }
+ #endif
+@@ -929,15 +935,15 @@
+ // sanity check fail, ignore this frame
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Receive PROBE REQ from remote peer when operating in IBSS mode
+ ==========================================================================
+ */
+ VOID PeerProbeReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+@@ -947,13 +953,13 @@
+ UCHAR *OutBuffer = NULL;
+ ULONG FrameLen = 0;
+ LARGE_INTEGER FakeTimestamp;
+- UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
++ UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
+ DsLen = 1, IbssLen = 2;
+ UCHAR SupportedRatesLen;
+ UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
+ UCHAR ExtRateIe = IE_EXT_SUPP_RATES, ExtRatesLen;
+ UCHAR ErpIe[3] = {IE_ERP, 1, 0};
+-
++
+ if (! ADHOC_ON(pAd))
+ return;
+
+@@ -962,8 +968,8 @@
+ if ((SsidLen == 0) || RTMPEqualMemory(Ssid, pAd->PortCfg.Ssid, (ULONG) SsidLen))
+ {
+ CSR15_STRUC Csr15;
+-
+- // we should respond a ProbeRsp only when we're the last BEACON transmitter
++
++ // we should respond a ProbeRsp only when we're the last BEACON transmitter
+ // in this ADHOC network.
+ RTMP_IO_READ32(pAd, CSR15, &Csr15.word);
+ if (Csr15.field.BeaconSent == 0)
+@@ -1016,28 +1022,28 @@
+ return;
+
+ pAd->PortCfg.AtimWin = 0; // ??????
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - Send PROBE_RSP to %02x:%02x:%02x:%02x:%02x:%02x...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Send PROBE_RSP to %02x:%02x:%02x:%02x:%02x:%02x...\n",
+ Addr2.Octet[0],Addr2.Octet[1],Addr2.Octet[2],Addr2.Octet[3],Addr2.Octet[4],Addr2.Octet[5] );
+ MgtMacHeaderInit(pAd, &ProbeRspHdr, SUBTYPE_PROBE_RSP, 0, &Addr2, &pAd->PortCfg.Bssid);
+
+ if (SupportedRatesLen <= 8)
+ {
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &ProbeRspHdr,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &ProbeRspHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &pAd->PortCfg.CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ END_OF_ARGS);
+ }
+@@ -1045,22 +1051,22 @@
+ {
+ ExtRatesLen = SupportedRatesLen - 8;
+ SupportedRatesLen = 8;
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &ProbeRspHdr,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &ProbeRspHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &pAd->PortCfg.CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ 3, ErpIe,
+ 1, &ExtRateIe,
+@@ -1073,7 +1079,7 @@
+ {
+ ULONG tmp;
+ UCHAR WpaIe = IE_WPA;
+-
++
+ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) // Tkip
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -1092,43 +1098,43 @@
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+- }
++ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+ }
+ }
+
+ VOID BeaconTimeoutAtJoinAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - BeaconTimeoutAtJoinAction\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_REJ_TIMEOUT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan timeout procedure. basically add channel index by 1 and rescan
+ ==========================================================================
+ */
+ VOID ScanTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ pAd->Mlme.SyncAux.Channel = NextChannel(pAd, pAd->Mlme.SyncAux.Channel);
+ ScanNextChannel(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan next channel
+ ==========================================================================
+ */
+ VOID ScanNextChannel(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MACHDR Hdr;
+ UCHAR SsidIe = IE_SSID, SuppRateIe = IE_SUPP_RATES;
+@@ -1138,36 +1144,36 @@
+ ULONG FrameLen = 0;
+ UCHAR SsidLen = 0;
+
+- if (pAd->Mlme.SyncAux.Channel == 0)
++ if (pAd->Mlme.SyncAux.Channel == 0)
+ {
+ DBGPRINT(RT_DEBUG_INFO, "SYNC - End of SCAN, restore to channel %d\n",pAd->PortCfg.Channel);
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+-
++
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_SUCCESS);
+- }
+- else
++ }
++ else
+ {
+ AsicSwitchChannel(pAd, pAd->Mlme.SyncAux.Channel);
+
+- // Total SCAN time still limits within 3 sec (DDK constraint).
++ // Total SCAN time still limits within 3 sec (DDK constraint).
+ // TODO: We need more intelligent rules here to further improve out-of-service issue.
+ // e.g. temporary stop copying NDIS packet to TxRing until SCAN complete
+ // if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+
+ // We need to shorten active scan time in order for WZC connect issue
+- if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
+- RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ACTIVE_SCAN_TIME);
++ if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
++ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ACTIVE_SCAN_TIME);
+ else if (pAd->PortCfg.PhyMode == PHY_11ABG_MIXED)
+- RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MIN_CHANNEL_TIME);
++ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MIN_CHANNEL_TIME);
+ else
+ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MAX_CHANNEL_TIME);
+
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_PROBE_REQ, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Broadcast);
+ // There is no need to send broadcast probe request if active scan is in effect.
+ // The same rulr should apply to passive scan also.
+- if (pAd->Mlme.SyncAux.ScanType == SCAN_PASSIVE)
++ if (pAd->Mlme.SyncAux.ScanType == SCAN_PASSIVE)
+ {
+ // Send the first probe request with empty SSID
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+@@ -1184,15 +1190,15 @@
+ MakeOutgoingFrame(OutBuffer, &FrameLen,
+ sizeof(MACHDR), (UCHAR*)&Hdr,
+ 1, &SsidIe,
+- 1, &SsidLen,
++ 1, &SsidLen,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+-
++
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+- else if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
++ else if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
+ {
+ // Allocate another for probe scan with SSID
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer2); //Get an unused nonpaged memory
+@@ -1212,9 +1218,9 @@
+ SsidLen, pAd->PortCfg.Ssid,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+-
++
+ MiniportMMRequest(pAd, OutBuffer2, FrameLen);
+
+ DBGPRINT(RT_DEBUG_INFO, "SYNC - send active ProbeReq @ channel=%d with essid=%s\n", pAd->Mlme.SyncAux.Channel, pAd->PortCfg.Ssid);
+@@ -1224,55 +1230,55 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenScan(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AYNC - InvalidStateWhenScan(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenJoin(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "InvalidStateWhenJoin(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenStart(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "InvalidStateWhenStart(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_START_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID EnqueuePsPoll(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS NState;
+ PSPOLL_FRAME *PsFr;
+@@ -1291,10 +1297,10 @@
+ // driver force send out a BEACON frame to cover ADHOC mode BEACON starving issue
+ // that is, in ADHOC mode, driver guarantee itself can send out at least a BEACON
+ // per a specified duration, even the peer's clock is faster than us and win all the
+-// hardware-based BEACON TX oppertunity.
++// hardware-based BEACON TX oppertunity.
+ // we may remove this software feature once 2560 IC fix this problem in ASIC.
+ VOID EnqueueBeaconFrame(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS NState;
+ PTXD_STRUC pTxD = (PTXD_STRUC)pAd->BeaconRing.va_addr;
+@@ -1313,10 +1319,10 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+- Send out a NULL frame to AP. The prpose is to inform AP this client
++ Send out a NULL frame to AP. The prpose is to inform AP this client
+ current PSM bit.
+ NOTE:
+ This routine should only be used in infrastructure mode.
+@@ -1324,7 +1330,7 @@
+ */
+ VOID EnqueueNullFrame(
+ IN PRTMP_ADAPTER pAd,
+- IN UCHAR TxRate)
++ IN UCHAR TxRate)
+ {
+ NDIS_STATUS NState;
+ MACHDR *NullFr;
+@@ -1339,7 +1345,7 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+@@ -1359,7 +1365,7 @@
+ if (NState == NDIS_STATUS_SUCCESS)
+ {
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_PROBE_REQ, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Broadcast);
+-
++
+ // this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse
+ MakeOutgoingFrame(OutBuffer, &FrameLen,
+ sizeof(MACHDR), &Hdr,
+@@ -1368,13 +1374,13 @@
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Update PortCfg->ChannelList[] according to 1) Country Region 2) RF IC type,
+@@ -1464,7 +1470,7 @@
+ }
+
+ pAd->PortCfg.ChannelListNum = index;
+- DBGPRINT(RT_DEBUG_TRACE,"country code=%d, RFIC=%d, PHY mode=%d, support %d channels\n",
++ DBGPRINT(RT_DEBUG_TRACE,"country code=%d, RFIC=%d, PHY mode=%d, support %d channels\n",
+ pAd->PortCfg.CountryRegion, pAd->PortCfg.RfType, pAd->PortCfg.PhyMode, pAd->PortCfg.ChannelListNum);
+ for (i=0;i<index;i++)
+ {
+@@ -1472,10 +1478,10 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+- This routine return the first channel number according to the country
++ This routine return the first channel number according to the country
+ code selection and RF IC selection (signal band or dual band). It is called
+ whenever driver need to start a site survey of all supported channels.
+ Return:
+@@ -1488,7 +1494,7 @@
+ return pAd->PortCfg.ChannelList[0];
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ This routine returns the next channel number. This routine is called
+@@ -1500,12 +1506,12 @@
+ ==========================================================================
+ */
+ UCHAR NextChannel(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel)
+ {
+ int i;
+ UCHAR next_channel = 0;
+-
++
+ for (i = 0; i < (pAd->PortCfg.ChannelListNum - 1); i++)
+ if (channel == pAd->PortCfg.ChannelList[i])
+ {
+diff -Nur rt2500-1.1.0-b4/Module/unload rt2500-cvs-2007061011/Module/unload
+--- rt2500-1.1.0-b4/Module/unload 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/unload 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2 +0,0 @@
+-/sbin/ifconfig ra0 down
+-/sbin/rmmod rt2500
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/wpa.c rt2500-cvs-2007061011/Module/wpa.c
+--- rt2500-1.1.0-b4/Module/wpa.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/wpa.c 2007-05-15 21:41:35.000000000 +0200
+@@ -1,37 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: wpa.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * JanL 22nd Jul 03 Initial code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: wpa.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * JanL 22nd Jul 03 Initial code
+ * PaulL 28th Nov 03 Modify for supplicant
+ * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -47,6 +47,7 @@
+ };
+ UCHAR CipherWpaPskTkipLen = (sizeof(CipherWpaPskTkip) / sizeof(UCHAR));
+
++// Needed for APs using WPA1 IEs (#221) to indicate CCMP encryption
+ UCHAR CipherWpaPskAes[] = {
+ 0xDD, 0x16, // RSN IE
+ 0x00, 0x50, 0xf2, 0x01, // oui
+@@ -59,16 +60,19 @@
+ };
+ UCHAR CipherWpaPskAesLen = (sizeof(CipherWpaPskAes) / sizeof(UCHAR));
+
++static UCHAR MSOUI[] = {0x00, 0x50, 0xf2, 0x01}; // Microsoft OUI
++static UCHAR WGOUI[] = {0x00, 0x0f, 0xac}; // 802.11i Working Group OUI
++
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Classify WPA EAP message type
+
+ Arguments:
+ EAPType Value of EAP message type
+ MsgType Internal Message definition for MLME state machine
+-
++
+ Return Value:
+ TRUE Found appropriate message type
+ FALSE No appropriate message type
+@@ -76,12 +80,12 @@
+ Note:
+ All these constants are defined in wpa.h
+ For supplicant, there is only EAPOL Key message avaliable
+-
++
+ ========================================================================
+ */
+ BOOLEAN WpaMsgTypeSubst(
+ IN UCHAR EAPType,
+- OUT ULONG *MsgType)
++ OUT ULONG *MsgType)
+ {
+ switch (EAPType)
+ {
+@@ -102,23 +106,23 @@
+ break;
+ default:
+ DBGPRINT(RT_DEBUG_INFO, "WpaMsgTypeSubst : return FALSE; \n");
+- return FALSE;
+- }
++ return FALSE;
++ }
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+- Description:
++ Description:
+ association state machine init, including state transition and timer init
+- Parameters:
++ Parameters:
+ S - pointer to the association state machine
+ ==========================================================================
+ */
+ VOID WpaPskStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(S, (STATE_MACHINE_FUNC*)Trans, MAX_WPA_PSK_STATE, MAX_WPA_PSK_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PSK_IDLE, WPA_MACHINE_BASE);
+ StateMachineSetAction(S, WPA_PSK_IDLE, EAP_MSG_TYPE_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction);
+@@ -127,10 +131,10 @@
+ /*
+ ==========================================================================
+ Description:
+- This is state machine function.
+- When receiving EAPOL packets which is for 802.1x key management.
+- Use both in WPA, and WPAPSK case.
+- In this function, further dispatch to different functions according to the received packet. 3 categories are :
++ This is state machine function.
++ When receiving EAPOL packets which is for 802.1x key management.
++ Use both in WPA, and WPAPSK case.
++ In this function, further dispatch to different functions according to the received packet. 3 categories are :
+ 1. normal 4-way pairwisekey and 2-way groupkey handshake
+ 2. MIC error (Countermeasures attack) report packet from STA.
+ 3. Request for pairwise/group key update from STA
+@@ -138,13 +142,13 @@
+ ==========================================================================
+ */
+ VOID WpaEAPOLKeyAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ INT MsgType;
+ UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY];
+ PKEY_DESCRIPTER pKeyDesc;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "-----> WpaEAPOLKeyAction\n");
+ // Get 802.11 header first
+ pKeyDesc = (PKEY_DESCRIPTER) &Elem->Msg[(LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H)];
+@@ -153,9 +157,12 @@
+ *(USHORT *)((UCHAR *)pKeyDesc+1) = SWAP16(*(USHORT *)((UCHAR *)pKeyDesc+1));
+ #endif
+ // Sanity check, this should only happen in WPA-PSK mode
+- if (pAdapter->PortCfg.AuthMode != Ndis802_11AuthModeWPAPSK)
++ if (pAdapter->PortCfg.AuthMode != Ndis802_11AuthModeWPAPSK) {
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<----- WpaEAPOLKeyAction - AuthMode (%d) != WPPSK\n",
++ pAdapter->PortCfg.AuthMode);
+ return;
+-
++ }
+ // 0. Debug print all bit information
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Key Description Version %d\n", pKeyDesc->KeyInfo.KeyDescVer);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Key Type %d\n", pKeyDesc->KeyInfo.KeyType);
+@@ -167,7 +174,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Error %d\n", pKeyDesc->KeyInfo.Error);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Request %d\n", pKeyDesc->KeyInfo.Request);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo DL %d\n", pKeyDesc->KeyInfo.DL);
+-
++
+ // 1. Check EAPOL frame version and type
+ if ((Elem->Msg[LENGTH_802_11+LENGTH_802_1_H] != EAPOL_VER) || (pKeyDesc->Type != RSN_KEY_DESC))
+ {
+@@ -190,9 +197,18 @@
+ // First validate replay counter, only accept message with larger replay counter
+ // Let equal pass, some AP start with all zero replay counter
+ memset(ZeroReplay, 0, LEN_KEY_DESC_REPLAY);
+- if ((RTMPCompareMemory(pKeyDesc->ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) &&
+- (RTMPCompareMemory(pKeyDesc->ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0))
++ if ((RTMPCompareMemory(pKeyDesc->ReplayCounter,
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) &&
++ (RTMPCompareMemory(pKeyDesc->ReplayCounter,
++ ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) {
++ DBGPRINT(RT_DEBUG_TRACE, "<----- %s: Replay count error\n",
++ __FUNCTION__);
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP replay = ",
++ pKeyDesc->ReplayCounter, LEN_KEY_DESC_REPLAY);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our replay = ",
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ return;
++ }
+
+ // Classify message Type, either pairwise message 1, 3, or group message 1 for supplicant
+ MsgType = EAPOL_MSG_INVALID;
+@@ -228,12 +244,13 @@
+ {
+ MsgType = EAPOL_GROUP_MSG_1;
+ DBGPRINT(RT_DEBUG_TRACE, "Receive EAPOL Key Group Message 1\n");
+- }
+-
++ } else
++ DBGPRINT(RT_DEBUG_TRACE, "Receive INVALID EAPOL Key Message\n");
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)((UCHAR *)pKeyDesc+1) = SWAP16(*(USHORT *)((UCHAR *)pKeyDesc+1));
+ #endif
+-
++
+ // We will assume link is up (assoc suceess and port not secured).
+ // All state has to be able to process message from previous state
+ switch (pAdapter->PortCfg.WpaState)
+@@ -245,7 +262,7 @@
+ pAdapter->PortCfg.WpaState = SS_WAIT_MSG_3;
+ }
+ break;
+-
++
+ case SS_WAIT_MSG_3:
+ if (MsgType == EAPOL_PAIR_MSG_1)
+ {
+@@ -258,7 +275,7 @@
+ pAdapter->PortCfg.WpaState = SS_WAIT_GROUP;
+ }
+ break;
+-
++
+ case SS_WAIT_GROUP: // When doing group key exchange
+ case SS_FINISH: // This happened when update group key
+ if (MsgType == EAPOL_PAIR_MSG_1)
+@@ -281,34 +298,34 @@
+ pAdapter->PortCfg.WpaState = SS_FINISH;
+ }
+ break;
+-
++
+ default:
+- break;
++ break;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<----- WpaEAPOLKeyAction\n");
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Pairwise key 4-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaPairMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR PTK[80];
+@@ -321,39 +338,39 @@
+ UCHAR EAPHEAD[8] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,0x88,0x8e};
+ PEAPOL_PACKET pMsg1;
+ EAPOL_PACKET Packet;
+- UCHAR Mic[16];
+-
++ UCHAR Mic[16];
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg1Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Save Data Length to pDesc for receiving packet, then put in outgoing frame Data Len fields.
+ pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+-
++
+ // Process message 1 from authenticator
+ // Key must be Pairwise key, already verified at callee.
+ // 1. Save Replay counter, it will use to verify message 3 and construct message 2
+- memcpy(pAdapter->PortCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ // 2. Save ANonce
+ memcpy(pAdapter->PortCfg.ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE);
+-
++
+ // TSNonce <--- SNonce
+ // Generate random SNonce
+- GenRandom(pAdapter, pAdapter->PortCfg.SNonce);
++ GenRandom(pAdapter, pAdapter->PortCfg.SNonce);
+
+ // TPTK <--- Calc PTK(ANonce, TSNonce)
+- WpaCountPTK(pAdapter->PortCfg.PskKey.Key,
++ WpaCountPTK(pAdapter->PortCfg.PskKey.Key,
+ pAdapter->PortCfg.ANonce,
+- pAdapter->PortCfg.Bssid.Octet,
+- pAdapter->PortCfg.SNonce,
+- pAdapter->CurrentAddress,
+- PTK,
+- LEN_PTK);
++ pAdapter->PortCfg.Bssid.Octet,
++ pAdapter->PortCfg.SNonce,
++ pAdapter->CurrentAddress,
++ PTK,
++ LEN_PTK);
+
+ // Save key to PTK entry
+ memcpy(pAdapter->PortCfg.PTK, PTK, LEN_PTK);
+-
++
+ // =====================================
+ // Use Priority Ring & MiniportMMRequest
+ // =====================================
+@@ -364,7 +381,7 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero message 2 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+@@ -399,17 +416,17 @@
+ memcpy(Packet.KeyDesc.KeyNonce, pAdapter->PortCfg.SNonce, LEN_KEY_DESC_NONCE);
+
+ // 5. Key Replay Count
+- memcpy(Packet.KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+-
++ memcpy(Packet.KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(Packet.KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(Packet.KeyDesc.KeyInfo)));
+ #endif
+-
++
+ // Send EAPOL(0, 1, 0, 0, 0, K, 0, TSNonce, 0, MIC(TPTK), 0)
+- // Out buffer for transmitting message 2
++ // Out buffer for transmitting message 2
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ if (NStatus != NDIS_STATUS_SUCCESS)
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -423,7 +440,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -433,12 +450,12 @@
+ DBGPRINT(RT_DEBUG_INFO, " PMK = ");
+ for (i = 0; i < 16; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PskKey.Key[i]);
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "\n PTK = ");
+ for (i = 0; i < 64; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PTK[i]);
+ DBGPRINT(RT_DEBUG_INFO, "\n FrameLen = %d\n", FrameLen);
+-
++
+ hmac_md5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, Mic);
+ }
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+@@ -446,36 +463,202 @@
+ FrameLen = 0;
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+ // Send using priority queue
+ MiniportMMRequest(pAdapter, OutBuffer, FrameLen);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg1Action <-----\n");
+ }
+
+ /*
++ ========================================================================
++
++ Description:
++ Check the information element packaged in the KeyData field of the
++ EAPOL packet. At least one of the AP's offerings in each of
++
++ 1) the group cipher suite
++ 2) the pairwise master key cipher(s), and
++ 3) the authentication and key management suite
++
++ need to match the configuration for the corresponding attribute
++ in the driver.
++
++ Arguments:
++ pAd Pointer to our adapter
++ pie Pointer to the "logical" IE
++ pie_len Value of the real IE length field.
++ poui Pointer to the WPA1/WPA2 OUI
++
++ Return Value:
++ 0 -> OK: At least one of the offerings in each category
++ matches what is configured in the driver.
++
++ Note:
++ On entry, it is known that the length of the RSN IE is consistent
++ with the length specification of the EAPOL KeyData field, and that
++ the IE is at least long enough to contain one group cipher suite
++ selection, one PMK cipher suite selection,
++ and one AKM suite selection.
++ ========================================================================
++*/
++static int checkEAPIE(
++ IN RTMP_ADAPTER *pAd,
++ IN rsn_ie_t *pie, // (not really, if we're WPA 1)
++ IN u8 pie_len, // ... so we provide the length separately.
++ IN ie_oui_t *poui)
++{
++ suite_list_t *suite_list_p;
++ suite_sel_t *suite_sel_p;
++ int i, j;
++ int needs = 7;
++ suite_sel_t *limit = (suite_sel_t *)((void *)pie + pie_len + 2);
++
++ if (wtohs(pie->version) != 1) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid ver %d (sb 1)\n",
++ wtohs(pie->version));
++ return needs;
++ }
++ if (memcmp(pie->gcsuite.oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid Grp Cipher OUI %02x:%02x:%02x\n",
++ pie->gcsuite.oui[0], pie->gcsuite.oui[1], pie->gcsuite.oui[2]);
++ return needs;
++ }
++ switch (pie->gcsuite.type) {
++ case CIPHER_TYPE_WEP40:
++ case CIPHER_TYPE_WEP104:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled)
++ needs &= 6;
++ break;
++ case CIPHER_TYPE_TKIP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
++ needs &= 6;
++ break;
++ case CIPHER_TYPE_CCMP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
++ needs &= 6;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid Grp Cipher Type %d\n",
++ pie->gcsuite.type);
++ return needs;
++ } /* End switch (group cipher suite type) */
++
++ suite_list_p = (suite_list_t *)((void *)&pie->gcsuite+sizeof(suite_sel_t));
++
++ // Search the PMK list
++ for (suite_sel_p = suite_list_p->suite,
++ i = 0, j = wtohs(suite_list_p->count);
++ suite_sel_p + 1 <= limit && i < j;
++ suite_sel_p++, i++) {
++ if (memcmp(suite_sel_p->oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher OUI "
++ "%02x:%02x:%02x\n",
++ suite_sel_p->oui[0], suite_sel_p->oui[1],
++ suite_sel_p->oui[2]);
++ break; // Keep going. We may also have a valid one.
++ }
++ switch (suite_sel_p->type) {
++ case CIPHER_TYPE_WEP40:
++ case CIPHER_TYPE_WEP104:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled)
++ needs &= 5;
++ break;
++ case CIPHER_TYPE_TKIP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
++ needs &= 5;
++ break;
++ case CIPHER_TYPE_CCMP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
++ needs &= 5;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher Type %d\n",
++ suite_sel_p->type);
++ break; // Keep going. We may also have a valid one.
++ } /* End switch (PMK type) */
++ } /* End search PMK list */
++
++ if (suite_sel_p >= limit && i < j) {
++ DBGPRINT(RT_DEBUG_ERROR, "Too many PMK suites in EAPOL pkt "
++ "(have %d, room for %d) (need=%d)\n",
++ j, i, needs);
++ return needs;
++ }
++ if (j == 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Zero count PMK list in EAPOL pkt "
++ "(need=%d)\n", needs);
++ return needs;
++ }
++
++ suite_list_p = (suite_list_t *)suite_sel_p;
++
++ //Search the Authentication and Key Management (AKM) list
++ for (suite_sel_p = suite_list_p->suite,
++ i = 0, j = wtohs(suite_list_p->count);
++ suite_sel_p + 1 <= limit && i < j;
++ suite_sel_p++, i++) {
++ if (memcmp(suite_sel_p->oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid AKM OUI %02x:%02x:%02x\n",
++ suite_sel_p->oui[0], suite_sel_p->oui[1],
++ suite_sel_p->oui[2]);
++ break; // Keep going. We may also have a valid one.
++ }
++ switch (suite_sel_p->type) {
++ case AKM_TYPE_802_1X:
++ if (pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA)
++ needs &= 3;
++ break;
++ case AKM_TYPE_PSK:
++ if (pAd->PortCfg.AuthMode >= Ndis802_11AuthModeWPAPSK)
++ needs &= 3;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher Type %d\n",
++ suite_sel_p->type);
++ break; // Keep going. We may also have a valid one.
++ } /* End switch (AKM type) */
++ } /* End search AKM list */
++
++ if (suite_sel_p >= limit && i < j) {
++ DBGPRINT(RT_DEBUG_ERROR, "Too many AKM suites in EAPOL pkt "
++ "(have %d, room for %d) (need=%d)\n",
++ j, i, needs);
++ return needs; // NB. May still have met all needs.
++ }
++ if (j == 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Zero count AKM list in EAPOL pkt "
++ "(need=%d)\n", needs);
++ return needs;
++ }
++
++ return needs;
++
++} /* End checkEAPIE () */
++
++/*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Pairwise key 4-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaPairMsg3Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR *OutBuffer = NULL;
+@@ -487,46 +670,74 @@
+ UCHAR EAPHEAD[8] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,0x88,0x8e};
+ EAPOL_PACKET Packet;
+ PEAPOL_PACKET pMsg3;
+- PUCHAR pTmp;
+- UCHAR Mic[16], OldMic[16];
++ UCHAR Mic[16], OldMic[16];
+ NDIS_802_11_KEY PeerKey;
+-
+-
++
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg3Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Process message 3 frame.
+ pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
++ #define pie ((rsn_ie_t *)(void *)pMsg3->KeyDesc.KeyData)
++ if (wtohs(pie->length) + 2 != pMsg3->KeyDesc.KeyDataLen[1]) {
++ DBGPRINT(RT_DEBUG_ERROR, "RSN IE len %d != KeyDataLen %d)\n",
++ pie->length + 2, pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ else {
++ switch (pie->eid) {
++ case IE_RSN:
++ if (wtohs(pie->length) < MIN_RSN_KEYDATA_LEN) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "RSN IE msg 3 too short (sb >= %d, is %d)\n",
++ MIN_RSN_KEYDATA_LEN, wtohs(pie->length));
++ DBGHEXSTR(RT_DEBUG_ERROR, "KeyData ",
++ pMsg3->KeyDesc.KeyData,
++ pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ if (checkEAPIE(pAdapter, pie, pie->length,
++ (ie_oui_t *)WGOUI) != 0) return;
++ break;
++ case IE_WPA:
++ #undef pie
++ #define pie ((RSN_EID_STRUCT *)(void *)pMsg3->KeyDesc.KeyData)
++ if (wtohs(pie->Length) < MIN_WPA_KEYDATA_LEN) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WPA IE msg 3 too short (sb >= %d, is %d)\n",
++ MIN_WPA_KEYDATA_LEN, wtohs(pie->Length));
++ DBGHEXSTR(RT_DEBUG_ERROR, "KeyData ",
++ pMsg3->KeyDesc.KeyData,
++ pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ if (memcmp(pie->Oui, MSOUI, sizeof(pie->Oui)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "Invalid WPA 1 OUI %02x:%02x:%02x:%02x\n",
++ pie->Oui[0], pie->Oui[1], pie->Oui[2], pie->Oui[3]);
++ return;
++ }
++ if (checkEAPIE(pAdapter, (rsn_ie_t *)&pie->Oui[2], pie->Length,
++ (ie_oui_t *)MSOUI) != 0) return;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "RSN IE type %d invalid)\n",
++ pie->Eid);
++ return;
++ } /* End switch (element ID) */
++ } /* End if (packet length sane) */
++ #undef pie
++
++ DBGPRINT(RT_DEBUG_TRACE, "RSN IE matched msg 3 of 4-way handshake "
++ "KeyDataLen=%d)\n",
++ pMsg3->KeyDesc.KeyDataLen[1]);
+
+- // 1. Verify RSN IE & cipher type match
+- if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
+- {
+- if (pMsg3->KeyDesc.KeyInfo.KeyDescVer != 2)
+- return;
+- pTmp = (PUCHAR) &CipherWpaPskAes;
+- }
+- else // TKIP
+- {
+- if (pMsg3->KeyDesc.KeyInfo.KeyDescVer != 1)
+- return;
+- pTmp = (PUCHAR) &CipherWpaPskTkip;
+- }
+-
+- // Fix compatibility issue, when AP append nonsense data after auth mode with different size.
+- // We should qualify this kind of RSN as acceptable
+- if (!NdisEqualMemory((PUCHAR) &pMsg3->KeyDesc.KeyData[2], pTmp + 2, CipherWpaPskTkipLen - 2))
+- {
+- DBGPRINT(RT_DEBUG_ERROR, " RSN IE mismatched msg 3 of 4-way handshake!!!!!!!!!! \n");
+- return;
+- }
+- else
+- DBGPRINT(RT_DEBUG_TRACE, " RSN IE matched in msg 3 of 4-way handshake!!!!!!!!!! \n");
+-
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
+@@ -539,7 +750,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1((PUCHAR) pMsg3, pMsg3->Len[1] + 4, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -547,7 +758,7 @@
+ {
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, (PUCHAR) pMsg3, pMsg3->Len[1] + 4, Mic);
+ }
+-
++
+ if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, " MIC Different in msg 3 of 4-way handshake!!!!!!!!!! \n");
+@@ -556,17 +767,32 @@
+ else
+ DBGPRINT(RT_DEBUG_TRACE, " MIC VALID in msg 3 of 4-way handshake!!!!!!!!!! \n");
+
+- // 3. Check Replay Counter, it has to be larger than last one. No need to be exact one larger
+- if (RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1)
++ // 3. Check Replay Counter, it has to be larger than last one.
++ // No need to be exact one larger
++ if (RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter,
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) {
++ DBGPRINT(RT_DEBUG_TRACE, " Replay count error\n");
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP replay = ",
++ pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our replay = ",
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ return;
+-
++ }
+ // Update new replay counter
+- memcpy(pAdapter->PortCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter,
++ LEN_KEY_DESC_REPLAY);
+
+ // 4. Double check ANonce
+- if (!NdisEqualMemory(pAdapter->PortCfg.ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE))
++ if (!NdisEqualMemory(pAdapter->PortCfg.ANonce, pMsg3->KeyDesc.KeyNonce,
++ LEN_KEY_DESC_NONCE)) {
++ DBGPRINT(RT_DEBUG_TRACE, " Nonce error\n");
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP Nonce = ",
++ pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our Nonce = ",
++ pAdapter->PortCfg.ANonce, LEN_KEY_DESC_NONCE);
+ return;
+-
++ }
++
+ // 5. Construct Message 4
+ // =====================================
+ // Use Priority Ring & MiniportMMRequest
+@@ -578,22 +804,22 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero message 4 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+ Packet.Type = EAPOLKey;
+ Packet.Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field
+-
++
+ //
+ // Message 4 as EAPOL-Key(0,1,0,0,0,P,0,0,MIC,0)
+ //
+ Packet.KeyDesc.Type = RSN_KEY_DESC;
+-
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
+-
++
+ // Key descriptor version and appropriate RSN IE
+ Packet.KeyDesc.KeyInfo.KeyDescVer = pMsg3->KeyDesc.KeyInfo.KeyDescVer;
+
+@@ -603,16 +829,16 @@
+ // KeyMic field presented
+ Packet.KeyDesc.KeyInfo.KeyMic = 1;
+
+- // Key Replay count
+- memcpy(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ // Key Replay count
++ memcpy(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ #ifdef BIG_ENDIAN
+ *(USHORT *)&Packet.KeyDesc.KeyInfo = SWAP16(*(USHORT *)&Packet.KeyDesc.KeyInfo);
+ #endif
+
+- // Out buffer for transmitting message 4
++ // Out buffer for transmitting message 4
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -626,7 +852,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -637,10 +863,10 @@
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+
+ FrameLen = 0;
+-
++
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+@@ -651,38 +877,38 @@
+ // 7. Update PTK
+ memset(&PeerKey, 0, sizeof(PeerKey));
+ PeerKey.Length = sizeof(PeerKey);
+- PeerKey.KeyIndex = 0xe0000000;
++ PeerKey.KeyIndex = 0xe0000000;
+ PeerKey.KeyLength = 16;
+ memcpy(PeerKey.BSSID, pAdapter->PortCfg.Bssid.Octet, 6);
+ memcpy(&PeerKey.KeyRSC, pMsg3->KeyDesc.KeyRsc, LEN_KEY_DESC_RSC);
+ memcpy(PeerKey.KeyMaterial, &pAdapter->PortCfg.PTK[32], 32);
+ // Call Add peer key function
+ RTMPWPAAddKeyProc(pAdapter, &PeerKey);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg3Action <-----\n");
+ }
+
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Group key 2-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaGroupMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR *OutBuffer = NULL;
+@@ -697,12 +923,12 @@
+ UCHAR Mic[16], OldMic[16];
+ UCHAR GTK[32], Key[32];
+ NDIS_802_11_KEY GroupKey;
+-
+-
++
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaGroupMsg1Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Process Group message 1 frame.
+ pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+
+@@ -712,7 +938,7 @@
+ return;
+
+ // Update new replay counter
+- memcpy(pAdapter->PortCfg.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ // 2. Verify MIC is valid
+ // Save the MIC and replace with zero
+@@ -722,7 +948,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1((PUCHAR) pGroup, pGroup->Len[1] + 4, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -730,7 +956,7 @@
+ {
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, (PUCHAR) pGroup, pGroup->Len[1] + 4, Mic);
+ }
+-
++
+ if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, " MIC Different in group msg 1 of 2-way handshake!!!!!!!!!! \n");
+@@ -749,12 +975,12 @@
+ if (pGroup->KeyDesc.KeyInfo.KeyDescVer != 2)
+ return;
+ // Decrypt AES GTK
+- AES_GTK_KEY_UNWRAP(&pAdapter->PortCfg.PTK[16], GTK, pGroup->KeyDesc.KeyData);
++ AES_GTK_KEY_UNWRAP(&pAdapter->PortCfg.PTK[16], GTK, pGroup->KeyDesc.KeyData);
+ }
+ else // TKIP
+ {
+ INT i;
+-
++
+ if (pGroup->KeyDesc.KeyInfo.KeyDescVer != 1)
+ return;
+ // Decrypt TKIP GTK
+@@ -766,9 +992,9 @@
+ for (i = 0; i < 256; i++)
+ ARCFOUR_BYTE(&pAdapter->PrivateInfo.WEPCONTEXT);
+ // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not
+- ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, GTK, pGroup->KeyDesc.KeyData, 32);
++ ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, GTK, pGroup->KeyDesc.KeyData, 32);
+ }
+-
++
+ // 4. Construct Group Message 2
+ pAdapter->Sequence = ((pAdapter->Sequence) + 1) & (MAX_SEQ_NUMBER);
+ WpaMacHeaderInit(pAdapter, &Header_802_11, 1, &pAdapter->PortCfg.Bssid);
+@@ -777,18 +1003,18 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero Group message 1 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+ Packet.Type = EAPOLKey;
+ Packet.Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field
+-
++
+ //
+ // Group Message 2 as EAPOL-Key(1,0,0,0,G,0,0,MIC,0)
+ //
+ Packet.KeyDesc.Type = RSN_KEY_DESC;
+-
++
+ // Key descriptor version and appropriate RSN IE
+ Packet.KeyDesc.KeyInfo.KeyDescVer = pGroup->KeyDesc.KeyInfo.KeyDescVer;
+
+@@ -800,18 +1026,18 @@
+
+ // Secure bit is 1
+ Packet.KeyDesc.KeyInfo.Secure = 1;
+-
+- // Key Replay count
+- memcpy(Packet.KeyDesc.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++
++ // Key Replay count
++ memcpy(Packet.KeyDesc.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(Packet.KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(Packet.KeyDesc.KeyInfo)));
+ #endif
+
+- // Out buffer for transmitting group message 2
++ // Out buffer for transmitting group message 2
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -825,7 +1051,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -836,15 +1062,15 @@
+ for (i = 0; i < 64; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PTK[i]);
+ DBGPRINT(RT_DEBUG_INFO, "\n FrameLen = %d\n", FrameLen);
+-
++
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, OutBuffer, FrameLen, Mic);
+ }
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+
+- FrameLen = 0;
++ FrameLen = 0;
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+@@ -853,72 +1079,72 @@
+
+ // 6 Free allocated memory
+ MlmeFreeMemory(pAdapter, OutBuffer);
+-
++
+ // 6. Update GTK
+ memset(&GroupKey, 0, sizeof(GroupKey));
+ GroupKey.Length = sizeof(GroupKey);
+- GroupKey.KeyIndex = 0x20000000 | pGroup->KeyDesc.KeyInfo.KeyIndex;
++ GroupKey.KeyIndex = 0x20000000 | pGroup->KeyDesc.KeyInfo.KeyIndex;
+ GroupKey.KeyLength = 16;
+ memcpy(GroupKey.BSSID, pAdapter->PortCfg.Bssid.Octet, 6);
+ memcpy(GroupKey.KeyMaterial, GTK, 32);
+ // Call Add peer key function
+ RTMPWPAAddKeyProc(pAdapter, &GroupKey);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaGroupMsg1Action <-----\n");
+ }
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init WPA MAC header
+
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PHEADER_802_11 Hdr,
+- IN UCHAR wep,
+- IN PMACADDR pAddr1)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PHEADER_802_11 Hdr,
++ IN UCHAR wep,
++ IN PMACADDR pAddr1)
+ {
+ memset(Hdr, 0, sizeof(HEADER_802_11));
+- Hdr->Controlhead.Frame.Type = BTYPE_DATA;
++ Hdr->Controlhead.Frame.Type = BTYPE_DATA;
+ Hdr->Controlhead.Frame.ToDs = 1;
+ if (wep == 1)
+ Hdr->Controlhead.Frame.Wep = 1;
+-
++
+ // Addr1: DA, Addr2: BSSID, Addr3: SA
+ COPY_MAC_ADDR(&Hdr->Controlhead.Addr1, pAddr1);
+ COPY_MAC_ADDR(&Hdr->Controlhead.Addr2, &pAd->CurrentAddress);
+ COPY_MAC_ADDR(&Hdr->Addr3, &pAd->PortCfg.Bssid);
+- Hdr->Sequence = pAd->Sequence;
++ Hdr->Sequence = pAd->Sequence;
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware encryption before really
+ sent out to air.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to outgoing Ndis frame
+ NumberOfFrag Number of fragment required
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaHardEncrypt(
+@@ -938,38 +1164,58 @@
+ #endif
+ ULONG Iv16;
+ ULONG Iv32;
+- PWPA_KEY pWpaKey;
++ PWPA_KEY pWpaKey = NULL;
+ UCHAR RetryMode = SHORT_RETRY;
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
++ INT idx;
++ PHEADER_802_11 pHeader;
++ unsigned long flags;
+
+ // Make sure Tx ring resource won't be used by other threads
+- spin_lock_irq(&pAdapter->TxRingLock);
++ spin_lock_irqsave(&pAdapter->TxRingLock, flags);
+
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+-
+- // outgoing frame always wakeup PHY to prevent frame lost and
++
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ if (pAdapter->PortCfg.Psm == PWR_SAVE)
+ {
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ }
+ AsicForceWakeup(pAdapter);
+-
++
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_DATA;
+
+ pSrc = pPacket; // Point to start of MSDU
+-
++
++#if 0
+ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.PairwiseKey[0];
+ pWpaKey->Type = PAIRWISE_KEY;
++#else
++ pHeader = (PHEADER_802_11) pSrc;
++
++ for (idx = 0; idx < PAIRWISE_KEY_NO; idx++) {
++ if ((memcmp(&pHeader->Controlhead.Addr1,
++ pAdapter->PortCfg.PairwiseKey[idx].BssId, 6) == 0)
++ && (pAdapter->PortCfg.PairwiseKey[idx].KeyLen != 0)) {
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.PairwiseKey[idx];
++ pWpaKey->Type = PAIRWISE_KEY;
++ DBGPRINT(RT_DEBUG_TRACE,
++ "WpaHardEncrypt:(U) Tx Use Pairwise Key(%d)\n", idx);
++ break;
++ }
++ }
++#endif
+ if (pWpaKey == NULL)
+ {
+ // No pairwise key, this should not happen
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ DBGPRINT(RT_DEBUG_ERROR, "WpaHardEncrypt: No pairwise key!!!!!\n");
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+-
++
+ // Get the Tx Ring descriptor & Dma Buffer address
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -979,14 +1225,16 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WpaHardEncrypt: Descriptor ownedby NIC. No descriptor available!!!!!!\n");
+ pAdapter->RalinkCounters.TxRingErrCount++;
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+ if (pTxD->Valid == TRUE)
+@@ -995,17 +1243,19 @@
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
+ pTxD->Valid = FALSE;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WpaHardEncrypt: Ndis packet of last round did not cleared!!!!!\n");
+ pAdapter->RalinkCounters.TxRingErrCount++;
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+-
++
+ // Copy whole frame to Tx ring buffer
+ memcpy(pDest, pPacket, Len);
+ pDest += Len;
+@@ -1026,16 +1276,21 @@
+ tkipIv.IV16.field.Rsvd = 0;
+ tkipIv.IV16.field.ExtIV = 1;// 0: non-extended IV, 1: extended IV
+ tkipIv.IV16.field.KeyID = 0;
+- tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ //tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ memcpy(&tkipIv.IV32, &pWpaKey->TxTsc[2], 4);
+
++#ifdef BIG_ENDIAN
++ pTxD-Iv = SWAP32(tipIv.IV16.word);
++#else
+ pTxD->Iv = tkipIv.IV16.word;
++#endif
+
+ *((PUCHAR) &pTxD->Eiv) = *((PUCHAR) &tkipIv.IV32 + 3);
+ *((PUCHAR) &pTxD->Eiv + 1) = *((PUCHAR) &tkipIv.IV32 + 2);
+ *((PUCHAR) &pTxD->Eiv + 2) = *((PUCHAR) &tkipIv.IV32 + 1);
+ *((PUCHAR) &pTxD->Eiv + 3) = *((PUCHAR) &tkipIv.IV32);
+ }
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -1043,13 +1298,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+ // Copy TKey
+ memcpy(pTxD->Key, pWpaKey->Key, 16);
+-
++
+ // Set Cipher suite
+ CipherAlg = CIPHER_TKIP;
+
+@@ -1059,10 +1314,10 @@
+ pAdapter->PrivateInfo.Tx.R = RTMPTkipGetUInt32(pWpaKey->TxMic + 4);
+ pAdapter->PrivateInfo.Tx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Tx.M = 0;
+-
++
+ // DA & SA field
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc + 4, 12);
+-
++
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, Priority, 4);
+
+@@ -1086,9 +1341,9 @@
+ *(pTmp + 1) = pWpaKey->TxTsc[1];
+ *(pTmp + 2) = 0;
+ *(pTmp + 3) = 0x20;
+-
++
+ Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -1096,13 +1351,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Copy IV
+ memcpy(&pTxD->Iv, &Iv16, 4);
+-
++
+ // Copy EIV
+ memcpy(&pTxD->Eiv, &Iv32, 4);
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+@@ -1111,11 +1366,11 @@
+
+ // Set Cipher suite
+ CipherAlg = CIPHER_AES;
+-
++
+ // IV + EIV + HW MIC
+ Len += 16;
+- }
+-
++ }
++
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, pOriginDest, DIR_WRITE, FALSE);
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+@@ -1123,7 +1378,7 @@
+ pTxD = pDestTxD;
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, Len, pAdapter->PortCfg.TxPreambleInUsed, 0);
+
+ // Increase & maintain Tx Ring Index
+@@ -1131,28 +1386,28 @@
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+- }
+- pAdapter->RalinkCounters.EncryptCount++;
+-
++ }
++ pAdapter->RalinkCounters.EncryptCount++;
++
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
++
+ // Make sure to release Tx ring resource
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- SHA1 function
++ SHA1 function
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID HMAC_SHA1(
+@@ -1167,8 +1422,8 @@
+ UCHAR k_opad[65]; /* outer padding - key XORd with opad */
+ INT i;
+
+- // if key is longer than 64 bytes reset it to key=SHA1(key)
+- if (key_len > 64)
++ // if key is longer than 64 bytes reset it to key=SHA1(key)
++ if (key_len > 64)
+ {
+ SHA_CTX tctx;
+ SHAInit(&tctx);
+@@ -1181,20 +1436,20 @@
+ memcpy(k_ipad, key, key_len);
+ memcpy(k_opad, key, key_len);
+
+- // XOR key with ipad and opad values
+- for (i = 0; i < 64; i++)
+- {
++ // XOR key with ipad and opad values
++ for (i = 0; i < 64; i++)
++ {
+ k_ipad[i] ^= 0x36;
+ k_opad[i] ^= 0x5c;
+ }
+
+- // perform inner SHA1
++ // perform inner SHA1
+ SHAInit(&context); /* init context for 1st pass */
+ SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
+ SHAUpdate(&context, text, text_len); /* then text of datagram */
+ SHAFinal(&context, digest); /* finish up 1st pass */
+
+- //perform outer SHA1
++ //perform outer SHA1
+ SHAInit(&context); /* init context for 2nd pass */
+ SHAUpdate(&context, k_opad, 64); /* start with outer pad */
+ SHAUpdate(&context, digest, 20); /* then results of 1st hash */
+@@ -1203,17 +1458,17 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- PRF function
++ PRF function
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+ 802.1i Annex F.9
+-
++
+ ========================================================================
+ */
+ VOID PRF(
+@@ -1230,7 +1485,7 @@
+ UCHAR input[1024];
+ INT currentindex = 0;
+ INT total_len;
+-
++
+ memcpy(input, prefix, prefix_len);
+ input[prefix_len] = 0;
+ memcpy(&input[prefix_len + 1], data, data_len);
+@@ -1242,22 +1497,22 @@
+ HMAC_SHA1(input, total_len, key, key_len, &output[currentindex]);
+ currentindex += 20;
+ input[total_len - 1]++;
+- }
++ }
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Count TPTK from PMK
+
+ Arguments:
+-
++
+ Return Value:
+ Output Store the TPTK
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaCountPTK(
+@@ -1268,11 +1523,11 @@
+ IN UCHAR *SA,
+ OUT UCHAR *output,
+ IN UINT len)
+-{
++{
+ UCHAR concatenation[76];
+ UINT CurrPos = 0;
+ UCHAR temp[32];
+- UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ',
++ UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ',
+ 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n'};
+
+ memset(temp, 0, sizeof(temp));
+@@ -1281,52 +1536,52 @@
+ if (RTMPCompareMemory(SA, AA, 6) == 1)
+ memcpy(concatenation, AA, 6);
+ else
+- memcpy(concatenation, SA, 6);
++ memcpy(concatenation, SA, 6);
+ CurrPos += 6;
+
+ // Get larger address
+ if (RTMPCompareMemory(SA, AA, 6) == 1)
+ memcpy(&concatenation[CurrPos], SA, 6);
+ else
+- memcpy(&concatenation[CurrPos], AA, 6);
++ memcpy(&concatenation[CurrPos], AA, 6);
+ CurrPos += 6;
+
+ // Get smaller address
+- if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
++ if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
+ memcpy(&concatenation[CurrPos], SNonce, 32);
+- else
++ else
+ memcpy(&concatenation[CurrPos], ANonce, 32);
+ CurrPos += 32;
+
+ // Get larger address
+- if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
++ if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
+ memcpy(&concatenation[CurrPos], ANonce, 32);
+- else
++ else
+ memcpy(&concatenation[CurrPos], SNonce, 32);
+ CurrPos += 32;
+-
++
+ PRF(PMK, LEN_MASTER_KEY, Prefix, 22, concatenation, 76 , output, len);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Misc function to Generate random number
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+ 802.1i Annex F.9
+-
++
+ ========================================================================
+ */
+ VOID GenRandom(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ OUT UCHAR *random)
+-{
++{
+ INT i, curr;
+ UCHAR local[80], KeyCounter[32];
+ UCHAR result[80];
+@@ -1337,9 +1592,9 @@
+ memset(local, 0, 80);
+ memset(KeyCounter, 0, 32);
+ memcpy(local, pAd->CurrentAddress, ETH_ALEN);
+-
++
+ for (i = 0; i < 32; i++)
+- {
++ {
+ curr = ETH_ALEN;
+ CurrentTime = jiffies;
+ memcpy(local, pAd->CurrentAddress, ETH_ALEN);
+@@ -1348,29 +1603,29 @@
+ curr += sizeof(CurrentTime);
+ memcpy(&local[curr], result, 32);
+ curr += 32;
+- memcpy(&local[curr], &i, 2);
++ memcpy(&local[curr], &i, 2);
+ curr += 2;
+- PRF(KeyCounter, 32, prefix,12, local, curr, result, 32);
++ PRF(KeyCounter, 32, prefix,12, local, curr, result, 32);
+ }
+- memcpy(random, result, 32);
++ memcpy(random, result, 32);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Misc function to decrypt AES body
+-
++
+ Arguments:
+-
++
+ Return Value:
+-
++
+ Note:
+ This function references to RFC 3394 for aes key unwrap algorithm.
+-
++
+ ========================================================================
+ */
+-VOID AES_GTK_KEY_UNWRAP(
++VOID AES_GTK_KEY_UNWRAP(
+ IN UCHAR *key,
+ OUT UCHAR *plaintext,
+ IN UCHAR *ciphertext)
+@@ -1381,7 +1636,7 @@
+ INT num_blocks = 2;
+ INT j;
+ aes_context aesctx;
+-
++
+ // Initialize
+ // A = C[0]
+ memcpy(A, ciphertext, 8);
+@@ -1391,7 +1646,7 @@
+ memcpy(R2, &ciphertext[16], 8);
+
+ aes_set_key(&aesctx, key, 128);
+-
++
+ for (j = 5; j >= 0; j--)
+ {
+ xor = num_blocks * j + 2;
+@@ -1401,7 +1656,7 @@
+ aes_decrypt(&aesctx, BIN, BOUT);
+ memcpy(A, &BOUT[0], 8);
+ memcpy(R2, &BOUT[8], 8);
+-
++
+ xor = num_blocks * j + 1;
+ memcpy(BIN, A, 8);
+ BIN[7] = A[7] ^ xor;
+diff -Nur rt2500-1.1.0-b4/Module/wpa.h rt2500-cvs-2007061011/Module/wpa.h
+--- rt2500-1.1.0-b4/Module/wpa.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/wpa.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: wpa.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: wpa.h
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __WPA_H__
+ #define __WPA_H__
+@@ -57,7 +57,7 @@
+ #define DESC_TYPE_AES 2
+ #define RSN_KEY_DESC 0xfe
+
+-#define LEN_MASTER_KEY 32
++#define LEN_MASTER_KEY 32
+
+ // EAPOL EK, MK
+ #define LEN_EAP_EK 16
+@@ -131,7 +131,7 @@
+ UCHAR KeyRsc[LEN_KEY_DESC_RSC];
+ UCHAR KeyId[LEN_KEY_DESC_ID];
+ UCHAR KeyMic[LEN_KEY_DESC_MIC];
+- UCHAR KeyDataLen[2];
++ UCHAR KeyDataLen[2];
+ UCHAR KeyData[MAX_LEN_OF_RSNIE];
+ } KEY_DESCRIPTER, *PKEY_DESCRIPTER;
+
+diff -Nur rt2500-1.1.0-b4/THANKS rt2500-cvs-2007061011/THANKS
+--- rt2500-1.1.0-b4/THANKS 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/THANKS 2007-05-05 19:48:18.000000000 +0200
+@@ -8,6 +8,7 @@
+ * Mark Wallis - mwallis@serialmonkey.com
+ * Robin Cornelius - robin@cornelius.demon.co.uk
+ * Gertjan van Wingerde - gwingerde@users.sourceforge.net
++* Olivier Cornu - o.cornu@gmail.com
+
+ And Special thanks to those that have contributed to the project
+
diff --git a/abs/core-testing/rt2500/kernel-2.6.24.patch b/abs/core-testing/rt2500/kernel-2.6.24.patch
new file mode 100644
index 0000000..113573f
--- /dev/null
+++ b/abs/core-testing/rt2500/kernel-2.6.24.patch
@@ -0,0 +1,20 @@
+--- rt2500-1.1.0-b4/Module/rtmp_main.c~ 2008-01-25 11:13:14.000000000 +0100
++++ rt2500-1.1.0-b4/Module/rtmp_main.c 2008-01-25 11:17:57.000000000 +0100
+@@ -251,8 +251,6 @@
+ goto err_out;
+ }
+
+- SET_MODULE_OWNER(net_dev);
+-
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+ SET_NETDEV_DEV(net_dev, &(pPci_Dev->dev));
+ #endif
+@@ -392,7 +390,7 @@
+ NICDisableInterrupt(pAd);
+ }
+
+- status = request_irq(pAd->pPci_Dev->irq, &RTMPIsr, SA_SHIRQ, net_dev->name, net_dev);
++ status = request_irq(pAd->pPci_Dev->irq, &RTMPIsr, IRQF_SHARED, net_dev->name, net_dev);
+ if (status)
+ {
+ goto out_module_put;
diff --git a/abs/core-testing/rt2500/rt2500.install b/abs/core-testing/rt2500/rt2500.install
new file mode 100644
index 0000000..c242f1b
--- /dev/null
+++ b/abs/core-testing/rt2500/rt2500.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/rt2x00-rt61-fw/PKGBUILD b/abs/core-testing/rt2x00-rt61-fw/PKGBUILD
new file mode 100644
index 0000000..ef65031
--- /dev/null
+++ b/abs/core-testing/rt2x00-rt61-fw/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=rt2x00-rt61-fw
+pkgver=1.2
+pkgrel=2
+pkgdesc="Firmware for the rt2x00 wireless drivers"
+arch=(i686 x86_64)
+url="http://www.ralinktech.com/ralink/Home/Support/Linux.html"
+license=('RALINK')
+source=(http://www.ralinktech.com.tw/data/RT61_Firmware_V${pkgver}.zip)
+
+build() {
+ cd $startdir/src/RT61_Firmware_V${pkgver}
+ mkdir -p $startdir/pkg/lib/firmware
+ install -m644 rt2* $startdir/pkg/lib/firmware || return 1
+}
+md5sums=('d4c690c93b470bc9a681297c2adc6281')
diff --git a/abs/core-testing/rt2x00-rt71w-fw/PKGBUILD b/abs/core-testing/rt2x00-rt71w-fw/PKGBUILD
new file mode 100644
index 0000000..5736755
--- /dev/null
+++ b/abs/core-testing/rt2x00-rt71w-fw/PKGBUILD
@@ -0,0 +1,17 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=rt2x00-rt71w-fw
+pkgver=1.8
+pkgrel=2
+pkgdesc="Firmware for the rt2x00 wireless drivers"
+arch=(i686 x86_64)
+url="http://www.ralinktech.com/ralink/Home/Support/Linux.html"
+license=('RALINK')
+source=(http://www.ralinktech.com.tw/data/RT71W_Firmware_V${pkgver}.zip)
+
+build() {
+ cd $startdir/src/RT71W_Firmware_V${pkgver}
+ install -Dm644 rt73.bin $startdir/pkg/lib/firmware/rt73.bin || return 1
+}
+md5sums=('1e7a5dc574e0268574fcda3fd5cf52f7')
diff --git a/abs/core-testing/run-parts/PKGBUILD b/abs/core-testing/run-parts/PKGBUILD
new file mode 100644
index 0000000..efa4c4f
--- /dev/null
+++ b/abs/core-testing/run-parts/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8620 2008-08-14 09:04:04Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=run-parts
+pkgver=2.30
+pkgrel=1
+pkgdesc='run-parts from the debianutils package'
+arch=('i686' 'x86_64')
+url='http://packages.qa.debian.org/d/debianutils.html'
+license=('GPL')
+depends=('glibc')
+source=("http://ftp.debian.org/debian/pool/main/d/debianutils/debianutils_${pkgver}.tar.gz")
+md5sums=('7fdd5f8395162d8728d4b79e97b9819e')
+
+build() {
+ cd $srcdir/debianutils-$pkgver
+ ./configure --prefix=/usr
+ make
+
+ install -D -m755 run-parts $pkgdir/usr/bin/run-parts
+ install -D -m644 run-parts.8 $pkgdir/usr/share/man/man8/run-parts.8
+}
diff --git a/abs/core-testing/runit/PKGBUILD b/abs/core-testing/runit/PKGBUILD
new file mode 100755
index 0000000..4065ae6
--- /dev/null
+++ b/abs/core-testing/runit/PKGBUILD
@@ -0,0 +1,69 @@
+pkgname=runit
+pkgver=1.8.0
+pkgrel=51
+pkgdesc="A replacement for sysvinit, and other init schemes, with service supervision"
+url="http://smarden.org/runit/"
+license="BSD"
+depends=('glibc' 'util-linux' 'initscripts' )
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=runit.install
+source=(http://smarden.org/runit/$pkgname-$pkgver.tar.gz add_service.sh remove_service.sh halt.script reboot.script poweroff.script)
+arch=('i686')
+
+build() {
+ cd $startdir/src/admin/$pkgname-$pkgver/src
+ echo "${CC:-gcc} ${CFLAGS:--Os}" > conf-cc
+ echo "${LD:-gcc -s}" > conf-ld
+ make || return 1
+ ./compile svwaitdown.c
+ ./load svwaitdown unix.a byte.a time.a
+ ./compile svwaitup.c
+ ./load svwaitup unix.a byte.a time.a
+ ./compile utmpset.c
+ ./load utmpset unix.a byte.a
+
+
+
+
+ install -d $startdir/pkg/sbin/
+ install -d $startdir/pkg/usr/man/man8
+ install -m0755 $startdir/src/add_service.sh $startdir/pkg/sbin
+ install -m0755 $startdir/src/remove_service.sh $startdir/pkg/sbin
+ install -m0755 $startdir/src/reboot.script $startdir/pkg/sbin
+ install -m0755 $startdir/src/halt.script $startdir/pkg/sbin
+install -m0755 $startdir/src/poweroff.script $startdir/pkg/sbin
+
+ for i in `cat ../package/commands`; do
+ install -m0755 $i $startdir/pkg/sbin/
+ done
+ install -m0755 svwaitup $startdir/pkg/sbin/
+ install -m0755 svwaitdown $startdir/pkg/sbin/
+ install -m0644 ../man/*.8 $startdir/pkg/usr/man/man8
+ rsync -a --exclude=.svn $startdir/runitscripts $startdir/src
+ #cp -rp $startdir/runitscripts $startdir/src/
+
+ cd $startdir/src/runitscripts
+
+ install -d $startdir/pkg/etc/
+ install -d $startdir/pkg/etc/runit/
+ install -d $startdir/pkg/var/service
+
+ #install -d $startdir/pkg/etc/runit/runsvdir
+ #install -d $startdir/pkg/etc/runit/runsvdir/default
+ #ln -s default $startdir/pkg/etc/runit/runsvdir/current
+
+ install -m0700 1 2 3 ctrlaltdel $startdir/pkg/etc/runit
+
+ install -m0755 reboot-runit halt-runit logger $startdir/pkg/sbin
+
+ install -d $startdir/pkg/etc/sv
+ rsync -a --exclude=.svn services/* $startdir/pkg/etc/sv
+ #cp -R services/* $startdir/pkg/etc/sv
+ cd $startdir
+ install -d $startdir/pkg/usr/bin
+ install -m0755 fbd $startdir/pkg/usr/bin/fbd
+
+}
diff --git a/abs/core-testing/runit/add_service.sh b/abs/core-testing/runit/add_service.sh
new file mode 100755
index 0000000..237af13
--- /dev/null
+++ b/abs/core-testing/runit/add_service.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -d $SCRIPT_DIR/$1 ]
+then
+ if [ -d $SERVICE_DIR/$1 ]
+ then
+ echo "$1 is already present"
+ else
+ ln -s $SCRIPT_DIR/$1 $SERVICE_DIR/$1
+ echo "adding $1"
+ fi
+else
+ echo "couldn't find $SCRIPT_DIR/$1"
+fi
diff --git a/abs/core-testing/runit/halt.script b/abs/core-testing/runit/halt.script
new file mode 100755
index 0000000..b49ed7c
--- /dev/null
+++ b/abs/core-testing/runit/halt.script
@@ -0,0 +1,16 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+if [ x$1 = x-w ]
+then
+ /sbin/halt-init -w
+ exit 0
+fi
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/halt-runit $@
+else
+ /sbin/halt-init $@
+fi
+
diff --git a/abs/core-testing/runit/poweroff.script b/abs/core-testing/runit/poweroff.script
new file mode 100755
index 0000000..99779eb
--- /dev/null
+++ b/abs/core-testing/runit/poweroff.script
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/halt-runit $@
+else
+ /sbin/poweroff.init $@
+fi
+
diff --git a/abs/core-testing/runit/reboot.script b/abs/core-testing/runit/reboot.script
new file mode 100755
index 0000000..fcce679
--- /dev/null
+++ b/abs/core-testing/runit/reboot.script
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/reboot-runit $@
+else
+ /sbin/reboot.init $@
+fi
+
diff --git a/abs/core-testing/runit/remove_service.sh b/abs/core-testing/runit/remove_service.sh
new file mode 100755
index 0000000..16c7ecf
--- /dev/null
+++ b/abs/core-testing/runit/remove_service.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -e $SERVICE_DIR/$1 ]
+then
+ rm $SERVICE_DIR/$1
+ echo "removing $1"
+fi
diff --git a/abs/core-testing/runit/runit.install b/abs/core-testing/runit/runit.install
new file mode 100755
index 0000000..4652368
--- /dev/null
+++ b/abs/core-testing/runit/runit.install
@@ -0,0 +1,57 @@
+# arg 1: the new package version
+
+pre_install () {
+if [ ! -f /sbin/halt-init ]
+then
+ mv /sbin/halt /sbin/halt-init
+ rm -f /sbin/reboot
+ rm -f /sbin/poweroff
+fi
+
+}
+
+pre_upgrade () {
+if [ ! -f /sbin/halt-init ]
+then
+ mv /sbin/halt /sbin/halt-init
+ rm -f /sbin/reboot
+ rm -f /sbin/poweroff
+fi
+
+}
+
+post_install () {
+
+ mkdir /var/service
+ ln -s /etc/sv/tty* /var/service
+ servicelist="acpid cron frontend lircd ntpd alsa-utils avahi dbus portmap sshd"
+ for i in $servicelist
+ do
+ ln -s /etc/sv/$i /var/service/$i
+ done
+
+ ln -s /sbin/halt.script /sbin/halt
+ ln -s /sbin/reboot.script /sbin/reboot
+ ln -s /sbin/poweroff.script /sbin/poweroff
+ ln -s /sbin/halt-init /sbin/reboot.init
+ ln -s /sbin/halt-init /sbin/poweroff.init
+
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+
+post_upgrade(){
+ ln -s /sbin/halt.script /sbin/halt
+ ln -s /sbin/reboot.script /sbin/reboot
+ ln -s /sbin/poweroff.script /sbin/poweroff
+ ln -s /sbin/halt-init /sbin/reboot.init
+ ln -s /sbin/halt-init /sbin/poweroff.init
+
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/runit/runitscripts/1 b/abs/core-testing/runit/runitscripts/1
new file mode 100755
index 0000000..748930f
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/1
@@ -0,0 +1,14 @@
+#!/bin/bash
+/etc/rc.sysinit
+hostname `cat /etc/hostname`
+/sbin/sysctl -p 2>/dev/null >/dev/null
+#/usr/bin/load-modules-mythvantage.sh
+rm /etc/dhcpc/dhcpcd*.pid 2>/dev/null
+rm -f /etc/sv/frontend/.runtime/* 2>/dev/null
+rm -f /etc/runit/reboot 2>/dev/null
+/etc/net/scripts/network.init start 2>/var/log/network.init.error >/var/log/network.init
+/usr/sbin/ethtool -s eth0 wol g 2>/dev/null
+/usr/sbin/ethtool -s eth1 wol g 2>/dev/null
+/usr/sbin/ethtool -s eth2 wol g 2>/dev/null
+
+#/bin/su mythtv -c /usr/bin/grabkey.py 2>/dev/null 1>/devn/null &
diff --git a/abs/core-testing/runit/runitscripts/2 b/abs/core-testing/runit/runitscripts/2
new file mode 100755
index 0000000..079b644
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/2
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+PATH=/bin:/sbin:/usr/bin:/usr/sbin
+
+#runsvchdir default >/dev/null
+
+exec env - PATH=$PATH \
+runsvdir -P /var/service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'
diff --git a/abs/core-testing/runit/runitscripts/3 b/abs/core-testing/runit/runitscripts/3
new file mode 100755
index 0000000..0fa3abc
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/3
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+export PREVLEVEL=3
+/etc/rc.shutdown
diff --git a/abs/core-testing/runit/runitscripts/ctrlaltdel b/abs/core-testing/runit/runitscripts/ctrlaltdel
new file mode 100755
index 0000000..2550d3c
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/ctrlaltdel
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+PATH=/bin:/usr/bin
+MSG="System is going down in 10 seconds..."
+
+# echo 'disabled.' ; exit
+touch /etc/runit/stopit
+chmod 100 /etc/runit/stopit && echo "$MSG" | wall
+/bin/sleep 10
diff --git a/abs/core-testing/runit/runitscripts/halt-runit b/abs/core-testing/runit/runitscripts/halt-runit
new file mode 100755
index 0000000..7c07b05
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/halt-runit
@@ -0,0 +1,2 @@
+#!/bin/sh
+runit-init 0
diff --git a/abs/core-testing/runit/runitscripts/logger b/abs/core-testing/runit/runitscripts/logger
new file mode 100755
index 0000000..6888f6f
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/logger
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+svname=$( cd .. && basename $( pwd ) )
+if [ ! -d /var/log/$svname ]
+then
+ mkdir /var/log/$svname
+ chown root.root /var/log/$svname
+ chmod 700 /var/log/$svname
+fi
+
+exec /sbin/svlogd -tt /var/log/$svname
diff --git a/abs/core-testing/runit/runitscripts/reboot-runit b/abs/core-testing/runit/runitscripts/reboot-runit
new file mode 100755
index 0000000..be831ec
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/reboot-runit
@@ -0,0 +1,2 @@
+#!/bin/sh
+runit-init 6
diff --git a/abs/core-testing/runit/runitscripts/services/Xvfb/finish b/abs/core-testing/runit/runitscripts/services/Xvfb/finish
new file mode 100755
index 0000000..14cd831
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/Xvfb/finish
@@ -0,0 +1,12 @@
+#!/bin/bash
+. /etc/profile
+VIRTUAL_DISPLAY=":50"
+Xvfb_parm="$VIRTUAL_DISPLAY -screen 0 800x600x16"
+pid=`ps -eaf | grep Xvfb | grep $VIRTUAL_DISPLAY | awk '{print $2}'`
+ if [ $pid ]
+ then
+ kill -9 $pid
+# echo $pid
+fi
+rm -f /tmp/.X${VIRTUAL_DISPLAY}-lock
+
diff --git a/abs/core-testing/runit/runitscripts/services/Xvfb/run b/abs/core-testing/runit/runitscripts/services/Xvfb/run
new file mode 100755
index 0000000..823916d
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/Xvfb/run
@@ -0,0 +1,5 @@
+#!/bin/bash
+. /etc/profile
+VIRTUAL_DISPLAY=":50"
+Xvfb_parm="$VIRTUAL_DISPLAY -screen 0 800x600x16"
+Xvfb $Xvfb_parm
diff --git a/abs/core-testing/runit/runitscripts/services/acpid/run b/abs/core-testing/runit/runitscripts/services/acpid/run
new file mode 100755
index 0000000..daf9859
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/acpid/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/acpid -f -c /etc/acpi/events 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/alsa-utils/finish b/abs/core-testing/runit/runitscripts/services/alsa-utils/finish
new file mode 100755
index 0000000..d6f3897
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/alsa-utils/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+sv down alsa-utils
diff --git a/abs/core-testing/runit/runitscripts/services/alsa-utils/run b/abs/core-testing/runit/runitscripts/services/alsa-utils/run
new file mode 100755
index 0000000..17f5f99
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/alsa-utils/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /etc/rc.d/alsa start
diff --git a/abs/core-testing/runit/runitscripts/services/apache/run b/abs/core-testing/runit/runitscripts/services/apache/run
new file mode 100755
index 0000000..130d870
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/apache/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/local/apache/bin/httpd -DNO_DETACH
diff --git a/abs/core-testing/runit/runitscripts/services/avahi/run b/abs/core-testing/runit/runitscripts/services/avahi/run
new file mode 100755
index 0000000..323d242
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/avahi/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/avahi-daemon >/dev/null 2>/dev/null
+
diff --git a/abs/core-testing/runit/runitscripts/services/cron/run b/abs/core-testing/runit/runitscripts/services/cron/run
new file mode 100755
index 0000000..99dc014
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/cron/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/crond -f >/dev/null 2>/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/dbus/run b/abs/core-testing/runit/runitscripts/services/dbus/run
new file mode 100755
index 0000000..872ca77
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/dbus/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/bin/dbus-daemon --system --nofork 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/dnsmasq/run b/abs/core-testing/runit/runitscripts/services/dnsmasq/run
new file mode 100755
index 0000000..451dda4
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/dnsmasq/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/dnsmasq -k >/dev/null 2>/dev/null
+
diff --git a/abs/core-testing/runit/runitscripts/services/evrouter/finish b/abs/core-testing/runit/runitscripts/services/evrouter/finish
new file mode 100755
index 0000000..0dd33de
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/evrouter/finish
@@ -0,0 +1,4 @@
+#!/bin/bash
+. /etc/profile
+DISPLAY=localhost:50 evrouter -q
+rm -rf /tmp/.evrouter*
diff --git a/abs/core-testing/runit/runitscripts/services/evrouter/run b/abs/core-testing/runit/runitscripts/services/evrouter/run
new file mode 100755
index 0000000..1d7389a
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/evrouter/run
@@ -0,0 +1,5 @@
+#!/bin/bash
+. /etc/profile
+sv start Xvfb
+su mythtv -c "DISPLAY=localhost:50 evrouter -c /etc/evrouter.cfg -f /dev/input/event*"
+
diff --git a/abs/core-testing/runit/runitscripts/services/frontend/finish b/abs/core-testing/runit/runitscripts/services/frontend/finish
new file mode 100755
index 0000000..e1e3e00
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/frontend/finish
@@ -0,0 +1,30 @@
+#!/bin/bash
+exec 2>&1
+grep -q nox /proc/cmdline
+STATUS=$?
+ if [ $STATUS = 0 ]
+ then
+ chvt 2
+else
+
+chvt 1
+if [ ! -d /etc/sv/frontend/.runtime ]
+then
+ 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 ]
+then
+ sv stop frontend
+ rm -f /etc/sv/frontend/.runtime/*
+ echo "Frontend is not able to start, disabling it"
+fi
+fi
diff --git a/abs/core-testing/runit/runitscripts/services/frontend/log/run b/abs/core-testing/runit/runitscripts/services/frontend/log/run
new file mode 100755
index 0000000..463045f
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/frontend/log/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+. /etc/systemconfig
+ /usr/bin/logger -p local6.info -t mythfrontend
+
diff --git a/abs/core-testing/runit/runitscripts/services/frontend/run b/abs/core-testing/runit/runitscripts/services/frontend/run
new file mode 100755
index 0000000..b59fc63
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/frontend/run
@@ -0,0 +1,10 @@
+#!/bin/sh
+exec 2>&1
+ grep -q nox /proc/cmdline
+ STATUS=$?
+ if [ $STATUS = 0 ]
+ then
+ sv down frontend
+ exit 0
+ fi
+/usr/bin/openvt -fwc 6 -- /bin/su - mythtv -c /usr/bin/startx >& /dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/gpm/run b/abs/core-testing/runit/runitscripts/services/gpm/run
new file mode 100755
index 0000000..361fc43
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/gpm/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+. /etc/sysconfig/mouse
+exec gpm -D -m $MDEVICE -t $PROTOCOL
diff --git a/abs/core-testing/runit/runitscripts/services/hal/run b/abs/core-testing/runit/runitscripts/services/hal/run
new file mode 100755
index 0000000..f1362b2
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/hal/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+sv waitup dbus 2>/dev/null 1>/dev/null
+exec /usr/sbin/hald --daemon=no --use-syslog 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/hobbit-client/run b/abs/core-testing/runit/runitscripts/services/hobbit-client/run
new file mode 100755
index 0000000..e45173d
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/hobbit-client/run
@@ -0,0 +1,68 @@
+#!/bin/sh
+#----------------------------------------------------------------------------#
+# Hobbit client bootup script. #
+# #
+# This invokes hobbitlaunch, which in turn runs the Hobbit client and any #
+# extensions configured. #
+# #
+# Copyright (C) 2005-2006 Henrik Storner <henrik@hswn.dk> #
+# "status" section (C) Scott Smith 2006 #
+# #
+# This program is released under the GNU General Public License (GPL), #
+# version 2. See the file "COPYING" for details. #
+# #
+#----------------------------------------------------------------------------#
+#
+# $Id: runclient.sh,v 1.13 2006/07/14 21:25:19 henrik Rel $
+
+# Default settings for this client
+MACHINEDOTS="`uname -n`" # This systems hostname
+BBOSTYPE="`uname -s | tr '[A-Z]' '[a-z]'`" # This systems operating system in lowercase
+BBOSSCRIPT="hobbitclient-$BBOSTYPE.sh"
+
+# Commandline mods for the defaults
+while test "$1" != ""
+do
+ case "$1" in
+ --hostname=*)
+ MACHINEDOTS="`echo $1 | sed -e 's/--hostname=//'`"
+ ;;
+ --os=*)
+ BBOSTYPE="`echo $1 | sed -e 's/--os=//' | tr '[A-Z]' '[a-z]'`"
+ ;;
+ --class=*)
+ CONFIGCLASS="`echo $1 | sed -e 's/--class=//' | tr '[A-Z]' '[a-z]'`"
+ ;;
+ --help)
+ echo "Usage: $0 [--hostname=CLIENTNAME] [--os=rhel3|linux22] [--class=CLASSNAME] start|stop"
+ exit 0
+ ;;
+ start)
+ CMD=$1
+ ;;
+ stop)
+ CMD=$1
+ ;;
+ restart)
+ CMD=$1
+ ;;
+ status)
+ CMD=$1
+ ;;
+ esac
+
+ shift
+done
+
+OLDDIR="`pwd`"
+cd "`dirname $0`"
+HOBBITCLIENTHOME="/data/srv/hobbit/client"
+cd "$OLDDIR"
+
+MACHINE="`echo $MACHINEDOTS | sed -e 's/\./,/g'`"
+
+export MACHINE MACHINEDOTS BBOSTYPE BBOSSCRIPT HOBBITCLIENTHOME CONFIGCLASS
+
+
+su nobody -c "$HOBBITCLIENTHOME/bin/hobbitlaunch --config=$HOBBITCLIENTHOME/etc/clientlaunch.cfg --log=$HOBBITCLIENTHOME/logs/clientlaunch.log --pidfile=$HOBBITCLIENTHOME/logs/clientlaunch.$MACHINEDOTS.pid --no-daemon"
+
diff --git a/abs/core-testing/runit/runitscripts/services/hobbit/run b/abs/core-testing/runit/runitscripts/services/hobbit/run
new file mode 100755
index 0000000..24ad9fe
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/hobbit/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec su nobody -c "/data/srv/hobbit/server/bin/hobbitlaunch --config=/data/srv/hobbit/server/etc/hobbitlaunch.cfg --env=/data/srv/hobbit/server/etc/hobbitserver.cfg --log=/var/log/hobbit/hobbitlaunch.log --pidfile=/var/log/hobbit/hobbitlaunch.pid --no-daemon"
diff --git a/abs/core-testing/runit/runitscripts/services/lcdd/run b/abs/core-testing/runit/runitscripts/services/lcdd/run
new file mode 100755
index 0000000..df71bf8
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/lcdd/run
@@ -0,0 +1,9 @@
+#!/bin/sh
+. /etc/systemconfig
+exec 2>&1
+if [ x$LCDtype = xxosd ]
+then
+ DISPLAY=127.0.0.1:0 /usr/sbin/LCDd -f -c /etc/LCDd.conf 2>/dev/null >/dev/null
+else
+ exec /usr/sbin/LCDd -f -c /etc/LCDd.conf 2>/dev/null >/dev/null
+fi
diff --git a/abs/core-testing/runit/runitscripts/services/lighttpd/run b/abs/core-testing/runit/runitscripts/services/lighttpd/run
new file mode 100755
index 0000000..70cb0a5
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/lighttpd/run
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
diff --git a/abs/core-testing/runit/runitscripts/services/lircd/finish b/abs/core-testing/runit/runitscripts/services/lircd/finish
new file mode 100755
index 0000000..3545b07
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/lircd/finish
@@ -0,0 +1,12 @@
+#!/bin/bash
+killall -9 lircd
+rm -f /var/run/lirc*.pid
+touch /etc/sv/lircd/.runtime/`date +%s`
+numfiles=`/usr/bin/file_time_offset.py -s4 -d/etc/sv/lircd/.runtime `
+if [ $numfiles -gt 3 ]
+then
+ rm -f /etc/sv/lircd/.runtime/*
+ ls -la /etc/sv/lircd/.runtime/*
+ sv stop lircd
+ echo "lircd is not able to start, disabling it"
+fi
diff --git a/abs/core-testing/runit/runitscripts/services/lircd/run b/abs/core-testing/runit/runitscripts/services/lircd/run
new file mode 100755
index 0000000..4457b37
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/lircd/run
@@ -0,0 +1,39 @@
+#!/bin/bash
+exec 2>&1
+run_lircd2=false
+. /etc/systemconfig
+function imon_detect {
+if [ -e /dev/lirc_imon ]
+then
+lircd2_cmd="/usr/sbin/lircd -d /dev/lirc_imon --output=/dev/lircd --pidfile=/var/run/lircd2.pid --connect=localhost:8765"
+run_lircd2=true
+fi
+}
+
+
+
+case $ReceiverType in
+ Serial)
+ /usr/bin/setserial /dev/$ReceiverSerialport uart none
+ /sbin/modprobe lirc_serial
+ DEVICE=`ls /dev/lirc[0-9] 2>/dev/null |sort |sed '/./,$!d'|head -n 1 `
+ imon_detect
+ ;;
+ Usb-imon)
+ DEVICE=/dev/lirc_imon
+ ;;
+
+ *)
+
+ DEVICE=`ls /dev/lirc[0-9] 2>/dev/null |sort |sed '/./,$!d'|head -n 1 `
+ imon_detect
+ ;;
+esac
+
+if [ "$run_lircd2" = "true" ]
+then
+ $lircd2_cmd 2>/dev/null 1>/dev/null
+ exec /usr/sbin/lircd -n -d $DEVICE --output /dev/lircd1 --listen 2>/dev/null 1>/dev/null
+else
+ exec /usr/sbin/lircd -n -d $DEVICE 2>/dev/null 1>/dev/null
+fi
diff --git a/abs/core-testing/runit/runitscripts/services/mysql/run b/abs/core-testing/runit/runitscripts/services/mysql/run
new file mode 100755
index 0000000..569230e
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/mysql/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+exec 2>&1
+
+MYSQLD_ROOT="/data/srv/mysql"
+# source application-specific settings
+[ -f /etc/conf.d/mysqld ] && . /etc/conf.d/mysqld
+if [ ! `egrep '^mysql:' /etc/group` ]; then
+ stat_busy "Adding mysql group"
+ groupadd -g 89 mysql
+ stat_done
+fi
+if [ ! `egrep '^mysql:' /etc/passwd` ]; then
+ stat_busy "Adding mysql user"
+ useradd -u 89 -g mysql -d $MYSQLD_ROOT -s /bin/false mysql
+ [ -d $MYSQLD_ROOT ] && chown -R mysql.mysql $MYSQLD_ROOT
+ stat_done
+fi
+
+if [ ! -d $MYSQLD_ROOT ]; then
+ mkdir $MYSQLD_ROOT
+ /usr/bin/mysql_install_db --datadir=$MYSQLD_ROOT --user=mysql
+ chown -R mysql.mysql $MYSQLD_ROOT
+fi
+
+if [ ! -e /var/log/mysqld.log ]; then
+ touch /var/log/mysqld.log
+ chown mysql /var/log/mysqld.log
+fi
+exec /usr/sbin/mysqld -u mysql 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/mythbackend/log/run b/abs/core-testing/runit/runitscripts/services/mythbackend/log/run
new file mode 100755
index 0000000..6ed5184
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/mythbackend/log/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+ /usr/bin/logger -p local7.info -t mythbackend
+
diff --git a/abs/core-testing/runit/runitscripts/services/mythbackend/run b/abs/core-testing/runit/runitscripts/services/mythbackend/run
new file mode 100755
index 0000000..b33e2e4
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/mythbackend/run
@@ -0,0 +1,25 @@
+#!/bin/sh
+exec 2>&1
+. /etc/profile
+. /etc/systemconfig
+export HOME=/root
+if [ ! x$SystemType = xSlave_backend ]
+then
+ sv start mysql > /dev/null 2>/dev/null
+ #run mythfilldatabase
+ /usr/MythVantage/bin/initial_db_run &
+fi
+mkfifo /tmp/mbefifo >/dev/null 2>/dev/null
+echo "Starting mythbackend"
+# if [ -f /tmp/debug ]
+# then
+# echo "using gbd/debug"
+# gdb /usr/bin/mythbackend -x $MV_ROOT/mbegdbcommands.txt
+# bash -c "osdClient.pl localhost 5000 'Restart gdb mbe :::SYS' "&
+# mv gdb.txt /data/home/mythtv/gdb.txt.mythbackend
+# chown mythtv:mythtv /data/home/mythtv/gdb.txt.mythbackend
+# sleep 10
+#
+# else
+ exec /usr/bin/mythbackend
+# fi
diff --git a/abs/core-testing/runit/runitscripts/services/ncid/run b/abs/core-testing/runit/runitscripts/services/ncid/run
new file mode 100755
index 0000000..8a90707
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/ncid/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+sv start ncidd
+exec /usr/bin/ncid --no-gui --all --call-prog --program /usr/bin/ncid.py 127.0.0.1 3333
+
diff --git a/abs/core-testing/runit/runitscripts/services/ncidd/run b/abs/core-testing/runit/runitscripts/services/ncidd/run
new file mode 100755
index 0000000..6b032db
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/ncidd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/ncidd -D 2>&1
diff --git a/abs/core-testing/runit/runitscripts/services/netfs/finish b/abs/core-testing/runit/runitscripts/services/netfs/finish
new file mode 100755
index 0000000..43be94c
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/netfs/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+sv down netfs
diff --git a/abs/core-testing/runit/runitscripts/services/netfs/run b/abs/core-testing/runit/runitscripts/services/netfs/run
new file mode 100755
index 0000000..f2c0813
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/netfs/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+sv start portmap
+/etc/rc.d/netfs start
+
diff --git a/abs/core-testing/runit/runitscripts/services/nfsd/run b/abs/core-testing/runit/runitscripts/services/nfsd/run
new file mode 100755
index 0000000..6610fe9
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/nfsd/run
@@ -0,0 +1,22 @@
+#!/bin/bash
+exec 2>&1
+
+# Make sure the statd daemon is up
+# (the statd service must ensure portmap is running first)
+svwaitup /var/service/nfslock >/dev/null 2>/dev/null
+
+source /etc/conf.d/nfsd
+
+# Re-export all directories in /etc/exports
+/usr/sbin/exportfs -ra > /dev/null 2>/dev/null
+
+# start some nfsd threads
+/usr/sbin/rpc.nfsd -p ${NFSD_OPTS} >/dev/null 2>/dev/null
+
+# since we are running kernel 2.6 we should also
+# mount the nfsd virtual filesystem
+/bin/mount -t nfsd none /proc/fs/nfsd >/dev/null 2>/dev/null
+
+# Start the rpc.mountd daemon
+exec /usr/sbin/rpc.mountd --foreground >/dev/null 2>/dev/null
+
diff --git a/abs/core-testing/runit/runitscripts/services/nfslock/run b/abs/core-testing/runit/runitscripts/services/nfslock/run
new file mode 100755
index 0000000..0ec6f75
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/nfslock/run
@@ -0,0 +1,4 @@
+#!/bin/bash
+exec 2>&1
+sv start portmap >/dev/null 2>/dev/null
+/usr/sbin/rpc.statd -F >/dev/null 2>/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/nmbd/run b/abs/core-testing/runit/runitscripts/services/nmbd/run
new file mode 100755
index 0000000..9aa27ec
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/nmbd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec nmbd -F -S -d1 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/ntpd/run b/abs/core-testing/runit/runitscripts/services/ntpd/run
new file mode 100755
index 0000000..97302f1
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/ntpd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+ntpdate pool.ntp.org
+exec ntpd -n -p /var/run/ntpd.pid
diff --git a/abs/core-testing/runit/runitscripts/services/oss/finish b/abs/core-testing/runit/runitscripts/services/oss/finish
new file mode 100755
index 0000000..f929f39
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/oss/finish
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+sv down oss
+
diff --git a/abs/core-testing/runit/runitscripts/services/oss/run b/abs/core-testing/runit/runitscripts/services/oss/run
new file mode 100755
index 0000000..687de8f
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/oss/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+rm -f /usr/lib/oss/starting
+#exec /etc/rc.d/alsa-utils start all
+exec /usr/sbin/soundon
+
diff --git a/abs/core-testing/runit/runitscripts/services/portmap/run b/abs/core-testing/runit/runitscripts/services/portmap/run
new file mode 100755
index 0000000..561d65b
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/portmap/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /sbin/portmap -d >/dev/null 2>/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/smbd/run b/abs/core-testing/runit/runitscripts/services/smbd/run
new file mode 100755
index 0000000..af77dcb
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/smbd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec smbd -F -S -d3 2>/dev/null >/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/sshd/run b/abs/core-testing/runit/runitscripts/services/sshd/run
new file mode 100755
index 0000000..0dd16ef
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/sshd/run
@@ -0,0 +1,8 @@
+#!/bin/bash
+exec 2>&1
+
+[ -f /etc/ssh/ssh_host_key ] || { /usr/bin/ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_rsa_key ] || { /usr/bin/ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_dsa_key ] || { /usr/bin/ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key >/dev/null; }
+
+exec /usr/sbin/sshd -D >/dev/null 2>/dev/null
diff --git a/abs/core-testing/runit/runitscripts/services/syslog-ng/run b/abs/core-testing/runit/runitscripts/services/syslog-ng/run
new file mode 100755
index 0000000..eb56ace
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/syslog-ng/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/syslog-ng -F
diff --git a/abs/core-testing/runit/runitscripts/services/tty2/run b/abs/core-testing/runit/runitscripts/services/tty2/run
new file mode 100755
index 0000000..3782aed
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/tty2/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /sbin/agetty 38400 vc/2 linux
diff --git a/abs/core-testing/runit/runitscripts/services/tty3/run b/abs/core-testing/runit/runitscripts/services/tty3/run
new file mode 100755
index 0000000..ce66b0d
--- /dev/null
+++ b/abs/core-testing/runit/runitscripts/services/tty3/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /sbin/agetty 38400 vc/3 linux
diff --git a/abs/core-testing/scrnsaverproto/PKGBUILD b/abs/core-testing/scrnsaverproto/PKGBUILD
new file mode 100644
index 0000000..0e1ba02
--- /dev/null
+++ b/abs/core-testing/scrnsaverproto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 5568 2008-07-18 20:51:46Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=scrnsaverproto
+pkgver=1.1.0
+pkgrel=2
+pkgdesc="X11 Screen Saver extension wire protocol"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('5d551850e6f4acdf49a13f4eb3a5bbfa')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/sdl/PKGBUILD b/abs/core-testing/sdl/PKGBUILD
new file mode 100644
index 0000000..be6508a
--- /dev/null
+++ b/abs/core-testing/sdl/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=sdl
+pkgver=1.2.13
+pkgrel=1
+pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glibc' 'libxext' 'libxrender' 'libx11')
+options=('!libtool')
+makedepends=('alsa-lib' 'esd' 'mesa')
+source=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz)
+url="http://www.libsdl.org"
+md5sums=('c6660feea2a6834de10bc71b2f8e4d88')
+
+build() {
+ cd ${startdir}/src/SDL-${pkgver}
+ ./configure --prefix=/usr --disable-nasm --enable-alsa --enable-esd --with-x
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core-testing/sdparm/PKGBUILD b/abs/core-testing/sdparm/PKGBUILD
new file mode 100644
index 0000000..d6b7155
--- /dev/null
+++ b/abs/core-testing/sdparm/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Roman Kyrylych <Roman.Kyrylych@gmail.com>
+# Contributor: grimi@poczta.fm
+
+pkgname=sdparm
+pkgver=1.02
+pkgrel=2
+pkgdesc="An utility similar to hdparm but for SCSI devices"
+arch=('i686' 'x86_64')
+url="http://sg.torque.net/sg/sdparm.html"
+groups=('base')
+license=('BSD')
+depends=('glibc')
+source=("http://sg.torque.net/sg/p/$pkgname-$pkgver.tgz")
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -Dm644 COPYING $startdir/pkg/usr/share/licenses/sdparm/COPYING
+}
diff --git a/abs/core-testing/sed/PKGBUILD b/abs/core-testing/sed/PKGBUILD
new file mode 100644
index 0000000..787464b
--- /dev/null
+++ b/abs/core-testing/sed/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=sed
+pkgver=4.1.5
+pkgrel=12
+pkgdesc="GNU stream editor"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/sed"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/pub/gnu/sed/$pkgname-$pkgver.tar.gz)
+md5sums=('7a1cbbbb3341287308e140bd4834c3ba')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+ mv $startdir/pkg/usr/bin $startdir/pkg/
+}
diff --git a/abs/core-testing/sg3_utils/PKGBUILD b/abs/core-testing/sg3_utils/PKGBUILD
new file mode 100644
index 0000000..1da9b0e
--- /dev/null
+++ b/abs/core-testing/sg3_utils/PKGBUILD
@@ -0,0 +1,18 @@
+pkgname=sg3_utils
+pkgver=1.27
+pkgrel=1
+pkgdesc="Generic SCSI utilities"
+arch=(i686 x86_64)
+url="http://sg.torque.net/sg/sg3_utils.html"
+license=('GPL' 'custom:BSD')
+depends=('glibc')
+options=('!libtool')
+source=(http://www.mythvantage.com/src/${pkgname}-${pkgver}.tgz)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core-testing/shadow/PKGBUILD b/abs/core-testing/shadow/PKGBUILD
new file mode 100644
index 0000000..20f7e65
--- /dev/null
+++ b/abs/core-testing/shadow/PKGBUILD
@@ -0,0 +1,88 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=shadow
+pkgver=4.0.18.2
+pkgrel=11
+pkgdesc="Shadow password file utilities"
+arch=(i686 x86_64)
+url='http://pkg-shadow.alioth.debian.org/'
+license=('custom')
+groups=('base')
+backup=(etc/login.defs
+ etc/pam.d/{chage,login,passwd,shadow,useradd,usermod,userdel}
+ etc/pam.d/{chpasswd,newusers,groupadd,groupdel,groupmod}
+ etc/pam.d/{chfn,chgpasswd,groupmems,chsh}
+ etc/default/useradd)
+depends=('pam')
+source=(ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/shadow-$pkgver.tar.bz2
+ login passwd useradd login.defs adduser shadow.cron.daily
+ useradd-default.patch xstrdup.patch shadow-4.0.18.2-useradd-fix-1.patch)
+options=(!libtool)
+install='shadow.install'
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../xstrdup.patch || return 1
+ patch -Np1 -i ../shadow-4.0.18.2-useradd-fix-1.patch || return 1
+ # patch etc/default/useradd for Arch defaults - Tom K
+ patch -Np1 -i ../useradd-default.patch || return 1
+
+ # supress etc/pam.d/*, we provide our own
+ sed -i '/^SUBDIRS/s/pam.d//' etc/Makefile.in
+
+ ./configure \
+ --prefix=/usr --libdir=/usr/lib \
+ --mandir=/usr/man --sysconfdir=/etc \
+ --enable-shared --with-libpam --without-selinux
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ # license
+ install -v -D -m644 COPYING $startdir/pkg/usr/share/licenses/shadow/COPYING
+
+ # interactive useradd
+ install -v -D -m755 ../adduser $startdir/pkg/usr/sbin/adduser
+
+ # cron job
+ install -v -D -m744 ../shadow.cron.daily $startdir/pkg/etc/cron.daily/shadow
+
+ # login.defs
+ install -v -D -m644 ../login.defs $startdir/pkg/etc/login.defs
+
+ # PAM config
+ local file
+ for file in login passwd; do
+ install -v -D -m644 ../$file $startdir/pkg/etc/pam.d/$file
+ done
+ # we use the 'useradd' PAM file for other similar utilities
+ for file in chage chpasswd chfn chsh groupadd groupdel groupmod \
+ newusers shadow useradd usermod userdel; do
+ install -v -D -m644 ../useradd $startdir/pkg/etc/pam.d/$file
+ done
+ # add leftover pam files
+ for i in chgpasswd groupmems; do
+ install -v -D -m644 etc/pam.d/$i $startdir/pkg/etc/pam.d/$i
+ done
+
+ cd $startdir/pkg
+
+ # Remove su - using su from coreutils instead
+ rm -v bin/su
+ find usr/man -name 'su.1' -exec rm -v {} \;
+
+ # Move shared libs to /lib
+ mkdir -pv lib
+ mv -v usr/lib/libshadow.so.* lib/
+ ln -svf ../../lib/libshadow.so.0 usr/lib/libshadow.so
+}
+md5sums=('b900467e5c60c78b6d84b0353d1769d5'
+ '0aa429de6773ebcdf89db80165379cc6'
+ 'b84204ab731bd02dca49d0637d44ebec'
+ 'a31374fef2cba0ca34dfc7078e2969e4'
+ '3699bed31154051c0508a890d6d95027'
+ '6ce67e423ee19c87ae64f661310b2408'
+ '1d64b4113e1d402746d9dd65f28a2c6f'
+ '1e49ee3b5b96b47782b22237b95c4bc2'
+ '576c00b284b9c180667a56c6cd326f0c'
+ '5c0b58c8bee13a57244ec783a8194970')
diff --git a/abs/core-testing/shadow/adduser b/abs/core-testing/shadow/adduser
new file mode 100644
index 0000000..a5d7fd4
--- /dev/null
+++ b/abs/core-testing/shadow/adduser
@@ -0,0 +1,399 @@
+#!/bin/bash
+#
+# Copyright 1995 Hrvoje Dogan, Croatia.
+# Copyright 2002, 2003, 2004 Stuart Winter, West Midlands, England, UK.
+# Copyright 2004 Slackware Linux, Inc., Concord, CA, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+##########################################################################
+# Program: /usr/sbin/adduser
+# Purpose: Interactive front end to /usr/sbin/useradd for Slackware Linux
+# Author : Stuart Winter <stuart@polplex.co.uk>
+# Based on the original Slackware adduser by Hrvoje Dogan
+# with modifications by Patrick Volkerding
+# Version: 1.09
+##########################################################################
+# Usage..: adduser [<new_user_name>]
+##########################################################################
+# History #
+###########
+# v1.09 - 07/06/04
+# * Added standard Slackware script licence to the head of this file.
+# v1.08 - 25/04/04
+# * Disallow user names that begin with a numeric because useradd
+# (from shadow v4.03) does not allow them. <sw>
+# v1.07 - 07/03/03
+# * When supplying a null string for the uid (meaning 'Choose next available'),
+# if there were file names in the range 'a-z' in the pwd then the
+# egrep command considered these files rather than the null string.
+# The egrep expression is now in quotes.
+# Reported & fixed by Vadim O. Ustiansky <sw>
+# v1.06 - 31/03/03
+# * Ask to chown user.group the home directory if it already exists.
+# This helps reduce later confusion when adding users whose home dir
+# already exists (mounted partition for example) and is owned
+# by a user other than the user to which the directory is being
+# assigned as home. Default is not to chown.
+# Brought to my attention by mRgOBLIN. <sw>
+# v1.05 - 04/01/03
+# * Advise & prevent users from creating logins with '.' characters
+# in the user name. <sw>
+# * Made pending account creation info look neater <sw>
+# v1.04 - 09/06/02
+# * Catered for shadow-4.0.3's 'useradd' binary that no longer
+# will let you create a user that has any uppercase chars in it
+# This was reported on the userlocal.org forums
+# by 'xcp' - thanks. <sw,pjv>
+# v1.03 - 20/05/02
+# * Support 'broken' (null lines in) /etc/passwd and
+# /etc/group files <sw>
+# * For recycling UIDs (default still 'off'), we now look in
+# /etc/login.defs for the UID_MIN value and use it
+# If not found then default to 1000 <sw>
+# v1.02 - 10/04/02
+# * Fix user-specified UID bug. <pjv>
+# v1.01 - 23/03/02
+# * Match Slackware indenting style, simplify. <pjv>
+# v1.00 - 22/03/02
+# * Created
+#######################################################################
+
+# Path to files
+pfile=/etc/passwd
+gfile=/etc/group
+sfile=/etc/shells
+
+# Paths to binaries
+useradd=/usr/sbin/useradd
+chfn=/usr/bin/chfn
+passwd=/usr/bin/passwd
+
+# Defaults
+defhome=/home
+defshell=/bin/bash
+defgroup=users
+
+# Determine what the minimum UID is (for UID recycling)
+# (we ignore it if it's not at the beginning of the line (i.e. commented out with #))
+export recycleUIDMIN="$(grep ^UID_MIN /etc/login.defs | awk '{print $2}' 2>/dev/null)"
+# If we couldn't find it, set it to the default of 1000
+if [ -z "$recycleUIDMIN" ]; then
+ export recycleUIDMIN=1000 # this is the default from Slackware's /etc/login.defs
+fi
+
+
+# This setting enables the 'recycling' of older unused UIDs.
+# When you userdel a user, it removes it from passwd and shadow but it will
+# never get used again unless you specify it expliticly -- useradd (appears to) just
+# look at the last line in passwd and increment the uid. I like the idea of
+# recycling uids but you may have very good reasons not to (old forgotten
+# confidential files still on the system could then be owned by this new user).
+# We'll set this to no because this is what the original adduser shell script
+# did and it's what users expect.
+recycleuids=no
+
+# Function to read keyboard input.
+# bash1 is broken (even ash will take read -ep!), so we work around
+# it (even though bash1 is no longer supported on Slackware).
+function get_input() {
+ local output
+ if [ "`echo $BASH_VERSION | cut -b1`" = "1" ]; then
+ echo -n "${1} " >&2 # fudge for use with bash v1
+ read output
+ else # this should work with any other /bin/sh
+ read -ep "${1} " output
+ fi
+ echo $output
+}
+
+# Function to display the account info
+function display () {
+ local goose
+ goose="$(echo $2 | cut -d ' ' -f 2-)" # lop off the prefixed argument useradd needs
+ echo -n "$1 "
+ # If it's null then display the 'other' information
+ if [ -z "$goose" -a ! -z "$3" ]; then
+ echo "$3"
+ else
+ echo "$goose"
+ fi
+}
+
+# Function to check whether groups exist in the /etc/group file
+function check_group () {
+ local got_error group
+ if [ ! -z "$@" ]; then
+ for group in $@ ; do
+ local uid_not_named="" uid_not_num=""
+ grep -v "$^" $gfile | awk -F: '{print $1}' | grep "^${group}$" >/dev/null 2>&1 || uid_not_named=yes
+ grep -v "$^" $gfile | awk -F: '{print $3}' | grep "^${group}$" >/dev/null 2>&1 || uid_not_num=yes
+ if [ ! -z "$uid_not_named" -a ! -z "$uid_not_num" ]; then
+ echo "- Group '$group' does not exist"
+ got_error=yes
+ fi
+ done
+ fi
+ # Return exit code of 1 if at least one of the groups didn't exist
+ if [ ! -z "$got_error" ]; then
+ return 1
+ fi
+}
+
+#: Read the login name for the new user :#
+#
+# Remember that most Mail Transfer Agents are case independant, so having
+# 'uSer' and 'user' may cause confusion/things to break. Because of this,
+# useradd from shadow-4.0.3 no longer accepts usernames containing uppercase,
+# and we must reject them, too.
+
+# Set the login variable to the command line param
+echo
+LOGIN="$1"
+needinput=yes
+while [ ! -z $needinput ]; do
+ if [ -z "$LOGIN" ]; then
+ while [ -z "$LOGIN" ]; do LOGIN="$(get_input "Login name for new user []:")" ; done
+ fi
+ grep "^${LOGIN}:" $pfile >/dev/null 2>&1 # ensure it's not already used
+ if [ $? -eq 0 ]; then
+ echo "- User '$LOGIN' already exists; please choose another"
+ unset LOGIN
+ elif [ ! -z "$( echo $LOGIN | grep "^[0-9]" )" ]; then
+ echo "- User names cannot begin with a number; please choose another"
+ unset LOGIN
+ elif [ ! "$LOGIN" = "`echo $LOGIN | tr A-Z a-z`" ]; then # useradd does not allow uppercase
+ echo "- User '$LOGIN' contains illegal characters (uppercase); please choose another"
+ unset LOGIN
+ elif [ ! -z "$( echo $LOGIN | grep '\.' )" ]; then
+ echo "- User '$LOGIN' contains illegal characters (period/dot); please choose another"
+ unset LOGIN
+ else
+ unset needinput
+ fi
+done
+
+# Display the user name passed from the shell if it hasn't changed
+if [ "$1" = "$LOGIN" ]; then
+ echo "Login name for new user: $LOGIN"
+fi
+
+#: Get the UID for the user & ensure it's not already in use :#
+#
+# Whilst we _can_ allow users with identical UIDs, it's not a 'good thing' because
+# when you change password for the uid, it finds the first match in /etc/passwd
+# which isn't necessarily the correct user
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ _UID="$(get_input "User ID ('UID') [ defaults to next available ]:")"
+ grep -v "^$" $pfile | awk -F: '{print $3}' | grep "^${_UID}$" >/dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "- That UID is already in use; please choose another"
+ elif [ ! -z "$(echo $_UID | egrep '[A-Za-z]')" ]; then
+ echo "- UIDs are numerics only"
+ else
+ unset needinput
+ fi
+done
+# If we were given a UID, then syntax up the variable to pass to useradd
+if [ ! -z "$_UID" ]; then
+ U_ID="-u ${_UID}"
+else
+ # Will we be recycling UIDs?
+ if [ "$recycleuids" = "yes" ]; then
+ U_ID="-u $(awk -F: '{uid[$3]=1} END { for (i=ENVIRON["recycleUIDMIN"];i in uid;i++);print i}' $pfile)"
+ fi
+fi
+
+#: Get the initial group for the user & ensure it exists :#
+#
+# We check /etc/group for both the text version and the group ID number
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ GID="$(get_input "Initial group [ ${defgroup} ]:")"
+ check_group "$GID"
+ if [ $? -gt 0 ]; then
+ echo "- Please choose another"
+ else
+ unset needinput
+ fi
+done
+# Syntax the variable ready for useradd
+if [ -z "$GID" ]; then
+ GID="-g ${defgroup}"
+else
+ GID="-g ${GID}"
+fi
+
+#: Get additional groups for the user :#
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ AGID="$(get_input "Additional groups (comma separated) []:")"
+ AGID="$(echo "$AGID" | tr -d ' ' | tr , ' ')" # fix up for parsing
+ if [ ! -z "$AGID" ]; then
+ check_group "$AGID" # check all groups at once (treated as N # of params)
+ if [ $? -gt 0 ]; then
+ echo "- Please re-enter the group(s)"
+ else
+ unset needinput # we found all groups specified
+ AGID="-G $(echo "$AGID" | tr ' ' ,)"
+ fi
+ else
+ unset needinput # we don't *have* to have additional groups
+ fi
+done
+
+#: Get the new user's home dir :#
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ HME="$(get_input "Home directory [ ${defhome}/${LOGIN} ]")"
+ if [ -z "$HME" ]; then
+ HME="${defhome}/${LOGIN}"
+ fi
+ # Warn the user if the home dir already exists
+ if [ -d "$HME" ]; then
+ echo "- Warning: '$HME' already exists !"
+ getyn="$(get_input " Do you wish to change the home directory path ? (Y/n) ")"
+ if [ "$(echo $getyn | grep -i "n")" ]; then
+ unset needinput
+ # You're most likely going to only do this if you have the dir *mounted* for this user's $HOME
+ getyn="$(get_input " Do you want to chown $LOGIN.$( echo $GID | awk '{print $2}') $HME ? (y/N) ")"
+ if [ "$(echo $getyn | grep -i "y")" ]; then
+ CHOWNHOMEDIR=$HME # set this to the home directory
+ fi
+ fi
+ else
+ unset needinput
+ fi
+done
+HME="-d ${HME}"
+
+#: Get the new user's shell :#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ unset got_error
+ SHL="$(get_input "Shell [ ${defshell} ]")"
+ if [ -z "$SHL" ]; then
+ SHL="${defshell}"
+ fi
+ # Warn the user if the shell doesn't exist in /etc/shells or as a file
+ if [ -z "$(grep "^${SHL}$" $sfile)" ]; then
+ echo "- Warning: ${SHL} is not in ${sfile} (potential problem using FTP)"
+ got_error=yes
+ fi
+ if [ ! -f "$SHL" ]; then
+ echo "- Warning: ${SHL} does not exist as a file"
+ got_error=yes
+ fi
+ if [ ! -z "$got_error" ]; then
+ getyn="$(get_input " Do you wish to change the shell ? (Y/n) ")"
+ if [ "$(echo $getyn | grep -i "n")" ]; then
+ unset needinput
+ fi
+ else
+ unset needinput
+ fi
+done
+SHL="-s ${SHL}"
+
+#: Get the expiry date :#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ EXP="$(get_input "Expiry date (YYYY-MM-DD) []:")"
+ if [ ! -z "$EXP" ]; then
+ # Check to see whether the expiry date is in the valid format
+ if [ -z "$(echo "$EXP" | grep "^[[:digit:]]\{4\}[-]\?[[:digit:]]\{2\}[-]\?[[:digit:]]\{2\}$")" ]; then
+ echo "- That is not a valid expiration date"
+ else
+ unset needinput
+ EXP="-e ${EXP}"
+ fi
+ else
+ unset needinput
+ fi
+done
+
+# Display the info about the new impending account
+echo
+echo "New account will be created as follows:"
+echo
+echo "---------------------------------------"
+display "Login name.......: " "$LOGIN"
+display "UID..............: " "$_UID" "[ Next available ]"
+display "Initial group....: " "$GID"
+display "Additional groups: " "$AGID" "[ None ]"
+display "Home directory...: " "$HME"
+display "Shell............: " "$SHL"
+display "Expiry date......: " "$EXP" "[ Never ]"
+echo
+
+echo "This is it... if you want to bail out, hit Control-C. Otherwise, press"
+echo "ENTER to go ahead and make the account."
+read junk
+
+echo
+echo "Creating new account..."
+echo
+echo
+
+# Add the account to the system
+CMD="$useradd "$HME" -m "$EXP" "$U_ID" "$GID" "$AGID" "$SHL" "$LOGIN""
+$CMD
+
+if [ $? -gt 0 ]; then
+ echo "- Error running useradd command -- account not created!"
+ echo "(cmd: $CMD)"
+ exit 1
+fi
+
+# chown the home dir ? We can only do this once the useradd has
+# completed otherwise the user name doesn't exist.
+if [ ! -z "${CHOWNHOMEDIR}" ]; then
+ chown "$LOGIN"."$( echo $GID | awk '{print $2}')" "${CHOWNHOMEDIR}"
+fi
+
+# Set the finger information
+$chfn "$LOGIN"
+if [ $? -gt 0 ]; then
+ echo "- Warning: an error occurred while setting finger information"
+fi
+
+# Set a password
+$passwd "$LOGIN"
+if [ $? -gt 0 ]; then
+ echo "* WARNING: An error occured while setting the password for"
+ echo " this account. Please manually investigate this *"
+ exit 1
+fi
+
+echo
+echo
+echo "Account setup complete."
+exit 0
+
diff --git a/abs/core-testing/shadow/chage b/abs/core-testing/shadow/chage
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core-testing/shadow/chage
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core-testing/shadow/chsh b/abs/core-testing/shadow/chsh
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core-testing/shadow/chsh
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core-testing/shadow/login b/abs/core-testing/shadow/login
new file mode 100644
index 0000000..5d4ceeb
--- /dev/null
+++ b/abs/core-testing/shadow/login
@@ -0,0 +1,18 @@
+#%PAM-1.0
+auth required pam_securetty.so
+auth requisite pam_nologin.so
+auth required pam_unix.so nullok
+auth required pam_tally.so onerr=succeed file=/var/log/faillog
+# use this to lockout accounts for 10 minutes after 3 failed attempts
+#auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
+account required pam_access.so
+account required pam_time.so
+account required pam_unix.so
+#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
+#password required pam_unix.so md5 shadow use_authtok
+session required pam_unix.so
+session required pam_env.so
+session required pam_motd.so
+session required pam_limits.so
+session optional pam_mail.so dir=/var/spool/mail standard
+session optional pam_lastlog.so
diff --git a/abs/core-testing/shadow/login.defs b/abs/core-testing/shadow/login.defs
new file mode 100644
index 0000000..9b1fab0
--- /dev/null
+++ b/abs/core-testing/shadow/login.defs
@@ -0,0 +1,212 @@
+#
+# /etc/login.defs - Configuration control definitions for the login package.
+#
+# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.
+# If unspecified, some arbitrary (and possibly incorrect) value will
+# be assumed. All other items are optional - if not specified then
+# the described action or option will be inhibited.
+#
+# Comment lines (lines beginning with "#") and blank lines are ignored.
+#
+# Modified for Linux. --marekm
+
+#
+# Delay in seconds before being allowed another attempt after a login failure
+#
+FAIL_DELAY 3
+
+#
+# Enable display of unknown usernames when login failures are recorded.
+#
+LOG_UNKFAIL_ENAB no
+
+#
+# Enable logging of successful logins
+#
+LOG_OK_LOGINS no
+
+#
+# Enable "syslog" logging of su activity - in addition to sulog file logging.
+# SYSLOG_SG_ENAB does the same for newgrp and sg.
+#
+SYSLOG_SU_ENAB yes
+SYSLOG_SG_ENAB yes
+
+#
+# If defined, either full pathname of a file containing device names or
+# a ":" delimited list of device names. Root logins will be allowed only
+# upon these devices.
+#
+CONSOLE /etc/securetty
+#CONSOLE console:tty01:tty02:tty03:tty04
+
+#
+# If defined, all su activity is logged to this file.
+#
+#SULOG_FILE /var/log/sulog
+
+#
+# If defined, file which maps tty line to TERM environment parameter.
+# Each line of the file is in a format something like "vt100 tty01".
+#
+#TTYTYPE_FILE /etc/ttytype
+
+#
+# If defined, the command name to display when running "su -". For
+# example, if this is defined as "su" then a "ps" will display the
+# command is "-su". If not defined, then "ps" would display the
+# name of the shell actually being run, e.g. something like "-sh".
+#
+SU_NAME su
+
+#
+# *REQUIRED*
+# Directory where mailboxes reside, _or_ name of file, relative to the
+# home directory. If you _do_ define both, MAIL_DIR takes precedence.
+# QMAIL_DIR is for Qmail
+#
+#QMAIL_DIR Maildir
+MAIL_DIR /var/spool/mail
+
+#
+# If defined, file which inhibits all the usual chatter during the login
+# sequence. If a full pathname, then hushed mode will be enabled if the
+# user's name or shell are found in the file. If not a full pathname, then
+# hushed mode will be enabled if the file exists in the user's home directory.
+#
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE /etc/hushlogins
+
+#
+# *REQUIRED* The default PATH settings, for superuser and normal users.
+#
+# (they are minimal, add the rest in the shell startup files)
+ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ENV_PATH PATH=/bin:/usr/bin
+
+#
+# Terminal permissions
+#
+# TTYGROUP Login tty will be assigned this group ownership.
+# TTYPERM Login tty will be set to this permission.
+#
+# If you have a "write" program which is "setgid" to a special group
+# which owns the terminals, define TTYGROUP to the group number and
+# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
+# TTYPERM to either 622 or 600.
+#
+TTYGROUP tty
+TTYPERM 0600
+
+#
+# Login configuration initializations:
+#
+# ERASECHAR Terminal ERASE character ('\010' = backspace).
+# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
+# UMASK Default "umask" value.
+#
+# The ERASECHAR and KILLCHAR are used only on System V machines.
+# The ULIMIT is used only if the system supports it.
+# (now it works with setrlimit too; ulimit is in 512-byte units)
+#
+# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
+#
+ERASECHAR 0177
+KILLCHAR 025
+UMASK 077
+
+#
+# Password aging controls:
+#
+# PASS_MAX_DAYS Maximum number of days a password may be used.
+# PASS_MIN_DAYS Minimum number of days allowed between password changes.
+# PASS_WARN_AGE Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_WARN_AGE 7
+
+#
+# Min/max values for automatic uid selection in useradd
+#
+UID_MIN 1000
+UID_MAX 60000
+
+#
+# Min/max values for automatic gid selection in groupadd
+#
+GID_MIN 100
+GID_MAX 60000
+
+#
+# Max number of login retries if password is bad
+#
+LOGIN_RETRIES 5
+
+#
+# Max time in seconds for login
+#
+LOGIN_TIMEOUT 60
+
+#
+# Which fields may be changed by regular users using chfn - use
+# any combination of letters "frwh" (full name, room number, work
+# phone, home phone). If not defined, no changes are allowed.
+# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
+#
+CHFN_RESTRICT rwh
+
+#
+# List of groups to add to the user's supplementary group set
+# when logging in on the console (as determined by the CONSOLE
+# setting). Default is none.
+#
+# Use with caution - it is possible for users to gain permanent
+# access to these groups, even when not logged in on the console.
+# How to do it is left as an exercise for the reader...
+#
+#CONSOLE_GROUPS floppy:audio:cdrom
+
+#
+# Should login be allowed if we can't cd to the home directory?
+# Default in no.
+#
+DEFAULT_HOME yes
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD /usr/sbin/userdel_local
+
+#
+# When prompting for password without echo, getpass() can optionally
+# display a random number (in the range 1 to GETPASS_ASTERISKS) of '*'
+# characters for each character typed. This feature is designed to
+# confuse people looking over your shoulder when you enter a password :-).
+# Also, the new getpass() accepts both Backspace (8) and Delete (127)
+# keys to delete previous character (to cope with different terminal
+# types), Control-U to delete all characters, and beeps when there are
+# no more characters to delete, or too many characters entered.
+#
+# Setting GETPASS_ASTERISKS to 1 results in more traditional behaviour -
+# exactly one '*' displayed for each character typed.
+#
+# Setting GETPASS_ASTERISKS to 0 disables the '*' characters (Backspace,
+# Delete, Control-U and beep continue to work as described above).
+#
+# Setting GETPASS_ASTERISKS to -1 reverts to the traditional getpass()
+# without any new features. This is the default.
+#
+#GETPASS_ASTERISKS 1
+
+#
+# Enable setting of the umask group bits to be the same as owner bits
+# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+# the same as gid, and username is the same as the primary group name.
+#
+# This also enables userdel to remove user groups if no members exist.
+#
+USERGROUPS_ENAB yes
+
diff --git a/abs/core-testing/shadow/passwd b/abs/core-testing/shadow/passwd
new file mode 100644
index 0000000..1ffd1bd
--- /dev/null
+++ b/abs/core-testing/shadow/passwd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
+#password required pam_unix.so md5 shadow use_authtok
+password required pam_unix.so md5 shadow nullok
diff --git a/abs/core-testing/shadow/shadow b/abs/core-testing/shadow/shadow
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core-testing/shadow/shadow
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core-testing/shadow/shadow-4.0.18.2-useradd-fix-1.patch b/abs/core-testing/shadow/shadow-4.0.18.2-useradd-fix-1.patch
new file mode 100644
index 0000000..d35580d
--- /dev/null
+++ b/abs/core-testing/shadow/shadow-4.0.18.2-useradd-fix-1.patch
@@ -0,0 +1,26 @@
+# DIY Linux Patch
+Date: 2007-11-08
+Author: Greg Schafer <gschafer@zip.com.au>
+Origin: Modelled on the same upstream fix for usermod.
+Maker: Greg Schafer <gschafer@zip.com.au>
+Upstream Status: Submitted, applied.
+Description: Fix -g problems in useradd.
+
+diff -Naur shadow-4.0.18.2.orig/src/useradd.c shadow-4.0.18.2/src/useradd.c
+--- shadow-4.0.18.2.orig/src/useradd.c 2007-10-07 14:36:51.000000000 +0000
++++ shadow-4.0.18.2/src/useradd.c 2007-11-08 06:33:32.433004367 +0000
+@@ -204,12 +204,8 @@
+ char *errptr;
+
+ gid = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || gid < 0) {
+- fprintf (stderr,
+- _("%s: invalid numeric argument '%s'\n"), Prog,
+- grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && gid >= 0)
++ return getgrgid (gid);
+ return getgrnam (grname);
+ }
+
diff --git a/abs/core-testing/shadow/shadow-UID_GID.patch b/abs/core-testing/shadow/shadow-UID_GID.patch
new file mode 100644
index 0000000..759b73e
--- /dev/null
+++ b/abs/core-testing/shadow/shadow-UID_GID.patch
@@ -0,0 +1,34 @@
+--- shadow-4.0.18.1.orig/src/useradd.c 2006-08-25 11:57:00.202525241 +0200
++++ shadow-4.0.18.1/src/useradd.c 2006-08-25 11:57:26.106735752 +0200
+@@ -206,11 +206,8 @@
+ char *errptr;
+
+ gid = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || gid < 0) {
+- fprintf (stderr,
+- _("%s: invalid numeric argument '%s'\n"), Prog, grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && gid >= 0)
++ return getgrgid (gid);
+ return getgrnam (grname);
+ }
+
+Index: shadow-4.0.18.1/src/usermod.c
+===================================================================
+--- shadow-4.0.18.1.orig/src/usermod.c 2006-08-25 11:57:18.938677504 +0200
++++ shadow-4.0.18.1/src/usermod.c 2006-08-25 11:57:26.114735817 +0200
+@@ -167,11 +167,8 @@
+ char *errptr;
+
+ val = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || val < 0) {
+- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+- grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && val >= 0)
++ return getgrgid (val);
+ return getgrnam (grname);
+ }
+ \ No newline at end of file
diff --git a/abs/core-testing/shadow/shadow.cron.daily b/abs/core-testing/shadow/shadow.cron.daily
new file mode 100755
index 0000000..1931a79
--- /dev/null
+++ b/abs/core-testing/shadow/shadow.cron.daily
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Verify integrity of password and group files
+/usr/sbin/pwck -r
+/usr/sbin/grpck -r
+
diff --git a/abs/core-testing/shadow/shadow.install b/abs/core-testing/shadow/shadow.install
new file mode 100644
index 0000000..881a67b
--- /dev/null
+++ b/abs/core-testing/shadow/shadow.install
@@ -0,0 +1,11 @@
+post_upgrade() {
+ # fix gshadow
+ if [ "$(grpck -r)" ]; then
+ echo "Fixing gshadow file ..."
+ while :; do echo "y"; done | grpck
+ fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/shadow/useradd b/abs/core-testing/shadow/useradd
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core-testing/shadow/useradd
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core-testing/shadow/useradd-default.patch b/abs/core-testing/shadow/useradd-default.patch
new file mode 100644
index 0000000..9b5a08e
--- /dev/null
+++ b/abs/core-testing/shadow/useradd-default.patch
@@ -0,0 +1,14 @@
+--- shadow-4.0.18.1/etc/useradd 2003-05-07 15:04:53.000000000 +0100
++++ shadow-4.0.18.1/etc/useradd.default 2007-11-27 22:06:56.000000000 +0000
+@@ -1,8 +1,8 @@
+ # useradd defaults file
+-GROUP=1000
+-HOME=/home/users
++# Modified for Arch Linux
++GROUP=100
++HOME=/home
+ INACTIVE=-1
+ EXPIRE=
+ SHELL=/bin/bash
+ SKEL=/etc/skel
+-CREATE_MAIL_SPOOL=yes
diff --git a/abs/core-testing/shadow/xstrdup.patch b/abs/core-testing/shadow/xstrdup.patch
new file mode 100644
index 0000000..90d0dd1
--- /dev/null
+++ b/abs/core-testing/shadow/xstrdup.patch
@@ -0,0 +1,9 @@
+--- shadow-4.0.18.2/libmisc/xmalloc.c 2007-10-07 12:47:22.000000000 +0100
++++ shadow-4.0.18.2/libmisc/xmalloc.c.new 2007-11-27 22:43:05.000000000 +0000
+@@ -27,5 +27,6 @@
+
+ char *xstrdup (const char *str)
+ {
++ if(str == NULL) return NULL;
+ return strcpy (xmalloc (strlen (str) + 1), str);
+ }
diff --git a/abs/core-testing/smbclient/PKGBUILD b/abs/core-testing/smbclient/PKGBUILD
new file mode 100644
index 0000000..b7eb349
--- /dev/null
+++ b/abs/core-testing/smbclient/PKGBUILD
@@ -0,0 +1,58 @@
+# $Id: PKGBUILD 3859 2008-07-01 17:10:34Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=smbclient
+pkgver=3.0.31
+# 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.0.31
+pkgrel=2
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+arch=(i686 x86_64)
+url="http://www.samba.org"
+license=('GPL')
+options=(!makeflags)
+depends=('popt' 'libldap' 'libcap' 'heimdal>=1.2-1' 'db>=4.7')
+source=(http://us1.samba.org/samba/ftp/samba-${_realver}.tar.gz)
+md5sums=('165abaf4522c70031d9a76fbb638ca06')
+
+build() {
+ cd ${startdir}/src/samba-${_realver}/source
+
+ ./configure --prefix=/usr --with-smbmount --with-fhs --with-pam \
+ --with-datadir=/usr/share --with-configdir=/etc/samba \
+ --with-lockdir=/var/run/samba --with-ads --with-acl-support \
+ --localstatedir=/var
+ make proto bin/smbclient libsmbclient \
+ bin/rpcclient bin/smbspool bin/smbtree \
+ bin/smbcacls bin/smbcquotas bin/smbmount bin/smbmnt bin/smbget \
+ bin/smbumount bin/net bin/nmblookup || return 1
+ mkdir -p ${startdir}/pkg/usr/bin ${startdir}/pkg/sbin
+ install -m755 bin/* ${startdir}/pkg/usr/bin/
+ install -m755 script/smbtar ${startdir}/pkg/usr/bin/
+ ln -sf /usr/bin/smbmount ${startdir}/pkg/sbin/mount.smbfs
+ ln -sf /usr/bin/smbumount ${startdir}/pkg/sbin/umount.smbfs
+ mkdir -p ${startdir}/pkg/usr/lib/cups/backend
+ ln -sf /usr/bin/smbspool ${startdir}/pkg/usr/lib/cups/backend/smb
+
+ mkdir -p ${startdir}/pkg/usr/lib/samba
+ mv ${startdir}/pkg/usr/bin/libsmbclient.* ${startdir}/pkg/usr/lib/samba/
+ ln -sf samba/libsmbclient.so ${startdir}/pkg/usr/lib/libsmbclient.so
+ ln -sf samba/libsmbclient.so ${startdir}/pkg/usr/lib/libsmbclient.so.0
+ mkdir -p ${startdir}/pkg/usr/include
+ install -m644 include/libsmbclient.h ${startdir}/pkg/usr/include/
+
+ gcc -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -o ${startdir}/pkg/sbin/mount.cifs client/mount.cifs.c
+ gcc -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -o ${startdir}/pkg/sbin/umount.cifs client/umount.cifs.c
+
+ mkdir -p ${startdir}/pkg/usr/share/man/man{1,7,8}
+ for man in smbmnt smbmount smbspool \
+ smbumount umount.cifs mount.cifs net; do
+ install -m644 ../docs/manpages/${man}.8 ${startdir}/pkg/usr/share/man/man8/
+ done
+ for man in rpcclient smbcacls smbclient smbcquotas smbget \
+ smbtree smbtar nmblookup; do
+ install -m644 ../docs/manpages/${man}.1 ${startdir}/pkg/usr/share/man/man1/
+ done
+ install -m644 ../docs/manpages/libsmbclient.7 ${startdir}/pkg/usr/share/man/man7/
+}
diff --git a/abs/core-testing/smbclient/heimdal.patch b/abs/core-testing/smbclient/heimdal.patch
new file mode 100644
index 0000000..d116d3e
--- /dev/null
+++ b/abs/core-testing/smbclient/heimdal.patch
@@ -0,0 +1,33 @@
+Submitted By: Randy McMurchy <randy_at_linuxfromscratch_dot_org>
+Date: 2005-09-21
+Initial Package Version: 3.0.20
+Upstream Status: Not submitted (it is not an upstream Samba issue)
+Origin: Randy McMurchy
+Description: Fixes an issue if you have Heimdal installed as
+ Heimdal uses reserved C++ words and the Samba headers
+ now look for these conflicts. This patch comments out
+ the check for C++ reserved words. Heimdal is aware of
+ the issue
+
+$LastChangedBy: randy $
+$Date: 2005/11/17 12:32:28 $
+
+
+--- samba-3.0.20-orig/source/include/includes.h 2005-07-28 13:19:49.000000000 +0000
++++ samba-3.0.20/source/include/includes.h 2005-09-04 13:45:01.000000000 +0000
+@@ -25,6 +25,7 @@
+ #include "config.h"
+ #endif
+
++/*
+ #ifndef __cplusplus
+ #define class #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #define private #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+@@ -36,6 +37,7 @@
+ #define delete #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #define friend #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #endif
++*/
+
+ #include "local.h"
+
diff --git a/abs/core-testing/squashfs-tools/PKGBUILD b/abs/core-testing/squashfs-tools/PKGBUILD
new file mode 100644
index 0000000..dd17001
--- /dev/null
+++ b/abs/core-testing/squashfs-tools/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 3162 2008-06-20 23:18:11Z simo $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Original TU: Jeff Mickey <j@codemac.net>
+# Contributor: ciccio.a
+
+pkgname=squashfs-tools
+pkgver=3.3
+_realver=3.3
+pkgrel=1
+pkgdesc="Tools for squashfs, a highly compressed read-only filesystem for Linux."
+url="http://squashfs.sourceforge.net"
+license="GPL"
+arch=('i686' 'x86_64')
+depends=('zlib' 'glibc')
+source=(http://easynews.dl.sourceforge.net/sourceforge/squashfs/squashfs$_realver.tar.gz)
+md5sums=('62d3ff7c067a5aa82f57711b3a4ab86a')
+
+build()
+{
+ cd $startdir/src/squashfs$_realver/$pkgname
+ make || return 1
+ mkdir -p $startdir/pkg/sbin
+ cp -a mksquashfs unsquashfs $startdir/pkg/sbin
+}
diff --git a/abs/core-testing/sudo/PKGBUILD b/abs/core-testing/sudo/PKGBUILD
new file mode 100644
index 0000000..9c1f93d
--- /dev/null
+++ b/abs/core-testing/sudo/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 4889 2008-07-13 03:16:13Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=sudo
+pkgver=1.6.9p17
+pkgrel=1
+pkgdesc="Give certain users the ability to run some commands as root"
+arch=(i686 x86_64)
+url="http://www.sudo.ws/sudo/"
+# 2 separate licenses apply, custom and ISC, each covering part of the software
+license=('custom' 'ISC')
+depends=('glibc' 'pam')
+backup=('etc/sudoers' 'etc/pam.d/sudo')
+source=(ftp://ftp.sudo.ws/pub/sudo/$pkgname-$pkgver.tar.gz sudo.pam)
+md5sums=('b0d01b0c3d55076a47f06f70811be083' '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
+options=('!libtool' '!makeflags')
+md5sums=('60daf18f28e2c1eb7641c4408e244110'
+ '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver || return 1
+
+ ./configure --prefix=/usr --with-pam --libexecdir=/usr/lib \
+ --with-env-editor --with-all-insults --with-logfac=auth || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 $startdir/src/sudo.pam $startdir/pkg/etc/pam.d/sudo \
+ || return 1
+
+ #install the license
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/sudo/LICENSE \
+ || return 1
+}
diff --git a/abs/core-testing/sudo/sudo.pam b/abs/core-testing/sudo/sudo.pam
new file mode 100644
index 0000000..4e586cd
--- /dev/null
+++ b/abs/core-testing/sudo/sudo.pam
@@ -0,0 +1,3 @@
+#%PAM-1.0
+auth required pam_unix.so
+auth required pam_nologin.so
diff --git a/abs/core-testing/sysfsutils/PKGBUILD b/abs/core-testing/sysfsutils/PKGBUILD
new file mode 100644
index 0000000..7d4861d
--- /dev/null
+++ b/abs/core-testing/sysfsutils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=sysfsutils
+pkgver=2.1.0
+pkgrel=13
+pkgdesc="System Utilities Based on Sysfs"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://linux-diag.sourceforge.net/Sysfsutils.html"
+groups=('base')
+depends=('glibc')
+source=(http://downloads.sourceforge.net/sourceforge/linux-diag/$pkgname-$pkgver.tar.gz)
+md5sums=('14e7dcd0436d2f49aa403f67e1ef7ddc')
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg/ install
+
+ cd "$startdir"/pkg
+ mkdir -v lib
+ mv -v usr/lib/libsysfs.so.2* lib/
+ ln -svf ../../lib/libsysfs.so.2 usr/lib/libsysfs.so
+
+ #libtoolslay
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
+
diff --git a/abs/core-testing/syslinux/PKGBUILD b/abs/core-testing/syslinux/PKGBUILD
new file mode 100644
index 0000000..406f72d
--- /dev/null
+++ b/abs/core-testing/syslinux/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: lowercase
+# Maintainer: Dale Blount <dale@archlinux.org>
+pkgname=syslinux
+pkgver=3.60
+pkgrel=1
+arch=('i686' 'x86_64')
+pkgdesc="a boot loader for the Linux operating system which operates off an MS-DOS/Windows FAT filesystem."
+url="http://syslinux.org"
+license=(GPL)
+depends=('mtools' 'glibc')
+makedepends=(nasm perl)
+conflicts=()
+replaces=()
+backup=()
+install=
+source=(http://www.kernel.org/pub/linux/utils/boot/syslinux/$pkgname-$pkgver.tar.bz2)
+md5sums=('96e11c6baa87a937b0726b07d687cb7b')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ make SBINDIR=$startdir/pkg/usr/sbin BINDIR=$startdir/pkg/usr/bin LIBDIR=$startdir/pkg/usr/lib INCDIR=$startdir/pkg/usr/include MANDIR=$startdir/pkg/usr/share/man install
+ install -m755 mkdiskimage $startdir/pkg/usr/bin || return 1
+}
diff --git a/abs/core-testing/syslog-ng/PKGBUILD b/abs/core-testing/syslog-ng/PKGBUILD
new file mode 100644
index 0000000..3e5b473
--- /dev/null
+++ b/abs/core-testing/syslog-ng/PKGBUILD
@@ -0,0 +1,31 @@
+# $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
+pkgdesc="Next-generation syslogd with advanced networking and filtering capabilities"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+url="http://www.balabit.com/network-security/syslog-ng/"
+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 \
+ syslog-ng.conf syslog-ng.logrotate syslog-ng)
+md5sums=('2d4232f7167c2b4f48794e4f8f80e863' 'ee95af3a4f969f3759e477289305c8c6'\
+ '9714c7479119922b55a7992677ebecb5' '9bd98250cfa49e13fa3fa731b6040549')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var/lib/syslog-ng --enable-tcp-wrapper \
+ --disable-spoof-source
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -d $startdir/pkg/var/lib/syslog-ng
+ install -D -m644 ../syslog-ng.conf $startdir/pkg/etc/syslog-ng.conf
+ install -D -m644 ../syslog-ng.logrotate $startdir/pkg/etc/logrotate.d/syslog-ng
+ install -D -m755 ../syslog-ng $startdir/pkg/etc/rc.d/syslog-ng
+}
diff --git a/abs/core-testing/syslog-ng/syslog-ng b/abs/core-testing/syslog-ng/syslog-ng
new file mode 100755
index 0000000..f9d14c7
--- /dev/null
+++ b/abs/core-testing/syslog-ng/syslog-ng
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/syslog-ng`
+case "$1" in
+ start)
+ stat_busy "Starting Syslog-NG"
+ [ -z "$PID" ] && /usr/sbin/syslog-ng
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon syslog-ng
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Syslog-NG"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /var/run/syslog-ng.pid
+# Removing stale syslog-ng.persist file. It's new location, as of 2.0.6-1, is /var/lib/syslog-ng/
+ rm -f /var/syslog-ng.persist
+ rm_daemon syslog-ng
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core-testing/syslog-ng/syslog-ng.conf b/abs/core-testing/syslog-ng/syslog-ng.conf
new file mode 100644
index 0000000..d941b6a
--- /dev/null
+++ b/abs/core-testing/syslog-ng/syslog-ng.conf
@@ -0,0 +1,91 @@
+#
+# /etc/syslog-ng.conf
+#
+
+options {
+ sync (0);
+ time_reopen (10);
+ log_fifo_size (1000);
+ long_hostnames(off);
+ use_dns (no);
+ use_fqdn (no);
+ create_dirs (no);
+ keep_hostname (yes);
+ perm(0640);
+ group("log");
+};
+
+source src {
+ unix-stream("/dev/log");
+ internal();
+ file("/proc/kmsg");
+};
+
+destination authlog { file("/var/log/auth.log"); };
+destination syslog { file("/var/log/syslog.log"); };
+destination cron { file("/var/log/crond.log"); };
+destination daemon { file("/var/log/daemon.log"); };
+destination kernel { file("/var/log/kernel.log"); };
+destination lpr { file("/var/log/lpr.log"); };
+destination user { file("/var/log/user.log"); };
+destination uucp { file("/var/log/uucp.log"); };
+destination mail { file("/var/log/mail.log"); };
+destination news { file("/var/log/news.log"); };
+destination ppp { file("/var/log/ppp.log"); };
+destination debug { file("/var/log/debug.log"); };
+destination messages { file("/var/log/messages.log"); };
+destination errors { file("/var/log/errors.log"); };
+destination everything { file("/var/log/everything.log"); };
+destination iptables { file("/var/log/iptables.log"); };
+destination acpid { file("/var/log/acpid.log"); };
+destination console { usertty("root"); };
+
+# Log everything to vc12
+destination console_all { file("/dev/vc/12"); };
+
+filter f_auth { facility(auth); };
+filter f_authpriv { facility(auth, authpriv); };
+filter f_syslog { program(syslog-ng); };
+filter f_cron { facility(cron); };
+filter f_daemon { facility(daemon); };
+filter f_kernel { facility(kern) and not filter(f_iptables); };
+filter f_lpr { facility(lpr); };
+filter f_mail { facility(mail); };
+filter f_news { facility(news); };
+filter f_user { facility(user); };
+filter f_uucp { facility(cron); };
+filter f_news { facility(news); };
+filter f_ppp { facility(local2); };
+filter f_debug { not facility(auth, authpriv, news, mail); };
+filter f_messages { level(info..warn) and not facility(auth, authpriv, mail, news, cron) and not program(syslog-ng) and not filter(f_iptables); };
+filter f_everything { level(debug..emerg) and not facility(auth, authpriv); };
+filter f_emergency { level(emerg); };
+filter f_info { level(info); };
+filter f_notice { level(notice); };
+filter f_warn { level(warn); };
+filter f_crit { level(crit); };
+filter f_err { level(err); };
+filter f_iptables { match("IN=.*OUT="); };
+filter f_acpid { match("acpid"); };
+
+log { source(src); filter(f_acpid); destination(acpid); flags(final); };
+log { source(src); filter(f_authpriv); destination(authlog); };
+log { source(src); filter(f_syslog); destination(syslog); };
+log { source(src); filter(f_cron); destination(cron); };
+log { source(src); filter(f_daemon); destination(daemon); };
+log { source(src); filter(f_kernel); destination(kernel); };
+log { source(src); filter(f_lpr); destination(lpr); };
+log { source(src); filter(f_mail); destination(mail); };
+log { source(src); filter(f_news); destination(news); };
+log { source(src); filter(f_ppp); destination(ppp); };
+log { source(src); filter(f_user); destination(user); };
+log { source(src); filter(f_uucp); destination(uucp); };
+#log { source(src); filter(f_debug); destination(debug); };
+log { source(src); filter(f_messages); destination(messages); };
+log { source(src); filter(f_err); destination(errors); };
+log { source(src); filter(f_emergency); destination(console); };
+log { source(src); filter(f_everything); destination(everything); };
+log { source(src); filter(f_iptables); destination(iptables); };
+
+# Log everything to vc12
+#log { source(src); destination(console_all); };
diff --git a/abs/core-testing/syslog-ng/syslog-ng.logrotate b/abs/core-testing/syslog-ng/syslog-ng.logrotate
new file mode 100644
index 0000000..75da1b0
--- /dev/null
+++ b/abs/core-testing/syslog-ng/syslog-ng.logrotate
@@ -0,0 +1,7 @@
+/var/log/messages.log /var/log/auth.log /var/log/mail.log /var/log/kernel.log /var/log/errors.log /var/log/daemon.log /var/log/user.log /var/log/iptables.log /var/log/everything.log /var/log/syslog.log /var/log/acpid.log {
+ missingok
+ sharedscripts
+ postrotate
+ /bin/kill -HUP `cat /var/run/syslog-ng.pid 2>/dev/null` 2> /dev/null || true
+ endscript
+}
diff --git a/abs/core-testing/sysvinit/PKGBUILD b/abs/core-testing/sysvinit/PKGBUILD
new file mode 100644
index 0000000..2a32da9
--- /dev/null
+++ b/abs/core-testing/sysvinit/PKGBUILD
@@ -0,0 +1,26 @@
+pkgname=sysvinit
+pkgver=2.86
+pkgrel=11
+pkgdesc="Linux System V Init"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('shadow' 'util-linux' 'coreutils' 'glibc' 'awk')
+source=(ftp://ftp.cistron.nl/pub/people/miquels/$pkgname/$pkgname-$pkgver.tar.gz halt-init.patch)
+md5sums=('7d5d61c026122ab791ac04c8a84db967')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ cp src/init.c src/init.c.backup
+ cp $startdir/src/halt-init.patch src/
+ patch -p0 < src/halt-init.patch
+ sed 's/\(.*\)\(Sending processes\)\(.*\)/\1\2 started by init\3/' \
+ src/init.c > tmp~
+ mv tmp~ src/init.c
+ mkdir -p $startdir/pkg/bin $startdir/pkg/sbin
+ mkdir -p $startdir/pkg/usr/bin
+ mkdir -p $startdir/pkg/usr/man/man5 $startdir/pkg/usr/man/man8
+ mkdir -p $startdir/pkg/usr/man/man1 $startdir/pkg/usr/include
+ make -C src || return 1
+ make -C src MANDIR=/usr/man ROOT=$startdir/pkg install
+}
diff --git a/abs/core-testing/sysvinit/halt-init.patch b/abs/core-testing/sysvinit/halt-init.patch
new file mode 100644
index 0000000..3c61e0f
--- /dev/null
+++ b/abs/core-testing/sysvinit/halt-init.patch
@@ -0,0 +1,17 @@
+--- src/halt.c.orig 2008-08-30 17:25:02.000000000 +0000
++++ src/halt.c 2008-08-30 18:10:29.000000000 +0000
+@@ -186,6 +186,14 @@
+ if (!strcmp(progname, "reboot")) do_reboot = 1;
+ if (!strcmp(progname, "poweroff")) do_poweroff = 1;
+
++ if (!strcmp(progname, "reboot.init")) do_reboot = 1;
++ if (!strcmp(progname, "poweroff.init")) do_poweroff = 1;
++
++ fprintf(stderr, "%d: do_reboot \n ", do_reboot);
++ fprintf(stderr, "%d: do_poweroff \n ", do_poweroff);
++ //fprintf(stderr, "%s: \n", progname);
++ //do_nothing = 1;
++
+ /*
+ * Get flags
+ */
diff --git a/abs/core-testing/taglib/PKGBUILD b/abs/core-testing/taglib/PKGBUILD
new file mode 100644
index 0000000..4b38645
--- /dev/null
+++ b/abs/core-testing/taglib/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=taglib
+pkgver=1.5
+pkgrel=1
+pkgdesc="library for reading and editing the meta-data of several popular audio formats."
+arch=('i686' 'x86_64')
+url="http://ktown.kde.org/~wheeler/taglib.html"
+license=('GPL2')
+depends=('zlib' 'gcc-libs')
+makedepends=('cmake' 'pkgconfig')
+# svn snapshot: svn co svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib
+source=(http://ktown.kde.org/~wheeler/files/src/taglib-$pkgver.tar.gz
+ #ftp://ftp.archlinux.org/other/kde/$pkgname-$pkgver.tar.bz2
+ #http://belnet.dl.sourceforge.net/sourceforge/soprano/soprano-1.97.1-beta4.tar.bz2
+ )
+options=(!libtool)
+
+build() {
+ # start building
+ cd $startdir/src/$pkgname-$pkgver
+
+ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
+ make VERBOSE=1 || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+}
+
+md5sums=('7b557dde7425c6deb7bbedd65b4f2717')
diff --git a/abs/core-testing/tar/PKGBUILD b/abs/core-testing/tar/PKGBUILD
new file mode 100644
index 0000000..a22d455
--- /dev/null
+++ b/abs/core-testing/tar/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1082 2008-04-29 16:11:13Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=tar
+pkgver=1.20
+pkgrel=11
+pkgdesc="Utility used to store, backup, and transport files"
+arch=('i686' 'x86_64')
+license=('GPL3')
+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
+ ./configure --prefix=/usr --libexecdir=/usr/lib/tar --bindir=/bin
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../tar.1 $startdir/pkg/usr/share/man/man1/tar.1
+}
diff --git a/abs/core-testing/tar/tar.1 b/abs/core-testing/tar/tar.1
new file mode 100644
index 0000000..f7de1ec
--- /dev/null
+++ b/abs/core-testing/tar/tar.1
@@ -0,0 +1,376 @@
+.\" @(#)tar.1 1.11.1 93/19/22 PJV;
+.TH TAR 1 "22 September 1993"
+.SH NAME
+tar \- The GNU version of the tar archiving utility
+.SH SYNOPSIS
+.B tar
+[
+.B \-
+]
+.B A --catenate --concatenate \||\| c --create \||\| d --diff --compare \||\| r --append \||\| t --list \||\| u --update \||\| x -extract --get
+[
+.B --atime-preserve
+]
+[
+.B -b, --block-size N
+]
+[
+.B -B, --read-full-blocks
+]
+[
+.B -C, --directory DIR
+]
+[
+.B --checkpoint
+]
+[
+.B -f, --file [HOSTNAME:]F
+]
+[
+.B --force-local
+]
+[
+.B -F, --info-script F --new-volume-script F
+]
+[
+.B -G, --incremental
+]
+[
+.B -g, --listed-incremental F
+]
+[
+.B -h, --dereference
+]
+[
+.B -i, --ignore-zeros
+]
+[
+.B -j, --bzip2
+]
+[
+.B --ignore-failed-read
+]
+[
+.B -k, --keep-old-files
+]
+[
+.B -K, --starting-file F
+]
+[
+.B -l, --one-file-system
+]
+[
+.B -L, --tape-length N
+]
+[
+.B -m, --modification-time
+]
+[
+.B -M, --multi-volume
+]
+[
+.B -N, --after-date DATE, --newer DATE
+]
+[
+.B -o, --old-archive, --portability
+]
+[
+.B -O, --to-stdout
+]
+[
+.B -p, --same-permissions, --preserve-permissions
+]
+[
+.B -P, --absolute-names
+]
+[
+.B --preserve
+]
+[
+.B -R, --record-number
+]
+[
+.B --remove-files
+]
+[
+.B -s, --same-order, --preserve-order
+]
+[
+.B --same-owner
+]
+[
+.B --numeric-owner
+]
+[
+.B -S, --sparse
+]
+[
+.B -T, --files-from F
+]
+[
+.B --null
+]
+[
+.B --totals
+]
+[
+.B -v, --verbose
+]
+[
+.B -V, --label NAME
+]
+[
+.B --version
+]
+[
+.B -w, --interactive, --confirmation
+]
+[
+.B -W, --verify
+]
+[
+.B --exclude=FILE
+]
+[
+.B -X, --exclude-from FILE
+]
+[
+.B -Z, --compress, --uncompress
+]
+[
+.B -z, --gzip, --ungzip
+]
+[
+.B --use-compress-program PROG
+]
+[
+.B --block-compress
+]
+[
+.B --rsh-command=CMD
+]
+[
+.B -[0-7][lmh]
+]
+.TP
+.I filename1 [ filename2, ... filenameN ]
+.TP
+.I directory1 [ directory2, ...directoryN ]
+.SH DESCRIPTION
+.LP
+This manual page documents the GNU version of
+.B tar
+, an archiving program designed to store and extract files from
+an archive file known as a
+.IR tarfile.
+A
+.IR tarfile
+may be made on a tape drive, however, it is also common
+to write a
+.IR tarfile
+to a normal file.
+The first argument to
+.B tar
+must be one of the options:
+.BR Acdrtux ,
+followed by any optional functions.
+The final arguments to
+.B tar
+are the names of the files or directories which should be archived. The use
+of a directory name always implies that the subdirectories below should be
+included in the archive.
+.SH EXAMPLES
+.TP
+.B tar -xvvf foo.tar
+extract foo.tar
+.TP
+.B tar -xvvzf foo.tar.gz
+extract gzipped foo.tar.gz
+.TP
+.B tar -cvvf foo.tar foo/
+tar contents of folder foo in foo.tar
+.SH "FUNCTION LETTERS"
+.TP
+.B One of the following options must be used:
+.TP
+.B -A, --catenate, --concatenate
+append tar files to an archive
+.TP
+.B -c, --create
+create a new archive
+.TP
+.B -d, --diff, --compare
+find differences between archive and file system
+.TP
+.B --delete
+delete from the archive (not for use on mag tapes!)
+.TP
+.B -r, --append
+append files to the end of an archive
+.TP
+.B -t, --list
+list the contents of an archive
+.TP
+.B -u, --update
+only append files that are newer than copy in archive
+.TP
+.B -x, --extract, --get
+extract files from an archive
+.SH "OTHER OPTIONS"
+.TP
+.B --atime-preserve
+don't change access times on dumped files
+.TP
+.B -b, --block-size N
+block size of Nx512 bytes (default N=20)
+.TP
+.B -B, --read-full-blocks
+reblock as we read (for reading 4.2BSD pipes)
+.TP
+.B -C, --directory DIR
+change to directory DIR
+.TP
+.B --checkpoint
+print directory names while reading the archive
+.TP
+.B -f, --file [HOSTNAME:]F
+use archive file or device F (default "-", meaning stdin/stdout)
+.TP
+.B --force-local
+archive file is local even if has a colon
+.TP
+.B -F, --info-script F --new-volume-script F
+run script at end of each tape (implies -M)
+.TP
+.B -G, --incremental
+create/list/extract old GNU-format incremental backup
+.TP
+.B -g, --listed-incremental F
+create/list/extract new GNU-format incremental backup
+.TP
+.B -h, --dereference
+don't dump symlinks; dump the files they point to
+.TP
+.B -i, --ignore-zeros
+ignore blocks of zeros in archive (normally mean EOF)
+.TP
+.B -j, --bzip2
+filter archive through bzip2, use to decompress .bz2 files
+.TP
+.B --ignore-failed-read
+don't exit with non-zero status on unreadable files
+.TP
+.B -k, --keep-old-files
+keep existing files; don't overwrite them from archive
+.TP
+.B -K, --starting-file F
+begin at file F in the archive
+.TP
+.B -l, --one-file-system
+stay in local file system when creating an archive
+.TP
+.B -L, --tape-length N
+change tapes after writing N*1024 bytes
+.TP
+.B -m, --modification-time
+don't extract file modified time
+.TP
+.B -M, --multi-volume
+create/list/extract multi-volume archive
+.TP
+.B -N, --after-date DATE, --newer DATE
+only store files newer than DATE
+.TP
+.B -o, --old-archive, --portability
+write a V7 format archive, rather than ANSI format
+.TP
+.B -O, --to-stdout
+extract files to standard output
+.TP
+.B -p, --same-permissions, --preserve-permissions
+extract all protection information
+.TP
+.B -P, --absolute-paths
+don't strip leading `/'s from file names
+.TP
+.B --preserve
+like -p -s
+.TP
+.B -R, --record-number
+show record number within archive with each message
+.TP
+.B --remove-files
+remove files after adding them to the archive
+.TP
+.B -s, --same-order, --preserve-order
+list of names to extract is sorted to match archive
+.TP
+.B --same-owner
+create extracted files with the same ownership
+.TP
+.B --numeric-owner
+always use numbers for user/group names
+.TP
+.B -S, --sparse
+handle sparse files efficiently
+.TP
+.B -T, --files-from F
+get names to extract or create from file F
+.TP
+.B --null
+-T reads null-terminated names, disable -C
+.TP
+.B --totals
+print total bytes written with --create
+.TP
+.B -v, --verbose
+verbosely list files processed
+.TP
+.B -V, --label NAME
+create archive with volume name NAME
+.TP
+.B --version
+print tar program version number
+.TP
+.B -w, --interactive, --confirmation
+ask for confirmation for every action
+.TP
+.B -W, --verify
+attempt to verify the archive after writing it
+.TP
+.B --exclude=FILE
+exclude file FILE
+.TP
+.B -X, --exclude-from FILE
+exclude files listed in FILE
+.TP
+.B -Z, --compress, --uncompress
+filter the archive through compress
+.TP
+.B -z, --gzip, --ungzip
+filter the archive through gzip
+.TP
+.B --use-compress-program PROG
+filter the archive through PROG (which must accept -d)
+.TP
+.B --block-compress
+block the output of compression program for tapes
+.TP
+.B --rsh-command=CMD
+Use remote COMMAND instead of `rsh'. This option exists so that
+people who use something other than the standard `rsh' (e.g., a
+Kerberized `rsh') can access a remote device.
+.TP
+.B -[0-7][lmh]
+specify drive and density
+.SH BUGS
+.LP
+The GNU folks, in general, abhor man pages, and create info documents instead.
+The maintainer of tar falls into this category. This man page is neither
+complete, nor current, and was included in the Debian Linux packaging of tar
+entirely to reduce the frequency with which the lack of a man page gets
+reported as a bug in our defect tracking system.
+
+If you really want to understand tar, then you should run info and read the
+tar info pages, or use the info mode in emacs.
+
diff --git a/abs/core-testing/tcl/ChangeLog b/abs/core-testing/tcl/ChangeLog
new file mode 100644
index 0000000..313bd98
--- /dev/null
+++ b/abs/core-testing/tcl/ChangeLog
@@ -0,0 +1,10 @@
+2008-08-16 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-1 :
+ new upstream release
+ FHS man directory
+
+2008-07-01 Allan McRae <allan@archlinux.org>
+
+ * 8.5.3-1 :
+ new upstream release.
diff --git a/abs/core-testing/tcl/PKGBUILD b/abs/core-testing/tcl/PKGBUILD
new file mode 100644
index 0000000..ec911bb
--- /dev/null
+++ b/abs/core-testing/tcl/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 8742 2008-08-16 05:01:49Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=tcl
+pkgver=8.5.4
+pkgrel=1
+pkgdesc="The Tcl scripting language"
+arch=('i686' 'x86_64')
+license=('custom')
+depends=(glibc)
+source=(http://downloads.sourceforge.net/sourceforge/tcl/tcl${pkgver}-src.tar.gz)
+url="http://tcl.sourceforge.net/"
+md5sums=('15032a6a43f3bfbe9223b95186849472')
+
+build() {
+ cd ${srcdir}/tcl${pkgver}/unix
+
+ if [ "$CARCH" = "x86_64" ]; then
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --enable-64bit
+ else
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --disable-64bit
+ fi
+
+ make || return 1
+ make INSTALL_ROOT=${pkgdir} install install-private-headers
+ ln -sf tclsh8.5 ${pkgdir}/usr/bin/tclsh
+ # install license
+ install -Dm644 ../license.terms ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+
+ # remove buildroot traces / fixes #3602
+ sed -i \
+ -e "s,^TCL_BUILD_LIB_SPEC='-L.*/unix,TCL_BUILD_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TCL_SRC_DIR='.*',TCL_SRC_DIR='/usr/include'," \
+ -e "s,^TCL_BUILD_STUB_LIB_SPEC='-L.*/unix,TCL_BUILD_STUB_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TCL_BUILD_STUB_LIB_PATH='.*/unix,TCL_BUILD_STUB_LIB_PATH='/usr/lib," \
+ -e "s,^TCL_LIB_FILE='libtcl8.5..TCL_DBGX..so',TCL_LIB_FILE=\"libtcl8.5\$\{TCL_DBGX\}.so\"," \
+ -e "s,^TCL_CC_SEARCH_FLAGS='\(.*\)',TCL_CC_SEARCH_FLAGS='\1:/usr/lib'," \
+ -e "s,^TCL_LD_SEARCH_FLAGS='\(.*\)',TCL_LD_SEARCH_FLAGS='\1:/usr/lib'," \
+ ${pkgdir}/usr/lib/tclConfig.sh
+}
diff --git a/abs/core-testing/tcp_wrappers/PKGBUILD b/abs/core-testing/tcp_wrappers/PKGBUILD
new file mode 100644
index 0000000..5612e23
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=tcp_wrappers
+pkgver=7.6
+pkgrel=17
+pkgdesc="Monitors and Controls incoming TCP connections"
+arch=(i686 x86_64)
+url="ftp://ftp.porcupine.org/pub/security/index.html"
+license=('custom')
+groups=('base')
+backup=(etc/hosts.allow etc/hosts.deny)
+depends=('bash' 'glibc')
+source=(ftp://ftp.porcupine.org/pub/security/${pkgname}_$pkgver.tar.gz \
+ hosts.allow hosts.deny try-from.8 safe_finger.8 gcc340.patch \
+ shared_lib_plus_plus-1.patch)
+md5sums=('e6fa25f71226d090f34de3f6b122fb5a' '32cfeeed797161034f62bb45f3167baa'\
+ 'a0ee30f6aeaca241c4d44f7c177eca6b' '4a8f40f9a69f0848df92b232072e8561'\
+ '1a6d7b11abb1fd69ace775d02a1c72cf' '19c3badd4fbee547eb9de61ed93691af'\
+ 'e39dc7e099b741b6d2b1799a56ab77af')
+
+build() {
+ cd $startdir/src/${pkgname}_$pkgver
+ patch -Np1 -i ../gcc340.patch || return 1
+ patch -Np1 -i ../shared_lib_plus_plus-1.patch || return 1
+ make REAL_DAEMON_DIR=/usr/sbin STYLE=-DSYS_ERRLIST_DEFINED linux || return 1
+ # dumb makefile
+ mkdir -p $startdir/pkg/usr/{include,lib,sbin}
+ mkdir -p $startdir/pkg/usr/share/man/man{3,5,8}
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../hosts.allow $startdir/pkg/etc/hosts.allow
+ install -D -m644 ../hosts.deny $startdir/pkg/etc/hosts.deny
+ # install license
+ mkdir -p $startdir/pkg/usr/share/licenses/$pkgname
+ install -m644 DISCLAIMER $startdir/pkg/usr/share/licenses/$pkgname/license.txt
+}
diff --git a/abs/core-testing/tcp_wrappers/gcc340.patch b/abs/core-testing/tcp_wrappers/gcc340.patch
new file mode 100644
index 0000000..d0a2750
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/gcc340.patch
@@ -0,0 +1,11 @@
+diff -Naur tcp_wrappers_7.6-orig/scaffold.c tcp_wrappers_7.6/scaffold.c
+--- tcp_wrappers_7.6-orig/scaffold.c 1997-03-21 10:27:24.000000000 -0800
++++ tcp_wrappers_7.6/scaffold.c 2004-05-07 19:44:50.000000000 -0700
+@@ -25,7 +25,6 @@
+ #define INADDR_NONE (-1) /* XXX should be 0xffffffff */
+ #endif
+
+-extern char *malloc();
+
+ /* Application-specific. */
+
diff --git a/abs/core-testing/tcp_wrappers/hosts.allow b/abs/core-testing/tcp_wrappers/hosts.allow
new file mode 100644
index 0000000..e5c035d
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/hosts.allow
@@ -0,0 +1,5 @@
+#
+# /etc/hosts.allow
+#
+
+# End of file
diff --git a/abs/core-testing/tcp_wrappers/hosts.deny b/abs/core-testing/tcp_wrappers/hosts.deny
new file mode 100644
index 0000000..efcce18
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/hosts.deny
@@ -0,0 +1,7 @@
+#
+# /etc/hosts.deny
+#
+
+ALL: ALL: DENY
+
+# End of file
diff --git a/abs/core-testing/tcp_wrappers/safe_finger.8 b/abs/core-testing/tcp_wrappers/safe_finger.8
new file mode 100644
index 0000000..875616b
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/safe_finger.8
@@ -0,0 +1,34 @@
+.TH SAFE_FINGER 8 "21th June 1997" Linux "Linux Programmer's Manual"
+.SH NAME
+safe_finger \- finger client wrapper that protects against nasty stuff
+from finger servers
+.SH SYNOPSIS
+.B safe_finger [finger_options]
+.SH DESCRIPTION
+The
+.B safe_finger
+command protects against nasty stuff from finger servers. Use this
+program for automatic reverse finger probes from the
+.B tcp_wrapper
+.B (tcpd)
+, not the raw finger command. The
+.B safe_finger
+command makes sure that the finger client is not run with root
+privileges. It also runs the finger client with a defined PATH
+environment.
+.B safe_finger
+will also protect you from problems caused by the output of some
+finger servers. The problem: some programs may react to stuff in
+the first column. Other programs may get upset by thrash anywhere
+on a line. File systems may fill up as the finger server keeps
+sending data. Text editors may bomb out on extremely long lines.
+The finger server may take forever because it is somehow wedged.
+.B safe_finger
+takes care of all this badness.
+.SH SEE ALSO
+.BR hosts_access (5),
+.BR hosts_options (5),
+.BR tcpd (8)
+.SH AUTHOR
+Wietse Venema, Eindhoven University of Technology, The Netherlands.
+
diff --git a/abs/core-testing/tcp_wrappers/shared_lib_plus_plus-1.patch b/abs/core-testing/tcp_wrappers/shared_lib_plus_plus-1.patch
new file mode 100644
index 0000000..89b0b0c
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/shared_lib_plus_plus-1.patch
@@ -0,0 +1,1025 @@
+diff -Naur tcp_wrappers_7.6/Makefile tcp_wrappers_7.6.gimli/Makefile
+--- tcp_wrappers_7.6/Makefile 1997-03-21 12:27:21.000000000 -0600
++++ tcp_wrappers_7.6.gimli/Makefile 2002-07-15 16:07:21.000000000 -0500
+@@ -1,5 +1,10 @@
++GLIBC=$(shell grep -s -c __GLIBC__ /usr/include/features.h)
++
+ # @(#) Makefile 1.23 97/03/21 19:27:20
+
++# unset the HOSTNAME environment variable
++HOSTNAME =
++
+ what:
+ @echo
+ @echo "Usage: edit the REAL_DAEMON_DIR definition in the Makefile then:"
+@@ -19,7 +24,7 @@
+ @echo " generic (most bsd-ish systems with sys5 compatibility)"
+ @echo " 386bsd aix alpha apollo bsdos convex-ultranet dell-gcc dgux dgux543"
+ @echo " dynix epix esix freebsd hpux irix4 irix5 irix6 isc iunix"
+- @echo " linux machten mips(untested) ncrsvr4 netbsd next osf power_unix_211"
++ @echo " linux gnu machten mips(untested) ncrsvr4 netbsd next osf power_unix_211"
+ @echo " ptx-2.x ptx-generic pyramid sco sco-nis sco-od2 sco-os5 sinix sunos4"
+ @echo " sunos40 sunos5 sysv4 tandem ultrix unicos7 unicos8 unixware1 unixware2"
+ @echo " uts215 uxp"
+@@ -43,8 +48,8 @@
+ # Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx
+ #REAL_DAEMON_DIR=/usr/etc
+ #
+-# SysV.4 Solaris 2.x OSF AIX
+-#REAL_DAEMON_DIR=/usr/sbin
++# SysV.4 Solaris 2.x OSF AIX Linux
++REAL_DAEMON_DIR=/usr/sbin
+ #
+ # BSD 4.4
+ #REAL_DAEMON_DIR=/usr/libexec
+@@ -141,10 +146,21 @@
+ LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= NETGROUP= TLI= \
+ EXTRA_CFLAGS=-DSYS_ERRLIST_DEFINED VSYSLOG= all
+
++ifneq ($(GLIBC),0)
++MYLIB=-lnsl
++endif
++
+ linux:
+ @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
+- LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
+- NETGROUP= TLI= EXTRA_CFLAGS="-DBROKEN_SO_LINGER" all
++ LIBS=$(MYLIB) RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
++ NETGROUP=-DNETGROUP TLI= VSYSLOG= BUGS= all \
++ EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DHAVE_WEAKSYMS -D_REENTRANT"
++
++gnu:
++ @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
++ LIBS=$(MYLIB) RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
++ NETGROUP=-DNETGROUP TLI= VSYSLOG= BUGS= all \
++ EXTRA_CFLAGS="-DHAVE_STRERROR -DHAVE_WEAKSYMS -D_REENTRANT"
+
+ # This is good for many SYSV+BSD hybrids with NIS, probably also for HP-UX 7.x.
+ hpux hpux8 hpux9 hpux10:
+@@ -391,7 +407,7 @@
+ # the ones provided with this source distribution. The environ.c module
+ # implements setenv(), getenv(), and putenv().
+
+-AUX_OBJ= setenv.o
++#AUX_OBJ= setenv.o
+ #AUX_OBJ= environ.o
+ #AUX_OBJ= environ.o strcasecmp.o
+
+@@ -454,7 +470,8 @@
+ # host name aliases. Compile with -DSOLARIS_24_GETHOSTBYNAME_BUG to work
+ # around this. The workaround does no harm on other Solaris versions.
+
+-BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK
++BUGS =
++#BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK
+ #BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DINET_ADDR_BUG
+ #BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DSOLARIS_24_GETHOSTBYNAME_BUG
+
+@@ -464,7 +481,7 @@
+ # If your system supports NIS or YP-style netgroups, enable the following
+ # macro definition. Netgroups are used only for host access control.
+ #
+-#NETGROUP= -DNETGROUP
++NETGROUP= -DNETGROUP
+
+ ###############################################################
+ # System dependencies: whether or not your system has vsyslog()
+@@ -491,7 +508,7 @@
+ # Uncomment the next definition to turn on the language extensions
+ # (examples: allow, deny, banners, twist and spawn).
+ #
+-#STYLE = -DPROCESS_OPTIONS # Enable language extensions.
++STYLE = -DPROCESS_OPTIONS # Enable language extensions.
+
+ ################################################################
+ # Optional: Changing the default disposition of logfile records
+@@ -514,7 +531,7 @@
+ #
+ # The LOG_XXX names below are taken from the /usr/include/syslog.h file.
+
+-FACILITY= LOG_MAIL # LOG_MAIL is what most sendmail daemons use
++FACILITY= LOG_DAEMON # LOG_MAIL is what most sendmail daemons use
+
+ # The syslog priority at which successful connections are logged.
+
+@@ -610,7 +627,7 @@
+ # Paranoid mode implies hostname lookup. In order to disable hostname
+ # lookups altogether, see the next section.
+
+-PARANOID= -DPARANOID
++#PARANOID= -DPARANOID
+
+ ########################################
+ # Optional: turning off hostname lookups
+@@ -623,7 +640,7 @@
+ # In order to perform selective hostname lookups, disable paranoid
+ # mode (see previous section) and comment out the following definition.
+
+-HOSTNAME= -DALWAYS_HOSTNAME
++#HOSTNAME= -DALWAYS_HOSTNAME
+
+ #############################################
+ # Optional: Turning on host ADDRESS checking
+@@ -649,28 +666,46 @@
+ # source-routed traffic in the kernel. Examples: 4.4BSD derivatives,
+ # Solaris 2.x, and Linux. See your system documentation for details.
+ #
+-# KILL_OPT= -DKILL_IP_OPTIONS
++KILL_OPT= -DKILL_IP_OPTIONS
+
+ ## End configuration options
+ ############################
+
+ # Protection against weird shells or weird make programs.
+
++CC = gcc
+ SHELL = /bin/sh
+-.c.o:; $(CC) $(CFLAGS) -c $*.c
++.c.o:; $(CC) $(CFLAGS) -o $*.o -c $*.c
++
++SOMAJOR = 0
++SOMINOR = 7.6
++
++LIB = libwrap.a
++SHLIB = shared/libwrap.so.$(SOMAJOR).$(SOMINOR)
++SHLIBSOMAJ= shared/libwrap.so.$(SOMAJOR)
++SHLIBSO = shared/libwrap.so
++SHLIBFLAGS = -Lshared -lwrap
+
+-CFLAGS = -O -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \
++shared/%.o: %.c
++ $(CC) $(CFLAGS) $(SHCFLAGS) -c $< -o $@
++
++CFLAGS = -O2 -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \
+ $(BUGS) $(SYSTYPE) $(AUTH) $(UMASK) \
+ -DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" $(STYLE) $(KILL_OPT) \
+ -DSEVERITY=$(SEVERITY) -DRFC931_TIMEOUT=$(RFC931_TIMEOUT) \
+ $(UCHAR) $(TABLES) $(STRINGS) $(TLI) $(EXTRA_CFLAGS) $(DOT) \
+ $(VSYSLOG) $(HOSTNAME)
+
++SHLINKFLAGS = -shared -Xlinker -soname -Xlinker libwrap.so.$(SOMAJOR) -lc $(LIBS)
++SHCFLAGS = -fPIC -shared -D_REENTRANT
++
+ LIB_OBJ= hosts_access.o options.o shell_cmd.o rfc931.o eval.o \
+ hosts_ctl.o refuse.o percent_x.o clean_exit.o $(AUX_OBJ) \
+ $(FROM_OBJ) fix_options.o socket.o tli.o workarounds.o \
+ update.o misc.o diag.o percent_m.o myvsyslog.o
+
++SHLIB_OBJ= $(addprefix shared/, $(LIB_OBJ));
++
+ FROM_OBJ= fromhost.o
+
+ KIT = README miscd.c tcpd.c fromhost.c hosts_access.c shell_cmd.c \
+@@ -684,46 +719,80 @@
+ refuse.c tcpdchk.8 setenv.c inetcf.c inetcf.h scaffold.c \
+ scaffold.h tcpdmatch.8 README.NIS
+
+-LIB = libwrap.a
+-
+-all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk
++all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk $(LIB)
+
+ # Invalidate all object files when the compiler options (CFLAGS) have changed.
+
+ config-check:
+ @set +e; test -n "$(REAL_DAEMON_DIR)" || { make; exit 1; }
+- @set +e; echo $(CFLAGS) >/tmp/cflags.$$$$ ; \
+- if cmp cflags /tmp/cflags.$$$$ ; \
+- then rm /tmp/cflags.$$$$ ; \
+- else mv /tmp/cflags.$$$$ cflags ; \
++ @set +e; echo $(CFLAGS) >cflags.new ; \
++ if cmp cflags cflags.new ; \
++ then rm cflags.new ; \
++ else mv cflags.new cflags ; \
+ fi >/dev/null 2>/dev/null
++ @if [ ! -d shared ]; then mkdir shared; fi
+
+ $(LIB): $(LIB_OBJ)
+ rm -f $(LIB)
+ $(AR) $(ARFLAGS) $(LIB) $(LIB_OBJ)
+ -$(RANLIB) $(LIB)
+
+-tcpd: tcpd.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ tcpd.o $(LIB) $(LIBS)
++$(SHLIB): $(SHLIB_OBJ)
++ rm -f $(SHLIB)
++ $(CC) -o $(SHLIB) $(SHLINKFLAGS) $(SHLIB_OBJ)
++ ln -s $(notdir $(SHLIB)) $(SHLIBSOMAJ)
++ ln -s $(notdir $(SHLIBSOMAJ)) $(SHLIBSO)
++
++tcpd: tcpd.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ tcpd.o $(SHLIBFLAGS)
+
+-miscd: miscd.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ miscd.o $(LIB) $(LIBS)
++miscd: miscd.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ miscd.o $(SHLIBFLAGS)
+
+-safe_finger: safe_finger.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ safe_finger.o $(LIB) $(LIBS)
++safe_finger: safe_finger.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ safe_finger.o $(SHLIBFLAGS)
+
+ TCPDMATCH_OBJ = tcpdmatch.o fakelog.o inetcf.o scaffold.o
+
+-tcpdmatch: $(TCPDMATCH_OBJ) $(LIB)
+- $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(LIB) $(LIBS)
++tcpdmatch: $(TCPDMATCH_OBJ) $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(SHLIBFLAGS)
+
+-try-from: try-from.o fakelog.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(LIB) $(LIBS)
++try-from: try-from.o fakelog.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(SHLIBFLAGS)
+
+ TCPDCHK_OBJ = tcpdchk.o fakelog.o inetcf.o scaffold.o
+
+-tcpdchk: $(TCPDCHK_OBJ) $(LIB)
+- $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(LIB) $(LIBS)
++tcpdchk: $(TCPDCHK_OBJ) $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(SHLIBFLAGS)
++
++install: install-lib install-bin install-dev
++
++install-lib:
++ install -o root -g root -m 0755 $(SHLIB) ${DESTDIR}/usr/lib/
++ ln -sf $(notdir $(SHLIB)) ${DESTDIR}/usr/lib/$(notdir $(SHLIBSOMAJ))
++ ln -sf $(notdir $(SHLIBSOMAJ)) ${DESTDIR}/usr/lib/$(notdir $(SHLIBSO))
++
++install-bin:
++ install -o root -g root -m 0755 tcpd ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 tcpdchk ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 tcpdmatch ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 try-from ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 safe_finger ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0644 tcpd.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 tcpdchk.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 try-from.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 tcpdmatch.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 safe_finger.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 hosts_access.5 ${DESTDIR}/usr/share/man/man5/
++ install -o root -g root -m 0644 hosts_options.5 ${DESTDIR}/usr/share/man/man5/
++
++install-dev:
++ install -o root -g root -m 0644 hosts_access.3 ${DESTDIR}/usr/share/man/man3/
++ install -o root -g root -m 0644 tcpd.h ${DESTDIR}/usr/include/
++ install -o root -g root -m 0644 $(LIB) ${DESTDIR}/usr/lib/
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/hosts_ctl.3
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/request_init.3
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/request_set.3
+
+ shar: $(KIT)
+ @shar $(KIT)
+@@ -739,7 +808,8 @@
+
+ clean:
+ rm -f tcpd miscd safe_finger tcpdmatch tcpdchk try-from *.[oa] core \
+- cflags
++ cflags libwrap*.so*
++ rm -rf shared
+
+ tidy: clean
+ chmod -R a+r .
+@@ -885,5 +955,6 @@
+ update.o: mystdarg.h
+ update.o: tcpd.h
+ vfprintf.o: cflags
++weak_symbols.o: tcpd.h
+ workarounds.o: cflags
+ workarounds.o: tcpd.h
+diff -Naur tcp_wrappers_7.6/fix_options.c tcp_wrappers_7.6.gimli/fix_options.c
+--- tcp_wrappers_7.6/fix_options.c 1997-04-07 19:29:19.000000000 -0500
++++ tcp_wrappers_7.6.gimli/fix_options.c 2002-01-07 08:50:19.000000000 -0600
+@@ -35,7 +35,12 @@
+ #ifdef IP_OPTIONS
+ unsigned char optbuf[BUFFER_SIZE / 3], *cp;
+ char lbuf[BUFFER_SIZE], *lp;
++#if !defined(__GLIBC__)
+ int optsize = sizeof(optbuf), ipproto;
++#else /* __GLIBC__ */
++ size_t optsize = sizeof(optbuf);
++ int ipproto;
++#endif /* __GLIBC__ */
+ struct protoent *ip;
+ int fd = request->fd;
+ unsigned int opt;
+diff -Naur tcp_wrappers_7.6/hosts_access.3 tcp_wrappers_7.6.gimli/hosts_access.3
+--- tcp_wrappers_7.6/hosts_access.3 1996-02-11 10:01:27.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.3 2002-01-07 08:50:19.000000000 -0600
+@@ -3,7 +3,7 @@
+ hosts_access, hosts_ctl, request_init, request_set \- access control library
+ .SH SYNOPSIS
+ .nf
+-#include "tcpd.h"
++#include <tcpd.h>
+
+ extern int allow_severity;
+ extern int deny_severity;
+diff -Naur tcp_wrappers_7.6/hosts_access.5 tcp_wrappers_7.6.gimli/hosts_access.5
+--- tcp_wrappers_7.6/hosts_access.5 1995-01-30 12:51:47.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.5 2002-01-07 08:50:19.000000000 -0600
+@@ -8,9 +8,9 @@
+ impatient reader is encouraged to skip to the EXAMPLES section for a
+ quick introduction.
+ .PP
+-An extended version of the access control language is described in the
+-\fIhosts_options\fR(5) document. The extensions are turned on at
+-program build time by building with -DPROCESS_OPTIONS.
++The extended version of the access control language is described in the
++\fIhosts_options\fR(5) document. \fBNote that this language supersedes
++the meaning of \fIshell_command\fB as documented below.\fR
+ .PP
+ In the following text, \fIdaemon\fR is the the process name of a
+ network daemon process, and \fIclient\fR is the name and/or address of
+@@ -40,7 +40,7 @@
+ character. This permits you to break up long lines so that they are
+ easier to edit.
+ .IP \(bu
+-Blank lines or lines that begin with a `#\' character are ignored.
++Blank lines or lines that begin with a `#' character are ignored.
+ This permits you to insert comments and whitespace so that the tables
+ are easier to read.
+ .IP \(bu
+@@ -69,26 +69,33 @@
+ .SH PATTERNS
+ The access control language implements the following patterns:
+ .IP \(bu
+-A string that begins with a `.\' character. A host name is matched if
++A string that begins with a `.' character. A host name is matched if
+ the last components of its name match the specified pattern. For
+-example, the pattern `.tue.nl\' matches the host name
+-`wzv.win.tue.nl\'.
++example, the pattern `.tue.nl' matches the host name
++`wzv.win.tue.nl'.
+ .IP \(bu
+-A string that ends with a `.\' character. A host address is matched if
++A string that ends with a `.' character. A host address is matched if
+ its first numeric fields match the given string. For example, the
+-pattern `131.155.\' matches the address of (almost) every host on the
++pattern `131.155.' matches the address of (almost) every host on the
+ Eind\%hoven University network (131.155.x.x).
+ .IP \(bu
+-A string that begins with an `@\' character is treated as an NIS
++A string that begins with an `@' character is treated as an NIS
+ (formerly YP) netgroup name. A host name is matched if it is a host
+ member of the specified netgroup. Netgroup matches are not supported
+ for daemon process names or for client user names.
+ .IP \(bu
+-An expression of the form `n.n.n.n/m.m.m.m\' is interpreted as a
+-`net/mask\' pair. A host address is matched if `net\' is equal to the
+-bitwise AND of the address and the `mask\'. For example, the net/mask
+-pattern `131.155.72.0/255.255.254.0\' matches every address in the
+-range `131.155.72.0\' through `131.155.73.255\'.
++An expression of the form `n.n.n.n/m.m.m.m' is interpreted as a
++`net/mask' pair. A host address is matched if `net' is equal to the
++bitwise AND of the address and the `mask'. For example, the net/mask
++pattern `131.155.72.0/255.255.254.0' matches every address in the
++range `131.155.72.0' through `131.155.73.255'.
++.IP \(bu
++A string that begins with a `/' character is treated as a file
++name. A host name or address is matched if it matches any host name
++or address pattern listed in the named file. The file format is
++zero or more lines with zero or more host name or address patterns
++separated by whitespace. A file name pattern can be used anywhere
++a host name or address pattern can be used.
+ .SH WILDCARDS
+ The access control language supports explicit wildcards:
+ .IP ALL
+@@ -115,19 +122,19 @@
+ .ne 6
+ .SH OPERATORS
+ .IP EXCEPT
+-Intended use is of the form: `list_1 EXCEPT list_2\'; this construct
++Intended use is of the form: `list_1 EXCEPT list_2'; this construct
+ matches anything that matches \fIlist_1\fR unless it matches
+ \fIlist_2\fR. The EXCEPT operator can be used in daemon_lists and in
+ client_lists. The EXCEPT operator can be nested: if the control
+-language would permit the use of parentheses, `a EXCEPT b EXCEPT c\'
+-would parse as `(a EXCEPT (b EXCEPT c))\'.
++language would permit the use of parentheses, `a EXCEPT b EXCEPT c'
++would parse as `(a EXCEPT (b EXCEPT c))'.
+ .br
+ .ne 6
+ .SH SHELL COMMANDS
+ If the first-matched access control rule contains a shell command, that
+ command is subjected to %<letter> substitutions (see next section).
+ The result is executed by a \fI/bin/sh\fR child process with standard
+-input, output and error connected to \fI/dev/null\fR. Specify an `&\'
++input, output and error connected to \fI/dev/null\fR. Specify an `&'
+ at the end of the command if you do not want to wait until it has
+ completed.
+ .PP
+@@ -159,7 +166,7 @@
+ .IP %u
+ The client user name (or "unknown").
+ .IP %%
+-Expands to a single `%\' character.
++Expands to a single `%' character.
+ .PP
+ Characters in % expansions that may confuse the shell are replaced by
+ underscores.
+@@ -243,9 +250,9 @@
+ less trustworthy. It is possible for an intruder to spoof both the
+ client connection and the IDENT lookup, although doing so is much
+ harder than spoofing just a client connection. It may also be that
+-the client\'s IDENT server is lying.
++the client's IDENT server is lying.
+ .PP
+-Note: IDENT lookups don\'t work with UDP services.
++Note: IDENT lookups don't work with UDP services.
+ .SH EXAMPLES
+ The language is flexible enough that different types of access control
+ policy can be expressed with a minimum of fuss. Although the language
+@@ -285,7 +292,7 @@
+ .br
+ ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
+ .PP
+-The first rule permits access from hosts in the local domain (no `.\'
++The first rule permits access from hosts in the local domain (no `.'
+ in the host name) and from members of the \fIsome_netgroup\fP
+ netgroup. The second rule permits access from all hosts in the
+ \fIfoobar.edu\fP domain (notice the leading dot), with the exception of
+@@ -322,8 +329,8 @@
+ /etc/hosts.deny:
+ .in +3
+ .nf
+-in.tftpd: ALL: (/some/where/safe_finger -l @%h | \\
+- /usr/ucb/mail -s %d-%h root) &
++in.tftpd: ALL: (/usr/sbin/safe_finger -l @%h | \\
++ /usr/bin/mail -s %d-%h root) &
+ .fi
+ .PP
+ The safe_finger command comes with the tcpd wrapper and should be
+@@ -349,7 +356,7 @@
+ capacity of an internal buffer; when an access control rule is not
+ terminated by a newline character; when the result of %<letter>
+ expansion would overflow an internal buffer; when a system call fails
+-that shouldn\'t. All problems are reported via the syslog daemon.
++that shouldn't. All problems are reported via the syslog daemon.
+ .SH FILES
+ .na
+ .nf
+diff -Naur tcp_wrappers_7.6/hosts_access.c tcp_wrappers_7.6.gimli/hosts_access.c
+--- tcp_wrappers_7.6/hosts_access.c 1997-02-11 19:13:23.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.c 2002-01-07 08:50:19.000000000 -0600
+@@ -240,6 +240,26 @@
+ }
+ }
+
++/* hostfile_match - look up host patterns from file */
++
++static int hostfile_match(path, host)
++char *path;
++struct hosts_info *host;
++{
++ char tok[BUFSIZ];
++ int match = NO;
++ FILE *fp;
++
++ if ((fp = fopen(path, "r")) != 0) {
++ while (fscanf(fp, "%s", tok) == 1 && !(match = host_match(tok, host)))
++ /* void */ ;
++ fclose(fp);
++ } else if (errno != ENOENT) {
++ tcpd_warn("open %s: %m", path);
++ }
++ return (match);
++}
++
+ /* host_match - match host name and/or address against pattern */
+
+ static int host_match(tok, host)
+@@ -267,6 +287,8 @@
+ tcpd_warn("netgroup support is disabled"); /* not tcpd_jump() */
+ return (NO);
+ #endif
++ } else if (tok[0] == '/') { /* /file hack */
++ return (hostfile_match(tok, host));
+ } else if (STR_EQ(tok, "KNOWN")) { /* check address and name */
+ char *name = eval_hostname(host);
+ return (STR_NE(eval_hostaddr(host), unknown) && HOSTNAME_KNOWN(name));
+diff -Naur tcp_wrappers_7.6/hosts_options.5 tcp_wrappers_7.6.gimli/hosts_options.5
+--- tcp_wrappers_7.6/hosts_options.5 1994-12-28 10:42:29.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_options.5 2002-01-07 08:50:19.000000000 -0600
+@@ -58,12 +58,12 @@
+ Execute, in a child process, the specified shell command, after
+ performing the %<letter> expansions described in the hosts_access(5)
+ manual page. The command is executed with stdin, stdout and stderr
+-connected to the null device, so that it won\'t mess up the
++connected to the null device, so that it won't mess up the
+ conversation with the client host. Example:
+ .sp
+ .nf
+ .ti +3
+-spawn (/some/where/safe_finger -l @%h | /usr/ucb/mail root) &
++spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &
+ .fi
+ .sp
+ executes, in a background child process, the shell command "safe_finger
+diff -Naur tcp_wrappers_7.6/options.c tcp_wrappers_7.6.gimli/options.c
+--- tcp_wrappers_7.6/options.c 1996-02-11 10:01:32.000000000 -0600
++++ tcp_wrappers_7.6.gimli/options.c 2002-01-07 08:50:19.000000000 -0600
+@@ -473,6 +473,9 @@
+ #ifdef LOG_CRON
+ "cron", LOG_CRON,
+ #endif
++#ifdef LOG_FTP
++ "ftp", LOG_FTP,
++#endif
+ #ifdef LOG_LOCAL0
+ "local0", LOG_LOCAL0,
+ #endif
+diff -Naur tcp_wrappers_7.6/percent_m.c tcp_wrappers_7.6.gimli/percent_m.c
+--- tcp_wrappers_7.6/percent_m.c 1994-12-28 10:42:37.000000000 -0600
++++ tcp_wrappers_7.6.gimli/percent_m.c 2002-01-07 08:50:19.000000000 -0600
+@@ -13,7 +13,7 @@
+ #include <string.h>
+
+ extern int errno;
+-#ifndef SYS_ERRLIST_DEFINED
++#if !defined(SYS_ERRLIST_DEFINED) && !defined(HAVE_STRERROR)
+ extern char *sys_errlist[];
+ extern int sys_nerr;
+ #endif
+@@ -29,11 +29,15 @@
+
+ while (*bp = *cp)
+ if (*cp == '%' && cp[1] == 'm') {
++#ifdef HAVE_STRERROR
++ strcpy(bp, strerror(errno));
++#else
+ if (errno < sys_nerr && errno > 0) {
+ strcpy(bp, sys_errlist[errno]);
+ } else {
+ sprintf(bp, "Unknown error %d", errno);
+ }
++#endif
+ bp += strlen(bp);
+ cp += 2;
+ } else {
+diff -Naur tcp_wrappers_7.6/rfc931.c tcp_wrappers_7.6.gimli/rfc931.c
+--- tcp_wrappers_7.6/rfc931.c 1995-01-02 09:11:34.000000000 -0600
++++ tcp_wrappers_7.6.gimli/rfc931.c 2002-01-07 08:50:19.000000000 -0600
+@@ -33,7 +33,7 @@
+
+ int rfc931_timeout = RFC931_TIMEOUT;/* Global so it can be changed */
+
+-static jmp_buf timebuf;
++static sigjmp_buf timebuf;
+
+ /* fsocket - open stdio stream on top of socket */
+
+@@ -62,7 +62,7 @@
+ static void timeout(sig)
+ int sig;
+ {
+- longjmp(timebuf, sig);
++ siglongjmp(timebuf, sig);
+ }
+
+ /* rfc931 - return remote user name, given socket structures */
+@@ -99,7 +99,7 @@
+ * Set up a timer so we won't get stuck while waiting for the server.
+ */
+
+- if (setjmp(timebuf) == 0) {
++ if (sigsetjmp(timebuf,1) == 0) {
+ signal(SIGALRM, timeout);
+ alarm(rfc931_timeout);
+
+diff -Naur tcp_wrappers_7.6/safe_finger.8 tcp_wrappers_7.6.gimli/safe_finger.8
+--- tcp_wrappers_7.6/safe_finger.8 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/safe_finger.8 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,34 @@
++.TH SAFE_FINGER 8 "21th June 1997" Linux "Linux Programmer's Manual"
++.SH NAME
++safe_finger \- finger client wrapper that protects against nasty stuff
++from finger servers
++.SH SYNOPSIS
++.B safe_finger [finger_options]
++.SH DESCRIPTION
++The
++.B safe_finger
++command protects against nasty stuff from finger servers. Use this
++program for automatic reverse finger probes from the
++.B tcp_wrapper
++.B (tcpd)
++, not the raw finger command. The
++.B safe_finger
++command makes sure that the finger client is not run with root
++privileges. It also runs the finger client with a defined PATH
++environment.
++.B safe_finger
++will also protect you from problems caused by the output of some
++finger servers. The problem: some programs may react to stuff in
++the first column. Other programs may get upset by thrash anywhere
++on a line. File systems may fill up as the finger server keeps
++sending data. Text editors may bomb out on extremely long lines.
++The finger server may take forever because it is somehow wedged.
++.B safe_finger
++takes care of all this badness.
++.SH SEE ALSO
++.BR hosts_access (5),
++.BR hosts_options (5),
++.BR tcpd (8)
++.SH AUTHOR
++Wietse Venema, Eindhoven University of Technology, The Netherlands.
++
+diff -Naur tcp_wrappers_7.6/safe_finger.c tcp_wrappers_7.6.gimli/safe_finger.c
+--- tcp_wrappers_7.6/safe_finger.c 1994-12-28 10:42:42.000000000 -0600
++++ tcp_wrappers_7.6.gimli/safe_finger.c 2002-01-07 08:50:19.000000000 -0600
+@@ -26,21 +26,24 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <pwd.h>
++#include <syslog.h>
+
+ extern void exit();
+
+ /* Local stuff */
+
+-char path[] = "PATH=/bin:/usr/bin:/usr/ucb:/usr/bsd:/etc:/usr/etc:/usr/sbin";
++char path[] = "PATH=/bin:/usr/bin:/sbin:/usr/sbin";
+
+ #define TIME_LIMIT 60 /* Do not keep listinging forever */
+ #define INPUT_LENGTH 100000 /* Do not keep listinging forever */
+ #define LINE_LENGTH 128 /* Editors can choke on long lines */
+ #define FINGER_PROGRAM "finger" /* Most, if not all, UNIX systems */
+ #define UNPRIV_NAME "nobody" /* Preferred privilege level */
+-#define UNPRIV_UGID 32767 /* Default uid and gid */
++#define UNPRIV_UGID 65534 /* Default uid and gid */
+
+ int finger_pid;
++int allow_severity = SEVERITY;
++int deny_severity = LOG_WARNING;
+
+ void cleanup(sig)
+ int sig;
+diff -Naur tcp_wrappers_7.6/scaffold.c tcp_wrappers_7.6.gimli/scaffold.c
+--- tcp_wrappers_7.6/scaffold.c 1997-03-21 12:27:24.000000000 -0600
++++ tcp_wrappers_7.6.gimli/scaffold.c 2002-01-07 08:50:19.000000000 -0600
+@@ -180,10 +180,12 @@
+
+ /* ARGSUSED */
+
+-void rfc931(request)
+-struct request_info *request;
++void rfc931(rmt_sin, our_sin, dest)
++struct sockaddr_in *rmt_sin;
++struct sockaddr_in *our_sin;
++char *dest;
+ {
+- strcpy(request->user, unknown);
++ strcpy(dest, unknown);
+ }
+
+ /* check_path - examine accessibility */
+diff -Naur tcp_wrappers_7.6/socket.c tcp_wrappers_7.6.gimli/socket.c
+--- tcp_wrappers_7.6/socket.c 1997-03-21 12:27:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/socket.c 2002-01-07 08:50:19.000000000 -0600
+@@ -76,7 +76,11 @@
+ {
+ static struct sockaddr_in client;
+ static struct sockaddr_in server;
++#if !defined (__GLIBC__)
+ int len;
++#else /* __GLIBC__ */
++ size_t len;
++#endif /* __GLIBC__ */
+ char buf[BUFSIZ];
+ int fd = request->fd;
+
+@@ -224,7 +228,11 @@
+ {
+ char buf[BUFSIZ];
+ struct sockaddr_in sin;
++#if !defined(__GLIBC__)
+ int size = sizeof(sin);
++#else /* __GLIBC__ */
++ size_t size = sizeof(sin);
++#endif /* __GLIBC__ */
+
+ /*
+ * Eat up the not-yet received datagram. Some systems insist on a
+diff -Naur tcp_wrappers_7.6/tcpd.8 tcp_wrappers_7.6.gimli/tcpd.8
+--- tcp_wrappers_7.6/tcpd.8 1996-02-21 09:39:16.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpd.8 2002-01-07 08:50:19.000000000 -0600
+@@ -94,7 +94,7 @@
+ .PP
+ The example assumes that the network daemons live in /usr/etc. On some
+ systems, network daemons live in /usr/sbin or in /usr/libexec, or have
+-no `in.\' prefix to their name.
++no `in.' prefix to their name.
+ .SH EXAMPLE 2
+ This example applies when \fItcpd\fR expects that the network daemons
+ are left in their original place.
+@@ -110,26 +110,26 @@
+ becomes:
+ .sp
+ .ti +5
+-finger stream tcp nowait nobody /some/where/tcpd in.fingerd
++finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd
+ .sp
+ .fi
+ .PP
+ The example assumes that the network daemons live in /usr/etc. On some
+ systems, network daemons live in /usr/sbin or in /usr/libexec, the
+-daemons have no `in.\' prefix to their name, or there is no userid
++daemons have no `in.' prefix to their name, or there is no userid
+ field in the inetd configuration file.
+ .PP
+ Similar changes will be needed for the other services that are to be
+-covered by \fItcpd\fR. Send a `kill -HUP\' to the \fIinetd\fR(8)
++covered by \fItcpd\fR. Send a `kill -HUP' to the \fIinetd\fR(8)
+ process to make the changes effective. AIX users may also have to
+-execute the `inetimp\' command.
++execute the `inetimp' command.
+ .SH EXAMPLE 3
+ In the case of daemons that do not live in a common directory ("secret"
+ or otherwise), edit the \fIinetd\fR configuration file so that it
+ specifies an absolute path name for the process name field. For example:
+ .nf
+ .sp
+- ntalk dgram udp wait root /some/where/tcpd /usr/local/lib/ntalkd
++ ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
+ .sp
+ .fi
+ .PP
+diff -Naur tcp_wrappers_7.6/tcpd.h tcp_wrappers_7.6.gimli/tcpd.h
+--- tcp_wrappers_7.6/tcpd.h 1996-03-19 09:22:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpd.h 2002-01-07 08:50:19.000000000 -0600
+@@ -4,6 +4,25 @@
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+
++#ifndef _TCPWRAPPERS_TCPD_H
++#define _TCPWRAPPERS_TCPD_H
++
++/* someone else may have defined this */
++#undef __P
++
++/* use prototypes if we have an ANSI C compiler or are using C++ */
++#if defined(__STDC__) || defined(__cplusplus)
++#define __P(args) args
++#else
++#define __P(args) ()
++#endif
++
++/* Need definitions of struct sockaddr_in and FILE. */
++#include <netinet/in.h>
++#include <stdio.h>
++
++__BEGIN_DECLS
++
+ /* Structure to describe one communications endpoint. */
+
+ #define STRING_LENGTH 128 /* hosts, users, processes */
+@@ -25,10 +44,10 @@
+ char pid[10]; /* access via eval_pid(request) */
+ struct host_info client[1]; /* client endpoint info */
+ struct host_info server[1]; /* server endpoint info */
+- void (*sink) (); /* datagram sink function or 0 */
+- void (*hostname) (); /* address to printable hostname */
+- void (*hostaddr) (); /* address to printable address */
+- void (*cleanup) (); /* cleanup function or 0 */
++ void (*sink) __P((int)); /* datagram sink function or 0 */
++ void (*hostname) __P((struct host_info *)); /* address to printable hostname */
++ void (*hostaddr) __P((struct host_info *)); /* address to printable address */
++ void (*cleanup) __P((struct request_info *)); /* cleanup function or 0 */
+ struct netconfig *config; /* netdir handle */
+ };
+
+@@ -61,25 +80,30 @@
+ /* Global functions. */
+
+ #if defined(TLI) || defined(PTX) || defined(TLI_SEQUENT)
+-extern void fromhost(); /* get/validate client host info */
++extern void fromhost __P((struct request_info *)); /* get/validate client host info */
+ #else
+ #define fromhost sock_host /* no TLI support needed */
+ #endif
+
+-extern int hosts_access(); /* access control */
+-extern void shell_cmd(); /* execute shell command */
+-extern char *percent_x(); /* do %<char> expansion */
+-extern void rfc931(); /* client name from RFC 931 daemon */
+-extern void clean_exit(); /* clean up and exit */
+-extern void refuse(); /* clean up and exit */
+-extern char *xgets(); /* fgets() on steroids */
+-extern char *split_at(); /* strchr() and split */
+-extern unsigned long dot_quad_addr(); /* restricted inet_addr() */
++extern void shell_cmd __P((char *)); /* execute shell command */
++extern char *percent_x __P((char *, int, char *, struct request_info *)); /* do %<char> expansion */
++extern void rfc931 __P((struct sockaddr_in *, struct sockaddr_in *, char *)); /* client name from RFC 931 daemon */
++extern void clean_exit __P((struct request_info *)); /* clean up and exit */
++extern void refuse __P((struct request_info *)); /* clean up and exit */
++extern char *xgets __P((char *, int, FILE *)); /* fgets() on steroids */
++extern char *split_at __P((char *, int)); /* strchr() and split */
++extern unsigned long dot_quad_addr __P((char *)); /* restricted inet_addr() */
+
+ /* Global variables. */
+
++#ifdef HAVE_WEAKSYMS
++extern int allow_severity __attribute__ ((weak)); /* for connection logging */
++extern int deny_severity __attribute__ ((weak)); /* for connection logging */
++#else
+ extern int allow_severity; /* for connection logging */
+ extern int deny_severity; /* for connection logging */
++#endif
++
+ extern char *hosts_allow_table; /* for verification mode redirection */
+ extern char *hosts_deny_table; /* for verification mode redirection */
+ extern int hosts_access_verbose; /* for verbose matching mode */
+@@ -92,9 +116,14 @@
+ */
+
+ #ifdef __STDC__
++extern int hosts_access(struct request_info *request);
++extern int hosts_ctl(char *daemon, char *client_name, char *client_addr,
++ char *client_user);
+ extern struct request_info *request_init(struct request_info *,...);
+ extern struct request_info *request_set(struct request_info *,...);
+ #else
++extern int hosts_access();
++extern int hosts_ctl();
+ extern struct request_info *request_init(); /* initialize request */
+ extern struct request_info *request_set(); /* update request structure */
+ #endif
+@@ -117,27 +146,31 @@
+ * host_info structures serve as caches for the lookup results.
+ */
+
+-extern char *eval_user(); /* client user */
+-extern char *eval_hostname(); /* printable hostname */
+-extern char *eval_hostaddr(); /* printable host address */
+-extern char *eval_hostinfo(); /* host name or address */
+-extern char *eval_client(); /* whatever is available */
+-extern char *eval_server(); /* whatever is available */
++extern char *eval_user __P((struct request_info *)); /* client user */
++extern char *eval_hostname __P((struct host_info *)); /* printable hostname */
++extern char *eval_hostaddr __P((struct host_info *)); /* printable host address */
++extern char *eval_hostinfo __P((struct host_info *)); /* host name or address */
++extern char *eval_client __P((struct request_info *)); /* whatever is available */
++extern char *eval_server __P((struct request_info *)); /* whatever is available */
+ #define eval_daemon(r) ((r)->daemon) /* daemon process name */
+ #define eval_pid(r) ((r)->pid) /* process id */
+
+ /* Socket-specific methods, including DNS hostname lookups. */
+
+-extern void sock_host(); /* look up endpoint addresses */
+-extern void sock_hostname(); /* translate address to hostname */
+-extern void sock_hostaddr(); /* address to printable address */
++/* look up endpoint addresses */
++extern void sock_host __P((struct request_info *));
++/* translate address to hostname */
++extern void sock_hostname __P((struct host_info *));
++/* address to printable address */
++extern void sock_hostaddr __P((struct host_info *));
++
+ #define sock_methods(r) \
+ { (r)->hostname = sock_hostname; (r)->hostaddr = sock_hostaddr; }
+
+ /* The System V Transport-Level Interface (TLI) interface. */
+
+ #if defined(TLI) || defined(PTX) || defined(TLI_SEQUENT)
+-extern void tli_host(); /* look up endpoint addresses etc. */
++extern void tli_host __P((struct request_info *)); /* look up endpoint addresses etc. */
+ #endif
+
+ /*
+@@ -178,7 +211,7 @@
+ * behavior.
+ */
+
+-extern void process_options(); /* execute options */
++extern void process_options __P((char *, struct request_info *)); /* execute options */
+ extern int dry_run; /* verification flag */
+
+ /* Bug workarounds. */
+@@ -217,3 +250,7 @@
+ #define strtok my_strtok
+ extern char *my_strtok();
+ #endif
++
++__END_DECLS
++
++#endif /* tcpd.h */
+diff -Naur tcp_wrappers_7.6/tcpdchk.c tcp_wrappers_7.6.gimli/tcpdchk.c
+--- tcp_wrappers_7.6/tcpdchk.c 1997-02-11 19:13:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpdchk.c 2002-01-07 08:50:19.000000000 -0600
+@@ -350,6 +350,8 @@
+ {
+ if (pat[0] == '@') {
+ tcpd_warn("%s: daemon name begins with \"@\"", pat);
++ } else if (pat[0] == '/') {
++ tcpd_warn("%s: daemon name begins with \"/\"", pat);
+ } else if (pat[0] == '.') {
+ tcpd_warn("%s: daemon name begins with dot", pat);
+ } else if (pat[strlen(pat) - 1] == '.') {
+@@ -382,6 +384,8 @@
+ {
+ if (pat[0] == '@') { /* @netgroup */
+ tcpd_warn("%s: user name begins with \"@\"", pat);
++ } else if (pat[0] == '/') {
++ tcpd_warn("%s: user name begins with \"/\"", pat);
+ } else if (pat[0] == '.') {
+ tcpd_warn("%s: user name begins with dot", pat);
+ } else if (pat[strlen(pat) - 1] == '.') {
+@@ -402,8 +406,13 @@
+ static int check_host(pat)
+ char *pat;
+ {
++ char buf[BUFSIZ];
+ char *mask;
+ int addr_count = 1;
++ FILE *fp;
++ struct tcpd_context saved_context;
++ char *cp;
++ char *wsp = " \t\r\n";
+
+ if (pat[0] == '@') { /* @netgroup */
+ #ifdef NO_NETGRENT
+@@ -422,6 +431,21 @@
+ tcpd_warn("netgroup support disabled");
+ #endif
+ #endif
++ } else if (pat[0] == '/') { /* /path/name */
++ if ((fp = fopen(pat, "r")) != 0) {
++ saved_context = tcpd_context;
++ tcpd_context.file = pat;
++ tcpd_context.line = 0;
++ while (fgets(buf, sizeof(buf), fp)) {
++ tcpd_context.line++;
++ for (cp = strtok(buf, wsp); cp; cp = strtok((char *) 0, wsp))
++ check_host(cp);
++ }
++ tcpd_context = saved_context;
++ fclose(fp);
++ } else if (errno != ENOENT) {
++ tcpd_warn("open %s: %m", pat);
++ }
+ } else if (mask = split_at(pat, '/')) { /* network/netmask */
+ if (dot_quad_addr(pat) == INADDR_NONE
+ || dot_quad_addr(mask) == INADDR_NONE)
+diff -Naur tcp_wrappers_7.6/try-from.8 tcp_wrappers_7.6.gimli/try-from.8
+--- tcp_wrappers_7.6/try-from.8 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/try-from.8 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,28 @@
++.TH TRY-FROM 8 "21th June 1997" Linux "Linux Programmer's Manual"
++.SH NAME
++try-from \- test program for the tcp_wrapper
++.SH SYNOPSIS
++.B try-from
++.SH DESCRIPTION
++The
++.B try-from
++command can be called via a remote shell command to find out
++if the hostname and address are properly recognized
++by the
++.B tcp_wrapper
++library, if username lookup works, and (SysV only) if the TLI
++on top of IP heuristics work. Diagnostics are reported through
++.BR syslog (3)
++and redirected to stderr.
++
++Example:
++
++rsh host /some/where/try-from
++
++.SH SEE ALSO
++.BR hosts_access (5),
++.BR hosts_options (5),
++.BR tcpd (8)
++.SH AUTHOR
++Wietse Venema, Eindhoven University of Technology, The Netherlands.
++
+diff -Naur tcp_wrappers_7.6/weak_symbols.c tcp_wrappers_7.6.gimli/weak_symbols.c
+--- tcp_wrappers_7.6/weak_symbols.c 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/weak_symbols.c 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,11 @@
++ /*
++ * @(#) weak_symbols.h 1.5 99/12/29 23:50
++ *
++ * Author: Anthony Towns <ajt@debian.org>
++ */
++
++#ifdef HAVE_WEAKSYMS
++#include <syslog.h>
++int deny_severity = LOG_WARNING;
++int allow_severity = SEVERITY;
++#endif
+diff -Naur tcp_wrappers_7.6/workarounds.c tcp_wrappers_7.6.gimli/workarounds.c
+--- tcp_wrappers_7.6/workarounds.c 1996-03-19 09:22:26.000000000 -0600
++++ tcp_wrappers_7.6.gimli/workarounds.c 2002-01-07 08:50:19.000000000 -0600
+@@ -163,7 +163,11 @@
+ int fix_getpeername(sock, sa, len)
+ int sock;
+ struct sockaddr *sa;
++#if !defined(__GLIBC__)
+ int *len;
++#else /* __GLIBC__ */
++size_t *len;
++#endif /* __GLIBC__ */
+ {
+ int ret;
+ struct sockaddr_in *sin = (struct sockaddr_in *) sa;
diff --git a/abs/core-testing/tcp_wrappers/try-from.8 b/abs/core-testing/tcp_wrappers/try-from.8
new file mode 100644
index 0000000..9c8f305
--- /dev/null
+++ b/abs/core-testing/tcp_wrappers/try-from.8
@@ -0,0 +1,28 @@
+.TH TRY-FROM 8 "21th June 1997" Linux "Linux Programmer's Manual"
+.SH NAME
+try-from \- test program for the tcp_wrapper
+.SH SYNOPSIS
+.B try-from
+.SH DESCRIPTION
+The
+.B try-from
+command can be called via a remote shell command to find out
+if the hostname and address are properly recognized
+by the
+.B tcp_wrapper
+library, if username lookup works, and (SysV only) if the TLI
+on top of IP heuristics work. Diagnostics are reported through
+.BR syslog (3)
+and redirected to stderr.
+
+Example:
+
+rsh host /some/where/try-from
+
+.SH SEE ALSO
+.BR hosts_access (5),
+.BR hosts_options (5),
+.BR tcpd (8)
+.SH AUTHOR
+Wietse Venema, Eindhoven University of Technology, The Netherlands.
+
diff --git a/abs/core-testing/tiacx-firmware/PKGBUILD b/abs/core-testing/tiacx-firmware/PKGBUILD
new file mode 100644
index 0000000..d16c818
--- /dev/null
+++ b/abs/core-testing/tiacx-firmware/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=tiacx-firmware
+pkgver=2
+pkgrel=1
+pkgdesc="Firmware for Texas Instruments ACX100/ACX111 wireless chips."
+arch=('i686' 'x86_64')
+url="http://acx100.sourceforge.net/"
+license=('MPL')
+install=tiacx-firmware.install
+source=(http://www.kazer.org/acx-firmware-20060207.tar.bz2)
+
+build() {
+ mkdir -p $startdir/pkg/usr/share
+ cp -r fw $startdir/pkg/usr/share/tiacx
+ find $startdir/pkg -type d -exec chmod 755 {} \;
+ find $startdir/pkg -type f -exec chmod 644 {} \;
+}
+md5sums=('b8efea38c2c598190604dfa297cc9675')
diff --git a/abs/core-testing/tiacx-firmware/tiacx-firmware.install b/abs/core-testing/tiacx-firmware/tiacx-firmware.install
new file mode 100644
index 0000000..b1ebb62
--- /dev/null
+++ b/abs/core-testing/tiacx-firmware/tiacx-firmware.install
@@ -0,0 +1,22 @@
+post_install() {
+ cat << 'EOM'
+
+ ==>
+ ==> PLEASE NOTE:
+ ==> The firmware files for ACX100/111 devices are installed in
+ ==> /usr/share/tiacx. Please identify the correct file(s) for your
+ ==> device and copy them to /lib/firmware.
+ ==>
+ ==> See http://acx100.sourceforge.net/wiki/Firmware for details.
+ ==>
+
+EOM
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/tiacx/PKGBUILD b/abs/core-testing/tiacx/PKGBUILD
new file mode 100644
index 0000000..d1bffc7
--- /dev/null
+++ b/abs/core-testing/tiacx/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 5944 2008-07-21 20:26:41Z thomas $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=tiacx
+pkgver=20080210
+pkgrel=6
+pkgdesc="OpenSource module for Texas Instruments ACX100/ACX111 wireless chips. For stock arch 2.6 kernel"
+arch=(i686 x86_64)
+url="http://acx100.sourceforge.net/"
+license=('MPL')
+depends=('wireless_tools' 'kernel26>=2.6.26-1' 'kernel26<2.6.27' 'tiacx-firmware')
+install=acx.install
+source=(http://downloads.sourceforge.net/sourceforge/acx100/acx-$pkgver.tar.bz2)
+md5sums=('7d5ce3215708e4e9f95cf567a9ee3a12')
+
+_kernver=2.6.26-ARCH
+
+build() {
+ cd $startdir/src/acx-$pkgver
+ make -C /lib/modules/${_kernver}/build M=`pwd` || return 1
+ install -D acx.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless/tiacx/acx.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core-testing/tiacx/acx.install b/abs/core-testing/tiacx/acx.install
new file mode 100644
index 0000000..09a0d0d
--- /dev/null
+++ b/abs/core-testing/tiacx/acx.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/tk/ChangeLog b/abs/core-testing/tk/ChangeLog
new file mode 100644
index 0000000..83abeb6
--- /dev/null
+++ b/abs/core-testing/tk/ChangeLog
@@ -0,0 +1,16 @@
+2008-08-20 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-2 :
+ Remove xproto compatibility patch as no longer needed
+
+2008-08-16 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-1 :
+ new upstream release
+ FHS man pages
+
+2008-07-01 Allan McRae <allan@archlinux.org>
+
+ * 8.5.3-1 :
+ new upstream release
+ added patch for xproto-7.0.13 compatibility
diff --git a/abs/core-testing/tk/PKGBUILD b/abs/core-testing/tk/PKGBUILD
new file mode 100644
index 0000000..80299e6
--- /dev/null
+++ b/abs/core-testing/tk/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 9873 2008-08-20 08:29:04Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=tk
+pkgver=8.5.4
+pkgrel=2
+pkgdesc="A windowing toolkit for use with tcl"
+arch=('i686' 'x86_64')
+url="http://tcl.sourceforge.net/"
+license=('custom')
+depends=("tcl=${pkgver}" 'libxss' 'libxft')
+source=(http://downloads.sourceforge.net/sourceforge/tcl/tk${pkgver}-src.tar.gz)
+md5sums=('a6aee7653566ec0b7c4b0f4c24a96f20')
+
+build() {
+ cd ${srcdir}/tk${pkgver}/unix
+ if [ "$CARCH" = "x86_64" ]; then
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --enable-64bit
+ else
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --disable-64bit
+ fi
+
+ make
+ make INSTALL_ROOT=${pkgdir} install install-private-headers
+ ln -sf wish8.5 ${pkgdir}/usr/bin/wish
+ # install license
+ install -Dm644 ../license.terms ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+
+ # remove buildroot traces / fixes #3602
+ sed -i \
+ -e "s,^TK_BUILD_LIB_SPEC='-L.*/unix,TK_BUILD_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TK_SRC_DIR='.*',TK_SRC_DIR='/usr/include'," \
+ -e "s,^TK_BUILD_STUB_LIB_SPEC='-L.*/unix,TK_BUILD_STUB_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TK_BUILD_STUB_LIB_PATH='.*/unix,TK_BUILD_STUB_LIB_PATH='/usr/lib," \
+ ${pkgdir}/usr/lib/tkConfig.sh
+}
diff --git a/abs/core-testing/trapproto/PKGBUILD b/abs/core-testing/trapproto/PKGBUILD
new file mode 100644
index 0000000..0744d52
--- /dev/null
+++ b/abs/core-testing/trapproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=trapproto
+pkgver=3.4.3
+pkgrel=1
+pkgdesc="X11 Trap extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-$pkgver.tar.bz2)
+md5sums=('3b713239e5e6b269b31cb665563358df')
+sha1sums=('b108aa39a7bfde530d5cd347fda7c58770d5b8da')
+
+build() {
+ cd $startdir/src/${pkgname}-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/ttf-dejavu/ChangeLog b/abs/core-testing/ttf-dejavu/ChangeLog
new file mode 100644
index 0000000..5c02e9f
--- /dev/null
+++ b/abs/core-testing/ttf-dejavu/ChangeLog
@@ -0,0 +1,9 @@
+2008-07-29 Alexander Fehr <pizzapunk gmail com>
+
+ * ttf-dejavu-2.26-1:
+ New upstream release.
+ New maintainer.
+ Renamed ttf.install to ttf-dejavu.install.
+ Added -s option to fc-cache in install file.
+ Removed install message.
+ Added ChangeLog.
diff --git a/abs/core-testing/ttf-dejavu/PKGBUILD b/abs/core-testing/ttf-dejavu/PKGBUILD
new file mode 100644
index 0000000..5cbbecc
--- /dev/null
+++ b/abs/core-testing/ttf-dejavu/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 7356 2008-07-31 01:07:11Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+# Contributor: Michal Krenek <mikos@sg1.cz>
+
+pkgname=ttf-dejavu
+pkgver=2.26
+pkgrel=1
+pkgdesc="Font family based on the Bitstream Vera Fonts with a wider range of characters"
+arch=('i686' 'x86_64')
+url="http://dejavu.sourceforge.net/"
+license=('custom')
+depends=('fontconfig' 'xorg-fonts-encodings')
+install=ttf-dejavu.install
+source=(http://downloads.sourceforge.net/dejavu/dejavu-fonts-ttf-$pkgver.tar.bz2)
+md5sums=('bff450e8c1b3c9a3f38294ac44d81adc')
+
+build() {
+ cd "$srcdir/dejavu-fonts-ttf-$pkgver"
+
+ mkdir -p "$pkgdir/usr/share/fonts/TTF" || return 1
+ install -m644 ttf/*.ttf "$pkgdir/usr/share/fonts/TTF" || return 1
+
+ install -D -m644 LICENSE "$pkgdir/usr/share/licenses/ttf-dejavu/LICENSE" || return 1
+}
diff --git a/abs/core-testing/ttf-dejavu/ttf-dejavu.install b/abs/core-testing/ttf-dejavu/ttf-dejavu.install
new file mode 100644
index 0000000..18666d2
--- /dev/null
+++ b/abs/core-testing/ttf-dejavu/ttf-dejavu.install
@@ -0,0 +1,13 @@
+post_install() {
+ fc-cache -fs
+ mkfontscale usr/share/fonts/TTF
+ mkfontdir usr/share/fonts/TTF
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/abs/core-testing/tzdata/Makefile.patch b/abs/core-testing/tzdata/Makefile.patch
new file mode 100644
index 0000000..e88f9d9
--- /dev/null
+++ b/abs/core-testing/tzdata/Makefile.patch
@@ -0,0 +1,140 @@
+diff -Naur src/Makefile src-p/Makefile
+--- src/Makefile 2007-08-20 16:47:41.000000000 +0200
++++ src-p/Makefile 2007-10-02 04:07:44.000000000 +0200
+@@ -34,17 +34,17 @@
+
+ # Everything gets put in subdirectories of. . .
+
+-TOPDIR= /usr/local
++TOPDIR= $(DESTDIR)/usr
+
+ # "Compiled" time zone information is placed in the "TZDIR" directory
+ # (and subdirectories).
+ # Use an absolute path name for TZDIR unless you're just testing the software.
+
+-TZDIR= $(TOPDIR)/etc/zoneinfo
++TZDIR= $(TOPDIR)/share/zoneinfo
+
+ # The "tzselect", "zic", and "zdump" commands get installed in. . .
+
+-ETCDIR= $(TOPDIR)/etc
++SBINDIR= $(TOPDIR)/sbin
+
+ # If you "make INSTALL", the "date" command gets installed in. . .
+
+@@ -52,7 +52,7 @@
+
+ # Manual pages go in subdirectories of. . .
+
+-MANDIR= $(TOPDIR)/man
++MANDIR= $(TOPDIR)/share/man
+
+ # Library functions are put in an archive in LIBDIR.
+
+@@ -83,7 +83,7 @@
+
+ # Non-default libraries needed to link.
+ # Add -lintl if you want to use `gettext' on Solaris.
+-LDLIBS=
++LDLIBS=$(LDFLAGS)
+
+ # Add the following to the end of the "CFLAGS=" line as needed.
+ # -Dconst= if `const' does not work (SunOS 4.x cc, OSF1 V5.0 cc)
+@@ -211,7 +211,7 @@
+ # before the first Monday in January when a "%V" format is used and January 1
+ # falls on a Friday, Saturday, or Sunday.
+
+-CFLAGS=
++CFLAGS += -std=gnu99
+
+ # If you want zic's -s option used when installing, uncomment the next line
+ # ZFLAGS= -s
+@@ -220,7 +220,7 @@
+ ZIC= $(zic) $(ZFLAGS)
+
+ # The name of a Posix-compliant `awk' on your system.
+-AWK= nawk
++AWK= awk
+
+ # The path where SGML DTDs are kept.
+ SGML_SEARCH_PATH= $(TOPDIR)/share/doc/sgml-lib/REC-html401-19991224/
+@@ -241,8 +241,10 @@
+
+ ###############################################################################
+
+-cc= cc
+-CC= $(cc) -DTZDIR=\"$(TZDIR)\"
++CC+= -DTZDIR=\"$(TZDIR)\"
++ifeq ($(NLS),1)
++CC += -DHAVE_GETTEXT=1 -DTZ_DOMAIN=\"libc\"
++endif
+
+ TZCSRCS= zic.c localtime.c asctime.c scheck.c ialloc.c
+ TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o
+@@ -282,14 +284,16 @@
+
+ ALL: all date
+
+-install: all $(DATA) $(REDO) $(TZLIB) $(MANS) $(TABDATA)
++install: all $(DATA) $(REDO) $(MANS) $(TABDATA)
+ $(ZIC) -y $(YEARISTYPE) \
+ -d $(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
+ -rm -f $(TZDIR)/iso3166.tab $(TZDIR)/zone.tab
+ cp iso3166.tab zone.tab $(TZDIR)/.
+- -mkdir $(TOPDIR) $(ETCDIR)
+- cp tzselect zic zdump $(ETCDIR)/.
+- -mkdir $(TOPDIR) $(MANDIR) \
++ -mkdir -p $(TOPDIR) $(SBINDIR)
++ cp zic zdump $(SBINDIR)/.
++ -mkdir -p $(TOPDIR) $(BINDIR)
++ cp tzselect $(BINDIR)/.
++ -mkdir -p $(TOPDIR) $(MANDIR) \
+ $(MANDIR)/man3 $(MANDIR)/man5 $(MANDIR)/man8
+ -rm -f $(MANDIR)/man3/newctime.3 \
+ $(MANDIR)/man3/newtzset.3 \
+@@ -298,13 +302,11 @@
+ $(MANDIR)/man8/zdump.8 \
+ $(MANDIR)/man8/zic.8
+ cp newctime.3 newtzset.3 $(MANDIR)/man3/.
+- cp tzfile.5 $(MANDIR)/man5/.
+- cp tzselect.8 zdump.8 zic.8 $(MANDIR)/man8/.
+
+ INSTALL: ALL install date.1
+- -mkdir $(TOPDIR) $(BINDIR)
++ -mkdir -p $(TOPDIR) $(BINDIR)
+ cp date $(BINDIR)/.
+- -mkdir $(TOPDIR) $(MANDIR) $(MANDIR)/man1
++ -mkdir -p $(TOPDIR) $(MANDIR) $(MANDIR)/man1
+ -rm -f $(MANDIR)/man1/date.1
+ cp date.1 $(MANDIR)/man1/.
+
+@@ -334,9 +336,9 @@
+ # You must replace all of $(TZDIR) to switch from not using leap seconds
+ # to using them, or vice versa.
+ other_two: zic leapseconds $(TDATA)
+- $(ZIC) -y $(YEARISTYPE) -d $(TZDIR)-posix -L /dev/null $(TDATA)
++ $(ZIC) -y $(YEARISTYPE) -d $(TZDIR)/posix -L /dev/null $(TDATA)
+ $(ZIC) -y $(YEARISTYPE) \
+- -d $(TZDIR)-leaps -L leapseconds $(TDATA)
++ -d $(TZDIR)/right -L leapseconds $(TDATA)
+
+ posix_right: posix_only other_two
+
+@@ -367,7 +369,7 @@
+ <$? >$@
+ chmod +x $@
+
+-check: check_tables check_web
++check: check_tables
+
+ check_tables: checktab.awk $(PRIMARY_YDATA)
+ $(AWK) -f checktab.awk $(PRIMARY_YDATA)
+diff -Naur src/tzselect.ksh src-p/tzselect.ksh
+--- src/tzselect.ksh 2007-08-20 16:47:42.000000000 +0200
++++ src-p/tzselect.ksh 2007-10-02 04:07:44.000000000 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/ksh
++#! /bin/bash
+
+ # '@(#)tzselect.ksh 8.1'
+
diff --git a/abs/core-testing/tzdata/PKGBUILD b/abs/core-testing/tzdata/PKGBUILD
new file mode 100644
index 0000000..544f1c7
--- /dev/null
+++ b/abs/core-testing/tzdata/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 8190 2008-08-08 21:11:59Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=tzdata
+pkgver=2008e
+pkgrel=10
+_tzcode=2008e
+_tzdata=2008e
+pkgdesc="Sources for time zone and daylight saving time data"
+arch=('i686' 'x86_64')
+url="http://www.twinsun.com/tz/tz-link.htm"
+license=('GPL')
+groups=('base')
+depends=()
+makedepends=()
+options=()
+source=(ftp://elsie.nci.nih.gov/pub/tzcode${_tzcode}.tar.gz \
+ ftp://elsie.nci.nih.gov/pub/${pkgname}${_tzdata}.tar.gz \
+ Makefile.patch)
+md5sums=('12ec2d85324ddcba39db1471a03f486b'
+ '3b4578110a3d193ed9a00d61f27aba28'
+ 'a64ed97d1fc03c66ee8612c0d9f40507')
+
+build() {
+ cd ${srcdir}/
+
+ tar -xf tzcode${_tzcode}.tar.gz || return 1
+ tar -xf ${pkgname}${_tzdata}.tar.gz || return 1
+
+ patch -Np1 -i ../Makefile.patch || return 1
+
+ make || return 1
+ make DESTDIR="${pkgdir}" install
+
+ rm ${pkgdir}/usr/share/zoneinfo/localtime
+}
diff --git a/abs/core-testing/tzdata/chile.patch b/abs/core-testing/tzdata/chile.patch
new file mode 100644
index 0000000..38c389c
--- /dev/null
+++ b/abs/core-testing/tzdata/chile.patch
@@ -0,0 +1,65 @@
+------- southamerica -------
+*** southamerica Wed Mar 5 14:40:25 2008
+--- southamerica Wed Mar 5 14:40:25 2008
+***************
+*** 1,4 ****
+! # @(#)southamerica 8.15
+ # <pre>
+
+ # This data is by no means authoritative; if you think you know better,
+--- 1,4 ----
+! # @(#)southamerica 8.18
+ # <pre>
+
+ # This data is by no means authoritative; if you think you know better,
+***************
+*** 759,764 ****
+--- 759,784 ----
+ # America/Santiago. The pre-1980 Pacific/Easter data are dubious,
+ # but we have no other source.
+
++ # From German Poo-Caaman~o (2008-03-03):
++ # Due to drought, Chile extends Daylight Time in three weeks. This
++ # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
++ # and Saturday 3/29 at 22:00 for Pacific/Easter)
++ # The Supreme Decree is located at
++ # <a href="http://www.shoa.cl/servicios/supremo316.pdf">
++ # http://www.shoa.cl/servicios/supremo316.pdf
++ # </a>
++ # and the instructions for 2008 are located in:
++ # <a href="http://www.horaoficial.cl/cambio.htm">
++ # http://www.horaoficial.cl/cambio.htm
++ # </a>.
++
++ # From José Miguel Garrido (2008-03-05):
++ # ...
++ # You could see the announces of the change on
++ # <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
++ # http://www.shoa.cl/noticias/2008/04hora/hora.htm
++ # </a>.
++
+ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+ Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
+ Rule Chile 1928 1932 - Apr 1 0:00 0 -
+***************
+*** 789,795 ****
+ Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+ Rule Chile 1999 only - Apr 4 3:00u 0 -
+ Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+! Rule Chile 2000 max - Mar Sun>=9 3:00u 0 -
+ # IATA SSIM anomalies: (1992-02) says 1992-03-14;
+ # (1996-09) says 1998-03-08. Ignore these.
+ # Zone NAME GMTOFF RULES FORMAT [UNTIL]
+--- 809,819 ----
+ Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+ Rule Chile 1999 only - Apr 4 3:00u 0 -
+ Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+! Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
+! # N.B.: the end of March 29 in Chile is March 30 in Universal time,
+! # which is used below in specifying the transition.
+! Rule Chile 2008 only - Mar 30 3:00u 0 -
+! Rule Chile 2009 max - Mar Sun>=9 3:00u 0 -
+ # IATA SSIM anomalies: (1992-02) says 1992-03-14;
+ # (1996-09) says 1998-03-08. Ignore these.
+ # Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
diff --git a/abs/core-testing/udev/00-load-blacklist.rules b/abs/core-testing/udev/00-load-blacklist.rules
new file mode 100644
index 0000000..b1a5faf
--- /dev/null
+++ b/abs/core-testing/udev/00-load-blacklist.rules
@@ -0,0 +1 @@
+IMPORT{program} = "/lib/udev/mod-blacklist.sh"
diff --git a/abs/core-testing/udev/51-arch.rules b/abs/core-testing/udev/51-arch.rules
new file mode 100644
index 0000000..b06be93
--- /dev/null
+++ b/abs/core-testing/udev/51-arch.rules
@@ -0,0 +1,191 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+# do not edit this file, it will be overwritten on update
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+# check if the device has already been claimed by a driver
+ACTION!="add", GOTO="drivers_end"
+DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+
+# SCSI addon modules
+SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+
+# SOUND addon modules
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-pcm-oss"
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-seq-oss"
+
+#PNP addon modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0800", RUN+="/lib/udev/load-modules.sh pcspkr"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc_cmos"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0510*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0511*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNPb02f", RUN+="/lib/udev/load-modules.sh analog"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0501", RUN+="/lib/udev/load-modules.sh ppp-generic"
+
+# PARPORT addon modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh lp"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh ppdev"
+
+# fix ide cdrom detection on old proliant servers
+SUBSYSTEM=="pci", ENV{MODALIAS}=="pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00", RUN+="/lib/udev/load-modules.sh ide-generic"
+
+LABEL="drivers_end"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="cdsymlinks.sh"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+#####################################
+# Permissions and Symlinks - begin
+#####################################
+# fix /dev/root symlink
+SUBSYSTEM=="block", RUN+="root-link.sh"
+
+# permissions for IDE CD devices
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
+
+# permissions for SCSI CD devices
+SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", SYMLINK+="scd%n", GROUP="optical"
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", GROUP="optical"
+
+# permissions for removable devices like cardreaders or sticks
+KERNEL=="sd*", ATTRS{scsi_level}=="0", ATTRS{type}=="0", GROUP="storage"
+
+# permissions for firewire external drives
+KERNEL=="sd*", ATTRS{scsi_level}=="5", GROUP="storage"
+
+# permissions for usb to scsi external adapters
+KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="7", GROUP="storage"
+
+# permissions for ide storage like pcmcia card readers
+ACTION!="add", GOTO="pcmcia_end"
+SUBSYSTEM!="block", GOTO="pcmcia_end"
+KERNEL=="hd*[!0-9]", IMPORT{program}="ata_id --export $tempnode"
+KERNEL=="hd*", IMPORT{parent}=="ID_*"
+KERNEL=="hd*", ENV{ID_TYPE}=="generic", GROUP="storage"
+LABEL="pcmcia_end"
+
+# permissions for SCSI scanners
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="6", GROUP="scanner"
+
+# md block devices
+KERNEL=="md[0-9]*", NAME="md%n", SYMLINK+="md/%n"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+### xorg resets those permissions, adjust your xorg.conf!
+KERNEL=="nvidia*", GROUP="video"
+KERNEL=="3dfx*", GROUP="video"
+
+# i2c devices
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n", SYMLINK+="%k"
+
+# loop devices
+KERNEL=="loop[0-9]*", NAME="loop/%n", SYMLINK+="%k"
+
+# misc
+KERNEL=="nvram", NAME="misc/%k", SYMLINK+="%k", GROUP="kmem", MODE="0640"
+KERNEL=="psaux", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666"
+
+# sound devices
+# alsa devices
+SUBSYSTEM=="sound", GROUP="audio"
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hw[CD0-9]*", NAME="snd/%k"
+KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k"
+KERNEL=="midi[CD0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+# oss devices
+KERNEL=="audio*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dmmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="admmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="adsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="midi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="amidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="mixer*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="sequencer*", NAME="sound/%k", SYMLINK+="%k"
+
+# USB devices
+KERNEL=="hiddev*", NAME="usb/%k"
+KERNEL=="legousbtower*", NAME="usb/%k", MODE="0666"
+KERNEL=="dabusb*", NAME="usb/%k"
+
+# netlink devices
+KERNEL=="route", NAME="netlink/%k"
+KERNEL=="skip", NAME="netlink/%k"
+KERNEL=="usersock", NAME="netlink/%k"
+KERNEL=="fwmonitor", NAME="netlink/%k"
+KERNEL=="tcpdiag", NAME="netlink/%k"
+KERNEL=="nflog", NAME="netlink/%k"
+KERNEL=="xfrm", NAME="netlink/%k"
+KERNEL=="arpd", NAME="netlink/%k"
+KERNEL=="route6", NAME="netlink/%k"
+KERNEL=="ip6_fw", NAME="netlink/%k"
+KERNEL=="dnrtmsg", NAME="netlink/%k"
+### ! disabled seems to break device creation !
+# KERNEL=="tap*", NAME="netlink/%k"
+
+# CAPI devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20", GROUP="uucp"
+KERNEL=="capi*", NAME="capi/%n", GROUP="uucp"
+
+# IEEE1394 (firewire) devices
+KERNEL=="raw1394", NAME="%k", GROUP="video"
+
+# kbd devices
+KERNEL=="kbd", MODE="0664"
+
+#######################################
+# Permissions and Symlinks - end
+#######################################
diff --git a/abs/core-testing/udev/PKGBUILD b/abs/core-testing/udev/PKGBUILD
new file mode 100644
index 0000000..7c71a08
--- /dev/null
+++ b/abs/core-testing/udev/PKGBUILD
@@ -0,0 +1,82 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+pkgname=udev
+pkgver=119
+pkgrel=10
+pkgdesc="The userspace dev tools (udev)"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'coreutils' 'util-linux')
+install=udev.install
+backup=(etc/udev/udev.conf
+ etc/scsi_id.config
+ etc/udev/cdsymlinks.conf
+ etc/modprobe.d/framebuffer_blacklist)
+conflicts=('pcmcia-cs' 'hotplug')
+replaces=('devfsd')
+options=(!makeflags)
+source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/$pkgname-$pkgver.tar.bz2
+ migrate-udev start_udev 51-arch.rules load-modules.sh
+ cdrom-rules.patch cdsymlinks.sh root-link.sh readme-udev-arch.txt arch-udev-rules.patch)
+md5sums=('dd299c16371c9e14e52d79744bccf4c0'
+ '49434a593918c822077bc3af765f1aff'
+ 'a68a519d1ed8cbbd2f45c23eb32ea218'
+ '082e76ef9053495a5cade321817467cd'
+ '945f6d30ab458189b3c17f8e6722da1f'
+ '5de33ba31ce52ab4da47fe3ddd3c19ea'
+ '8424b78e9dd772e75b4ef90814807815'
+ '2d6dc6842464f107bccc68cd505a6c31'
+ '780db5316a762dc5cdcf52027ab8a8eb'
+ 'fab7fa68aa35f0595c0b2bd88c4dbfd9')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ make INSTALL=/bin/install DESTDIR=$startdir/pkg install \
+ EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id extras/firmware extras/floppy extras/scsi_id extras/usb_id extras/volume_id extras/path_id extras/rule_generator"
+
+ install -D -m755 extras/path_id/path_id $startdir/pkg/sbin/path_id
+ install -D -m755 $startdir/src/start_udev $startdir/pkg/etc/start_udev
+ install -D -m755 $startdir/src/migrate-udev $startdir/pkg/sbin/migrate-udev
+ install -D -m644 $startdir/src/51-arch.rules $startdir/pkg/etc/udev/rules.d/51-arch.rules
+ # install our module loading subsystem
+ install -D -m755 $startdir/src/load-modules.sh $startdir/pkg/lib/udev/load-modules.sh
+ # install cdsymlinks.sh
+ install -D -m755 $startdir/src/cdsymlinks.sh $startdir/pkg/lib/udev/cdsymlinks.sh
+ # install root-link.sh
+ install -D -m755 $startdir/src/root-link.sh $startdir/pkg/lib/udev/root-link.sh
+ # install instructions
+ install -D -m644 $startdir/src/readme-udev-arch.txt $startdir/pkg/etc/udev/readme-udev-arch.txt
+ # add devices dir
+ mkdir $startdir/pkg/lib/udev/devices
+ # disable error loggin to prevent startup failures printed to vc on boot
+ sed -i -e 's|udev_log="err"|udev_log="0"|g' $startdir/pkg/etc/udev/udev.conf
+ # install additional rules files
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/40-pilot-links.rules $startdir/pkg/etc/udev/rules.d/
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/64-device-mapper.rules $startdir/pkg/etc/udev/rules.d/
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/64-md-raid.rules $startdir/pkg/etc/udev/rules.d/
+ # fix 60-cdrom_id.rules
+ cd $startdir/pkg/etc/udev/rules.d/
+ patch -Np0 -i $startdir/src/cdrom-rules.patch || return 1
+ # fix standard udev rules to fit to arch
+ patch -Np0 -i $startdir/src/arch-udev-rules.patch || return 1
+ # fix program paths in rules files
+ for i in vol_id cdrom_id ata_id scsi_id path_id edd_id usb_id; do
+ sed -i -e "s#$i#/lib/udev/$i#g" $startdir/pkg/etc/udev/rules.d/*
+ done
+ # fix modprobe rules to use the load-modules.sh
+ sed -i -e "s#/sbin/modprobe#/lib/udev/load-modules.sh#g" $startdir/pkg/etc/udev/rules.d/*
+ # disable persistent cdromsymlinks and network by default
+ mv $startdir/pkg/etc/udev/rules.d/75-persistent-net-generator.rules \
+ $startdir/pkg/etc/udev/rules.d/75-persistent-net-generator.rules.optional
+ mv $startdir/pkg/etc/udev/rules.d/75-cd-aliases-generator.rules \
+ $startdir/pkg/etc/udev/rules.d/75-cd-aliases-generator.rules.optional
+ # create framebuffer blacklist
+ mkdir -p $startdir/pkg/etc/modprobe.d/
+ for mod in $(find /lib/modules/ -name '*fb*.ko' -exec basename {} .ko \;); do
+ echo "blacklist $mod" >> $startdir/pkg/etc/modprobe.d/framebuffer_blacklist
+ done
+}
diff --git a/abs/core-testing/udev/arch-udev-rules.patch b/abs/core-testing/udev/arch-udev-rules.patch
new file mode 100644
index 0000000..fc5ede0
--- /dev/null
+++ b/abs/core-testing/udev/arch-udev-rules.patch
@@ -0,0 +1,151 @@
+--- 50-udev-default.rules.old 2008-03-09 17:52:59.000000000 +0100
++++ 50-udev-default.rules 2008-03-09 17:09:50.000000000 +0100
+@@ -4,12 +4,17 @@
+ KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"
+ KERNEL=="ptmx", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+ KERNEL=="tty", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+-KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", OPTIONS="last_rule"
+-KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty", OPTIONS="last_rule"
++KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", NAME="vc/%n", SYMLINK+="%k" OPTIONS="last_rule"
++KERNEL=="vcs", GROUP="tty", NAME="vcc/0", OPTIONS="last_rule"
++KERNEL=="vcs[0-9]*", GROUP="tty", NAME="vcc/%n", OPTIONS="last_rule"
++KERNEL=="vcsa", GROUP="tty", NAME="vcc/a0", OPTIONS="last_rule"
++KERNEL=="vcsa[0-9]*", GROUP="tty", NAME="vcc/a%n", OPTIONS="last_rule"
+ KERNEL=="console", MODE="0600", OPTIONS="last_rule"
+
+ # serial
+ KERNEL=="tty[A-Z]*|pppox*|ircomm*|noz*", GROUP="uucp"
++KERNEL=="ttyS[0-9]*", NAME="tts/%n", SYMLINK+="ttyS%n"
++KERNEL=="ttyUSB[0-9]*", NAME="tts/USB%n", SYMLINK+="%k"
+ KERNEL=="ppp", MODE="0600", OPTIONS+="ignore_remove"
+ KERNEL=="mwave", NAME="modems/mwave", GROUP="uucp"
+ KERNEL=="hvc*|hvsi*", GROUP="uucp"
+@@ -20,8 +25,7 @@
+ KERNEL=="null|zero|full|random|urandom", MODE="0666"
+ KERNEL=="null", SYMLINK+="XOR"
+ KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
+-KERNEL=="ram0", SYMLINK+="ramdisk"
+-KERNEL=="ram1", SYMLINK+="ram"
++KERNEL=="ram[0-9]*", NAME="rd/%n", SYMLINK+="%k"
+
+ # input
+ KERNEL=="mouse*|mice|event*", NAME="input/%k", MODE="0640"
+@@ -30,23 +34,30 @@
+
+ # video4linux
+ KERNEL=="vbi0", SYMLINK+="vbi"
++KERNEL=="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK+="%k", GROUP="video"
+ KERNEL=="radio0", SYMLINK+="radio"
++KERNEL=="radio[0-9]*", NAME="v4l/radio%n", SYMLINK+="radio%n", GROUP="video"
+ KERNEL=="video0", SYMLINK+="video"
++KERNEL=="video[0-9]*", NAME="v4l/video%n", SYMLINK+="%k", GROUP="video"
++KERNEL=="vtx0", SYMLINK+="vtx"
++KERNEL=="vtx[0-9]*", NAME="v4l/vtx%n", SYMLINK+="%k", GROUP="video"
+
+ # graphics
+-KERNEL=="agpgart", MODE="0600"
+-KERNEL=="card[0-9]*", NAME="dri/%k", MODE="0666"
++### xorg resets those permissions, adjust your xorg.conf!
++KERNEL=="agpgart", NAME="misc/%k", SYMLINK+="%k", GROUP="video", MODE="0600"
++KERNEL=="card[0-9]*", NAME="dri/%k", GROUP="video", MODE="0666"
++KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video"
+ KERNEL=="fb0", SYMLINK+="fb"
+
+ # DVB video
+-SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c"
++SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c", GROUP="video"
+
+ # Firewire
+-KERNEL=="dv1394*", SYMLINK+="dv1394/%n"
+-KERNEL=="video1394*", NAME="video1394/%n"
++KERNEL=="dv1394*", SYMLINK+="dv1394/%n", GROUP="video"
++KERNEL=="video1394*", NAME="video1394/%n", GROUP="video"
+
+ # firmware class requests
+-SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
++SUBSYSTEM=="firmware", ACTION=="add", ENV{FIRMWARE}=="?*", RUN+="firmware.sh"
+
+ # libusb device nodes
+ SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
+@@ -59,23 +70,20 @@
+ KERNEL=="irlpt[0-9]*", GROUP="lp"
+
+ # block, tapes, block-releated
+-SUBSYSTEM=="block", GROUP="disk", MODE="0640"
+-SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n"
++SUBSYSTEM=="block", GROUP="disk"
+ SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+ SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+-KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
+-KERNEL=="fd[0-9]", GROUP="floppy"
+-KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
++KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions", GROUP="floppy"
++KERNEL=="fd[0-9]*", NAME="fd%n", SYMLINK+="floppy/%n fd%nu1440 fd%nu720 fd%nh1200 fd%nu360", GROUP="floppy"
+ KERNEL=="sch[0-9]*", GROUP="disk"
+-KERNEL=="sg[0-9]*", ATTRS{type}!="3|6", GROUP="disk", MODE="0640"
+ KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="disk"
+ KERNEL=="pg[0-9]*", GROUP="disk"
+ KERNEL=="pt[0-9]*|npt[0-9]*", GROUP="disk"
+ KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
+ KERNEL=="rawctl", NAME="raw/%k", GROUP="disk"
+ SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", NAME="raw/%k", GROUP="disk"
+-KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k"
+-KERNEL=="pktcdvd", NAME="pktcdvd/control"
++KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k", GROUP="optical", MODE="0660"
++KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="optical", MODE="0660"
+ KERNEL=="qft0", SYMLINK+="ftape"
+ SUBSYSTEM=="bsg", NAME="bsg/%k"
+ SUBSYSTEM=="aoe", NAME="etherd/%k", GROUP="disk"
+@@ -84,13 +92,13 @@
+ KERNEL=="tun", NAME="net/%k", MODE="0666", OPTIONS+="ignore_remove"
+
+ # CPU
+-KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+-KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
++KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid", SYMLINK="%k"
++KERNEL=="msr[0-9]*", NAME="cpu/%n/msr", SYMLINK="%k"
+ KERNEL=="microcode", NAME="cpu/microcode", MODE="0600"
+
+ # miscellaneous
+ KERNEL=="fuse", MODE="0666"
+-KERNEL=="rtc|rtc0", MODE="0644"
++KERNEL=="rtc*", NAME="misc/%k", SYMLINK+="%k", GROUP="audio", MODE="0664"
+ KERNEL=="rtc0", SYMLINK+="rtc"
+ KERNEL=="auer[0-9]*", NAME="usb/%k"
+ KERNEL=="hw_random", NAME="hwrng", SYMLINK+="%k"
+--- 60-persistent-storage.rules.old 2008-03-09 17:52:59.000000000 +0100
++++ 60-persistent-storage.rules 2008-03-09 15:05:13.000000000 +0100
+@@ -3,11 +3,13 @@
+ # persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path}
+ # scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+-ACTION!="add|change", GOTO="persistent_storage_end"
++# needed like this!!!
++ACTION!="add|change", GOTO="persistent_storage_end"
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++# don't add dm-*!!!
++KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+--- 80-drivers.rules~ 2008-03-15 00:05:02.000000000 +0100
++++ 80-drivers.rules 2008-03-21 21:44:28.000000000 +0100
+@@ -3,10 +3,11 @@
+ ACTION!="add", GOTO="drivers_end"
+
+ DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/sbin/modprobe $env{MODALIAS}"
+-SUBSYSTEM=="pnp", DRIVER!="?*", ENV{MODALIAS}!="?*", \
+- RUN{ignore_error}+="/bin/sh -c '/sbin/modprobe -a $$(while read id; do echo pnp:d$$id; done < /sys$devpath/id)'"
+-SUBSYSTEM=="tifm", RUN+="/sbin/modprobe --all tifm_sd tifm_ms"
+-SUBSYSTEM=="memstick", RUN+="/sbin/modprobe --all ms_block mspro_block"
++SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", DRIVER!="?*", RUN{ignore_error}+="/bin/sh -c 'while read id; do /lib/udev/load-modules.sh pnp:d$$id; /lib/udev/load-modules.sh pnp:c$$id ; done < /sys$devpath/id'"
++SUBSYSTEM=="tifm", RUN+="/sbin/modprobe tifm_sd"
++SUBSYSTEM=="tifm", RUN+="/sbin/modprobe tifm_ms"
++SUBSYSTEM=="memstick", RUN+="/sbin/modprobe ms_block"
++SUBSYSTEM=="memstick", RUN+="/sbin/modprobe mspro_block"
+ SUBSYSTEM=="mmc", RUN+="/sbin/modprobe mmc_block"
+ SUBSYSTEM=="i2o", RUN+="/sbin/modprobe i2o_block"
+ SUBSYSTEM=="ide", ATTR{media}=="tape", RUN+="/sbin/modprobe ide-scsi"
diff --git a/abs/core-testing/udev/cdrom-rules.patch b/abs/core-testing/udev/cdrom-rules.patch
new file mode 100644
index 0000000..9b3518a
--- /dev/null
+++ b/abs/core-testing/udev/cdrom-rules.patch
@@ -0,0 +1,8 @@
+--- 60-cdrom_id.rules.old 2006-09-07 09:57:04.000000000 +0200
++++ 60-cdrom_id.rules 2006-09-07 11:29:31.000000000 +0200
+@@ -1,3 +1,4 @@
+ # import optical drive properties
+
+-KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
++KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
++KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="path_id %p"
diff --git a/abs/core-testing/udev/cdsymlinks.sh b/abs/core-testing/udev/cdsymlinks.sh
new file mode 100755
index 0000000..c4185ac
--- /dev/null
+++ b/abs/core-testing/udev/cdsymlinks.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Creates cdsymlinks in /dev
+# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+if [ -d /dev/cd ]; then
+ rm /dev/cdrom*
+ rm /dev/cdrw*
+ rm /dev/dvd*
+ rm /dev/dvdrw*
+ for i in /dev/cd/cdrom-*; do
+ if [ -h $i ]; then
+ [ "$CD_NUMBER" = "" ] && ln -s $i /dev/cdrom
+ [ "$CD_NUMBER" = "" ] && CD_NUMBER="-1"
+ ! [ "$CD_NUMBER" = "" ] && CD_NUMBER="$((CD_NUMBER+1))" && ln -s $i /dev/cdrom$CD_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/cdrw-*; do
+ if [ -h $i ]; then
+ [ "$CDRW_NUMBER" = "" ] && ln -s $i /dev/cdrw
+ [ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="-1"
+ ! [ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="$((CDRW_NUMBER+1))" && ln -s $i /dev/cdrw$CDRW_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/dvd-*; do
+ if [ -h $i ]; then
+ [ "$DVD_NUMBER" = "" ] && ln -s $i /dev/dvd
+ [ "$DVD_NUMBER" = "" ] && DVD_NUMBER="-1"
+ ! [ "$DVD_NUMBER" = "" ] && DVD_NUMBER="$((DVD_NUMBER+1))" && ln -s $i /dev/dvd$DVD_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/dvdrw-*; do
+ if [ -h $i ]; then
+ [ "$DVDRW_NUMBER" = "" ] && ln -s $i /dev/dvdrw
+ [ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="-1"
+ ! [ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="$((DVDRW_NUMBER+1))" && ln -s $i /dev/dvdrw$DVDRW_NUMBER
+ fi
+ done
+else
+ rm /dev/cdrom*
+ rm /dev/cdrw*
+ rm /dev/dvd*
+ rm /dev/dvdrw*
+fi
diff --git a/abs/core-testing/udev/load-modules.sh b/abs/core-testing/udev/load-modules.sh
new file mode 100755
index 0000000..861b942
--- /dev/null
+++ b/abs/core-testing/udev/load-modules.sh
@@ -0,0 +1,60 @@
+#! /bin/bash
+# Implement blacklisting for udev-loaded modules
+
+[ $# -ne 1 ] && exit 1
+
+. /etc/rc.conf
+
+# grab modules from rc.conf
+BLACKLIST="${MOD_BLACKLIST[@]}"
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+ #parse cmdline entries of the form "disablemodules=x,y,z"
+ if [ -n "$disablemodules" ]; then
+ BLACKLIST="$BLACKLIST $(echo $disablemodules | sed 's|,| |g')"
+ fi
+ if [ "$load_modules" == "off" ]; then
+ MOD_AUTOLOAD="no"
+ fi
+fi
+
+#MODULES entries in rc.conf that begin with ! are blacklisted
+for mod in ${MODULES[@]}; do
+ if [ "${mod}" != "${mod#!}" ]; then
+ BLACKLIST="$BLACKLIST ${mod#!}"
+ fi
+done
+
+
+if [ "$MOD_AUTOLOAD" = "yes" -o "$MOD_AUTOLOAD" = "YES" ]; then
+ if [ -n "$BLACKLIST" ]; then
+ depmods="$(/sbin/modprobe -i --show-depends $1)"
+ if [ $? -ne 0 ]; then
+ /usr/bin/logger -p info "cannot find module $1"
+ exit 1
+ fi
+
+ #sanitize our module names
+ depmods="$(echo "$depmods" | sed \
+ -e "s#^insmod /lib.*/\(.*\)\.ko.*#\1#g" \
+ -e 's|-|_|g')"
+
+ for mod in $depmods; do
+ if echo $BLACKLIST | /bin/grep "\<$mod\>" 2>&1 >/dev/null; then
+ /usr/bin/logger -p info "udev load-modules: $1 is blacklisted"
+ exit 1
+ fi
+ done
+ fi
+ /sbin/modprobe $1
+else
+ #/usr/bin/logger -p info \
+ echo \
+ "udev load-modules: autoloading is disabled, not loading $1"
+fi
+# vim: set et ts=4:
diff --git a/abs/core-testing/udev/migrate-udev b/abs/core-testing/udev/migrate-udev
new file mode 100644
index 0000000..a7a24c9
--- /dev/null
+++ b/abs/core-testing/udev/migrate-udev
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# This script will create static system-critical device nodes in your /dev
+# tree so the initscripts can get by without devfs/udev long enough to start
+# up devfs/udev.
+
+STARTDIR=`pwd`
+TMPDIR=`mktemp -d`
+ROOT=/
+[ "$1" != "" ] && ROOT=$1
+
+mount --bind $ROOT $TMPDIR
+cd $TMPDIR
+
+echo -n "creating device nodes: "
+rm -f dev/console
+rm -f dev/null
+rm -f dev/zero
+mknod dev/console c 5 1
+echo -n "console "
+mknod -m 666 dev/null c 1 3
+echo -n "null "
+mknod -m 666 dev/zero c 1 5
+echo -n "zero "
+echo
+
+cd $STARTDIR
+umount $TMPDIR
+rm -rf $TMPDIR
diff --git a/abs/core-testing/udev/mod-blacklist.sh b/abs/core-testing/udev/mod-blacklist.sh
new file mode 100755
index 0000000..264192a
--- /dev/null
+++ b/abs/core-testing/udev/mod-blacklist.sh
@@ -0,0 +1,47 @@
+#! /bin/bash
+# Export a combined blacklist of all modules
+# for use by the load-modules script
+#
+# NOTE: we only need bash because of rc.conf, but this
+# is a one-time use script, so we're good
+
+. /etc/rc.conf
+
+# grab modules from rc.conf
+BLACKLIST="${MOD_BLACKLIST[@]}"
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+ #parse cmdline entries of the form "disablemodules=x,y,z"
+ if [ -n "$disablemodules" ]; then
+ BLACKLIST="$BLACKLIST $(echo $disablemodules | sed 's|,| |g')"
+ fi
+ if [ "$load_modules" == "off" ]; then
+ MOD_AUTOLOAD="no"
+ fi
+fi
+
+# blacklist framebuffer modules
+DRIVER_DIR="/lib/modules/$(uname -r)/kernel/drivers/"
+for x in $DRIVER_DIR/video/*/*fb*; do
+ BLACKLIST="$BLACKLIST $(basename $x .ko)"
+done
+for x in $DRIVER_DIR/video/*fb*; do
+ BLACKLIST="$BLACKLIST $(basename $x .ko)"
+done
+
+#MODULES entries in rc.conf that begin with ! are blacklisted
+for mod in ${MODULES[@]}; do
+ if [ "${mod}" != "${mod#!}" ]; then
+ BLACKLIST="$BLACKLIST ${mod#!}"
+ fi
+done
+
+echo "MOD_AUTOLOAD=\"$MOD_AUTOLOAD\""
+echo "BLACKLIST=\"$BLACKLIST\""
+
+# vim: set et ts=4:
diff --git a/abs/core-testing/udev/readme-udev-arch.txt b/abs/core-testing/udev/readme-udev-arch.txt
new file mode 100644
index 0000000..ac4a693
--- /dev/null
+++ b/abs/core-testing/udev/readme-udev-arch.txt
@@ -0,0 +1,264 @@
+==========================
+Cold/Hotplugging with Udev
+==========================
+Version 1.1.5
+written by Tobias Powalowski <tpowa@archlinux.org>
+
+---------------
+* Requirements:
+---------------
+- recommended kernel >=2.6.18 for this udev to work properly.
+- No more DevFS device paths! If you have them, update /etc/fstab:
+ /dev/discs/... etc. has been deprecated in favor of the old style:
+ /dev/discs/disc0/part1 -> /dev/hda1
+ /dev/discs/disc1/part2 -> /dev/hdb2
+- /etc/modprobe.conf should be cleaned from old install entries (see below).
+
+---------------
+* Udev Changes:
+---------------
+- The syntax of udev rules has been changed in >=098 release, please update your rules.
+ --- Snip Changelog Udev 098
+ Renaming of some key names:
+ BUS -> SUBSYSTEMS
+ ID -> KERNELS
+ SYSFS -> ATTRS
+ DRIVER -> DRIVERS
+ ATTR{file}="value" can be used now, to write to a sysfs file of the
+ event device. Instead of:
+ ..., SYSFS{type}=="0|7|14", RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'"
+ we now can do:
+ ..., ATTR{type}=="0|7|14", ATTR{timeout}="60"
+ All the PHYSDEV* keys are deprecated and will be removed from a
+ future kernel:
+ PHYDEVPATH - is the path of a parent device and should not be
+ needed at all.
+ PHYSDEVBUS - is just a SUBSYSTEM value of a parent, and can be
+ matched with SUBSYSTEMS==
+ PHYSDEVDRIVER - for bus devices it is available as ENV{DRIVER}.
+ Newer kernels will have DRIVER in the environment,
+ for older kernels udev puts in. Class device will
+ no longer carry this property of a parent and
+ DRIVERS== can be used to match such a parent value.
+ Note that ENV{DRIVER} is only available for a few bus devices, where
+ the driver is already bound at device event time. On coldplug, the
+ events for a lot devices are already bound to a driver, and they will have
+ that value set. But on hotplug, at the time the kernel creates the device,
+ it can't know what driver may claim the device after that, therefore
+ in most cases it will be empty.
+ --- snap Changelog Udev 098
+- optional udev >= 099 Persistent rules generator for network and cd/dvd devices was added.
+
+---------------
+* How it works:
+---------------
+- Udev replaces the functionality of hotplug and hwdetect scripts.
+- Udev does autoloading of modules and coldplugging.
+- Udev loads the modules simultaneously, which is much faster,
+ but can cause some troubles with multiple network/sound/etc devices
+ (see below).
+- To reload your rules please use /etc/start_udev.
+
+======================
+* Autoloading modules:
+======================
+
+-------------------------------------------------------------------------
+* Module autoloading is controlled by MOD_AUTOLOAD="" in /etc/rc.conf
+-------------------------------------------------------------------------
+MOD_AUTOLOAD="yes" in /etc/rc.conf is necessary:
+- if you want module autodetection
+- if you want modules be loaded by udev (hotplugging and coldplugging)
+
+MOD_AUTOLOAD="no" is necessary:
+- if you want to load modules strictly using 'modprobe <module>'
+- if you want to load only the modules listed in the MODULES=() array
+ in /etc/rc.conf
+
+---------------
+* Blacklisting:
+---------------
+- means udev will never try to load the module, even if MOD_AUTOLOAD="yes"
+ is set.
+
+You can do this in 2 ways:
+- MOD_BLACKLIST=(moduleA moduleB)
+- MODULES=(!moduleA !moduleB)
+
+Both entries mean the same thing to udev. MOD_BLACKLIST was used by hwdetect.
+hwdetect does not understand the MODULES= syntax, but it doesn't have to -- it
+is only used in mkinitrd now.
+
+==================================
+* Boot parameter: load_modules=off
+==================================
+
+- No modules are loaded during boot using udev autoloading or the MODULES array
+- Useful for repairing your system if something goes wrong during udev startup
+ and/or during loading modules
+
+==================================
+* Boot parameter: disablemodules=
+==================================
+
+- list modules there that shouldn't be loaded by udev
+- Syntax: disablemodules=module1,module2,module3,...
+- Useful for repairing your system if something goes wrong during udev startup
+ and/or during loading modules and you know the module that causes the trouble.
+
+========================================
+* Persistent CD/DVD symlinks (optional):
+========================================
+
+- To enable this feature copy in /etc/udev/rules.d
+ 75-cd-aliases-generator.rules.optinal
+ to 75-cd-aliases-generator.rules
+ Also disable this part in /etc/udev/rules.d/40-arch.rules by putting a # in front:
+ --- snip
+ ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+--- snap
+
+- To get the same device name for CD/DVD symlinks each time you boot,
+ a rule will be generated during bootup or by executing /etc/start_udev.
+- Examples: dvd, cdrom ,cdrw etc.
+- If you want to change those links,
+ modify '/etc/udev/rules.d/70-peristent-cd.rules' to your needs.
+
+Known issues:
+The symlink name is then bound to the hardware pci adress,
+if you change your CD/DVD device, you have to check the
+/etc/udev/rules.d/70-peristent-net.rules file for correctness.
+
+======================================
+* Persistent Network names (optional):
+======================================
+
+- To enable this feature copy in /etc/udev/rules.d
+ 75-persistent-net-generator.rules.optional
+ to 75-persistent-net-generator.rules
+- To get the same network device name each time you boot,
+ a rule will be generated during bootup or by executing /etc/start_udev.
+- Examples: eth0, eth1, wlan0 etc.
+- If you want to change those names,
+ modify '/etc/udev/rules.d/70-peristent-net.rules' to your needs.
+- NAME= determines the name of your network card. Use these names in your
+ network configuration in rc.conf as well.
+
+Known issues:
+The interface name is then bound to the hardware mac adress,
+if you change your network card, you have to check the
+/etc/udev/rules.d/70-peristent-net.rules file for correctness.
+
+====================================
+* Known Problems Hardware:
+====================================
+
+- BusLogic devices are broken and will cause a freeze during startup
+Solution:
+This is a kernel bug and no fix has been provided yet.
+
+- PCMCIA Card readers are not treated as removabel devices.
+Solution:
+To get access to them with hal's pmount backend add them to /etc/pmount.allow
+
+====================================
+* Known Problems MOD_AUTOLOAD="yes":
+====================================
+
+-----------------------------------------------------------------------------
+* Sound is not working or modules (eg. parport) are not loaded automatically:
+-----------------------------------------------------------------------------
+Solution:
+- Do you have a clean /etc/modprobe.conf?
+ - A clean /etc/modprobe.conf is empty. The stock modprobe.conf file
+ contains nothing
+- alsaconf can write output to modprobe.conf. Please keep that in mind.
+
+---------------------------------------------
+* Devices get mixed up eg. Network/Soundcards
+---------------------------------------------
+- Because udev loads all the modules at once, sometimes devices are initialized
+ in different orders (eg. network cards switch eth0 and eth1, sound cards
+ the same)
+
+Solution:
+- Load them in MODULES=() array in the order you need them
+- eg: MODULES=(moduleA moduleB)
+
+Second solution for network:
+- The "proper" way to configure net interfaces to hold static names within
+ udev rules. Add lines like these to a custom rules file such as
+ /etc/udev/rules.d/01-network.rules:
+ SUBSYSTEM=="net", SYSFS{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
+ SUBSYSTEM=="net", SYSFS{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"
+
+- To get the right mac address use this command:
+ udevinfo -a -p /sys/class/net/<yourdevice>
+- Make sure you use lower-case hex values in your udev rules.
+- NAME= determines the name of your network card. Use these names in your
+ network configuration in rc.conf as well.
+
+Third solution for network:
+- check Persistent Network part
+
+-----------------------------------
+* Network 8139too & 8139cp problem:
+-----------------------------------
+- Both modules have the same kernel entry, which can cause problems.
+Solution:
+- Enter the one you need in MODULES=() and blacklist the other one
+- eg: MODULES=(!8139cp 8139too)
+- The example tells udev to ignore 8139cp module and load 8139too afterwards.
+
+--------------------------------------------------------
+* You need a special loading order to get devices going:
+--------------------------------------------------------
+- Kernel loads modules in wrong order.
+Solution:
+- Load them in the correct order in MODULES=()
+
+-----------------------------
+* Module is not autodetected:
+-----------------------------
+- If your device does not provide a modalias in /sys it cannot be autodetected.
+- If modalias is not combined to a kernel module it cannot be autodetected.
+Known modules that are not autodetected:
+- SCSI CONTROLLER:
+ scsi_transport_sas ultrastor qlogicfas eata BusLogic pas16 wd7000 sym53c416
+ g_NCR5380_mmio fdomain u14-34f dtc initio in2000 imm t128 aha1542 aha152x
+ atp870u g_NCR5380 NCR53c406a qlogicfas408 megaraid_mm advansys
+- NETWORK CARDS:
+ hp ne de4x5 wd cs89x0 eepro smc9194 seeq8005 ni52 ni65 ac3200 smc-ultra
+ at1700 hp-plus depca eexpress 82596 de600 eth16i de620 lance ewrk3 e2100
+ lp486e 3c501 3c503 3c505 3c507 3c509 3c515 myri10ge
+Solution:
+- Enter the one you need in MODULES=()
+
+=======================================
+* Known Problems with MOD_AUTOLOAD="no"
+=======================================
+
+-----------------------------------------------------------------
+* Modules are not loaded anymore during coldplug or hotplug event
+-----------------------------------------------------------------
+- Udev is usually responsible for this, but the MOD_AUTOLOAD switch will
+ now disable it. If you want automatic hot/cold-plugging, turn on
+ MOD_AUTOLOAD. Otherwise you will have to load all your modules manually,
+ either with /sbin/modprobe or entries in the MODULES=() array.
+Solution:
+- For bootup (coldplug) enter this in rc.conf: MODULES=(moduleA moduleB)
+- After bootup (hotplug) use this: modprobe <moduleA>
+
+=========================================
+* Known problems for custom kernel users:
+=========================================
+
+----------------------------
+* Udev doesn't start at all:
+----------------------------
+- Check Requirements list
diff --git a/abs/core-testing/udev/root-link.sh b/abs/core-testing/udev/root-link.sh
new file mode 100755
index 0000000..05273fe
--- /dev/null
+++ b/abs/core-testing/udev/root-link.sh
@@ -0,0 +1,7 @@
+#! /bin/sh
+# Creates root symlink in /dev
+# for Arch Linux by Roman Kyrylych <Roman.Kyrylych@gmail.com>
+
+if ! [ -L /dev/root ]; then
+ln -s $(cat /proc/cmdline | sed "s: :\n:g" | grep root= | sed "s:root=::") /dev/root
+fi \ No newline at end of file
diff --git a/abs/core-testing/udev/start_udev b/abs/core-testing/udev/start_udev
new file mode 100755
index 0000000..03c38fd
--- /dev/null
+++ b/abs/core-testing/udev/start_udev
@@ -0,0 +1,137 @@
+#! /bin/sh
+#
+# start_udev
+# script to initialize /dev by using udev.
+#
+# Modified for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# Inspired by:
+#
+# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+#
+# Released under the GPL v2 only.
+#
+# This needs to be run at the earliest possible point in the boot
+# process.
+#
+# Based on the udev init.d script
+#
+# Thanks go out to the Gentoo developers for proving
+# that this is possible to do.
+#
+# Yes, it's very verbose, feel free to turn off all of the echo calls,
+# they were there to make me feel better that everything was working
+# properly during development...
+#
+
+prog=udev
+sysfs_dir=/sys
+bin=/sbin/udev
+udevd=/sbin/udevd
+udev_root="/dev"
+
+starttime=$(date +%s)
+
+
+function trigger_builtin_events() {
+ list="$(echo /sys/class/tty/ttyS*/uevent)"
+ for i in $list; do
+ case "$i" in
+ */class/uevent|*\**)
+ continue
+ ;;
+ */class/tty/ttyS*)
+ echo "add" > "$i"
+ ;;
+ esac
+ done
+ }
+
+function trigger_device_events() {
+ /sbin/udevtrigger
+}
+
+function wait_for_queue() {
+# loop=20
+# while ! [ "$loop" -gt 0 -a -d /dev/.udev/queue ]; do
+# sleep 0.1;
+# loop=$(($loop - 1))
+# done
+ /sbin/udevsettle
+}
+
+make_extra_nodes () {
+ # there are a few things that sysfs does not export for us.
+ # these things go here (and remember to remove them in
+ # remove_extra_nodes()
+ #
+ # Thanks to Gentoo for the initial list of these.
+ ln -snf /proc/self/fd $udev_root/fd
+ ln -snf /proc/self/fd/0 $udev_root/stdin
+ ln -snf /proc/self/fd/1 $udev_root/stdout
+ ln -snf /proc/self/fd/2 $udev_root/stderr
+ ln -snf /proc/kcore $udev_root/core
+
+ mkdir $udev_root/pts
+ mkdir $udev_root/shm
+}
+
+udev_init () {
+# don't use udev if sysfs is not mounted.
+if [ ! -d $sysfs_dir/block ]; then
+ exit 1
+fi
+
+echo "mounting... ramfs at $udev_root"
+mount -n -t ramfs none $udev_root
+
+# propogate /udev from /sys
+echo "Creating initial udev device nodes:"
+
+#echo "making extra nodes"
+make_extra_nodes
+
+# check if udevd is already running
+if [ `pidof -o %PPID /sbin/udevd` ]; then
+ grep -v "/dev/shm" /etc/mtab | grep -v "/dev/pts" > /etc/mtab
+ mount /dev/pts
+ mount /dev/shm
+else
+ echo "start udev daemon"
+ /sbin/udevd --daemon
+fi
+case "$(uname -r)" in
+ 2.6.[0-9]|2.6.[0-9][!0-9]*) ;;
+ *) if [ -f "/sys/class/tty/console/uevent" ]; then
+ echo "Kernel >= 2.6.15 and supports uevents"
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ # catch events that are real fast
+ mkdir -p /dev/.udev/queue
+ trigger_builtin_events
+ else
+ # for older kernels without uevents will be removed when udevstart dies in udev
+ echo "Kernel does not support uevents, you need a kernel >= 2.6.15!"
+ exit 1
+ fi
+ ;;
+esac
+}
+
+udev_uevents () {
+# configure all devices
+trigger_device_events
+# until we know how to do better, just wait for _all_ events to finish
+wait_for_queue
+}
+
+if [ $# -eq 0 ]; then
+udev_init
+udev_uevents
+fi
+
+[ "$1" = "init" ] && udev_init
+[ "$1" = "uevents" ] && udev_uevents
+
+echo "udev startup is finished! - time = $(( `date +%s` - $starttime ))"
+exit 0
diff --git a/abs/core-testing/udev/udev.install b/abs/core-testing/udev/udev.install
new file mode 100644
index 0000000..19d3546
--- /dev/null
+++ b/abs/core-testing/udev/udev.install
@@ -0,0 +1,22 @@
+# arg 1: the new package version
+post_install() {
+ sbin/migrate-udev `pwd`
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+if [ "$(vercmp $2 100)" -lt 0 ]; then
+ echo "ATTENTION UDEV:"
+ echo "----------"
+ echo "udev >=098 rules syntax has changed, please update your own rules."
+ echo "udev >=099 Added persistent network and CD/DVD Symlink generator rules."
+ echo "Please read the instructions carefully before reboot."
+ echo "They are located in /etc/udev/readme-udev-arch.txt"
+ echo "----------"
+fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/udev/udev.rules b/abs/core-testing/udev/udev.rules
new file mode 100644
index 0000000..f789e50
--- /dev/null
+++ b/abs/core-testing/udev/udev.rules
@@ -0,0 +1,456 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+# Early rules - begin
+#####################################
+# wait for sysfs
+ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
+# Setting timeout for tape-devices (type 1) to 900 seconds
+# and 60 seconds for device types 0, 7 and 14
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+#####################################
+# Early rules -end
+#####################################
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+# check if the device has already been claimed by a driver
+ENV{DRIVER}=="?*", SUBSYSTEM!="input", GOTO="hotplug_driver_loaded"
+ACTION!="add", GOTO="hotplug_not_add_event"
+
+#Skip auto-loading of framebuffer devices
+KERNEL=="fb[0-9]*", GOTO="hotplug_driver_loaded"
+
+# Modaliases to load
+ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+
+# SCSI addon modules
+SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="[235689]", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg"
+
+# load sg module for burners
+SUBSYSTEM=="block", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sg"
+
+# MMC block devices
+SUBSYSTEM=="mmc", RUN+="/lib/udev/load-modules.sh mmc_block"
+
+# I2O block devices
+SUBSYSTEM=="i2o", RUN+="/lib/udev/load-modules.sh i2o_block"
+
+# Skip already claimed drivers
+DRIVERS=="?*", GOTO="hotplug_driver_loaded"
+
+# PNP modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", RUN{ignore_error}+="/bin/sh -c 'while read id; do /lib/udev/load-modules.sh pnp:d$$id; /lib/udev/load-modules.sh pnp:c$$id ; done < /sys$devpath/id'"
+
+# SOUND addon modules
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-pcm-oss"
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-seq-oss"
+
+LABEL="hotplug_driver_loaded"
+
+#PNP addon modules
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0800", RUN+="/lib/udev/load-modules.sh pcspkr"
+# not needed anymore with kernel >= 2.6.21
+#ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc_cmos"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0510*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0511*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNPb02f", RUN+="/lib/udev/load-modules.sh analog"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0501", RUN+="/lib/udev/load-modules.sh ppp-generic"
+
+# PARPORT addon modules
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh lp"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh ppdev"
+
+# fix ide cdrom detection on old proliant servers
+ACTION=="add", SUBSYSTEM=="pci", ENV{MODALIAS}=="pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00", RUN+="/lib/udev/load-modules.sh ide-generic"
+
+# FIRMWARE
+ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", RUN+="/lib/udev/firmware.sh"
+LABEL="hotplug_not_add_event"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+# fix /dev/root symlink
+SUBSYSTEM=="block", RUN+="/lib/udev/root-link.sh"
+
+#####################################
+# Permissions and Symlinks - begin
+#####################################
+# default permissions for all block devices
+SUBSYSTEM=="block", GROUP="disk"
+
+# permissions for IDE CD devices
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
+
+# permissions for SCSI CD devices
+SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", SYMLINK+="scd%n", GROUP="optical"
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", GROUP="optical"
+
+# permissions for IDE floppy devices
+SUBSYSTEMS=="ide", KERNEL=="hd*", ATTRS{media}=="floppy*", NAME{all_partitions}="%k", GROUP="floppy"
+
+# permissions for removable devices like cardreaders or sticks
+KERNEL=="sd*", ATTRS{scsi_level}=="0", ATTRS{type}=="0", GROUP="storage"
+
+# permissions for firewire external drives
+KERNEL=="sd*", ATTRS{scsi_level}=="5", GROUP="storage"
+
+# permissions for usb to scsi external adapters
+KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="7", GROUP="storage"
+
+# permissions for ide storage like pcmcia card readers
+ACTION!="add", GOTO="pcmcia_end"
+SUBSYSTEM!="block", GOTO="pcmcia_end"
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*", IMPORT{parent}=="ID_*"
+KERNEL=="hd*", ENV{ID_TYPE}=="generic", GROUP="storage"
+LABEL="pcmcia_end"
+
+# permissions for SCSI scanners
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="6", GROUP="scanner"
+
+# pty and tty legacy devices
+KERNEL=="pty[a-z][a-z,0-9]*", NAME="legacy/%k", OPTIONS="last_rule"
+KERNEL=="tty[a-z][a-z,0-9]*", NAME="legacy/%k", OPTIONS="last_rule"
+
+# md block devices
+KERNEL=="md[0-9]*", NAME="md%n", SYMLINK+="md/%n"
+
+# device-mapper
+KERNEL=="device-mapper", NAME="mapper/control"
+
+# floppy devices
+KERNEL=="fd[0-9]*", NAME="fd%n", SYMLINK+="floppy/%n fd%nu1440 fd%nu720 fd%nh1200 fd%nu360", GROUP="floppy"
+
+# tty devices
+SUBSYSTEM=="tty", GROUP="tty"
+KERNEL=="tty[0-9]*", NAME="vc/%n", SYMLINK+="%k"
+KERNEL=="ttyS[0-9]*", NAME="tts/%n", SYMLINK+="ttyS%n"
+KERNEL=="ttyUSB[0-9]*", NAME="tts/USB%n", SYMLINK+="%k"
+
+# vc devices
+KERNEL=="vcs", NAME="vcc/0", OPTIONS="last_rule"
+KERNEL=="vcs[0-9]*", NAME="vcc/%n", OPTIONS="last_rule"
+KERNEL=="vcsa", NAME="vcc/a0", OPTIONS="last_rule"
+KERNEL=="vcsa[0-9]*", NAME="vcc/a%n", OPTIONS="last_rule"
+KERNEL=="ptmx", MODE="0666", OPTIONS="last_rule"
+KERNEL=="tty", MODE="0666", OPTIONS="last_rule"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; A=$${K%%%%.*}; D=$${K#*.}; echo dvb/adapter$$A/$$D'", \
+ NAME="%c", GROUP="video"
+### xorg resets those permissions, adjust your xorg.conf!
+KERNEL=="nvidia*", GROUP="video"
+KERNEL=="card[0-9]*", NAME="dri/%k", GROUP="video"
+KERNEL=="3dfx*", GROUP="video"
+
+# v4l devices
+KERNEL=="video[0-9]*", NAME="v4l/video%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="video0", SYMLINK+="video"
+KERNEL=="radio[0-9]*", NAME="v4l/radio%n", SYMLINK+="radio%n", GROUP="video"
+KERNEL=="radio0", SYMLINK+="radio"
+KERNEL=="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="vbi0", SYMLINK+="vbi"
+KERNEL=="vtx[0-9]*", NAME="v4l/vtx%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="vtx0", SYMLINK+="vtx"
+
+# i2c devices
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n", SYMLINK+="%k"
+
+# loop devices
+KERNEL=="loop[0-9]*", NAME="loop/%n", SYMLINK+="%k"
+
+# ramdisks
+KERNEL=="ram[0-9]*", NAME="rd/%n", SYMLINK+="%k"
+
+# framebuffer devices
+KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video"
+
+# misc
+KERNEL=="rtc*", NAME="misc/%k", SYMLINK+="%k", GROUP="audio", MODE="0664"
+KERNEL=="rtc0", SYMLINK+="rtc"
+KERNEL=="nvram", NAME="misc/%k", SYMLINK+="%k", GROUP="kmem", MODE="0640"
+KERNEL=="psaux", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="agpgart", NAME="misc/%k", SYMLINK+="%k" GROUP="video"
+KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="random", MODE="0666"
+KERNEL=="urandom", MODE="0666"
+KERNEL=="mem", MODE="0640", GROUP="kmem"
+KERNEL=="kmem", MODE="0640", GROUP="kmem"
+KERNEL=="port", MODE="0640", GROUP="kmem"
+KERNEL=="full", MODE="0666"
+KERNEL=="null", MODE="0666"
+KERNEL=="zero", MODE="0666"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666"
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid", SYMLINK="%k"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr", SYMLINK="%k"
+
+# sound devices
+# alsa devices
+SUBSYSTEM=="sound", GROUP="audio"
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hw[CD0-9]*", NAME="snd/%k"
+KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k"
+KERNEL=="midi[CD0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+# oss devices
+KERNEL=="audio*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dmmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="admmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="adsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="midi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="amidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="mixer*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="sequencer*", NAME="sound/%k", SYMLINK+="%k"
+
+# input devices
+KERNEL=="mice", NAME="input/%k", MODE="0644"
+KERNEL=="mouse*", NAME="input/%k", MODE="0644"
+KERNEL=="event*", NAME="input/%k"
+KERNEL=="js*", NAME="input/%k", MODE="0664"
+KERNEL=="ts*", NAME="input/%k"
+KERNEL=="uinput", NAME="input/%k"
+
+# USB devices
+KERNEL=="hiddev*", NAME="usb/%k"
+KERNEL=="auer*", NAME="usb/%k"
+KERNEL=="legousbtower*", NAME="usb/%k", MODE="0666"
+KERNEL=="dabusb*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k", GROUP="lp"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="Palm Handheld*", SYMLINK+="pilot"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="palmOne Handheld*", SYMLINK+="pilot"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="Handspring Visor*", SYMLINK+="pilot"
+
+# printer devices
+SUBSYSTEM=="printer", GROUP="lp"
+
+# netlink devices
+KERNEL=="route", NAME="netlink/%k"
+KERNEL=="skip", NAME="netlink/%k"
+KERNEL=="usersock", NAME="netlink/%k"
+KERNEL=="fwmonitor", NAME="netlink/%k"
+KERNEL=="tcpdiag", NAME="netlink/%k"
+KERNEL=="nflog", NAME="netlink/%k"
+KERNEL=="xfrm", NAME="netlink/%k"
+KERNEL=="arpd", NAME="netlink/%k"
+KERNEL=="route6", NAME="netlink/%k"
+KERNEL=="ip6_fw", NAME="netlink/%k"
+KERNEL=="dnrtmsg", NAME="netlink/%k"
+### ! disabled seems to break device creation !
+# KERNEL=="tap*", NAME="netlink/%k"
+
+# CAPI devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi*", NAME="capi/%n"
+
+# Network devices
+KERNEL=="tun", NAME="net/%k", OPTIONS+="ignore_remove"
+KERNEL=="ppp", OPTIONS+="ignore_remove"
+
+# IEEE1394 (firewire) devices
+KERNEL=="raw1394", NAME="%k", GROUP="video"
+KERNEL=="dv1394*", NAME="dv1394/%n", GROUP="video"
+KERNEL=="video1394*", NAME="video1394/%n", GROUP="video"
+
+# raw devices
+KERNEL=="raw[0-9]*", NAME="raw/%k"
+
+# kbd devices
+KERNEL=="kbd", MODE="0664"
+
+# packet devices
+KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="optical", MODE="0660"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/pktcdvd%n", GROUP="optical", MODE="0660"
+
+# usbfs-like device nodes, libusb device access
+# for kernel 2.6.21 and below
+SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev};printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0664"
+# starting from kernel 2.6.22 use this rule
+SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0664"
+#######################################
+# Permissions and Symlinks - end
+#######################################
+
+#######################################
+# Persistant block device stuff - begin
+#######################################
+# persistent storage links: /dev/{disk,tape}/{by-id,by-uuid,by-label,by-path,by-name}
+# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+# needed like this!!!
+ACTION!="add|change", GOTO="persistent_storage_end"
+KERNEL=="nst[0-9]", SUBSYSTEMS=="scsi", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
+
+# type 8 devices are "Medium Changers"
+KERNEL=="sg*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+# skip rules for inappropriate block devices
+# don't add dm-*!!!
+KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+# never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_storage_end"
+
+# ignore partitions that span the entire disk
+ATTR{whole_disk}=="*", GOTO="persistent_storage_end"
+
+# /sys/class/block will export this
+ENV{DEVTYPE}!="?*", ATTR{range}=="?*", ENV{DEVTYPE}="disk"
+ENV{DEVTYPE}!="?*", ATTR{start}=="?*", ENV{DEVTYPE}="partition"
+
+# for partitions import parent information
+ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
+
+# by-id (hardware serial number)
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}"
+KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n"
+
+KERNEL=="sd*[!0-9]|sr*|st*", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_SUBSYSTEMS}="ieee1394"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export %p"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode"
+KERNEL=="cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --ignore-sysfs -s %p -d $tempnode", ENV{ID_BUS}="cciss"
+KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
+KERNEL=="st*", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+
+# libata compat (links like hd*)
+KERNEL=="sd*[!0-9]|sr*", ENV{ID_VENDOR}=="ATA", PROGRAM="/lib/udev/ata_id $tempnode", RESULT=="?*", ENV{ID_ATA_COMPAT}="$result", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}"
+KERNEL=="sd*[0-9]", ENV{ID_ATA_COMPAT}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}-part%n"
+
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n"
+
+# by-path (shortest physical path)
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/path_id %p"
+ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
+ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
+KERNEL=="st*", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}"
+
+KERNEL=="sr*|st*", GOTO="persistent_storage_end"
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
+
+# by-label/by-uuid (filesystem properties)
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+# BIOS Enhanced Disk Device
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/edd_id --export $tempnode"
+ENV{DEVTYPE}=="disk", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}"
+ENV{DEVTYPE}=="partition", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n"
+LABEL="persistent_storage_end"
+
+# md links hook into "change" events, when the array becomes available
+KERNEL!="md[0-9]*", GOTO="md_end"
+ACTION!="add|change", GOTO="md_end"
+
+ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+OPTIONS="link_priority=100"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+LABEL="md_end"
+# Persistant block device stuff - end
+#####################################
+
+#######################################
+# Persistant input stuff - begin
+#######################################
+SUBSYSTEM!="input", GOTO="persistent_input_end"
+ACTION!="add", GOTO="persistent_input_end"
+# ignore the mid-level drivers
+KERNEL=="input[0-9]*", GOTO="persistent_input_end"
+
+# usb devices
+SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export"
+SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="01", ENV{ID_CLASS}="kbd"
+SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="02", ENV{ID_CLASS}="mouse"
+
+# other devices
+DRIVERS=="pcspkr", ENV{ID_CLASS}="spkr"
+DRIVERS=="atkbd", ENV{ID_CLASS}="kbd"
+DRIVERS=="psmouse", ENV{ID_CLASS}="mouse"
+ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{ID_CLASS}="ir"
+ATTRS{modalias}=="input:*-*a[068],*|input:*-*a*,[68],*m*", ATTRS{modalias}!="input:*-*k*14A,*r*", ENV{ID_CLASS}="joystick"
+
+# fill empty serial number
+ENV{ID_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial"
+
+# by-id links, generic and for the event devices
+KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", ENV{ID_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_CLASS}"
+KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", ENV{ID_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{ID_CLASS}"
+
+
+# by-path links
+IMPORT{program}="/lib/udev/path_id %p"
+KERNEL=="mouse*|js*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{ID_CLASS}"
+KERNEL=="event*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{ID_CLASS}"
+
+LABEL="persistent_input_end"
+#####################################
+# Persistant input stuff - end
+#####################################
+
+# run a command on remove events
+ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
+
+# debugging monitor
+RUN+="socket:/org/kernel/udev/monitor"
diff --git a/abs/core-testing/udev/usb_id-fix.patch b/abs/core-testing/udev/usb_id-fix.patch
new file mode 100644
index 0000000..35fb2e1
--- /dev/null
+++ b/abs/core-testing/udev/usb_id-fix.patch
@@ -0,0 +1,107 @@
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Mon, 15 Oct 2007 18:38:20 +0000 (+0200)
+Subject: usb_id: fail if vendor/product can not be retrieved
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=963033472f8d2aab0bf77147b916de8f3b0b5450
+
+usb_id: fail if vendor/product can not be retrieved
+
+Thanks to Daniel Drake for identifying the bug.
+---
+
+diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
+index d36a27b..5fb030d 100644
+--- a/extras/usb_id/usb_id.c
++++ b/extras/usb_id/usb_id.c
+@@ -1,7 +1,5 @@
+ /*
+- * usb_id.c
+- *
+- * Identify an USB (block) device
++ * usb_id - identify an USB device
+ *
+ * Copyright (c) 2005 SUSE Linux Products GmbH, Germany
+ *
+@@ -224,8 +222,6 @@ static int usb_id(const char *devpath)
+ struct sysfs_device *dev;
+ struct sysfs_device *dev_interface;
+ struct sysfs_device *dev_usb;
+- const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+- const char *usb_model = NULL, *usb_vendor = NULL, *usb_rev, *usb_serial;
+ const char *if_class, *if_subclass;
+ int if_class_num;
+ int protocol = 0;
+@@ -271,6 +267,7 @@ static int usb_id(const char *devpath)
+ /* mass storage */
+ if (protocol == 6 && !use_usb_info) {
+ struct sysfs_device *dev_scsi;
++ const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+ int host, bus, target, lun;
+
+ /* get scsi device */
+@@ -321,40 +318,50 @@ static int usb_id(const char *devpath)
+ }
+
+ fallback:
+- /* Fallback to USB vendor & device */
++ /* fallback to USB vendor & device */
+ if (vendor_str[0] == '\0') {
++ const char *usb_vendor = NULL;
++
+ if (!use_num_info)
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer")))
+- dbg("No USB vendor string found, using idVendor");
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer");
++
++ if (!usb_vendor)
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor");
+
+ if (!usb_vendor) {
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"))) {
+- dbg("No USB vendor information available\n");
+- sprintf(vendor_str,"0000");
+- }
++ info("No USB vendor information available");
++ return 1;
+ }
+- set_str(vendor_str,usb_vendor, sizeof(vendor_str) - 1);
++ set_str(vendor_str, usb_vendor, sizeof(vendor_str)-1);
+ }
+-
++
+ if (model_str[0] == '\0') {
++ const char *usb_model = NULL;
++
+ if (!use_num_info)
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "product")))
+- dbg("No USB model string found, using idProduct");
+-
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "product");
++
++ if (!usb_model)
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct");
++
+ if (!usb_model) {
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct")))
+- dbg("No USB model information available\n"); sprintf(model_str,"0000");
++ dbg("No USB model information available");
++ return 1;
+ }
+- set_str(model_str, usb_model, sizeof(model_str) - 1);
++ set_str(model_str, usb_model, sizeof(model_str)-1);
+ }
+
+ if (revision_str[0] == '\0') {
++ const char *usb_rev;
++
+ usb_rev = sysfs_attr_get_value(dev_usb->devpath, "bcdDevice");
+ if (usb_rev)
+ set_str(revision_str, usb_rev, sizeof(revision_str)-1);
+ }
+
+ if (serial_str[0] == '\0') {
++ const char *usb_serial;
++
+ usb_serial = sysfs_attr_get_value(dev_usb->devpath, "serial");
+ if (usb_serial)
+ set_str(serial_str, usb_serial, sizeof(serial_str)-1);
+
diff --git a/abs/core-testing/unichrome-dri/PKGBUILD b/abs/core-testing/unichrome-dri/PKGBUILD
new file mode 100644
index 0000000..c51bb2b
--- /dev/null
+++ b/abs/core-testing/unichrome-dri/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 1898 2008-05-22 18:05:23Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=unichrome-dri
+pkgver=7.0.3
+_mesaver=7.0.3
+pkgrel=1
+pkgdesc="DRI drivers for Unichrome-based videochipsets"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('imake' 'mesa>=7.0.3' 'glproto>=1.4.9')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/Mesa-${_mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = unichrome" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core-testing/unison/PKGBUILD b/abs/core-testing/unison/PKGBUILD
new file mode 100644
index 0000000..b1efa5b
--- /dev/null
+++ b/abs/core-testing/unison/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=unison
+pkgver=2.27.57
+pkgrel=1
+pkgdesc="Unison is a file-synchronization tool"
+arch=(i686 x86_64)
+license=('GPL2')
+url="http://www.cis.upenn.edu/~bcpierce/unison"
+depends=('glibc')
+#makedepends=('ocaml' 'lablgtk' 'lablgtk2' 'imagemagick')
+makedepends=('ocaml' )
+source=(http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/$pkgname-$pkgver.tar.gz \
+ $pkgname.desktop)
+options=(!makeflags)
+install=unison.install
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ CFLAGS=""
+ make clean
+ make UISTYLE=text DEBUGGING=false THREADS=true || return 1
+ mkdir -p $startdir/pkg/usr/bin
+ install -Dm755 unison $startdir/pkg/usr/bin/unison
+}
+md5sums=('4ba0a3e4bf4b4ad0c063f86391371f78'
+ '2daecba7705455a8e4b769e48b059872')
diff --git a/abs/core-testing/unison/ocaml-3.08-extnames.patch b/abs/core-testing/unison/ocaml-3.08-extnames.patch
new file mode 100644
index 0000000..e959be2
--- /dev/null
+++ b/abs/core-testing/unison/ocaml-3.08-extnames.patch
@@ -0,0 +1,14 @@
+diff -ur unison-2.9.1/ubase/uprintf.ml unison-2.9.1.patched/ubase/uprintf.ml
+--- unison-2.9.1/ubase/uprintf.ml 2002-04-11 07:13:23.000000000 +0200
++++ unison-2.9.1.patched/ubase/uprintf.ml 2004-08-08 14:10:09.784776851 +0200
+@@ -10,8 +10,8 @@
+ (* *)
+ (***********************************************************************)
+
+-external format_int: string -> int -> string = "format_int"
+-external format_float: string -> float -> string = "format_float"
++external format_int: string -> int -> string = "caml_format_int"
++external format_float: string -> float -> string = "caml_format_float"
+
+ let fprintf outchan doafter format =
+ let format = (Obj.magic format : string) in
diff --git a/abs/core-testing/unison/unison.desktop b/abs/core-testing/unison/unison.desktop
new file mode 100644
index 0000000..3a7e1d7
--- /dev/null
+++ b/abs/core-testing/unison/unison.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=unison
+Name[de]=unison
+Comment=File synchronisation tool for X11
+Comment[de]=Datei Abgleicher und Synchronisierer
+TryExec=unison-x11
+Exec=unison-x11
+Terminal=false
+Type=Application
+Categories=GTK;Application;Network;
+Icon=unison.png
+StartupNotify=true
diff --git a/abs/core-testing/unison/unison.install b/abs/core-testing/unison/unison.install
new file mode 100644
index 0000000..70e70b0
--- /dev/null
+++ b/abs/core-testing/unison/unison.install
@@ -0,0 +1,32 @@
+# arg 1: the new package version
+post_install() {
+ echo "NOTE:"
+ echo " For gtk1 frontend please add 'gtk' package."
+ echo " For gtk2 frontend please add 'gtk2' package."
+ echo " Default X11 frontend is set to gtk2. "
+ echo ""
+ echo " If you want to default to gtk1 unison:"
+ echo " 'rm /usr/bin/unison-x11'"
+ echo " 'ln -s /usr/bin/unison-gtk /usr/bin/unison-x11'"
+ echo ""
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/usbutils/PKGBUILD b/abs/core-testing/usbutils/PKGBUILD
new file mode 100644
index 0000000..944e26a
--- /dev/null
+++ b/abs/core-testing/usbutils/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Curtis Campbell <curtisjamescampbell@hotmail.com>
+pkgname=usbutils
+pkgver=0.73
+pkgrel=14
+pkgdesc="USB Device Utilities"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+makedepends=('wget')
+depends=('glibc' 'libusb')
+url="http://usb.cs.tum.edu/"
+source=(http://downloads.sourceforge.net/sourceforge/linux-usb/usbutils-$pkgver.tar.gz)
+md5sums=('88978b4ad891f610620b1b8e5e0f43eb')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./update-usbids.sh
+ sed -i 's|DEST=|&/usr/share/hwdata/|' update-usbids.sh
+ ./configure --prefix=/usr --datadir=/usr/share/hwdata --enable-usbmodules --disable-zlib
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m755 update-usbids.sh $startdir/pkg/usr/sbin/update-usbids
+}
diff --git a/abs/core-testing/util-linux-ng/PKGBUILD b/abs/core-testing/util-linux-ng/PKGBUILD
new file mode 100644
index 0000000..35207fd
--- /dev/null
+++ b/abs/core-testing/util-linux-ng/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=util-linux-ng
+pkgver=2.14
+pkgrel=10
+pkgdesc="Miscellaneous system utilities for Linux"
+arch=('i686' 'x86_64')
+groups=('base')
+depends=('bash' 'ncurses' 'zlib' 'e2fsprogs')
+replaces=('linux32' 'util-linux')
+conflicts=('linux32' 'util-linux')
+provides=('linux32' 'util-linux')
+license=('GPL')
+source=(ftp://ftp.kernel.org/pub/linux/utils/${pkgname}/v2.14/${pkgname}-${pkgver}.tar.bz2
+ util-linux-ng-2.14-20080624.diff)
+md5sums=('23f227da49df36f33fe47e917e332cd8'
+ 'acb7bf692d239eb9872b0f00de437b7e')
+
+# The cryptoloop-support.patch comes from the boys at Rock Linux
+# (http://www.rocklinux.net/packages/util-linux.html)
+
+# Newer crypt support is here:
+# http://loop-aes.sourceforge.net/updates/util-linux-${_realver}.diff.bz2
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./autogen.sh
+ # cryptoloop support
+ patch -Np1 -i ${startdir}/src/util-linux-ng-2.14-20080624.diff || return 1
+ sed -e 's%etc/adjtime%var/lib/hwclock/adjtime%' -i hwclock/hwclock.c
+ mkdir -p ${startdir}/pkg/var/lib/hwclock
+ ./configure --enable-arch --enable-write --enable-raw --disable-wall --enable-rdev
+ make HAVE_SLN=yes ADD_RAW=yes || return 1
+ make HAVE_SLN=yes ADD_RAW=yes DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/bin/kill
+ rm -f ${startdir}/pkg/usr/share/man/man1/kill.1
+ rm -f ${startdir}/pkg/usr/share/man/man5/nfs.5
+}
diff --git a/abs/core-testing/util-linux-ng/util-linux-ng-2.14-20080624.diff b/abs/core-testing/util-linux-ng/util-linux-ng-2.14-20080624.diff
new file mode 100644
index 0000000..305d257
--- /dev/null
+++ b/abs/core-testing/util-linux-ng/util-linux-ng-2.14-20080624.diff
@@ -0,0 +1,6826 @@
+If this patch does not apply cleanly to newer version of util-linux-ng, try
+replacing original lomount.c lomount.h loop.h losetup.8 files in mount
+subdirectory with versions from util-linux-ng that the patch is for. And
+then apply this patch.
+
+mount/Makefile.in is a generated file. You can ignore patch failures on that
+file if you generate it again by running the ./autogen.sh script. That
+./autogen.sh script needs recent versions of autohell tools.
+
+diff -urN util-linux-ng-2.14/mount/Makefile.am util-linux-ng-2.14-AES/mount/Makefile.am
+--- util-linux-ng-2.14/mount/Makefile.am 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/Makefile.am 2008-06-24 16:55:12.000000000 +0300
+@@ -12,21 +12,21 @@
+ lomount.h fsprobe.h realpath.h xmalloc.h \
+ getusername.h loop.h sundries.h
+
+-mount_common = fstab.c mount_mntent.c getusername.c lomount.c \
++mount_common = fstab.c mount_mntent.c getusername.c \
+ $(utils_common) $(headers_common) ../lib/env.c ../lib/linux_version.c \
+ ../lib/blkdev.c
+
+-mount_SOURCES = mount.c $(mount_common) ../lib/setproctitle.c
++mount_SOURCES = mount.c lomount.c loumount.c loop.c sha512.c rmd160.c aes.c $(mount_common) ../lib/setproctitle.c
+ mount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ mount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+
+-umount_SOURCES = umount.c $(mount_common)
++umount_SOURCES = umount.c loumount.c $(mount_common)
+ umount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+
+-swapon_SOURCES = swapon.c swap_constants.h $(utils_common)
++swapon_SOURCES = swapon.c loop.c sha512.c swap_constants.h $(utils_common)
+
+-losetup_SOURCES = lomount.c sundries.c xmalloc.c realpath.c \
++losetup_SOURCES = lomount.c loumount.c loop.c sha512.c rmd160.c aes.c sundries.c xmalloc.c \
+ loop.h lomount.h xmalloc.h sundries.h realpath.h
+ losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
+
+diff -urN util-linux-ng-2.14/mount/Makefile.in util-linux-ng-2.14-AES/mount/Makefile.in
+--- util-linux-ng-2.14/mount/Makefile.in 2008-06-09 15:02:13.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/Makefile.in 2008-06-24 16:55:12.000000000 +0300
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -15,11 +15,15 @@
+ @SET_MAKE@
+
+
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -75,28 +79,32 @@
+ sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS)
+ am_losetup_OBJECTS = losetup-lomount.$(OBJEXT) \
+- losetup-sundries.$(OBJEXT) losetup-xmalloc.$(OBJEXT) \
+- losetup-realpath.$(OBJEXT)
++ losetup-loumount.$(OBJEXT) losetup-loop.$(OBJEXT) \
++ losetup-sha512.$(OBJEXT) losetup-rmd160.$(OBJEXT) \
++ losetup-aes.$(OBJEXT) losetup-sundries.$(OBJEXT) \
++ losetup-xmalloc.$(OBJEXT)
+ losetup_OBJECTS = $(am_losetup_OBJECTS)
+ losetup_LDADD = $(LDADD)
+-am__losetup_static_SOURCES_DIST = lomount.c sundries.c xmalloc.c \
+- realpath.c loop.h lomount.h xmalloc.h sundries.h realpath.h
++am__losetup_static_SOURCES_DIST = lomount.c loumount.c loop.c sha512.c \
++ rmd160.c aes.c sundries.c xmalloc.c loop.h lomount.h xmalloc.h \
++ sundries.h realpath.h
+ am__objects_1 = losetup_static-lomount.$(OBJEXT) \
++ losetup_static-loumount.$(OBJEXT) \
++ losetup_static-loop.$(OBJEXT) losetup_static-sha512.$(OBJEXT) \
++ losetup_static-rmd160.$(OBJEXT) losetup_static-aes.$(OBJEXT) \
+ losetup_static-sundries.$(OBJEXT) \
+- losetup_static-xmalloc.$(OBJEXT) \
+- losetup_static-realpath.$(OBJEXT)
++ losetup_static-xmalloc.$(OBJEXT)
+ @HAVE_STATIC_LOSETUP_TRUE@am_losetup_static_OBJECTS = \
+ @HAVE_STATIC_LOSETUP_TRUE@ $(am__objects_1)
+ losetup_static_OBJECTS = $(am_losetup_static_OBJECTS)
+ losetup_static_LDADD = $(LDADD)
+-losetup_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(losetup_static_LDFLAGS) $(LDFLAGS) -o $@
+-am__mount_SOURCES_DIST = mount.c fstab.c mount_mntent.c getusername.c \
+- lomount.c sundries.c xmalloc.c realpath.c fsprobe.c \
+- fsprobe_blkid.c fsprobe_volumeid.c fstab.h mount_mntent.h \
+- mount_constants.h lomount.h fsprobe.h realpath.h xmalloc.h \
+- getusername.h loop.h sundries.h ../lib/env.c \
+- ../lib/linux_version.c ../lib/blkdev.c ../lib/setproctitle.c
++am__mount_SOURCES_DIST = mount.c lomount.c loumount.c loop.c sha512.c \
++ rmd160.c aes.c fstab.c mount_mntent.c getusername.c sundries.c \
++ xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++ fsprobe_volumeid.c fstab.h mount_mntent.h mount_constants.h \
++ lomount.h fsprobe.h realpath.h xmalloc.h getusername.h loop.h \
++ sundries.h ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
++ ../lib/setproctitle.c
+ @HAVE_BLKID_TRUE@am__objects_2 = mount-fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_3 = mount-fsprobe_volumeid.$(OBJEXT)
+ am__objects_4 = mount-sundries.$(OBJEXT) mount-xmalloc.$(OBJEXT) \
+@@ -104,10 +112,13 @@
+ $(am__objects_2) $(am__objects_3)
+ am__objects_5 =
+ am__objects_6 = mount-fstab.$(OBJEXT) mount-mount_mntent.$(OBJEXT) \
+- mount-getusername.$(OBJEXT) mount-lomount.$(OBJEXT) \
+- $(am__objects_4) $(am__objects_5) mount-env.$(OBJEXT) \
+- mount-linux_version.$(OBJEXT) mount-blkdev.$(OBJEXT)
+-am_mount_OBJECTS = mount-mount.$(OBJEXT) $(am__objects_6) \
++ mount-getusername.$(OBJEXT) $(am__objects_4) $(am__objects_5) \
++ mount-env.$(OBJEXT) mount-linux_version.$(OBJEXT) \
++ mount-blkdev.$(OBJEXT)
++am_mount_OBJECTS = mount-mount.$(OBJEXT) mount-lomount.$(OBJEXT) \
++ mount-loumount.$(OBJEXT) mount-loop.$(OBJEXT) \
++ mount-sha512.$(OBJEXT) mount-rmd160.$(OBJEXT) \
++ mount-aes.$(OBJEXT) $(am__objects_6) \
+ mount-setproctitle.$(OBJEXT)
+ mount_OBJECTS = $(am_mount_OBJECTS)
+ am__DEPENDENCIES_1 =
+@@ -116,14 +127,12 @@
+ am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
+ @HAVE_SELINUX_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+ mount_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5)
+-mount_LINK = $(CCLD) $(mount_CFLAGS) $(CFLAGS) $(mount_LDFLAGS) \
+- $(LDFLAGS) -o $@
+-am__mount_static_SOURCES_DIST = mount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
+- fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+- mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+- realpath.h xmalloc.h getusername.h loop.h sundries.h \
+- ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
++am__mount_static_SOURCES_DIST = mount.c lomount.c loumount.c loop.c \
++ sha512.c rmd160.c aes.c fstab.c mount_mntent.c getusername.c \
++ sundries.c xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++ fsprobe_volumeid.c fstab.h mount_mntent.h mount_constants.h \
++ lomount.h fsprobe.h realpath.h xmalloc.h getusername.h loop.h \
++ sundries.h ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
+ ../lib/setproctitle.c
+ @HAVE_BLKID_TRUE@am__objects_7 = fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_8 = fsprobe_volumeid.$(OBJEXT)
+@@ -131,17 +140,15 @@
+ realpath.$(OBJEXT) fsprobe.$(OBJEXT) $(am__objects_7) \
+ $(am__objects_8)
+ am__objects_10 = fstab.$(OBJEXT) mount_mntent.$(OBJEXT) \
+- getusername.$(OBJEXT) lomount.$(OBJEXT) $(am__objects_9) \
+- $(am__objects_5) env.$(OBJEXT) linux_version.$(OBJEXT) \
+- blkdev.$(OBJEXT)
+-am__objects_11 = mount.$(OBJEXT) $(am__objects_10) \
+- setproctitle.$(OBJEXT)
++ getusername.$(OBJEXT) $(am__objects_9) $(am__objects_5) \
++ env.$(OBJEXT) linux_version.$(OBJEXT) blkdev.$(OBJEXT)
++am__objects_11 = mount.$(OBJEXT) lomount.$(OBJEXT) loumount.$(OBJEXT) \
++ loop.$(OBJEXT) sha512.$(OBJEXT) rmd160.$(OBJEXT) aes.$(OBJEXT) \
++ $(am__objects_10) setproctitle.$(OBJEXT)
+ @HAVE_STATIC_MOUNT_TRUE@am_mount_static_OBJECTS = $(am__objects_11)
+ mount_static_OBJECTS = $(am_mount_static_OBJECTS)
+ @HAVE_SELINUX_FALSE@@HAVE_STATIC_MOUNT_TRUE@mount_static_DEPENDENCIES = $(am__DEPENDENCIES_4)
+ @HAVE_SELINUX_TRUE@mount_static_DEPENDENCIES = $(am__DEPENDENCIES_1)
+-mount_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(mount_static_LDFLAGS) $(LDFLAGS) -o $@
+ am_mtab_lock_test_OBJECTS = mtab_lock_test-fstab.$(OBJEXT) \
+ mtab_lock_test-sundries.$(OBJEXT) \
+ mtab_lock_test-xmalloc.$(OBJEXT) $(am__objects_5)
+@@ -150,21 +157,21 @@
+ pivot_root_SOURCES = pivot_root.c
+ pivot_root_OBJECTS = pivot_root.$(OBJEXT)
+ pivot_root_LDADD = $(LDADD)
+-am__swapon_SOURCES_DIST = swapon.c swap_constants.h sundries.c \
+- xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++am__swapon_SOURCES_DIST = swapon.c loop.c sha512.c swap_constants.h \
++ sundries.c xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
+ fsprobe_volumeid.c ../lib/linux_version.c ../lib/blkdev.c
+ @HAVE_VOLUME_ID_TRUE@am__objects_12 = linux_version.$(OBJEXT) \
+ @HAVE_VOLUME_ID_TRUE@ blkdev.$(OBJEXT)
+-am_swapon_OBJECTS = swapon.$(OBJEXT) $(am__objects_9) \
+- $(am__objects_12)
++am_swapon_OBJECTS = swapon.$(OBJEXT) loop.$(OBJEXT) sha512.$(OBJEXT) \
++ $(am__objects_9) $(am__objects_12)
+ swapon_OBJECTS = $(am_swapon_OBJECTS)
+ swapon_DEPENDENCIES = $(am__DEPENDENCIES_4)
+-am__umount_SOURCES_DIST = umount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
+- fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+- mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+- realpath.h xmalloc.h getusername.h loop.h sundries.h \
+- ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c
++am__umount_SOURCES_DIST = umount.c loumount.c fstab.c mount_mntent.c \
++ getusername.c sundries.c xmalloc.c realpath.c fsprobe.c \
++ fsprobe_blkid.c fsprobe_volumeid.c fstab.h mount_mntent.h \
++ mount_constants.h lomount.h fsprobe.h realpath.h xmalloc.h \
++ getusername.h loop.h sundries.h ../lib/env.c \
++ ../lib/linux_version.c ../lib/blkdev.c
+ @HAVE_BLKID_TRUE@am__objects_13 = umount-fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_14 = \
+ @HAVE_VOLUME_ID_TRUE@ umount-fsprobe_volumeid.$(OBJEXT)
+@@ -172,28 +179,25 @@
+ umount-realpath.$(OBJEXT) umount-fsprobe.$(OBJEXT) \
+ $(am__objects_13) $(am__objects_14)
+ am__objects_16 = umount-fstab.$(OBJEXT) umount-mount_mntent.$(OBJEXT) \
+- umount-getusername.$(OBJEXT) umount-lomount.$(OBJEXT) \
+- $(am__objects_15) $(am__objects_5) umount-env.$(OBJEXT) \
++ umount-getusername.$(OBJEXT) $(am__objects_15) \
++ $(am__objects_5) umount-env.$(OBJEXT) \
+ umount-linux_version.$(OBJEXT) umount-blkdev.$(OBJEXT)
+-am_umount_OBJECTS = umount-umount.$(OBJEXT) $(am__objects_16)
++am_umount_OBJECTS = umount-umount.$(OBJEXT) umount-loumount.$(OBJEXT) \
++ $(am__objects_16)
+ umount_OBJECTS = $(am_umount_OBJECTS)
+ umount_DEPENDENCIES = $(am__DEPENDENCIES_4)
+-umount_LINK = $(CCLD) $(umount_CFLAGS) $(CFLAGS) $(umount_LDFLAGS) \
+- $(LDFLAGS) -o $@
+-am__umount_static_SOURCES_DIST = umount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
++am__umount_static_SOURCES_DIST = umount.c loumount.c fstab.c \
++ mount_mntent.c getusername.c sundries.c xmalloc.c realpath.c \
+ fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+ mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+ realpath.h xmalloc.h getusername.h loop.h sundries.h \
+ ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c
+-am__objects_17 = umount.$(OBJEXT) $(am__objects_10)
++am__objects_17 = umount.$(OBJEXT) loumount.$(OBJEXT) $(am__objects_10)
+ @HAVE_STATIC_UMOUNT_TRUE@am_umount_static_OBJECTS = $(am__objects_17)
+ umount_static_OBJECTS = $(am_umount_static_OBJECTS)
+ @HAVE_STATIC_UMOUNT_TRUE@umount_static_DEPENDENCIES = \
+ @HAVE_STATIC_UMOUNT_TRUE@ $(am__DEPENDENCIES_4)
+-umount_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(umount_static_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -220,7 +224,27 @@
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
++AMDEP_FALSE = @AMDEP_FALSE@
++AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
++ARCH_86_64_FALSE = @ARCH_86_64_FALSE@
++ARCH_86_64_TRUE = @ARCH_86_64_TRUE@
++ARCH_HPPA_FALSE = @ARCH_HPPA_FALSE@
++ARCH_HPPA_TRUE = @ARCH_HPPA_TRUE@
++ARCH_I86_FALSE = @ARCH_I86_FALSE@
++ARCH_I86_TRUE = @ARCH_I86_TRUE@
++ARCH_IA64_FALSE = @ARCH_IA64_FALSE@
++ARCH_IA64_TRUE = @ARCH_IA64_TRUE@
++ARCH_M68K_FALSE = @ARCH_M68K_FALSE@
++ARCH_M68K_TRUE = @ARCH_M68K_TRUE@
++ARCH_MIPS_FALSE = @ARCH_MIPS_FALSE@
++ARCH_MIPS_TRUE = @ARCH_MIPS_TRUE@
++ARCH_PPC_FALSE = @ARCH_PPC_FALSE@
++ARCH_PPC_TRUE = @ARCH_PPC_TRUE@
++ARCH_S390_FALSE = @ARCH_S390_FALSE@
++ARCH_S390_TRUE = @ARCH_S390_TRUE@
++ARCH_SPARC_FALSE = @ARCH_SPARC_FALSE@
++ARCH_SPARC_TRUE = @ARCH_SPARC_TRUE@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+@@ -228,6 +252,40 @@
+ BLKID = @BLKID@
+ BLKID_LIBS = @BLKID_LIBS@
+ BLKID_LIBS_STATIC = @BLKID_LIBS_STATIC@
++BUILD_AGETTY_FALSE = @BUILD_AGETTY_FALSE@
++BUILD_AGETTY_TRUE = @BUILD_AGETTY_TRUE@
++BUILD_ARCH_FALSE = @BUILD_ARCH_FALSE@
++BUILD_ARCH_TRUE = @BUILD_ARCH_TRUE@
++BUILD_CRAMFS_FALSE = @BUILD_CRAMFS_FALSE@
++BUILD_CRAMFS_TRUE = @BUILD_CRAMFS_TRUE@
++BUILD_ELVTUNE_FALSE = @BUILD_ELVTUNE_FALSE@
++BUILD_ELVTUNE_TRUE = @BUILD_ELVTUNE_TRUE@
++BUILD_INIT_FALSE = @BUILD_INIT_FALSE@
++BUILD_INIT_TRUE = @BUILD_INIT_TRUE@
++BUILD_KILL_FALSE = @BUILD_KILL_FALSE@
++BUILD_KILL_TRUE = @BUILD_KILL_TRUE@
++BUILD_LAST_FALSE = @BUILD_LAST_FALSE@
++BUILD_LAST_TRUE = @BUILD_LAST_TRUE@
++BUILD_LOGIN_UTILS_FALSE = @BUILD_LOGIN_UTILS_FALSE@
++BUILD_LOGIN_UTILS_TRUE = @BUILD_LOGIN_UTILS_TRUE@
++BUILD_MESG_FALSE = @BUILD_MESG_FALSE@
++BUILD_MESG_TRUE = @BUILD_MESG_TRUE@
++BUILD_PARTX_FALSE = @BUILD_PARTX_FALSE@
++BUILD_PARTX_TRUE = @BUILD_PARTX_TRUE@
++BUILD_RAW_FALSE = @BUILD_RAW_FALSE@
++BUILD_RAW_TRUE = @BUILD_RAW_TRUE@
++BUILD_RDEV_FALSE = @BUILD_RDEV_FALSE@
++BUILD_RDEV_TRUE = @BUILD_RDEV_TRUE@
++BUILD_RENAME_FALSE = @BUILD_RENAME_FALSE@
++BUILD_RENAME_TRUE = @BUILD_RENAME_TRUE@
++BUILD_RESET_FALSE = @BUILD_RESET_FALSE@
++BUILD_RESET_TRUE = @BUILD_RESET_TRUE@
++BUILD_SCHEDUTILS_FALSE = @BUILD_SCHEDUTILS_FALSE@
++BUILD_SCHEDUTILS_TRUE = @BUILD_SCHEDUTILS_TRUE@
++BUILD_WALL_FALSE = @BUILD_WALL_FALSE@
++BUILD_WALL_TRUE = @BUILD_WALL_TRUE@
++BUILD_WRITE_FALSE = @BUILD_WRITE_FALSE@
++BUILD_WRITE_TRUE = @BUILD_WRITE_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -243,7 +301,46 @@
+ EXEEXT = @EXEEXT@
+ GMSGFMT = @GMSGFMT@
+ GREP = @GREP@
+-INSTALL = @INSTALL@
++HAVE_AUDIT_FALSE = @HAVE_AUDIT_FALSE@
++HAVE_AUDIT_TRUE = @HAVE_AUDIT_TRUE@
++HAVE_BLKID_FALSE = @HAVE_BLKID_FALSE@
++HAVE_BLKID_TRUE = @HAVE_BLKID_TRUE@
++HAVE_IOPRIO_GET_FALSE = @HAVE_IOPRIO_GET_FALSE@
++HAVE_IOPRIO_GET_TRUE = @HAVE_IOPRIO_GET_TRUE@
++HAVE_IOPRIO_SET_FALSE = @HAVE_IOPRIO_SET_FALSE@
++HAVE_IOPRIO_SET_TRUE = @HAVE_IOPRIO_SET_TRUE@
++HAVE_NCURSES_FALSE = @HAVE_NCURSES_FALSE@
++HAVE_NCURSES_TRUE = @HAVE_NCURSES_TRUE@
++HAVE_PAM_FALSE = @HAVE_PAM_FALSE@
++HAVE_PAM_TRUE = @HAVE_PAM_TRUE@
++HAVE_PIVOT_ROOT_FALSE = @HAVE_PIVOT_ROOT_FALSE@
++HAVE_PIVOT_ROOT_TRUE = @HAVE_PIVOT_ROOT_TRUE@
++HAVE_RAW_FALSE = @HAVE_RAW_FALSE@
++HAVE_RAW_TRUE = @HAVE_RAW_TRUE@
++HAVE_SCHED_GETAFFINITY_FALSE = @HAVE_SCHED_GETAFFINITY_FALSE@
++HAVE_SCHED_GETAFFINITY_TRUE = @HAVE_SCHED_GETAFFINITY_TRUE@
++HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
++HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
++HAVE_STATIC_FDISK_FALSE = @HAVE_STATIC_FDISK_FALSE@
++HAVE_STATIC_FDISK_TRUE = @HAVE_STATIC_FDISK_TRUE@
++HAVE_STATIC_LOSETUP_FALSE = @HAVE_STATIC_LOSETUP_FALSE@
++HAVE_STATIC_LOSETUP_TRUE = @HAVE_STATIC_LOSETUP_TRUE@
++HAVE_STATIC_MOUNT_FALSE = @HAVE_STATIC_MOUNT_FALSE@
++HAVE_STATIC_MOUNT_TRUE = @HAVE_STATIC_MOUNT_TRUE@
++HAVE_STATIC_SFDISK_FALSE = @HAVE_STATIC_SFDISK_FALSE@
++HAVE_STATIC_SFDISK_TRUE = @HAVE_STATIC_SFDISK_TRUE@
++HAVE_STATIC_UMOUNT_FALSE = @HAVE_STATIC_UMOUNT_FALSE@
++HAVE_STATIC_UMOUNT_TRUE = @HAVE_STATIC_UMOUNT_TRUE@
++HAVE_TERMCAP_FALSE = @HAVE_TERMCAP_FALSE@
++HAVE_TERMCAP_TRUE = @HAVE_TERMCAP_TRUE@
++HAVE_TINFO_FALSE = @HAVE_TINFO_FALSE@
++HAVE_TINFO_TRUE = @HAVE_TINFO_TRUE@
++HAVE_UTIL_FALSE = @HAVE_UTIL_FALSE@
++HAVE_UTIL_TRUE = @HAVE_UTIL_TRUE@
++HAVE_UUID_FALSE = @HAVE_UUID_FALSE@
++HAVE_UUID_TRUE = @HAVE_UUID_TRUE@
++HAVE_VOLUME_ID_FALSE = @HAVE_VOLUME_ID_FALSE@
++HAVE_VOLUME_ID_TRUE = @HAVE_VOLUME_ID_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -255,15 +352,20 @@
+ LIBINTL = @LIBINTL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LINUX_FALSE = @LINUX_FALSE@
++LINUX_TRUE = @LINUX_TRUE@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAKEINFO = @MAKEINFO@
+-MKDIR_P = @MKDIR_P@
++MAKEINSTALL_DO_CHOWN_FALSE = @MAKEINSTALL_DO_CHOWN_FALSE@
++MAKEINSTALL_DO_CHOWN_TRUE = @MAKEINSTALL_DO_CHOWN_TRUE@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+ MSGMERGE = @MSGMERGE@
+ NCURSES_LIBS = @NCURSES_LIBS@
++NEED_LIBCRYPT_FALSE = @NEED_LIBCRYPT_FALSE@
++NEED_LIBCRYPT_TRUE = @NEED_LIBCRYPT_TRUE@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -282,16 +384,18 @@
+ SUID_CFLAGS = @SUID_CFLAGS@
+ SUID_LDFLAGS = @SUID_LDFLAGS@
+ USE_NLS = @USE_NLS@
++USE_SLANG_FALSE = @USE_SLANG_FALSE@
++USE_SLANG_TRUE = @USE_SLANG_TRUE@
++USE_TTY_GROUP_FALSE = @USE_TTY_GROUP_FALSE@
++USE_TTY_GROUP_TRUE = @USE_TTY_GROUP_TRUE@
+ VERSION = @VERSION@
+ VOLID = @VOLID@
+ VOLUMEID_LIBS = @VOLUMEID_LIBS@
+ VOLUMEID_LIBS_STATIC = @VOLUMEID_LIBS_STATIC@
+ XGETTEXT = @XGETTEXT@
+-abs_builddir = @abs_builddir@
+-abs_srcdir = @abs_srcdir@
+-abs_top_builddir = @abs_top_builddir@
+-abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
++am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
++am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -303,7 +407,6 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+-builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -331,11 +434,8 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+-srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+-top_builddir = @top_builddir@
+-top_srcdir = @top_srcdir@
+
+ # The original default vaues of bindir and sbindir:
+ usrbinexecdir = ${exec_prefix}/bin
+@@ -359,19 +459,19 @@
+ lomount.h fsprobe.h realpath.h xmalloc.h \
+ getusername.h loop.h sundries.h
+
+-mount_common = fstab.c mount_mntent.c getusername.c lomount.c \
++mount_common = fstab.c mount_mntent.c getusername.c \
+ $(utils_common) $(headers_common) ../lib/env.c ../lib/linux_version.c \
+ ../lib/blkdev.c
+
+-mount_SOURCES = mount.c $(mount_common) ../lib/setproctitle.c
++mount_SOURCES = mount.c lomount.c loumount.c loop.c sha512.c rmd160.c aes.c $(mount_common) ../lib/setproctitle.c
+ mount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ mount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+-umount_SOURCES = umount.c $(mount_common)
++umount_SOURCES = umount.c loumount.c $(mount_common)
+ umount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+-swapon_SOURCES = swapon.c swap_constants.h $(utils_common) \
+- $(am__append_9)
+-losetup_SOURCES = lomount.c sundries.c xmalloc.c realpath.c \
++swapon_SOURCES = swapon.c loop.c sha512.c swap_constants.h \
++ $(utils_common) $(am__append_9)
++losetup_SOURCES = lomount.c loumount.c loop.c sha512.c rmd160.c aes.c sundries.c xmalloc.c \
+ loop.h lomount.h xmalloc.h sundries.h realpath.h
+
+ losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
+@@ -427,7 +527,7 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
++ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+@@ -453,7 +553,7 @@
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+ install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+- test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
++ test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+@@ -476,31 +576,31 @@
+ -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+ losetup$(EXEEXT): $(losetup_OBJECTS) $(losetup_DEPENDENCIES)
+ @rm -f losetup$(EXEEXT)
+- $(LINK) $(losetup_OBJECTS) $(losetup_LDADD) $(LIBS)
++ $(LINK) $(losetup_LDFLAGS) $(losetup_OBJECTS) $(losetup_LDADD) $(LIBS)
+ losetup.static$(EXEEXT): $(losetup_static_OBJECTS) $(losetup_static_DEPENDENCIES)
+ @rm -f losetup.static$(EXEEXT)
+- $(losetup_static_LINK) $(losetup_static_OBJECTS) $(losetup_static_LDADD) $(LIBS)
++ $(LINK) $(losetup_static_LDFLAGS) $(losetup_static_OBJECTS) $(losetup_static_LDADD) $(LIBS)
+ mount$(EXEEXT): $(mount_OBJECTS) $(mount_DEPENDENCIES)
+ @rm -f mount$(EXEEXT)
+- $(mount_LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
++ $(LINK) $(mount_LDFLAGS) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
+ mount.static$(EXEEXT): $(mount_static_OBJECTS) $(mount_static_DEPENDENCIES)
+ @rm -f mount.static$(EXEEXT)
+- $(mount_static_LINK) $(mount_static_OBJECTS) $(mount_static_LDADD) $(LIBS)
++ $(LINK) $(mount_static_LDFLAGS) $(mount_static_OBJECTS) $(mount_static_LDADD) $(LIBS)
+ mtab_lock_test$(EXEEXT): $(mtab_lock_test_OBJECTS) $(mtab_lock_test_DEPENDENCIES)
+ @rm -f mtab_lock_test$(EXEEXT)
+- $(LINK) $(mtab_lock_test_OBJECTS) $(mtab_lock_test_LDADD) $(LIBS)
++ $(LINK) $(mtab_lock_test_LDFLAGS) $(mtab_lock_test_OBJECTS) $(mtab_lock_test_LDADD) $(LIBS)
+ pivot_root$(EXEEXT): $(pivot_root_OBJECTS) $(pivot_root_DEPENDENCIES)
+ @rm -f pivot_root$(EXEEXT)
+- $(LINK) $(pivot_root_OBJECTS) $(pivot_root_LDADD) $(LIBS)
++ $(LINK) $(pivot_root_LDFLAGS) $(pivot_root_OBJECTS) $(pivot_root_LDADD) $(LIBS)
+ swapon$(EXEEXT): $(swapon_OBJECTS) $(swapon_DEPENDENCIES)
+ @rm -f swapon$(EXEEXT)
+- $(LINK) $(swapon_OBJECTS) $(swapon_LDADD) $(LIBS)
++ $(LINK) $(swapon_LDFLAGS) $(swapon_OBJECTS) $(swapon_LDADD) $(LIBS)
+ umount$(EXEEXT): $(umount_OBJECTS) $(umount_DEPENDENCIES)
+ @rm -f umount$(EXEEXT)
+- $(umount_LINK) $(umount_OBJECTS) $(umount_LDADD) $(LIBS)
++ $(LINK) $(umount_LDFLAGS) $(umount_OBJECTS) $(umount_LDADD) $(LIBS)
+ umount.static$(EXEEXT): $(umount_static_OBJECTS) $(umount_static_DEPENDENCIES)
+ @rm -f umount.static$(EXEEXT)
+- $(umount_static_LINK) $(umount_static_OBJECTS) $(umount_static_LDADD) $(LIBS)
++ $(LINK) $(umount_static_LDFLAGS) $(umount_static_OBJECTS) $(umount_static_LDADD) $(LIBS)
+
+ mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+@@ -508,6 +608,7 @@
+ distclean-compile:
+ -rm -f *.tab.c
+
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blkdev.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsprobe.Po@am__quote@
+@@ -517,14 +618,25 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux_version.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-lomount.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-rmd160.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-xmalloc.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-lomount.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-rmd160.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-xmalloc.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-blkdev.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-env.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-fsprobe.Po@am__quote@
+@@ -534,10 +646,14 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-linux_version.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-loumount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-mount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-mount_mntent.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-rmd160.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-setproctitle.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-xmalloc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
+@@ -547,7 +663,9 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtab_lock_test-xmalloc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pivot_root.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmd160.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setproctitle.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swapon.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-blkdev.Po@am__quote@
+@@ -558,7 +676,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-fstab.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-linux_version.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-loumount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-mount_mntent.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-realpath.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-sundries.Po@am__quote@
+@@ -568,637 +686,820 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+
+ .c.o:
+-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ losetup-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.o -MD -MP -MF $(DEPDIR)/losetup-lomount.Tpo -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-lomount.Tpo $(DEPDIR)/losetup-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.o -MD -MP -MF "$(DEPDIR)/losetup-lomount.Tpo" -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-lomount.Tpo" "$(DEPDIR)/losetup-lomount.Po"; else rm -f "$(DEPDIR)/losetup-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup-lomount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+
+ losetup-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.obj -MD -MP -MF $(DEPDIR)/losetup-lomount.Tpo -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-lomount.Tpo $(DEPDIR)/losetup-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.obj -MD -MP -MF "$(DEPDIR)/losetup-lomount.Tpo" -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-lomount.Tpo" "$(DEPDIR)/losetup-lomount.Po"; else rm -f "$(DEPDIR)/losetup-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup-lomount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+
++losetup-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loumount.o -MD -MP -MF "$(DEPDIR)/losetup-loumount.Tpo" -c -o losetup-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loumount.Tpo" "$(DEPDIR)/losetup-loumount.Po"; else rm -f "$(DEPDIR)/losetup-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++losetup-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loumount.obj -MD -MP -MF "$(DEPDIR)/losetup-loumount.Tpo" -c -o losetup-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loumount.Tpo" "$(DEPDIR)/losetup-loumount.Po"; else rm -f "$(DEPDIR)/losetup-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++losetup-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loop.o -MD -MP -MF "$(DEPDIR)/losetup-loop.Tpo" -c -o losetup-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loop.Tpo" "$(DEPDIR)/losetup-loop.Po"; else rm -f "$(DEPDIR)/losetup-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++losetup-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loop.obj -MD -MP -MF "$(DEPDIR)/losetup-loop.Tpo" -c -o losetup-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loop.Tpo" "$(DEPDIR)/losetup-loop.Po"; else rm -f "$(DEPDIR)/losetup-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++losetup-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sha512.o -MD -MP -MF "$(DEPDIR)/losetup-sha512.Tpo" -c -o losetup-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sha512.Tpo" "$(DEPDIR)/losetup-sha512.Po"; else rm -f "$(DEPDIR)/losetup-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++losetup-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sha512.obj -MD -MP -MF "$(DEPDIR)/losetup-sha512.Tpo" -c -o losetup-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sha512.Tpo" "$(DEPDIR)/losetup-sha512.Po"; else rm -f "$(DEPDIR)/losetup-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++losetup-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-rmd160.o -MD -MP -MF "$(DEPDIR)/losetup-rmd160.Tpo" -c -o losetup-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-rmd160.Tpo" "$(DEPDIR)/losetup-rmd160.Po"; else rm -f "$(DEPDIR)/losetup-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++losetup-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-rmd160.obj -MD -MP -MF "$(DEPDIR)/losetup-rmd160.Tpo" -c -o losetup-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-rmd160.Tpo" "$(DEPDIR)/losetup-rmd160.Po"; else rm -f "$(DEPDIR)/losetup-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++losetup-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-aes.o -MD -MP -MF "$(DEPDIR)/losetup-aes.Tpo" -c -o losetup-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-aes.Tpo" "$(DEPDIR)/losetup-aes.Po"; else rm -f "$(DEPDIR)/losetup-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++losetup-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-aes.obj -MD -MP -MF "$(DEPDIR)/losetup-aes.Tpo" -c -o losetup-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-aes.Tpo" "$(DEPDIR)/losetup-aes.Po"; else rm -f "$(DEPDIR)/losetup-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ losetup-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.o -MD -MP -MF $(DEPDIR)/losetup-sundries.Tpo -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-sundries.Tpo $(DEPDIR)/losetup-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.o -MD -MP -MF "$(DEPDIR)/losetup-sundries.Tpo" -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sundries.Tpo" "$(DEPDIR)/losetup-sundries.Po"; else rm -f "$(DEPDIR)/losetup-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ losetup-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.obj -MD -MP -MF $(DEPDIR)/losetup-sundries.Tpo -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-sundries.Tpo $(DEPDIR)/losetup-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.obj -MD -MP -MF "$(DEPDIR)/losetup-sundries.Tpo" -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sundries.Tpo" "$(DEPDIR)/losetup-sundries.Po"; else rm -f "$(DEPDIR)/losetup-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ losetup-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.o -MD -MP -MF $(DEPDIR)/losetup-xmalloc.Tpo -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-xmalloc.Tpo $(DEPDIR)/losetup-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.o -MD -MP -MF "$(DEPDIR)/losetup-xmalloc.Tpo" -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-xmalloc.Tpo" "$(DEPDIR)/losetup-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ losetup-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.obj -MD -MP -MF $(DEPDIR)/losetup-xmalloc.Tpo -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-xmalloc.Tpo $(DEPDIR)/losetup-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.obj -MD -MP -MF "$(DEPDIR)/losetup-xmalloc.Tpo" -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-xmalloc.Tpo" "$(DEPDIR)/losetup-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+-losetup-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-realpath.o -MD -MP -MF $(DEPDIR)/losetup-realpath.Tpo -c -o losetup-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-realpath.Tpo $(DEPDIR)/losetup-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup-realpath.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-
+-losetup-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-realpath.obj -MD -MP -MF $(DEPDIR)/losetup-realpath.Tpo -c -o losetup-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-realpath.Tpo $(DEPDIR)/losetup-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup-realpath.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-
+ losetup_static-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.o -MD -MP -MF $(DEPDIR)/losetup_static-lomount.Tpo -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-lomount.Tpo $(DEPDIR)/losetup_static-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.o -MD -MP -MF "$(DEPDIR)/losetup_static-lomount.Tpo" -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-lomount.Tpo" "$(DEPDIR)/losetup_static-lomount.Po"; else rm -f "$(DEPDIR)/losetup_static-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup_static-lomount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+
+ losetup_static-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.obj -MD -MP -MF $(DEPDIR)/losetup_static-lomount.Tpo -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-lomount.Tpo $(DEPDIR)/losetup_static-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.obj -MD -MP -MF "$(DEPDIR)/losetup_static-lomount.Tpo" -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-lomount.Tpo" "$(DEPDIR)/losetup_static-lomount.Po"; else rm -f "$(DEPDIR)/losetup_static-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup_static-lomount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+
++losetup_static-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loumount.o -MD -MP -MF "$(DEPDIR)/losetup_static-loumount.Tpo" -c -o losetup_static-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loumount.Tpo" "$(DEPDIR)/losetup_static-loumount.Po"; else rm -f "$(DEPDIR)/losetup_static-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup_static-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++losetup_static-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loumount.obj -MD -MP -MF "$(DEPDIR)/losetup_static-loumount.Tpo" -c -o losetup_static-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loumount.Tpo" "$(DEPDIR)/losetup_static-loumount.Po"; else rm -f "$(DEPDIR)/losetup_static-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup_static-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++losetup_static-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loop.o -MD -MP -MF "$(DEPDIR)/losetup_static-loop.Tpo" -c -o losetup_static-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loop.Tpo" "$(DEPDIR)/losetup_static-loop.Po"; else rm -f "$(DEPDIR)/losetup_static-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup_static-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++losetup_static-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loop.obj -MD -MP -MF "$(DEPDIR)/losetup_static-loop.Tpo" -c -o losetup_static-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loop.Tpo" "$(DEPDIR)/losetup_static-loop.Po"; else rm -f "$(DEPDIR)/losetup_static-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup_static-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++losetup_static-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sha512.o -MD -MP -MF "$(DEPDIR)/losetup_static-sha512.Tpo" -c -o losetup_static-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sha512.Tpo" "$(DEPDIR)/losetup_static-sha512.Po"; else rm -f "$(DEPDIR)/losetup_static-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup_static-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++losetup_static-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sha512.obj -MD -MP -MF "$(DEPDIR)/losetup_static-sha512.Tpo" -c -o losetup_static-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sha512.Tpo" "$(DEPDIR)/losetup_static-sha512.Po"; else rm -f "$(DEPDIR)/losetup_static-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup_static-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++losetup_static-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-rmd160.o -MD -MP -MF "$(DEPDIR)/losetup_static-rmd160.Tpo" -c -o losetup_static-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-rmd160.Tpo" "$(DEPDIR)/losetup_static-rmd160.Po"; else rm -f "$(DEPDIR)/losetup_static-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup_static-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++losetup_static-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-rmd160.obj -MD -MP -MF "$(DEPDIR)/losetup_static-rmd160.Tpo" -c -o losetup_static-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-rmd160.Tpo" "$(DEPDIR)/losetup_static-rmd160.Po"; else rm -f "$(DEPDIR)/losetup_static-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup_static-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++losetup_static-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-aes.o -MD -MP -MF "$(DEPDIR)/losetup_static-aes.Tpo" -c -o losetup_static-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-aes.Tpo" "$(DEPDIR)/losetup_static-aes.Po"; else rm -f "$(DEPDIR)/losetup_static-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup_static-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++losetup_static-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-aes.obj -MD -MP -MF "$(DEPDIR)/losetup_static-aes.Tpo" -c -o losetup_static-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-aes.Tpo" "$(DEPDIR)/losetup_static-aes.Po"; else rm -f "$(DEPDIR)/losetup_static-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup_static-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ losetup_static-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.o -MD -MP -MF $(DEPDIR)/losetup_static-sundries.Tpo -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-sundries.Tpo $(DEPDIR)/losetup_static-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.o -MD -MP -MF "$(DEPDIR)/losetup_static-sundries.Tpo" -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sundries.Tpo" "$(DEPDIR)/losetup_static-sundries.Po"; else rm -f "$(DEPDIR)/losetup_static-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup_static-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ losetup_static-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.obj -MD -MP -MF $(DEPDIR)/losetup_static-sundries.Tpo -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-sundries.Tpo $(DEPDIR)/losetup_static-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.obj -MD -MP -MF "$(DEPDIR)/losetup_static-sundries.Tpo" -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sundries.Tpo" "$(DEPDIR)/losetup_static-sundries.Po"; else rm -f "$(DEPDIR)/losetup_static-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup_static-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ losetup_static-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.o -MD -MP -MF $(DEPDIR)/losetup_static-xmalloc.Tpo -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-xmalloc.Tpo $(DEPDIR)/losetup_static-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.o -MD -MP -MF "$(DEPDIR)/losetup_static-xmalloc.Tpo" -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-xmalloc.Tpo" "$(DEPDIR)/losetup_static-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup_static-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup_static-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ losetup_static-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.obj -MD -MP -MF $(DEPDIR)/losetup_static-xmalloc.Tpo -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-xmalloc.Tpo $(DEPDIR)/losetup_static-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.obj -MD -MP -MF "$(DEPDIR)/losetup_static-xmalloc.Tpo" -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-xmalloc.Tpo" "$(DEPDIR)/losetup_static-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup_static-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup_static-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+-losetup_static-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-realpath.o -MD -MP -MF $(DEPDIR)/losetup_static-realpath.Tpo -c -o losetup_static-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-realpath.Tpo $(DEPDIR)/losetup_static-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup_static-realpath.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-
+-losetup_static-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-realpath.obj -MD -MP -MF $(DEPDIR)/losetup_static-realpath.Tpo -c -o losetup_static-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-realpath.Tpo $(DEPDIR)/losetup_static-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup_static-realpath.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-
+ mount-mount.o: mount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.o -MD -MP -MF $(DEPDIR)/mount-mount.Tpo -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount.Tpo $(DEPDIR)/mount-mount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.o -MD -MP -MF "$(DEPDIR)/mount-mount.Tpo" -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount.Tpo" "$(DEPDIR)/mount-mount.Po"; else rm -f "$(DEPDIR)/mount-mount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount.c' object='mount-mount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
+
+ mount-mount.obj: mount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.obj -MD -MP -MF $(DEPDIR)/mount-mount.Tpo -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount.Tpo $(DEPDIR)/mount-mount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.obj -MD -MP -MF "$(DEPDIR)/mount-mount.Tpo" -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount.Tpo" "$(DEPDIR)/mount-mount.Po"; else rm -f "$(DEPDIR)/mount-mount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount.c' object='mount-mount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
+
++mount-lomount.o: lomount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.o -MD -MP -MF "$(DEPDIR)/mount-lomount.Tpo" -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-lomount.Tpo" "$(DEPDIR)/mount-lomount.Po"; else rm -f "$(DEPDIR)/mount-lomount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
++
++mount-lomount.obj: lomount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.obj -MD -MP -MF "$(DEPDIR)/mount-lomount.Tpo" -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-lomount.Tpo" "$(DEPDIR)/mount-lomount.Po"; else rm -f "$(DEPDIR)/mount-lomount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
++
++mount-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loumount.o -MD -MP -MF "$(DEPDIR)/mount-loumount.Tpo" -c -o mount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loumount.Tpo" "$(DEPDIR)/mount-loumount.Po"; else rm -f "$(DEPDIR)/mount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='mount-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++mount-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loumount.obj -MD -MP -MF "$(DEPDIR)/mount-loumount.Tpo" -c -o mount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loumount.Tpo" "$(DEPDIR)/mount-loumount.Po"; else rm -f "$(DEPDIR)/mount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='mount-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++mount-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loop.o -MD -MP -MF "$(DEPDIR)/mount-loop.Tpo" -c -o mount-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loop.Tpo" "$(DEPDIR)/mount-loop.Po"; else rm -f "$(DEPDIR)/mount-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='mount-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++mount-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loop.obj -MD -MP -MF "$(DEPDIR)/mount-loop.Tpo" -c -o mount-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loop.Tpo" "$(DEPDIR)/mount-loop.Po"; else rm -f "$(DEPDIR)/mount-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='mount-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++mount-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sha512.o -MD -MP -MF "$(DEPDIR)/mount-sha512.Tpo" -c -o mount-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sha512.Tpo" "$(DEPDIR)/mount-sha512.Po"; else rm -f "$(DEPDIR)/mount-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='mount-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++mount-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sha512.obj -MD -MP -MF "$(DEPDIR)/mount-sha512.Tpo" -c -o mount-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sha512.Tpo" "$(DEPDIR)/mount-sha512.Po"; else rm -f "$(DEPDIR)/mount-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='mount-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++mount-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-rmd160.o -MD -MP -MF "$(DEPDIR)/mount-rmd160.Tpo" -c -o mount-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-rmd160.Tpo" "$(DEPDIR)/mount-rmd160.Po"; else rm -f "$(DEPDIR)/mount-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='mount-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++mount-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-rmd160.obj -MD -MP -MF "$(DEPDIR)/mount-rmd160.Tpo" -c -o mount-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-rmd160.Tpo" "$(DEPDIR)/mount-rmd160.Po"; else rm -f "$(DEPDIR)/mount-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='mount-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++mount-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-aes.o -MD -MP -MF "$(DEPDIR)/mount-aes.Tpo" -c -o mount-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-aes.Tpo" "$(DEPDIR)/mount-aes.Po"; else rm -f "$(DEPDIR)/mount-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='mount-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++mount-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-aes.obj -MD -MP -MF "$(DEPDIR)/mount-aes.Tpo" -c -o mount-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-aes.Tpo" "$(DEPDIR)/mount-aes.Po"; else rm -f "$(DEPDIR)/mount-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='mount-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ mount-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.o -MD -MP -MF $(DEPDIR)/mount-fstab.Tpo -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fstab.Tpo $(DEPDIR)/mount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.o -MD -MP -MF "$(DEPDIR)/mount-fstab.Tpo" -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fstab.Tpo" "$(DEPDIR)/mount-fstab.Po"; else rm -f "$(DEPDIR)/mount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mount-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ mount-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.obj -MD -MP -MF $(DEPDIR)/mount-fstab.Tpo -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fstab.Tpo $(DEPDIR)/mount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.obj -MD -MP -MF "$(DEPDIR)/mount-fstab.Tpo" -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fstab.Tpo" "$(DEPDIR)/mount-fstab.Po"; else rm -f "$(DEPDIR)/mount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mount-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ mount-mount_mntent.o: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.o -MD -MP -MF $(DEPDIR)/mount-mount_mntent.Tpo -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount_mntent.Tpo $(DEPDIR)/mount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.o -MD -MP -MF "$(DEPDIR)/mount-mount_mntent.Tpo" -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount_mntent.Tpo" "$(DEPDIR)/mount-mount_mntent.Po"; else rm -f "$(DEPDIR)/mount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='mount-mount_mntent.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+
+ mount-mount_mntent.obj: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.obj -MD -MP -MF $(DEPDIR)/mount-mount_mntent.Tpo -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount_mntent.Tpo $(DEPDIR)/mount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.obj -MD -MP -MF "$(DEPDIR)/mount-mount_mntent.Tpo" -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount_mntent.Tpo" "$(DEPDIR)/mount-mount_mntent.Po"; else rm -f "$(DEPDIR)/mount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='mount-mount_mntent.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+
+ mount-getusername.o: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.o -MD -MP -MF $(DEPDIR)/mount-getusername.Tpo -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-getusername.Tpo $(DEPDIR)/mount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.o -MD -MP -MF "$(DEPDIR)/mount-getusername.Tpo" -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-getusername.Tpo" "$(DEPDIR)/mount-getusername.Po"; else rm -f "$(DEPDIR)/mount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='mount-getusername.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+
+ mount-getusername.obj: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.obj -MD -MP -MF $(DEPDIR)/mount-getusername.Tpo -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-getusername.Tpo $(DEPDIR)/mount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.obj -MD -MP -MF "$(DEPDIR)/mount-getusername.Tpo" -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-getusername.Tpo" "$(DEPDIR)/mount-getusername.Po"; else rm -f "$(DEPDIR)/mount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='mount-getusername.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+
+-mount-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.o -MD -MP -MF $(DEPDIR)/mount-lomount.Tpo -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-lomount.Tpo $(DEPDIR)/mount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-
+-mount-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.obj -MD -MP -MF $(DEPDIR)/mount-lomount.Tpo -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-lomount.Tpo $(DEPDIR)/mount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-
+ mount-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.o -MD -MP -MF $(DEPDIR)/mount-sundries.Tpo -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-sundries.Tpo $(DEPDIR)/mount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.o -MD -MP -MF "$(DEPDIR)/mount-sundries.Tpo" -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sundries.Tpo" "$(DEPDIR)/mount-sundries.Po"; else rm -f "$(DEPDIR)/mount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mount-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ mount-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.obj -MD -MP -MF $(DEPDIR)/mount-sundries.Tpo -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-sundries.Tpo $(DEPDIR)/mount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.obj -MD -MP -MF "$(DEPDIR)/mount-sundries.Tpo" -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sundries.Tpo" "$(DEPDIR)/mount-sundries.Po"; else rm -f "$(DEPDIR)/mount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mount-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ mount-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.o -MD -MP -MF $(DEPDIR)/mount-xmalloc.Tpo -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-xmalloc.Tpo $(DEPDIR)/mount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.o -MD -MP -MF "$(DEPDIR)/mount-xmalloc.Tpo" -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-xmalloc.Tpo" "$(DEPDIR)/mount-xmalloc.Po"; else rm -f "$(DEPDIR)/mount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mount-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ mount-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.obj -MD -MP -MF $(DEPDIR)/mount-xmalloc.Tpo -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-xmalloc.Tpo $(DEPDIR)/mount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.obj -MD -MP -MF "$(DEPDIR)/mount-xmalloc.Tpo" -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-xmalloc.Tpo" "$(DEPDIR)/mount-xmalloc.Po"; else rm -f "$(DEPDIR)/mount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mount-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ mount-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.o -MD -MP -MF $(DEPDIR)/mount-realpath.Tpo -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-realpath.Tpo $(DEPDIR)/mount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.o -MD -MP -MF "$(DEPDIR)/mount-realpath.Tpo" -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-realpath.Tpo" "$(DEPDIR)/mount-realpath.Po"; else rm -f "$(DEPDIR)/mount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='mount-realpath.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+
+ mount-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.obj -MD -MP -MF $(DEPDIR)/mount-realpath.Tpo -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-realpath.Tpo $(DEPDIR)/mount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.obj -MD -MP -MF "$(DEPDIR)/mount-realpath.Tpo" -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-realpath.Tpo" "$(DEPDIR)/mount-realpath.Po"; else rm -f "$(DEPDIR)/mount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='mount-realpath.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+
+ mount-fsprobe.o: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.o -MD -MP -MF $(DEPDIR)/mount-fsprobe.Tpo -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe.Tpo $(DEPDIR)/mount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe.Tpo" -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe.Tpo" "$(DEPDIR)/mount-fsprobe.Po"; else rm -f "$(DEPDIR)/mount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='mount-fsprobe.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+
+ mount-fsprobe.obj: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe.Tpo -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe.Tpo $(DEPDIR)/mount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe.Tpo" -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe.Tpo" "$(DEPDIR)/mount-fsprobe.Po"; else rm -f "$(DEPDIR)/mount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='mount-fsprobe.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+
+ mount-fsprobe_blkid.o: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.o -MD -MP -MF $(DEPDIR)/mount-fsprobe_blkid.Tpo -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_blkid.Tpo $(DEPDIR)/mount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe_blkid.Tpo" -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo" "$(DEPDIR)/mount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='mount-fsprobe_blkid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+
+ mount-fsprobe_blkid.obj: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe_blkid.Tpo -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_blkid.Tpo $(DEPDIR)/mount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe_blkid.Tpo" -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo" "$(DEPDIR)/mount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='mount-fsprobe_blkid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+
+ mount-fsprobe_volumeid.o: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.o -MD -MP -MF $(DEPDIR)/mount-fsprobe_volumeid.Tpo -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_volumeid.Tpo $(DEPDIR)/mount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" "$(DEPDIR)/mount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='mount-fsprobe_volumeid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+
+ mount-fsprobe_volumeid.obj: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe_volumeid.Tpo -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_volumeid.Tpo $(DEPDIR)/mount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" "$(DEPDIR)/mount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='mount-fsprobe_volumeid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+
+ mount-env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.o -MD -MP -MF $(DEPDIR)/mount-env.Tpo -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-env.Tpo $(DEPDIR)/mount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.o -MD -MP -MF "$(DEPDIR)/mount-env.Tpo" -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-env.Tpo" "$(DEPDIR)/mount-env.Po"; else rm -f "$(DEPDIR)/mount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='mount-env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ mount-env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.obj -MD -MP -MF $(DEPDIR)/mount-env.Tpo -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-env.Tpo $(DEPDIR)/mount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.obj -MD -MP -MF "$(DEPDIR)/mount-env.Tpo" -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-env.Tpo" "$(DEPDIR)/mount-env.Po"; else rm -f "$(DEPDIR)/mount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='mount-env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ mount-linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.o -MD -MP -MF $(DEPDIR)/mount-linux_version.Tpo -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-linux_version.Tpo $(DEPDIR)/mount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.o -MD -MP -MF "$(DEPDIR)/mount-linux_version.Tpo" -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-linux_version.Tpo" "$(DEPDIR)/mount-linux_version.Po"; else rm -f "$(DEPDIR)/mount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='mount-linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ mount-linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.obj -MD -MP -MF $(DEPDIR)/mount-linux_version.Tpo -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-linux_version.Tpo $(DEPDIR)/mount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.obj -MD -MP -MF "$(DEPDIR)/mount-linux_version.Tpo" -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-linux_version.Tpo" "$(DEPDIR)/mount-linux_version.Po"; else rm -f "$(DEPDIR)/mount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='mount-linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ mount-blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.o -MD -MP -MF $(DEPDIR)/mount-blkdev.Tpo -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-blkdev.Tpo $(DEPDIR)/mount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.o -MD -MP -MF "$(DEPDIR)/mount-blkdev.Tpo" -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-blkdev.Tpo" "$(DEPDIR)/mount-blkdev.Po"; else rm -f "$(DEPDIR)/mount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='mount-blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ mount-blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.obj -MD -MP -MF $(DEPDIR)/mount-blkdev.Tpo -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-blkdev.Tpo $(DEPDIR)/mount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.obj -MD -MP -MF "$(DEPDIR)/mount-blkdev.Tpo" -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-blkdev.Tpo" "$(DEPDIR)/mount-blkdev.Po"; else rm -f "$(DEPDIR)/mount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='mount-blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+
+ mount-setproctitle.o: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.o -MD -MP -MF $(DEPDIR)/mount-setproctitle.Tpo -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-setproctitle.Tpo $(DEPDIR)/mount-setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.o -MD -MP -MF "$(DEPDIR)/mount-setproctitle.Tpo" -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-setproctitle.Tpo" "$(DEPDIR)/mount-setproctitle.Po"; else rm -f "$(DEPDIR)/mount-setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='mount-setproctitle.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+
+ mount-setproctitle.obj: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.obj -MD -MP -MF $(DEPDIR)/mount-setproctitle.Tpo -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-setproctitle.Tpo $(DEPDIR)/mount-setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.obj -MD -MP -MF "$(DEPDIR)/mount-setproctitle.Tpo" -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-setproctitle.Tpo" "$(DEPDIR)/mount-setproctitle.Po"; else rm -f "$(DEPDIR)/mount-setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='mount-setproctitle.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+
+ env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.o -MD -MP -MF $(DEPDIR)/env.Tpo -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/env.Tpo $(DEPDIR)/env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.o -MD -MP -MF "$(DEPDIR)/env.Tpo" -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/env.Tpo" "$(DEPDIR)/env.Po"; else rm -f "$(DEPDIR)/env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.obj -MD -MP -MF $(DEPDIR)/env.Tpo -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/env.Tpo $(DEPDIR)/env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.obj -MD -MP -MF "$(DEPDIR)/env.Tpo" -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/env.Tpo" "$(DEPDIR)/env.Po"; else rm -f "$(DEPDIR)/env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.o -MD -MP -MF $(DEPDIR)/linux_version.Tpo -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/linux_version.Tpo $(DEPDIR)/linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.o -MD -MP -MF "$(DEPDIR)/linux_version.Tpo" -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/linux_version.Tpo" "$(DEPDIR)/linux_version.Po"; else rm -f "$(DEPDIR)/linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.obj -MD -MP -MF $(DEPDIR)/linux_version.Tpo -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/linux_version.Tpo $(DEPDIR)/linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.obj -MD -MP -MF "$(DEPDIR)/linux_version.Tpo" -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/linux_version.Tpo" "$(DEPDIR)/linux_version.Po"; else rm -f "$(DEPDIR)/linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.o -MD -MP -MF $(DEPDIR)/blkdev.Tpo -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/blkdev.Tpo $(DEPDIR)/blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.o -MD -MP -MF "$(DEPDIR)/blkdev.Tpo" -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/blkdev.Tpo" "$(DEPDIR)/blkdev.Po"; else rm -f "$(DEPDIR)/blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.obj -MD -MP -MF $(DEPDIR)/blkdev.Tpo -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/blkdev.Tpo $(DEPDIR)/blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.obj -MD -MP -MF "$(DEPDIR)/blkdev.Tpo" -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/blkdev.Tpo" "$(DEPDIR)/blkdev.Po"; else rm -f "$(DEPDIR)/blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+
+ setproctitle.o: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.o -MD -MP -MF $(DEPDIR)/setproctitle.Tpo -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/setproctitle.Tpo $(DEPDIR)/setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.o -MD -MP -MF "$(DEPDIR)/setproctitle.Tpo" -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/setproctitle.Tpo" "$(DEPDIR)/setproctitle.Po"; else rm -f "$(DEPDIR)/setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='setproctitle.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+
+ setproctitle.obj: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.obj -MD -MP -MF $(DEPDIR)/setproctitle.Tpo -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/setproctitle.Tpo $(DEPDIR)/setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.obj -MD -MP -MF "$(DEPDIR)/setproctitle.Tpo" -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/setproctitle.Tpo" "$(DEPDIR)/setproctitle.Po"; else rm -f "$(DEPDIR)/setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='setproctitle.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+
+ mtab_lock_test-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-fstab.Tpo -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-fstab.Tpo $(DEPDIR)/mtab_lock_test-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-fstab.Tpo" -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo" "$(DEPDIR)/mtab_lock_test-fstab.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mtab_lock_test-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ mtab_lock_test-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-fstab.Tpo -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-fstab.Tpo $(DEPDIR)/mtab_lock_test-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-fstab.Tpo" -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo" "$(DEPDIR)/mtab_lock_test-fstab.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mtab_lock_test-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ mtab_lock_test-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-sundries.Tpo -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-sundries.Tpo $(DEPDIR)/mtab_lock_test-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-sundries.Tpo" -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo" "$(DEPDIR)/mtab_lock_test-sundries.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mtab_lock_test-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ mtab_lock_test-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-sundries.Tpo -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-sundries.Tpo $(DEPDIR)/mtab_lock_test-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-sundries.Tpo" -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo" "$(DEPDIR)/mtab_lock_test-sundries.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mtab_lock_test-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ mtab_lock_test-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-xmalloc.Tpo -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-xmalloc.Tpo $(DEPDIR)/mtab_lock_test-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" "$(DEPDIR)/mtab_lock_test-xmalloc.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mtab_lock_test-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ mtab_lock_test-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-xmalloc.Tpo -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-xmalloc.Tpo $(DEPDIR)/mtab_lock_test-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" "$(DEPDIR)/mtab_lock_test-xmalloc.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mtab_lock_test-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ umount-umount.o: umount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.o -MD -MP -MF $(DEPDIR)/umount-umount.Tpo -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-umount.Tpo $(DEPDIR)/umount-umount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.o -MD -MP -MF "$(DEPDIR)/umount-umount.Tpo" -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-umount.Tpo" "$(DEPDIR)/umount-umount.Po"; else rm -f "$(DEPDIR)/umount-umount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='umount.c' object='umount-umount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
+
+ umount-umount.obj: umount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.obj -MD -MP -MF $(DEPDIR)/umount-umount.Tpo -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-umount.Tpo $(DEPDIR)/umount-umount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.obj -MD -MP -MF "$(DEPDIR)/umount-umount.Tpo" -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-umount.Tpo" "$(DEPDIR)/umount-umount.Po"; else rm -f "$(DEPDIR)/umount-umount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='umount.c' object='umount-umount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
+
++umount-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-loumount.o -MD -MP -MF "$(DEPDIR)/umount-loumount.Tpo" -c -o umount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-loumount.Tpo" "$(DEPDIR)/umount-loumount.Po"; else rm -f "$(DEPDIR)/umount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='umount-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++umount-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-loumount.obj -MD -MP -MF "$(DEPDIR)/umount-loumount.Tpo" -c -o umount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-loumount.Tpo" "$(DEPDIR)/umount-loumount.Po"; else rm -f "$(DEPDIR)/umount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='umount-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
+ umount-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.o -MD -MP -MF $(DEPDIR)/umount-fstab.Tpo -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fstab.Tpo $(DEPDIR)/umount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.o -MD -MP -MF "$(DEPDIR)/umount-fstab.Tpo" -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fstab.Tpo" "$(DEPDIR)/umount-fstab.Po"; else rm -f "$(DEPDIR)/umount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='umount-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ umount-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.obj -MD -MP -MF $(DEPDIR)/umount-fstab.Tpo -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fstab.Tpo $(DEPDIR)/umount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.obj -MD -MP -MF "$(DEPDIR)/umount-fstab.Tpo" -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fstab.Tpo" "$(DEPDIR)/umount-fstab.Po"; else rm -f "$(DEPDIR)/umount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='umount-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ umount-mount_mntent.o: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.o -MD -MP -MF $(DEPDIR)/umount-mount_mntent.Tpo -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-mount_mntent.Tpo $(DEPDIR)/umount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.o -MD -MP -MF "$(DEPDIR)/umount-mount_mntent.Tpo" -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-mount_mntent.Tpo" "$(DEPDIR)/umount-mount_mntent.Po"; else rm -f "$(DEPDIR)/umount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='umount-mount_mntent.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+
+ umount-mount_mntent.obj: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.obj -MD -MP -MF $(DEPDIR)/umount-mount_mntent.Tpo -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-mount_mntent.Tpo $(DEPDIR)/umount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.obj -MD -MP -MF "$(DEPDIR)/umount-mount_mntent.Tpo" -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-mount_mntent.Tpo" "$(DEPDIR)/umount-mount_mntent.Po"; else rm -f "$(DEPDIR)/umount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='umount-mount_mntent.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+
+ umount-getusername.o: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.o -MD -MP -MF $(DEPDIR)/umount-getusername.Tpo -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-getusername.Tpo $(DEPDIR)/umount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.o -MD -MP -MF "$(DEPDIR)/umount-getusername.Tpo" -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-getusername.Tpo" "$(DEPDIR)/umount-getusername.Po"; else rm -f "$(DEPDIR)/umount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='umount-getusername.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+
+ umount-getusername.obj: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.obj -MD -MP -MF $(DEPDIR)/umount-getusername.Tpo -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-getusername.Tpo $(DEPDIR)/umount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.obj -MD -MP -MF "$(DEPDIR)/umount-getusername.Tpo" -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-getusername.Tpo" "$(DEPDIR)/umount-getusername.Po"; else rm -f "$(DEPDIR)/umount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='umount-getusername.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+
+-umount-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-lomount.o -MD -MP -MF $(DEPDIR)/umount-lomount.Tpo -c -o umount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-lomount.Tpo $(DEPDIR)/umount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='umount-lomount.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-
+-umount-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-lomount.obj -MD -MP -MF $(DEPDIR)/umount-lomount.Tpo -c -o umount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-lomount.Tpo $(DEPDIR)/umount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='umount-lomount.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-
+ umount-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.o -MD -MP -MF $(DEPDIR)/umount-sundries.Tpo -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-sundries.Tpo $(DEPDIR)/umount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.o -MD -MP -MF "$(DEPDIR)/umount-sundries.Tpo" -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-sundries.Tpo" "$(DEPDIR)/umount-sundries.Po"; else rm -f "$(DEPDIR)/umount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='umount-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ umount-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.obj -MD -MP -MF $(DEPDIR)/umount-sundries.Tpo -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-sundries.Tpo $(DEPDIR)/umount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.obj -MD -MP -MF "$(DEPDIR)/umount-sundries.Tpo" -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-sundries.Tpo" "$(DEPDIR)/umount-sundries.Po"; else rm -f "$(DEPDIR)/umount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='umount-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ umount-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.o -MD -MP -MF $(DEPDIR)/umount-xmalloc.Tpo -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-xmalloc.Tpo $(DEPDIR)/umount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.o -MD -MP -MF "$(DEPDIR)/umount-xmalloc.Tpo" -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-xmalloc.Tpo" "$(DEPDIR)/umount-xmalloc.Po"; else rm -f "$(DEPDIR)/umount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='umount-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ umount-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.obj -MD -MP -MF $(DEPDIR)/umount-xmalloc.Tpo -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-xmalloc.Tpo $(DEPDIR)/umount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.obj -MD -MP -MF "$(DEPDIR)/umount-xmalloc.Tpo" -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-xmalloc.Tpo" "$(DEPDIR)/umount-xmalloc.Po"; else rm -f "$(DEPDIR)/umount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='umount-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ umount-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.o -MD -MP -MF $(DEPDIR)/umount-realpath.Tpo -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-realpath.Tpo $(DEPDIR)/umount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.o -MD -MP -MF "$(DEPDIR)/umount-realpath.Tpo" -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-realpath.Tpo" "$(DEPDIR)/umount-realpath.Po"; else rm -f "$(DEPDIR)/umount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='umount-realpath.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+
+ umount-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.obj -MD -MP -MF $(DEPDIR)/umount-realpath.Tpo -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-realpath.Tpo $(DEPDIR)/umount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.obj -MD -MP -MF "$(DEPDIR)/umount-realpath.Tpo" -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-realpath.Tpo" "$(DEPDIR)/umount-realpath.Po"; else rm -f "$(DEPDIR)/umount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='umount-realpath.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+
+ umount-fsprobe.o: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.o -MD -MP -MF $(DEPDIR)/umount-fsprobe.Tpo -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe.Tpo $(DEPDIR)/umount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe.Tpo" -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe.Tpo" "$(DEPDIR)/umount-fsprobe.Po"; else rm -f "$(DEPDIR)/umount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='umount-fsprobe.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+
+ umount-fsprobe.obj: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe.Tpo -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe.Tpo $(DEPDIR)/umount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe.Tpo" -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe.Tpo" "$(DEPDIR)/umount-fsprobe.Po"; else rm -f "$(DEPDIR)/umount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='umount-fsprobe.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+
+ umount-fsprobe_blkid.o: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.o -MD -MP -MF $(DEPDIR)/umount-fsprobe_blkid.Tpo -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_blkid.Tpo $(DEPDIR)/umount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe_blkid.Tpo" -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo" "$(DEPDIR)/umount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='umount-fsprobe_blkid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+
+ umount-fsprobe_blkid.obj: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe_blkid.Tpo -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_blkid.Tpo $(DEPDIR)/umount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe_blkid.Tpo" -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo" "$(DEPDIR)/umount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='umount-fsprobe_blkid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+
+ umount-fsprobe_volumeid.o: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.o -MD -MP -MF $(DEPDIR)/umount-fsprobe_volumeid.Tpo -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_volumeid.Tpo $(DEPDIR)/umount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" "$(DEPDIR)/umount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='umount-fsprobe_volumeid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+
+ umount-fsprobe_volumeid.obj: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe_volumeid.Tpo -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_volumeid.Tpo $(DEPDIR)/umount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" "$(DEPDIR)/umount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='umount-fsprobe_volumeid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+
+ umount-env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.o -MD -MP -MF $(DEPDIR)/umount-env.Tpo -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-env.Tpo $(DEPDIR)/umount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.o -MD -MP -MF "$(DEPDIR)/umount-env.Tpo" -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-env.Tpo" "$(DEPDIR)/umount-env.Po"; else rm -f "$(DEPDIR)/umount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='umount-env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ umount-env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.obj -MD -MP -MF $(DEPDIR)/umount-env.Tpo -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-env.Tpo $(DEPDIR)/umount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.obj -MD -MP -MF "$(DEPDIR)/umount-env.Tpo" -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-env.Tpo" "$(DEPDIR)/umount-env.Po"; else rm -f "$(DEPDIR)/umount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='umount-env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ umount-linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.o -MD -MP -MF $(DEPDIR)/umount-linux_version.Tpo -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-linux_version.Tpo $(DEPDIR)/umount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.o -MD -MP -MF "$(DEPDIR)/umount-linux_version.Tpo" -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-linux_version.Tpo" "$(DEPDIR)/umount-linux_version.Po"; else rm -f "$(DEPDIR)/umount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='umount-linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ umount-linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.obj -MD -MP -MF $(DEPDIR)/umount-linux_version.Tpo -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-linux_version.Tpo $(DEPDIR)/umount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.obj -MD -MP -MF "$(DEPDIR)/umount-linux_version.Tpo" -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-linux_version.Tpo" "$(DEPDIR)/umount-linux_version.Po"; else rm -f "$(DEPDIR)/umount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='umount-linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ umount-blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.o -MD -MP -MF $(DEPDIR)/umount-blkdev.Tpo -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-blkdev.Tpo $(DEPDIR)/umount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.o -MD -MP -MF "$(DEPDIR)/umount-blkdev.Tpo" -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-blkdev.Tpo" "$(DEPDIR)/umount-blkdev.Po"; else rm -f "$(DEPDIR)/umount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='umount-blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ umount-blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.obj -MD -MP -MF $(DEPDIR)/umount-blkdev.Tpo -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-blkdev.Tpo $(DEPDIR)/umount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.obj -MD -MP -MF "$(DEPDIR)/umount-blkdev.Tpo" -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-blkdev.Tpo" "$(DEPDIR)/umount-blkdev.Po"; else rm -f "$(DEPDIR)/umount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='umount-blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
++uninstall-info-am:
+ install-man5: $(man5_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+- test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
++ test -z "$(man5dir)" || $(mkdir_p) "$(DESTDIR)$(man5dir)"
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+@@ -1243,7 +1544,7 @@
+ done
+ install-man8: $(man8_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+- test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
++ test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+@@ -1336,21 +1637,23 @@
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+- list='$(DISTFILES)'; \
+- dist_files=`for file in $$list; do echo $$file; done | \
+- sed -e "s|^$$srcdirstrip/||;t" \
+- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+- case $$dist_files in \
+- */*) $(MKDIR_P) `echo "$$dist_files" | \
+- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+- sort -u` ;; \
+- esac; \
+- for file in $$dist_files; do \
++ $(mkdir_p) $(distdir)/../config
++ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
++ list='$(DISTFILES)'; for file in $$list; do \
++ case $$file in \
++ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
++ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
++ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
++ dir="/$$dir"; \
++ $(mkdir_p) "$(distdir)$$dir"; \
++ else \
++ dir=''; \
++ fi; \
+ if test -d $$d/$$file; then \
+- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -1366,7 +1669,7 @@
+ all-am: Makefile $(PROGRAMS) $(MANS) $(DATA)
+ installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -1415,22 +1718,14 @@
+
+ install-data-am: install-man
+
+-install-dvi: install-dvi-am
+-
+ install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+-install-html: install-html-am
+-
+ install-info: install-info-am
+
+ install-man: install-man5 install-man8
+
+-install-pdf: install-pdf-am
+-
+-install-ps: install-ps-am
+-
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -1450,28 +1745,25 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-binPROGRAMS uninstall-man \
++uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+ uninstall-sbinPROGRAMS
+
+ uninstall-man: uninstall-man5 uninstall-man8
+
+-.MAKE: install-am install-exec-am install-strip
+-
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-noinstPROGRAMS clean-sbinPROGRAMS ctags \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+- install-dvi install-dvi-am install-exec install-exec-am \
+- install-exec-hook install-html install-html-am install-info \
++ install-exec install-exec-am install-exec-hook install-info \
+ install-info-am install-man install-man5 install-man8 \
+- install-pdf install-pdf-am install-ps install-ps-am \
+ install-sbinPROGRAMS install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+- uninstall-am uninstall-binPROGRAMS uninstall-man \
+- uninstall-man5 uninstall-man8 uninstall-sbinPROGRAMS
++ uninstall-am uninstall-binPROGRAMS uninstall-info-am \
++ uninstall-man uninstall-man5 uninstall-man8 \
++ uninstall-sbinPROGRAMS
+
+
+ install-exec-hook:
+diff -urN util-linux-ng-2.14/mount/aes.c util-linux-ng-2.14-AES/mount/aes.c
+--- util-linux-ng-2.14/mount/aes.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/aes.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,299 @@
++// I retain copyright in this code but I encourage its free use provided
++// that I don't carry any responsibility for the results. I am especially
++// happy to see it used in free and open source software. If you do use
++// it I would appreciate an acknowledgement of its origin in the code or
++// the product that results and I would also appreciate knowing a little
++// about the use to which it is being put. I am grateful to Frank Yellin
++// for some ideas that are used in this implementation.
++//
++// Dr B. R. Gladman <brg@gladman.uk.net> 6th April 2001.
++//
++// This is an implementation of the AES encryption algorithm (Rijndael)
++// designed by Joan Daemen and Vincent Rijmen. This version is designed
++// to provide both fixed and dynamic block and key lengths and can also
++// run with either big or little endian internal byte order (see aes.h).
++// It inputs block and key lengths in bytes with the legal values being
++// 16, 24 and 32.
++
++/*
++ * Modified by Jari Ruusu, May 1 2001
++ * - Fixed some compile warnings, code was ok but gcc warned anyway.
++ * - Changed basic types: byte -> unsigned char, word -> u_int32_t
++ * - Major name space cleanup: Names visible to outside now begin
++ * with "aes_" or "AES_". A lot of stuff moved from aes.h to aes.c
++ * - Removed C++ and DLL support as part of name space cleanup.
++ * - Eliminated unnecessary recomputation of tables. (actual bug fix)
++ * - Merged precomputed constant tables to aes.c file.
++ * - Removed data alignment restrictions for portability reasons.
++ * - Made block and key lengths accept bit count (128/192/256)
++ * as well byte count (16/24/32).
++ * - Removed all error checks. This change also eliminated the need
++ * to preinitialize the context struct to zero.
++ * - Removed some totally unused constants.
++ */
++
++/*
++ * Modified by Jari Ruusu, June 9 2003
++ * - Removed all code not necessary for small size
++ * optimized encryption using 256 bit keys.
++ */
++
++#include "aes.h"
++
++#if AES_BLOCK_SIZE != 16
++#error an illegal block size has been specified
++#endif
++
++// upr(x,n): rotates bytes within words by n positions, moving bytes
++// to higher index positions with wrap around into low positions
++// bval(x,n): extracts a byte from a word
++
++#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
++#define bval(x,n) ((unsigned char)((x) >> 8 * (n)))
++#define bytes2word(b0, b1, b2, b3) \
++ ((u_int32_t)(b3) << 24 | (u_int32_t)(b2) << 16 | (u_int32_t)(b1) << 8 | (b0))
++
++#if defined(i386) || defined(_I386) || defined(__i386__) || defined(__i386)
++/* little endian processor without data alignment restrictions */
++#define word_in(x) *(u_int32_t*)(x)
++#define word_out(x,v) *(u_int32_t*)(x) = (v)
++#else
++/* slower but generic big endian or with data alignment restrictions */
++#define word_in(x) ((u_int32_t)(((unsigned char *)(x))[0])|((u_int32_t)(((unsigned char *)(x))[1])<<8)|((u_int32_t)(((unsigned char *)(x))[2])<<16)|((u_int32_t)(((unsigned char *)(x))[3])<<24))
++#define word_out(x,v) ((unsigned char *)(x))[0]=(v),((unsigned char *)(x))[1]=((v)>>8),((unsigned char *)(x))[2]=((v)>>16),((unsigned char *)(x))[3]=((v)>>24)
++#endif
++
++// the finite field modular polynomial and elements
++
++#define ff_poly 0x011b
++#define ff_hi 0x80
++
++static int tab_gen = 0;
++static unsigned char s_box[256]; // the S box
++static u_int32_t rcon_tab[AES_RC_LENGTH]; // table of round constants
++static u_int32_t ft_tab[4][256];
++static u_int32_t fl_tab[4][256];
++
++// Generate the tables for the dynamic table option
++
++// It will generally be sensible to use tables to compute finite
++// field multiplies and inverses but where memory is scarse this
++// code might sometimes be better.
++
++// return 2 ^ (n - 1) where n is the bit number of the highest bit
++// set in x with x in the range 1 < x < 0x00000200. This form is
++// used so that locals within FFinv can be bytes rather than words
++
++static unsigned char hibit(const u_int32_t x)
++{ unsigned char r = (unsigned char)((x >> 1) | (x >> 2));
++
++ r |= (r >> 2);
++ r |= (r >> 4);
++ return (r + 1) >> 1;
++}
++
++// return the inverse of the finite field element x
++
++static unsigned char FFinv(const unsigned char x)
++{ unsigned char p1 = x, p2 = 0x1b, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0;
++
++ if(x < 2) return x;
++
++ for(;;)
++ {
++ if(!n1) return v1;
++
++ while(n2 >= n1)
++ {
++ n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2);
++ }
++
++ if(!n2) return v2;
++
++ while(n1 >= n2)
++ {
++ n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1);
++ }
++ }
++}
++
++// define the finite field multiplies required for Rijndael
++
++#define FFmul02(x) ((((x) & 0x7f) << 1) ^ ((x) & 0x80 ? 0x1b : 0))
++#define FFmul03(x) ((x) ^ FFmul02(x))
++
++// The forward and inverse affine transformations used in the S-box
++
++#define fwd_affine(x) \
++ (w = (u_int32_t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(unsigned char)(w^(w>>8)))
++
++static void gen_tabs(void)
++{ u_int32_t i, w;
++
++ for(i = 0, w = 1; i < AES_RC_LENGTH; ++i)
++ {
++ rcon_tab[i] = bytes2word(w, 0, 0, 0);
++ w = (w << 1) ^ (w & ff_hi ? ff_poly : 0);
++ }
++
++ for(i = 0; i < 256; ++i)
++ { unsigned char b;
++
++ s_box[i] = b = fwd_affine(FFinv((unsigned char)i));
++
++ w = bytes2word(b, 0, 0, 0);
++ fl_tab[0][i] = w;
++ fl_tab[1][i] = upr(w,1);
++ fl_tab[2][i] = upr(w,2);
++ fl_tab[3][i] = upr(w,3);
++ w = bytes2word(FFmul02(b), b, b, FFmul03(b));
++ ft_tab[0][i] = w;
++ ft_tab[1][i] = upr(w,1);
++ ft_tab[2][i] = upr(w,2);
++ ft_tab[3][i] = upr(w,3);
++ }
++}
++
++#define four_tables(x,tab,vf,rf,c) \
++ ( tab[0][bval(vf(x,0,c),rf(0,c))] \
++ ^ tab[1][bval(vf(x,1,c),rf(1,c))] \
++ ^ tab[2][bval(vf(x,2,c),rf(2,c))] \
++ ^ tab[3][bval(vf(x,3,c),rf(3,c))])
++
++#define vf1(x,r,c) (x)
++#define rf1(r,c) (r)
++#define rf2(r,c) ((r-c)&3)
++
++#define ls_box(x,c) four_tables(x,fl_tab,vf1,rf2,c)
++
++#define nc (AES_BLOCK_SIZE / 4)
++
++// Initialise the key schedule from the user supplied key.
++// The key length is now specified in bytes, 32.
++// This corresponds to bit length of 256 bits, and
++// to Nk value of 8 respectively.
++
++void aes_set_key(aes_context *cx, const unsigned char in_key[], int n_bytes, const int f)
++{ u_int32_t *kf, *kt, rci;
++
++ if(!tab_gen) { gen_tabs(); tab_gen = 1; }
++
++ cx->aes_Nkey = 8;
++ cx->aes_Nrnd = (cx->aes_Nkey > nc ? cx->aes_Nkey : nc) + 6;
++
++ cx->aes_e_key[0] = word_in(in_key );
++ cx->aes_e_key[1] = word_in(in_key + 4);
++ cx->aes_e_key[2] = word_in(in_key + 8);
++ cx->aes_e_key[3] = word_in(in_key + 12);
++
++ kf = cx->aes_e_key;
++ kt = kf + nc * (cx->aes_Nrnd + 1) - cx->aes_Nkey;
++ rci = 0;
++
++ switch(cx->aes_Nkey)
++ {
++ case 8: cx->aes_e_key[4] = word_in(in_key + 16);
++ cx->aes_e_key[5] = word_in(in_key + 20);
++ cx->aes_e_key[6] = word_in(in_key + 24);
++ cx->aes_e_key[7] = word_in(in_key + 28);
++ do
++ { kf[ 8] = kf[0] ^ ls_box(kf[7],3) ^ rcon_tab[rci++];
++ kf[ 9] = kf[1] ^ kf[ 8];
++ kf[10] = kf[2] ^ kf[ 9];
++ kf[11] = kf[3] ^ kf[10];
++ kf[12] = kf[4] ^ ls_box(kf[11],0);
++ kf[13] = kf[5] ^ kf[12];
++ kf[14] = kf[6] ^ kf[13];
++ kf[15] = kf[7] ^ kf[14];
++ kf += 8;
++ }
++ while (kf < kt);
++ break;
++ }
++}
++
++// y = output word, x = input word, r = row, c = column
++// for r = 0, 1, 2 and 3 = column accessed for row r
++
++#define s(x,c) x[c]
++
++// I am grateful to Frank Yellin for the following constructions
++// which, given the column (c) of the output state variable that
++// is being computed, return the input state variables which are
++// needed for each row (r) of the state
++
++// For the fixed block size options, compilers reduce these two
++// expressions to fixed variable references. For variable block
++// size code conditional clauses will sometimes be returned
++
++#define fwd_var(x,r,c) \
++ ( r==0 ? \
++ ( c==0 ? s(x,0) \
++ : c==1 ? s(x,1) \
++ : c==2 ? s(x,2) \
++ : c==3 ? s(x,3) \
++ : c==4 ? s(x,4) \
++ : c==5 ? s(x,5) \
++ : c==6 ? s(x,6) \
++ : s(x,7)) \
++ : r==1 ? \
++ ( c==0 ? s(x,1) \
++ : c==1 ? s(x,2) \
++ : c==2 ? s(x,3) \
++ : c==3 ? nc==4 ? s(x,0) : s(x,4) \
++ : c==4 ? s(x,5) \
++ : c==5 ? nc==8 ? s(x,6) : s(x,0) \
++ : c==6 ? s(x,7) \
++ : s(x,0)) \
++ : r==2 ? \
++ ( c==0 ? nc==8 ? s(x,3) : s(x,2) \
++ : c==1 ? nc==8 ? s(x,4) : s(x,3) \
++ : c==2 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \
++ : c==3 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \
++ : c==4 ? nc==8 ? s(x,7) : s(x,0) \
++ : c==5 ? nc==8 ? s(x,0) : s(x,1) \
++ : c==6 ? s(x,1) \
++ : s(x,2)) \
++ : \
++ ( c==0 ? nc==8 ? s(x,4) : s(x,3) \
++ : c==1 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \
++ : c==2 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \
++ : c==3 ? nc==4 ? s(x,2) : nc==8 ? s(x,7) : s(x,0) \
++ : c==4 ? nc==8 ? s(x,0) : s(x,1) \
++ : c==5 ? nc==8 ? s(x,1) : s(x,2) \
++ : c==6 ? s(x,2) \
++ : s(x,3)))
++
++#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c]
++#define so(y,x,c) word_out(y + 4 * c, s(x,c))
++
++#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c)
++#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c)
++
++#define locals(y,x) x[4],y[4]
++
++#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \
++ s(y,2) = s(x,2); s(y,3) = s(x,3);
++#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3)
++#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3)
++#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3)
++
++void aes_encrypt(const aes_context *cx, const unsigned char in_blk[], unsigned char out_blk[])
++{ u_int32_t locals(b0, b1);
++ const u_int32_t *kp = cx->aes_e_key;
++
++ state_in(b0, in_blk, kp); kp += nc;
++
++ { u_int32_t rnd;
++
++ for(rnd = 0; rnd < cx->aes_Nrnd - 1; ++rnd)
++ {
++ round(fwd_rnd, b1, b0, kp);
++ l_copy(b0, b1); kp += nc;
++ }
++
++ round(fwd_lrnd, b0, b1, kp);
++ }
++
++ state_out(out_blk, b0);
++}
+diff -urN util-linux-ng-2.14/mount/aes.h util-linux-ng-2.14-AES/mount/aes.h
+--- util-linux-ng-2.14/mount/aes.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/aes.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,97 @@
++// I retain copyright in this code but I encourage its free use provided
++// that I don't carry any responsibility for the results. I am especially
++// happy to see it used in free and open source software. If you do use
++// it I would appreciate an acknowledgement of its origin in the code or
++// the product that results and I would also appreciate knowing a little
++// about the use to which it is being put. I am grateful to Frank Yellin
++// for some ideas that are used in this implementation.
++//
++// Dr B. R. Gladman <brg@gladman.uk.net> 6th April 2001.
++//
++// This is an implementation of the AES encryption algorithm (Rijndael)
++// designed by Joan Daemen and Vincent Rijmen. This version is designed
++// to provide both fixed and dynamic block and key lengths and can also
++// run with either big or little endian internal byte order (see aes.h).
++// It inputs block and key lengths in bytes with the legal values being
++// 16, 24 and 32.
++
++/*
++ * Modified by Jari Ruusu, May 1 2001
++ * - Fixed some compile warnings, code was ok but gcc warned anyway.
++ * - Changed basic types: byte -> unsigned char, word -> u_int32_t
++ * - Major name space cleanup: Names visible to outside now begin
++ * with "aes_" or "AES_". A lot of stuff moved from aes.h to aes.c
++ * - Removed C++ and DLL support as part of name space cleanup.
++ * - Eliminated unnecessary recomputation of tables. (actual bug fix)
++ * - Merged precomputed constant tables to aes.c file.
++ * - Removed data alignment restrictions for portability reasons.
++ * - Made block and key lengths accept bit count (128/192/256)
++ * as well byte count (16/24/32).
++ * - Removed all error checks. This change also eliminated the need
++ * to preinitialize the context struct to zero.
++ * - Removed some totally unused constants.
++ */
++
++#ifndef _AES_H
++#define _AES_H
++
++#if defined(__linux__) && defined(__KERNEL__)
++# include <linux/types.h>
++#else
++# include <sys/types.h>
++#endif
++
++// CONFIGURATION OPTIONS (see also aes.c)
++//
++// Define AES_BLOCK_SIZE to set the cipher block size (16, 24 or 32) or
++// leave this undefined for dynamically variable block size (this will
++// result in much slower code).
++// IMPORTANT NOTE: AES_BLOCK_SIZE is in BYTES (16, 24, 32 or undefined). If
++// left undefined a slower version providing variable block length is compiled
++
++#define AES_BLOCK_SIZE 16
++
++// The number of key schedule words for different block and key lengths
++// allowing for method of computation which requires the length to be a
++// multiple of the key length
++//
++// Nk = 4 6 8
++// -------------
++// Nb = 4 | 60 60 64
++// 6 | 96 90 96
++// 8 | 120 120 120
++
++#if !defined(AES_BLOCK_SIZE) || (AES_BLOCK_SIZE == 32)
++#define AES_KS_LENGTH 120
++#define AES_RC_LENGTH 29
++#else
++#define AES_KS_LENGTH 4 * AES_BLOCK_SIZE
++#define AES_RC_LENGTH (9 * AES_BLOCK_SIZE) / 8 - 8
++#endif
++
++typedef struct
++{
++ u_int32_t aes_Nkey; // the number of words in the key input block
++ u_int32_t aes_Nrnd; // the number of cipher rounds
++ u_int32_t aes_e_key[AES_KS_LENGTH]; // the encryption key schedule
++ u_int32_t aes_d_key[AES_KS_LENGTH]; // the decryption key schedule
++#if !defined(AES_BLOCK_SIZE)
++ u_int32_t aes_Ncol; // the number of columns in the cipher state
++#endif
++} aes_context;
++
++// THE CIPHER INTERFACE
++
++#if !defined(AES_BLOCK_SIZE)
++extern void aes_set_blk(aes_context *, const int);
++#endif
++extern void aes_set_key(aes_context *, const unsigned char [], const int, const int);
++extern void aes_encrypt(const aes_context *, const unsigned char [], unsigned char []);
++extern void aes_decrypt(const aes_context *, const unsigned char [], unsigned char []);
++
++// The block length inputs to aes_set_block and aes_set_key are in numbers
++// of bytes or bits. The calls to subroutines must be made in the above
++// order but multiple calls can be made without repeating earlier calls
++// if their parameters have not changed.
++
++#endif // _AES_H
+diff -urN util-linux-ng-2.14/mount/lomount.c util-linux-ng-2.14-AES/mount/lomount.c
+--- util-linux-ng-2.14/mount/lomount.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/lomount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -1,4 +1,18 @@
+-/* Originally from Ted's losetup.c */
++/* Taken from Ted's losetup.c - Mitch <m.dsouza@mrc-apu.cam.ac.uk> */
++/* Added vfs mount options - aeb - 960223 */
++/* Removed lomount - aeb - 960224 */
++
++/*
++ * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
++ * - added Native Language Support
++ * 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * - fixed strerr(errno) in gettext calls
++ * 2001-04-11 Jari Ruusu
++ * - added AES support
++ */
++
++#define LOOPMAJOR 7
++
+ /*
+ * losetup.c - setup and control loop devices
+ */
+@@ -10,1010 +24,1318 @@
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <pwd.h>
++#include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
+ #include <sys/sysmacros.h>
+-#include <inttypes.h>
+-#include <dirent.h>
++#include <sys/wait.h>
++#include <limits.h>
++#include <fcntl.h>
++#include <mntent.h>
++#include <locale.h>
++#include <sys/time.h>
++#include <sys/utsname.h>
++#include <signal.h>
+
+ #include "loop.h"
+ #include "lomount.h"
+ #include "xstrncpy.h"
+ #include "nls.h"
+-#include "sundries.h"
+-#include "xmalloc.h"
+-#include "realpath.h"
++#include "sha512.h"
++#include "rmd160.h"
++#include "aes.h"
+
+-#define SIZE(a) (sizeof(a)/sizeof(a[0]))
++#if !defined(BLKGETSIZE64)
++# define BLKGETSIZE64 _IOR(0x12,114,size_t)
++#endif
+
+-#ifdef LOOP_SET_FD
++extern int verbose;
++extern char *xstrdup (const char *s); /* not: #include "sundries.h" */
++extern void error (const char *fmt, ...); /* idem */
++extern void show_all_loops(void);
++extern int read_options_from_fstab(char *, char **);
++extern int recompute_loop_dev_size(char *);
+
+-static int is_associated(int dev, struct stat *file, unsigned long long offset, int isoff);
++#if !defined(LOOP_PASSWORD_MIN_LENGTH)
++# define LOOP_PASSWORD_MIN_LENGTH 20
++#endif
+
+-static int
+-loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
+-{
+- memset(info, 0, sizeof(*info));
+- info->lo_number = info64->lo_number;
+- info->lo_device = info64->lo_device;
+- info->lo_inode = info64->lo_inode;
+- info->lo_rdevice = info64->lo_rdevice;
+- info->lo_offset = info64->lo_offset;
+- info->lo_encrypt_type = info64->lo_encrypt_type;
+- info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
+- info->lo_flags = info64->lo_flags;
+- info->lo_init[0] = info64->lo_init[0];
+- info->lo_init[1] = info64->lo_init[1];
+- if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
+- memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
+- else
+- memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
+- memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
+-
+- /* error in case values were truncated */
+- if (info->lo_device != info64->lo_device ||
+- info->lo_rdevice != info64->lo_rdevice ||
+- info->lo_inode != info64->lo_inode ||
+- info->lo_offset != info64->lo_offset)
+- return -EOVERFLOW;
+-
+- return 0;
+-}
+-
+-#define DEV_LOOP_PATH "/dev/loop"
+-#define DEV_PATH "/dev"
+-#define SYSFS_BLOCK_PATH "/sys/block"
+-#define LOOPMAJOR 7
+-#define NLOOPS_DEFAULT 8 /* /dev/loop[0-7] */
+-
+-struct looplist {
+- int flag; /* scanning options */
+- int ndef; /* number of tested default devices */
+- struct dirent **names; /* scandir-like list of loop devices */
+- int nnames; /* number of items in names */
+- int ncur; /* current possition in direcotry */
+- char name[32]; /* device name */
+- int ct_perm; /* count permission problems */
+- int ct_succ; /* count number of successfully
+- detected devices */
+-};
+-
+-#define LLFLG_USEDONLY (1 << 1) /* return used devices only */
+-#define LLFLG_FREEONLY (1 << 2) /* return non-used devices */
+-#define LLFLG_DONE (1 << 3) /* all is done */
+-#define LLFLG_SYSFS (1 << 4) /* try to use /sys/block */
+-#define LLFLG_SUBDIR (1 << 5) /* /dev/loop/N */
+-#define LLFLG_DFLT (1 << 6) /* directly try to check default loops */
++char *passFDnumber = (char *)0;
++char *passAskTwice = (char *)0;
++char *passSeedString = (char *)0;
++char *passHashFuncName = (char *)0;
++char *passIterThousands = (char *)0;
++char *loInitValue = (char *)0;
++char *gpgKeyFile = (char *)0;
++char *gpgHomeDir = (char *)0;
++char *clearTextKeyFile = (char *)0;
++char *loopOffsetBytes = (char *)0;
++char *loopSizeBytes = (char *)0;
++char *loopEncryptionType = (char *)0;
++
++static int multiKeyMode = 0; /* 0=single-key 64=multi-key-v2 65=multi-key-v3 1000=any */
++static char *multiKeyPass[66];
++static char *loopFileName;
+
+-int
+-is_loop_device (const char *device) {
+- struct stat st;
++#ifdef MAIN
++static char *
++crypt_name (int id, int *flags) {
++ int i;
+
+- return (stat(device, &st) == 0 &&
+- S_ISBLK(st.st_mode) &&
+- major(st.st_rdev) == LOOPMAJOR);
++ for (i = 0; loop_crypt_type_tbl[i].id != -1; i++)
++ if(id == loop_crypt_type_tbl[i].id) {
++ *flags = loop_crypt_type_tbl[i].flags;
++ return loop_crypt_type_tbl[i].name;
++ }
++ *flags = 0;
++ if(id == 18)
++ return "CryptoAPI";
++ return "undefined";
+ }
+
+ static int
+-is_loop_used(int fd)
+-{
+- struct loop_info li;
+- return ioctl (fd, LOOP_GET_STATUS, &li) == 0;
+-}
++show_loop(char *device) {
++ struct loop_info64 loopinfo;
++ int fd;
+
+-static char *
+-looplist_mk_devname(struct looplist *ll, int num)
+-{
+- if (ll->flag & LLFLG_SUBDIR)
+- snprintf(ll->name, sizeof(ll->name),
+- DEV_LOOP_PATH "/%d", num);
+- else
+- snprintf(ll->name, sizeof(ll->name),
+- DEV_PATH "/loop%d", num);
++ if ((fd = open(device, O_RDONLY)) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't open device %s: %s\n"),
++ device, strerror (errsv));
++ return 2;
++ }
++ if (loop_get_status64_ioctl(fd, &loopinfo) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
++ device, strerror (errsv));
++ close (fd);
++ return 1;
++ }
++ loopinfo.lo_file_name[LO_NAME_SIZE-1] = 0;
++ loopinfo.lo_crypt_name[LO_NAME_SIZE-1] = 0;
++ printf("%s: [%04llx]:%llu (%s)", device, (unsigned long long)loopinfo.lo_device,
++ (unsigned long long)loopinfo.lo_inode, loopinfo.lo_file_name);
++ if (loopinfo.lo_offset) {
++ if ((long long)loopinfo.lo_offset < 0) {
++ printf(_(" offset=@%llu"), -((unsigned long long)loopinfo.lo_offset));
++ } else {
++ printf(_(" offset=%llu"), (unsigned long long)loopinfo.lo_offset);
++ }
++ }
++ if (loopinfo.lo_sizelimit)
++ printf(_(" sizelimit=%llu"), (unsigned long long)loopinfo.lo_sizelimit);
++ if (loopinfo.lo_encrypt_type) {
++ int flags;
++ char *s = crypt_name (loopinfo.lo_encrypt_type, &flags);
++
++ printf(_(" encryption=%s"), s);
++ /* type 18 == LO_CRYPT_CRYPTOAPI */
++ if (loopinfo.lo_encrypt_type == 18) {
++ printf("/%s", loopinfo.lo_crypt_name);
++ } else {
++ if(flags & 2)
++ printf("-");
++ if(flags & 1)
++ printf("%u", (unsigned int)loopinfo.lo_encrypt_key_size << 3);
++ }
++ }
++ switch(loopinfo.lo_flags & 0x180000) {
++ case 0x180000:
++ printf(_(" multi-key-v3"));
++ break;
++ case 0x100000:
++ printf(_(" multi-key-v2"));
++ break;
++ }
++ /* type 2 == LO_CRYPT_DES */
++ if (loopinfo.lo_init[0] && (loopinfo.lo_encrypt_type != 2))
++ printf(_(" loinit=%llu"), (unsigned long long)loopinfo.lo_init[0]);
++ if (loopinfo.lo_flags & 0x200000)
++ printf(_(" read-only"));
++ printf("\n");
++ close (fd);
+
+- return is_loop_device(ll->name) ? ll->name : NULL;
++ return 0;
+ }
++#endif
+
+-/* ignores all non-loop devices, default loop devices */
+-static int
+-filter_loop(const struct dirent *d)
+-{
+- return strncmp(d->d_name, "loop", 4) == 0;
+-}
++#define SIZE(a) (sizeof(a)/sizeof(a[0]))
+
+-/* all loops exclude default loops */
+-static int
+-filter_loop_ndflt(const struct dirent *d)
+-{
+- int mn;
++#if !defined(MAIN)
++char *
++find_unused_loop_device (void) {
++ /* Just creating a device, say in /tmp, is probably a bad idea -
++ people might have problems with backup or so.
++ So, we just try /dev/loop[0-7]. */
++ char dev[20];
++ char *loop_formats[] = { "/dev/loop%d", "/dev/loop/%d" };
++ int i, j, fd, somedev = 0, someloop = 0;
++ struct stat statbuf;
+
+- if (strncmp(d->d_name, "loop", 4) == 0 &&
+- sscanf(d->d_name, "loop%d", &mn) == 1 &&
+- mn >= NLOOPS_DEFAULT)
+- return 1;
++ for (j = 0; j < SIZE(loop_formats); j++) {
++ for(i = 0; i < 256; i++) {
++ sprintf(dev, loop_formats[j], i);
++ if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ somedev++;
++ fd = open (dev, O_RDONLY);
++ if (fd >= 0) {
++ if (is_unused_loop_device(fd) == 0)
++ someloop++; /* in use */
++ else if (errno == ENXIO) {
++ close (fd);
++ return xstrdup(dev);/* probably free */
++ }
++ close (fd);
++ }
++ continue;/* continue trying as long as devices exist */
++ }
++ break;
++ }
++ }
++
++ if (!somedev)
++ error(_("mount: could not find any device /dev/loop#"));
++ else if (!someloop)
++ error(_("mount: Could not find any loop device. Maybe this kernel does not know\n"
++ " about the loop device? (If so, recompile or `modprobe loop'.)"));
++ else
++ error(_("mount: could not find any free loop device"));
+ return 0;
+ }
+
+-static int
+-filter_loop_num(const struct dirent *d)
++int is_loop_active(const char *dev, const char *backdev)
+ {
+- char *end = NULL;
+- int mn = strtol(d->d_name, &end, 10);
+-
+- if (mn >= NLOOPS_DEFAULT && end && *end == '\0')
+- return 1;
+- return 0;
++ int fd;
++ int ret = 0;
++ struct stat statbuf;
++ struct loop_info64 loopinfo;
++ if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ fd = open (dev, O_RDONLY);
++ if (fd < 0)
++ return 0;
++ if ((loop_get_status64_ioctl(fd, &loopinfo) == 0)
++ && (stat (backdev, &statbuf) == 0)
++ && (statbuf.st_dev == loopinfo.lo_device)
++ && (statbuf.st_ino == loopinfo.lo_inode))
++ ret = 1; /* backing device matches */
++ memset(&loopinfo, 0, sizeof(loopinfo));
++ close(fd);
++ }
++ return ret;
+ }
++#endif
+
+-static int
+-looplist_open(struct looplist *ll, int flag)
++static int rd_wr_retry(int fd, char *buf, int cnt, int w)
+ {
+- struct stat st;
++ int x, y, z;
+
+- memset(ll, 0, sizeof(*ll));
+- ll->flag = flag;
+- ll->ndef = -1;
+- ll->ncur = -1;
++ x = 0;
++ while(x < cnt) {
++ y = cnt - x;
++ if(w) {
++ z = write(fd, buf + x, y);
++ } else {
++ z = read(fd, buf + x, y);
++ if (!z) return x;
++ }
++ if(z < 0) {
++ if ((errno == EAGAIN) || (errno == ENOMEM) || (errno == ERESTART) || (errno == EINTR)) {
++ continue;
++ }
++ return x;
++ }
++ x += z;
++ }
++ return x;
++}
+
+- if (stat(DEV_PATH, &st) == -1 || (!S_ISDIR(st.st_mode)))
+- return -1; /* /dev doesn't exist */
++static char *get_FD_pass(int fd)
++{
++ char *p = NULL, *n;
++ int x = 0, y = 0;
+
+- if (stat(DEV_LOOP_PATH, &st) == 0 && S_ISDIR(st.st_mode))
+- ll->flag |= LLFLG_SUBDIR; /* /dev/loop/ exists */
++ do {
++ if(y >= (x - 1)) {
++ x += 128;
++ /* Must enforce some max limit here -- this code */
++ /* runs as part of mount, and mount is setuid root */
++ /* and has used mlockall(MCL_CURRENT | MCL_FUTURE) */
++ if(x > (4*1024)) return(NULL);
++ n = malloc(x);
++ if(!n) return(NULL);
++ if(p) {
++ memcpy(n, p, y);
++ memset(p, 0, y);
++ free(p);
++ }
++ p = n;
++ }
++ if(rd_wr_retry(fd, p + y, 1, 0) != 1) break;
++ if((p[y] == '\n') || !p[y]) break;
++ y++;
++ } while(1);
++ if(p) p[y] = 0;
++ return p;
++}
+
+- if ((ll->flag & LLFLG_USEDONLY) &&
+- stat(SYSFS_BLOCK_PATH, &st) == 0 &&
+- S_ISDIR(st.st_mode))
+- ll->flag |= LLFLG_SYSFS; /* try to use /sys/block/loopN */
++static unsigned long long mystrtoull(char *s, int acceptAT)
++{
++ unsigned long long v = 0;
++ int negative = 0;
+
+- ll->flag |= LLFLG_DFLT; /* required! */
+- return 0;
++ while ((*s == ' ') || (*s == '\t'))
++ s++;
++ if (acceptAT && (*s == '@')) {
++ s++;
++ negative = 1;
++ }
++ if (*s == '0') {
++ s++;
++ if ((*s == 'x') || (*s == 'X')) {
++ s++;
++ sscanf(s, "%llx", &v);
++ } else {
++ sscanf(s, "%llo", &v);
++ }
++ } else {
++ sscanf(s, "%llu", &v);
++ }
++ return negative ? -v : v;
+ }
+
+-static void
+-looplist_close(struct looplist *ll)
++static void warnAboutBadKeyData(int x)
+ {
+- if (ll->names) {
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++)
+- free(ll->names[ll->ncur]);
+-
+- free(ll->names);
+- ll->names = NULL;
+- ll->nnames = 0;
++ if((x > 1) && (x != 64) && (x != 65)) {
++ fprintf(stderr, _("Warning: Unknown key data format - using it anyway\n"));
+ }
+- ll->ncur = -1;
+- ll->flag |= LLFLG_DONE;
+ }
+
+-static int
+-looplist_is_wanted(struct looplist *ll, int fd)
++static int are_these_files_same(const char *name1, const char *name2)
+ {
+- int ret;
+-
+- if (!(ll->flag & (LLFLG_USEDONLY | LLFLG_FREEONLY)))
+- return 1;
+- ret = is_loop_used(fd);
++ struct stat statbuf1;
++ struct stat statbuf2;
+
+- if ((ll->flag & LLFLG_USEDONLY) && ret == 0)
+- return 0;
+- if ((ll->flag & LLFLG_FREEONLY) && ret == 1)
+- return 0;
+-
+- return 1;
++ if(!name1 || !*name1 || !name2 || !*name2) return 0;
++ if(stat(name1, &statbuf1)) return 0;
++ if(stat(name2, &statbuf2)) return 0;
++ if(statbuf1.st_dev != statbuf2.st_dev) return 0;
++ if(statbuf1.st_ino != statbuf2.st_ino) return 0;
++ return 1; /* are same */
+ }
+
+-static int
+-looplist_next(struct looplist *ll)
++static char *do_GPG_pipe(char *pass)
+ {
+- int fd;
+- int ret;
+- char *dirname, *dev;
+-
+- if (ll->flag & LLFLG_DONE)
+- return -1;
++ int x, pfdi[2], pfdo[2];
++ char str[10], *a[16], *e[2], *h;
++ pid_t gpid;
++ struct passwd *p;
++ void *oldSigPipeHandler;
+
+- /* A) try to use /sys/block/loopN devices (for losetup -a only)
+- */
+- if (ll->flag & LLFLG_SYSFS) {
+- int mn;
+-
+- if (!ll->nnames) {
+- ll->nnames = scandir(SYSFS_BLOCK_PATH, &ll->names,
+- filter_loop, versionsort);
+- ll->ncur = -1;
+- }
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++) {
+- ret = sscanf(ll->names[ll->ncur]->d_name, "loop%d", &mn);
+- free(ll->names[ll->ncur]);
+- if (ret != 1)
+- continue;
+- dev = looplist_mk_devname(ll, mn);
+- if (dev) {
+- ll->ct_succ++;
+- if ((fd = open(dev, O_RDONLY)) > -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
+- }
++ if((getuid() == 0) && gpgHomeDir && gpgHomeDir[0]) {
++ h = gpgHomeDir;
++ } else {
++ if(!(p = getpwuid(getuid()))) {
++ fprintf(stderr, _("Error: Unable to detect home directory for uid %d\n"), (int)getuid());
++ return NULL;
+ }
+- if (ll->nnames)
+- free(ll->names);
+- ll->names = NULL;
+- ll->ncur = -1;
+- ll->nnames = 0;
+- ll->flag &= ~LLFLG_SYSFS;
+- goto done;
++ h = p->pw_dir;
+ }
+-
+- /* B) Classic way, try first eight loop devices (default number
+- * of loop devices). This is enough for 99% of all cases.
+- */
+- if (ll->flag & LLFLG_DFLT) {
+- for (++ll->ncur; ll->ncur < NLOOPS_DEFAULT; ll->ncur++) {
+- dev = looplist_mk_devname(ll, ll->ncur);
+- if (dev) {
+- ll->ct_succ++;
+- if ((fd = open(dev, O_RDONLY)) > -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
+- }
+- }
+- ll->flag &= ~LLFLG_DFLT;
+- ll->ncur = -1;
++ if(!(e[0] = malloc(strlen(h) + 6))) {
++ nomem1:
++ fprintf(stderr, _("Error: Unable to allocate memory\n"));
++ return NULL;
+ }
++ sprintf(e[0], "HOME=%s", h);
++ e[1] = 0;
+
++ if(pipe(&pfdi[0])) {
++ nomem2:
++ free(e[0]);
++ goto nomem1;
++ }
++ if(pipe(&pfdo[0])) {
++ close(pfdi[0]);
++ close(pfdi[1]);
++ goto nomem2;
++ }
+
+- /* C) the worst posibility, scan all /dev or /dev/loop
++ /*
++ * When this code is run as part of losetup, normal read permissions
++ * affect the open() below because losetup is not setuid-root.
++ *
++ * When this code is run as part of mount, only root can set
++ * 'gpgKeyFile' and as such, only root can decide what file is opened
++ * below. However, since mount is usually setuid-root all non-root
++ * users can also open() the file too, but that file's contents are
++ * only piped to gpg. This readable-for-all is intended behaviour,
++ * and is very useful in situations where non-root users mount loop
++ * devices with their own gpg private key, and yet don't have access
++ * to the actual key used to encrypt loop device.
+ */
+- dirname = ll->flag & LLFLG_SUBDIR ? DEV_LOOP_PATH : DEV_PATH;
++ if((x = open(gpgKeyFile, O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open %s for reading\n"), gpgKeyFile);
++ nomem3:
++ free(e[0]);
++ close(pfdo[0]);
++ close(pfdo[1]);
++ close(pfdi[0]);
++ close(pfdi[1]);
++ return NULL;
++ }
+
+- if (!ll->nnames) {
+- ll->nnames = scandir(dirname, &ll->names,
+- ll->flag & LLFLG_SUBDIR ?
+- filter_loop_num : filter_loop_ndflt,
+- versionsort);
+- ll->ncur = -1;
+- }
+-
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++) {
+- struct stat st;
+-
+- snprintf(ll->name, sizeof(ll->name),
+- "%s/%s", dirname, ll->names[ll->ncur]->d_name);
+- free(ll->names[ll->ncur]);
+- ret = stat(ll->name, &st);
+-
+- if (ret == 0 && S_ISBLK(st.st_mode) &&
+- major(st.st_rdev) == LOOPMAJOR &&
+- minor(st.st_rdev) >= NLOOPS_DEFAULT) {
+- ll->ct_succ++;
+- fd = open(ll->name, O_RDONLY);
+-
+- if (fd != -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
++ /*
++ * If someone puts a gpg key file at beginning of device and
++ * puts the real file system at some offset into the device,
++ * this code extracts that gpg key file into a temp file so gpg
++ * won't end up reading whole device when decrypting the key file.
++ *
++ * Example of encrypted cdrom mount with 8192 bytes reserved for gpg key file:
++ * mount -t iso9660 /dev/cdrom /cdrom -o loop=/dev/loop0,encryption=AES128,gpgkey=/dev/cdrom,offset=8192
++ * ^^^^^^^^^^ ^^^^^^^^^^ ^^^^
++ */
++ if(loopOffsetBytes && are_these_files_same(loopFileName, gpgKeyFile)) {
++ FILE *f;
++ char b[1024];
++ long long cnt;
++ int cnt2, cnt3;
++
++ cnt = mystrtoull(loopOffsetBytes, 1);
++ if(cnt < 0) cnt = -cnt;
++ if(cnt > (1024 * 1024)) cnt = 1024 * 1024; /* sanity check */
++ f = tmpfile();
++ if(!f) {
++ fprintf(stderr, _("Error: unable to create temp file\n"));
++ close(x);
++ goto nomem3;
++ }
++ while(cnt > 0) {
++ cnt2 = sizeof(b);
++ if(cnt < cnt2) cnt2 = cnt;
++ cnt3 = rd_wr_retry(x, b, cnt2, 0);
++ if(cnt3 && (fwrite(b, cnt3, 1, f) != 1)) {
++ tmpWrErr:
++ fprintf(stderr, _("Error: unable to write to temp file\n"));
++ fclose(f);
++ close(x);
++ goto nomem3;
++ }
++ if(cnt2 != cnt3) break;
++ cnt -= cnt3;
++ }
++ if(fflush(f)) goto tmpWrErr;
++ close(x);
++ x = dup(fileno(f));
++ fclose(f);
++ lseek(x, 0L, SEEK_SET);
++ }
++
++ sprintf(str, "%d", pfdi[0]);
++ if(!(gpid = fork())) {
++ dup2(x, 0);
++ dup2(pfdo[1], 1);
++ close(x);
++ close(pfdi[1]);
++ close(pfdo[0]);
++ close(pfdo[1]);
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 2);
++ close(x);
++ }
++ x = 0;
++ a[x++] = "gpg";
++ if(gpgHomeDir && gpgHomeDir[0]) {
++ a[x++] = "--homedir";
++ a[x++] = gpgHomeDir;
++ }
++ a[x++] = "--no-options";
++ a[x++] = "--quiet";
++ a[x++] = "--batch";
++ a[x++] = "--no-tty";
++ a[x++] = "--passphrase-fd";
++ a[x++] = str;
++ a[x++] = "--decrypt";
++ a[x] = 0;
++ if(setgid(getgid())) exit(1);
++ if(setuid(getuid())) exit(1);
++ for(x = 3; x < 1024; x++) {
++ if(x == pfdi[0]) continue;
++ close(x);
++ }
++ execve("/bin/gpg", &a[0], &e[0]);
++ execve("/usr/bin/gpg", &a[0], &e[0]);
++ execve("/usr/local/bin/gpg", &a[0], &e[0]);
++ exit(1);
++ }
++ free(e[0]);
++ close(x);
++ close(pfdi[0]);
++ close(pfdo[1]);
++ if(gpid == -1) {
++ close(pfdi[1]);
++ close(pfdo[0]);
++ goto nomem1;
++ }
++
++ x = strlen(pass);
++
++ /* ignore possible SIGPIPE signal while writing to gpg */
++ oldSigPipeHandler = signal(SIGPIPE, SIG_IGN);
++ rd_wr_retry(pfdi[1], pass, x, 1);
++ rd_wr_retry(pfdi[1], "\n", 1, 1);
++ if(oldSigPipeHandler != SIG_ERR) signal(SIGPIPE, oldSigPipeHandler);
++
++ close(pfdi[1]);
++ memset(pass, 0, x);
++ x = 0;
++ while(x < 66) {
++ multiKeyPass[x] = get_FD_pass(pfdo[0]);
++ if(!multiKeyPass[x]) {
++ /* mem alloc failed - abort */
++ multiKeyPass[0] = 0;
++ break;
+ }
++ if(strlen(multiKeyPass[x]) < LOOP_PASSWORD_MIN_LENGTH) break;
++ x++;
+ }
+-done:
+- looplist_close(ll);
+- return -1;
++ warnAboutBadKeyData(x);
++ if(x >= 65)
++ multiKeyMode = 65;
++ if(x == 64)
++ multiKeyMode = 64;
++ close(pfdo[0]);
++ waitpid(gpid, &x, 0);
++ if(!multiKeyPass[0]) goto nomem1;
++ return multiKeyPass[0];
+ }
+
+-#ifdef MAIN
+-
+-static int
+-show_loop_fd(int fd, char *device) {
+- struct loop_info loopinfo;
+- struct loop_info64 loopinfo64;
+- int errsv;
+-
+- if (ioctl(fd, LOOP_GET_STATUS64, &loopinfo64) == 0) {
+-
+- loopinfo64.lo_file_name[LO_NAME_SIZE-2] = '*';
+- loopinfo64.lo_file_name[LO_NAME_SIZE-1] = 0;
+- loopinfo64.lo_crypt_name[LO_NAME_SIZE-1] = 0;
+-
+- printf("%s: [%04" PRIx64 "]:%" PRIu64 " (%s)",
+- device, loopinfo64.lo_device, loopinfo64.lo_inode,
+- loopinfo64.lo_file_name);
+-
+- if (loopinfo64.lo_offset)
+- printf(_(", offset %" PRIu64 ), loopinfo64.lo_offset);
+-
+- if (loopinfo64.lo_sizelimit)
+- printf(_(", sizelimit %" PRIu64 ), loopinfo64.lo_sizelimit);
+-
+- if (loopinfo64.lo_encrypt_type ||
+- loopinfo64.lo_crypt_name[0]) {
+- char *e = (char *)loopinfo64.lo_crypt_name;
++static char *sGetPass(int minLen, int warnLen)
++{
++ char *p, *s, *seed;
++ int i, ask2, close_i_fd = 0;
+
+- if (*e == 0 && loopinfo64.lo_encrypt_type == 1)
+- e = "XOR";
+- printf(_(", encryption %s (type %" PRIu32 ")"),
+- e, loopinfo64.lo_encrypt_type);
++ if(!passFDnumber) {
++ if(clearTextKeyFile) {
++ if((i = open(clearTextKeyFile, O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open %s for reading\n"), clearTextKeyFile);
++ return NULL;
++ }
++ close_i_fd = 1;
++ goto contReadFrom_i;
+ }
+- printf("\n");
+- return 0;
++ p = getpass(_("Password: "));
++ ask2 = passAskTwice ? 1 : 0;
++ } else {
++ i = atoi(passFDnumber);
++ contReadFrom_i:
++ if(gpgKeyFile && gpgKeyFile[0]) {
++ p = get_FD_pass(i);
++ if(close_i_fd) close(i);
++ } else {
++ int x = 0;
++ while(x < 66) {
++ multiKeyPass[x] = get_FD_pass(i);
++ if(!multiKeyPass[x]) goto nomem;
++ if(strlen(multiKeyPass[x]) < LOOP_PASSWORD_MIN_LENGTH) break;
++ x++;
++ }
++ if(close_i_fd) close(i);
++ warnAboutBadKeyData(x);
++ if(x >= 65) {
++ multiKeyMode = 65;
++ return multiKeyPass[0];
++ }
++ if(x == 64) {
++ multiKeyMode = 64;
++ return multiKeyPass[0];
++ }
++ p = multiKeyPass[0];
++ }
++ ask2 = 0;
+ }
+-
+- if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) == 0) {
+- printf ("%s: [%04x]:%ld (%s)",
+- device, (unsigned int)loopinfo.lo_device, loopinfo.lo_inode,
+- loopinfo.lo_name);
+-
+- if (loopinfo.lo_offset)
+- printf(_(", offset %d"), loopinfo.lo_offset);
+-
+- if (loopinfo.lo_encrypt_type)
+- printf(_(", encryption type %d\n"),
+- loopinfo.lo_encrypt_type);
+-
+- printf("\n");
+- return 0;
++ if(!p) goto nomem;
++ if(gpgKeyFile && gpgKeyFile[0]) {
++ if(ask2) {
++ i = strlen(p);
++ s = malloc(i + 1);
++ if(!s) goto nomem;
++ strcpy(s, p);
++ p = getpass(_("Retype password: "));
++ if(!p) goto nomem;
++ if(strcmp(s, p)) goto compareErr;
++ memset(s, 0, i);
++ free(s);
++ ask2 = 0;
++ }
++ p = do_GPG_pipe(p);
++ if(!p) return(NULL);
++ if(!p[0]) {
++ fprintf(stderr, _("Error: gpg key file decryption failed\n"));
++ return(NULL);
++ }
++ if(multiKeyMode) return(p);
+ }
+-
+- errsv = errno;
+- fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
+- device, strerror (errsv));
+- return 1;
++ i = strlen(p);
++ if(i < minLen) {
++ fprintf(stderr, _("Error: Password must be at least %d characters.\n"), minLen);
++ return(NULL);
++ }
++ seed = passSeedString;
++ if(!seed) seed = "";
++ s = malloc(i + strlen(seed) + 1);
++ if(!s) {
++ nomem:
++ fprintf(stderr, _("Error: Unable to allocate memory\n"));
++ return(NULL);
++ }
++ strcpy(s, p);
++ memset(p, 0, i);
++ if(ask2) {
++ p = getpass(_("Retype password: "));
++ if(!p) goto nomem;
++ if(strcmp(s, p)) {
++ compareErr:
++ fprintf(stderr, _("Error: Passwords are not identical\n"));
++ return(NULL);
++ }
++ memset(p, 0, i);
++ }
++ if(i < warnLen) {
++ fprintf(stderr, _("WARNING - Please use longer password (%d or more characters)\n"), LOOP_PASSWORD_MIN_LENGTH);
++ }
++ strcat(s, seed);
++ return(s);
+ }
+
+-static int
+-show_loop(char *device) {
+- int ret, fd;
++/* this is for compatibility with historic loop-AES version */
++static void unhashed1_key_setup(unsigned char *keyStr, int ile, unsigned char *keyBuf, int bufSize)
++{
++ register int x, y, z, cnt = ile;
++ unsigned char *kp;
+
+- if ((fd = open(device, O_RDONLY)) < 0) {
+- int errsv = errno;
+- fprintf(stderr, _("loop: can't open device %s: %s\n"),
+- device, strerror (errsv));
+- return 2;
++ memset(keyBuf, 0, bufSize);
++ kp = keyStr;
++ for(x = 0; x < (bufSize * 8); x += 6) {
++ y = *kp++;
++ if(--cnt <= 0) {
++ kp = keyStr;
++ cnt = ile;
++ }
++ if((y >= '0') && (y <= '9')) y -= '0';
++ else if((y >= 'A') && (y <= 'Z')) y -= ('A' - 10);
++ else if((y >= 'a') && (y <= 'z')) y -= ('a' - 36);
++ else if((y == '.') || (y == '/')) y += (62 - '.');
++ else y &= 63;
++ z = x >> 3;
++ if(z < bufSize) {
++ keyBuf[z] |= y << (x & 7);
++ }
++ z++;
++ if(z < bufSize) {
++ keyBuf[z] |= y >> (8 - (x & 7));
++ }
+ }
+- ret = show_loop_fd(fd, device);
+- close(fd);
+- return ret;
+ }
+
++/* this is for compatibility with mainline mount */
++static void unhashed2_key_setup(unsigned char *keyStr, int ile, unsigned char *keyBuf, int bufSize)
++{
++ memset(keyBuf, 0, bufSize);
++ strncpy((char *)keyBuf, (char *)keyStr, bufSize - 1);
++ keyBuf[bufSize - 1] = 0;
++}
+
+-static int
+-show_used_loop_devices (void) {
+- struct looplist ll;
+- int fd;
++static void rmd160HashTwiceWithA(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ char tmpBuf[20 + 20];
++ char pwdCopy[130];
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return 1;
+- }
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 40) ole = 40;
++ rmd160_hash_buffer(&tmpBuf[0], (char *)ib, ile);
++ pwdCopy[0] = 'A';
++ if(ile > sizeof(pwdCopy) - 1) ile = sizeof(pwdCopy) - 1;
++ memcpy(pwdCopy + 1, ib, ile);
++ rmd160_hash_buffer(&tmpBuf[20], pwdCopy, ile + 1);
++ memcpy(ob, tmpBuf, ole);
++ memset(tmpBuf, 0, sizeof(tmpBuf));
++ memset(pwdCopy, 0, sizeof(pwdCopy));
++}
+
+- while((fd = looplist_next(&ll)) != -1) {
+- show_loop_fd(fd, ll.name);
+- close(fd);
+- }
+- looplist_close(&ll);
++extern long long llseek(int, long long, int);
+
+- if (ll.ct_succ && ll.ct_perm) {
+- error(_("%s: no permission to look at /dev/loop#"), progname);
+- return 1;
++static long long xx_lseek(int fd, long long offset, int whence)
++{
++ if(sizeof(off_t) >= 8) {
++ return lseek(fd, offset, whence);
++ } else {
++ return llseek(fd, offset, whence);
+ }
+- return 0;
+ }
+
+-/* list all associated loop devices */
+-static int
+-show_associated_loop_devices(char *filename, unsigned long long offset, int isoff)
++static int loop_create_random_keys(char *partition, long long offset, long long sizelimit, int loopro, unsigned char *k)
+ {
+- struct looplist ll;
+- struct stat filestat;
+- int fd;
++ int x, y, fd;
++ sha512_context s;
++ unsigned char b[4096];
+
+- if (stat(filename, &filestat) == -1) {
+- perror(filename);
++ if(loopro) {
++ fprintf(stderr, _("Error: read-only device %s\n"), partition);
+ return 1;
+ }
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
++ /*
++ * Compute SHA-512 over first 40 KB of old fs data. SHA-512 hash
++ * output is then used as entropy for new fs encryption key.
++ */
++ if((fd = open(partition, O_RDWR)) == -1) {
++ seekFailed:
++ fprintf(stderr, _("Error: unable to open/seek device %s\n"), partition);
+ return 1;
+ }
+-
+- while((fd = looplist_next(&ll)) != -1) {
+- if (is_associated(fd, &filestat, offset, isoff) == 1)
+- show_loop_fd(fd, ll.name);
++ if(offset < 0) offset = -offset;
++ if(xx_lseek(fd, offset, SEEK_SET) == -1) {
+ close(fd);
++ goto seekFailed;
+ }
+- looplist_close(&ll);
+-
+- return 0;
+-}
+-
+-#endif /* MAIN */
+-
+-/* check if the loopfile is already associated with the same given
+- * parameters.
+- *
+- * returns: -1 error
+- * 0 unused
+- * 1 loop device already used
+- */
+-static int
+-is_associated(int dev, struct stat *file, unsigned long long offset, int isoff)
+-{
+- struct loop_info64 linfo64;
+- struct loop_info64 linfo;
+- int ret = 0;
+-
+- if (ioctl(dev, LOOP_GET_STATUS64, &linfo64) == 0) {
+- if (file->st_dev == linfo64.lo_device &&
+- file->st_ino == linfo64.lo_inode &&
+- (isoff == 0 || offset == linfo64.lo_offset))
+- ret = 1;
+- return ret;
+- }
+- if (ioctl(dev, LOOP_GET_STATUS, &linfo) == 0) {
+- if (file->st_dev == linfo.lo_device &&
+- file->st_ino == linfo.lo_inode &&
+- (isoff == 0 || offset == linfo.lo_offset))
+- ret = 1;
+- return ret;
+- }
+-
+- return errno == ENXIO ? 0 : -1;
+-}
+-
+-/* check if the loop file is already used with the same given
+- * parameters. We check for device no, inode and offset.
+- * returns: associated devname or NULL
+- */
+-char *
+-loopfile_used (const char *filename, unsigned long long offset) {
+- struct looplist ll;
+- char *devname = NULL;
+- struct stat filestat;
+- int fd;
+-
+- if (stat(filename, &filestat) == -1) {
+- perror(filename);
+- return NULL;
++ sha512_init(&s);
++ for(x = 1; x <= 10; x++) {
++ if((sizelimit > 0) && ((sizeof(b) * x) > sizelimit)) break;
++ if(rd_wr_retry(fd, &b[0], sizeof(b), 0) != sizeof(b)) break;
++ sha512_write(&s, &b[0], sizeof(b));
+ }
++ sha512_final(&s);
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return NULL;
+- }
+-
+- while((fd = looplist_next(&ll)) != -1) {
+- int res = is_associated(fd, &filestat, offset, 1);
+- close(fd);
+- if (res == 1) {
+- devname = xstrdup(ll.name);
+- break;
++ /*
++ * Overwrite 40 KB of old fs data 20 times so that recovering
++ * SHA-512 output beyond this point is difficult and expensive.
++ */
++ for(y = 0; y < 20; y++) {
++ int z;
++ struct {
++ struct timeval tv;
++ unsigned char h[64];
++ int x,y,z;
++ } j;
++ if(xx_lseek(fd, offset, SEEK_SET) == -1) break;
++ memcpy(&j.h[0], &s.sha_out[0], 64);
++ gettimeofday(&j.tv, NULL);
++ j.y = y;
++ for(x = 1; x <= 10; x++) {
++ j.x = x;
++ for(z = 0; z < sizeof(b); z += 64) {
++ j.z = z;
++ sha512_hash_buffer((unsigned char *)&j, sizeof(j), &b[z], 64);
++ }
++ if((sizelimit > 0) && ((sizeof(b) * x) > sizelimit)) break;
++ if(rd_wr_retry(fd, &b[0], sizeof(b), 1) != sizeof(b)) break;
+ }
++ memset(&j, 0, sizeof(j));
++ if(fsync(fd)) break;
+ }
+- looplist_close(&ll);
+-
+- return devname;
+-}
+-
+-int
+-loopfile_used_with(char *devname, const char *filename, unsigned long long offset)
+-{
+- struct stat statbuf;
+- int fd, ret;
++ close(fd);
+
+- if (!is_loop_device(devname))
+- return 0;
++ /*
++ * Use all 512 bits of hash output
++ */
++ memcpy(&b[0], &s.sha_out[0], 64);
++ memset(&s, 0, sizeof(s));
+
+- if (stat(filename, &statbuf) == -1) {
+- perror(filename);
+- return -1;
++ /*
++ * Read 32 bytes of random entropy from kernel's random
++ * number generator. This code may be executed early on startup
++ * scripts and amount of random entropy may be non-existent.
++ * SHA-512 of old fs data is used as workaround for missing
++ * entropy in kernel's random number generator.
++ */
++ if((fd = open("/dev/urandom", O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open /dev/urandom\n"));
++ return 1;
+ }
++ rd_wr_retry(fd, &b[64], 32, 0);
+
+- fd = open(devname, O_RDONLY);
+- if (fd == -1) {
+- perror(devname);
+- return -1;
++ /* generate multi-key hashes */
++ x = 0;
++ while(x < 65) {
++ rd_wr_retry(fd, &b[64+32], 16, 0);
++ sha512_hash_buffer(&b[0], 64+32+16, k, 32);
++ k += 32;
++ x++;
+ }
+- ret = is_associated(fd, &statbuf, offset, 1);
+
+ close(fd);
+- return ret;
++ memset(&b[0], 0, sizeof(b));
++ return 0;
+ }
+
+-char *
+-find_unused_loop_device (void) {
+- struct looplist ll;
+- char *devname = NULL;
+- int fd;
++#if !defined(MAIN)
++static int loop_fork_mkfs_command(char *device, char *fstype)
++{
++ int x, y = 0;
++ char *a[10], *e[1];
+
+- if (looplist_open(&ll, LLFLG_FREEONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return NULL;
++ sync();
++ if(!(x = fork())) {
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 0);
++ dup2(x, 1);
++ dup2(x, 2);
++ close(x);
++ }
++ x = 0;
++ a[x++] = "mkfs";
++ a[x++] = "-t";
++ a[x++] = fstype;
++ /* mkfs.reiserfs and mkfs.xfs need -f option */
++ if(!strcmp(fstype, "reiserfs") || !strcmp(fstype, "xfs")) {
++ a[x++] = "-f";
++ }
++ a[x++] = device;
++ a[x] = 0;
++ e[0] = 0;
++ if(setgid(getgid())) exit(1);
++ if(setuid(getuid())) exit(1);
++ for(x = 3; x < 1024; x++) {
++ close(x);
++ }
++ execve("/sbin/mkfs", &a[0], &e[0]);
++ exit(1);
+ }
+-
+- if ((fd = looplist_next(&ll)) != -1) {
+- close(fd);
+- devname = xstrdup(ll.name);
++ if(x == -1) {
++ fprintf(stderr, _("Error: fork failed\n"));
++ return 1;
+ }
+- looplist_close(&ll);
+- if (devname)
+- return devname;
+-
+- if (ll.ct_succ && ll.ct_perm)
+- error(_("%s: no permission to look at /dev/loop#"), progname);
+- else if (ll.ct_succ)
+- error(_("%s: could not find any free loop device"), progname);
+- else
+- error(_(
+- "%s: Could not find any loop device. Maybe this kernel "
+- "does not know\n"
+- " about the loop device? (If so, recompile or "
+- "`modprobe loop'.)"), progname);
+- return NULL;
+-}
+-
+-/*
+- * A function to read the passphrase either from the terminal or from
+- * an open file descriptor.
+- */
+-static char *
+-xgetpass(int pfd, const char *prompt) {
+- char *pass;
+- int buflen, i;
+-
+- if (pfd < 0) /* terminal */
+- return getpass(prompt);
+-
+- pass = NULL;
+- buflen = 0;
+- for (i=0; ; i++) {
+- if (i >= buflen-1) {
+- /* we're running out of space in the buffer.
+- * Make it bigger: */
+- char *tmppass = pass;
+- buflen += 128;
+- pass = realloc(tmppass, buflen);
+- if (pass == NULL) {
+- /* realloc failed. Stop reading. */
+- error("Out of memory while reading passphrase");
+- pass = tmppass; /* the old buffer hasn't changed */
+- break;
+- }
+- }
+- if (read(pfd, pass+i, 1) != 1 ||
+- pass[i] == '\n' || pass[i] == 0)
+- break;
++ waitpid(x, &y, 0);
++ sync();
++ if(!WIFEXITED(y) || (WEXITSTATUS(y) != 0)) {
++ fprintf(stderr, _("Error: encrypted file system mkfs failed\n"));
++ return 1;
+ }
+-
+- if (pass == NULL)
+- return "";
+-
+- pass[i] = 0;
+- return pass;
+-}
+-
+-static int
+-digits_only(const char *s) {
+- while (*s)
+- if (!isdigit(*s++))
+- return 0;
+- return 1;
++ return 0;
+ }
++#endif
+
+ int
+-set_loop(const char *device, const char *file, unsigned long long offset,
+- unsigned long long sizelimit, const char *encryption, int pfd, int *options) {
+- struct loop_info64 loopinfo64;
+- int fd, ffd, mode, i;
+- char *pass;
+- char *filename;
+-
+- if (verbose) {
+- char *xdev = loopfile_used(file, offset);
+-
+- if (xdev) {
+- printf(_("warning: %s is already associated with %s\n"),
+- file, xdev);
+- free(xdev);
+- }
+- }
+-
+- mode = (*options & SETLOOP_RDONLY) ? O_RDONLY : O_RDWR;
++set_loop(const char *device, const char *file, int *loopro, const char **fstype, unsigned int *AutoChmodPtr, int busyRetVal) {
++ struct loop_info64 loopinfo;
++ int fd, ffd, mode, i, errRetVal = 1;
++ char *pass, *apiName = NULL;
++ void (*hashFunc)(unsigned char *, int, unsigned char *, int);
++ unsigned char multiKeyBits[65][32];
++ int minPassLen = LOOP_PASSWORD_MIN_LENGTH;
++ int run_mkfs_command = 0;
++
++ loopFileName = (char *)file;
++ multiKeyMode = 0;
++ mode = (*loopro ? O_RDONLY : O_RDWR);
+ if ((ffd = open(file, mode)) < 0) {
+- if (!(*options & SETLOOP_RDONLY) && errno == EROFS)
++ if (!*loopro && errno == EROFS)
+ ffd = open(file, mode = O_RDONLY);
+ if (ffd < 0) {
+ perror(file);
+ return 1;
+ }
+- *options |= SETLOOP_RDONLY;
+ }
+ if ((fd = open(device, mode)) < 0) {
+ perror (device);
+- close(ffd);
+- return 1;
++ goto close_ffd_return1;
+ }
+- memset(&loopinfo64, 0, sizeof(loopinfo64));
++ *loopro = (mode == O_RDONLY);
+
+- if (!(filename = canonicalize(file)))
+- filename = (char *) file;
+- xstrncpy((char *)loopinfo64.lo_file_name, filename, LO_NAME_SIZE);
+-
+- if (encryption && *encryption) {
+- if (digits_only(encryption)) {
+- loopinfo64.lo_encrypt_type = atoi(encryption);
+- } else {
+- loopinfo64.lo_encrypt_type = LO_CRYPT_CRYPTOAPI;
+- snprintf((char *)loopinfo64.lo_crypt_name, LO_NAME_SIZE,
+- "%s", encryption);
+- }
++ if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
++ if(errno == EBUSY)
++ errRetVal = busyRetVal;
++ if((errRetVal != 2) || verbose)
++ perror("ioctl: LOOP_SET_FD");
++keyclean_close_fd_ffd_return1:
++ memset(loopinfo.lo_encrypt_key, 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close (fd);
++close_ffd_return1:
++ close (ffd);
++ return errRetVal;
+ }
+
+- loopinfo64.lo_offset = offset;
+- loopinfo64.lo_sizelimit = sizelimit;
++ memset (&loopinfo, 0, sizeof (loopinfo));
++ xstrncpy ((char *)loopinfo.lo_file_name, file, LO_NAME_SIZE);
++ if (loopEncryptionType)
++ loopinfo.lo_encrypt_type = loop_crypt_type (loopEncryptionType, &loopinfo.lo_encrypt_key_size, &apiName);
++ if (loopOffsetBytes)
++ loopinfo.lo_offset = mystrtoull(loopOffsetBytes, 1);
++ if (loopSizeBytes)
++ loopinfo.lo_sizelimit = mystrtoull(loopSizeBytes, 0);
+
+ #ifdef MCL_FUTURE
+ /*
+ * Oh-oh, sensitive data coming up. Better lock into memory to prevent
+ * passwd etc being swapped out and left somewhere on disk.
+ */
+- if (loopinfo64.lo_encrypt_type != LO_CRYPT_NONE) {
+- if(mlockall(MCL_CURRENT | MCL_FUTURE)) {
+- perror("memlock");
+- fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
+- exit(1);
+- }
++
++ if(loopinfo.lo_encrypt_type && mlockall(MCL_CURRENT | MCL_FUTURE)) {
++ perror("memlock");
++ ioctl (fd, LOOP_CLR_FD, 0);
++ fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
++ exit(1);
+ }
+ #endif
+
+- switch (loopinfo64.lo_encrypt_type) {
++ switch (loopinfo.lo_encrypt_type) {
+ case LO_CRYPT_NONE:
+- loopinfo64.lo_encrypt_key_size = 0;
++ loopinfo.lo_encrypt_key_size = 0;
+ break;
+ case LO_CRYPT_XOR:
+- pass = getpass(_("Password: "));
+- goto gotpass;
++ pass = sGetPass (1, 0);
++ if(!pass) goto loop_clr_fd_out;
++ xstrncpy ((char *)loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
++ loopinfo.lo_encrypt_key_size = strlen((char*)loopinfo.lo_encrypt_key);
++ break;
++ case 3: /* LO_CRYPT_FISH2 */
++ case 4: /* LO_CRYPT_BLOW */
++ case 7: /* LO_CRYPT_SERPENT */
++ case 8: /* LO_CRYPT_MARS */
++ case 11: /* LO_CRYPT_RC6 */
++ case 12: /* LO_CRYPT_DES_EDE3 */
++ case 16: /* LO_CRYPT_AES */
++ case 18: /* LO_CRYPT_CRYPTOAPI */
++ /* set default hash function */
++ hashFunc = sha256_hash_buffer;
++ if(loopinfo.lo_encrypt_key_size == 24) hashFunc = sha384_hash_buffer;
++ if(loopinfo.lo_encrypt_key_size == 32) hashFunc = sha512_hash_buffer;
++ /* possibly override default hash function */
++ if(passHashFuncName) {
++ if(!strcasecmp(passHashFuncName, "sha256")) {
++ hashFunc = sha256_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "sha384")) {
++ hashFunc = sha384_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "sha512")) {
++ hashFunc = sha512_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "rmd160")) {
++ hashFunc = rmd160HashTwiceWithA;
++ minPassLen = 1;
++ } else if(!strcasecmp(passHashFuncName, "unhashed1")) {
++ hashFunc = unhashed1_key_setup;
++ } else if(!strcasecmp(passHashFuncName, "unhashed2")) {
++ hashFunc = unhashed2_key_setup;
++ minPassLen = 1;
++ } else if(!strcasecmp(passHashFuncName, "unhashed3") && passFDnumber && !gpgKeyFile) {
++ /* unhashed3 hash type reads binary key from file descriptor. */
++ /* This is not compatible with gpgkey= mount option */
++ if(rd_wr_retry(atoi(passFDnumber), (char *)&loopinfo.lo_encrypt_key[0], LO_KEY_SIZE, 0) < 1) {
++ fprintf(stderr, _("Error: couldn't read binary key\n"));
++ goto loop_clr_fd_out;
++ }
++ break; /* out of switch(loopinfo.lo_encrypt_type) */
++ } else if(!strncasecmp(passHashFuncName, "random", 6) && ((passHashFuncName[6] == 0) || (passHashFuncName[6] == '/'))) {
++ /* random hash type sets up 65 random keys */
++ /* WARNING! DO NOT USE RANDOM HASH TYPE ON PARTITION WITH EXISTING */
++ /* IMPORTANT DATA ON IT. RANDOM HASH TYPE WILL DESTROY YOUR DATA. */
++ if(loop_create_random_keys((char*)file, loopinfo.lo_offset, loopinfo.lo_sizelimit, *loopro, &multiKeyBits[0][0])) {
++ goto loop_clr_fd_out;
++ }
++ memcpy(&loopinfo.lo_encrypt_key[0], &multiKeyBits[0][0], sizeof(loopinfo.lo_encrypt_key));
++ run_mkfs_command = multiKeyMode = 1000;
++ break; /* out of switch(loopinfo.lo_encrypt_type) */
++ }
++ }
++ pass = sGetPass (minPassLen, LOOP_PASSWORD_MIN_LENGTH);
++ if(!pass) goto loop_clr_fd_out;
++ i = strlen(pass);
++ if(hashFunc == unhashed1_key_setup) {
++ /* this is for compatibility with historic loop-AES version */
++ loopinfo.lo_encrypt_key_size = 16; /* 128 bits */
++ if(i >= 32) loopinfo.lo_encrypt_key_size = 24; /* 192 bits */
++ if(i >= 43) loopinfo.lo_encrypt_key_size = 32; /* 256 bits */
++ }
++ (*hashFunc)((unsigned char *)pass, i, &loopinfo.lo_encrypt_key[0], sizeof(loopinfo.lo_encrypt_key));
++ if(multiKeyMode) {
++ int r = 0, t;
++ while(r < multiKeyMode) {
++ t = strlen(multiKeyPass[r]);
++ (*hashFunc)((unsigned char *)multiKeyPass[r], t, &multiKeyBits[r][0], 32);
++ memset(multiKeyPass[r], 0, t);
++ /*
++ * MultiKeyMode uses md5 IV. One key mode uses sector IV. Sector IV
++ * and md5 IV v2 and v3 are all computed differently. This first key
++ * byte XOR with 0x55/0xF4 is needed to cause complete decrypt failure
++ * in cases where data is encrypted with one type of IV and decrypted
++ * with another type IV. If identical key was used but only IV was
++ * computed differently, only first plaintext block of 512 byte CBC
++ * chain would decrypt incorrectly and rest would decrypt correctly.
++ * Partially correct decryption is dangerous. Decrypting all blocks
++ * incorrectly is safer because file system mount will simply fail.
++ */
++ if(multiKeyMode == 65) {
++ multiKeyBits[r][0] ^= 0xF4; /* version 3 */
++ } else {
++ multiKeyBits[r][0] ^= 0x55; /* version 2 */
++ }
++ r++;
++ }
++ } else if(passIterThousands) {
++ aes_context ctx;
++ unsigned long iter = 0;
++ unsigned char tempkey[32];
++ /*
++ * Set up AES-256 encryption key using same password and hash function
++ * as before but with password bit 0 flipped before hashing. That key
++ * is then used to encrypt actual loop key 'itercountk' thousand times.
++ */
++ pass[0] ^= 1;
++ (*hashFunc)((unsigned char *)pass, i, &tempkey[0], 32);
++ aes_set_key(&ctx, &tempkey[0], 32, 0);
++ sscanf(passIterThousands, "%lu", &iter);
++ iter *= 1000;
++ while(iter > 0) {
++ /* encrypt both 128bit blocks with AES-256 */
++ aes_encrypt(&ctx, &loopinfo.lo_encrypt_key[ 0], &loopinfo.lo_encrypt_key[ 0]);
++ aes_encrypt(&ctx, &loopinfo.lo_encrypt_key[16], &loopinfo.lo_encrypt_key[16]);
++ /* exchange upper half of first block with lower half of second block */
++ memcpy(&tempkey[0], &loopinfo.lo_encrypt_key[8], 8);
++ memcpy(&loopinfo.lo_encrypt_key[8], &loopinfo.lo_encrypt_key[16], 8);
++ memcpy(&loopinfo.lo_encrypt_key[16], &tempkey[0], 8);
++ iter--;
++ }
++ memset(&ctx, 0, sizeof(ctx));
++ memset(&tempkey[0], 0, sizeof(tempkey));
++ }
++ memset(pass, 0, i); /* erase original password */
++ break;
+ default:
+- pass = xgetpass(pfd, _("Password: "));
+- gotpass:
+- memset(loopinfo64.lo_encrypt_key, 0, LO_KEY_SIZE);
+- xstrncpy((char *)loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
+- memset(pass, 0, strlen(pass));
+- loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE;
++ fprintf (stderr, _("Error: don't know how to get key for encryption system %d\n"), loopinfo.lo_encrypt_type);
++ goto loop_clr_fd_out;
+ }
+
+- if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
+- int rc = 1;
+-
+- if (errno == EBUSY) {
+- if (verbose)
+- printf(_("ioctl LOOP_SET_FD failed: %s\n"),
+- strerror(errno));
+- rc = 2;
+- } else
+- perror("ioctl: LOOP_SET_FD");
+-
+- close(fd);
+- close(ffd);
+- if (file != filename)
+- free(filename);
+- return rc;
++ if(loInitValue) {
++ /* cipher modules are free to do whatever they want with this value */
++ i = 0;
++ sscanf(loInitValue, "%d", &i);
++ loopinfo.lo_init[0] = i;
++ }
++
++ /* type 18 == LO_CRYPT_CRYPTOAPI */
++ if ((loopinfo.lo_encrypt_type == 18) || (loop_set_status64_ioctl(fd, &loopinfo) < 0)) {
++ /* direct cipher interface failed - try CryptoAPI interface now */
++ if(!apiName || (try_cryptoapi_loop_interface(fd, &loopinfo, apiName) < 0)) {
++ fprintf(stderr, _("ioctl: LOOP_SET_STATUS: %s, requested cipher or key length (%d bits) not supported by kernel\n"), strerror(errno), loopinfo.lo_encrypt_key_size << 3);
++ loop_clr_fd_out:
++ (void) ioctl (fd, LOOP_CLR_FD, 0);
++ goto keyclean_close_fd_ffd_return1;
++ }
++ }
++ if(multiKeyMode >= 65) {
++ if(ioctl(fd, LOOP_MULTI_KEY_SETUP_V3, &multiKeyBits[0][0]) < 0) {
++ if(multiKeyMode == 1000) goto try_v2_setup;
++ perror("ioctl: LOOP_MULTI_KEY_SETUP_V3");
++ goto loop_clr_fd_out;
++ }
++ } else if(multiKeyMode == 64) {
++ try_v2_setup:
++ if((ioctl(fd, LOOP_MULTI_KEY_SETUP, &multiKeyBits[0][0]) < 0) && (multiKeyMode != 1000)) {
++ perror("ioctl: LOOP_MULTI_KEY_SETUP");
++ goto loop_clr_fd_out;
++ }
+ }
+- close (ffd);
+-
+- if (*options & SETLOOP_AUTOCLEAR)
+- loopinfo64.lo_flags = LO_FLAGS_AUTOCLEAR;
+
+- i = ioctl(fd, LOOP_SET_STATUS64, &loopinfo64);
+- if (i) {
+- struct loop_info loopinfo;
+- int errsv = errno;
++ memset(loopinfo.lo_encrypt_key, 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close (fd);
++ close (ffd);
+
+- i = loop_info64_to_old(&loopinfo64, &loopinfo);
+- if (i) {
+- errno = errsv;
+- *options &= ~SETLOOP_AUTOCLEAR;
+- perror("ioctl: LOOP_SET_STATUS64");
++#if !defined(MAIN)
++ if(run_mkfs_command && fstype && *fstype && **fstype && (getuid() == 0)) {
++ if(!loop_fork_mkfs_command((char *)device, (char *)(*fstype))) {
++ /* !strncasecmp(passHashFuncName, "random", 6) test matched */
++ /* This reads octal mode for newly created file system root */
++ /* directory node from '-o phash=random/1777' mount option. */
++ /* octal mode--^^^^ */
++ sscanf(passHashFuncName + 6, "/%o", AutoChmodPtr);
+ } else {
+- i = ioctl(fd, LOOP_SET_STATUS, &loopinfo);
+- if (i)
+- perror("ioctl: LOOP_SET_STATUS");
+- else if (*options & SETLOOP_AUTOCLEAR)
+- {
+- i = ioctl(fd, LOOP_GET_STATUS, &loopinfo);
+- if (i || !(loopinfo.lo_flags & LO_FLAGS_AUTOCLEAR))
+- *options &= ~SETLOOP_AUTOCLEAR;
++ if((fd = open(device, mode)) >= 0) {
++ ioctl(fd, LOOP_CLR_FD, 0);
++ close(fd);
++ return 1;
+ }
+ }
+- memset(&loopinfo, 0, sizeof(loopinfo));
+- }
+- else if (*options & SETLOOP_AUTOCLEAR)
+- {
+- i = ioctl(fd, LOOP_GET_STATUS64, &loopinfo64);
+- if (i || !(loopinfo64.lo_flags & LO_FLAGS_AUTOCLEAR))
+- *options &= ~SETLOOP_AUTOCLEAR;
+ }
+- memset(&loopinfo64, 0, sizeof(loopinfo64));
+-
+-
+- if (i) {
+- ioctl (fd, LOOP_CLR_FD, 0);
+- close (fd);
+- if (file != filename)
+- free(filename);
+- return 1;
+- }
+-
+- /*
+- * HACK: here we're leeking a file descriptor,
+- * but mount is a short-lived process anyway.
+- */
+- if (!(*options & SETLOOP_AUTOCLEAR))
+- close (fd);
++#endif
+
+ if (verbose > 1)
+- printf(_("set_loop(%s,%s,%llu,%llu): success\n"),
+- device, filename, offset, sizelimit);
+- if (file != filename)
+- free(filename);
++ printf(_("set_loop(%s,%s): success\n"), device, file);
+ return 0;
+ }
+
+-int
+-del_loop (const char *device) {
+- int fd;
++#ifdef MAIN
+
+- if ((fd = open (device, O_RDONLY)) < 0) {
+- int errsv = errno;
+- fprintf(stderr, _("loop: can't delete device %s: %s\n"),
+- device, strerror (errsv));
+- return 1;
+- }
+- if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
+- perror ("ioctl: LOOP_CLR_FD");
+- close(fd);
+- return 1;
+- }
+- close (fd);
+- if (verbose > 1)
+- printf(_("del_loop(%s): success\n"), device);
+- return 0;
+-}
++#include <getopt.h>
++#include <stdarg.h>
++
++int verbose = 0;
++static char *progname;
+
+-#else /* no LOOP_SET_FD defined */
+ static void
+-mutter(void) {
+- fprintf(stderr,
+- _("This mount was compiled without loop support. "
+- "Please recompile.\n"));
++usage(void) {
++ fprintf(stderr, _("usage:\n\
++ %s [options] loop_device file # setup\n\
++ %s -F [options] loop_device [file] # setup, read /etc/fstab\n\
++ %s loop_device # give info\n\
++ %s -a # give info of all loops\n\
++ %s -d loop_device # delete\n\
++ %s -R loop_device # resize\n\
++options: -e encryption -o offset -s sizelimit -p passwdfd -T -S pseed\n\
++ -H phash -I loinit -K gpgkey -G gpghome -C itercountk -v -r\n\
++ -P cleartextkey\n"),
++ progname, progname, progname, progname, progname, progname);
++ exit(1);
+ }
+
+-int
+-set_loop(const char *device, const char *file, unsigned long long offset,
+- unsigned long long sizelimit, const char *encryption, int pfd, int *loopro,
+- int keysz, int hash_pass) {
+- mutter();
+- return 1;
++void
++show_all_loops(void)
++{
++ char dev[20];
++ char *lfmt[] = { "/dev/loop%d", "/dev/loop/%d" };
++ int i, j, fd, x;
++ struct stat statbuf;
++
++ for(i = 0; i < 256; i++) {
++ for(j = (sizeof(lfmt) / sizeof(lfmt[0])) - 1; j >= 0; j--) {
++ sprintf(dev, lfmt[j], i);
++ if(stat(dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ fd = open(dev, O_RDONLY);
++ if(fd >= 0) {
++ x = is_unused_loop_device(fd);
++ close(fd);
++ if(x == 0) {
++ show_loop(dev);
++ j = 0;
++ }
++ }
++ }
++ }
++ }
+ }
+
+ int
+-del_loop (const char *device) {
+- mutter();
+- return 1;
+-}
++read_options_from_fstab(char *loopToFind, char **partitionPtr)
++{
++ FILE *f;
++ struct mntent *m;
++ int y, foundMatch = 0;
++ char *opt, *fr1, *fr2;
++ struct options {
++ char *name; /* name of /etc/fstab option */
++ char **dest; /* destination where it is written to */
++ char *line; /* temp */
++ };
++ struct options tbl[] = {
++ { "device/file name ", partitionPtr }, /* must be index 0 */
++ { "loop=", &loopToFind }, /* must be index 1 */
++ { "offset=", &loopOffsetBytes },
++ { "sizelimit=", &loopSizeBytes },
++ { "encryption=", &loopEncryptionType },
++ { "pseed=", &passSeedString },
++ { "phash=", &passHashFuncName },
++ { "loinit=", &loInitValue },
++ { "gpgkey=", &gpgKeyFile },
++ { "gpghome=", &gpgHomeDir },
++ { "cleartextkey=", &clearTextKeyFile },
++ { "itercountk=", &passIterThousands },
++ };
++ struct options *p;
+
+-char *
+-find_unused_loop_device (void) {
+- mutter();
+- return 0;
++ if (!(f = setmntent("/etc/fstab", "r"))) {
++ fprintf(stderr, _("Error: unable to open /etc/fstab for reading\n"));
++ return 0;
++ }
++ while ((m = getmntent(f)) != NULL) {
++ tbl[0].line = fr1 = xstrdup(m->mnt_fsname);
++ p = &tbl[1];
++ do {
++ p->line = NULL;
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ opt = fr2 = xstrdup(m->mnt_opts);
++ for (opt = strtok(opt, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ p = &tbl[1];
++ do {
++ y = strlen(p->name);
++ if (!strncmp(opt, p->name, y))
++ p->line = opt + y;
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ }
++ if (tbl[1].line && !strcmp(loopToFind, tbl[1].line)) {
++ if (++foundMatch > 1) {
++ fprintf(stderr, _("Error: multiple loop=%s options found in /etc/fstab\n"), loopToFind);
++ endmntent(f);
++ return 0;
++ }
++ p = &tbl[0];
++ do {
++ if (!*p->dest && p->line) {
++ *p->dest = p->line;
++ if (verbose)
++ printf(_("using %s%s from /etc/fstab\n"), p->name, p->line);
++ }
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ fr1 = fr2 = NULL;
++ }
++ if(fr1) free(fr1);
++ if(fr2) free(fr2);
++ }
++ endmntent(f);
++ if (foundMatch == 0) {
++ fprintf(stderr, _("Error: loop=%s option not found in /etc/fstab\n"), loopToFind);
++ }
++ return foundMatch;
+ }
+
+-#endif /* !LOOP_SET_FD */
+-
+-#ifdef MAIN
+-
+-#ifdef LOOP_SET_FD
+-
+-#include <getopt.h>
+-#include <stdarg.h>
++int
++recompute_loop_dev_size(char *device)
++{
++ int fd, err1 = 0, err2, err3;
++ long long oldBytes = -1, newBytes = -1;
+
+-static void
+-usage(void) {
+- fprintf(stderr, _("\nUsage:\n"
+- " %1$s loop_device give info\n"
+- " %1$s -a | --all list all used\n"
+- " %1$s -d | --detach <loopdev> delete\n"
+- " %1$s -f | --find find unused\n"
+- " %1$s -j | --associated <file> [-o <num>] list all associated with <file>\n"
+- " %1$s [ options ] {-f|--find|loopdev} <file> setup\n"),
+- progname);
+-
+- fprintf(stderr, _("\nOptions:\n"
+- " -e | --encryption <type> enable data encryption with specified <name/num>\n"
+- " -h | --help this help\n"
+- " -o | --offset <num> start at offset <num> into file\n"
+- " --sizelimit <num> loop limited to only <num> bytes of the file\n"
+- " -p | --pass-fd <num> read passphrase from file descriptor <num>\n"
+- " -r | --read-only setup read-only loop device\n"
+- " --show print device name (with -f <file>)\n"
+- " -v | --verbose verbose mode\n\n"));
+- exit(1);
+- }
++ fd = open(device, O_RDONLY);
++ if(fd < 0) {
++ perror(device);
++ return 1;
++ }
++ if(verbose) {
++ err1 = ioctl(fd, BLKGETSIZE64, &oldBytes);
++ }
++ err2 = ioctl(fd, LOOP_RECOMPUTE_DEV_SIZE, 0);
++ if(err2) {
++ perror(device);
++ goto done1;
++ }
++ if(verbose) {
++ err3 = ioctl(fd, BLKGETSIZE64, &newBytes);
++ if(!err1 && (oldBytes >= 0)) {
++ printf("%s: old size %lld bytes\n", device, oldBytes);
++ }
++ if(!err3 && (newBytes >= 0)) {
++ printf("%s: new size %lld bytes\n", device, newBytes);
++ }
++ }
++done1:
++ close(fd);
++ return err2;
++}
+
+ int
+ main(int argc, char **argv) {
+- char *p, *offset, *sizelimit, *encryption, *passfd, *device, *file, *assoc;
+- int delete, find, c, all;
++ char *partitionName = NULL;
++ int delete,c,option_a=0,option_F=0,option_R=0,setup_o=0;
+ int res = 0;
+- int showdev = 0;
+ int ro = 0;
+- int pfd = -1;
+- unsigned long long off, slimit;
+- struct option longopts[] = {
+- { "all", 0, 0, 'a' },
+- { "detach", 0, 0, 'd' },
+- { "encryption", 1, 0, 'e' },
+- { "find", 0, 0, 'f' },
+- { "help", 0, 0, 'h' },
+- { "associated", 1, 0, 'j' },
+- { "offset", 1, 0, 'o' },
+- { "sizelimit", 1, 0, 128 },
+- { "pass-fd", 1, 0, 'p' },
+- { "read-only", 0, 0, 'r' },
+- { "show", 0, 0, 's' },
+- { "verbose", 0, 0, 'v' },
+- { NULL, 0, 0, 0 }
+- };
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+- delete = find = all = 0;
+- off = 0;
+- slimit = 0;
+- assoc = offset = sizelimit = encryption = passfd = NULL;
+-
++ delete = 0;
+ progname = argv[0];
+- if ((p = strrchr(progname, '/')) != NULL)
+- progname = p+1;
+-
+- while ((c = getopt_long(argc, argv, "ade:E:fhj:o:p:rsv",
+- longopts, NULL)) != -1) {
++ while ((c = getopt(argc,argv,"aC:de:FG:H:I:K:o:p:P:rRs:S:Tv")) != -1) {
+ switch (c) {
+- case 'a':
+- all = 1;
++ case 'a': /* show status of all loops */
++ option_a = 1;
+ break;
+- case 'r':
+- ro = 1;
++ case 'C':
++ passIterThousands = optarg;
++ setup_o = 1;
+ break;
+ case 'd':
+ delete = 1;
+ break;
+- case 'E':
+ case 'e':
+- encryption = optarg;
++ loopEncryptionType = optarg;
++ setup_o = 1;
+ break;
+- case 'f':
+- find = 1;
++ case 'F': /* read loop related options from /etc/fstab */
++ option_F = 1;
++ setup_o = 1;
+ break;
+- case 'j':
+- assoc = optarg;
++ case 'G': /* GnuPG home dir */
++ gpgHomeDir = optarg;
++ setup_o = 1;
++ break;
++ case 'H': /* passphrase hash function name */
++ passHashFuncName = optarg;
++ setup_o = 1;
++ break;
++ case 'I': /* lo_init[0] value (in string form) */
++ loInitValue = optarg;
++ setup_o = 1;
++ break;
++ case 'K': /* GnuPG key file name */
++ gpgKeyFile = optarg;
++ setup_o = 1;
+ break;
+ case 'o':
+- offset = optarg;
++ loopOffsetBytes = optarg;
++ setup_o = 1;
++ break;
++ case 'p': /* read passphrase from given fd */
++ passFDnumber = optarg;
++ setup_o = 1;
++ break;
++ case 'P': /* read passphrase from given file */
++ clearTextKeyFile = optarg;
++ setup_o = 1;
++ break;
++ case 'r': /* read-only */
++ ro = 1;
++ setup_o = 1;
+ break;
+- case 'p':
+- passfd = optarg;
++ case 'R': /* recompute loop dev size */
++ option_R = 1;
+ break;
+ case 's':
+- showdev = 1;
++ loopSizeBytes = optarg;
++ setup_o = 1;
++ break;
++ case 'S': /* optional seed for passphrase */
++ passSeedString = optarg;
++ setup_o = 1;
++ break;
++ case 'T': /* ask passphrase _twice_ */
++ passAskTwice = "T";
++ setup_o = 1;
+ break;
+ case 'v':
+- verbose = 1;
++ verbose++;
+ break;
+-
+- case 128: /* --sizelimit */
+- sizelimit = optarg;
+- break;
+-
+ default:
+ usage();
+ }
+ }
+-
+- if (argc == 1) {
+- usage();
++ if (option_a + delete + option_R + setup_o > 1) usage();
++ if (option_a) {
++ /* show all loops */
++ if (argc != optind) usage();
++ show_all_loops();
++ res = 0;
+ } else if (delete) {
+- if (argc != optind+1 || encryption || offset || sizelimit ||
+- find || all || showdev || assoc || ro)
+- usage();
+- } else if (find) {
+- if (all || assoc || argc < optind || argc > optind+1)
+- usage();
+- } else if (all) {
+- if (argc > 2)
+- usage();
+- } else if (assoc) {
+- if (encryption || showdev || passfd || ro)
+- usage();
++ /* delete loop */
++ if (argc != optind+1) usage();
++ res = del_loop(argv[optind]);
++ } else if (option_R) {
++ /* resize existing loop */
++ if (argc != optind+1) usage();
++ res = recompute_loop_dev_size(argv[optind]);
++ } else if ((argc == optind+1) && !setup_o) {
++ /* show one loop */
++ res = show_loop(argv[optind]);
+ } else {
+- if (argc < optind+1 || argc > optind+2)
++ /* set up new loop */
++ if ((argc < optind+1) || ((argc == optind+1) && !option_F) || (argc > optind+2))
+ usage();
+- }
+-
+- if (offset && sscanf(offset, "%llu", &off) != 1)
+- usage();
+-
+- if (sizelimit && sscanf(sizelimit, "%llu", &slimit) != 1)
+- usage();
+-
+- if (all)
+- return show_used_loop_devices();
+- else if (assoc)
+- return show_associated_loop_devices(assoc, off, offset ? 1 : 0);
+- else if (find) {
+- device = find_unused_loop_device();
+- if (device == NULL)
+- return -1;
+- if (argc == optind) {
+- if (verbose)
+- printf("Loop device is %s\n", device);
+- printf("%s\n", device);
+- return 0;
+- }
+- file = argv[optind];
+- } else {
+- device = argv[optind];
+- if (argc == optind+1)
+- file = NULL;
+- else
+- file = argv[optind+1];
+- }
+-
+- if (delete)
+- res = del_loop(device);
+- else if (file == NULL)
+- res = show_loop(device);
+- else {
+- if (passfd && sscanf(passfd, "%d", &pfd) != 1)
+- usage();
+- do {
+- res = set_loop(device, file, off, slimit, encryption, pfd, &ro);
+- if (res == 2 && find) {
+- if (verbose)
+- printf("stolen loop=%s...trying again\n",
+- device);
+- free(device);
+- if (!(device = find_unused_loop_device()))
+- return -1;
+- }
+- } while (find && res == 2);
+-
+- if (verbose && res == 0)
+- printf("Loop device is %s\n", device);
+-
+- if (res == 0 && showdev && find)
+- printf("%s\n", device);
++ if (argc > optind+1)
++ partitionName = argv[optind+1];
++ if (option_F && (read_options_from_fstab(argv[optind], &partitionName) != 1))
++ exit(1);
++ res = set_loop(argv[optind],partitionName,&ro,(const char**)0,(unsigned int *)0, 1);
+ }
+ return res;
+ }
+-
+-#else /* LOOP_SET_FD not defined */
+-
+-int
+-main(int argc, char **argv) {
+- fprintf(stderr,
+- _("No loop support was available at compile time. "
+- "Please recompile.\n"));
+- return -1;
+-}
+-#endif /* !LOOP_SET_FD*/
+-#endif /* MAIN */
++#endif
+diff -urN util-linux-ng-2.14/mount/lomount.h util-linux-ng-2.14-AES/mount/lomount.h
+--- util-linux-ng-2.14/mount/lomount.h 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/lomount.h 2008-06-24 16:55:13.000000000 +0300
+@@ -1,11 +1,19 @@
+-extern int set_loop(const char *, const char *, unsigned long long, unsigned long long,
+- const char *, int, int *);
++extern int verbose;
++extern int set_loop(const char *, const char *, int *, const char **, unsigned int *, int);
+ extern int del_loop(const char *);
+ extern int is_loop_device(const char *);
++extern int is_loop_active(const char *, const char *);
+ extern char * find_unused_loop_device(void);
+
+-extern int loopfile_used_with(char *devname, const char *filename, unsigned long long offset);
+-extern char *loopfile_used (const char *filename, unsigned long long offset);
+-
+-#define SETLOOP_RDONLY (1<<0) /* Open loop read-only */
+-#define SETLOOP_AUTOCLEAR (1<<1) /* Automatically detach loop on close (2.6.25?) */
++extern char *passFDnumber;
++extern char *passAskTwice;
++extern char *passSeedString;
++extern char *passHashFuncName;
++extern char *passIterThousands;
++extern char *loInitValue;
++extern char *gpgKeyFile;
++extern char *gpgHomeDir;
++extern char *clearTextKeyFile;
++extern char *loopOffsetBytes;
++extern char *loopSizeBytes;
++extern char *loopEncryptionType;
+diff -urN util-linux-ng-2.14/mount/loop.c util-linux-ng-2.14-AES/mount/loop.c
+--- util-linux-ng-2.14/mount/loop.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/loop.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,221 @@
++/*
++ * loop.c
++ *
++ * Copyright 2003 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU GPL
++ */
++
++/* collection of loop helper functions used by losetup, mount and swapon */
++
++#include <stdio.h>
++#include <string.h>
++#include <ctype.h>
++#include <sys/ioctl.h>
++#include <sys/types.h>
++#include <errno.h>
++#include "loop.h"
++
++static void convert_info_to_info64(struct loop_info *info, struct loop_info64 *info64)
++{
++ memset(info64, 0, sizeof(*info64));
++ info64->lo_number = info->lo_number;
++ info64->lo_device = info->lo_device;
++ info64->lo_inode = info->lo_inode;
++ info64->lo_rdevice = info->lo_rdevice;
++ info64->lo_offset = info->lo_offset;
++ info64->lo_encrypt_type = info->lo_encrypt_type;
++ info64->lo_encrypt_key_size = info->lo_encrypt_key_size;
++ info64->lo_flags = info->lo_flags;
++ info64->lo_init[0] = info->lo_init[0];
++ info64->lo_init[1] = info->lo_init[1];
++ info64->lo_sizelimit = 0;
++ if (info->lo_encrypt_type == 18) /* LO_CRYPT_CRYPTOAPI */
++ memcpy(info64->lo_crypt_name, info->lo_name, sizeof(info64->lo_crypt_name));
++ else
++ memcpy(info64->lo_file_name, info->lo_name, sizeof(info64->lo_file_name));
++ memcpy(info64->lo_encrypt_key, info->lo_encrypt_key, sizeof(info64->lo_encrypt_key));
++}
++
++static int convert_info64_to_info(struct loop_info64 *info64, struct loop_info *info)
++{
++ memset(info, 0, sizeof(*info));
++ info->lo_number = info64->lo_number;
++ info->lo_device = info64->lo_device;
++ info->lo_inode = info64->lo_inode;
++ info->lo_rdevice = info64->lo_rdevice;
++ info->lo_offset = info64->lo_offset;
++ info->lo_encrypt_type = info64->lo_encrypt_type;
++ info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
++ info->lo_flags = info64->lo_flags;
++ info->lo_init[0] = info64->lo_init[0];
++ info->lo_init[1] = info64->lo_init[1];
++ if (info->lo_encrypt_type == 18) /* LO_CRYPT_CRYPTOAPI */
++ memcpy(info->lo_name, info64->lo_crypt_name, sizeof(info->lo_name));
++ else
++ memcpy(info->lo_name, info64->lo_file_name, sizeof(info->lo_name));
++ memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, sizeof(info->lo_encrypt_key));
++
++ /* error in case values were truncated */
++ if (info->lo_device != info64->lo_device ||
++ info->lo_rdevice != info64->lo_rdevice ||
++ info->lo_inode != info64->lo_inode ||
++ info->lo_offset != info64->lo_offset ||
++ info64->lo_sizelimit) {
++ errno = EOVERFLOW;
++ return -1;
++ }
++ return 0;
++}
++
++int loop_set_status64_ioctl(int fd, struct loop_info64 *info64)
++{
++ struct loop_info info;
++ struct loop_info64 tmp;
++ int r;
++
++ /*
++ * This ugly work around is needed because some
++ * Red Hat kernels are using same ioctl code:
++ * #define LOOP_CHANGE_FD 0x4C04
++ * vs.
++ * #define LOOP_SET_STATUS64 0x4C04
++ * that is used by modern loop driver.
++ *
++ * Attempt to detect presense of LOOP_GET_STATUS64
++ * ioctl before issuing LOOP_SET_STATUS64 ioctl.
++ * Red Hat kernels with above LOOP_CHANGE_FD damage
++ * should return -1 and set errno to EINVAL.
++ */
++ r = ioctl(fd, LOOP_GET_STATUS64, &tmp);
++ memset(&tmp, 0, sizeof(tmp));
++ if ((r == 0) || (errno != EINVAL)) {
++ r = ioctl(fd, LOOP_SET_STATUS64, info64);
++ if (!r)
++ return 0;
++ }
++ r = convert_info64_to_info(info64, &info);
++ if (!r)
++ r = ioctl(fd, LOOP_SET_STATUS, &info);
++
++ /* don't leave copies of encryption key on stack */
++ memset(&info, 0, sizeof(info));
++ return r;
++}
++
++int loop_get_status64_ioctl(int fd, struct loop_info64 *info64)
++{
++ struct loop_info info;
++ int r;
++
++ memset(info64, 0, sizeof(*info64));
++ r = ioctl(fd, LOOP_GET_STATUS64, info64);
++ if (!r)
++ return 0;
++ r = ioctl(fd, LOOP_GET_STATUS, &info);
++ if (!r)
++ convert_info_to_info64(&info, info64);
++
++ /* don't leave copies of encryption key on stack */
++ memset(&info, 0, sizeof(info));
++ return r;
++}
++
++/* returns: 1=unused 0=busy */
++int is_unused_loop_device(int fd)
++{
++ struct loop_info64 info64;
++ struct loop_info info;
++ int r;
++
++ r = ioctl(fd, LOOP_GET_STATUS64, &info64);
++ memset(&info64, 0, sizeof(info64));
++ if (!r)
++ return 0;
++ if (errno == ENXIO)
++ return 1;
++
++ r = ioctl(fd, LOOP_GET_STATUS, &info);
++ memset(&info, 0, sizeof(info));
++ if (!r)
++ return 0;
++ if (errno == ENXIO)
++ return 1;
++ if (errno == EOVERFLOW)
++ return 0;
++ return 1;
++}
++
++struct loop_crypt_type_struct loop_crypt_type_tbl[] = {
++ { 0, 0, 0, "no" },
++ { 0, 0, 0, "none" },
++ { 1, 0, 0, "xor" },
++ { 3, 1, 16, "twofish" },
++ { 4, 1, 16, "blowfish" },
++ { 7, 1, 16, "serpent" },
++ { 8, 1, 16, "mars" },
++ { 11, 3, 16, "rc6" },
++ { 12, 0, 21, "tripleDES" },
++ { 12, 0, 24, "3des" },
++ { 12, 0, 24, "des3_ede" },
++ { 16, 1, 16, "AES" },
++ { -1, 0, 0, NULL }
++};
++
++static char *getApiName(char *e, int *len)
++{
++ int x, y, z = 1, q = -1;
++ unsigned char *s;
++
++ *len = y = 0;
++ s = (unsigned char *)strdup(e);
++ if(!s)
++ return "";
++ x = strlen((char *)s);
++ while(x > 0) {
++ x--;
++ if(!isdigit(s[x]))
++ break;
++ y += (s[x] - '0') * z;
++ z *= 10;
++ q = x;
++ }
++ while(x >= 0) {
++ s[x] = tolower(s[x]);
++ if(s[x] == '-')
++ s[x] = 0;
++ x--;
++ }
++ if(y >= 40) {
++ if(q >= 0)
++ s[q] = 0;
++ *len = y;
++ }
++ return((char *)s);
++}
++
++int loop_crypt_type(const char *name, u_int32_t *kbyp, char **apiName)
++{
++ int i, k;
++
++ *apiName = getApiName((char *)name, &k);
++ if(k < 0)
++ k = 0;
++ if(k > 256)
++ k = 256;
++ for (i = 0; loop_crypt_type_tbl[i].id != -1; i++) {
++ if (!strcasecmp (*apiName , loop_crypt_type_tbl[i].name)) {
++ *kbyp = k ? k >> 3 : loop_crypt_type_tbl[i].keyBytes;
++ return loop_crypt_type_tbl[i].id;
++ }
++ }
++ *kbyp = 16; /* 128 bits */
++ return 18; /* LO_CRYPT_CRYPTOAPI */
++}
++
++int try_cryptoapi_loop_interface(int fd, struct loop_info64 *loopinfo, char *apiName)
++{
++ snprintf((char *)loopinfo->lo_crypt_name, sizeof(loopinfo->lo_crypt_name), "%s-cbc", apiName);
++ loopinfo->lo_crypt_name[LO_NAME_SIZE - 1] = 0;
++ loopinfo->lo_encrypt_type = 18; /* LO_CRYPT_CRYPTOAPI */
++ return(loop_set_status64_ioctl(fd, loopinfo));
++}
+diff -urN util-linux-ng-2.14/mount/loop.h util-linux-ng-2.14-AES/mount/loop.h
+--- util-linux-ng-2.14/mount/loop.h 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/loop.h 2008-06-24 16:55:13.000000000 +0300
+@@ -1,19 +1,20 @@
+-#ifndef MNT_LOOP_H
+-#define MNT_LOOP_H
++/*
++ * loop.h
++ *
++ * Copyright 2003 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU GPL
++ */
+
+-#include <linux/posix_types.h>
+-#include <stdint.h>
+-#include "linux_version.h"
++#ifndef _LOOP_H
++#define _LOOP_H 1
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68)
+-#define my_dev_t __kernel_dev_t
+-#else
+-#define my_dev_t __kernel_old_dev_t
+-#endif
++#include <sys/types.h>
++#include <linux/version.h>
++#include <linux/posix_types.h>
+
+-#define LO_CRYPT_NONE 0
+-#define LO_CRYPT_XOR 1
+-#define LO_CRYPT_DES 2
++#define LO_CRYPT_NONE 0
++#define LO_CRYPT_XOR 1
++#define LO_CRYPT_DES 2
+ #define LO_CRYPT_CRYPTOAPI 18
+
+ #define LOOP_SET_FD 0x4C00
+@@ -22,22 +23,26 @@
+ #define LOOP_GET_STATUS 0x4C03
+ #define LOOP_SET_STATUS64 0x4C04
+ #define LOOP_GET_STATUS64 0x4C05
++#define LOOP_MULTI_KEY_SETUP 0x4C4D
++#define LOOP_MULTI_KEY_SETUP_V3 0x4C4E
++#define LOOP_RECOMPUTE_DEV_SIZE 0x4C52
+
+-/* Flags for loop_into{64,}->lo_flags */
+-enum {
+- LO_FLAGS_READ_ONLY = 1,
+- LO_FLAGS_USE_AOPS = 2,
+- LO_FLAGS_AUTOCLEAR = 4, /* New in 2.6.25 */
+-};
+-
+-#define LO_NAME_SIZE 64
+-#define LO_KEY_SIZE 32
++#define LO_NAME_SIZE 64
++#define LO_KEY_SIZE 32
+
+ struct loop_info {
+ int lo_number;
+- my_dev_t lo_device;
++#if LINUX_VERSION_CODE >= 0x20600
++ __kernel_old_dev_t lo_device;
++#else
++ __kernel_dev_t lo_device;
++#endif
+ unsigned long lo_inode;
+- my_dev_t lo_rdevice;
++#if LINUX_VERSION_CODE >= 0x20600
++ __kernel_old_dev_t lo_rdevice;
++#else
++ __kernel_dev_t lo_rdevice;
++#endif
+ int lo_offset;
+ int lo_encrypt_type;
+ int lo_encrypt_key_size;
+@@ -49,19 +54,34 @@
+ };
+
+ struct loop_info64 {
+- uint64_t lo_device;
+- uint64_t lo_inode;
+- uint64_t lo_rdevice;
+- uint64_t lo_offset;
+- uint64_t lo_sizelimit; /* bytes, 0 == max available */
+- uint32_t lo_number;
+- uint32_t lo_encrypt_type;
+- uint32_t lo_encrypt_key_size;
+- uint32_t lo_flags;
+- uint8_t lo_file_name[LO_NAME_SIZE];
+- uint8_t lo_crypt_name[LO_NAME_SIZE];
+- uint8_t lo_encrypt_key[LO_KEY_SIZE];
+- uint64_t lo_init[2];
++ u_int64_t lo_device; /* ioctl r/o */
++ u_int64_t lo_inode; /* ioctl r/o */
++ u_int64_t lo_rdevice; /* ioctl r/o */
++ u_int64_t lo_offset; /* bytes */
++ u_int64_t lo_sizelimit; /* bytes, 0 == max available */
++ u_int32_t lo_number; /* ioctl r/o */
++ u_int32_t lo_encrypt_type;
++ u_int32_t lo_encrypt_key_size; /* ioctl w/o */
++ u_int32_t lo_flags; /* ioctl r/o */
++ unsigned char lo_file_name[LO_NAME_SIZE];
++ unsigned char lo_crypt_name[LO_NAME_SIZE];
++ unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
++ u_int64_t lo_init[2];
+ };
+
+-#endif /* MNT_LOOP_H */
++extern int loop_set_status64_ioctl(int, struct loop_info64 *);
++extern int loop_get_status64_ioctl(int, struct loop_info64 *);
++extern int is_unused_loop_device(int);
++
++struct loop_crypt_type_struct {
++ short int id;
++ unsigned char flags; /* bit0 = show keybits, bit1 = add '-' before keybits */
++ unsigned char keyBytes;
++ char *name;
++};
++
++extern struct loop_crypt_type_struct loop_crypt_type_tbl[];
++extern int loop_crypt_type(const char *, u_int32_t *, char **);
++extern int try_cryptoapi_loop_interface(int, struct loop_info64 *, char *);
++
++#endif
+diff -urN util-linux-ng-2.14/mount/losetup.8 util-linux-ng-2.14-AES/mount/losetup.8
+--- util-linux-ng-2.14/mount/losetup.8 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/losetup.8 2008-06-24 16:55:13.000000000 +0300
+@@ -1,49 +1,29 @@
+-.TH LOSETUP 8 "2003-07-01" "Linux" "MAINTENANCE COMMANDS"
++.TH LOSETUP 8 "2007-09-02" "Linux" "MAINTENANCE COMMANDS"
+ .SH NAME
+ losetup \- set up and control loop devices
+ .SH SYNOPSIS
+ .ad l
+-Get info:
+-.sp
+-.in +5
+ .B losetup
++[options]
+ .I loop_device
+-.sp
++file
++.br
++.B losetup -F
++[options]
++.I loop_device
++[file]
++.br
++.B losetup
++[
++.B \-d
++]
++.I loop_device
++.br
+ .B losetup -a
+-.sp
+-.B losetup -j <file> [-o offset]
+-.sp
+-.in -5
+-Delete loop:
+-.sp
+-.in +5
+-.B "losetup \-d"
++.br
++.B losetup
++.B \-R
+ .I loop_device
+-.sp
+-.in -5
+-Print name of first unused loop device:
+-.sp
+-.in +5
+-.B "losetup \-f"
+-.sp
+-.in -5
+-Setup loop device:
+-.sp
+-.in +5
+-.B losetup
+-.RB [{\-e | \-E}
+-.IR encryption ]
+-.RB [ \-o
+-.IR offset ]
+-.RB [ \-\-sizelimit
+-.IR limit ]
+-.RB [ \-p
+-.IR pfd ]
+-.RB [ \-r ]
+-.in +8
+-.RB { \-f [ \-\-show ] | \fIloop_device\fP }
+-.I file
+-.in -13
+ .ad b
+ .SH DESCRIPTION
+ .B losetup
+@@ -51,62 +31,135 @@
+ to detach loop devices and to query the status of a loop device. If only the
+ \fIloop_device\fP argument is given, the status of the corresponding loop
+ device is shown.
+-
+-.SS "Encryption"
+-It is possible to specify transfer functions (for encryption/decryption
+-or other purposes) using one of the
+-.B \-E
+-and
+-.B \-e
+-options.
+-There are two mechanisms to specify the desired encryption: by number
+-and by name. If an encryption is specified by number then one
+-has to make sure that the Linux kernel knows about the encryption with that
+-number, probably by patching the kernel. Standard numbers that are
+-always present are 0 (no encryption) and 1 (XOR encryption).
+-When the cryptoloop module is loaded (or compiled in), it uses number 18.
+-This cryptoloop module will take the name of an arbitrary encryption type
+-and finds the module that knows how to perform that encryption.
+ .SH OPTIONS
+-.IP "\fB\-a, \-\-all\fP"
+-show status of all loop devices
+-.IP "\fB\-d, \-\-detach\fP"
+-detach the file or device associated with the specified loop device
+-.IP "\fB\-e, \-E, \-\-encryption \fIencryption_type\fP"
+-enable data encryption with specified name or number
+-.IP "\fB\-f, \-\-find\fP"
+-find the first unused loop device. If a
+-.I file
+-argument is present, use this device. Otherwise, print its name
+-.IP "\fB\-h, \-\-help\fP"
+-print help
+-.IP "\fB\-j, \-\-associated \fIfile\fP"
+-show status of all loop devices associated with given
+-.I file
+-.IP "\fB\-o, \-\-offset \fIoffset\fP"
+-the data start is moved \fIoffset\fP bytes into the specified file or
+-device
+-.IP "\fB\-\-sizelimit \fIlimit\fP"
+-the data end is set to no more than \fIsizelimit\fP bytes after the data start
+-.IP "\fB\-p, \-\-pass-fd \fInum\fP"
+-read the passphrase from file descriptor with number
+-.I num
+-instead of from the terminal
+-.IP "\fB\-r, \-\-read-only\fP"
+-setup read-only loop device
+-.IP "\fB\-\-show\fP"
+-print device name if the
+-.I -f
+-option and a
+-.I file
+-argument are present.
+-
+-The short form of this option (\fB\-s\fP) is deprecated. This short form could
+-be in collision with Loop-AES implementation where the same option is used for
+-\fB\-\-sizelimit\fP.
+-.IP "\fB\-v, \-\-verbose\fP"
+-verbose mode
++.IP \fB\-a\fP
++Show status of all loop devices.
++.IP "\fB\-C \fIitercountk\fP"
++Runs hashed passphrase through \fIitercountk\fP thousand iterations of AES-256
++before using it for loop encryption. This consumes lots of CPU cycles at
++loop setup/mount time but not thereafter. In combination with passphrase seed
++this slows down dictionary attacks. Iteration is not done in multi-key mode.
++.IP "\fB\-d\fP"
++Detach the file or device associated with the specified loop device.
++.IP "\fB\-e \fIencryption\fP"
++.RS
++Enable data encryption. Following encryption types are recognized:
++.IP \fBNONE\fP
++Use no encryption (default).
++.PD 0
++.IP \fBXOR\fP
++Use a simple XOR encryption.
++.IP "\fBAES128 AES\fP"
++Use 128 bit AES encryption. Passphrase is hashed with SHA-256 by default.
++.IP \fBAES192\fP
++Use 192 bit AES encryption. Passphrase is hashed with SHA-384 by default.
++.IP \fBAES256\fP
++Use 256 bit AES encryption. Passphrase is hashed with SHA-512 by default.
++
++.IP "\fBtwofish128 twofish160 twofish192 twofish256\fP"
++.IP "\fBblowfish128 blowfish160 blowfish192 blowfish256\fP"
++.IP "\fBserpent128 serpent192 serpent256 mars128 mars192\fP"
++.IP "\fBmars256 rc6-128 rc6-192 rc6-256 tripleDES\fP"
++These encryption types are available if they are enabled in kernel
++configuration or corresponding modules have been loaded to kernel.
++.PD
++.RE
++.IP "\fB\-F\fP"
++Reads and uses mount options from /etc/fstab that match specified loop
++device, including offset= sizelimit= encryption= pseed= phash= loinit=
++gpgkey= gpghome= cleartextkey= itercountk= and looped to device/file name.
++loop= option in /etc/fstab must match specified loop device name. Command
++line options take precedence in case of conflict.
++.IP "\fB\-G \fIgpghome\fP"
++Set gpg home directory to \fIgpghome\fP, so that gpg uses public/private
++keys on \fIgpghome\fP directory. This is only used when gpgkey file needs to
++be decrypted using public/private keys. If gpgkey file is encrypted with
++symmetric cipher only, public/private keys are not required and this option
++has no effect.
++.IP "\fB\-H \fIphash\fP"
++Uses \fIphash\fP function to hash passphrase. Available hash functions are
++sha256, sha384, sha512 and rmd160. unhashed1, unhashed2 and unhashed3
++functions also exist for compatibility with some obsolete implementations.
++
++Hash function random does not ask for passphrase but sets up random keys and
++attempts to put loop to multi-key mode. When random/1777 hash type is used
++as mount option for mount program, mount program will create new file system
++on the loop device and construct initial permissions of file system root
++directory from octal digits that follow the slash character.
++
++WARNING! DO NOT USE RANDOM HASH TYPE ON PARTITION WITH EXISTING IMPORTANT
++DATA ON IT. RANDOM HASH TYPE WILL DESTROY YOUR DATA.
++.IP "\fB\-I \fIloinit\fP"
++Passes a numeric value of \fIloinit\fP as a parameter to cipher transfer
++function. Cipher transfer functions are free to interpret value as they
++want.
++.IP "\fB\-K \fIgpgkey\fP"
++Passphrase is piped to gpg so that gpg can decrypt file \fIgpgkey\fP which
++contains the real keys that are used to encrypt loop device. If decryption
++requires public/private keys and gpghome is not specified, all users use
++their own gpg public/private keys to decrypt \fIgpgkey\fP. Decrypted
++\fIgpgkey\fP should contain 1 or 64 or 65 keys, each key at least 20
++characters and separated by newline. If decrypted \fIgpgkey\fP contains 64
++or 65 keys, then loop device is put to multi-key mode. In multi-key mode
++first key is used for first sector, second key for second sector, and so on.
++65th key, if present, is used as additional input to MD5 IV computation.
++.IP "\fB\-o \fIoffset\fP"
++The data start is moved \fIoffset\fP bytes into the specified file or
++device. Normally offset is included in IV (initialization vector)
++computations. If offset is prefixed with @ character, then offset is not
++included in IV computations. @ prefix functionality may not be supported on
++some older kernels and/or loop drivers.
++.IP "\fB\-p \fIpasswdfd\fP"
++Read the passphrase from file descriptor \fIpasswdfd\fP instead of the
++terminal. If -K option is not being used (no gpg key file), then losetup
++attempts to read 65 keys from \fIpasswdfd\fP, each key at least 20
++characters and separated by newline. If losetup successfully reads 64 or 65
++keys, then loop device is put to multi-key mode. If losetup encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode.
++
++echo SecretPassphraseHere | losetup -p0 -K foo.gpg -e AES128 ...
+
++In above example, losetup reads passphrase from file descriptor 0 (stdin).
++.IP "\fB\-P \fIcleartextkey\fP"
++Read the passphrase from file \fIcleartextkey\fP instead of the
++terminal. If -K option is not being used (no gpg key file), then losetup
++attempts to read 65 keys from \fIcleartextkey\fP, each key at least 20
++characters and separated by newline. If losetup successfully reads 64 or 65
++keys, then loop device is put to multi-key mode. If losetup encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode. If both -p and -P options are used, then -p option takes
++precedence. These are equivalent:
++
++losetup -p3 -K foo.gpg -e AES128 ... 3<someFileName
++
++losetup -P someFileName -K foo.gpg -e AES128 ...
++
++In first line of above example, in addition to normal open file descriptors
++(0==stdin 1==stdout 2==stderr), shell opens the file and passes open file
++descriptor to started losetup program. In second line of above example,
++losetup opens the file itself.
++.IP "\fB\-r\fP"
++Read-only mode.
++.IP "\fB\-R\fP"
++Resize existing, already set up loop device, to new changed underlying
++device size. This option is for changing mounted live file system size on
++LVM volume. This functionality may not be supported on some older kernels
++and/or loop drivers.
++.IP "\fB\-s \fIsizelimit\fP"
++Size of loop device is limited to \fIsizelimit\fP bytes. If unspecified or
++set to zero, loop device size is set to maximum available (file size minus
++offset). This option may not be supported on some older kernels and/or loop
++drivers.
++.IP "\fB\-S \fIpseed\fP"
++Sets encryption passphrase seed \fIpseed\fP which is appended to user supplied
++passphrase before hashing. Using different seeds for different partitions
++makes dictionary attacks slower but does not prevent them if user supplied
++passphrase is guessable. Seed is not used in multi-key mode.
++.IP "\fB\-T\fP"
++Asks passphrase twice.
++.IP "\fB\-v\fP"
++Verbose mode.
+ .SH RETURN VALUE
+ .B losetup
+ returns 0 on success, nonzero on failure. When
+@@ -118,49 +171,26 @@
+
+ .SH FILES
+ .nf
+-/dev/loop0, /dev/loop1, ... loop devices (major=7)
++/dev/loop0,/dev/loop1,... loop devices (major=7)
+ .fi
+ .SH EXAMPLE
+-If you are using the loadable module you must have the module loaded
+-first with the command
+-.IP
+-# insmod loop.o
+-.LP
+-Maybe also encryption modules are needed.
+-.IP
+-# insmod des.o
+-# insmod cryptoloop.o
+-.LP
+ The following commands can be used as an example of using the loop device.
+ .nf
+-.IP
+-# dd if=/dev/zero of=/file bs=1k count=100
+-# losetup -e des /dev/loop0 /file
+-Password:
+-Init (up to 16 hex digits):
+-# mkfs -t ext2 /dev/loop0 100
+-# mount -t ext2 /dev/loop0 /mnt
++
++dd if=/dev/zero of=/file bs=1k count=500
++head -c 3705 /dev/random | uuencode -m - | head -n 66 \\
++ | tail -n 65 | gpg --symmetric -a >/etc/fskey9.gpg
++losetup -e AES128 -K /etc/fskey9.gpg /dev/loop0 /file
++mkfs -t ext2 /dev/loop0
++mount -t ext2 /dev/loop0 /mnt
+ ...
+-# umount /dev/loop0
+-# losetup -d /dev/loop0
+-.fi
+-.LP
+-If you are using the loadable module you may remove the module with
+-the command
+-.IP
+-# rmmod loop
+-.LP
++umount /dev/loop0
++losetup -d /dev/loop0
+ .fi
+ .SH RESTRICTION
+-DES encryption is painfully slow. On the other hand, XOR is terribly weak.
+-
+-Cryptoloop is deprecated in favor of dm-crypt. For more details see
+-.B cryptsetup(8).
+-.SH AVAILABILITY
+-The losetup command is part of the util-linux-ng package and is available from
+-ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
+-.\" .SH AUTHORS
+-.\" .nf
+-.\" Original version: Theodore Ts'o <tytso@athena.mit.edu>
+-.\" Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
+-.\" .fi
++XOR encryption is terribly weak.
++.SH AUTHORS
++.nf
++Original version: Theodore Ts'o <tytso@athena.mit.edu>
++AES support: Jari Ruusu
++.fi
+diff -urN util-linux-ng-2.14/mount/loumount.c util-linux-ng-2.14-AES/mount/loumount.c
+--- util-linux-ng-2.14/mount/loumount.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/loumount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,60 @@
++/*
++ * loumount.c
++ *
++ * This code was extracted to separate file from lomount.c so that umount
++ * program doesn't have to link with all loop related setup code
++ */
++
++#define LOOPMAJOR 7
++
++#include <stdio.h>
++#include <string.h>
++#include <ctype.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <pwd.h>
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/stat.h>
++#include <sys/mman.h>
++#include <sys/sysmacros.h>
++#include <sys/wait.h>
++#include <fcntl.h>
++#include <mntent.h>
++#include <locale.h>
++
++#include "loop.h"
++#include "lomount.h"
++#include "xstrncpy.h"
++#include "nls.h"
++
++int
++is_loop_device (const char *device) {
++ struct stat statbuf;
++
++ return (stat(device, &statbuf) == 0 &&
++ S_ISBLK(statbuf.st_mode) &&
++ major(statbuf.st_rdev) == LOOPMAJOR);
++}
++
++int
++del_loop (const char *device) {
++ int fd;
++
++ if ((fd = open (device, O_RDONLY)) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't delete device %s: %s\n"),
++ device, strerror (errsv));
++ return 1;
++ }
++ if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
++ perror ("ioctl: LOOP_CLR_FD");
++ return 1;
++ }
++ close (fd);
++ if (verbose > 1)
++ printf(_("del_loop(%s): success\n"), device);
++ return 0;
++}
+diff -urN util-linux-ng-2.14/mount/mount.8 util-linux-ng-2.14-AES/mount/mount.8
+--- util-linux-ng-2.14/mount/mount.8 2008-06-09 12:28:17.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/mount.8 2008-06-24 16:55:13.000000000 +0300
+@@ -321,6 +321,16 @@
+ .B \-v
+ Verbose mode.
+ .TP
++.B \-p "\fIpasswdfd\fP"
++If the mount requires a passphrase to be entered, read it from file
++descriptor \fIpasswdfd\fP instead of from the terminal. If mount uses
++encrypted loop device and gpgkey= mount option is not being used (no gpg key
++file), then mount attempts to read 65 keys from \fIpasswdfd\fP, each key at
++least 20 characters and separated by newline. If mount successfully reads 64
++or 65 keys, then loop device is put to multi-key mode. If mount encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode.
++.TP
+ .B \-a
+ Mount all filesystems (of the given types) mentioned in
+ .IR fstab .
+@@ -370,12 +380,6 @@
+ .I /etc
+ is on a read-only file system.
+ .TP
+-.BI \-p " num"
+-In case of a loop mount with encryption, read the passphrase from
+-file descriptor
+-.I num
+-instead of from the terminal.
+-.TP
+ .B \-s
+ Tolerate sloppy mount options rather than failing. This will ignore
+ mount options not supported by a filesystem type. Not all filesystems
+@@ -2028,13 +2032,19 @@
+ and then mount this device on
+ .IR /mnt .
+
+-This type of mount knows about four options, namely
+-.BR loop ", " offset ", " sizelimit " and " encryption ,
++This type of mount knows about 11 options, namely
++.BR loop ", " offset ", " sizelimit ", " encryption ", " pseed ", " phash ", " loinit ", " gpgkey ", " gpghome ", " cleartextkey " and " itercountk
+ that are really options to
+ .BR \%losetup (8).
+ (These options can be used in addition to those specific
+ to the filesystem type.)
+
++If the mount requires a passphrase, you will be prompted for one unless you
++specify a file descriptor to read from instead with the
++.BR \-p
++command line option, or specify a file name with
++.BR cleartextkey
++mount option.
+ If no explicit loop device is mentioned
+ (but just an option `\fB\-o loop\fP' is given), then
+ .B mount
+diff -urN util-linux-ng-2.14/mount/mount.c util-linux-ng-2.14-AES/mount/mount.c
+--- util-linux-ng-2.14/mount/mount.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/mount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -11,6 +11,7 @@
+ #include <string.h>
+ #include <getopt.h>
+ #include <stdio.h>
++#include <locale.h>
+
+ #include <pwd.h>
+ #include <grp.h>
+@@ -84,9 +85,6 @@
+ /* True if ruid != euid. */
+ static int suid = 0;
+
+-/* Contains the fd to read the passphrase from, if any. */
+-static int pfd = -1;
+-
+ /* Map from -o and fstab option strings to the flag argument to mount(2). */
+ struct opt_map {
+ const char *opt; /* option name */
+@@ -182,8 +180,8 @@
+
+ static int opt_nofail = 0;
+
+-static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_sizelimit,
+- *opt_encryption, *opt_speed, *opt_comment, *opt_uhelper;
++static const char *opt_loopdev, *opt_vfstype,
++ *opt_speed, *opt_comment, *opt_uhelper;
+
+ static int mounted (const char *spec0, const char *node0);
+ static int check_special_mountprog(const char *spec, const char *node,
+@@ -196,9 +194,16 @@
+ } string_opt_map[] = {
+ { "loop=", 0, &opt_loopdev },
+ { "vfs=", 1, &opt_vfstype },
+- { "offset=", 0, &opt_offset },
+- { "sizelimit=", 0, &opt_sizelimit },
+- { "encryption=", 0, &opt_encryption },
++ { "pseed=", 1, (const char **)&passSeedString },
++ { "phash=", 0, (const char **)&passHashFuncName },
++ { "loinit=", 0, (const char **)&loInitValue },
++ { "gpgkey=", 0, (const char **)&gpgKeyFile },
++ { "gpghome=", 0, (const char **)&gpgHomeDir },
++ { "cleartextkey=", 0, (const char **)&clearTextKeyFile },
++ { "itercountk=", 1, (const char **)&passIterThousands },
++ { "offset=", 0, (const char **)&loopOffsetBytes },
++ { "sizelimit=", 0, (const char **)&loopSizeBytes },
++ { "encryption=", 0, (const char **)&loopEncryptionType },
+ { "speed=", 0, &opt_speed },
+ { "comment=", 1, &opt_comment },
+ { "uhelper=", 0, &opt_uhelper },
+@@ -827,6 +832,9 @@
+ *flags &= ~(MS_OWNER | MS_GROUP);
+ }
+
++/* if loop is already set up, following test is unnecessary */
++/* because loop set up will fail if it is done again */
++#if 0
+ /* Check, if there already exists a mounted loop device on the mountpoint node
+ * with the same parameters.
+ */
+@@ -867,13 +875,12 @@
+ free(node);
+ return res;
+ }
++#endif
+
+ static int
+ loop_check(const char **spec, const char **type, int *flags,
+- int *loop, const char **loopdev, const char **loopfile,
+- const char *node) {
++ int *loop, const char **loopdev, const char **loopfile, const char *node, unsigned int *AutoChmodPtr) {
+ int looptype;
+- unsigned long long offset, sizelimit;
+
+ /*
+ * In the case of a loop mount, either type is of the form lo@/dev/loop5
+@@ -898,7 +905,7 @@
+ *type = opt_vfstype;
+ }
+
+- *loop = ((*flags & MS_LOOP) || *loopdev || opt_offset || opt_sizelimit || opt_encryption);
++ *loop = ((*flags & MS_LOOP) || *loopdev || loopOffsetBytes || loopSizeBytes || loopEncryptionType);
+ *loopfile = *spec;
+
+ if (*loop) {
+@@ -906,20 +913,22 @@
+ if (fake) {
+ if (verbose)
+ printf(_("mount: skipping the setup of a loop device\n"));
++ } else if (*loopdev && is_loop_active(*loopdev, *loopfile)) {
++ if (verbose)
++ printf(_("mount: skipping the setup of a loop device\n"));
++ *spec = *loopdev;
+ } else {
+- int loop_opts = SETLOOP_AUTOCLEAR; /* always attempt autoclear */
++ int loopro = (*flags & MS_RDONLY);
+ int res;
+
+- if (*flags & MS_RDONLY)
+- loop_opts |= SETLOOP_RDONLY;
+-
+- offset = opt_offset ? strtoull(opt_offset, NULL, 0) : 0;
+- sizelimit = opt_sizelimit ? strtoull(opt_sizelimit, NULL, 0) : 0;
+-
++/* if loop is already set up, following test is unnecessary */
++/* because loop set up will fail if it is done again */
++#if 0
+ if (is_mounted_same_loopfile(node, *loopfile, offset)) {
+ error(_("mount: according to mtab %s is already mounted on %s as loop"), *loopfile, node);
+ return EX_FAIL;
+ }
++#endif
+
+ do {
+ if (!*loopdev || !**loopdev)
+@@ -929,21 +938,13 @@
+ if (verbose)
+ printf(_("mount: going to use the loop device %s\n"), *loopdev);
+
+- if ((res = set_loop(*loopdev, *loopfile, offset, sizelimit,
+- opt_encryption, pfd, &loop_opts))) {
+- if (res == 2) {
+- /* loop dev has been grabbed by some other process,
+- try again, if not given explicitly */
+- if (!opt_loopdev) {
+- if (verbose)
+- printf(_("mount: stolen loop=%s ...trying again\n"), *loopdev);
+- my_free(*loopdev);
+- *loopdev = NULL;
+- continue;
+- }
+- error(_("mount: stolen loop=%s"), *loopdev);
+- return EX_FAIL;
+-
++ if ((res = set_loop(*loopdev, *loopfile, &loopro, type, AutoChmodPtr, !opt_loopdev ? 2 : 1))) {
++ if ((res == 2) && !opt_loopdev) {
++ /* loop dev has been grabbed by some other process, try again */
++ if (verbose)
++ printf(_("mount: loop=%s not available ...trying again\n"), *loopdev);
++ my_free(*loopdev);
++ *loopdev = NULL;
+ } else {
+ if (verbose)
+ printf(_("mount: failed setting up loop device\n"));
+@@ -959,13 +960,8 @@
+ if (verbose > 1)
+ printf(_("mount: setup loop device successfully\n"));
+ *spec = *loopdev;
+-
+- if (loop_opts & SETLOOP_RDONLY)
++ if (loopro)
+ *flags |= MS_RDONLY;
+-
+- if (loop_opts & SETLOOP_AUTOCLEAR)
+- /* Prevent recording loop dev in mtab for cleanup on umount */
+- *loop = 0;
+ }
+ }
+
+@@ -1026,14 +1022,6 @@
+ }
+
+ static void
+-set_pfd(char *s) {
+- if (!isdigit(*s))
+- die(EX_USAGE,
+- _("mount: argument to -p or --pass-fd must be a number"));
+- pfd = atoi(optarg);
+-}
+-
+-static void
+ cdrom_setspeed(const char *spec) {
+ #define CDROM_SELECT_SPEED 0x5322 /* Set the CD-ROM speed */
+ if (opt_speed) {
+@@ -1070,6 +1058,7 @@
+ const char *opts, *spec, *node, *types;
+ char *user = 0;
+ int loop = 0;
++ unsigned int LoopMountAutomaticChmod = 0;
+ const char *loopdev = 0, *loopfile = 0;
+ struct stat statbuf;
+
+@@ -1116,7 +1105,7 @@
+ * stale assignments of files to loop devices. Nasty when used for
+ * encryption.
+ */
+- res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile, node);
++ res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile, node, &LoopMountAutomaticChmod);
+ if (res)
+ goto out;
+ }
+@@ -1139,7 +1128,16 @@
+ if (!fake) {
+ mnt5_res = guess_fstype_and_mount (spec, node, &types, flags & ~MS_NOSYS,
+ mount_opts, &special, &status);
+-
++ if(!mnt5_res && LoopMountAutomaticChmod && (getuid() == 0)) {
++ /*
++ * If loop was set up using random keys and new file system
++ * was created on the loop device, initial permissions for
++ * file system root directory need to be set here.
++ */
++ if(chmod(node, LoopMountAutomaticChmod)) {
++ error (_("Error: encrypted file system chmod() failed"));
++ }
++ }
+ if (special) {
+ block_signals (SIG_UNBLOCK);
+ res = status;
+@@ -1874,8 +1872,8 @@
+ case 'O': /* with -t: mount only if (not) opt */
+ test_opts = append_opt(test_opts, optarg, NULL);
+ break;
+- case 'p': /* fd on which to read passwd */
+- set_pfd(optarg);
++ case 'p': /* read passphrase from given fd */
++ passFDnumber = optarg;
+ break;
+ case 'r': /* mount readonly */
+ readonly = 1;
+diff -urN util-linux-ng-2.14/mount/rmd160.c util-linux-ng-2.14-AES/mount/rmd160.c
+--- util-linux-ng-2.14/mount/rmd160.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/rmd160.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,532 @@
++/* rmd160.c - RIPE-MD160
++ * Copyright (C) 1998 Free Software Foundation, Inc.
++ */
++
++/* This file was part of GnuPG. Modified for use within the Linux
++ * mount utility by Marc Mutz <Marc@Mutz.com>. None of this code is
++ * by myself. I just removed everything that you don't need when all
++ * you want to do is to use rmd160_hash_buffer().
++ * My comments are marked with (mm). */
++
++/* GnuPG 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.
++ *
++ * GnuPG 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 */
++
++#include <string.h> /* (mm) for memcpy */
++#include <endian.h> /* (mm) for BIG_ENDIAN and BYTE_ORDER */
++#include "rmd160.h"
++
++/* (mm) these are used by the original GnuPG file. In order to modify
++ * that file not too much, we keep the notations. maybe it would be
++ * better to include linux/types.h and typedef __u32 to u32 and __u8
++ * to byte? */
++typedef unsigned int u32; /* taken from e.g. util-linux's minix.h */
++typedef unsigned char byte;
++
++typedef struct {
++ u32 h0,h1,h2,h3,h4;
++ u32 nblocks;
++ byte buf[64];
++ int count;
++} RMD160_CONTEXT;
++
++/****************
++ * Rotate a 32 bit integer by n bytes
++ */
++#if defined(__GNUC__) && defined(__i386__)
++static inline u32
++rol( u32 x, int n)
++{
++ __asm__("roll %%cl,%0"
++ :"=r" (x)
++ :"0" (x),"c" (n));
++ return x;
++}
++#else
++ #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
++#endif
++
++/*********************************
++ * RIPEMD-160 is not patented, see (as of 25.10.97)
++ * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
++ * Note that the code uses Little Endian byteorder, which is good for
++ * 386 etc, but we must add some conversion when used on a big endian box.
++ *
++ *
++ * Pseudo-code for RIPEMD-160
++ *
++ * RIPEMD-160 is an iterative hash function that operates on 32-bit words.
++ * The round function takes as input a 5-word chaining variable and a 16-word
++ * message block and maps this to a new chaining variable. All operations are
++ * defined on 32-bit words. Padding is identical to that of MD4.
++ *
++ *
++ * RIPEMD-160: definitions
++ *
++ *
++ * nonlinear functions at bit level: exor, mux, -, mux, -
++ *
++ * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15)
++ * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31)
++ * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47)
++ * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63)
++ * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79)
++ *
++ *
++ * added constants (hexadecimal)
++ *
++ * K(j) = 0x00000000 (0 <= j <= 15)
++ * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2))
++ * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3))
++ * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5))
++ * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7))
++ * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2))
++ * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3))
++ * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5))
++ * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7))
++ * K'(j) = 0x00000000 (64 <= j <= 79)
++ *
++ *
++ * selection of message word
++ *
++ * r(j) = j (0 <= j <= 15)
++ * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
++ * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
++ * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
++ * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
++ * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
++ * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
++ * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
++ * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
++ * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
++ *
++ *
++ * amount for rotate left (rol)
++ *
++ * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
++ * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
++ * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
++ * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
++ * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
++ * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
++ * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
++ * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
++ * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
++ * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
++ *
++ *
++ * initial value (hexadecimal)
++ *
++ * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476;
++ * h4 = 0xC3D2E1F0;
++ *
++ *
++ * RIPEMD-160: pseudo-code
++ *
++ * It is assumed that the message after padding consists of t 16-word blocks
++ * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15.
++ * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left
++ * shift (rotate) over s positions.
++ *
++ *
++ * for i := 0 to t-1 {
++ * A := h0; B := h1; C := h2; D = h3; E = h4;
++ * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4;
++ * for j := 0 to 79 {
++ * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E;
++ * A := E; E := D; D := rol_10(C); C := B; B := T;
++ * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)]
++ [+] K'(j)) [+] E';
++ * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T;
++ * }
++ * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A';
++ * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T;
++ * }
++ */
++
++/* Some examples:
++ * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31
++ * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
++ * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
++ * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36
++ * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc
++ * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b
++ * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189
++ * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb
++ * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528
++ */
++
++
++static void
++rmd160_init( RMD160_CONTEXT *hd )
++{
++ hd->h0 = 0x67452301;
++ hd->h1 = 0xEFCDAB89;
++ hd->h2 = 0x98BADCFE;
++ hd->h3 = 0x10325476;
++ hd->h4 = 0xC3D2E1F0;
++ hd->nblocks = 0;
++ hd->count = 0;
++}
++
++
++
++/****************
++ * Transform the message X which consists of 16 32-bit-words
++ */
++static void
++transform( RMD160_CONTEXT *hd, byte *data )
++{
++ u32 a,b,c,d,e,aa,bb,cc,dd,ee,t;
++ #if BYTE_ORDER == BIG_ENDIAN
++ u32 x[16];
++ { int i;
++ byte *p2, *p1;
++ for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
++ p2[3] = *p1++;
++ p2[2] = *p1++;
++ p2[1] = *p1++;
++ p2[0] = *p1++;
++ }
++ }
++ #else
++ #if 0
++ u32 *x =(u32*)data;
++ #else
++ /* this version is better because it is always aligned;
++ * The performance penalty on a 586-100 is about 6% which
++ * is acceptable - because the data is more local it might
++ * also be possible that this is faster on some machines.
++ * This function (when compiled with -02 on gcc 2.7.2)
++ * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec;
++ * [measured with a 4MB data and "gpgm --print-md rmd160"] */
++ u32 x[16];
++ memcpy( x, data, 64 );
++ #endif
++ #endif
++
++
++#define K0 0x00000000
++#define K1 0x5A827999
++#define K2 0x6ED9EBA1
++#define K3 0x8F1BBCDC
++#define K4 0xA953FD4E
++#define KK0 0x50A28BE6
++#define KK1 0x5C4DD124
++#define KK2 0x6D703EF3
++#define KK3 0x7A6D76E9
++#define KK4 0x00000000
++#define F0(x,y,z) ( (x) ^ (y) ^ (z) )
++#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) )
++#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) )
++#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) )
++#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) )
++#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
++ a = rol(t,s) + e; \
++ c = rol(c,10); \
++ } while(0)
++
++ /* left lane */
++ a = hd->h0;
++ b = hd->h1;
++ c = hd->h2;
++ d = hd->h3;
++ e = hd->h4;
++ R( a, b, c, d, e, F0, K0, 0, 11 );
++ R( e, a, b, c, d, F0, K0, 1, 14 );
++ R( d, e, a, b, c, F0, K0, 2, 15 );
++ R( c, d, e, a, b, F0, K0, 3, 12 );
++ R( b, c, d, e, a, F0, K0, 4, 5 );
++ R( a, b, c, d, e, F0, K0, 5, 8 );
++ R( e, a, b, c, d, F0, K0, 6, 7 );
++ R( d, e, a, b, c, F0, K0, 7, 9 );
++ R( c, d, e, a, b, F0, K0, 8, 11 );
++ R( b, c, d, e, a, F0, K0, 9, 13 );
++ R( a, b, c, d, e, F0, K0, 10, 14 );
++ R( e, a, b, c, d, F0, K0, 11, 15 );
++ R( d, e, a, b, c, F0, K0, 12, 6 );
++ R( c, d, e, a, b, F0, K0, 13, 7 );
++ R( b, c, d, e, a, F0, K0, 14, 9 );
++ R( a, b, c, d, e, F0, K0, 15, 8 );
++ R( e, a, b, c, d, F1, K1, 7, 7 );
++ R( d, e, a, b, c, F1, K1, 4, 6 );
++ R( c, d, e, a, b, F1, K1, 13, 8 );
++ R( b, c, d, e, a, F1, K1, 1, 13 );
++ R( a, b, c, d, e, F1, K1, 10, 11 );
++ R( e, a, b, c, d, F1, K1, 6, 9 );
++ R( d, e, a, b, c, F1, K1, 15, 7 );
++ R( c, d, e, a, b, F1, K1, 3, 15 );
++ R( b, c, d, e, a, F1, K1, 12, 7 );
++ R( a, b, c, d, e, F1, K1, 0, 12 );
++ R( e, a, b, c, d, F1, K1, 9, 15 );
++ R( d, e, a, b, c, F1, K1, 5, 9 );
++ R( c, d, e, a, b, F1, K1, 2, 11 );
++ R( b, c, d, e, a, F1, K1, 14, 7 );
++ R( a, b, c, d, e, F1, K1, 11, 13 );
++ R( e, a, b, c, d, F1, K1, 8, 12 );
++ R( d, e, a, b, c, F2, K2, 3, 11 );
++ R( c, d, e, a, b, F2, K2, 10, 13 );
++ R( b, c, d, e, a, F2, K2, 14, 6 );
++ R( a, b, c, d, e, F2, K2, 4, 7 );
++ R( e, a, b, c, d, F2, K2, 9, 14 );
++ R( d, e, a, b, c, F2, K2, 15, 9 );
++ R( c, d, e, a, b, F2, K2, 8, 13 );
++ R( b, c, d, e, a, F2, K2, 1, 15 );
++ R( a, b, c, d, e, F2, K2, 2, 14 );
++ R( e, a, b, c, d, F2, K2, 7, 8 );
++ R( d, e, a, b, c, F2, K2, 0, 13 );
++ R( c, d, e, a, b, F2, K2, 6, 6 );
++ R( b, c, d, e, a, F2, K2, 13, 5 );
++ R( a, b, c, d, e, F2, K2, 11, 12 );
++ R( e, a, b, c, d, F2, K2, 5, 7 );
++ R( d, e, a, b, c, F2, K2, 12, 5 );
++ R( c, d, e, a, b, F3, K3, 1, 11 );
++ R( b, c, d, e, a, F3, K3, 9, 12 );
++ R( a, b, c, d, e, F3, K3, 11, 14 );
++ R( e, a, b, c, d, F3, K3, 10, 15 );
++ R( d, e, a, b, c, F3, K3, 0, 14 );
++ R( c, d, e, a, b, F3, K3, 8, 15 );
++ R( b, c, d, e, a, F3, K3, 12, 9 );
++ R( a, b, c, d, e, F3, K3, 4, 8 );
++ R( e, a, b, c, d, F3, K3, 13, 9 );
++ R( d, e, a, b, c, F3, K3, 3, 14 );
++ R( c, d, e, a, b, F3, K3, 7, 5 );
++ R( b, c, d, e, a, F3, K3, 15, 6 );
++ R( a, b, c, d, e, F3, K3, 14, 8 );
++ R( e, a, b, c, d, F3, K3, 5, 6 );
++ R( d, e, a, b, c, F3, K3, 6, 5 );
++ R( c, d, e, a, b, F3, K3, 2, 12 );
++ R( b, c, d, e, a, F4, K4, 4, 9 );
++ R( a, b, c, d, e, F4, K4, 0, 15 );
++ R( e, a, b, c, d, F4, K4, 5, 5 );
++ R( d, e, a, b, c, F4, K4, 9, 11 );
++ R( c, d, e, a, b, F4, K4, 7, 6 );
++ R( b, c, d, e, a, F4, K4, 12, 8 );
++ R( a, b, c, d, e, F4, K4, 2, 13 );
++ R( e, a, b, c, d, F4, K4, 10, 12 );
++ R( d, e, a, b, c, F4, K4, 14, 5 );
++ R( c, d, e, a, b, F4, K4, 1, 12 );
++ R( b, c, d, e, a, F4, K4, 3, 13 );
++ R( a, b, c, d, e, F4, K4, 8, 14 );
++ R( e, a, b, c, d, F4, K4, 11, 11 );
++ R( d, e, a, b, c, F4, K4, 6, 8 );
++ R( c, d, e, a, b, F4, K4, 15, 5 );
++ R( b, c, d, e, a, F4, K4, 13, 6 );
++
++ aa = a; bb = b; cc = c; dd = d; ee = e;
++
++ /* right lane */
++ a = hd->h0;
++ b = hd->h1;
++ c = hd->h2;
++ d = hd->h3;
++ e = hd->h4;
++ R( a, b, c, d, e, F4, KK0, 5, 8);
++ R( e, a, b, c, d, F4, KK0, 14, 9);
++ R( d, e, a, b, c, F4, KK0, 7, 9);
++ R( c, d, e, a, b, F4, KK0, 0, 11);
++ R( b, c, d, e, a, F4, KK0, 9, 13);
++ R( a, b, c, d, e, F4, KK0, 2, 15);
++ R( e, a, b, c, d, F4, KK0, 11, 15);
++ R( d, e, a, b, c, F4, KK0, 4, 5);
++ R( c, d, e, a, b, F4, KK0, 13, 7);
++ R( b, c, d, e, a, F4, KK0, 6, 7);
++ R( a, b, c, d, e, F4, KK0, 15, 8);
++ R( e, a, b, c, d, F4, KK0, 8, 11);
++ R( d, e, a, b, c, F4, KK0, 1, 14);
++ R( c, d, e, a, b, F4, KK0, 10, 14);
++ R( b, c, d, e, a, F4, KK0, 3, 12);
++ R( a, b, c, d, e, F4, KK0, 12, 6);
++ R( e, a, b, c, d, F3, KK1, 6, 9);
++ R( d, e, a, b, c, F3, KK1, 11, 13);
++ R( c, d, e, a, b, F3, KK1, 3, 15);
++ R( b, c, d, e, a, F3, KK1, 7, 7);
++ R( a, b, c, d, e, F3, KK1, 0, 12);
++ R( e, a, b, c, d, F3, KK1, 13, 8);
++ R( d, e, a, b, c, F3, KK1, 5, 9);
++ R( c, d, e, a, b, F3, KK1, 10, 11);
++ R( b, c, d, e, a, F3, KK1, 14, 7);
++ R( a, b, c, d, e, F3, KK1, 15, 7);
++ R( e, a, b, c, d, F3, KK1, 8, 12);
++ R( d, e, a, b, c, F3, KK1, 12, 7);
++ R( c, d, e, a, b, F3, KK1, 4, 6);
++ R( b, c, d, e, a, F3, KK1, 9, 15);
++ R( a, b, c, d, e, F3, KK1, 1, 13);
++ R( e, a, b, c, d, F3, KK1, 2, 11);
++ R( d, e, a, b, c, F2, KK2, 15, 9);
++ R( c, d, e, a, b, F2, KK2, 5, 7);
++ R( b, c, d, e, a, F2, KK2, 1, 15);
++ R( a, b, c, d, e, F2, KK2, 3, 11);
++ R( e, a, b, c, d, F2, KK2, 7, 8);
++ R( d, e, a, b, c, F2, KK2, 14, 6);
++ R( c, d, e, a, b, F2, KK2, 6, 6);
++ R( b, c, d, e, a, F2, KK2, 9, 14);
++ R( a, b, c, d, e, F2, KK2, 11, 12);
++ R( e, a, b, c, d, F2, KK2, 8, 13);
++ R( d, e, a, b, c, F2, KK2, 12, 5);
++ R( c, d, e, a, b, F2, KK2, 2, 14);
++ R( b, c, d, e, a, F2, KK2, 10, 13);
++ R( a, b, c, d, e, F2, KK2, 0, 13);
++ R( e, a, b, c, d, F2, KK2, 4, 7);
++ R( d, e, a, b, c, F2, KK2, 13, 5);
++ R( c, d, e, a, b, F1, KK3, 8, 15);
++ R( b, c, d, e, a, F1, KK3, 6, 5);
++ R( a, b, c, d, e, F1, KK3, 4, 8);
++ R( e, a, b, c, d, F1, KK3, 1, 11);
++ R( d, e, a, b, c, F1, KK3, 3, 14);
++ R( c, d, e, a, b, F1, KK3, 11, 14);
++ R( b, c, d, e, a, F1, KK3, 15, 6);
++ R( a, b, c, d, e, F1, KK3, 0, 14);
++ R( e, a, b, c, d, F1, KK3, 5, 6);
++ R( d, e, a, b, c, F1, KK3, 12, 9);
++ R( c, d, e, a, b, F1, KK3, 2, 12);
++ R( b, c, d, e, a, F1, KK3, 13, 9);
++ R( a, b, c, d, e, F1, KK3, 9, 12);
++ R( e, a, b, c, d, F1, KK3, 7, 5);
++ R( d, e, a, b, c, F1, KK3, 10, 15);
++ R( c, d, e, a, b, F1, KK3, 14, 8);
++ R( b, c, d, e, a, F0, KK4, 12, 8);
++ R( a, b, c, d, e, F0, KK4, 15, 5);
++ R( e, a, b, c, d, F0, KK4, 10, 12);
++ R( d, e, a, b, c, F0, KK4, 4, 9);
++ R( c, d, e, a, b, F0, KK4, 1, 12);
++ R( b, c, d, e, a, F0, KK4, 5, 5);
++ R( a, b, c, d, e, F0, KK4, 8, 14);
++ R( e, a, b, c, d, F0, KK4, 7, 6);
++ R( d, e, a, b, c, F0, KK4, 6, 8);
++ R( c, d, e, a, b, F0, KK4, 2, 13);
++ R( b, c, d, e, a, F0, KK4, 13, 6);
++ R( a, b, c, d, e, F0, KK4, 14, 5);
++ R( e, a, b, c, d, F0, KK4, 0, 15);
++ R( d, e, a, b, c, F0, KK4, 3, 13);
++ R( c, d, e, a, b, F0, KK4, 9, 11);
++ R( b, c, d, e, a, F0, KK4, 11, 11);
++
++
++ t = hd->h1 + d + cc;
++ hd->h1 = hd->h2 + e + dd;
++ hd->h2 = hd->h3 + a + ee;
++ hd->h3 = hd->h4 + b + aa;
++ hd->h4 = hd->h0 + c + bb;
++ hd->h0 = t;
++}
++
++
++/* Update the message digest with the contents
++ * of INBUF with length INLEN.
++ */
++static void
++rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen)
++{
++ if( hd->count == 64 ) { /* flush the buffer */
++ transform( hd, hd->buf );
++ hd->count = 0;
++ hd->nblocks++;
++ }
++ if( !inbuf )
++ return;
++ if( hd->count ) {
++ for( ; inlen && hd->count < 64; inlen-- )
++ hd->buf[hd->count++] = *inbuf++;
++ rmd160_write( hd, NULL, 0 );
++ if( !inlen )
++ return;
++ }
++
++ while( inlen >= 64 ) {
++ transform( hd, inbuf );
++ hd->count = 0;
++ hd->nblocks++;
++ inlen -= 64;
++ inbuf += 64;
++ }
++ for( ; inlen && hd->count < 64; inlen-- )
++ hd->buf[hd->count++] = *inbuf++;
++}
++
++/* The routine terminates the computation
++ */
++
++static void
++rmd160_final( RMD160_CONTEXT *hd )
++{
++ u32 t, msb, lsb;
++ byte *p;
++
++ rmd160_write(hd, NULL, 0); /* flush */;
++
++ msb = 0;
++ t = hd->nblocks;
++ if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
++ msb++;
++ msb += t >> 26;
++ t = lsb;
++ if( (lsb = t + hd->count) < t ) /* add the count */
++ msb++;
++ t = lsb;
++ if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
++ msb++;
++ msb += t >> 29;
++
++ if( hd->count < 56 ) { /* enough room */
++ hd->buf[hd->count++] = 0x80; /* pad */
++ while( hd->count < 56 )
++ hd->buf[hd->count++] = 0; /* pad */
++ }
++ else { /* need one extra block */
++ hd->buf[hd->count++] = 0x80; /* pad character */
++ while( hd->count < 64 )
++ hd->buf[hd->count++] = 0;
++ rmd160_write(hd, NULL, 0); /* flush */;
++ memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
++ }
++ /* append the 64 bit count */
++ hd->buf[56] = lsb ;
++ hd->buf[57] = lsb >> 8;
++ hd->buf[58] = lsb >> 16;
++ hd->buf[59] = lsb >> 24;
++ hd->buf[60] = msb ;
++ hd->buf[61] = msb >> 8;
++ hd->buf[62] = msb >> 16;
++ hd->buf[63] = msb >> 24;
++ transform( hd, hd->buf );
++
++ p = hd->buf;
++ #if BYTE_ORDER == BIG_ENDIAN
++ #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \
++ *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0)
++ #else /* little endian */
++ #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
++ #endif
++ X(0);
++ X(1);
++ X(2);
++ X(3);
++ X(4);
++ #undef X
++}
++
++/****************
++ * Shortcut functions which puts the hash value of the supplied buffer
++ * into outbuf which must have a size of 20 bytes.
++ */
++void
++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
++{
++ RMD160_CONTEXT hd;
++
++ rmd160_init( &hd );
++ rmd160_write( &hd, (byte*)buffer, length );
++ rmd160_final( &hd );
++ memcpy( outbuf, hd.buf, 20 );
++}
+diff -urN util-linux-ng-2.14/mount/rmd160.h util-linux-ng-2.14-AES/mount/rmd160.h
+--- util-linux-ng-2.14/mount/rmd160.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/rmd160.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,9 @@
++#ifndef RMD160_H
++#define RMD160_H
++
++void
++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length );
++
++#endif /*RMD160_H*/
++
++
+diff -urN util-linux-ng-2.14/mount/sha512.c util-linux-ng-2.14-AES/mount/sha512.c
+--- util-linux-ng-2.14/mount/sha512.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/sha512.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,432 @@
++/*
++ * sha512.c
++ *
++ * Written by Jari Ruusu, April 16 2001
++ *
++ * Copyright 2001 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU Public License.
++ */
++
++#include <string.h>
++#include <sys/types.h>
++#include "sha512.h"
++
++/* Define one or more of these. If none is defined, you get all of them */
++#if !defined(SHA256_NEEDED)&&!defined(SHA512_NEEDED)&&!defined(SHA384_NEEDED)
++# define SHA256_NEEDED 1
++# define SHA512_NEEDED 1
++# define SHA384_NEEDED 1
++#endif
++
++#if defined(SHA256_NEEDED)
++static const u_int32_t sha256_hashInit[8] = {
++ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,
++ 0x1f83d9ab, 0x5be0cd19
++};
++static const u_int32_t sha256_K[64] = {
++ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
++ 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
++ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
++ 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
++ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
++ 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
++ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
++ 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
++ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
++ 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
++ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
++};
++#endif
++
++#if defined(SHA512_NEEDED)
++static const u_int64_t sha512_hashInit[8] = {
++ 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL,
++ 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
++ 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
++};
++#endif
++
++#if defined(SHA384_NEEDED)
++static const u_int64_t sha384_hashInit[8] = {
++ 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL,
++ 0x152fecd8f70e5939ULL, 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
++ 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL
++};
++#endif
++
++#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED)
++static const u_int64_t sha512_K[80] = {
++ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
++ 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
++ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
++ 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
++ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
++ 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
++ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
++ 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
++ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
++ 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
++ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
++ 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
++ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
++ 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
++ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
++ 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
++ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
++ 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
++ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
++ 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
++ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
++ 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
++ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
++ 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
++ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
++ 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
++ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
++};
++#endif
++
++#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
++#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
++#define R(x,y) ((y) >> (x))
++
++#if defined(SHA256_NEEDED)
++void sha256_init(sha256_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha256_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_bufCnt = 0;
++}
++
++#define S(x,y) (((y) >> (x)) | ((y) << (32 - (x))))
++#define uSig0(x) ((S(2,(x))) ^ (S(13,(x))) ^ (S(22,(x))))
++#define uSig1(x) ((S(6,(x))) ^ (S(11,(x))) ^ (S(25,(x))))
++#define lSig0(x) ((S(7,(x))) ^ (S(18,(x))) ^ (R(3,(x))))
++#define lSig1(x) ((S(17,(x))) ^ (S(19,(x))) ^ (R(10,(x))))
++
++static void sha256_transform(sha256_context *ctx, unsigned char *datap)
++{
++ register int j;
++ u_int32_t a, b, c, d, e, f, g, h;
++ u_int32_t T1, T2, W[64], Wm2, Wm15;
++
++ /* read the data, big endian byte order */
++ j = 0;
++ do {
++ W[j] = (((u_int32_t)(datap[0]))<<24) | (((u_int32_t)(datap[1]))<<16) |
++ (((u_int32_t)(datap[2]))<<8 ) | ((u_int32_t)(datap[3]));
++ datap += 4;
++ } while(++j < 16);
++
++ /* initialize variables a...h */
++ a = ctx->sha_H[0];
++ b = ctx->sha_H[1];
++ c = ctx->sha_H[2];
++ d = ctx->sha_H[3];
++ e = ctx->sha_H[4];
++ f = ctx->sha_H[5];
++ g = ctx->sha_H[6];
++ h = ctx->sha_H[7];
++
++ /* apply compression function */
++ j = 0;
++ do {
++ if(j >= 16) {
++ Wm2 = W[j - 2];
++ Wm15 = W[j - 15];
++ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16];
++ }
++ T1 = h + uSig1(e) + Ch(e,f,g) + sha256_K[j] + W[j];
++ T2 = uSig0(a) + Maj(a,b,c);
++ h = g; g = f; f = e;
++ e = d + T1;
++ d = c; c = b; b = a;
++ a = T1 + T2;
++ } while(++j < 64);
++
++ /* compute intermediate hash value */
++ ctx->sha_H[0] += a;
++ ctx->sha_H[1] += b;
++ ctx->sha_H[2] += c;
++ ctx->sha_H[3] += d;
++ ctx->sha_H[4] += e;
++ ctx->sha_H[5] += f;
++ ctx->sha_H[6] += g;
++ ctx->sha_H[7] += h;
++
++ ctx->sha_blocks++;
++}
++
++void sha256_write(sha256_context *ctx, unsigned char *datap, int length)
++{
++ while(length > 0) {
++ if(!ctx->sha_bufCnt) {
++ while(length >= sizeof(ctx->sha_out)) {
++ sha256_transform(ctx, datap);
++ datap += sizeof(ctx->sha_out);
++ length -= sizeof(ctx->sha_out);
++ }
++ if(!length) return;
++ }
++ ctx->sha_out[ctx->sha_bufCnt] = *datap++;
++ length--;
++ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) {
++ sha256_transform(ctx, &ctx->sha_out[0]);
++ ctx->sha_bufCnt = 0;
++ }
++ }
++}
++
++void sha256_final(sha256_context *ctx)
++{
++ register int j;
++ u_int64_t bitLength;
++ u_int32_t i;
++ unsigned char padByte, *datap;
++
++ bitLength = (ctx->sha_blocks << 9) | (ctx->sha_bufCnt << 3);
++ padByte = 0x80;
++ sha256_write(ctx, &padByte, 1);
++
++ /* pad extra space with zeroes */
++ padByte = 0;
++ while(ctx->sha_bufCnt != 56) {
++ sha256_write(ctx, &padByte, 1);
++ }
++
++ /* write bit length, big endian byte order */
++ ctx->sha_out[56] = bitLength >> 56;
++ ctx->sha_out[57] = bitLength >> 48;
++ ctx->sha_out[58] = bitLength >> 40;
++ ctx->sha_out[59] = bitLength >> 32;
++ ctx->sha_out[60] = bitLength >> 24;
++ ctx->sha_out[61] = bitLength >> 16;
++ ctx->sha_out[62] = bitLength >> 8;
++ ctx->sha_out[63] = bitLength;
++ sha256_transform(ctx, &ctx->sha_out[0]);
++
++ /* return results in ctx->sha_out[0...31] */
++ datap = &ctx->sha_out[0];
++ j = 0;
++ do {
++ i = ctx->sha_H[j];
++ datap[0] = i >> 24;
++ datap[1] = i >> 16;
++ datap[2] = i >> 8;
++ datap[3] = i;
++ datap += 4;
++ } while(++j < 8);
++
++ /* clear sensitive information */
++ memset(&ctx->sha_out[32], 0, sizeof(sha256_context) - 32);
++}
++
++void sha256_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha256_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 32) ole = 32;
++ sha256_init(&ctx);
++ sha256_write(&ctx, ib, ile);
++ sha256_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++
++#endif
++
++#if defined(SHA512_NEEDED)
++void sha512_init(sha512_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha512_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_blocksMSB = 0;
++ ctx->sha_bufCnt = 0;
++}
++#endif
++
++#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED)
++#undef S
++#undef uSig0
++#undef uSig1
++#undef lSig0
++#undef lSig1
++#define S(x,y) (((y) >> (x)) | ((y) << (64 - (x))))
++#define uSig0(x) ((S(28,(x))) ^ (S(34,(x))) ^ (S(39,(x))))
++#define uSig1(x) ((S(14,(x))) ^ (S(18,(x))) ^ (S(41,(x))))
++#define lSig0(x) ((S(1,(x))) ^ (S(8,(x))) ^ (R(7,(x))))
++#define lSig1(x) ((S(19,(x))) ^ (S(61,(x))) ^ (R(6,(x))))
++
++static void sha512_transform(sha512_context *ctx, unsigned char *datap)
++{
++ register int j;
++ u_int64_t a, b, c, d, e, f, g, h;
++ u_int64_t T1, T2, W[80], Wm2, Wm15;
++
++ /* read the data, big endian byte order */
++ j = 0;
++ do {
++ W[j] = (((u_int64_t)(datap[0]))<<56) | (((u_int64_t)(datap[1]))<<48) |
++ (((u_int64_t)(datap[2]))<<40) | (((u_int64_t)(datap[3]))<<32) |
++ (((u_int64_t)(datap[4]))<<24) | (((u_int64_t)(datap[5]))<<16) |
++ (((u_int64_t)(datap[6]))<<8 ) | ((u_int64_t)(datap[7]));
++ datap += 8;
++ } while(++j < 16);
++
++ /* initialize variables a...h */
++ a = ctx->sha_H[0];
++ b = ctx->sha_H[1];
++ c = ctx->sha_H[2];
++ d = ctx->sha_H[3];
++ e = ctx->sha_H[4];
++ f = ctx->sha_H[5];
++ g = ctx->sha_H[6];
++ h = ctx->sha_H[7];
++
++ /* apply compression function */
++ j = 0;
++ do {
++ if(j >= 16) {
++ Wm2 = W[j - 2];
++ Wm15 = W[j - 15];
++ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16];
++ }
++ T1 = h + uSig1(e) + Ch(e,f,g) + sha512_K[j] + W[j];
++ T2 = uSig0(a) + Maj(a,b,c);
++ h = g; g = f; f = e;
++ e = d + T1;
++ d = c; c = b; b = a;
++ a = T1 + T2;
++ } while(++j < 80);
++
++ /* compute intermediate hash value */
++ ctx->sha_H[0] += a;
++ ctx->sha_H[1] += b;
++ ctx->sha_H[2] += c;
++ ctx->sha_H[3] += d;
++ ctx->sha_H[4] += e;
++ ctx->sha_H[5] += f;
++ ctx->sha_H[6] += g;
++ ctx->sha_H[7] += h;
++
++ ctx->sha_blocks++;
++ if(!ctx->sha_blocks) ctx->sha_blocksMSB++;
++}
++
++void sha512_write(sha512_context *ctx, unsigned char *datap, int length)
++{
++ while(length > 0) {
++ if(!ctx->sha_bufCnt) {
++ while(length >= sizeof(ctx->sha_out)) {
++ sha512_transform(ctx, datap);
++ datap += sizeof(ctx->sha_out);
++ length -= sizeof(ctx->sha_out);
++ }
++ if(!length) return;
++ }
++ ctx->sha_out[ctx->sha_bufCnt] = *datap++;
++ length--;
++ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) {
++ sha512_transform(ctx, &ctx->sha_out[0]);
++ ctx->sha_bufCnt = 0;
++ }
++ }
++}
++
++void sha512_final(sha512_context *ctx)
++{
++ register int j;
++ u_int64_t bitLength, bitLengthMSB;
++ u_int64_t i;
++ unsigned char padByte, *datap;
++
++ bitLength = (ctx->sha_blocks << 10) | (ctx->sha_bufCnt << 3);
++ bitLengthMSB = (ctx->sha_blocksMSB << 10) | (ctx->sha_blocks >> 54);
++ padByte = 0x80;
++ sha512_write(ctx, &padByte, 1);
++
++ /* pad extra space with zeroes */
++ padByte = 0;
++ while(ctx->sha_bufCnt != 112) {
++ sha512_write(ctx, &padByte, 1);
++ }
++
++ /* write bit length, big endian byte order */
++ ctx->sha_out[112] = bitLengthMSB >> 56;
++ ctx->sha_out[113] = bitLengthMSB >> 48;
++ ctx->sha_out[114] = bitLengthMSB >> 40;
++ ctx->sha_out[115] = bitLengthMSB >> 32;
++ ctx->sha_out[116] = bitLengthMSB >> 24;
++ ctx->sha_out[117] = bitLengthMSB >> 16;
++ ctx->sha_out[118] = bitLengthMSB >> 8;
++ ctx->sha_out[119] = bitLengthMSB;
++ ctx->sha_out[120] = bitLength >> 56;
++ ctx->sha_out[121] = bitLength >> 48;
++ ctx->sha_out[122] = bitLength >> 40;
++ ctx->sha_out[123] = bitLength >> 32;
++ ctx->sha_out[124] = bitLength >> 24;
++ ctx->sha_out[125] = bitLength >> 16;
++ ctx->sha_out[126] = bitLength >> 8;
++ ctx->sha_out[127] = bitLength;
++ sha512_transform(ctx, &ctx->sha_out[0]);
++
++ /* return results in ctx->sha_out[0...63] */
++ datap = &ctx->sha_out[0];
++ j = 0;
++ do {
++ i = ctx->sha_H[j];
++ datap[0] = i >> 56;
++ datap[1] = i >> 48;
++ datap[2] = i >> 40;
++ datap[3] = i >> 32;
++ datap[4] = i >> 24;
++ datap[5] = i >> 16;
++ datap[6] = i >> 8;
++ datap[7] = i;
++ datap += 8;
++ } while(++j < 8);
++
++ /* clear sensitive information */
++ memset(&ctx->sha_out[64], 0, sizeof(sha512_context) - 64);
++}
++
++void sha512_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha512_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 64) ole = 64;
++ sha512_init(&ctx);
++ sha512_write(&ctx, ib, ile);
++ sha512_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++#endif
++
++#if defined(SHA384_NEEDED)
++void sha384_init(sha512_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha384_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_blocksMSB = 0;
++ ctx->sha_bufCnt = 0;
++}
++
++void sha384_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha512_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 48) ole = 48;
++ sha384_init(&ctx);
++ sha512_write(&ctx, ib, ile);
++ sha512_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++#endif
+diff -urN util-linux-ng-2.14/mount/sha512.h util-linux-ng-2.14-AES/mount/sha512.h
+--- util-linux-ng-2.14/mount/sha512.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/sha512.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,45 @@
++/*
++ * sha512.h
++ *
++ * Written by Jari Ruusu, April 16 2001
++ *
++ * Copyright 2001 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU Public License.
++ */
++
++#include <sys/types.h>
++
++typedef struct {
++ unsigned char sha_out[64]; /* results are here, bytes 0...31 */
++ u_int32_t sha_H[8];
++ u_int64_t sha_blocks;
++ int sha_bufCnt;
++} sha256_context;
++
++typedef struct {
++ unsigned char sha_out[128]; /* results are here, bytes 0...63 */
++ u_int64_t sha_H[8];
++ u_int64_t sha_blocks;
++ u_int64_t sha_blocksMSB;
++ int sha_bufCnt;
++} sha512_context;
++
++/* no sha384_context, use sha512_context */
++
++/* 256 bit hash, provides 128 bits of security against collision attacks */
++extern void sha256_init(sha256_context *);
++extern void sha256_write(sha256_context *, unsigned char *, int);
++extern void sha256_final(sha256_context *);
++extern void sha256_hash_buffer(unsigned char *, int, unsigned char *, int);
++
++/* 512 bit hash, provides 256 bits of security against collision attacks */
++extern void sha512_init(sha512_context *);
++extern void sha512_write(sha512_context *, unsigned char *, int);
++extern void sha512_final(sha512_context *);
++extern void sha512_hash_buffer(unsigned char *, int, unsigned char *, int);
++
++/* 384 bit hash, provides 192 bits of security against collision attacks */
++extern void sha384_init(sha512_context *);
++/* no sha384_write(), use sha512_write() */
++/* no sha384_final(), use sha512_final(), result in ctx->sha_out[0...47] */
++extern void sha384_hash_buffer(unsigned char *, int, unsigned char *, int);
+diff -urN util-linux-ng-2.14/mount/swapon.8 util-linux-ng-2.14-AES/mount/swapon.8
+--- util-linux-ng-2.14/mount/swapon.8 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/swapon.8 2008-06-24 16:55:13.000000000 +0300
+@@ -136,6 +136,22 @@
+ .I /proc/swaps
+ or
+ .IR /etc/fstab ).
++.PP
++If
++.I loop=/dev/loop?
++and
++.I encryption=AES128
++options are present in
++.I /etc/fstab
++then
++.BR "swapon -a"
++will set up loop devices using random keys, run
++.BR "mkswap"
++on them, and enable encrypted swap on specified loop devices. Encrypted loop
++devices are set up with page size offset so that unencrypted swap signatures
++on first page of swap devices are not touched.
++.BR "swapoff -a"
++will tear down such loop devices.
+ .SH NOTE
+ You should not use
+ .B swapon
+diff -urN util-linux-ng-2.14/mount/swapon.c util-linux-ng-2.14-AES/mount/swapon.c
+--- util-linux-ng-2.14/mount/swapon.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/swapon.c 2008-06-24 16:55:13.000000000 +0300
+@@ -1,5 +1,18 @@
+ /*
+ * A swapon(8)/swapoff(8) for Linux 0.99.
++ * swapon.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp
++ *
++ * 1997-02-xx <Vincent.Renardias@waw.com>
++ * - added '-s' (summary option)
++ * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
++ * - added Native Language Support
++ * 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * - fixed strerr(errno) in gettext calls
++ * 2001-03-22 Erik Troan <ewt@redhat.com>
++ * - added -e option for -a
++ * - -a shouldn't try to add swaps that are already enabled
++ * 2002-04-14 Jari Ruusu
++ * - added encrypted swap support
+ */
+ #include <ctype.h>
+ #include <stdlib.h>
+@@ -9,6 +22,9 @@
+ #include <mntent.h>
+ #include <errno.h>
+ #include <sys/stat.h>
++#include <sys/ioctl.h>
++#include <sys/utsname.h>
++#include <sys/time.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+@@ -20,6 +36,9 @@
+ #include "realpath.h"
+ #include "pathnames.h"
+ #include "sundries.h"
++#include "loop.h"
++#include "xstrncpy.h"
++#include "sha512.h"
+
+ #define PATH_MKSWAP "/sbin/mkswap"
+
+@@ -381,6 +400,262 @@
+ }
+
+ static int
++prepare_encrypted_swap(const char *partition, char *loop, char *encryption)
++{
++ int x, y, fd, ffd;
++ int page_size;
++ sha512_context s;
++ unsigned char b[4096], multiKeyBits[65][32];
++ char *a[10], *apiName;
++ struct loop_info64 loopinfo;
++ FILE *f;
++
++ /*
++ * Some sanity checks
++ */
++ if(strlen(partition) < 1) {
++ fprintf(stderr, _("swapon: invalid swap device name\n"));
++ return 0;
++ }
++ if(strlen(loop) < 1) {
++ fprintf(stderr, _("swapon: invalid loop device name\n"));
++ return 0;
++ }
++ if(strlen(encryption) < 1) {
++ fprintf(stderr, _("swapon: invalid encryption type\n"));
++ return 0;
++ }
++
++ /*
++ * Abort if loop device does not exist or is already in use
++ */
++ if((fd = open(loop, O_RDWR)) == -1) {
++ fprintf(stderr, _("swapon: unable to open loop device %s\n"), loop);
++ return 0;
++ }
++ if(is_unused_loop_device(fd) == 0) {
++ fprintf(stderr, _("swapon: loop device %s already in use\n"), loop);
++ goto errout0;
++ }
++
++ /*
++ * Compute SHA-512 over first 40 KB of old swap data. This data
++ * is mostly unknown data encrypted using unknown key. SHA-512 hash
++ * output is then used as entropy for new swap encryption key.
++ */
++ if(!(f = fopen(partition, "r+"))) {
++ fprintf(stderr, _("swapon: unable to open swap device %s\n"), partition);
++ goto errout0;
++ }
++ page_size = getpagesize();
++ fseek(f, (long)page_size, SEEK_SET);
++ sha512_init(&s);
++ for(x = 0; x < 10; x++) {
++ if(fread(&b[0], sizeof(b), 1, f) != 1) break;
++ sha512_write(&s, &b[0], sizeof(b));
++ }
++ sha512_final(&s);
++
++ /*
++ * Overwrite 40 KB of old swap data 20 times so that recovering
++ * SHA-512 output beyond this point is difficult and expensive.
++ */
++ for(y = 0; y < 20; y++) {
++ int z;
++ struct {
++ struct timeval tv;
++ unsigned char h[64];
++ int x,y,z;
++ } j;
++ if(fseek(f, (long)page_size, SEEK_SET)) break;
++ memcpy(&j.h[0], &s.sha_out[0], 64);
++ gettimeofday(&j.tv, NULL);
++ j.y = y;
++ for(x = 0; x < 10; x++) {
++ j.x = x;
++ for(z = 0; z < sizeof(b); z += 64) {
++ j.z = z;
++ sha512_hash_buffer((unsigned char *)&j, sizeof(j), &b[z], 64);
++ }
++ if(fwrite(&b[0], sizeof(b), 1, f) != 1) break;
++ }
++ memset(&j, 0, sizeof(j));
++ if(fflush(f)) break;
++ if(fsync(fileno(f))) break;
++ }
++ fclose(f);
++
++ /*
++ * Use all 512 bits of hash output
++ */
++ memcpy(&b[0], &s.sha_out[0], 64);
++ memset(&s, 0, sizeof(s));
++
++ /*
++ * Read 32 bytes of random entropy from kernel's random
++ * number generator. This code may be executed early on startup
++ * scripts and amount of random entropy may be non-existent.
++ * SHA-512 of old swap data is used as workaround for missing
++ * entropy in kernel's random number generator.
++ */
++ if(!(f = fopen("/dev/urandom", "r"))) {
++ fprintf(stderr, _("swapon: unable to open /dev/urandom\n"));
++ goto errout0;
++ }
++ fread(&b[64], 32, 1, f);
++
++ /*
++ * Set up struct loop_info64
++ */
++ if((ffd = open(partition, O_RDWR)) < 0) {
++ fprintf(stderr, _("swapon: unable to open swap device %s\n"), partition);
++ goto errout1;
++ }
++ memset(&loopinfo, 0, sizeof(loopinfo));
++ xstrncpy((char *)loopinfo.lo_file_name, partition, LO_NAME_SIZE);
++ loopinfo.lo_encrypt_type = loop_crypt_type(encryption, &loopinfo.lo_encrypt_key_size, &apiName);
++ if(loopinfo.lo_encrypt_type <= 1) {
++ fprintf(stderr, _("swapon: unsupported swap encryption type %s\n"), encryption);
++errout2:
++ close(ffd);
++errout1:
++ fclose(f);
++errout0:
++ close(fd);
++ memset(&loopinfo.lo_encrypt_key[0], 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ return 0;
++ }
++ loopinfo.lo_offset = page_size;
++ /* single-key hash */
++ sha512_hash_buffer(&b[0], 64+32, &loopinfo.lo_encrypt_key[0], sizeof(loopinfo.lo_encrypt_key));
++ /* multi-key hash */
++ x = 0;
++ while(x < 65) {
++ fread(&b[64+32], 16, 1, f);
++ sha512_hash_buffer(&b[0], 64+32+16, &multiKeyBits[x][0], 32);
++ x++;
++ }
++
++ /*
++ * Try to set up single-key loop
++ */
++ if(ioctl(fd, LOOP_SET_FD, ffd) < 0) {
++ fprintf(stderr, _("swapon: LOOP_SET_FD failed\n"));
++ goto errout2;
++ }
++ if ((loopinfo.lo_encrypt_type == 18) || (loop_set_status64_ioctl(fd, &loopinfo) < 0)) {
++ if(try_cryptoapi_loop_interface(fd, &loopinfo, apiName) < 0) {
++ fprintf(stderr, _("swapon: LOOP_SET_STATUS failed\n"));
++ ioctl(fd, LOOP_CLR_FD, 0);
++ goto errout2;
++ }
++ }
++
++ /*
++ * Try to put loop to multi-key v3 or v2 mode.
++ * If this fails, then let it operate in single-key mode.
++ */
++ if(ioctl(fd, LOOP_MULTI_KEY_SETUP_V3, &multiKeyBits[0][0]) < 0) {
++ ioctl(fd, LOOP_MULTI_KEY_SETUP, &multiKeyBits[0][0]);
++ }
++
++ /*
++ * Loop is now set up. Clean up the keys.
++ */
++ memset(&loopinfo.lo_encrypt_key[0], 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close(ffd);
++ fclose(f);
++ close(fd);
++
++ /*
++ * Write 40 KB of zeroes to loop device. That same data is written
++ * to underlying partition in encrypted form. This is done to guarantee
++ * that next time encrypted swap is initialized, the SHA-512 hash will
++ * be different. And, if encrypted swap data writes over this data, that's
++ * even better.
++ */
++ if(!(f = fopen(loop, "r+"))) {
++ fprintf(stderr, _("swapon: unable to open loop device %s\n"), loop);
++ return 0;
++ }
++ memset(&b[0], 0, sizeof(b));
++ for(x = 0; x < 10; x++) {
++ if(fwrite(&b[0], sizeof(b), 1, f) != 1) break;
++ }
++ fflush(f);
++ fsync(fileno(f));
++ fclose(f);
++ sync();
++
++ /*
++ * Run mkswap on loop device so that kernel understands it as swap.
++ * Redirect stderr to /dev/null and ignore exit value.
++ */
++ if(!(x = fork())) {
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 2);
++ close(x);
++ }
++ a[0] = "mkswap";
++ a[1] = loop;
++ a[2] = 0;
++ execvp(a[0], &a[0]);
++ execv("/sbin/mkswap", &a[0]);
++ /* error to stdout, stderr is directed to /dev/null */
++ printf(_("swapon: unable to execute mkswap\n"));
++ exit(1);
++ }
++ if(x == -1) {
++ fprintf(stderr, _("swapon: fork failed\n"));
++ return 0;
++ }
++ waitpid(x, &y, 0);
++ sync();
++
++ return 1;
++}
++
++static void
++shutdown_encrypted_swap(char *loop)
++{
++ int fd;
++ struct stat statbuf;
++ struct loop_info64 loopinfo;
++ unsigned char b[32];
++ FILE *f;
++
++ if(stat(loop, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ if((fd = open(loop, O_RDWR)) >= 0) {
++ if(!loop_get_status64_ioctl(fd, &loopinfo)) {
++ /*
++ * Read 32 bytes of random data from kernel's random
++ * number generator and write that to loop device.
++ * This preserves some of kernel's random entropy
++ * to next activation of encrypted swap on this
++ * partition.
++ */
++ if((f = fopen("/dev/urandom", "r")) != NULL) {
++ fread(&b[0], 32, 1, f);
++ fclose(f);
++ write(fd, &b[0], 32);
++ fsync(fd);
++ }
++ }
++ close(fd);
++ }
++ sync();
++ if((fd = open(loop, O_RDONLY)) >= 0) {
++ if(!loop_get_status64_ioctl(fd, &loopinfo)) {
++ ioctl(fd, LOOP_CLR_FD, 0);
++ }
++ close(fd);
++ }
++ }
++}
++
++static int
+ swapon_all(void) {
+ FILE *fp;
+ struct mntent *fstab;
+@@ -400,6 +675,8 @@
+ const char *special;
+ int skip = 0;
+ int pri = priority;
++ char *opt, *opts;
++ char *loop = NULL, *encryption = NULL;
+
+ if (!streq(fstab->mnt_type, MNTTYPE_SWAP))
+ continue;
+@@ -408,23 +685,39 @@
+ if (!special)
+ continue;
+
+- if (!is_in_proc_swaps(special) &&
+- (!ifexists || !access(special, R_OK))) {
+- /* parse mount options; */
+- char *opt, *opts = strdup(fstab->mnt_opts);
+-
+- for (opt = strtok(opts, ","); opt != NULL;
+- opt = strtok(NULL, ",")) {
+- if (strncmp(opt, "pri=", 4) == 0)
+- pri = atoi(opt+4);
+- if (strcmp(opt, "noauto") == 0)
+- skip = 1;
++ /* parse mount options; */
++ opts = strdup(fstab->mnt_opts);
++ if (!opts) {
++ fprintf(stderr, "not enough memory");
++ exit(1);
++ }
++ for (opt = strtok(opts, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ if (strncmp(opt, "pri=", 4) == 0)
++ pri = atoi(opt+4);
++ if (strcmp(opt, "noauto") == 0)
++ skip = 1;
++ if (strncmp(opt, "loop=", 5) == 0)
++ loop = opt + 5;
++ if (strncmp(opt, "encryption=", 11) == 0)
++ encryption = opt + 11;
++ }
++ if(skip)
++ continue;
++ if (loop && encryption) {
++ if(!is_in_proc_swaps(loop) && (!ifexists || !access(special, R_OK))) {
++ if (!prepare_encrypted_swap(special, loop, encryption)) {
++ status |= -1;
++ continue;
++ }
++ status |= do_swapon(loop, pri, CANONIC);
+ }
+- if (!skip)
+- status |= do_swapon(special, pri, CANONIC);
++ continue;
++ }
++ if (!is_in_proc_swaps(special) && (!ifexists || !access(special, R_OK))) {
++ status |= do_swapon(special, pri, CANONIC);
+ }
+ }
+- fclose(fp);
++ endmntent(fp);
+
+ return status;
+ }
+@@ -587,19 +880,51 @@
+ exit(2);
+ }
+ while ((fstab = getmntent(fp)) != NULL) {
++ const char *orig_special = fstab->mnt_fsname;
+ const char *special;
++ int skip = 0;
++ char *opt, *opts;
++ char *loop = NULL, *encryption = NULL;
+
+ if (!streq(fstab->mnt_type, MNTTYPE_SWAP))
+ continue;
+
+- special = fsprobe_get_devname(fstab->mnt_fsname);
++ special = fsprobe_get_devname(orig_special);
+ if (!special)
+ continue;
+
+- if (!is_in_proc_swaps(special))
++ /* parse mount options; */
++ opts = strdup(fstab->mnt_opts);
++ if (!opts) {
++ fprintf(stderr, "not enough memory");
++ exit(1);
++ }
++ for (opt = strtok(opts, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ if (strcmp(opt, "noauto") == 0)
++ skip = 1;
++ if (strncmp(opt, "loop=", 5) == 0)
++ loop = opt + 5;
++ if (strncmp(opt, "encryption=", 11) == 0)
++ encryption = opt + 11;
++ }
++ if (loop && encryption) {
++ if (!is_in_proc_swaps(loop)) {
++ if(skip)
++ continue;
++ do_swapoff(loop, QUIET, CANONIC);
++ }
++ shutdown_encrypted_swap(loop);
++ continue;
++ }
++ if(skip)
++ continue;
++ if (!is_in_proc_swaps(special)) {
+ do_swapoff(special, QUIET, CANONIC);
++ }
++
++
+ }
+- fclose(fp);
++ endmntent(fp);
+ }
+
+ return status;
diff --git a/abs/core-testing/v4l-dvb/PKGBUILD b/abs/core-testing/v4l-dvb/PKGBUILD
new file mode 100644
index 0000000..8db31a2
--- /dev/null
+++ b/abs/core-testing/v4l-dvb/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=v4l-dvb
+_kernver=2.6.26-ARCH
+pkgver=1
+pkgrel=1
+pkgdesc="V4L-DVB drivers from mercurial"
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://linuxtv.org/"
+depends=('kernel26')
+makedepends=(kernel-headers)
+install=v4l-dvb.install
+source=(http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz)
+
+build() {
+ cd $startdir/src/v4l-dvb*/
+ 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*
+}
diff --git a/abs/core-testing/v4l-dvb/v4l-dvb.install b/abs/core-testing/v4l-dvb/v4l-dvb.install
new file mode 100644
index 0000000..c87bb82
--- /dev/null
+++ b/abs/core-testing/v4l-dvb/v4l-dvb.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ 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.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/vbetool/PKGBUILD b/abs/core-testing/vbetool/PKGBUILD
new file mode 100644
index 0000000..9b279e6
--- /dev/null
+++ b/abs/core-testing/vbetool/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <james@archlinux.org>
+# Contributor: Christian Storm <Christian.Storm@gmx.DE>
+pkgname=vbetool
+pkgver=1.0
+pkgrel=2
+pkgdesc="vbetool uses lrmi in order to run code from the video BIOS"
+arch=('i686' 'x86_64')
+url="http://www.srcf.ucam.org/~mjg59/vbetool/"
+license=('GPL2')
+depends=('zlib' 'libx86')
+makedepends=('pciutils')
+source=(http://www.codon.org.uk/~mjg59/vbetool/download/vbetool-${pkgver}.tar.gz)
+
+
+build() {
+ cd $startdir/src/vbetool-$pkgver
+ if [ "${CARCH}" = "x86_64" ]; then
+ ./configure --prefix=/usr --without-x86emu
+ else
+ ./configure --prefix=/usr
+ fi
+ make LIBS=-lpci || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
+
+
+
+
+
+md5sums=('e57b5475b8200e3c44df7f53f0fbdc72')
diff --git a/abs/core-testing/vi/PKGBUILD b/abs/core-testing/vi/PKGBUILD
new file mode 100644
index 0000000..1165431
--- /dev/null
+++ b/abs/core-testing/vi/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 3026 2008-06-18 02:38:15Z eric $
+# Maintainer: tobias [ tobias at archlinux org ]
+
+pkgname=vi
+_srcver=7.1
+_patchlevel=330
+pkgver=${_srcver}.${_patchlevel}
+pkgrel=10
+pkgdesc="a highly configurable, improved version of the vi text editor (basic version)"
+arch=(i686 x86_64)
+license=('custom:vim')
+url="http://www.vim.org"
+groups=('base')
+depends=('glibc' 'ncurses' 'coreutils')
+makedepends=('wget' 'sed' 'grep')
+backup=(etc/virc)
+install=${pkgname}.install
+# we need the extra-stuff to get all patches applied smoothly
+source=(ftp://ftp.vim.org/pub/vim/unix/vim-${_srcver}.tar.bz2 \
+ ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-extra.tar.gz \
+ ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-lang.tar.gz \
+ fetch_patches.sh fetch_runtime.sh)
+md5sums=('44c6b4914f38d6f9aa959640b89da329' '605cc7ae31bcc9d7864bb0bb6025f55d' \
+ '144aa049ba70621acf4247f0459f3ee7' '0fbebfbf8464b1e65fb6a9ca4bddefe1' \
+ '92e3dc8844d446c1ecd28e7257a47cb7')
+
+build()
+{
+ # pull in patches from vim.org (or the src cache alternatively)
+ . ${startdir}/src/fetch_patches.sh
+ . ${startdir}/src/fetch_runtime.sh
+ get_patches || return 1
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ # set the virc different from vimrc
+ sed -i 's|^.*\(#define SYS_VIMRC_FILE.*"\) .*$|\1|' src/feature.h
+ sed -i 's|^.*\(#define VIMRC_FILE.*"\) .*$|\1|' src/feature.h
+ sed -i 's|^.*\(#define USR_VIMRC_FILE\t"\).*$|\1$HOME/.virc"|' src/feature.h
+ sed -i 's|/etc/vimrc|/etc/virc|' src/feature.h
+ sed -i 's|\.vimrc|.virc|' src/feature.h
+ # build party
+ ./configure --prefix=/usr --localstatedir=/var/lib/vim --mandir=/usr/share/man \
+ --with-compiledby=ArchLinux --with-features=normal \
+ --with-global-runtime=/usr/share/vim --with-vim-name=vi \
+ --disable-gpm --disable-acl --with-x=no --disable-gui --enable-multibyte
+ make || return 1
+ make VIMRCLOC=/etc DESTDIR=${startdir}/pkg VIMRTDIR= install
+ cd ${startdir}/pkg/usr/bin
+ rm -f vim rvim view rview
+ ln -s vi evi
+
+ _runtimedir="${startdir}/pkg/usr/share/vim/"
+ update_runtime
+ # kill vim and x specific stuff
+ sed -i '/vms/,+4 d;/Convenient command/,+3 d;/mouse work/,+2 d'\
+ ${startdir}/pkg/usr/share/vim/vimrc_example.vim
+ install -Dm644 ${startdir}/pkg/usr/share/vim/vimrc_example.vim \
+ ${startdir}/pkg/etc/virc
+ rm -f ${startdir}/pkg/usr/share/vim/gvimrc_example.vim
+ install -dm755 ${startdir}/pkg/usr/share/licenses/vim
+ cd ${startdir}/pkg/usr/share/licenses/vim
+ ln -s ../../vim/doc/uganda.txt license.txt
+}
diff --git a/abs/core-testing/vi/fetch_patches.sh b/abs/core-testing/vi/fetch_patches.sh
new file mode 100644
index 0000000..1f38e42
--- /dev/null
+++ b/abs/core-testing/vi/fetch_patches.sh
@@ -0,0 +1,63 @@
+# the external logic for pulling in patches
+
+get_patches() {
+ _patchdir=${startdir}/src/patches
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ if [ -d ${_patchdir} ]; then
+ rm -rf ${_patchdir}
+ echo -e "\tremove patches from old build"
+ fi
+ mkdir ${_patchdir} && cd ${_patchdir}
+ _rpath=ftp://ftp.vim.org/pub/vim/patches/${_srcver}
+
+ # change IFS to loop line-by-line
+ _OLDIFS=$IFS
+ IFS="
+"
+ echo -e "\tfetching checksumfile for patches"
+ wget ${_rpath}/MD5SUMS >/dev/null 2>&1
+
+ downloads=0
+ for _line in $(/bin/cat MD5SUMS); do
+ downloads=$((${downloads} + 1))
+ _md5=$(echo $_line | cut -d ' ' -f1)
+ _file=$(echo $_line | cut -d ' ' -f3)
+ if [ -f ${SRCDEST}/vim-${_srcver}/${_file} ]; then
+ echo -e "\thaving patch file:${_file}"
+ cp ${SRCDEST}/vim-${_srcver}/${_file} ./
+ else
+ echo -n -e "\t... fetching patch file: ${_file} ..."
+ wget ${_rpath}/${_file} >/dev/null 2>&1
+ if [ -w ${SRCDEST} ]; then
+ if [ ! -d ${SRCDEST}/vim-${_srcver} ]; then
+ mkdir -p ${SRCDEST}/vim-${_srcver}
+ fi
+ cp ${_file} ${SRCDEST}/vim-${_srcver}/
+ echo " done!"
+ fi
+ fi
+
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ echo ${_file} md5sums do not match
+ return 1
+ fi
+ done
+
+ ## TEMPFIX stupid fuckup upstream
+ mv ./7.1.126ne ./7.1.126
+ downloads=$((${downloads} - 1))
+ ########
+
+ if [ ${downloads} != ${_patchlevel} ]; then
+ echo -e "Number of patches does not match the patchlevel!\nEdit the PKGBUILD accordingly!"
+ return 1
+ fi
+ IFS=$_OLDIFS
+ rm MD5SUMS
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ for _patch in $(/bin/ls ${_patchdir}); do
+ patch -Np0 -i ${_patchdir}/${_patch} || return 1
+ done
+ rm -rf ${_patchdir}
+ return 0
+}
diff --git a/abs/core-testing/vi/fetch_runtime.sh b/abs/core-testing/vi/fetch_runtime.sh
new file mode 100644
index 0000000..f244ea5
--- /dev/null
+++ b/abs/core-testing/vi/fetch_runtime.sh
@@ -0,0 +1,117 @@
+# the purpose of this magic is to pull in the latest runtime files for vim
+# we start withe theruntime provoded by the tarballs and compare MD5s against
+# the latest runtime
+# if this fails we look in the local source cache if they have been fetched
+# for an earlier build and compare those MD5 files
+# if this fails, we fetch the stuff from online and store it in the local src
+# cache.
+# The local cache has to be set (makepkg.conf) AND it has to be writable
+
+update_runtime() {
+ _OLDDIR=$(pwd) #get absolute path
+ _errors=0
+ _ftp="ftp://ftp.vim.org/pub/vim/runtime"
+
+ # we're gonna be sneaky and grok the A-A-P recipe for the files we need
+ _recipe="getunix.aap"
+ _srccache="${SRCDEST}/vim-${_srcver}/"
+
+ echo "getting runtime recipe"
+ cd ${startdir}/src
+ [ -f "${_recipe}" ] && rm "${_recipe}"
+ wget "${_ftp}/${_recipe}" >/dev/null 2>&1
+
+ cd "${_runtimedir}"
+ _runtimedir=$(pwd) #get absolute path
+
+ # change IFS to loop line-by-line
+ _OLDIFS=$IFS
+ IFS="
+"
+ echo "begin fetching updated runtime files..."
+ for _file in $(grep "file = " "${startdir}/src/${_recipe}"); do
+ _file=$(echo ${_file} | sed "s|.*file = \(.*\)|\1|")
+ _md5=$(grep -A2 "file = ${_file} *$" "${startdir}/src/${_recipe}" | \
+ grep "get_md5" | \
+ sed 's|@if get_md5(file) != "\(.*\)":|\1|g')
+ _dir=$(dirname "${_file}")
+
+ mkdir -p "${_dir}"
+
+ echo -e "\t${_file}"
+ _havefile=0
+ # if we have the file and the MD5sum fails, we technically don't have the file
+ if [ -f ${_file} ]; then
+ # MD5 fails ? ... we don't have the file
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ rm ${_file}
+ else
+ _havefile=1
+ fi
+ fi
+ # look files that were not copied from the unzipped sources
+ _cachefile=${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")/runtime/${_file}
+ if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then
+ # MD5 fails ? ... we lookup if we downloaded another version earlier
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ _cachefile=${_srccache}/${_file}
+ if [ -f ${_cachefile} ]; then
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ rm ${_cachefile}
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ # look up the local $SRCDEST
+ _cachefile=${_srccache}/${_file}
+ if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then
+ # MD5 fails ? ... we don't have the file
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ rm ${_cachefile}
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ # so we finally have to fetch it and store it to $SRCDEST (cache)
+ if [ ${_havefile} -ne 1 ]; then
+ echo -n -e "\t ... fetching file ${_file} ..."
+ cd "${_dir}"
+ wget "${_ftp}/${_file}" >/dev/null 2>&1
+ cd "${_runtimedir}"
+ # store freshly downloaded file in SRCDEST
+ mkdir -p ${_srccache}/${_dir}
+ cp ${_file} ${_srccache}/${_dir}
+ echo -e " done!"
+ fi
+
+ # check the MD5 sum finally
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ echo "!!!! md5sum check for ${_file} failed !!!!"
+ errors=$((${_errors} + 1))
+ fi
+ done
+ IFS=${_OLDIFS}
+
+ echo "vim runtime got updated"
+
+ if [ ${_errors} -gt 0 ]; then
+ echo "${_errors} failed MD5 checks while updating runtime files -> build can't be completed"
+ return 1
+ else
+ echo -e "\tpatching filetype.vim for better handling of pacman related files ..."
+ sed -i "s/rpmsave/pacsave/;s/rpmnew/pacnew/;s/,\*\.ebuild/\0,PKGBUILD*,*.install/" filetype.vim
+ sed -i "/find the end/,+3{s/changelog_date_entry_search/changelog_date_end_entry_search/}" ftplugin/changelog.vim
+ fi
+ # make Aaron happy
+ wget http://www.vim.org/scripts/download_script.php\?src_id=7766 \
+ -O autoload/pythoncomplete.vim
+ cd "${_OLDDIR}"
+ return 0
+}
diff --git a/abs/core-testing/vi/vi.install b/abs/core-testing/vi/vi.install
new file mode 100644
index 0000000..ebb73c0
--- /dev/null
+++ b/abs/core-testing/vi/vi.install
@@ -0,0 +1,37 @@
+post_install() {
+ # if we have vim installed create view/rview symlinks to vim
+ if [ ! -f usr/bin/vim ] ; then
+ cd usr/bin
+ ln -s vi view
+ ln -s vi rview
+ cd ${OLDPWD}
+ echo "Create vi related symlinks..."
+ fi
+ echo -n "Updating vi help tags..."
+ usr/bin/vi --noplugins -u NONE -U NONE \
+ --cmd ":helptags usr/share/vim/doc" --cmd ":q" > /dev/null 2>&1
+ echo "done."
+}
+
+pre_remove() {
+ # if vi is a binary instead of a symlink we have an intact gvim installation
+ # with a different binary/symlink structure
+ # we recover what pacmans database knows about Vim
+ if [ ! -f usr/bin/vim ] ; then
+ rm -f usr/bin/view usr/bin/rview
+ echo "Remove vi related symlinks ..."
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_upgrade() {
+ pre_remove $2
+}
+
+
+op=$1
+shift
+[ "$(type -t "$op")" = "function" ] && $op "$@"
diff --git a/abs/core-testing/videoproto/PKGBUILD b/abs/core-testing/videoproto/PKGBUILD
new file mode 100644
index 0000000..711149d
--- /dev/null
+++ b/abs/core-testing/videoproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=videoproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Video extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('44292d74a9a3c94b1ecb9d77a0da83e8')
+sha1sums=('904eb59ae2451dea52370d927bf490b696f9033c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/wget/PKGBUILD b/abs/core-testing/wget/PKGBUILD
new file mode 100644
index 0000000..5a9e0cb
--- /dev/null
+++ b/abs/core-testing/wget/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4756 2008-07-09 20:00:54Z andyrtr $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=wget
+pkgver=1.11.4
+pkgrel=10
+pkgdesc="A network utility to retrieve files from the Web"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/wget/wget.html"
+license=('GPL3')
+groups=('base')
+depends=('glibc' 'openssl')
+backup=('etc/wgetrc')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('69e8a7296c0e12c53bd9ffd786462e87')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core-testing/which/PKGBUILD b/abs/core-testing/which/PKGBUILD
new file mode 100644
index 0000000..3bd0175
--- /dev/null
+++ b/abs/core-testing/which/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=which
+pkgver=2.19
+pkgrel=11
+pkgdesc="A utility to show the full path of commands"
+arch=(i686 x86_64)
+url="http://www.xs4all.nl/~carlo17/which"
+license=('GPL3')
+groups=('base')
+depends=('glibc')
+source=(http://www.xs4all.nl/~carlo17/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('bbd094cec2444cd78befbc0cf09deea4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core-testing/wlan-ng26-utils/PKGBUILD b/abs/core-testing/wlan-ng26-utils/PKGBUILD
new file mode 100644
index 0000000..e842c99
--- /dev/null
+++ b/abs/core-testing/wlan-ng26-utils/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7972 2008-08-05 11:03:19Z tpowa $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=wlan-ng26-utils
+pkgver=0.2.9
+pkgrel=1
+pkgdesc="Wireless Lan userspace tools."
+depends=('glibc' 'bash')
+makedepends=('kernel26')
+source=(ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-$pkgver.tar.bz2 \
+ wlan-ng.patch wlan kernel-2.6.26.patch)
+url="ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/"
+backup=(etc/wlan/wlan.conf)
+arch=('i686' 'x86_64')
+license=('MPL')
+
+build() {
+ cd $startdir/src/linux-wlan-ng-$pkgver
+ patch -Np0 -i ../kernel-2.6.26.patch || return 1
+ sed -i "s#TARGET_ROOT_ON_HOST=#TARGET_ROOT_ON_HOST=$startdir/pkg#;s#PRISM2_PLX=y#PRISM2_PLX=n#;s#PRISM2_PCI=y#PRISM2_PCI=n#" config.in
+ patch -p1 < ../wlan-ng.patch
+ make auto_config
+ make all || return 1
+ make install
+ mkdir -p $startdir/pkg/etc/rc.d
+ rm -r $startdir/pkg/{init.d,lib,etc/pcmcia}
+ install -m 755 $startdir/src/wlan $startdir/pkg/etc/rc.d/wlan
+}
+md5sums=('96130b36f9674521b08fb3e2a6ac0382'
+ '706464f9e6e127558aed25b9f454f905'
+ '1056365bdbe7102b1a668c84926ecb17'
+ '6ed5a5fefc2c149e0e0a98de211ba147')
diff --git a/abs/core-testing/wlan-ng26-utils/kernel-2.6.22-r1832.patch b/abs/core-testing/wlan-ng26-utils/kernel-2.6.22-r1832.patch
new file mode 100644
index 0000000..f1aa310
--- /dev/null
+++ b/abs/core-testing/wlan-ng26-utils/kernel-2.6.22-r1832.patch
@@ -0,0 +1,120 @@
+diff -uNr linux-wlan-ng-0.2.8/CHANGES linux-wlan-ng-svn-1832/CHANGES
+--- linux-wlan-ng-0.2.8/CHANGES 2007-05-04 13:29:27.000000000 +0100
++++ linux-wlan-ng-svn-1832/CHANGES 2007-06-27 11:28:14.000000000 +0100
+@@ -41,6 +41,8 @@
+ * Intersil Corporation as part of PRISM(R) chipset product development.
+ *
+ * --------------------------------------------------------------------
++ - Tweaks to support Fedora 7 (Dan Williams)
++ - Support 2.6.22 kernels
+ 0.2.8
+ - Fix up a pile of sparse warnings (Pavel Roskin)
+ - Support 2.6.20 kernels (Pavel Roskin)
+diff -uNr linux-wlan-ng-0.2.8/Configure linux-wlan-ng-svn-1832/Configure
+--- linux-wlan-ng-0.2.8/Configure 2007-05-07 23:00:22.000000000 +0100
++++ linux-wlan-ng-svn-1832/Configure 2007-06-27 11:28:14.000000000 +0100
+@@ -277,9 +277,9 @@
+ fi
+ write_bool KERN_2_6_17
+
+-if [ $VERSION_CODE -gt `version 2 6 21` ] ; then
++if [ $VERSION_CODE -gt `version 2 6 22` ] ; then
+ $ECHO "******* WARNING WARNING WARNING *******"
+- $ECHO "Kernels newer than 2.6.21.x are not supported."
++ $ECHO "Kernels newer than 2.6.22.x are not supported."
+ $ECHO "******* WARNING WARNING WARNING *******"
+ fi
+
+diff -uNr linux-wlan-ng-0.2.8/config.in linux-wlan-ng-svn-1832/config.in
+--- linux-wlan-ng-0.2.8/config.in 2007-02-09 21:51:58.000000000 +0000
++++ linux-wlan-ng-svn-1832/config.in 2007-06-27 11:28:14.000000000 +0100
+@@ -1,6 +1,6 @@
+ WLAN_VERSION=0
+ WLAN_PATCHLEVEL=2
+-WLAN_SUBLEVEL=8
++WLAN_SUBLEVEL=9
+ WLAN_EXTRAVERSION=
+ #LINUX_SRC=/usr/src/linux
+ PCMCIA_SRC=
+diff -uNr linux-wlan-ng-0.2.8/etc/udev/rules.d/40-prism2.rules linux-wlan-ng-svn-1832/etc/udev/rules.d/40-prism2.rules
+--- linux-wlan-ng-0.2.8/etc/udev/rules.d/40-prism2.rules 2006-06-26 16:03:27.000000000 +0100
++++ linux-wlan-ng-svn-1832/etc/udev/rules.d/40-prism2.rules 2007-06-27 11:28:14.000000000 +0100
+@@ -1 +1,2 @@
+-ACTION=="add",BUS=="usb",DRIVER=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
++#ACTION=="add",BUS=="usb",DRIVER=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
++KERNEL="wlan*",ACTION=="add",DRIVERS=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
+diff -uNr linux-wlan-ng-0.2.8/src/include/wlan/wlan_compat.h linux-wlan-ng-svn-1832/src/include/wlan/wlan_compat.h
+--- linux-wlan-ng-0.2.8/src/include/wlan/wlan_compat.h 2007-02-28 15:44:02.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/include/wlan/wlan_compat.h 2007-06-27 11:28:14.000000000 +0100
+@@ -479,6 +479,13 @@
+ #endif
+ #endif /* _LINUX_PROC_FS_H */
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
++#define skb_reset_mac_header(__a) (__a)->mac.raw = (__a)->data
++#define SKB_MAC_HEADER(__a) (__a)->mac.raw
++#else
++#define SKB_MAC_HEADER(__a) (__a)->mac_header
++#endif
++
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+ #ifndef INIT_TQUEUE
+ #define PREPARE_TQUEUE(_tq, _routine, _data) \
+diff -uNr linux-wlan-ng-0.2.8/src/p80211/p80211conv.c linux-wlan-ng-svn-1832/src/p80211/p80211conv.c
+--- linux-wlan-ng-0.2.8/src/p80211/p80211conv.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/p80211/p80211conv.c 2007-06-27 11:28:14.000000000 +0100
+@@ -498,7 +498,7 @@
+ }
+
+ skb->protocol = eth_type_trans(skb, netdev);
+- skb->mac.raw = (unsigned char *) e_hdr; /* new MAC header */
++ SKB_MAC_HEADER(skb) = (unsigned char *) e_hdr; /* new MAC header */
+
+ /* jkriegl: process signal and noise as set in hfa384x_int_rx() */
+ /* jkriegl: only process signal/noise if requested by iwspy */
+diff -uNr linux-wlan-ng-0.2.8/src/p80211/p80211netdev.c linux-wlan-ng-svn-1832/src/p80211/p80211netdev.c
+--- linux-wlan-ng-0.2.8/src/p80211/p80211netdev.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/p80211/p80211netdev.c 2007-06-27 11:28:14.000000000 +0100
+@@ -389,7 +389,8 @@
+
+ /* set up various data fields */
+ skb->dev = dev;
+- skb->mac.raw = skb->data ;
++ skb_reset_mac_header(skb);
++
+ skb->ip_summed = CHECKSUM_NONE;
+ skb->pkt_type = PACKET_OTHERHOST;
+ skb->protocol = htons(ETH_P_80211_RAW);
+@@ -929,7 +930,7 @@
+ dev->open = p80211knetdev_open;
+ dev->stop = p80211knetdev_stop;
+
+-#ifdef CONFIG_NET_WIRELESS
++#if defined(CONFIG_NET_WIRELESS) || defined(WIRELESS_EXT)
+ #if ((WIRELESS_EXT < 17) && (WIRELESS_EXT < 21))
+ dev->get_wireless_stats = p80211wext_get_wireless_stats;
+ #endif
+diff -uNr linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x.c linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x.c
+--- linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x.c 2007-06-27 11:28:14.000000000 +0100
+@@ -3645,7 +3645,7 @@
+ /* the prism2 cards don't return the FCS */
+ datap = skb_put(skb, WLAN_CRC_LEN);
+ memset (datap, 0xff, WLAN_CRC_LEN);
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+
+ /* Attach the rxmeta, set some stuff */
+ p80211skb_rxmeta_attach(wlandev, skb);
+diff -uNr linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x_usb.c linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x_usb.c
+--- linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x_usb.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x_usb.c 2007-06-27 11:28:14.000000000 +0100
+@@ -4255,7 +4255,7 @@
+ /* The prism2 series does not return the CRC */
+ memset(skb_put(skb, WLAN_CRC_LEN), 0xff, WLAN_CRC_LEN);
+
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+
+ /* Attach the rxmeta, set some stuff */
+ p80211skb_rxmeta_attach(wlandev, skb);
diff --git a/abs/core-testing/wlan-ng26-utils/kernel-2.6.26.patch b/abs/core-testing/wlan-ng26-utils/kernel-2.6.26.patch
new file mode 100644
index 0000000..ec306f0
--- /dev/null
+++ b/abs/core-testing/wlan-ng26-utils/kernel-2.6.26.patch
@@ -0,0 +1,14 @@
+Index: src/p80211/p80211netdev.c
+===================================================================
+--- src/p80211/p80211netdev.c (revision 1865)
++++ src/p80211/p80211netdev.c (working copy)
+@@ -947,7 +947,9 @@
+ #endif
+ #endif
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) )
++ dev_net_set(dev, &init_net);
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
+ dev->nd_net = &init_net;
+ #endif \ No newline at end of file
diff --git a/abs/core-testing/wlan-ng26-utils/wlan b/abs/core-testing/wlan-ng26-utils/wlan
new file mode 100644
index 0000000..6b3252d
--- /dev/null
+++ b/abs/core-testing/wlan-ng26-utils/wlan
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+if [ ! -f /etc/wlan/shared ] ; then
+ echo "/etc/wlan/shared not present"
+ exit 0
+fi
+
+. /etc/wlan/shared
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ # This will implicitly fire off wland via hotplug.
+ stat_busy "Starting WLAN Devices"
+ if ! $MODPROBE p80211; then
+ echo "Failed to load p80211.o."
+ exit 1
+ fi
+
+ # NOTE: We don't explicitly insmod the card driver here. The
+ # best thing to do is to specify an alias in /etc/modules.conf.
+
+ for DEVICE in $WLAN_DEVICES; do
+ $MODPROBE $DEVICE
+ # if we don't have hotplug.. do things the old-fashioned way.
+ if [ $HAS_HOTPLUG = 'n' ] ; then
+ wlan_bring_it_up $DEVICE
+ fi
+ done
+
+ # And hotplug will take care of the rest, namely device
+ # initialization and whatnot.
+
+ add_daemon wlan
+ stat_done
+
+ ;;
+
+ stop)
+ stat_busy "Shutting Down WLAN Devices"
+ # Do a reset on each device to make sure none of them are still
+ # trying to generate interrupts.
+ for DEVICE in $WLAN_DEVICES; do
+ wlan_disable $DEVICE
+ ifconfig $DEVICE down
+ $MODPROBE -r $DEVICE
+ done
+
+ # remove p80211, which will implictly kill wland.
+ $MODPROBE -r p80211
+
+ rm_daemon wlan
+ stat_done
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ EXITCODE=$?
+ ;;
+
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+
+esac
+exit 0
diff --git a/abs/core-testing/wlan-ng26-utils/wlan-ng.patch b/abs/core-testing/wlan-ng26-utils/wlan-ng.patch
new file mode 100644
index 0000000..9449975
--- /dev/null
+++ b/abs/core-testing/wlan-ng26-utils/wlan-ng.patch
@@ -0,0 +1,14 @@
+diff -ur linux-wlan-ng-0.2.1pre22/man/Makefile linux-wlan-ng-0.2.1pre22-new/man/Makefile
+--- linux-wlan-ng-0.2.1pre22/man/Makefile 2004-08-04 14:09:27.000000000 -0700
++++ linux-wlan-ng-0.2.1pre22-new/man/Makefile 2004-10-18 12:23:19.000000000 -0700
+@@ -48,8 +48,8 @@
+ @echo "Nothing to do..."
+
+ install:
+- mkdir -p $(TARGET_ROOT_ON_HOST)/usr/local/man/man1
+- cp *.1 $(TARGET_ROOT_ON_HOST)/usr/local/man/man1
++ mkdir -p $(TARGET_ROOT_ON_HOST)/usr/share/man/man1
++ cp *.1 $(TARGET_ROOT_ON_HOST)/usr/share/man/man1
+
+ clean:
+ rm -f core core.* *.o .*.o *.s *.a .depend tmp_make *~ tags
diff --git a/abs/core-testing/wlan-ng26/PKGBUILD b/abs/core-testing/wlan-ng26/PKGBUILD
new file mode 100644
index 0000000..c592386
--- /dev/null
+++ b/abs/core-testing/wlan-ng26/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7952 2008-08-05 10:33:48Z tpowa $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=wlan-ng26
+pkgver=0.2.9
+pkgrel=1
+_kernver=2.6.26-ARCH
+pkgdesc="Wireless Lan usb modules. For kernel26."
+arch=(i686 x86_64)
+license=('MPL')
+depends=('kernel26>=2.6.26-1' 'kernel26<2.6.27' 'wlan-ng26-utils')
+source=(ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-$pkgver.tar.bz2
+ kernel-2.6.26.patch)
+url="ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/"
+install=wlan-ng26.install
+options=(!makeflags)
+
+build() {
+ cd $startdir/src/linux-wlan-ng-$pkgver
+ patch -Np0 -i ../kernel-2.6.26.patch || return 1
+ # only built usb modules the rest is covered by hostap and orinoco driver, according to gentoo changelog
+ sed -i "s#PRISM2_PCMCIA=y#PRISM2_PCMCIA=n#;s#TARGET_ROOT_ON_HOST=#TARGET_ROOT_ON_HOST=$startdir/pkg#;s#PRISM2_PLX=y#PRISM2_PLX=n#;s#PRISM2_PCI=y#PRISM2_PCI=n#;s#PRISM2_USB=n#PRISM2_USB=y#;s%#LINUX_SRC=/usr/src/linux%LINUX_SRC=/lib/modules/${_kernver}/build%" config.in
+ make auto_config
+ make all || return 1
+ make install
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" $startdir/wlan-ng26.install
+ rm -r $startdir/pkg/{etc,sbin,usr,init.d}
+ # fix module path
+ mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless
+ mv $startdir/pkg/lib/modules/${_kernver}/linux-wlan-ng \
+ $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless
+}
+
+md5sums=('96130b36f9674521b08fb3e2a6ac0382'
+ '6ed5a5fefc2c149e0e0a98de211ba147')
diff --git a/abs/core-testing/wlan-ng26/kernel-2.6.26.patch b/abs/core-testing/wlan-ng26/kernel-2.6.26.patch
new file mode 100644
index 0000000..ec306f0
--- /dev/null
+++ b/abs/core-testing/wlan-ng26/kernel-2.6.26.patch
@@ -0,0 +1,14 @@
+Index: src/p80211/p80211netdev.c
+===================================================================
+--- src/p80211/p80211netdev.c (revision 1865)
++++ src/p80211/p80211netdev.c (working copy)
+@@ -947,7 +947,9 @@
+ #endif
+ #endif
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) )
++ dev_net_set(dev, &init_net);
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
+ dev->nd_net = &init_net;
+ #endif \ No newline at end of file
diff --git a/abs/core-testing/wlan-ng26/wlan-ng26.install b/abs/core-testing/wlan-ng26/wlan-ng26.install
new file mode 100644
index 0000000..fe7abaa
--- /dev/null
+++ b/abs/core-testing/wlan-ng26/wlan-ng26.install
@@ -0,0 +1,30 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/wpa_supplicant/PKGBUILD b/abs/core-testing/wpa_supplicant/PKGBUILD
new file mode 100644
index 0000000..2f022ce
--- /dev/null
+++ b/abs/core-testing/wpa_supplicant/PKGBUILD
@@ -0,0 +1,36 @@
+# Contributor: iztok pizorn <pizorn@gmail.com>
+# Contributor: William Rea <sillywilly@gmail.com>
+pkgname=wpa_supplicant
+pkgver=0.5.10
+_madwifi_ver=0.9.4
+pkgrel=10
+pkgdesc="A utility providing key negotiation for WPA wireless networks"
+arch=('i686' 'x86_64')
+makedepends=('kernel26>=2.6.24' 'kernel26<=2.6.26.3')
+depends=('openssl')
+license=('GPL')
+groups=('base')
+backup=('etc/wpa_supplicant.conf')
+url="http://hostap.epitest.fi/wpa_supplicant"
+source=(http://hostap.epitest.fi/releases/wpa_supplicant-$pkgver.tar.gz
+ config
+ http://downloads.sourceforge.net/sourceforge/madwifi/madwifi-${_madwifi_ver}.tar.gz)
+install='wpa_supplicant.install'
+md5sums=('9e7b99da67c47d81121368c6d580d069'
+ '87a7bb38e0b4820b29065a9b3e8f4e06'
+ '399d20de8d855a59f20058857c2178ad')
+
+build() {
+ cd ${startdir}/src/
+ mv madwifi-${_madwifi_ver} madwifi
+ cd $startdir/src/$pkgname-$pkgver
+ cp ../config ./.config
+ sed -i 's@/usr/local@$(PREFIX)@g' Makefile
+ sed -i 's@dynamic_eap_methods@@g' Makefile
+ make || return 1
+ make PREFIX=/usr DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 wpa_supplicant.conf $startdir/pkg/etc/wpa_supplicant.conf || return 1
+ install -d -m755 $startdir/pkg/usr/man/man{5,8} || return 1
+ install -m644 doc/docbook/wpa_supplicant.conf.5 $startdir/pkg/usr/man/man5 || return 1
+ install -m644 doc/docbook/{wpa_background,wpa_cli,wpa_passphrase,wpa_supplicant}.8 $startdir/pkg/usr/man/man8 || return 1
+}
diff --git a/abs/core-testing/wpa_supplicant/config b/abs/core-testing/wpa_supplicant/config
new file mode 100644
index 0000000..8841fe3
--- /dev/null
+++ b/abs/core-testing/wpa_supplicant/config
@@ -0,0 +1,308 @@
+# Example wpa_supplicant build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cases, these lines should use += in order not
+# to override previous values of the variables.
+
+
+# Uncomment following two lines and fix the paths if you have installed OpenSSL
+# or GnuTLS in non-default location
+#CFLAGS += -I/usr/local/openssl/include
+#LIBS += -L/usr/local/openssl/lib
+
+# Some Red Hat versions seem to include kerberos header files from OpenSSL, but
+# the kerberos files are not in the default include path. Following line can be
+# used to fix build issues on such systems (krb5.h not found).
+#CFLAGS += -I/usr/include/kerberos
+
+# Example configuration for various cross-compilation platforms
+
+#### sveasoft (e.g., for Linksys WRT54G) ######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
+#LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
+###############################################################################
+
+#### openwrt (e.g., for Linksys WRT54G) #######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS=-I../src/include -I../openssl-0.9.7d/include \
+# -I../WRT54GS/release/src/include
+#LIBS = -lssl
+###############################################################################
+
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for Agere driver
+#CONFIG_DRIVER_HERMES=y
+# Change include directories to match with the local setup
+#CFLAGS += -I../../hcf -I../../include -I../../include/hcf
+#CFLAGS += -I../../include/wireless
+
+# Driver interface for madwifi driver
+CONFIG_DRIVER_MADWIFI=y
+# Change include directories to match with the local setup
+CFLAGS += -I../madwifi
+
+# Driver interface for Prism54 driver
+# (Note: Prism54 is not yet supported, i.e., this will not work as-is and is
+# for developers only)
+CONFIG_DRIVER_PRISM54=y
+
+# Driver interface for ndiswrapper
+CONFIG_DRIVER_NDISWRAPPER=y
+
+# Driver interface for Atmel driver
+CONFIG_DRIVER_ATMEL=y
+
+# Driver interface for Broadcom driver
+#CONFIG_DRIVER_BROADCOM=y
+# Example path for wlioctl.h; change to match your configuration
+#CFLAGS += -I/opt/WRT54GS/release/src/include
+
+# Driver interface for Intel ipw2100/2200 driver
+CONFIG_DRIVER_IPW=y
+
+# Driver interface for generic Linux wireless extensions
+CONFIG_DRIVER_WEXT=y
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+
+# Driver interface for Windows NDIS
+#CONFIG_DRIVER_NDIS=y
+#CFLAGS += -I/usr/include/w32api/ddk
+#LIBS += -L/usr/local/lib
+# For native build using mingw
+#CONFIG_NATIVE_WINDOWS=y
+# Additional directories for cross-compilation on Linux host for mingw target
+#CFLAGS += -I/opt/mingw/mingw32/include/ddk
+#LIBS += -L/opt/mingw/mingw32/lib
+#CC=mingw32-gcc
+# By default, driver_ndis uses WinPcap for low-level operations. This can be
+# replaced with the following option which replaces WinPcap calls with NDISUIO.
+# However, this requires that WZC is disabled (net stop wzcsvc) before starting
+# wpa_supplicant.
+# CONFIG_USE_NDISUIO=y
+
+# Driver interface for development testing
+#CONFIG_DRIVER_TEST=y
+
+# Driver interface for wired Ethernet drivers
+CONFIG_DRIVER_WIRED=y
+
+# Enable IEEE 802.1X Supplicant (automatically included if any EAP method is
+# included)
+CONFIG_IEEE8021X_EAPOL=y
+
+# EAP-MD5
+CONFIG_EAP_MD5=y
+
+# EAP-MSCHAPv2
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-TLS
+CONFIG_EAP_TLS=y
+
+# EAL-PEAP
+CONFIG_EAP_PEAP=y
+
+# EAP-TTLS
+CONFIG_EAP_TTLS=y
+
+# EAP-GTC
+CONFIG_EAP_GTC=y
+
+# EAP-OTP
+CONFIG_EAP_OTP=y
+
+# EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)
+#CONFIG_EAP_SIM=y
+
+# EAP-PSK (experimental; this is _not_ needed for WPA-PSK)
+#CONFIG_EAP_PSK=y
+
+# EAP-PAX
+#CONFIG_EAP_PAX=y
+
+# LEAP
+CONFIG_EAP_LEAP=y
+
+# EAP-AKA (enable CONFIG_PCSC, if EAP-AKA is used)
+#CONFIG_EAP_AKA=y
+
+# EAP-SAKE
+#CONFIG_EAP_SAKE=y
+
+# EAP-GPSK
+#CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+#CONFIG_EAP_GPSK_SHA256=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# Smartcard support (i.e., private key on a smartcard), e.g., with openssl
+# engine.
+CONFIG_SMARTCARD=y
+
+# PC/SC interface for smartcards (USIM, GSM SIM)
+# Enable this if EAP-SIM or EAP-AKA is included
+#CONFIG_PCSC=y
+
+# Development testing
+#CONFIG_EAPOL_TEST=y
+
+# Replace native Linux implementation of packet sockets with libdnet/libpcap.
+# This will be automatically set for non-Linux OS.
+#CONFIG_DNET_PCAP=y
+
+# Select control interface backend for external programs, e.g, wpa_cli:
+# unix = UNIX domain sockets (default for Linux/*BSD)
+# udp = UDP sockets (default for Windows)
+# y = use default (backwards compatibility)
+# If this option is commented out, control interface is not included in the
+# build.
+CONFIG_CTRL_IFACE=y
+
+# Include support for GNU Readline and History Libraries in wpa_cli.
+# When building a wpa_cli binary for distribution, please note that these
+# libraries are licensed under GPL and as such, BSD license may not apply for
+# the resulting binary.
+#CONFIG_READLINE=y
+
+# Remove debugging code that is printing out debug message to stdout.
+# This can be used to reduce the size of the wpa_supplicant considerably
+# if debugging code is not needed. The size reduction can be around 35%
+# (e.g., 90 kB).
+#CONFIG_NO_STDOUT_DEBUG=y
+
+# Remove WPA support, e.g., for wired-only IEEE 802.1X supplicant, to save
+# 35-50 kB in code size.
+#CONFIG_NO_WPA=y
+
+# Remove WPA2 support. This allows WPA to be used, but removes WPA2 code to
+# save about 1 kB in code size when building only WPA-Personal (no EAP support)
+# or 6 kB if building for WPA-Enterprise.
+#CONFIG_NO_WPA2=y
+
+# Remove AES extra functions. This can be used to reduce code size by about
+# 1.5 kB by removing extra AES modes that are not needed for commonly used
+# client configurations (they are needed for some EAP types).
+#CONFIG_NO_AES_EXTRAS=y
+
+# Select configuration backend:
+# file = text file (e.g., wpa_supplicant.conf)
+# winreg = Windows registry (see win_example.reg for an example)
+CONFIG_BACKEND=file
+
+# Select program entry point implementation:
+# main = UNIX/POSIX like main() function (default)
+# main_winsvc = Windows service (read parameters from registry)
+# main_none = Very basic example (development use only)
+#CONFIG_MAIN=main
+
+# Select wrapper for operatins system and C library specific functions
+# unix = UNIX/POSIX like systems (default)
+# win32 = Windows systems
+# none = Empty template
+#CONFIG_OS=unix
+
+# Select event loop implementation
+# eloop = select() loop (default)
+# eloop_win = Windows events and WaitForMultipleObject() loop
+# eloop_none = Empty template
+#CONFIG_ELOOP=eloop
+
+# Select layer 2 packet implementation
+# linux = Linux packet socket (default)
+# pcap = libpcap/libdnet/WinPcap
+# freebsd = FreeBSD libpcap
+# winpcap = WinPcap with receive thread
+# ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)
+# none = Empty template
+#CONFIG_L2_PACKET=linux
+
+# IEEE 802.11i/IEEE 802.11e STAKey negotiation for direct link connection
+#CONFIG_STAKEY=y
+
+# Proposed replacement for STAKey negotiation: PeerKey handshake for
+# Station to Station Link
+CONFIG_PEERKEY=y
+
+# Select TLS implementation
+# openssl = OpenSSL (default)
+# gnutls = GnuTLS (needed for TLS/IA, see also CONFIG_GNUTLS_EXTRA)
+# internal = Internal TLSv1 implementation (experimental)
+# none = Empty template
+#CONFIG_TLS=openssl
+
+# Whether to enable TLS/IA support, which is required for EAP-TTLSv1.
+# You need CONFIG_TLS=gnutls for this to have any effect. Please note that
+# even though the core GnuTLS library is released under LGPL, this extra
+# library uses GPL and as such, the terms of GPL apply to the combination
+# of wpa_supplicant and GnuTLS if this option is enabled. BSD license may not
+# apply for distribution of the resulting binary.
+#CONFIG_GNUTLS_EXTRA=y
+
+# If CONFIG_TLS=internal is used, additional library and include paths are
+# needed for LibTomCrypt and TomsFastMath.
+#LTC_PATH=/usr/src/libtomcrypt-1.11
+#TFM_PATH=/usr/src/tomsfastmath-0.09
+#CFLAGS += -I$(LTC_PATH)/src/headers
+#LIBS += -L$(LTC_PATH) -L$(TFM_PATH)
+#LIBS_p += -L$(LTC_PATH) -L$(TFM_PATH)
+
+# Integrate ndis_events.exe functionality into wpa_supplicant.
+# This is only for Windows builds and requires WMI-related header files and
+# WbemUuid.Lib from Platform SDK even when building with MinGW.
+#CONFIG_NDIS_EVENTS_INTEGRATED=y
+#PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib"
+
+# Add support for DBus control interface
+#CONFIG_CTRL_IFACE_DBUS=y
+
+# Add support for loading EAP methods dynamically as shared libraries.
+# When this option is enabled, each EAP method can be either included
+# statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn).
+# Dynamic EAP methods are build as shared objects (eap_*.so) and they need to
+# be loaded in the beginning of the wpa_supplicant configuration file
+# (see load_dynamic_eap parameter in the example file) before being used in
+# the network blocks.
+#
+# Note that some shared parts of EAP methods are included in the main program
+# and in order to be able to use dynamic EAP methods using these parts, the
+# main program must have been build with the EAP method enabled (=y or =dyn).
+# This means that EAP-TLS/PEAP/TTLS/FAST cannot be added as dynamic libraries
+# unless at least one of them was included in the main build to force inclusion
+# of the shared code. Similarly, at least one of EAP-SIM/AKA must be included
+# in the main build to be able to load these methods dynamically.
+#
+# Please also note that using dynamic libraries will increase the total binary
+# size. Thus, it may not be the best option for targets that have limited
+# amount of memory/flash.
+CONFIG_DYNAMIC_EAP_METHODS=y
+
+# Include client MLME (management frame processing).
+# This can be used to move MLME processing of Devicescape IEEE 802.11 stack
+# into user space.
+#CONFIG_CLIENT_MLME=y
+# Currently, driver_devicescape.c build requires some additional parameters
+# to be able to include some of the kernel header files. Following lines can
+# be used to set these (WIRELESS_DEV must point to the root directory of the
+# wireless-dev.git tree).
+WIRELESS_DEV=/lib/modules/2.6.24-ARCH/build
+CFLAGS += -I$(WIRELESS_DEV)/net/mac80211
diff --git a/abs/core-testing/wpa_supplicant/wpa_supplicant.install b/abs/core-testing/wpa_supplicant/wpa_supplicant.install
new file mode 100644
index 0000000..0c31765
--- /dev/null
+++ b/abs/core-testing/wpa_supplicant/wpa_supplicant.install
@@ -0,0 +1,15 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo "==> For wpa_gui please install 'wpa_supplicant_gui'"
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/x264/PKGBUILD b/abs/core-testing/x264/PKGBUILD
new file mode 100644
index 0000000..fd30204
--- /dev/null
+++ b/abs/core-testing/x264/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 3616 2008-06-26 02:00:55Z paul $
+# Contributor: damir <damir@archlinux.org>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=x264
+pkgver=20080625
+pkgrel=1
+pkgdesc="free library for encoding H264/AVC video streams"
+arch=(i686 x86_64)
+url="http://www.videolan.org/developers/x264.html"
+license=('GPL')
+depends=('libx11')
+makedepends=('yasm')
+source=(ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-$pkgver-2245.tar.bz2)
+md5sums=('6b4da463cf4c800b69fbf8518d6461e5')
+
+build() {
+ cd "$srcdir/$pkgname-snapshot-$pkgver-2245" || return 1
+
+ ./configure \
+ --enable-pthread \
+ --enable-visualize \
+ --enable-shared \
+ --enable-pic || return 1
+
+ make || return 1
+
+ make DESTDIR="$pkgdir" \
+ bindir=/usr/bin \
+ libdir=/usr/lib \
+ includedir=/usr/include \
+ install || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/xbitmaps/PKGBUILD b/abs/core-testing/xbitmaps/PKGBUILD
new file mode 100644
index 0000000..dbf65d3
--- /dev/null
+++ b/abs/core-testing/xbitmaps/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xbitmaps
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org Bitmap files"
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig')
+_xorg=X11R7.0
+_relname=xbitmaps
+arch=('i686' 'x86_64')
+source=(${url}/releases/${_xorg}/src/everything/${_relname}-${_xorg}-${pkgver}.tar.bz2)
+md5sums=('22c6f4a17220cd6b41d9799905f8e357')
+
+build() {
+ cd ${startdir}/src/${_relname}-${_xorg}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/xcb-proto/PKGBUILD b/abs/core-testing/xcb-proto/PKGBUILD
new file mode 100644
index 0000000..b17aa2d
--- /dev/null
+++ b/abs/core-testing/xcb-proto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xcb-proto
+pkgver=1.1
+pkgrel=1
+pkgdesc="XML-XCB protocol descriptions"
+arch=(i686 x86_64)
+url="http://xcb.freedesktop.org/"
+license=('custom')
+source=(${url}/dist/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('dd34acc58c0a438e812f72a9afe7b2a0')
diff --git a/abs/core-testing/xcursor-themes/PKGBUILD b/abs/core-testing/xcursor-themes/PKGBUILD
new file mode 100644
index 0000000..6bc9ddc
--- /dev/null
+++ b/abs/core-testing/xcursor-themes/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xcursor-themes
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org Cursor themes"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig' 'xorg-apps')
+source=(${url}/releases/individual/data/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('014bad415e64c49994679cdb71a97e37')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/xextproto/PKGBUILD b/abs/core-testing/xextproto/PKGBUILD
new file mode 100644
index 0000000..3ec2c1b
--- /dev/null
+++ b/abs/core-testing/xextproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3231 2008-06-21 15:50:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xextproto
+pkgver=7.0.3
+pkgrel=1
+pkgdesc="X11 various extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3a2e0252e853ab30b3bff05ac92ec61c')
+sha1sums=('4a59150f0d9400f3997df542828834969a2c4842')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xf86-input-acecad/PKGBUILD b/abs/core-testing/xf86-input-acecad/PKGBUILD
new file mode 100644
index 0000000..aa3513f
--- /dev/null
+++ b/abs/core-testing/xf86-input-acecad/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-acecad
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X.Org acecad tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('2d6596b2b0cfa527b5ed4df2014684bf')
diff --git a/abs/core-testing/xf86-input-aiptek/PKGBUILD b/abs/core-testing/xf86-input-aiptek/PKGBUILD
new file mode 100644
index 0000000..f3d5b39
--- /dev/null
+++ b/abs/core-testing/xf86-input-aiptek/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-aiptek
+pkgver=1.0.1
+pkgrel=4
+pkgdesc="X.Org Aiptek USB Digital Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('951b2b1a270f67d28e2e89fd2b9f15ae')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-calcomp/PKGBUILD b/abs/core-testing/xf86-input-calcomp/PKGBUILD
new file mode 100644
index 0000000..b18d89c
--- /dev/null
+++ b/abs/core-testing/xf86-input-calcomp/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-calcomp
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org CalComp Drawing Board input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('689099e2ade8a8c9f68f82fdf569b3ad')
diff --git a/abs/core-testing/xf86-input-citron/PKGBUILD b/abs/core-testing/xf86-input-citron/PKGBUILD
new file mode 100644
index 0000000..1cd8713
--- /dev/null
+++ b/abs/core-testing/xf86-input-citron/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-citron
+pkgver=2.2.1
+pkgrel=1
+pkgdesc="X.Org Citron Infrared Touch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4e254fcefb3bea55772e63c12570f6d9')
diff --git a/abs/core-testing/xf86-input-digitaledge/PKGBUILD b/abs/core-testing/xf86-input-digitaledge/PKGBUILD
new file mode 100644
index 0000000..2017d0f
--- /dev/null
+++ b/abs/core-testing/xf86-input-digitaledge/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-digitaledge
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org Digital Edge Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('53461c34cc0712aacab92b820b9fcb84')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-dmc/PKGBUILD b/abs/core-testing/xf86-input-dmc/PKGBUILD
new file mode 100644
index 0000000..5839019
--- /dev/null
+++ b/abs/core-testing/xf86-input-dmc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-dmc
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org DMC FIT10 serial input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('f21f008220bc7687ce1c34ab557ec32f')
diff --git a/abs/core-testing/xf86-input-dynapro/PKGBUILD b/abs/core-testing/xf86-input-dynapro/PKGBUILD
new file mode 100644
index 0000000..467e05d
--- /dev/null
+++ b/abs/core-testing/xf86-input-dynapro/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-dynapro
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org DynaPro Touch Screen input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d47be12a230c44a05d56d6b79ebcfc38')
diff --git a/abs/core-testing/xf86-input-elo2300/PKGBUILD b/abs/core-testing/xf86-input-elo2300/PKGBUILD
new file mode 100644
index 0000000..da91799
--- /dev/null
+++ b/abs/core-testing/xf86-input-elo2300/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3251 2008-06-21 18:19:51Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-elo2300
+pkgver=1.1.2
+pkgrel=1
+pkgdesc="X.org ELOGraphics 2300 TouchScreen input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('611d0a77a80286bc926dd3c414e59555')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-elographics/PKGBUILD b/abs/core-testing/xf86-input-elographics/PKGBUILD
new file mode 100644
index 0000000..374fcaa
--- /dev/null
+++ b/abs/core-testing/xf86-input-elographics/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3250 2008-06-21 18:18:33Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-elographics
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X.org Elographics TouchScreen input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('50a9c32af12ca4733afe23042f012f9c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xf86-input-evdev/PKGBUILD b/abs/core-testing/xf86-input-evdev/PKGBUILD
new file mode 100644
index 0000000..0745861
--- /dev/null
+++ b/abs/core-testing/xf86-input-evdev/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3693 2008-06-29 11:05:37Z jgc $
+# Maintainer: Alexander Baldeck <Alexander@archlinux.org
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-evdev
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="X.org evdev input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'inputproto>=1.4.3' 'randrproto>=1.2.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('061c4558316b1ec9ee71478bdf68b10c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-fpit/PKGBUILD b/abs/core-testing/xf86-input-fpit/PKGBUILD
new file mode 100644
index 0000000..c8931e9
--- /dev/null
+++ b/abs/core-testing/xf86-input-fpit/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-fpit
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org Fujitsu Stylistic Tablet PC input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a31066a2076d18619ceaea67f6d89698')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-hyperpen/PKGBUILD b/abs/core-testing/xf86-input-hyperpen/PKGBUILD
new file mode 100644
index 0000000..8873552
--- /dev/null
+++ b/abs/core-testing/xf86-input-hyperpen/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-hyperpen
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org HyperPen Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('1dfccb75069e61e0c6f990b47eb58c40')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-jamstudio/PKGBUILD b/abs/core-testing/xf86-input-jamstudio/PKGBUILD
new file mode 100644
index 0000000..28be4e1
--- /dev/null
+++ b/abs/core-testing/xf86-input-jamstudio/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-jamstudio
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org KB-Gear JamStudio pentablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a32e36a24545791a3408cdc5563b6523')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-joystick/PKGBUILD b/abs/core-testing/xf86-input-joystick/PKGBUILD
new file mode 100644
index 0000000..e2146e8
--- /dev/null
+++ b/abs/core-testing/xf86-input-joystick/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-joystick
+pkgver=1.3.1
+pkgrel=1
+pkgdesc="X.Org Joystick input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ff25ea697cfa1570cc28f4b9cf9c761f')
diff --git a/abs/core-testing/xf86-input-keyboard/PKGBUILD b/abs/core-testing/xf86-input-keyboard/PKGBUILD
new file mode 100644
index 0000000..8e30c84
--- /dev/null
+++ b/abs/core-testing/xf86-input-keyboard/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 3248 2008-06-21 18:17:00Z jgc $
+# Maintainer; Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-keyboard
+pkgver=1.3.1
+pkgrel=1
+pkgdesc="X.Org keyboard input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg' 'xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('ebe5dcf8eed819103909f18321fc3b9d')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xf86-input-keyboard/new-server.patch b/abs/core-testing/xf86-input-keyboard/new-server.patch
new file mode 100644
index 0000000..0d50466
--- /dev/null
+++ b/abs/core-testing/xf86-input-keyboard/new-server.patch
@@ -0,0 +1,5087 @@
+diff -ruN xf86-input-keyboard-1.2.0/Makefile.in xf86-input-keyboard/Makefile.in
+--- xf86-input-keyboard-1.2.0/Makefile.in 2006-11-01 22:19:32.000000000 +0000
++++ xf86-input-keyboard/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -33,15 +33,11 @@
+ # ADAM JACKSON 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.
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = .
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -55,17 +51,17 @@
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
++subdir = .
+ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/configure COPYING ChangeLog config.guess \
+ config.sub depcomp install-sh ltmain.sh missing
+-subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+- configure.lineno configure.status.lineno
++ configure.lineno config.status.lineno
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES =
+@@ -73,10 +69,13 @@
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+- install-exec-recursive install-info-recursive \
+- install-recursive installcheck-recursive installdirs-recursive \
+- pdf-recursive ps-recursive uninstall-info-recursive \
+- uninstall-recursive
++ install-dvi-recursive install-exec-recursive \
++ install-html-recursive install-info-recursive \
++ install-pdf-recursive install-ps-recursive install-recursive \
++ installcheck-recursive installdirs-recursive pdf-recursive \
++ ps-recursive uninstall-recursive
++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
++ distclean-recursive maintainer-clean-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+@@ -94,8 +93,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -104,8 +101,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -132,8 +127,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -144,16 +138,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -164,23 +155,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -192,6 +180,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -220,8 +209,11 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+ SUBDIRS = src man
+ all: config.h
+@@ -265,7 +257,7 @@
+ config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+- $(MAKE) stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+@@ -287,7 +279,6 @@
+
+ distclean-libtool:
+ -rm -f libtool
+-uninstall-info-am:
+
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+@@ -320,8 +311,7 @@
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+-mostlyclean-recursive clean-recursive distclean-recursive \
+-maintainer-clean-recursive:
++$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+@@ -423,23 +413,22 @@
+
+ distdir: $(DISTFILES)
+ $(am__remove_distdir)
+- mkdir $(distdir)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ test -d $(distdir) || mkdir $(distdir)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -453,7 +442,7 @@
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+- || $(mkdir_p) "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+@@ -461,6 +450,8 @@
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
++ am__remove_distdir=: \
++ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+@@ -468,7 +459,7 @@
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+ dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+@@ -543,7 +534,7 @@
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+ distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+@@ -613,12 +604,20 @@
+
+ install-data-am:
+
++install-dvi: install-dvi-recursive
++
+ install-exec-am:
+
++install-html: install-html-recursive
++
+ install-info: install-info-recursive
+
+ install-man:
+
++install-pdf: install-pdf-recursive
++
++install-ps: install-ps-recursive
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-recursive
+@@ -639,24 +638,26 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-info-am
++uninstall-am:
+
+-uninstall-info: uninstall-info-recursive
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
++ install-strip
+
+-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+- check-am clean clean-generic clean-libtool clean-recursive \
+- ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+- dist-shar dist-tarZ dist-zip distcheck distclean \
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-generic distclean-hdr distclean-libtool \
+- distclean-recursive distclean-tags distcleancheck distdir \
+- distuninstallcheck dvi dvi-am html html-am info info-am \
+- install install-am install-data install-data-am install-exec \
+- install-exec-am install-info install-info-am install-man \
+- install-strip installcheck installcheck-am installdirs \
+- installdirs-am maintainer-clean maintainer-clean-generic \
+- maintainer-clean-recursive mostlyclean mostlyclean-generic \
+- mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+- tags tags-recursive uninstall uninstall-am uninstall-info-am
++ distclean-tags distcleancheck distdir distuninstallcheck dvi \
++ dvi-am html html-am info info-am install install-am \
++ install-data install-data-am install-dvi install-dvi-am \
++ install-exec install-exec-am install-html install-html-am \
++ install-info install-info-am install-man install-pdf \
++ install-pdf-am install-ps install-ps-am install-strip \
++ installcheck installcheck-am installdirs installdirs-am \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ tags tags-recursive uninstall uninstall-am
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -ruN xf86-input-keyboard-1.2.0/configure.ac xf86-input-keyboard/configure.ac
+--- xf86-input-keyboard-1.2.0/configure.ac 2006-11-01 22:16:54.000000000 +0000
++++ xf86-input-keyboard/configure.ac 2007-09-03 10:34:00.000000000 +0000
+@@ -22,7 +22,7 @@
+
+ AC_PREREQ(2.57)
+ AC_INIT([xf86-input-keyboard],
+- 1.2.0,
++ 1.2.1,
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
+ xf86-input-keyboard)
+
+diff -ruN xf86-input-keyboard-1.2.0/depcomp xf86-input-keyboard/depcomp
+--- xf86-input-keyboard-1.2.0/depcomp 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/depcomp 2007-09-03 10:36:18.000000000 +0000
+@@ -1,9 +1,10 @@
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+
+-scriptversion=2005-07-09.11
++scriptversion=2006-10-15.18
+
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
++# Foundation, Inc.
+
+ # 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
+@@ -91,7 +92,20 @@
+ ## gcc 3 implements dependency tracking that does exactly what
+ ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+ ## it if -MD -MP comes after the -MF stuff. Hmm.
+- "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
++## Unfortunately, FreeBSD c89 acceptance of flags depends upon
++## the command line argument order; so add the flags where they
++## appear in depend2.am. Note that the slowdown incurred here
++## affects only configure: in makefiles, %FASTDEP% shortcuts this.
++ for arg
++ do
++ case $arg in
++ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
++ *) set fnord "$@" "$arg" ;;
++ esac
++ shift # fnord
++ shift # $arg
++ done
++ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+@@ -276,6 +290,46 @@
+ rm -f "$tmpdepfile"
+ ;;
+
++hp2)
++ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
++ # compilers, which have integrated preprocessors. The correct option
++ # to use with these is +Maked; it writes dependencies to a file named
++ # 'foo.d', which lands next to the object file, wherever that
++ # happens to be.
++ # Much of this is similar to the tru64 case; see comments there.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir.libs/$base.d
++ "$@" -Wc,+Maked
++ else
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir$base.d
++ "$@" +Maked
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
++ # Add `dependent.h:' lines.
++ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile" "$tmpdepfile2"
++ ;;
++
+ tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+@@ -288,13 +342,13 @@
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+- # static library. This mecanism is used in libtool 1.4 series to
++ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+- # compilations output dependencies in in $dir.libs/$base.o.d and
++ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+diff -ruN xf86-input-keyboard-1.2.0/install-sh xf86-input-keyboard/install-sh
+--- xf86-input-keyboard-1.2.0/install-sh 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/install-sh 2007-09-03 10:36:18.000000000 +0000
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+
+-scriptversion=2005-05-14.22
++scriptversion=2006-10-14.15
+
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+@@ -39,15 +39,24 @@
+ # when there is no Makefile.
+ #
+ # This script is compatible with the BSD install script, but was written
+-# from scratch. It can only install one file at a time, a restriction
+-# shared with many OS's install programs.
++# from scratch.
++
++nl='
++'
++IFS=" "" $nl"
+
+ # set DOITPROG to echo to test this script
+
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+ doit="${DOITPROG-}"
++if test -z "$doit"; then
++ doit_exec=exec
++else
++ doit_exec=$doit
++fi
+
+-# put in absolute paths if you don't have them in your path; or use env. vars.
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
+
+ mvprog="${MVPROG-mv}"
+ cpprog="${CPPROG-cp}"
+@@ -58,7 +67,13 @@
+ rmprog="${RMPROG-rm}"
+ mkdirprog="${MKDIRPROG-mkdir}"
+
+-chmodcmd="$chmodprog 0755"
++posix_glob=
++posix_mkdir=
++
++# Desired mode of installed file.
++mode=0755
++
++chmodcmd=$chmodprog
+ chowncmd=
+ chgrpcmd=
+ stripcmd=
+@@ -95,7 +110,7 @@
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+ "
+
+-while test -n "$1"; do
++while test $# -ne 0; do
+ case $1 in
+ -c) shift
+ continue;;
+@@ -111,9 +126,15 @@
+
+ --help) echo "$usage"; exit $?;;
+
+- -m) chmodcmd="$chmodprog $2"
++ -m) mode=$2
+ shift
+ shift
++ case $mode in
++ *' '* | *' '* | *'
++'* | *'*'* | *'?'* | *'['*)
++ echo "$0: invalid mode: $mode" >&2
++ exit 1;;
++ esac
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+@@ -136,25 +157,33 @@
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+- *) # When -d is used, all remaining arguments are directories to create.
+- # When -t is used, the destination is already specified.
+- test -n "$dir_arg$dstarg" && break
+- # Otherwise, the last argument is the destination. Remove it from $@.
+- for arg
+- do
+- if test -n "$dstarg"; then
+- # $@ is not empty: it contains at least $arg.
+- set fnord "$@" "$dstarg"
+- shift # fnord
+- fi
+- shift # arg
+- dstarg=$arg
+- done
++ --) shift
+ break;;
++
++ -*) echo "$0: invalid option: $1" >&2
++ exit 1;;
++
++ *) break;;
+ esac
+ done
+
+-if test -z "$1"; then
++if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
++ # When -d is used, all remaining arguments are directories to create.
++ # When -t is used, the destination is already specified.
++ # Otherwise, the last argument is the destination. Remove it from $@.
++ for arg
++ do
++ if test -n "$dstarg"; then
++ # $@ is not empty: it contains at least $arg.
++ set fnord "$@" "$dstarg"
++ shift # fnord
++ fi
++ shift # arg
++ dstarg=$arg
++ done
++fi
++
++if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+@@ -164,6 +193,33 @@
+ exit 0
+ fi
+
++if test -z "$dir_arg"; then
++ trap '(exit $?); exit' 1 2 13 15
++
++ # Set umask so as not to create temps with too-generous modes.
++ # However, 'strip' requires both read and write access to temps.
++ case $mode in
++ # Optimize common cases.
++ *644) cp_umask=133;;
++ *755) cp_umask=22;;
++
++ *[0-7])
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw='% 200'
++ fi
++ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++ *)
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw=,u+rw
++ fi
++ cp_umask=$mode$u_plus_rw;;
++ esac
++fi
++
+ for src
+ do
+ # Protect names starting with `-'.
+@@ -173,15 +229,11 @@
+
+ if test -n "$dir_arg"; then
+ dst=$src
+- src=
+-
+- if test -d "$dst"; then
+- mkdircmd=:
+- chmodcmd=
+- else
+- mkdircmd=$mkdirprog
+- fi
++ dstdir=$dst
++ test -d "$dstdir"
++ dstdir_status=$?
+ else
++
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+@@ -208,53 +260,188 @@
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+- dst=$dst/`basename "$src"`
++ dstdir=$dst
++ dst=$dstdir/`basename "$src"`
++ dstdir_status=0
++ else
++ # Prefer dirname, but fall back on a substitute if dirname fails.
++ dstdir=`
++ (dirname "$dst") 2>/dev/null ||
++ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$dst" : 'X\(//\)[^/]' \| \
++ X"$dst" : 'X\(//\)$' \| \
++ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++ echo X"$dst" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'
++ `
++
++ test -d "$dstdir"
++ dstdir_status=$?
+ fi
+ fi
+
+- # This sed command emulates the dirname command.
+- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+-
+- # Make sure that the destination directory exists.
++ obsolete_mkdir_used=false
+
+- # Skip lots of stat calls in the usual case.
+- if test ! -d "$dstdir"; then
+- defaultIFS='
+- '
+- IFS="${IFS-$defaultIFS}"
+-
+- oIFS=$IFS
+- # Some sh's can't handle IFS=/ for some reason.
+- IFS='%'
+- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+- shift
+- IFS=$oIFS
++ if test $dstdir_status != 0; then
++ case $posix_mkdir in
++ '')
++ # Create intermediate dirs using mode 755 as modified by the umask.
++ # This is like FreeBSD 'install' as of 1997-10-28.
++ umask=`umask`
++ case $stripcmd.$umask in
++ # Optimize common cases.
++ *[2367][2367]) mkdir_umask=$umask;;
++ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++ *[0-7])
++ mkdir_umask=`expr $umask + 22 \
++ - $umask % 100 % 40 + $umask % 20 \
++ - $umask % 10 % 4 + $umask % 2
++ `;;
++ *) mkdir_umask=$umask,go-w;;
++ esac
++
++ # With -d, create the new directory with the user-specified mode.
++ # Otherwise, rely on $mkdir_umask.
++ if test -n "$dir_arg"; then
++ mkdir_mode=-m$mode
++ else
++ mkdir_mode=
++ fi
++
++ posix_mkdir=false
++ case $umask in
++ *[123567][0-7][0-7])
++ # POSIX mkdir -p sets u+wx bits regardless of umask, which
++ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++ ;;
++ *)
++ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
++
++ if (umask $mkdir_umask &&
++ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++ then
++ if test -z "$dir_arg" || {
++ # Check for POSIX incompatibilities with -m.
++ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++ # other-writeable bit of parent directory when it shouldn't.
++ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++ ls_ld_tmpdir=`ls -ld "$tmpdir"`
++ case $ls_ld_tmpdir in
++ d????-?r-*) different_mode=700;;
++ d????-?--*) different_mode=755;;
++ *) false;;
++ esac &&
++ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++ }
++ }
++ then posix_mkdir=:
++ fi
++ rmdir "$tmpdir/d" "$tmpdir"
++ else
++ # Remove any dirs left behind by ancient mkdir implementations.
++ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++ fi
++ trap '' 0;;
++ esac;;
++ esac
+
+- pathcomp=
++ if
++ $posix_mkdir && (
++ umask $mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++ )
++ then :
++ else
+
+- while test $# -ne 0 ; do
+- pathcomp=$pathcomp$1
++ # The umask is ridiculous, or mkdir does not conform to POSIX,
++ # or it failed possibly due to a race condition. Create the
++ # directory the slow way, step by step, checking for races as we go.
++
++ case $dstdir in
++ /*) prefix=/ ;;
++ -*) prefix=./ ;;
++ *) prefix= ;;
++ esac
++
++ case $posix_glob in
++ '')
++ if (set -f) 2>/dev/null; then
++ posix_glob=true
++ else
++ posix_glob=false
++ fi ;;
++ esac
++
++ oIFS=$IFS
++ IFS=/
++ $posix_glob && set -f
++ set fnord $dstdir
+ shift
+- if test ! -d "$pathcomp"; then
+- $mkdirprog "$pathcomp"
+- # mkdir can fail with a `File exist' error in case several
+- # install-sh are creating the directory concurrently. This
+- # is OK.
+- test -d "$pathcomp" || exit
++ $posix_glob && set +f
++ IFS=$oIFS
++
++ prefixes=
++
++ for d
++ do
++ test -z "$d" && continue
++
++ prefix=$prefix$d
++ if test -d "$prefix"; then
++ prefixes=
++ else
++ if $posix_mkdir; then
++ (umask=$mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++ # Don't fail if two instances are running concurrently.
++ test -d "$prefix" || exit 1
++ else
++ case $prefix in
++ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++ *) qprefix=$prefix;;
++ esac
++ prefixes="$prefixes '$qprefix'"
++ fi
++ fi
++ prefix=$prefix/
++ done
++
++ if test -n "$prefixes"; then
++ # Don't fail if two instances are running concurrently.
++ (umask $mkdir_umask &&
++ eval "\$doit_exec \$mkdirprog $prefixes") ||
++ test -d "$dstdir" || exit 1
++ obsolete_mkdir_used=true
+ fi
+- pathcomp=$pathcomp/
+- done
++ fi
+ fi
+
+ if test -n "$dir_arg"; then
+- $doit $mkdircmd "$dst" \
+- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+-
++ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+- dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+@@ -262,10 +449,9 @@
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+- trap '(exit $?); exit' 1 2 13 15
+
+ # Copy the file name to the temp name.
+- $doit $cpprog "$src" "$dsttmp" &&
++ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+@@ -276,10 +462,10 @@
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
++ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
++ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+@@ -291,11 +477,12 @@
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+- if test -f "$dstdir/$dstfile"; then
+- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
++ if test -f "$dst"; then
++ $doit $rmcmd -f "$dst" 2>/dev/null \
++ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
++ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+ || {
+- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
++ echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ else
+@@ -304,16 +491,13 @@
+ } &&
+
+ # Now rename the file to the real destination.
+- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
++ $doit $mvcmd "$dsttmp" "$dst"
+ }
+- }
+- fi || { (exit 1); exit 1; }
+-done
++ } || exit 1
+
+-# The final little trick to "correctly" pass the exit status to the exit trap.
+-{
+- (exit 0); exit 0
+-}
++ trap '' 0
++ fi
++done
+
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+diff -ruN xf86-input-keyboard-1.2.0/ltmain.sh xf86-input-keyboard/ltmain.sh
+--- xf86-input-keyboard-1.2.0/ltmain.sh 2006-06-19 18:36:49.000000000 +0000
++++ xf86-input-keyboard/ltmain.sh 2007-06-26 19:45:46.000000000 +0000
+@@ -1,8 +1,8 @@
+ # ltmain.sh - Provide generalized library-building support services.
+ # NOTE: Changing this file will not affect anything until you rerun configure.
+ #
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
++# 2007 Free Software Foundation, Inc.
+ # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+ #
+ # This program is free software; you can redistribute it and/or modify
+@@ -43,14 +43,22 @@
+
+ PROGRAM=ltmain.sh
+ PACKAGE=libtool
+-VERSION="1.5.22 Debian 1.5.22-4"
+-TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
++VERSION=1.5.24
++TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)"
+
+-# See if we are running on zsh, and set the options which allow our
+-# commands through without removal of \ escapes.
+-if test -n "${ZSH_VERSION+set}" ; then
++# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+ fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Check that we have a working $echo.
+ if test "X$1" = X--no-reexec; then
+@@ -105,12 +113,14 @@
+ # These must not be set unconditionally because not all systems understand
+ # e.g. LANG=C (notably SCO).
+ # We save the old values to restore during execute mode.
+-if test "${LC_ALL+set}" = set; then
+- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+-fi
+-if test "${LANG+set}" = set; then
+- save_LANG="$LANG"; LANG=C; export LANG
+-fi
++for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++do
++ eval "if test \"\${$lt_var+set}\" = set; then
++ save_$lt_var=\$$lt_var
++ $lt_var=C
++ export $lt_var
++ fi"
++done
+
+ # Make sure IFS has a sensible default
+ lt_nl='
+@@ -136,6 +146,8 @@
+ preserve_args=
+ lo2o="s/\\.lo\$/.${objext}/"
+ o2lo="s/\\.${objext}\$/.lo/"
++extracted_archives=
++extracted_serial=0
+
+ #####################################
+ # Shell function definitions:
+@@ -196,7 +208,13 @@
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+- $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
++ $SED -n -e '1,100{
++ / I /{
++ s,.*,import,
++ p
++ q
++ }
++ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+@@ -327,7 +345,17 @@
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
+- my_xdir="$my_gentop/$my_xlib"
++ my_xlib_u=$my_xlib
++ while :; do
++ case " $extracted_archives " in
++ *" $my_xlib_u "*)
++ extracted_serial=`expr $extracted_serial + 1`
++ my_xlib_u=lt$extracted_serial-$my_xlib ;;
++ *) break ;;
++ esac
++ done
++ extracted_archives="$extracted_archives $my_xlib_u"
++ my_xdir="$my_gentop/$my_xlib_u"
+
+ $show "${rm}r $my_xdir"
+ $run ${rm}r "$my_xdir"
+@@ -454,11 +482,12 @@
+ ;;
+
+ --version)
+- $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+- $echo
+- $echo "Copyright (C) 2005 Free Software Foundation, Inc."
+- $echo "This is free software; see the source for copying conditions. There is NO"
+- $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++ echo "\
++$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
++
++Copyright (C) 2007 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit $?
+ ;;
+
+@@ -755,9 +784,10 @@
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+- *.f90) xform=f90 ;;
++ *.[fF][09]?) xform=[fF][09]. ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
++ *.obj) xform=obj ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+@@ -1138,8 +1168,9 @@
+ for arg
+ do
+ case $arg in
+- -all-static | -static)
+- if test "X$arg" = "X-all-static"; then
++ -all-static | -static | -static-libtool-libs)
++ case $arg in
++ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+@@ -1147,12 +1178,20 @@
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+- else
++ ;;
++ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+- fi
++ ;;
++ -static-libtool-libs)
++ if test -z "$pic_flag" && test -n "$link_static_flag"; then
++ dlopen_self=$dlopen_self_static
++ fi
++ prefer_static_libs=yes
++ ;;
++ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+@@ -1600,7 +1639,7 @@
+ continue
+ ;;
+
+- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+@@ -1620,10 +1659,11 @@
+ # -m* pass through architecture-specific compiler args for GCC
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+- # -pg pass through profiling flag for GCC
++ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
++ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # @file GCC response files
+- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+- -t[45]*|-txscale*|@*)
++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+@@ -1651,9 +1691,9 @@
+
+ -no-install)
+ case $host in
+- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+ # The PATH hackery in wrapper scripts is required on Windows
+- # in order for the loader to find any dlls it needs.
++ # and Darwin in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+@@ -1712,7 +1752,7 @@
+ continue
+ ;;
+
+- -static)
++ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+@@ -2082,10 +2122,7 @@
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+- link)
+- libs="$deplibs %DEPLIBS%"
+- test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+- ;;
++ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+@@ -2097,7 +2134,7 @@
+ lib=
+ found=no
+ case $deplib in
+- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+@@ -2493,7 +2530,9 @@
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
++ { { test "$prefer_static_libs" = no ||
++ test "$prefer_static_libs,$installed" = "built,yes"; } ||
++ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+@@ -3189,7 +3228,7 @@
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+- darwin|linux|osf|windows)
++ darwin|linux|osf|windows|none)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+@@ -3200,14 +3239,10 @@
+ age="0"
+ ;;
+ irix|nonstopux)
+- current=`expr $number_major + $number_minor - 1`
++ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_minor"
+- ;;
+- *)
+- $echo "$modename: unknown library version type \`$version_type'" 1>&2
+- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+- exit $EXIT_FAILURE
++ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+@@ -3266,7 +3301,8 @@
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+- verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
++ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
++ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+@@ -3280,8 +3316,11 @@
+ ;;
+
+ irix | nonstopux)
+- major=`expr $current - $age + 1`
+-
++ if test "X$lt_irix_increment" = "Xno"; then
++ major=`expr $current - $age`
++ else
++ major=`expr $current - $age + 1`
++ fi
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+@@ -3418,11 +3457,11 @@
+ fi
+
+ # Eliminate all temporary directories.
+- for path in $notinst_path; do
+- lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
+- deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
+- dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+- done
++ #for path in $notinst_path; do
++ # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
++ # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
++ # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
++ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+@@ -3523,13 +3562,12 @@
+ int main() { return 0; }
+ EOF
+ $rm conftest
+- $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
+- if test "$?" -eq 0 ; then
++ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name=`expr $i : '-l\(.*\)'`
+ # If $name is empty we are operating on a -L argument.
+- if test "$name" != "" && test "$name" -ne "0"; then
++ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+@@ -3568,9 +3606,7 @@
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+- $LTCC $LTCFLAGS -o conftest conftest.c $i
+- # Did it work?
+- if test "$?" -eq 0 ; then
++ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+@@ -3602,7 +3638,7 @@
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+- $echo "*** make it link in! You will probably need to install it or some"
++ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+@@ -3888,7 +3924,10 @@
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
++ case $archive_cmds in
++ *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
++ *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
++ esac
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+@@ -4247,12 +4286,14 @@
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+- # -Wl from whole_archive_flag_spec
++ # -Wl from whole_archive_flag_spec and hope we can get by with
++ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
++ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
++ reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+@@ -4700,16 +4741,16 @@
+ case $host in
+ *cygwin* | *mingw* )
+ if test -f "$output_objdir/${outputname}.def" ; then
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ else
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ fi
+ ;;
+ * )
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ ;;
+ esac
+ ;;
+@@ -4724,13 +4765,13 @@
+ # really was required.
+
+ # Nullify the symbol file.
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+ fi
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+@@ -4817,7 +4858,7 @@
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
++ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
+ else
+ # fast_install is set to needless
+ relink_command=
+@@ -4854,7 +4895,7 @@
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ fi
+
+ # Quote $echo for shipping.
+@@ -5261,6 +5302,20 @@
+ Xsed='${SED} -e 1s/^X//'
+ sed_quote_subst='$sed_quote_subst'
+
++# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
++if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '\${1+\"\$@\"}'='\"\$@\"'
++ setopt NO_GLOB_SUBST
++else
++ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
+ # The HP-UX ksh and POSIX shell print the target directory to stdout
+ # if CDPATH is set.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+@@ -5403,7 +5458,7 @@
+ ;;
+ esac
+ $echo >> $output "\
+- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
++ \$echo \"\$0: cannot exec \$program \$*\"
+ exit $EXIT_FAILURE
+ fi
+ else
+@@ -5589,7 +5644,7 @@
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+@@ -5934,9 +5989,9 @@
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
++ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
+ else
+- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
++ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+@@ -6145,7 +6200,7 @@
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+@@ -6356,8 +6411,10 @@
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+- exit $EXIT_FAILURE
++ if test ! -f "$dir/$dlname"; then
++ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
++ exit $EXIT_FAILURE
++ fi
+ fi
+ ;;
+
+@@ -6421,12 +6478,12 @@
+ fi
+
+ # Restore saved environment variables
+- if test "${save_LC_ALL+set}" = set; then
+- LC_ALL="$save_LC_ALL"; export LC_ALL
+- fi
+- if test "${save_LANG+set}" = set; then
+- LANG="$save_LANG"; export LANG
+- fi
++ for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++ do
++ eval "if test \"\${save_$lt_var+set}\" = set; then
++ $lt_var=\$save_$lt_var; export $lt_var
++ fi"
++ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+@@ -6783,9 +6840,9 @@
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+- try to export only the symbols listed in SYMFILE
++ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+- try to export only the symbols matching REGEX
++ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+@@ -6799,9 +6856,11 @@
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+- -static do not do any dynamic linking of libtool libraries
++ -static do not do any dynamic linking of uninstalled libtool libraries
++ -static-libtool-libs
++ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+- specify library version info [each variable defaults to 0]
++ specify library version info [each variable defaults to 0]
+
+ All other options (arguments beginning with \`-') are ignored.
+
+diff -ruN xf86-input-keyboard-1.2.0/man/.cvsignore xf86-input-keyboard/man/.cvsignore
+--- xf86-input-keyboard-1.2.0/man/.cvsignore 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/man/.cvsignore 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,2 @@
++Makefile
++Makefile.in
+diff -ruN xf86-input-keyboard-1.2.0/man/Makefile.in xf86-input-keyboard/man/Makefile.in
+--- xf86-input-keyboard-1.2.0/man/Makefile.in 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/man/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -41,15 +41,11 @@
+ # from the copyright holders.
+ #
+
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -87,8 +83,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -97,8 +91,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -125,8 +117,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -137,16 +128,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -157,23 +145,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = sed
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -185,6 +170,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -213,14 +199,16 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ drivermandir = $(DRIVER_MAN_DIR)
+ driverman_PRE = @DRIVER_NAME@.man
+ driverman_DATA = $(driverman_PRE:man=@DRIVER_MAN_SUFFIX@)
+ EXTRA_DIST = @DRIVER_NAME@.man
+ CLEANFILES = $(driverman_DATA)
+-SED = sed
+
+ # Strings to replace in man pages
+ XORGRELSTRING = @PACKAGE_STRING@
+@@ -277,13 +265,9 @@
+
+ clean-libtool:
+ -rm -rf .libs _libs
+-
+-distclean-libtool:
+- -rm -f libtool
+-uninstall-info-am:
+ install-drivermanDATA: $(driverman_DATA)
+ @$(NORMAL_INSTALL)
+- test -z "$(drivermandir)" || $(mkdir_p) "$(DESTDIR)$(drivermandir)"
++ test -z "$(drivermandir)" || $(MKDIR_P) "$(DESTDIR)$(drivermandir)"
+ @list='$(driverman_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+@@ -306,22 +290,21 @@
+
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -337,7 +320,7 @@
+ all-am: Makefile $(DATA)
+ installdirs:
+ for dir in "$(DESTDIR)$(drivermandir)"; do \
+- test -z "$$dir" || $(mkdir_p) "$$dir"; \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -370,7 +353,7 @@
+
+ distclean: distclean-am
+ -rm -f Makefile
+-distclean-am: clean-am distclean-generic distclean-libtool
++distclean-am: clean-am distclean-generic
+
+ dvi: dvi-am
+
+@@ -384,12 +367,20 @@
+
+ install-data-am: install-drivermanDATA
+
++install-dvi: install-dvi-am
++
+ install-exec-am:
+
++install-html: install-html-am
++
+ install-info: install-info-am
+
+ install-man:
+
++install-pdf: install-pdf-am
++
++install-ps: install-ps-am
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -408,18 +399,21 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-drivermanDATA uninstall-info-am
++uninstall-am: uninstall-drivermanDATA
++
++.MAKE: install-am install-strip
+
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+- install-data install-data-am install-drivermanDATA \
+- install-exec install-exec-am install-info install-info-am \
+- install-man install-strip installcheck installcheck-am \
+- installdirs maintainer-clean maintainer-clean-generic \
+- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+- ps ps-am uninstall uninstall-am uninstall-drivermanDATA \
+- uninstall-info-am
++ install-data install-data-am install-drivermanDATA install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-ps install-ps-am \
++ install-strip installcheck installcheck-am installdirs \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ uninstall uninstall-am uninstall-drivermanDATA
+
+
+ .man.$(DRIVER_MAN_SUFFIX):
+diff -ruN xf86-input-keyboard-1.2.0/man/keyboard.man xf86-input-keyboard/man/keyboard.man
+--- xf86-input-keyboard-1.2.0/man/keyboard.man 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/man/keyboard.man 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,108 @@
++.\" $XdotOrg: $
++.\" $XFree86: xc/programs/Xserver/hw/xfree86/input/keyboard/keyboard.man,v 1.2 2001/01/27 18:20:57 dawes Exp $
++.\" shorthand for double quote that works everywhere.
++.ds q \N'34'
++.TH KEYBOARD __drivermansuffix__ __vendorversion__
++.SH NAME
++keyboard \- Keyboard input driver
++.SH SYNOPSIS
++.nf
++.B "Section \*qInputDevice\*q"
++.BI " Identifier \*q" idevname \*q
++.B " Driver \*qkeyboard\*q"
++\ \ ...
++.B EndSection
++.fi
++.SH DESCRIPTION
++.B keyboard
++is an __xservername__ input driver for keyboards. The driver supports the standard
++OS-provided keyboard interface.
++.PP
++The
++.B keyboard
++driver functions as a keyboard input device, and may be used as the
++X server's core keyboard.
++.PP
++This driver is built-in to the core X server, and multiple instances are not
++supported. A loadable driver,
++.BR kbd ,
++is available, and is planned to replace the
++.B keyboard
++driver in a future release of the __xservername__ server.
++.SH CONFIGURATION DETAILS
++Please refer to __xconfigfile__(__filemansuffix__) for general configuration
++details and for options that can be used with all input drivers. This
++section only covers configuration details specific to this driver.
++.PP
++The following driver
++.B Options
++are supported:
++.TP 7
++.BI "Option \*qProtocol\*q \*q" string \*q
++Specify the keyboard protocol. Valid protocol types include:
++.PP
++.RS 12
++Standard, Xqueue.
++.RE
++.PP
++.RS 7
++Not all protocols are supported on all platforms. Default: "Standard".
++.RE
++.TP 7
++.BI "Option \*qAutoRepeat\*q \*q" "delay rate" \*q
++sets the auto repeat behaviour for the keyboard. This is not implemented
++on all platforms.
++.I delay
++is the time in milliseconds before a key starts repeating.
++.I rate
++is the number of times a key repeats per second. Default: "500 30".
++.TP 7
++.BI "Option \*qXLeds\*q \*q" ledlist \*q
++makes the keyboard LEDs specified in
++.I ledlist
++available for client use instead of their traditional function
++(Scroll Lock, Caps Lock and Num Lock). The numbers in the list are
++in the range 1 to 3. Default: empty list.
++.TP 7
++.BI "Option \*qXkbDisable\*q \*q" boolean \*q
++disable/enable the XKEYBOARD extension. The \-kb command line
++option overrides this config file option. Default: XKB is enabled.
++.PP
++.RS 7
++NOTE: This option should be specified in the
++.B ServerFlags
++section rather than here. It's use here is deprecated.
++.RE
++.TP 7
++.BI "Option \*qXkbRules\*q \*q" rules \*q
++specifies which XKB rules file to use for interpreting the
++.BR XkbModel ,
++.BR XkbLayout ,
++.BR XkbVariant ,
++and
++.B XkbOptions
++settings. Default: "xorg" for most platforms, but "xfree98" for the
++Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbModel\*q \*q" modelname \*q
++specifies the XKB keyboard model name. Default: "pc105" for most platforms,
++but "pc98" for the Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbLayout\*q \*q" layoutname \*q
++specifies the XKB keyboard layout name. This is usually the country or
++language type of the keyboard. Default: "us" for most platforms, but
++"nec/jp" for the Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbVariant\*q \*q" variants \*q
++specifies the XKB keyboard variant components. These can be used to
++enhance the keyboard layout details. Default: not set.
++.TP 7
++.BI "Option \*qXkbOptions\*q \*q" options \*q
++specifies the XKB keyboard option components. These can be used to
++enhance the keyboard behaviour. Default: not set.
++.PP
++Some other XKB-related options are available, but they are incompatible
++with the ones listed above and are not recommended, so they are not
++documented here.
++.SH "SEE ALSO"
++kbd(__drivermansuffix__), __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__).
+diff -ruN xf86-input-keyboard-1.2.0/missing xf86-input-keyboard/missing
+--- xf86-input-keyboard-1.2.0/missing 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/missing 2007-09-03 10:36:18.000000000 +0000
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Common stub for a few missing GNU programs while installing.
+
+-scriptversion=2005-06-08.21
++scriptversion=2006-05-10.23
+
+-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+ # Free Software Foundation, Inc.
+ # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+@@ -33,6 +33,8 @@
+ fi
+
+ run=:
++sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
++sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+ # In the cases where this matters, `missing' is being run in the
+ # srcdir already.
+@@ -44,7 +46,7 @@
+
+ msg="missing on your system"
+
+-case "$1" in
++case $1 in
+ --run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+@@ -77,6 +79,7 @@
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
++ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+@@ -106,7 +109,7 @@
+ # Now exit if we have it, but it failed. Also exit now if we
+ # don't have it and --version was passed (most likely to detect
+ # the program).
+-case "$1" in
++case $1 in
+ lex|yacc)
+ # Not GNU programs, they don't have --version.
+ ;;
+@@ -135,7 +138,7 @@
+
+ # If it does not exist, or fails to run (possibly an outdated version),
+ # try to emulate it.
+-case "$1" in
++case $1 in
+ aclocal*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+@@ -164,7 +167,7 @@
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+- case "$f" in
++ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+@@ -192,8 +195,8 @@
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+- file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+- test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+@@ -214,25 +217,25 @@
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+- if [ $# -ne 1 ]; then
++ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+- case "$LASTARG" in
++ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+- if [ ! -f y.tab.h ]; then
++ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+- if [ ! -f y.tab.c ]; then
++ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+@@ -244,18 +247,18 @@
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+- if [ $# -ne 1 ]; then
++ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+- case "$LASTARG" in
++ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+- if [ ! -f lex.yy.c ]; then
++ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+@@ -267,11 +270,9 @@
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+- if test -z "$file"; then
+- file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+- fi
+- if [ -f "$file" ]; then
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+@@ -289,11 +290,17 @@
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
++ file=`sed -n '
++ /^@setfilename/{
++ s/.* \([^ ]*\) *$/\1/
++ p
++ q
++ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+@@ -317,13 +324,13 @@
+ fi
+ firstarg="$1"
+ if shift; then
+- case "$firstarg" in
++ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+- case "$firstarg" in
++ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+diff -ruN xf86-input-keyboard-1.2.0/src/.cvsignore xf86-input-keyboard/src/.cvsignore
+--- xf86-input-keyboard-1.2.0/src/.cvsignore 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/.cvsignore 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,6 @@
++.deps
++.libs
++Makefile
++Makefile.in
++*.la
++*.lo
+diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.am xf86-input-keyboard/src/Makefile.am
+--- xf86-input-keyboard-1.2.0/src/Makefile.am 2006-11-01 22:16:43.000000000 +0000
++++ xf86-input-keyboard/src/Makefile.am 2007-09-03 10:34:00.000000000 +0000
+@@ -21,33 +21,32 @@
+ driverdir = @inputdir@
+ driver_LTLIBRARIES = kbd_drv.la
+ kbd_drv_la_LDFLAGS = -avoid-version -module
+-kbd_drv_la_SOURCES = kbd.c
++kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h
+
+-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+-HURD_SOURCES = hurd_kbd.c at_scancode.c
+-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
+-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
++BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
++HURD_SRCS = hurd_kbd.c at_scancode.c
++LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
++SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
++SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
+
+ if BSD
+-kbd_drv_la_SOURCES += $(BSD_SOURCES)
++kbd_drv_la_SOURCES += $(BSD_SRCS)
+ endif
+
+ if SOLARIS
+-kbd_drv_la_SOURCES += $(SOLARIS_SOURCES)
++kbd_drv_la_SOURCES += $(SOLARIS_SRCS)
+ endif
+
+ if LINUX
+-kbd_drv_la_SOURCES += $(LINUX_SOURCES)
++kbd_drv_la_SOURCES += $(LINUX_SRCS)
+ endif
+
+ if SCO
+-kbd_drv_la_SOURCES += $(SCO_SOURCES)
++kbd_drv_la_SOURCES += $(SCO_SRCS)
+ endif
+
+ if HURD
+-kbd_drv_la_SOURCES += $(HURD_SOURCES)
++kbd_drv_la_SOURCES += $(HURD_SRCS)
+ endif
+
+-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
+- $(SOLARIS_SOURCES)
++EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
+diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.in xf86-input-keyboard/src/Makefile.in
+--- xf86-input-keyboard-1.2.0/src/Makefile.in 2006-11-01 22:19:32.000000000 +0000
++++ xf86-input-keyboard/src/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -34,15 +34,11 @@
+ # 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.
+
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -56,11 +52,11 @@
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+-@BSD_TRUE@am__append_1 = $(BSD_SOURCES)
+-@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SOURCES)
+-@LINUX_TRUE@am__append_3 = $(LINUX_SOURCES)
+-@SCO_TRUE@am__append_4 = $(SCO_SOURCES)
+-@HURD_TRUE@am__append_5 = $(HURD_SOURCES)
++@BSD_TRUE@am__append_1 = $(BSD_SRCS)
++@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SRCS)
++@LINUX_TRUE@am__append_3 = $(LINUX_SRCS)
++@SCO_TRUE@am__append_4 = $(SCO_SRCS)
++@HURD_TRUE@am__append_5 = $(HURD_SRCS)
+ subdir = src
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+@@ -80,13 +76,13 @@
+ driverLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(driver_LTLIBRARIES)
+ kbd_drv_la_LIBADD =
+-am__kbd_drv_la_SOURCES_DIST = kbd.c bsd_KbdMap.c bsd_kbd.c bsd_kbd.h \
+- at_scancode.c sun_kbd.c sun_kbd.h sun_kbdEv.c lnx_KbdMap.c \
+- lnx_kbd.c lnx_kbd.h sco_KbdMap.c sco_kbd.c sco_kbd.h \
+- hurd_kbd.c
++am__kbd_drv_la_SOURCES_DIST = kbd.c xf86OSKbd.h xf86Keymap.h \
++ bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c sun_kbd.c \
++ sun_kbd.h sun_kbdMap.c lnx_KbdMap.c lnx_kbd.c lnx_kbd.h \
++ sco_KbdMap.c sco_kbd.c sco_kbd.h hurd_kbd.c
+ am__objects_1 = bsd_KbdMap.lo bsd_kbd.lo at_scancode.lo
+ @BSD_TRUE@am__objects_2 = $(am__objects_1)
+-am__objects_3 = sun_kbd.lo sun_kbdEv.lo
++am__objects_3 = sun_kbd.lo sun_kbdMap.lo
+ @SOLARIS_TRUE@am__objects_4 = $(am__objects_3)
+ am__objects_5 = lnx_KbdMap.lo lnx_kbd.lo at_scancode.lo
+ @LINUX_TRUE@am__objects_6 = $(am__objects_5)
+@@ -97,17 +93,21 @@
+ am_kbd_drv_la_OBJECTS = kbd.lo $(am__objects_2) $(am__objects_4) \
+ $(am__objects_6) $(am__objects_8) $(am__objects_10)
+ kbd_drv_la_OBJECTS = $(am_kbd_drv_la_OBJECTS)
+-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
++kbd_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(kbd_drv_la_LDFLAGS) $(LDFLAGS) -o $@
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+- $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(AM_LDFLAGS) $(LDFLAGS) -o $@
++LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
++ $(LDFLAGS) -o $@
+ SOURCES = $(kbd_drv_la_SOURCES)
+ DIST_SOURCES = $(am__kbd_drv_la_SOURCES_DIST)
+ ETAGS = etags
+@@ -116,8 +116,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -126,8 +124,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -154,8 +150,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -166,16 +161,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -186,23 +178,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -214,6 +203,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -242,21 +232,23 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ driverdir = @inputdir@
+ driver_LTLIBRARIES = kbd_drv.la
+ kbd_drv_la_LDFLAGS = -avoid-version -module
+-kbd_drv_la_SOURCES = kbd.c $(am__append_1) $(am__append_2) \
+- $(am__append_3) $(am__append_4) $(am__append_5)
+-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+-HURD_SOURCES = hurd_kbd.c at_scancode.c
+-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
+-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
+-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
+- $(SOLARIS_SOURCES)
+-
++kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h $(am__append_1) \
++ $(am__append_2) $(am__append_3) $(am__append_4) \
++ $(am__append_5)
++BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
++HURD_SRCS = hurd_kbd.c at_scancode.c
++LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
++SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
++SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
++EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
+ all: all-am
+
+ .SUFFIXES:
+@@ -292,7 +284,7 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ install-driverLTLIBRARIES: $(driver_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+- test -z "$(driverdir)" || $(mkdir_p) "$(DESTDIR)$(driverdir)"
++ test -z "$(driverdir)" || $(MKDIR_P) "$(DESTDIR)$(driverdir)"
+ @list='$(driver_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+@@ -303,7 +295,7 @@
+
+ uninstall-driverLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @set -x; list='$(driver_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(driver_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(driverdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(driverdir)/$$p"; \
+@@ -318,7 +310,7 @@
+ rm -f "$${dir}/so_locations"; \
+ done
+ kbd_drv.la: $(kbd_drv_la_OBJECTS) $(kbd_drv_la_DEPENDENCIES)
+- $(LINK) -rpath $(driverdir) $(kbd_drv_la_LDFLAGS) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
++ $(kbd_drv_la_LINK) -rpath $(driverdir) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
+
+ mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+@@ -336,25 +328,25 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_KbdMap.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_kbd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbd.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdEv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdMap.Plo@am__quote@
+
+ .c.o:
+-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+-@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -365,10 +357,6 @@
+ clean-libtool:
+ -rm -rf .libs _libs
+
+-distclean-libtool:
+- -rm -f libtool
+-uninstall-info-am:
+-
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -418,22 +406,21 @@
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -449,7 +436,7 @@
+ all-am: Makefile $(LTLIBRARIES)
+ installdirs:
+ for dir in "$(DESTDIR)$(driverdir)"; do \
+- test -z "$$dir" || $(mkdir_p) "$$dir"; \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -484,7 +471,7 @@
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+- distclean-libtool distclean-tags
++ distclean-tags
+
+ dvi: dvi-am
+
+@@ -498,12 +485,20 @@
+
+ install-data-am: install-driverLTLIBRARIES
+
++install-dvi: install-dvi-am
++
+ install-exec-am:
+
++install-html: install-html-am
++
+ install-info: install-info-am
+
+ install-man:
+
++install-pdf: install-pdf-am
++
++install-ps: install-ps-am
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -524,20 +519,24 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-driverLTLIBRARIES uninstall-info-am
++uninstall-am: uninstall-driverLTLIBRARIES
++
++.MAKE: install-am install-strip
+
+ .PHONY: CTAGS GTAGS all all-am check check-am clean \
+ clean-driverLTLIBRARIES clean-generic clean-libtool ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+- install-data-am install-driverLTLIBRARIES install-exec \
+- install-exec-am install-info install-info-am install-man \
++ install-data-am install-driverLTLIBRARIES install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+- uninstall-driverLTLIBRARIES uninstall-info-am
++ uninstall-driverLTLIBRARIES
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -ruN xf86-input-keyboard-1.2.0/src/kbd.c xf86-input-keyboard/src/kbd.c
+--- xf86-input-keyboard-1.2.0/src/kbd.c 2006-11-01 22:16:43.000000000 +0000
++++ xf86-input-keyboard/src/kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -383,7 +383,22 @@
+ InputInfoPtr pInfo = (InputInfoPtr) device->public.devicePrivate;
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+
+- if ( ctrl->leds & XCOMP ) {
++ if ( ctrl->leds & XLED1) {
++ pKbd->keyLeds |= CAPSFLAG;
++ } else {
++ pKbd->keyLeds &= ~CAPSFLAG;
++ }
++ if ( ctrl->leds & XLED2) {
++ pKbd->keyLeds |= NUMFLAG;
++ } else {
++ pKbd->keyLeds &= ~NUMFLAG;
++ }
++ if ( ctrl->leds & XLED3) {
++ pKbd->keyLeds |= SCROLLFLAG;
++ } else {
++ pKbd->keyLeds &= ~SCROLLFLAG;
++ }
++ if ( ctrl->leds & (XCOMP|XLED4) ) {
+ pKbd->keyLeds |= COMPOSEFLAG;
+ } else {
+ pKbd->keyLeds &= ~COMPOSEFLAG;
+@@ -419,6 +434,8 @@
+ kevent.u.keyButtonPointer.rootX = 0;
+ kevent.u.keyButtonPointer.rootY = 0;
+
++/* The server does this for us with i-h. */
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 1
+ /*
+ * Hmm... here is the biggest hack of every time !
+ * It may be possible that a switch-vt procedure has finished BEFORE
+@@ -448,6 +465,8 @@
+ (* pKeyboard->public.processInputProc)(&kevent, pKeyboard, 1);
+ }
+ }
++#endif
++
+ pKbd->scanPrefix = 0;
+
+ if (init) {
+@@ -830,7 +849,7 @@
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+ XORG_VERSION_CURRENT,
+- 1, 1, 0,
++ PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
+ ABI_CLASS_XINPUT,
+ ABI_XINPUT_VERSION,
+ MOD_CLASS_XINPUT,
+diff -ruN xf86-input-keyboard-1.2.0/src/lnx_kbd.c xf86-input-keyboard/src/lnx_kbd.c
+--- xf86-input-keyboard-1.2.0/src/lnx_kbd.c 2006-11-01 22:18:25.000000000 +0000
++++ xf86-input-keyboard/src/lnx_kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -6,6 +6,10 @@
+ * Based on the code from lnx_io.c which is
+ * Copyright 1992 by Orest Zborowski <obz@Kodak.com>
+ * Copyright 1993 by David Dawes <dawes@xfree86.org>
++ *
++ * Portions based on kbdrate.c from util-linux 2.9t, which is
++ * Copyright 1992 Rickard E. Faith. Distributed under the GPL.
++ * This program comes with ABSOLUTELY NO WARRANTY.
+ */
+
+ #define NEED_EVENTS
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.c xf86-input-keyboard/src/sun_kbd.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbd.c 2006-11-01 22:18:26.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -22,7 +22,7 @@
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+-/* Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved.
++/* Copyright 2004-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+@@ -59,42 +59,36 @@
+ #include "xf86_OSlib.h"
+ #include "xf86OSKbd.h"
+ #include "sun_kbd.h"
+-
+-/***************************************************************************
+- * Common implementation of routines shared by "keyboard" driver in sun_io.c
+- * and "kbd" driver (later on in this file)
+- */
++#include "atKeynames.h"
+
+ #include <sys/stropts.h>
+ #include <sys/vuid_event.h>
+ #include <sys/kbd.h>
+
+-_X_HIDDEN int
+-sunKbdOpen(const char *devName, pointer options)
++static void
++sunKbdSetLeds(InputInfoPtr pInfo, int leds)
+ {
+- int kbdFD;
+- const char *kbdPath = NULL;
+- const char *defaultKbd = "/dev/kbd";
++ int i;
+
+- if (options != NULL) {
+- kbdPath = xf86SetStrOption(options, "Device", NULL);
+- }
+- if (kbdPath == NULL) {
+- kbdPath = defaultKbd;
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSLED, &leds));
++ if (i < 0) {
++ xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
++ pInfo->name, strerror(errno));
+ }
++}
+
+- kbdFD = open(kbdPath, O_RDONLY | O_NONBLOCK);
+-
+- if (kbdFD == -1) {
+- xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", devName, kbdPath);
+- } else {
+- xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", devName, kbdPath);
+- }
+-
+- if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
+- xfree(kbdPath);
++
++static int
++sunKbdGetLeds(InputInfoPtr pInfo)
++{
++ int i, leds = 0;
++
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGLED, &leds));
++ if (i < 0) {
++ xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
++ pInfo->name, strerror(errno));
+ }
+- return kbdFD;
++ return leds;
+ }
+
+
+@@ -102,15 +96,16 @@
+ * Save initial keyboard state. This is called at the start of each server
+ * generation.
+ */
+-
+-_X_HIDDEN int
+-sunKbdInit(sunKbdPrivPtr priv, int kbdFD, const char *devName, pointer options)
++static int
++KbdInit(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++ pointer options = pInfo->options;
++
+ int ktype, klayout, i;
+ const char *ktype_name;
+
+- priv->kbdFD = kbdFD;
+- priv->devName = devName;
+ priv->otranslation = -1;
+ priv->odirect = -1;
+
+@@ -121,25 +116,25 @@
+ }
+
+ if (priv->strmod) {
+- SYSCALL(i = ioctl(priv->kbdFD, I_PUSH, priv->strmod));
++ SYSCALL(i = ioctl(pInfo->fd, I_PUSH, priv->strmod));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: cannot push module '%s' onto keyboard device: %s\n",
+- priv->devName, priv->strmod, strerror(errno));
++ pInfo->name, priv->strmod, strerror(errno));
+ }
+ }
+
+- SYSCALL(i = ioctl(kbdFD, KIOCTYPE, &ktype));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTYPE, &ktype));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to determine keyboard type: %s\n",
+- devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+- SYSCALL(i = ioctl(kbdFD, KIOCLAYOUT, &klayout));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCLAYOUT, &klayout));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to determine keyboard layout: %s\n",
+- devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+@@ -157,213 +152,181 @@
+ }
+
+ xf86Msg(X_PROBED, "%s: Keyboard type: %s (%d)\n",
+- devName, ktype_name, ktype);
+- xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", devName, klayout);
++ pInfo->name, ktype_name, ktype);
++ xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", pInfo->name, klayout);
+
+ priv->ktype = ktype;
+- priv->keyMap = sunGetKbdMapping(ktype);
+- priv->oleds = sunKbdGetLeds(priv);
++ priv->oleds = sunKbdGetLeds(pInfo);
+
+ return Success;
+ }
+
+-_X_HIDDEN int
+-sunKbdOn(sunKbdPrivPtr priv)
++
++static int
++KbdOn(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int ktrans, kdirect, i;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGDIRECT, &kdirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGDIRECT, &kdirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to determine keyboard direct setting: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ priv->odirect = kdirect;
+ kdirect = 1;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &kdirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &kdirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed turning keyboard direct mode on: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ /* Setup translation */
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGTRANS, &ktrans));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGTRANS, &ktrans));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to determine keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ priv->otranslation = ktrans;
+ ktrans = TR_UNTRANS_EVENT;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &ktrans));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &ktrans));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed setting keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
++ /* If Caps Lock or Num Lock LEDs are on when server starts,
++ * send a fake key down on those keys to set the server state
++ * to match the LED's.
++ */
++ if ( priv->oleds & (LED_CAPS_LOCK | LED_NUM_LOCK) ) {
++ int capslock = -1;
++ int numlock = -1;
++ int j;
++ TransMapPtr kmap = pKbd->scancodeMap;
++
++ for (j = kmap->begin; j < kmap->end ; j++) {
++ switch (kmap->map[j]) {
++ case KEY_CapsLock:
++ capslock = j;
++ break;
++ case KEY_NumLock:
++ numlock = j;
++ break;
++ default:
++ /* nothing to do */
++ break;
++ }
++ if ((capslock >= 0) && (numlock >= 0)) {
++ break;
++ }
++ }
++ if ((priv->oleds & LED_CAPS_LOCK) && (capslock > 0)) {
++ pKbd->PostEvent(pInfo, capslock, TRUE); /* Press */
++ pKbd->PostEvent(pInfo, capslock, FALSE); /* Release */
++ }
++ if ((priv->oleds & LED_NUM_LOCK) && (numlock > 0)) {
++ pKbd->PostEvent(pInfo, numlock, TRUE); /* Press */
++ pKbd->PostEvent(pInfo, numlock, FALSE); /* Release */
++ }
++ }
++
+ return Success;
+ }
+
+-_X_HIDDEN int
+-sunKbdOff(sunKbdPrivPtr priv)
++static int
++KbdOff(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int i;
+
+ /* restore original state */
+
+- sunKbdSetLeds(priv, priv->oleds);
++ sunKbdSetLeds(pInfo, priv->oleds);
+
+ if (priv->otranslation != -1) {
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &priv->otranslation));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &priv->otranslation));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to restore keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+ priv->otranslation = -1;
+ }
+
+ if (priv->odirect != -1) {
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &priv->odirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &priv->odirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to restore keyboard direct setting: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+ priv->odirect = -1;
+ }
+
+ if (priv->strmod) {
+- SYSCALL(i = ioctl(priv->kbdFD, I_POP, priv->strmod));
++ SYSCALL(i = ioctl(pInfo->fd, I_POP, priv->strmod));
+ if (i < 0) {
+ xf86Msg(X_WARNING,
+ "%s: cannot pop module '%s' off keyboard device: %s\n",
+- priv->devName, priv->strmod, strerror(errno));
++ pInfo->name, priv->strmod, strerror(errno));
+ }
+ }
+
+ return Success;
+ }
+
+-_X_HIDDEN void
+-sunKbdSoundBell(sunKbdPrivPtr priv, int loudness, int pitch, int duration)
++
++static void
++SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int kbdCmd, i;
+
+ if (loudness && pitch)
+ {
+ kbdCmd = KBD_CMD_BELL;
+
+- SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
++ SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed to activate bell: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ }
+
+ usleep(duration * loudness * 20);
+
+ kbdCmd = KBD_CMD_NOBELL;
+- SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
++ SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed to deactivate bell: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ }
+ }
+ }
+
+-_X_HIDDEN void
+-sunKbdSetLeds(sunKbdPrivPtr priv, int leds)
+-{
+- int i;
+-
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSLED, &leds));
+- if (i < 0) {
+- xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
+- priv->devName, strerror(errno));
+- }
+-}
+-
+-_X_HIDDEN int
+-sunKbdGetLeds(sunKbdPrivPtr priv)
+-{
+- int i, leds = 0;
+-
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGLED, &leds));
+- if (i < 0) {
+- xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
+- priv->devName, strerror(errno));
+- }
+- return leds;
+-}
+-
+-/* ARGSUSED0 */
+-_X_HIDDEN void
+-sunKbdSetRepeat(sunKbdPrivPtr priv, char rad)
+-{
+- /* Nothing to do */
+-}
+-
+-/***************************************************************************
+- * Routines called from "kbd" driver via proc vectors filled in by
+- * xf86OSKbdPreInit().
+- */
+-
+-
+-static int
+-KbdInit(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdInit(priv, pInfo->fd, pInfo->name, pInfo->options);
+-}
+-
+-
+-static int
+-KbdOn(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdOn(priv);
+-}
+-
+-static int
+-KbdOff(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdOff(priv);
+-}
+-
+-
+-static void
+-SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- sunKbdSoundBell(priv, loudness, pitch, duration);
+-}
+-
+ static void
+ SetKbdLeds(InputInfoPtr pInfo, int leds)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+- int real_leds = sunKbdGetLeds(priv);
++ int real_leds = sunKbdGetLeds(pInfo);
+
+ real_leds &= ~(LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_COMPOSE);
+
+@@ -372,16 +335,14 @@
+ if (leds & XLED3) real_leds |= LED_SCROLL_LOCK;
+ if (leds & XLED4) real_leds |= LED_COMPOSE;
+
+- sunKbdSetLeds(priv, real_leds);
++ sunKbdSetLeds(pInfo, real_leds);
+ }
+
+ static int
+ GetKbdLeds(InputInfoPtr pInfo)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+ int leds = 0;
+- int real_leds = sunKbdGetLeds(priv);
++ int real_leds = sunKbdGetLeds(pInfo);
+
+ if (real_leds & LED_CAPS_LOCK) leds |= XLED1;
+ if (real_leds & LED_NUM_LOCK) leds |= XLED2;
+@@ -391,27 +352,17 @@
+ return leds;
+ }
+
++/* ARGSUSED0 */
+ static void
+ SetKbdRepeat(InputInfoPtr pInfo, char rad)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- sunKbdSetRepeat(priv, rad);
+-}
+-
+-static void
+-KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
+-{
+- /* Should probably do something better here */
+- xf86KbdGetMapping(pKeySyms, pModMap);
++ /* Nothing to do */
+ }
+
+ static void
+ ReadInput(InputInfoPtr pInfo)
+ {
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+ Firm_event event[64];
+ int nBytes, i;
+
+@@ -420,7 +371,7 @@
+ if ((nBytes = read(pInfo->fd, (char *)event, sizeof(event))) > 0)
+ {
+ for (i = 0; i < (nBytes / sizeof(Firm_event)); i++) {
+- pKbd->PostEvent(pInfo, priv->keyMap[event[i].id],
++ pKbd->PostEvent(pInfo, event[i].id & 0xFF,
+ event[i].value == VKEY_DOWN ? TRUE : FALSE);
+ }
+ }
+@@ -429,13 +380,34 @@
+ static Bool
+ OpenKeyboard(InputInfoPtr pInfo)
+ {
+- pInfo->fd = sunKbdOpen(pInfo->name, pInfo->options);
++ const char *kbdPath = NULL;
++ const char *defaultKbd = "/dev/kbd";
+
+- if (pInfo->fd >= 0) {
+- pInfo->read_input = ReadInput;
+- return TRUE;
++ if (pInfo->options != NULL) {
++ kbdPath = xf86SetStrOption(pInfo->options, "Device", NULL);
++ }
++ if (kbdPath == NULL) {
++ kbdPath = defaultKbd;
++ }
++
++ pInfo->fd = open(kbdPath, O_RDONLY | O_NONBLOCK);
++
++ if (pInfo->fd == -1) {
++ xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", pInfo->name, kbdPath);
+ } else {
++ xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", pInfo->name,
++ kbdPath);
++ }
++
++ if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
++ xfree(kbdPath);
++ }
++
++ if (pInfo->fd == -1) {
+ return FALSE;
++ } else {
++ pInfo->read_input = ReadInput;
++ return TRUE;
+ }
+ }
+
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.h xf86-input-keyboard/src/sun_kbd.h
+--- xf86-input-keyboard-1.2.0/src/sun_kbd.h 2006-11-01 22:18:26.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbd.h 2007-09-03 10:34:00.000000000 +0000
+@@ -1,4 +1,4 @@
+-/* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
++/* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+@@ -29,41 +29,16 @@
+ #ifndef _XORG_SUN_KBD_H_
+ #define _XORG_SUN_KBD_H_
+
+-/*
+- * Keyboard common implementation routines shared by "keyboard" driver
+- * in sun_io.c and "kbd" driver in sun_kbd.c
+- */
+-
+ typedef struct {
+- int kbdFD;
+- const char * devName;
+ int ktype; /* Keyboard type from KIOCTYPE */
+ Bool kbdActive; /* Have we set kbd modes for X? */
+ int otranslation; /* Original translation mode */
+ int odirect; /* Original "direct" mode setting */
+ unsigned char oleds; /* Original LED state */
+ const char * strmod; /* Streams module pushed on kbd device */
+- const unsigned char *keyMap;
+ } sunKbdPrivRec, *sunKbdPrivPtr;
+
+-/* sun_kbd.c */
+-extern int sunKbdOpen (const char *devName, pointer options);
+-extern int sunKbdInit (sunKbdPrivPtr priv, int kbdFD,
+- const char *devName, pointer options);
+-extern int sunKbdOn (sunKbdPrivPtr priv);
+-extern int sunKbdOff (sunKbdPrivPtr priv);
+-
+-extern void sunKbdSoundBell (sunKbdPrivPtr priv,
+- int loudness, int pitch, int duration);
+-
+-extern void sunKbdSetLeds (sunKbdPrivPtr priv, int leds);
+-extern int sunKbdGetLeds (sunKbdPrivPtr priv);
+-extern void sunKbdSetRepeat (sunKbdPrivPtr priv, char rad);
+-
+-/* sun_kbdEv.c */
+-#include <sys/vuid_event.h>
+-extern void sunPostKbdEvent (int ktype, Firm_event *event);
+-
+-extern const unsigned char *sunGetKbdMapping(int ktype);
+-
++/* sun_kbdMap.c */
++extern void KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms,
++ CARD8 *pModMap);
+ #endif
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdEv.c xf86-input-keyboard/src/sun_kbdEv.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbdEv.c 2006-11-01 22:18:27.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbdEv.c 1970-01-01 00:00:00.000000000 +0000
+@@ -1,855 +0,0 @@
+-/*
+- * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+- * Copyright 1993 by David Dawes <dawes@xfree86.org>
+- *
+- * Permission to use, copy, modify, distribute, and sell this software and its
+- * documentation for any purpose is hereby granted without fee, provided that
+- * the above copyright notice appear in all copies and that both that copyright
+- * notice and this permission notice appear in supporting documentation, and
+- * that the names of Thomas Roell and David Dawes not be used in advertising or
+- * publicity pertaining to distribution of the software without specific,
+- * written prior permission. Thomas Roell and David Dawes make no
+- * representations about the suitability of this software for any purpose. It
+- * is provided "as is" without express or implied warranty.
+- *
+- * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+- * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
+- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+- * PERFORMANCE OF THIS SOFTWARE.
+- */
+-
+-/* [JCH-96/01/21] Extended std reverse map to four buttons. */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#endif
+-
+-#include "xf86.h"
+-#include "xf86Priv.h"
+-#include "xf86_OSlib.h"
+-#include "xf86OSKbd.h"
+-#include "sun_kbd.h"
+-
+-#ifdef XINPUT
+-#include <X11/extensions/XI.h>
+-#include <X11/extensions/XIproto.h>
+-#include "xf86Xinput.h"
+-#endif
+-
+-#include "inputstr.h"
+-
+-#include <sys/kbd.h>
+-#include "atKeynames.h"
+-
+-#ifdef XKB
+-extern Bool noXkbExtension;
+-#endif
+-
+-#define XE_POINTER 1
+-#define XE_KEYBOARD 2
+-
+-#ifdef XINPUT
+-#define ENQUEUE(ev, code, direction, dev_type) \
+- (ev)->u.u.detail = (code); \
+- (ev)->u.u.type = (direction); \
+- xf86eqEnqueue((ev))
+-#else
+-#define ENQUEUE(ev, code, direction, dev_type) \
+- (ev)->u.u.detail = (code); \
+- (ev)->u.u.type = (direction); \
+- mieqEnqueue((ev))
+-#endif
+-
+-static void startautorepeat(long keycode);
+-static CARD32 processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg);
+-
+-static OsTimerPtr sunTimer = NULL;
+-
+-/* Map the Solaris keycodes to the "XFree86" keycodes. */
+-/*
+- * This doesn't seem right. It probably needs to be dependent on a keyboard
+- * type.
+- */
+-
+-/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
+-#define KEY_Kanji 0x82
+-#define KEY_Execute 0x83
+-
+-static unsigned char map[256] = {
+-#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
+- KEY_NOTUSED, /* 0 */
+- KEY_Tilde, /* 1 */
+- KEY_1, /* 2 */
+- KEY_2, /* 3 */
+- KEY_3, /* 4 */
+- KEY_4, /* 5 */
+- KEY_5, /* 6 */
+- KEY_6, /* 7 */
+- KEY_7, /* 8 */
+- KEY_8, /* 9 */
+- KEY_9, /* 10 */
+- KEY_0, /* 11 */
+- KEY_Minus, /* 12 */
+- KEY_Equal, /* 13 */
+- 0x7D, /*KEY_P_YEN*/ /* 14 */
+- KEY_BackSpace, /* 15 */
+- KEY_Tab, /* 16 */
+- KEY_Q, /* 17 */
+- KEY_W, /* 18 */
+- KEY_E, /* 19 */
+- KEY_R, /* 20 */
+- KEY_T, /* 21 */
+- KEY_Y, /* 22 */
+- KEY_U, /* 23 */
+- KEY_I, /* 24 */
+- KEY_O, /* 25 */
+- KEY_P, /* 26 */
+- KEY_LBrace, /* 27 */
+- KEY_RBrace, /* 28 */
+- KEY_BSlash, /* 29 */
+- KEY_CapsLock, /* 30 */
+- KEY_A, /* 31 */
+- KEY_S, /* 32 */
+- KEY_D, /* 33 */
+- KEY_F, /* 34 */
+- KEY_G, /* 35 */
+- KEY_H, /* 36 */
+- KEY_J, /* 37 */
+- KEY_K, /* 38 */
+- KEY_L, /* 39 */
+- KEY_SemiColon, /* 40 */
+- KEY_Quote, /* 41 */
+- KEY_UNKNOWN, /* 42 */
+- KEY_Enter, /* 43 */
+- KEY_ShiftL, /* 44 */
+- KEY_Less, /* 45 */
+- KEY_Z, /* 46 */
+- KEY_X, /* 47 */
+- KEY_C, /* 48 */
+- KEY_V, /* 49 */
+- KEY_B, /* 50 */
+- KEY_N, /* 51 */
+- KEY_M, /* 52 */
+- KEY_Comma, /* 53 */
+- KEY_Period, /* 54 */
+- KEY_Slash, /* 55 */
+- KEY_BSlash2, /* 56 */
+- KEY_ShiftR, /* 57 */
+- KEY_LCtrl, /* 58 */
+- KEY_LMeta, /* 59 */
+- KEY_Alt, /* 60 */
+- KEY_Space, /* 61 */
+- KEY_AltLang, /* 62 */
+- KEY_RMeta, /* 63 */
+- KEY_RCtrl, /* 64 */
+- KEY_Menu, /* 65 */
+- KEY_UNKNOWN, /* 66 */
+- KEY_UNKNOWN, /* 67 */
+- KEY_UNKNOWN, /* 68 */
+- KEY_UNKNOWN, /* 69 */
+- KEY_UNKNOWN, /* 70 */
+- KEY_UNKNOWN, /* 71 */
+- KEY_UNKNOWN, /* 72 */
+- KEY_UNKNOWN, /* 73 */
+- KEY_UNKNOWN, /* 74 */
+- KEY_Insert, /* 75 */
+- KEY_Delete, /* 76 */
+- KEY_UNKNOWN, /* 77 */
+- KEY_UNKNOWN, /* 78 */
+- KEY_Left, /* 79 */
+- KEY_Home, /* 80 */
+- KEY_End, /* 81 */
+- KEY_UNKNOWN, /* 82 */
+- KEY_Up, /* 83 */
+- KEY_Down, /* 84 */
+- KEY_PgUp, /* 85 */
+- KEY_PgDown, /* 86 */
+- KEY_UNKNOWN, /* 87 */
+- KEY_UNKNOWN, /* 88 */
+- KEY_Right, /* 89 */
+- KEY_NumLock, /* 90 */
+- KEY_KP_7, /* 91 */
+- KEY_KP_4, /* 92 */
+- KEY_KP_1, /* 93 */
+- KEY_UNKNOWN, /* 94 */
+- KEY_KP_Divide, /* 95 */
+- KEY_KP_8, /* 96 */
+- KEY_KP_5, /* 97 */
+- KEY_KP_2, /* 98 */
+- KEY_KP_0, /* 99 */
+- KEY_KP_Multiply, /* 100 */
+- KEY_KP_9, /* 101 */
+- KEY_KP_6, /* 102 */
+- KEY_KP_3, /* 103 */
+- KEY_KP_Decimal, /* 104 */
+- KEY_KP_Minus, /* 105 */
+- KEY_KP_Plus, /* 106 */
+- KEY_UNKNOWN, /* 107 */
+- KEY_KP_Enter, /* 108 */
+- KEY_UNKNOWN, /* 109 */
+- KEY_Escape, /* 110 */
+- KEY_UNKNOWN, /* 111 */
+- KEY_F1, /* 112 */
+- KEY_F2, /* 113 */
+- KEY_F3, /* 114 */
+- KEY_F4, /* 115 */
+- KEY_F5, /* 116 */
+- KEY_F6, /* 117 */
+- KEY_F7, /* 118 */
+- KEY_F8, /* 119 */
+- KEY_F9, /* 120 */
+- KEY_F10, /* 121 */
+- KEY_F11, /* 122 */
+- KEY_F12, /* 123 */
+- KEY_Print, /* 124 */
+- KEY_ScrollLock, /* 125 */
+- KEY_Pause, /* 126 */
+- KEY_UNKNOWN, /* 127 */
+- KEY_UNKNOWN, /* 128 */
+- KEY_UNKNOWN, /* 129 */
+- KEY_UNKNOWN, /* 130 */
+- KEY_NFER, /* 131 */
+- KEY_XFER, /* 132 */
+- KEY_HKTG, /* 133 */
+- KEY_UNKNOWN, /* 134 */
+-#elif defined(sparc) || defined(__sparc__)
+- KEY_UNKNOWN, /* 0x00 */
+- KEY_UNKNOWN, /* 0x01 */
+- KEY_UNKNOWN, /* 0x02 */
+- KEY_UNKNOWN, /* 0x03 */
+- KEY_UNKNOWN, /* 0x04 */
+- KEY_F1, /* 0x05 */
+- KEY_F2, /* 0x06 */
+- KEY_F10, /* 0x07 */
+- KEY_F3, /* 0x08 */
+- KEY_F11, /* 0x09 */
+- KEY_F4, /* 0x0A */
+- KEY_F12, /* 0x0B */
+- KEY_F5, /* 0x0C */
+- KEY_UNKNOWN, /* 0x0D */
+- KEY_F6, /* 0x0E */
+- KEY_UNKNOWN, /* 0x0F */
+- KEY_F7, /* 0x10 */
+- KEY_F8, /* 0x11 */
+- KEY_F9, /* 0x12 */
+- KEY_Alt, /* 0x13 */
+- KEY_Up, /* 0x14 */
+- KEY_Pause, /* 0x15 */
+- KEY_SysReqest, /* 0x16 */
+- KEY_ScrollLock, /* 0x17 */
+- KEY_Left, /* 0x18 */
+- KEY_UNKNOWN, /* 0x19 */
+- KEY_UNKNOWN, /* 0x1A */
+- KEY_Down, /* 0x1B */
+- KEY_Right, /* 0x1C */
+- KEY_Escape, /* 0x1D */
+- KEY_1, /* 0x1E */
+- KEY_2, /* 0x1F */
+- KEY_3, /* 0x20 */
+- KEY_4, /* 0x21 */
+- KEY_5, /* 0x22 */
+- KEY_6, /* 0x23 */
+- KEY_7, /* 0x24 */
+- KEY_8, /* 0x25 */
+- KEY_9, /* 0x26 */
+- KEY_0, /* 0x27 */
+- KEY_Minus, /* 0x28 */
+- KEY_Equal, /* 0x29 */
+- KEY_Tilde, /* 0x2A */
+- KEY_BackSpace, /* 0x2B */
+- KEY_Insert, /* 0x2C */
+- KEY_UNKNOWN, /* 0x2D */
+- KEY_KP_Divide, /* 0x2E */
+- KEY_KP_Multiply, /* 0x2F */
+- KEY_UNKNOWN, /* 0x30 */
+- KEY_UNKNOWN, /* 0x31 */
+- KEY_KP_Decimal, /* 0x32 */
+- KEY_UNKNOWN, /* 0x33 */
+- KEY_Home, /* 0x34 */
+- KEY_Tab, /* 0x35 */
+- KEY_Q, /* 0x36 */
+- KEY_W, /* 0x37 */
+- KEY_E, /* 0x38 */
+- KEY_R, /* 0x39 */
+- KEY_T, /* 0x3A */
+- KEY_Y, /* 0x3B */
+- KEY_U, /* 0x3C */
+- KEY_I, /* 0x3D */
+- KEY_O, /* 0x3E */
+- KEY_P, /* 0x3F */
+- KEY_LBrace, /* 0x40 */
+- KEY_RBrace, /* 0x41 */
+- KEY_Delete, /* 0x42 */
+- KEY_UNKNOWN, /* 0x43 */
+- KEY_KP_7, /* 0x44 */
+- KEY_KP_8, /* 0x45 */
+- KEY_KP_9, /* 0x46 */
+- KEY_KP_Minus, /* 0x47 */
+- KEY_UNKNOWN, /* 0x48 */
+- KEY_UNKNOWN, /* 0x49 */
+- KEY_End, /* 0x4A */
+- KEY_UNKNOWN, /* 0x4B */
+- KEY_LCtrl, /* 0x4C */
+- KEY_A, /* 0x4D */
+- KEY_S, /* 0x4E */
+- KEY_D, /* 0x4F */
+- KEY_F, /* 0x50 */
+- KEY_G, /* 0x51 */
+- KEY_H, /* 0x52 */
+- KEY_J, /* 0x53 */
+- KEY_K, /* 0x54 */
+- KEY_L, /* 0x55 */
+- KEY_SemiColon, /* 0x56 */
+- KEY_Quote, /* 0x57 */
+- KEY_BSlash, /* 0x58 */
+- KEY_Enter, /* 0x59 */
+- KEY_KP_Enter, /* 0x5A */
+- KEY_KP_4, /* 0x5B */
+- KEY_KP_5, /* 0x5C */
+- KEY_KP_6, /* 0x5D */
+- KEY_KP_0, /* 0x5E */
+- KEY_UNKNOWN, /* 0x5F */
+- KEY_PgUp, /* 0x60 */
+- KEY_UNKNOWN, /* 0x61 */
+- KEY_NumLock, /* 0x62 */
+- KEY_ShiftL, /* 0x63 */
+- KEY_Z, /* 0x64 */
+- KEY_X, /* 0x65 */
+- KEY_C, /* 0x66 */
+- KEY_V, /* 0x67 */
+- KEY_B, /* 0x68 */
+- KEY_N, /* 0x69 */
+- KEY_M, /* 0x6A */
+- KEY_Comma, /* 0x6B */
+- KEY_Period, /* 0x6C */
+- KEY_Slash, /* 0x6D */
+- KEY_ShiftR, /* 0x6E */
+- KEY_UNKNOWN, /* 0x6F */
+- KEY_KP_1, /* 0x70 */
+- KEY_KP_2, /* 0x71 */
+- KEY_KP_3, /* 0x72 */
+- KEY_UNKNOWN, /* 0x73 */
+- KEY_UNKNOWN, /* 0x74 */
+- KEY_UNKNOWN, /* 0x75 */
+- KEY_UNKNOWN, /* 0x76 */
+- KEY_CapsLock, /* 0x77 */
+- KEY_LMeta, /* 0x78 */
+- KEY_Space, /* 0x79 */
+- KEY_RMeta, /* 0x7A */
+- KEY_PgDown, /* 0x7B */
+- KEY_UNKNOWN, /* 0x7C */
+- KEY_KP_Plus, /* 0x7D */
+- KEY_UNKNOWN, /* 0x7E */
+- KEY_UNKNOWN, /* 0x7F */
+-#endif
+- /* The rest default to KEY_UNKNOWN */
+-};
+-
+-#if defined(KB_USB)
+-static unsigned char usbmap[256] = {
+-/*
+- * partially taken from ../bsd/bsd_KbdMap.c
+- *
+- * added keycodes for Sun special keys (left function keys, audio control)
+- */
+- /* 0 */ KEY_NOTUSED,
+- /* 1 */ KEY_NOTUSED,
+- /* 2 */ KEY_NOTUSED,
+- /* 3 */ KEY_NOTUSED,
+- /* 4 */ KEY_A,
+- /* 5 */ KEY_B,
+- /* 6 */ KEY_C,
+- /* 7 */ KEY_D,
+- /* 8 */ KEY_E,
+- /* 9 */ KEY_F,
+- /* 10 */ KEY_G,
+- /* 11 */ KEY_H,
+- /* 12 */ KEY_I,
+- /* 13 */ KEY_J,
+- /* 14 */ KEY_K,
+- /* 15 */ KEY_L,
+- /* 16 */ KEY_M,
+- /* 17 */ KEY_N,
+- /* 18 */ KEY_O,
+- /* 19 */ KEY_P,
+- /* 20 */ KEY_Q,
+- /* 21 */ KEY_R,
+- /* 22 */ KEY_S,
+- /* 23 */ KEY_T,
+- /* 24 */ KEY_U,
+- /* 25 */ KEY_V,
+- /* 26 */ KEY_W,
+- /* 27 */ KEY_X,
+- /* 28 */ KEY_Y,
+- /* 29 */ KEY_Z,
+- /* 30 */ KEY_1, /* 1 !*/
+- /* 31 */ KEY_2, /* 2 @ */
+- /* 32 */ KEY_3, /* 3 # */
+- /* 33 */ KEY_4, /* 4 $ */
+- /* 34 */ KEY_5, /* 5 % */
+- /* 35 */ KEY_6, /* 6 ^ */
+- /* 36 */ KEY_7, /* 7 & */
+- /* 37 */ KEY_8, /* 8 * */
+- /* 38 */ KEY_9, /* 9 ( */
+- /* 39 */ KEY_0, /* 0 ) */
+- /* 40 */ KEY_Enter, /* Return */
+- /* 41 */ KEY_Escape, /* Escape */
+- /* 42 */ KEY_BackSpace, /* Backspace Delete */
+- /* 43 */ KEY_Tab, /* Tab */
+- /* 44 */ KEY_Space, /* Space */
+- /* 45 */ KEY_Minus, /* - _ */
+- /* 46 */ KEY_Equal, /* = + */
+- /* 47 */ KEY_LBrace, /* [ { */
+- /* 48 */ KEY_RBrace, /* ] } */
+- /* 49 */ KEY_BSlash, /* \ | */
+- /* 50 */ KEY_BSlash, /* \ _ # ~ on some keyboards */
+- /* 51 */ KEY_SemiColon, /* ; : */
+- /* 52 */ KEY_Quote, /* ' " */
+- /* 53 */ KEY_Tilde, /* ` ~ */
+- /* 54 */ KEY_Comma, /* , < */
+- /* 55 */ KEY_Period, /* . > */
+- /* 56 */ KEY_Slash, /* / ? */
+- /* 57 */ KEY_CapsLock, /* Caps Lock */
+- /* 58 */ KEY_F1, /* F1 */
+- /* 59 */ KEY_F2, /* F2 */
+- /* 60 */ KEY_F3, /* F3 */
+- /* 61 */ KEY_F4, /* F4 */
+- /* 62 */ KEY_F5, /* F5 */
+- /* 63 */ KEY_F6, /* F6 */
+- /* 64 */ KEY_F7, /* F7 */
+- /* 65 */ KEY_F8, /* F8 */
+- /* 66 */ KEY_F9, /* F9 */
+- /* 67 */ KEY_F10, /* F10 */
+- /* 68 */ KEY_F11, /* F11 */
+- /* 69 */ KEY_F12, /* F12 */
+- /* 70 */ KEY_Print, /* PrintScrn SysReq */
+- /* 71 */ KEY_ScrollLock, /* Scroll Lock */
+- /* 72 */ KEY_Pause, /* Pause Break */
+- /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
+- /* 74 */ KEY_Home, /* Home */
+- /* 75 */ KEY_PgUp, /* Page Up */
+- /* 76 */ KEY_Delete, /* Delete */
+- /* 77 */ KEY_End, /* End */
+- /* 78 */ KEY_PgDown, /* Page Down */
+- /* 79 */ KEY_Right, /* Right Arrow */
+- /* 80 */ KEY_Left, /* Left Arrow */
+- /* 81 */ KEY_Down, /* Down Arrow */
+- /* 82 */ KEY_Up, /* Up Arrow */
+- /* 83 */ KEY_NumLock, /* Num Lock */
+- /* 84 */ KEY_KP_Divide, /* Keypad / */
+- /* 85 */ KEY_KP_Multiply, /* Keypad * */
+- /* 86 */ KEY_KP_Minus, /* Keypad - */
+- /* 87 */ KEY_KP_Plus, /* Keypad + */
+- /* 88 */ KEY_KP_Enter, /* Keypad Enter */
+- /* 89 */ KEY_KP_1, /* Keypad 1 End */
+- /* 90 */ KEY_KP_2, /* Keypad 2 Down */
+- /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
+- /* 92 */ KEY_KP_4, /* Keypad 4 Left */
+- /* 93 */ KEY_KP_5, /* Keypad 5 */
+- /* 94 */ KEY_KP_6, /* Keypad 6 */
+- /* 95 */ KEY_KP_7, /* Keypad 7 Home */
+- /* 96 */ KEY_KP_8, /* Keypad 8 Up */
+- /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
+- /* 98 */ KEY_KP_0, /* Keypad 0 Ins */
+- /* 99 */ KEY_KP_Decimal, /* Keypad . Del */
+- /* 100 */ KEY_Less, /* < > on some keyboards */
+- /* 101 */ KEY_Menu, /* Menu */
+- /* 102 */ KEY_Power, /* Sun: Power */
+- /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
+- /* 104 */ KEY_NOTUSED,
+- /* 105 */ KEY_NOTUSED,
+- /* 106 */ KEY_NOTUSED,
+- /* 107 */ KEY_NOTUSED,
+- /* 108 */ KEY_NOTUSED,
+- /* 109 */ KEY_NOTUSED,
+- /* 110 */ KEY_NOTUSED,
+- /* 111 */ KEY_NOTUSED,
+- /* 112 */ KEY_NOTUSED,
+- /* 113 */ KEY_NOTUSED,
+- /* 114 */ KEY_NOTUSED,
+- /* 115 */ KEY_NOTUSED,
+- /* 116 */ KEY_L7, /* Sun: Open */
+- /* 117 */ KEY_Help, /* Sun: Help */
+- /* 118 */ KEY_L3, /* Sun: Props */
+- /* 119 */ KEY_L5, /* Sun: Front */
+- /* 120 */ KEY_L1, /* Sun: Stop */
+- /* 121 */ KEY_L2, /* Sun: Again */
+- /* 122 */ KEY_L4, /* Sun: Undo */
+- /* 123 */ KEY_L10, /* Sun: Cut */
+- /* 124 */ KEY_L6, /* Sun: Copy */
+- /* 125 */ KEY_L8, /* Sun: Paste */
+- /* 126 */ KEY_L9, /* Sun: Find */
+- /* 127 */ KEY_Mute, /* Sun: AudioMute */
+- /* 128 */ KEY_AudioRaise, /* Sun: AudioRaise */
+- /* 129 */ KEY_AudioLower, /* Sun: AudioLower */
+- /* 130 */ KEY_NOTUSED,
+- /* 131 */ KEY_NOTUSED,
+- /* 132 */ KEY_NOTUSED,
+- /* 133 */ KEY_NOTUSED,
+- /* 134 */ KEY_NOTUSED,
+- /* 135 */ KEY_BSlash2, /* Sun Japanese Kbd: Backslash / Underscore */
+- /* 136 */ KEY_XFER, /* Sun Japanese Kbd: Henkan Mode */
+- /* 137 */ KEY_Yen, /* Sun Japanese Kbd: Yen / Brokenbar */
+- /* 138 */ KEY_Kanji, /* Sun Japanese Kbd: Kanji */
+- /* 139 */ KEY_Execute, /* Sun Japanese Kbd: Execute */
+- /* 140 */ KEY_NOTUSED,
+- /* 141 */ KEY_NOTUSED,
+- /* 142 */ KEY_NOTUSED,
+- /* 143 */ KEY_NOTUSED,
+- /* 144 */ KEY_NOTUSED,
+- /* 145 */ KEY_NOTUSED,
+- /* 146 */ KEY_NOTUSED,
+- /* 147 */ KEY_NOTUSED,
+- /* 148 */ KEY_NOTUSED,
+- /* 149 */ KEY_NOTUSED,
+- /* 150 */ KEY_NOTUSED,
+- /* 151 */ KEY_NOTUSED,
+- /* 152 */ KEY_NOTUSED,
+- /* 153 */ KEY_NOTUSED,
+- /* 154 */ KEY_NOTUSED,
+- /* 155 */ KEY_NOTUSED,
+- /* 156 */ KEY_NOTUSED,
+- /* 157 */ KEY_NOTUSED,
+- /* 158 */ KEY_NOTUSED,
+- /* 159 */ KEY_NOTUSED,
+- /* 160 */ KEY_NOTUSED,
+- /* 161 */ KEY_NOTUSED,
+- /* 162 */ KEY_NOTUSED,
+- /* 163 */ KEY_NOTUSED,
+- /* 164 */ KEY_NOTUSED,
+- /* 165 */ KEY_NOTUSED,
+- /* 166 */ KEY_NOTUSED,
+- /* 167 */ KEY_NOTUSED,
+- /* 168 */ KEY_NOTUSED,
+- /* 169 */ KEY_NOTUSED,
+- /* 170 */ KEY_NOTUSED,
+- /* 171 */ KEY_NOTUSED,
+- /* 172 */ KEY_NOTUSED,
+- /* 173 */ KEY_NOTUSED,
+- /* 174 */ KEY_NOTUSED,
+- /* 175 */ KEY_NOTUSED,
+- /* 176 */ KEY_NOTUSED,
+- /* 177 */ KEY_NOTUSED,
+- /* 178 */ KEY_NOTUSED,
+- /* 179 */ KEY_NOTUSED,
+- /* 180 */ KEY_NOTUSED,
+- /* 181 */ KEY_NOTUSED,
+- /* 182 */ KEY_NOTUSED,
+- /* 183 */ KEY_NOTUSED,
+- /* 184 */ KEY_NOTUSED,
+- /* 185 */ KEY_NOTUSED,
+- /* 186 */ KEY_NOTUSED,
+- /* 187 */ KEY_NOTUSED,
+- /* 188 */ KEY_NOTUSED,
+- /* 189 */ KEY_NOTUSED,
+- /* 190 */ KEY_NOTUSED,
+- /* 191 */ KEY_NOTUSED,
+- /* 192 */ KEY_NOTUSED,
+- /* 193 */ KEY_NOTUSED,
+- /* 194 */ KEY_NOTUSED,
+- /* 195 */ KEY_NOTUSED,
+- /* 196 */ KEY_NOTUSED,
+- /* 197 */ KEY_NOTUSED,
+- /* 198 */ KEY_NOTUSED,
+- /* 199 */ KEY_NOTUSED,
+- /* 200 */ KEY_NOTUSED,
+- /* 201 */ KEY_NOTUSED,
+- /* 202 */ KEY_NOTUSED,
+- /* 203 */ KEY_NOTUSED,
+- /* 204 */ KEY_NOTUSED,
+- /* 205 */ KEY_NOTUSED,
+- /* 206 */ KEY_NOTUSED,
+- /* 207 */ KEY_NOTUSED,
+- /* 208 */ KEY_NOTUSED,
+- /* 209 */ KEY_NOTUSED,
+- /* 210 */ KEY_NOTUSED,
+- /* 211 */ KEY_NOTUSED,
+- /* 212 */ KEY_NOTUSED,
+- /* 213 */ KEY_NOTUSED,
+- /* 214 */ KEY_NOTUSED,
+- /* 215 */ KEY_NOTUSED,
+- /* 216 */ KEY_NOTUSED,
+- /* 217 */ KEY_NOTUSED,
+- /* 218 */ KEY_NOTUSED,
+- /* 219 */ KEY_NOTUSED,
+- /* 220 */ KEY_NOTUSED,
+- /* 221 */ KEY_NOTUSED,
+- /* 222 */ KEY_NOTUSED,
+- /* 223 */ KEY_NOTUSED,
+- /* 224 */ KEY_LCtrl, /* Left Control */
+- /* 225 */ KEY_ShiftL, /* Left Shift */
+- /* 226 */ KEY_Alt, /* Left Alt */
+- /* 227 */ KEY_LMeta, /* Left Meta */
+- /* 228 */ KEY_RCtrl, /* Right Control */
+- /* 229 */ KEY_ShiftR, /* Right Shift */
+- /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
+- /* 231 */ KEY_RMeta, /* Right Meta */
+-};
+-
+-#endif /* KB_USB */
+-
+-_X_HIDDEN const unsigned char *
+-sunGetKbdMapping(int ktype) {
+-#if defined(KB_USB)
+- if (ktype == KB_USB)
+- return usbmap;
+- else
+-#endif
+- return map;
+-}
+-
+-
+-/*
+- * sunPostKbdEvent --
+- * Translate the raw hardware Firm_event into an XEvent, and tell DIX
+- * about it. KeyCode preprocessing and so on is done ...
+- *
+- * Most of the Solaris stuff has whacked Panix/PC98 support in the
+- * interests of simplicity - DWH 8/30/99
+- */
+-
+-_X_HIDDEN void
+-sunPostKbdEvent(int sun_ktype, Firm_event *event)
+-{
+- Bool down;
+- KeyClassRec *keyc = ((DeviceIntPtr)xf86Info.pKeyboard)->key;
+- Bool updateLeds = FALSE;
+- xEvent kevent;
+- KeySym *keysym;
+- int keycode;
+- static int lockkeys = 0;
+-
+- /* Give down a value */
+- if (event->value == VKEY_DOWN)
+- down = TRUE;
+- else
+- down = FALSE;
+-
+-
+-#if defined(KB_USB)
+- if(sun_ktype == KB_USB)
+- keycode = usbmap[event->id];
+- else
+-#endif
+- keycode = map[event->id];
+-
+- /*
+- * and now get some special keysequences
+- */
+-
+-#ifdef XKB
+- if (((xf86Info.ddxSpecialKeys == SKWhenNeeded) &&
+- (!xf86Info.ActionKeyBindingsSet)) ||
+- noXkbExtension || (xf86Info.ddxSpecialKeys == SKAlways))
+-#endif
+- {
+- if (!(ModifierDown(ShiftMask)) &&
+- ((ModifierDown(ControlMask | AltMask)) ||
+- (ModifierDown(ControlMask | AltLangMask))))
+- {
+- switch (keycode) {
+- /*
+- * The idea here is to pass the scancode down to a list of
+- * registered routines. There should be some standard conventions
+- * for processing certain keys.
+- */
+- case KEY_BackSpace:
+- xf86ProcessActionEvent(ACTION_TERMINATE, NULL);
+- break;
+-
+- /*
+- * Check grabs
+- */
+- case KEY_KP_Divide:
+- xf86ProcessActionEvent(ACTION_DISABLEGRAB, NULL);
+- break;
+- case KEY_KP_Multiply:
+- xf86ProcessActionEvent(ACTION_CLOSECLIENT, NULL);
+- break;
+-
+- /*
+- * Video mode switches
+- */
+- case KEY_KP_Minus: /* Keypad - */
+- if (down) xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
+- if (!xf86Info.dontZoom) return;
+- break;
+-
+- case KEY_KP_Plus: /* Keypad + */
+- if (down) xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
+- if (!xf86Info.dontZoom) return;
+- break;
+- }
+- }
+- }
+-
+- /*
+- * Now map the scancodes to real X-keycodes ...
+- */
+- if (keycode == KEY_NOTUSED) {
+- xf86MsgVerb(X_INFO, 0,
+- "raw code %d mapped to KEY_NOTUSED -- please report\n", event->id);
+- return;
+- }
+- if (keycode == KEY_UNKNOWN) {
+- xf86MsgVerb(X_INFO, 0,
+- "raw code %d mapped to KEY_UNKNOWN -- please report\n", event->id);
+- return;
+- }
+- keycode += MIN_KEYCODE;
+- keysym = keyc->curKeySyms.map +
+- (keyc->curKeySyms.mapWidth *
+- (keycode - keyc->curKeySyms.minKeyCode));
+-
+-#ifdef XKB
+- if (noXkbExtension)
+-#endif
+- {
+- /*
+- * Toggle lock keys.
+- */
+-#define CAPSFLAG 0x01
+-#define NUMFLAG 0x02
+-#define SCROLLFLAG 0x04
+-#define MODEFLAG 0x08
+-
+- if (down) {
+- /*
+- * Handle the KeyPresses of the lock keys.
+- */
+-
+- switch (keysym[0]) {
+-
+- case XK_Caps_Lock:
+- if (lockkeys & CAPSFLAG) {
+- lockkeys &= ~CAPSFLAG;
+- return;
+- }
+- lockkeys |= CAPSFLAG;
+- updateLeds = TRUE;
+- xf86Info.capsLock = down;
+- break;
+-
+- case XK_Num_Lock:
+- if (lockkeys & NUMFLAG) {
+- lockkeys &= ~NUMFLAG;
+- return;
+- }
+- lockkeys |= NUMFLAG;
+- updateLeds = TRUE;
+- xf86Info.numLock = down;
+- break;
+-
+- case XK_Scroll_Lock:
+- if (lockkeys & SCROLLFLAG) {
+- lockkeys &= ~SCROLLFLAG;
+- return;
+- }
+- lockkeys |= SCROLLFLAG;
+- updateLeds = TRUE;
+- xf86Info.scrollLock = down;
+- break;
+- }
+- } else {
+- /*
+- * Handle the releases of the lock keys.
+- */
+-
+- switch (keysym[0]) {
+-
+- case XK_Caps_Lock:
+- if (lockkeys & CAPSFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.capsLock = down;
+- break;
+-
+- case XK_Num_Lock:
+- if (lockkeys & NUMFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.numLock = down;
+- break;
+-
+- case XK_Scroll_Lock:
+- if (lockkeys & SCROLLFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.scrollLock = down;
+- break;
+- }
+- }
+-
+- if (updateLeds)
+- xf86KbdLeds();
+-
+- /*
+- * If this keycode is not a modifier key, and its down initiate the
+- * autorepeate sequence. (Only necessary if not using XKB).
+- *
+- * If its not down, then reset the timer.
+- */
+- if (!keyc->modifierMap[keycode]) {
+- if (down) {
+- startautorepeat(keycode);
+- } else {
+- TimerFree(sunTimer);
+- sunTimer = NULL;
+- }
+- }
+- }
+-
+- xf86Info.lastEventTime =
+- kevent.u.keyButtonPointer.time =
+- GetTimeInMillis();
+-
+- /*
+- * And now send these prefixes ...
+- * NOTE: There cannot be multiple Mode_Switch keys !!!!
+- */
+-
+- ENQUEUE(&kevent, keycode, (down ? KeyPress : KeyRelease), XE_KEYBOARD);
+-}
+-
+-
+-
+-/*
+- * Autorepeat stuff
+- */
+-
+-void
+-startautorepeat(long keycode)
+-{
+- sunTimer = TimerSet(sunTimer, /* Timer */
+- 0, /* Flags */
+- xf86Info.kbdDelay, /* millis */
+- processautorepeat, /* callback */
+- (pointer) keycode); /* arg for timer */
+-}
+-
+-CARD32
+-processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg)
+-{
+- xEvent kevent;
+- int keycode;
+-
+- keycode = (long)arg;
+-
+- xf86Info.lastEventTime =
+- kevent.u.keyButtonPointer.time =
+- GetTimeInMillis();
+-
+- /*
+- * Repeat a key by faking a KeyRelease, and a KeyPress event in rapid
+- * succession
+- */
+-
+- ENQUEUE(&kevent, keycode, KeyRelease, XE_KEYBOARD);
+- ENQUEUE(&kevent, keycode, KeyPress, XE_KEYBOARD);
+-
+- /* And return the appropriate value so we get rescheduled */
+- return xf86Info.kbdRate;
+-}
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdMap.c xf86-input-keyboard/src/sun_kbdMap.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbdMap.c 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbdMap.c 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,671 @@
++/*
++ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
++ * Copyright 1993 by David Dawes <dawes@xfree86.org>
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the names of Thomas Roell and David Dawes not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. Thomas Roell and David Dawes make no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
++ * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
++ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
++ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <X11/Xfuncproto.h>
++#include <X11/Sunkeysym.h>
++#include "atKeynames.h"
++#include "xf86OSKbd.h"
++#include "xf86Keymap.h"
++#include "sun_kbd.h"
++
++#include <sys/kbd.h>
++
++/* Map the Solaris keycodes to the "XFree86" keycodes. */
++
++/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
++#define KEY_Kanji 0x82
++#define KEY_Execute 0x83
++
++static unsigned char sunmap[256] = {
++#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
++ KEY_NOTUSED, /* 0 */
++ KEY_Tilde, /* 1 */
++ KEY_1, /* 2 */
++ KEY_2, /* 3 */
++ KEY_3, /* 4 */
++ KEY_4, /* 5 */
++ KEY_5, /* 6 */
++ KEY_6, /* 7 */
++ KEY_7, /* 8 */
++ KEY_8, /* 9 */
++ KEY_9, /* 10 */
++ KEY_0, /* 11 */
++ KEY_Minus, /* 12 */
++ KEY_Equal, /* 13 */
++ 0x7D, /*KEY_P_YEN*/ /* 14 */
++ KEY_BackSpace, /* 15 */
++ KEY_Tab, /* 16 */
++ KEY_Q, /* 17 */
++ KEY_W, /* 18 */
++ KEY_E, /* 19 */
++ KEY_R, /* 20 */
++ KEY_T, /* 21 */
++ KEY_Y, /* 22 */
++ KEY_U, /* 23 */
++ KEY_I, /* 24 */
++ KEY_O, /* 25 */
++ KEY_P, /* 26 */
++ KEY_LBrace, /* 27 */
++ KEY_RBrace, /* 28 */
++ KEY_BSlash, /* 29 */
++ KEY_CapsLock, /* 30 */
++ KEY_A, /* 31 */
++ KEY_S, /* 32 */
++ KEY_D, /* 33 */
++ KEY_F, /* 34 */
++ KEY_G, /* 35 */
++ KEY_H, /* 36 */
++ KEY_J, /* 37 */
++ KEY_K, /* 38 */
++ KEY_L, /* 39 */
++ KEY_SemiColon, /* 40 */
++ KEY_Quote, /* 41 */
++ KEY_UNKNOWN, /* 42 */
++ KEY_Enter, /* 43 */
++ KEY_ShiftL, /* 44 */
++ KEY_Less, /* 45 */
++ KEY_Z, /* 46 */
++ KEY_X, /* 47 */
++ KEY_C, /* 48 */
++ KEY_V, /* 49 */
++ KEY_B, /* 50 */
++ KEY_N, /* 51 */
++ KEY_M, /* 52 */
++ KEY_Comma, /* 53 */
++ KEY_Period, /* 54 */
++ KEY_Slash, /* 55 */
++ KEY_BSlash2, /* 56 */
++ KEY_ShiftR, /* 57 */
++ KEY_LCtrl, /* 58 */
++ KEY_LMeta, /* 59 */
++ KEY_Alt, /* 60 */
++ KEY_Space, /* 61 */
++ KEY_AltLang, /* 62 */
++ KEY_RMeta, /* 63 */
++ KEY_RCtrl, /* 64 */
++ KEY_Menu, /* 65 */
++ KEY_UNKNOWN, /* 66 */
++ KEY_UNKNOWN, /* 67 */
++ KEY_UNKNOWN, /* 68 */
++ KEY_UNKNOWN, /* 69 */
++ KEY_UNKNOWN, /* 70 */
++ KEY_UNKNOWN, /* 71 */
++ KEY_UNKNOWN, /* 72 */
++ KEY_UNKNOWN, /* 73 */
++ KEY_UNKNOWN, /* 74 */
++ KEY_Insert, /* 75 */
++ KEY_Delete, /* 76 */
++ KEY_UNKNOWN, /* 77 */
++ KEY_UNKNOWN, /* 78 */
++ KEY_Left, /* 79 */
++ KEY_Home, /* 80 */
++ KEY_End, /* 81 */
++ KEY_UNKNOWN, /* 82 */
++ KEY_Up, /* 83 */
++ KEY_Down, /* 84 */
++ KEY_PgUp, /* 85 */
++ KEY_PgDown, /* 86 */
++ KEY_UNKNOWN, /* 87 */
++ KEY_UNKNOWN, /* 88 */
++ KEY_Right, /* 89 */
++ KEY_NumLock, /* 90 */
++ KEY_KP_7, /* 91 */
++ KEY_KP_4, /* 92 */
++ KEY_KP_1, /* 93 */
++ KEY_UNKNOWN, /* 94 */
++ KEY_KP_Divide, /* 95 */
++ KEY_KP_8, /* 96 */
++ KEY_KP_5, /* 97 */
++ KEY_KP_2, /* 98 */
++ KEY_KP_0, /* 99 */
++ KEY_KP_Multiply, /* 100 */
++ KEY_KP_9, /* 101 */
++ KEY_KP_6, /* 102 */
++ KEY_KP_3, /* 103 */
++ KEY_KP_Decimal, /* 104 */
++ KEY_KP_Minus, /* 105 */
++ KEY_KP_Plus, /* 106 */
++ KEY_UNKNOWN, /* 107 */
++ KEY_KP_Enter, /* 108 */
++ KEY_UNKNOWN, /* 109 */
++ KEY_Escape, /* 110 */
++ KEY_UNKNOWN, /* 111 */
++ KEY_F1, /* 112 */
++ KEY_F2, /* 113 */
++ KEY_F3, /* 114 */
++ KEY_F4, /* 115 */
++ KEY_F5, /* 116 */
++ KEY_F6, /* 117 */
++ KEY_F7, /* 118 */
++ KEY_F8, /* 119 */
++ KEY_F9, /* 120 */
++ KEY_F10, /* 121 */
++ KEY_F11, /* 122 */
++ KEY_F12, /* 123 */
++ KEY_Print, /* 124 */
++ KEY_ScrollLock, /* 125 */
++ KEY_Pause, /* 126 */
++ KEY_UNKNOWN, /* 127 */
++ KEY_UNKNOWN, /* 128 */
++ KEY_UNKNOWN, /* 129 */
++ KEY_UNKNOWN, /* 130 */
++ KEY_NFER, /* 131 */
++ KEY_XFER, /* 132 */
++ KEY_HKTG, /* 133 */
++ KEY_UNKNOWN, /* 134 */
++#elif defined(sparc) || defined(__sparc__)
++ KEY_UNKNOWN, /* 0x00 */
++ KEY_UNKNOWN, /* 0x01 */
++ KEY_UNKNOWN, /* 0x02 */
++ KEY_UNKNOWN, /* 0x03 */
++ KEY_UNKNOWN, /* 0x04 */
++ KEY_F1, /* 0x05 */
++ KEY_F2, /* 0x06 */
++ KEY_F10, /* 0x07 */
++ KEY_F3, /* 0x08 */
++ KEY_F11, /* 0x09 */
++ KEY_F4, /* 0x0A */
++ KEY_F12, /* 0x0B */
++ KEY_F5, /* 0x0C */
++ KEY_UNKNOWN, /* 0x0D */
++ KEY_F6, /* 0x0E */
++ KEY_UNKNOWN, /* 0x0F */
++ KEY_F7, /* 0x10 */
++ KEY_F8, /* 0x11 */
++ KEY_F9, /* 0x12 */
++ KEY_Alt, /* 0x13 */
++ KEY_Up, /* 0x14 */
++ KEY_Pause, /* 0x15 */
++ KEY_SysReqest, /* 0x16 */
++ KEY_ScrollLock, /* 0x17 */
++ KEY_Left, /* 0x18 */
++ KEY_UNKNOWN, /* 0x19 */
++ KEY_UNKNOWN, /* 0x1A */
++ KEY_Down, /* 0x1B */
++ KEY_Right, /* 0x1C */
++ KEY_Escape, /* 0x1D */
++ KEY_1, /* 0x1E */
++ KEY_2, /* 0x1F */
++ KEY_3, /* 0x20 */
++ KEY_4, /* 0x21 */
++ KEY_5, /* 0x22 */
++ KEY_6, /* 0x23 */
++ KEY_7, /* 0x24 */
++ KEY_8, /* 0x25 */
++ KEY_9, /* 0x26 */
++ KEY_0, /* 0x27 */
++ KEY_Minus, /* 0x28 */
++ KEY_Equal, /* 0x29 */
++ KEY_Tilde, /* 0x2A */
++ KEY_BackSpace, /* 0x2B */
++ KEY_Insert, /* 0x2C */
++ KEY_UNKNOWN, /* 0x2D */
++ KEY_KP_Divide, /* 0x2E */
++ KEY_KP_Multiply, /* 0x2F */
++ KEY_UNKNOWN, /* 0x30 */
++ KEY_UNKNOWN, /* 0x31 */
++ KEY_KP_Decimal, /* 0x32 */
++ KEY_UNKNOWN, /* 0x33 */
++ KEY_Home, /* 0x34 */
++ KEY_Tab, /* 0x35 */
++ KEY_Q, /* 0x36 */
++ KEY_W, /* 0x37 */
++ KEY_E, /* 0x38 */
++ KEY_R, /* 0x39 */
++ KEY_T, /* 0x3A */
++ KEY_Y, /* 0x3B */
++ KEY_U, /* 0x3C */
++ KEY_I, /* 0x3D */
++ KEY_O, /* 0x3E */
++ KEY_P, /* 0x3F */
++ KEY_LBrace, /* 0x40 */
++ KEY_RBrace, /* 0x41 */
++ KEY_Delete, /* 0x42 */
++ KEY_UNKNOWN, /* 0x43 */
++ KEY_KP_7, /* 0x44 */
++ KEY_KP_8, /* 0x45 */
++ KEY_KP_9, /* 0x46 */
++ KEY_KP_Minus, /* 0x47 */
++ KEY_UNKNOWN, /* 0x48 */
++ KEY_UNKNOWN, /* 0x49 */
++ KEY_End, /* 0x4A */
++ KEY_UNKNOWN, /* 0x4B */
++ KEY_LCtrl, /* 0x4C */
++ KEY_A, /* 0x4D */
++ KEY_S, /* 0x4E */
++ KEY_D, /* 0x4F */
++ KEY_F, /* 0x50 */
++ KEY_G, /* 0x51 */
++ KEY_H, /* 0x52 */
++ KEY_J, /* 0x53 */
++ KEY_K, /* 0x54 */
++ KEY_L, /* 0x55 */
++ KEY_SemiColon, /* 0x56 */
++ KEY_Quote, /* 0x57 */
++ KEY_BSlash, /* 0x58 */
++ KEY_Enter, /* 0x59 */
++ KEY_KP_Enter, /* 0x5A */
++ KEY_KP_4, /* 0x5B */
++ KEY_KP_5, /* 0x5C */
++ KEY_KP_6, /* 0x5D */
++ KEY_KP_0, /* 0x5E */
++ KEY_UNKNOWN, /* 0x5F */
++ KEY_PgUp, /* 0x60 */
++ KEY_UNKNOWN, /* 0x61 */
++ KEY_NumLock, /* 0x62 */
++ KEY_ShiftL, /* 0x63 */
++ KEY_Z, /* 0x64 */
++ KEY_X, /* 0x65 */
++ KEY_C, /* 0x66 */
++ KEY_V, /* 0x67 */
++ KEY_B, /* 0x68 */
++ KEY_N, /* 0x69 */
++ KEY_M, /* 0x6A */
++ KEY_Comma, /* 0x6B */
++ KEY_Period, /* 0x6C */
++ KEY_Slash, /* 0x6D */
++ KEY_ShiftR, /* 0x6E */
++ KEY_UNKNOWN, /* 0x6F */
++ KEY_KP_1, /* 0x70 */
++ KEY_KP_2, /* 0x71 */
++ KEY_KP_3, /* 0x72 */
++ KEY_UNKNOWN, /* 0x73 */
++ KEY_UNKNOWN, /* 0x74 */
++ KEY_UNKNOWN, /* 0x75 */
++ KEY_UNKNOWN, /* 0x76 */
++ KEY_CapsLock, /* 0x77 */
++ KEY_LMeta, /* 0x78 */
++ KEY_Space, /* 0x79 */
++ KEY_RMeta, /* 0x7A */
++ KEY_PgDown, /* 0x7B */
++ KEY_UNKNOWN, /* 0x7C */
++ KEY_KP_Plus, /* 0x7D */
++ KEY_UNKNOWN, /* 0x7E */
++ KEY_UNKNOWN, /* 0x7F */
++#endif
++ /* The rest default to KEY_UNKNOWN */
++};
++
++static
++TransMapRec sunTransMap = {
++ 0,
++ (sizeof(sunmap)/sizeof(unsigned char)),
++ sunmap
++};
++
++#if defined(KB_USB)
++static unsigned char usbmap[256] = {
++/*
++ * partially taken from ../bsd/bsd_KbdMap.c
++ *
++ * added keycodes for Sun special keys (left function keys, audio control)
++ */
++ /* 0 */ KEY_NOTUSED,
++ /* 1 */ KEY_NOTUSED,
++ /* 2 */ KEY_NOTUSED,
++ /* 3 */ KEY_NOTUSED,
++ /* 4 */ KEY_A,
++ /* 5 */ KEY_B,
++ /* 6 */ KEY_C,
++ /* 7 */ KEY_D,
++ /* 8 */ KEY_E,
++ /* 9 */ KEY_F,
++ /* 10 */ KEY_G,
++ /* 11 */ KEY_H,
++ /* 12 */ KEY_I,
++ /* 13 */ KEY_J,
++ /* 14 */ KEY_K,
++ /* 15 */ KEY_L,
++ /* 16 */ KEY_M,
++ /* 17 */ KEY_N,
++ /* 18 */ KEY_O,
++ /* 19 */ KEY_P,
++ /* 20 */ KEY_Q,
++ /* 21 */ KEY_R,
++ /* 22 */ KEY_S,
++ /* 23 */ KEY_T,
++ /* 24 */ KEY_U,
++ /* 25 */ KEY_V,
++ /* 26 */ KEY_W,
++ /* 27 */ KEY_X,
++ /* 28 */ KEY_Y,
++ /* 29 */ KEY_Z,
++ /* 30 */ KEY_1, /* 1 !*/
++ /* 31 */ KEY_2, /* 2 @ */
++ /* 32 */ KEY_3, /* 3 # */
++ /* 33 */ KEY_4, /* 4 $ */
++ /* 34 */ KEY_5, /* 5 % */
++ /* 35 */ KEY_6, /* 6 ^ */
++ /* 36 */ KEY_7, /* 7 & */
++ /* 37 */ KEY_8, /* 8 * */
++ /* 38 */ KEY_9, /* 9 ( */
++ /* 39 */ KEY_0, /* 0 ) */
++ /* 40 */ KEY_Enter, /* Return */
++ /* 41 */ KEY_Escape, /* Escape */
++ /* 42 */ KEY_BackSpace, /* Backspace Delete */
++ /* 43 */ KEY_Tab, /* Tab */
++ /* 44 */ KEY_Space, /* Space */
++ /* 45 */ KEY_Minus, /* - _ */
++ /* 46 */ KEY_Equal, /* = + */
++ /* 47 */ KEY_LBrace, /* [ { */
++ /* 48 */ KEY_RBrace, /* ] } */
++ /* 49 */ KEY_BSlash, /* \ | */
++ /* 50 */ KEY_BSlash, /* \ _ # ~ on some keyboards */
++ /* 51 */ KEY_SemiColon, /* ; : */
++ /* 52 */ KEY_Quote, /* ' " */
++ /* 53 */ KEY_Tilde, /* ` ~ */
++ /* 54 */ KEY_Comma, /* , < */
++ /* 55 */ KEY_Period, /* . > */
++ /* 56 */ KEY_Slash, /* / ? */
++ /* 57 */ KEY_CapsLock, /* Caps Lock */
++ /* 58 */ KEY_F1, /* F1 */
++ /* 59 */ KEY_F2, /* F2 */
++ /* 60 */ KEY_F3, /* F3 */
++ /* 61 */ KEY_F4, /* F4 */
++ /* 62 */ KEY_F5, /* F5 */
++ /* 63 */ KEY_F6, /* F6 */
++ /* 64 */ KEY_F7, /* F7 */
++ /* 65 */ KEY_F8, /* F8 */
++ /* 66 */ KEY_F9, /* F9 */
++ /* 67 */ KEY_F10, /* F10 */
++ /* 68 */ KEY_F11, /* F11 */
++ /* 69 */ KEY_F12, /* F12 */
++ /* 70 */ KEY_Print, /* PrintScrn SysReq */
++ /* 71 */ KEY_ScrollLock, /* Scroll Lock */
++ /* 72 */ KEY_Pause, /* Pause Break */
++ /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
++ /* 74 */ KEY_Home, /* Home */
++ /* 75 */ KEY_PgUp, /* Page Up */
++ /* 76 */ KEY_Delete, /* Delete */
++ /* 77 */ KEY_End, /* End */
++ /* 78 */ KEY_PgDown, /* Page Down */
++ /* 79 */ KEY_Right, /* Right Arrow */
++ /* 80 */ KEY_Left, /* Left Arrow */
++ /* 81 */ KEY_Down, /* Down Arrow */
++ /* 82 */ KEY_Up, /* Up Arrow */
++ /* 83 */ KEY_NumLock, /* Num Lock */
++ /* 84 */ KEY_KP_Divide, /* Keypad / */
++ /* 85 */ KEY_KP_Multiply, /* Keypad * */
++ /* 86 */ KEY_KP_Minus, /* Keypad - */
++ /* 87 */ KEY_KP_Plus, /* Keypad + */
++ /* 88 */ KEY_KP_Enter, /* Keypad Enter */
++ /* 89 */ KEY_KP_1, /* Keypad 1 End */
++ /* 90 */ KEY_KP_2, /* Keypad 2 Down */
++ /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
++ /* 92 */ KEY_KP_4, /* Keypad 4 Left */
++ /* 93 */ KEY_KP_5, /* Keypad 5 */
++ /* 94 */ KEY_KP_6, /* Keypad 6 */
++ /* 95 */ KEY_KP_7, /* Keypad 7 Home */
++ /* 96 */ KEY_KP_8, /* Keypad 8 Up */
++ /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
++ /* 98 */ KEY_KP_0, /* Keypad 0 Ins */
++ /* 99 */ KEY_KP_Decimal, /* Keypad . Del */
++ /* 100 */ KEY_Less, /* < > on some keyboards */
++ /* 101 */ KEY_Menu, /* Menu */
++ /* 102 */ KEY_Power, /* Sun: Power */
++ /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
++ /* 104 */ KEY_NOTUSED,
++ /* 105 */ KEY_NOTUSED,
++ /* 106 */ KEY_NOTUSED,
++ /* 107 */ KEY_NOTUSED,
++ /* 108 */ KEY_NOTUSED,
++ /* 109 */ KEY_NOTUSED,
++ /* 110 */ KEY_NOTUSED,
++ /* 111 */ KEY_NOTUSED,
++ /* 112 */ KEY_NOTUSED,
++ /* 113 */ KEY_NOTUSED,
++ /* 114 */ KEY_NOTUSED,
++ /* 115 */ KEY_NOTUSED,
++ /* 116 */ KEY_L7, /* Sun: Open */
++ /* 117 */ KEY_Help, /* Sun: Help */
++ /* 118 */ KEY_L3, /* Sun: Props */
++ /* 119 */ KEY_L5, /* Sun: Front */
++ /* 120 */ KEY_L1, /* Sun: Stop */
++ /* 121 */ KEY_L2, /* Sun: Again */
++ /* 122 */ KEY_L4, /* Sun: Undo */
++ /* 123 */ KEY_L10, /* Sun: Cut */
++ /* 124 */ KEY_L6, /* Sun: Copy */
++ /* 125 */ KEY_L8, /* Sun: Paste */
++ /* 126 */ KEY_L9, /* Sun: Find */
++ /* 127 */ KEY_Mute, /* Sun: AudioMute */
++ /* 128 */ KEY_AudioRaise, /* Sun: AudioRaise */
++ /* 129 */ KEY_AudioLower, /* Sun: AudioLower */
++ /* 130 */ KEY_NOTUSED,
++ /* 131 */ KEY_NOTUSED,
++ /* 132 */ KEY_NOTUSED,
++ /* 133 */ KEY_NOTUSED,
++ /* 134 */ KEY_NOTUSED,
++ /* 135 */ KEY_BSlash2, /* Sun Japanese Kbd: Backslash / Underscore */
++ /* 136 */ KEY_XFER, /* Sun Japanese Kbd: Henkan Mode */
++ /* 137 */ KEY_Yen, /* Sun Japanese Kbd: Yen / Brokenbar */
++ /* 138 */ KEY_Kanji, /* Sun Japanese Kbd: Kanji */
++ /* 139 */ KEY_Execute, /* Sun Japanese Kbd: Execute */
++ /* 140 */ KEY_NOTUSED,
++ /* 141 */ KEY_NOTUSED,
++ /* 142 */ KEY_NOTUSED,
++ /* 143 */ KEY_NOTUSED,
++ /* 144 */ KEY_NOTUSED,
++ /* 145 */ KEY_NOTUSED,
++ /* 146 */ KEY_NOTUSED,
++ /* 147 */ KEY_NOTUSED,
++ /* 148 */ KEY_NOTUSED,
++ /* 149 */ KEY_NOTUSED,
++ /* 150 */ KEY_NOTUSED,
++ /* 151 */ KEY_NOTUSED,
++ /* 152 */ KEY_NOTUSED,
++ /* 153 */ KEY_NOTUSED,
++ /* 154 */ KEY_NOTUSED,
++ /* 155 */ KEY_NOTUSED,
++ /* 156 */ KEY_NOTUSED,
++ /* 157 */ KEY_NOTUSED,
++ /* 158 */ KEY_NOTUSED,
++ /* 159 */ KEY_NOTUSED,
++ /* 160 */ KEY_NOTUSED,
++ /* 161 */ KEY_NOTUSED,
++ /* 162 */ KEY_NOTUSED,
++ /* 163 */ KEY_NOTUSED,
++ /* 164 */ KEY_NOTUSED,
++ /* 165 */ KEY_NOTUSED,
++ /* 166 */ KEY_NOTUSED,
++ /* 167 */ KEY_NOTUSED,
++ /* 168 */ KEY_NOTUSED,
++ /* 169 */ KEY_NOTUSED,
++ /* 170 */ KEY_NOTUSED,
++ /* 171 */ KEY_NOTUSED,
++ /* 172 */ KEY_NOTUSED,
++ /* 173 */ KEY_NOTUSED,
++ /* 174 */ KEY_NOTUSED,
++ /* 175 */ KEY_NOTUSED,
++ /* 176 */ KEY_NOTUSED,
++ /* 177 */ KEY_NOTUSED,
++ /* 178 */ KEY_NOTUSED,
++ /* 179 */ KEY_NOTUSED,
++ /* 180 */ KEY_NOTUSED,
++ /* 181 */ KEY_NOTUSED,
++ /* 182 */ KEY_NOTUSED,
++ /* 183 */ KEY_NOTUSED,
++ /* 184 */ KEY_NOTUSED,
++ /* 185 */ KEY_NOTUSED,
++ /* 186 */ KEY_NOTUSED,
++ /* 187 */ KEY_NOTUSED,
++ /* 188 */ KEY_NOTUSED,
++ /* 189 */ KEY_NOTUSED,
++ /* 190 */ KEY_NOTUSED,
++ /* 191 */ KEY_NOTUSED,
++ /* 192 */ KEY_NOTUSED,
++ /* 193 */ KEY_NOTUSED,
++ /* 194 */ KEY_NOTUSED,
++ /* 195 */ KEY_NOTUSED,
++ /* 196 */ KEY_NOTUSED,
++ /* 197 */ KEY_NOTUSED,
++ /* 198 */ KEY_NOTUSED,
++ /* 199 */ KEY_NOTUSED,
++ /* 200 */ KEY_NOTUSED,
++ /* 201 */ KEY_NOTUSED,
++ /* 202 */ KEY_NOTUSED,
++ /* 203 */ KEY_NOTUSED,
++ /* 204 */ KEY_NOTUSED,
++ /* 205 */ KEY_NOTUSED,
++ /* 206 */ KEY_NOTUSED,
++ /* 207 */ KEY_NOTUSED,
++ /* 208 */ KEY_NOTUSED,
++ /* 209 */ KEY_NOTUSED,
++ /* 210 */ KEY_NOTUSED,
++ /* 211 */ KEY_NOTUSED,
++ /* 212 */ KEY_NOTUSED,
++ /* 213 */ KEY_NOTUSED,
++ /* 214 */ KEY_NOTUSED,
++ /* 215 */ KEY_NOTUSED,
++ /* 216 */ KEY_NOTUSED,
++ /* 217 */ KEY_NOTUSED,
++ /* 218 */ KEY_NOTUSED,
++ /* 219 */ KEY_NOTUSED,
++ /* 220 */ KEY_NOTUSED,
++ /* 221 */ KEY_NOTUSED,
++ /* 222 */ KEY_NOTUSED,
++ /* 223 */ KEY_NOTUSED,
++ /* 224 */ KEY_LCtrl, /* Left Control */
++ /* 225 */ KEY_ShiftL, /* Left Shift */
++ /* 226 */ KEY_Alt, /* Left Alt */
++ /* 227 */ KEY_LMeta, /* Left Meta */
++ /* 228 */ KEY_RCtrl, /* Right Control */
++ /* 229 */ KEY_ShiftR, /* Right Shift */
++ /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
++ /* 231 */ KEY_RMeta, /* Right Meta */
++};
++
++static
++TransMapRec usbTransMap = {
++ 0,
++ (sizeof(usbmap)/sizeof(unsigned char)),
++ usbmap
++};
++#endif /* KB_USB */
++
++_X_HIDDEN void
++KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
++{
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++ const unsigned char *keymap;
++ int i;
++ KeySym *k;
++
++#if defined(KB_USB)
++ if (priv->ktype == KB_USB)
++ pKbd->scancodeMap = &usbTransMap;
++ else
++#endif
++ pKbd->scancodeMap = &sunTransMap;
++
++ /*
++ * Add Sun keyboard keysyms to default map
++ */
++#define map_for_key(k,c) map[(k * GLYPHS_PER_KEY) + c]
++ map_for_key(KEY_Kanji, 0) = XK_Kanji;
++ map_for_key(KEY_Execute, 0) = XK_Execute;
++ map_for_key(KEY_Power, 0) = SunXK_PowerSwitch;
++ map_for_key(KEY_Power, 1) = SunXK_PowerSwitchShift;
++ map_for_key(KEY_Mute, 0) = SunXK_AudioMute;
++ map_for_key(KEY_Mute, 1) = SunXK_VideoDegauss;
++ map_for_key(KEY_AudioLower, 0) = SunXK_AudioLowerVolume;
++ map_for_key(KEY_AudioLower, 1) = SunXK_VideoLowerBrightness;
++ map_for_key(KEY_AudioRaise, 0) = SunXK_AudioRaiseVolume;
++ map_for_key(KEY_AudioRaise, 1) = SunXK_VideoRaiseBrightness;
++ map_for_key(KEY_Help, 0) = XK_Help;
++ map_for_key(KEY_L1, 0) = XK_L1;
++ map_for_key(KEY_L2, 0) = XK_L2;
++ map_for_key(KEY_L3, 0) = XK_L3;
++ map_for_key(KEY_L4, 0) = XK_L4;
++ map_for_key(KEY_L5, 0) = XK_L5;
++ map_for_key(KEY_L6, 0) = XK_L6;
++ map_for_key(KEY_L7, 0) = XK_L7;
++ map_for_key(KEY_L8, 0) = XK_L8;
++ map_for_key(KEY_L9, 0) = XK_L9;
++ map_for_key(KEY_L10, 0) = XK_L10;
++ map_for_key(KEY_F11, 0) = SunXK_F36;
++ map_for_key(KEY_F12, 0) = SunXK_F37;
++ map_for_key(KEY_Menu, 0) = XK_Multi_key;
++
++ /*
++ * compute the modifier map
++ */
++ for (i = 0; i < MAP_LENGTH; i++)
++ pModMap[i] = NoSymbol; /* make sure it is restored */
++
++ for (k = map, i = MIN_KEYCODE;
++ i < (NUM_KEYCODES + MIN_KEYCODE);
++ i++, k += 4)
++ {
++ switch(*k) {
++
++ case XK_Shift_L:
++ case XK_Shift_R:
++ pModMap[i] = ShiftMask;
++ break;
++
++ case XK_Control_L:
++ case XK_Control_R:
++ pModMap[i] = ControlMask;
++ break;
++
++ case XK_Caps_Lock:
++ pModMap[i] = LockMask;
++ break;
++
++ case XK_Alt_L:
++ case XK_Alt_R:
++ pModMap[i] = AltMask;
++ break;
++
++ case XK_Num_Lock:
++ pModMap[i] = NumLockMask;
++ break;
++
++ case XK_Scroll_Lock:
++ pModMap[i] = ScrollLockMask;
++ break;
++
++ /* kana support */
++ case XK_Kana_Lock:
++ case XK_Kana_Shift:
++ pModMap[i] = KanaMask;
++ break;
++
++ /* alternate toggle for multinational support */
++ case XK_Mode_switch:
++ pModMap[i] = AltLangMask;
++ break;
++
++ }
++ }
++
++ pKeySyms->map = map;
++ pKeySyms->mapWidth = GLYPHS_PER_KEY;
++ pKeySyms->minKeyCode = MIN_KEYCODE;
++ pKeySyms->maxKeyCode = MAX_KEYCODE;
++}
+diff -ruN xf86-input-keyboard-1.2.0/src/xf86Keymap.h xf86-input-keyboard/src/xf86Keymap.h
+--- xf86-input-keyboard-1.2.0/src/xf86Keymap.h 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/xf86Keymap.h 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,308 @@
++
++/*
++ * Copyright (c) 1994-2002 by The XFree86 Project, Inc.
++ *
++ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
++ *
++ * Except as contained in this notice, the name of the copyright holder(s)
++ * and author(s) shall not be used in advertising or otherwise to promote
++ * the sale, use or other dealings in this Software without prior written
++ * authorization from the copyright holder(s) and author(s).
++ */
++
++/*
++ *
++ * For Scancodes see notes in atKeynames.h !!!!
++ *
++ */
++/* $XConsortium: xf86Keymap.h /main/14 1996/02/21 17:38:47 kaleb $ */
++
++#include "xorg-server.h"
++
++static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = {
++
++ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
++ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
++ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
++ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
++ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
++ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
++ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
++ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
++ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
++ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
++ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
++ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,NoSymbol, NoSymbol,
++ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
++ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
++ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
++ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
++ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
++ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
++ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
++ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
++ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
++ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
++ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
++ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
++ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
++ /* 0x4c */ XK_KP_Begin, XK_KP_5, NoSymbol, NoSymbol,
++ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
++ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
++ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
++ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
++ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
++ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
++ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
++ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x59 */ XK_Home, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5a */ XK_Up, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5b */ XK_Prior, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5c */ XK_Left, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5d */ XK_Begin, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5e */ XK_Right, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5f */ XK_End, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x60 */ XK_Down, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x61 */ XK_Next, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x62 */ XK_Insert, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x63 */ XK_Delete, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
++ /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6e */ XK_F13, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6f */ XK_F14, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x70 */ XK_F15, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x71 */ XK_F16, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x72 */ XK_F17, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x73 */ XK_backslash, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x79 */ XK_Henkan, XK_Mode_switch, NoSymbol, NoSymbol,
++ /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7b */ XK_Muhenkan, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7d */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++};
++
++#if !defined(Lynx) && \
++ !defined(__UNIXOS2__) && \
++ !defined(__mips__) && \
++ !defined(linux) && \
++ !defined(CSRG_BASED) && \
++ !defined(__CYGWIN__) && \
++ !defined(__SOL8__) && \
++ (!defined(sun) || defined(i386))
++
++static KeySym map84[NUM_KEYCODES * GLYPHS_PER_KEY] = {
++ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
++ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
++ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
++ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
++ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
++ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
++ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
++ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
++ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
++ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
++ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
++ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x0f */ XK_Tab, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
++ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
++ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
++ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
++ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
++ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
++ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
++ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
++ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
++ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
++ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
++ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
++ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
++ /* 0x4c */ NoSymbol, XK_KP_5, NoSymbol, NoSymbol,
++ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
++ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
++ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
++ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
++ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
++ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
++ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
++ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x59 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x60 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x61 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x62 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x63 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
++ /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x70 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x71 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x72 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x73 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x79 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++};
++#endif
+diff -ruN xf86-input-keyboard-1.2.0/src/xf86OSKbd.h xf86-input-keyboard/src/xf86OSKbd.h
+--- xf86-input-keyboard-1.2.0/src/xf86OSKbd.h 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/xf86OSKbd.h 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,132 @@
++/*
++ * Copyright (c) 2002-2003 by The XFree86 Project, Inc.
++ *
++ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
++ *
++ * Except as contained in this notice, the name of the copyright holder(s)
++ * and author(s) shall not be used in advertising or otherwise to promote
++ * the sale, use or other dealings in this Software without prior written
++ * authorization from the copyright holder(s) and author(s).
++ *
++ * Author: Ivan Pascal.
++ */
++
++#include "xf86Xinput.h"
++
++Bool ATScancode(InputInfoPtr pInfo, int *scanCode);
++
++/* Public interface to OS-specific keyboard support. */
++
++typedef int (*KbdInitProc)(InputInfoPtr pInfo, int what);
++typedef int (*KbdOnProc)(InputInfoPtr pInfo, int what);
++typedef int (*KbdOffProc)(InputInfoPtr pInfo, int what);
++typedef void (*BellProc)(InputInfoPtr pInfo,
++ int loudness, int pitch, int duration);
++typedef void (*SetLedsProc)(InputInfoPtr pInfo, int leds);
++typedef int (*GetLedsProc)(InputInfoPtr pInfo);
++typedef void (*SetKbdRepeatProc)(InputInfoPtr pInfo, char rad);
++typedef void (*KbdGetMappingProc)(InputInfoPtr pInfo,
++ KeySymsPtr pKeySyms, CARD8* pModMap);
++typedef int (*GetSpecialKeyProc)(InputInfoPtr pInfo, int scanCode);
++typedef Bool (*SpecialKeyProc)(InputInfoPtr pInfo,
++ int key, Bool down, int modifiers);
++typedef int (*RemapScanCodeProc)(InputInfoPtr pInfo, int *scanCode);
++typedef Bool (*OpenKeyboardProc)(InputInfoPtr pInfo);
++typedef void (*PostEventProc)(InputInfoPtr pInfo,
++ unsigned int key, Bool down);
++typedef struct {
++ int begin;
++ int end;
++ unsigned char *map;
++} TransMapRec, *TransMapPtr;
++
++typedef struct {
++ KbdInitProc KbdInit;
++ KbdOnProc KbdOn;
++ KbdOffProc KbdOff;
++ BellProc Bell;
++ SetLedsProc SetLeds;
++ GetLedsProc GetLeds;
++ SetKbdRepeatProc SetKbdRepeat;
++ KbdGetMappingProc KbdGetMapping;
++ RemapScanCodeProc RemapScanCode;
++ GetSpecialKeyProc GetSpecialKey;
++ SpecialKeyProc SpecialKey;
++
++ OpenKeyboardProc OpenKeyboard;
++ PostEventProc PostEvent;
++
++ int rate;
++ int delay;
++ int bell_pitch;
++ int bell_duration;
++ Bool autoRepeat;
++ unsigned long leds;
++ unsigned long xledsMask;
++ unsigned long keyLeds;
++ int scanPrefix;
++ Bool vtSwitchSupported;
++ Bool CustomKeycodes;
++ Bool noXkb;
++ Bool isConsole;
++ TransMapPtr scancodeMap;
++ TransMapPtr specialMap;
++
++ /* os specific */
++ pointer private;
++ int kbdType;
++ int consType;
++ int wsKbdType;
++ Bool sunKbd;
++ Bool Panix106;
++
++} KbdDevRec, *KbdDevPtr;
++
++typedef enum {
++ PROT_STD,
++ PROT_XQUEUE,
++ PROT_WSCONS,
++ PROT_USB,
++ PROT_UNKNOWN_KBD
++} KbdProtocolId;
++
++typedef struct {
++ const char *name;
++ KbdProtocolId id;
++} KbdProtocolRec;
++
++Bool xf86OSKbdPreInit(InputInfoPtr pInfo);
++
++/* Adjust this when the kbd interface changes. */
++
++/*
++ * History:
++ *
++ * 1.0.0 - Initial version.
++ */
++
++#define OS_KBD_VERSION_MAJOR 1
++#define OS_KBD_VERSION_MINOR 0
++#define OS_KBD_VERSION_PATCH 0
++
++#define OS_KBD_VERSION_CURRENT \
++ BUILTIN_INTERFACE_VERSION_NUMERIC(OS_KBD_VERSION_MAJOR, \
++ OS_KBD_VERSION_MINOR, \
++ OS_KBD_VERSION_PATCH)
++
diff --git a/abs/core-testing/xf86-input-magellan/PKGBUILD b/abs/core-testing/xf86-input-magellan/PKGBUILD
new file mode 100644
index 0000000..324c0be
--- /dev/null
+++ b/abs/core-testing/xf86-input-magellan/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-magellan
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org Magellan Space mouse input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('8a966d3b74dc2a801ff09b895037090c')
diff --git a/abs/core-testing/xf86-input-magictouch/PKGBUILD b/abs/core-testing/xf86-input-magictouch/PKGBUILD
new file mode 100644
index 0000000..fdd4a4a
--- /dev/null
+++ b/abs/core-testing/xf86-input-magictouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-magictouch
+pkgver=1.0.0.5
+pkgrel=5
+pkgdesc="X.org magictouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d23f2791cd634ef85b7cc5e9da8f8407')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-microtouch/PKGBUILD b/abs/core-testing/xf86-input-microtouch/PKGBUILD
new file mode 100644
index 0000000..be6b234
--- /dev/null
+++ b/abs/core-testing/xf86-input-microtouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-microtouch
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org microtouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('9843fbea6cc0c4129e96ce9a6c893cf6')
diff --git a/abs/core-testing/xf86-input-mouse/PKGBUILD b/abs/core-testing/xf86-input-mouse/PKGBUILD
new file mode 100644
index 0000000..e7b96a2
--- /dev/null
+++ b/abs/core-testing/xf86-input-mouse/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4397 2008-07-06 20:23:13Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-mouse
+pkgver=1.3.0
+pkgrel=1
+pkgdesc="X.org mouse input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg' 'xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('31a51b0e5ddc4fac19754f48a3adf881')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/xf86-input-mutouch/PKGBUILD b/abs/core-testing/xf86-input-mutouch/PKGBUILD
new file mode 100644
index 0000000..36da1e3
--- /dev/null
+++ b/abs/core-testing/xf86-input-mutouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-mutouch
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org mutouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('98ae915c67cabf0e6d40a425dbdbe10b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-palmax/PKGBUILD b/abs/core-testing/xf86-input-palmax/PKGBUILD
new file mode 100644
index 0000000..ff5c4b2
--- /dev/null
+++ b/abs/core-testing/xf86-input-palmax/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-palmax
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org palmax input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0959dbf7972dfb95f56e4bd3f56447cf')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-penmount/PKGBUILD b/abs/core-testing/xf86-input-penmount/PKGBUILD
new file mode 100644
index 0000000..062401f
--- /dev/null
+++ b/abs/core-testing/xf86-input-penmount/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-penmount
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org penmount input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('268af4dceda544d8c815b9b7e87d4536')
diff --git a/abs/core-testing/xf86-input-spaceorb/PKGBUILD b/abs/core-testing/xf86-input-spaceorb/PKGBUILD
new file mode 100644
index 0000000..7291085
--- /dev/null
+++ b/abs/core-testing/xf86-input-spaceorb/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-spaceorb
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org spaceorb input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('c7fb96281874733480ba86a5a0a3b5af')
diff --git a/abs/core-testing/xf86-input-summa/PKGBUILD b/abs/core-testing/xf86-input-summa/PKGBUILD
new file mode 100644
index 0000000..9b0c9ef
--- /dev/null
+++ b/abs/core-testing/xf86-input-summa/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-summa
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org summa input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('b37a432fd87bb9f46d011622d6fce6b3')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-tek4957/PKGBUILD b/abs/core-testing/xf86-input-tek4957/PKGBUILD
new file mode 100644
index 0000000..2ea7a0f
--- /dev/null
+++ b/abs/core-testing/xf86-input-tek4957/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-tek4957
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org tek4957 input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('be8a4bd474ad6c85b93f66dd6fcfa6ee')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-ur98/PKGBUILD b/abs/core-testing/xf86-input-ur98/PKGBUILD
new file mode 100644
index 0000000..8fcafc0
--- /dev/null
+++ b/abs/core-testing/xf86-input-ur98/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-ur98
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org ur98 input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3cf8928411458baaa9e726e51772c550')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-input-vmmouse/PKGBUILD b/abs/core-testing/xf86-input-vmmouse/PKGBUILD
new file mode 100644
index 0000000..55eed97
--- /dev/null
+++ b/abs/core-testing/xf86-input-vmmouse/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-vmmouse
+pkgver=12.4.3
+pkgrel=1
+pkgdesc="X.org VMWare Mouse input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('44730af795616ed4d4a0cd9a3a07935d')
diff --git a/abs/core-testing/xf86-input-void/PKGBUILD b/abs/core-testing/xf86-input-void/PKGBUILD
new file mode 100644
index 0000000..d2d5b2b
--- /dev/null
+++ b/abs/core-testing/xf86-input-void/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-void
+pkgver=1.1.0
+pkgrel=2
+pkgdesc="X.org void input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('ea72a92d43b95f413347df96d6a73933')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-amd/PKGBUILD b/abs/core-testing/xf86-video-amd/PKGBUILD
new file mode 100644
index 0000000..1bf6f62
--- /dev/null
+++ b/abs/core-testing/xf86-video-amd/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=xf86-video-amd
+pkgver=2.7.7.6
+pkgrel=1
+pkgdesc="X.org AMD/Geode LX & NX video driver"
+# there is no 64bit geode yet!
+arch=(i686)
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+license=('custom:amd')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST} \
+ --enable-visibility
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('e839cc4552032b7bd44beb72e575980f')
diff --git a/abs/core-testing/xf86-video-apm/PKGBUILD b/abs/core-testing/xf86-video-apm/PKGBUILD
new file mode 100644
index 0000000..7808dbc
--- /dev/null
+++ b/abs/core-testing/xf86-video-apm/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3262 2008-06-21 18:38:40Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-apm
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="X.org Alliance ProMotion video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4f78650d79656dc803a720049d65682e')
diff --git a/abs/core-testing/xf86-video-ark/PKGBUILD b/abs/core-testing/xf86-video-ark/PKGBUILD
new file mode 100644
index 0000000..cbe38bd
--- /dev/null
+++ b/abs/core-testing/xf86-video-ark/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3260 2008-06-21 18:36:28Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-ark
+pkgver=0.7.0
+pkgrel=1
+pkgdesc="X.org ark video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('6826c556ebe9a1248cbc7f7edd44f956')
diff --git a/abs/core-testing/xf86-video-ati/PKGBUILD b/abs/core-testing/xf86-video-ati/PKGBUILD
new file mode 100644
index 0000000..c95c021
--- /dev/null
+++ b/abs/core-testing/xf86-video-ati/PKGBUILD
@@ -0,0 +1,51 @@
+# $Id: PKGBUILD 3261 2008-06-21 18:38:23Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-ati
+pkgver=6.8.0
+pkgrel=4
+_mesaver="7.0.3"
+pkgdesc="X.org ati video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4' 'imake' 'mesa>=7.0.3'
+ 'glproto>=1.4.9' 'xf86driproto' 'diffutils')
+groups=('xorg-video-drivers')
+options=('!libtool')
+license=('custom')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ # currently commented, see FS#7590 for details
+ #echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = r128 radeon r200 r300" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('3c97c7925ebf4162eeb3463e23adc0e3'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core-testing/xf86-video-chips/PKGBUILD b/abs/core-testing/xf86-video-chips/PKGBUILD
new file mode 100644
index 0000000..60161c3
--- /dev/null
+++ b/abs/core-testing/xf86-video-chips/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3258 2008-06-21 18:34:07Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-chips
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="X.org Chips and Technologies video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(glibc)
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('0fec6bee65383790485d917247a61629')
diff --git a/abs/core-testing/xf86-video-cirrus/PKGBUILD b/abs/core-testing/xf86-video-cirrus/PKGBUILD
new file mode 100644
index 0000000..02aecfc
--- /dev/null
+++ b/abs/core-testing/xf86-video-cirrus/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3247 2008-06-21 18:15:30Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-cirrus
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org Cirrus Logic video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('bc28fdedaee9059180e2534f9dbcd2f6')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-dummy/PKGBUILD b/abs/core-testing/xf86-video-dummy/PKGBUILD
new file mode 100644
index 0000000..51763f6
--- /dev/null
+++ b/abs/core-testing/xf86-video-dummy/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-dummy
+pkgver=0.2.0
+pkgrel=4
+pkgdesc="X.org dummy video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('22b7cc20a33443cbd218bd2521850cfe')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-fbdev/PKGBUILD b/abs/core-testing/xf86-video-fbdev/PKGBUILD
new file mode 100644
index 0000000..c5d835c
--- /dev/null
+++ b/abs/core-testing/xf86-video-fbdev/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-fbdev
+pkgver=0.3.1
+pkgrel=4
+pkgdesc="X.org framebuffer video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('9ae810c6c6c3c9713a67866fe794d4ff')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-glint/PKGBUILD b/abs/core-testing/xf86-video-glint/PKGBUILD
new file mode 100644
index 0000000..15c0dce
--- /dev/null
+++ b/abs/core-testing/xf86-video-glint/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-glint
+pkgver=1.1.1
+pkgrel=5
+pkgdesc="X.org GLINT/Permedia video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.3.99.2' 'xf86driproto' 'mesa')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('2cf49f701024a145bd25aff9da11d479')
diff --git a/abs/core-testing/xf86-video-i128/PKGBUILD b/abs/core-testing/xf86-video-i128/PKGBUILD
new file mode 100644
index 0000000..fcf2c06
--- /dev/null
+++ b/abs/core-testing/xf86-video-i128/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-i128
+pkgver=1.2.1
+pkgrel=4
+pkgdesc="X.org Number 9 I128 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d0080732eaa15059b0a953aa3522185a')
diff --git a/abs/core-testing/xf86-video-i740/PKGBUILD b/abs/core-testing/xf86-video-i740/PKGBUILD
new file mode 100644
index 0000000..9101847
--- /dev/null
+++ b/abs/core-testing/xf86-video-i740/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-i740
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org Intel i740 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('57302e225060a7286ae1a970c87a589b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-imstt/PKGBUILD b/abs/core-testing/xf86-video-imstt/PKGBUILD
new file mode 100644
index 0000000..6ad7ed6
--- /dev/null
+++ b/abs/core-testing/xf86-video-imstt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-imstt
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org Integrated Micro Solutions Twin Turbo video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('94853ca217238ed1f568a10cbeebe057')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-intel/PKGBUILD b/abs/core-testing/xf86-video-intel/PKGBUILD
new file mode 100644
index 0000000..106ec41
--- /dev/null
+++ b/abs/core-testing/xf86-video-intel/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 3246 2008-06-21 18:13:57Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=xf86-video-intel
+pkgver=2.3.2
+pkgrel=1
+pkgdesc="X.org Intel i810/i830/i915 video drivers"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('intel-dri' 'libdrm')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'xorg-util-macros' 'xf86driproto>=2.0.4' 'glproto>=1.4.9' 'mesa>=7.0.3')
+
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('fef32ffc428d9d565ab10b338ce17855')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ rm -f ${startdir}/pkg/usr/lib/xorg/modules/drivers/i810_drv.so
+ rm -f ${startdir}/pkg/usr/share/man/man4/i810.4*
+}
diff --git a/abs/core-testing/xf86-video-mga/PKGBUILD b/abs/core-testing/xf86-video-mga/PKGBUILD
new file mode 100644
index 0000000..1d07b1f
--- /dev/null
+++ b/abs/core-testing/xf86-video-mga/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 4390 2008-07-06 20:07:05Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-mga
+pkgver=1.4.9
+pkgrel=1
+pkgdesc="X.org mga video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3' \
+ 'xf86driproto' 'glproto>=1.4.9')
+options=('!libtool' 'force')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('11066b84b949cd04300ec819c9c51532'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = mga" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-neomagic/PKGBUILD b/abs/core-testing/xf86-video-neomagic/PKGBUILD
new file mode 100644
index 0000000..cbe614d
--- /dev/null
+++ b/abs/core-testing/xf86-video-neomagic/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3245 2008-06-21 18:12:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-neomagic
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org neomagic video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a72f57fca4f4dff9a2c82eb1fe7456f4')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-nv/PKGBUILD b/abs/core-testing/xf86-video-nv/PKGBUILD
new file mode 100644
index 0000000..ad4b2ee
--- /dev/null
+++ b/abs/core-testing/xf86-video-nv/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 1904 2008-05-22 18:19:19Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-nv
+pkgver=2.1.9
+pkgrel=1
+pkgdesc="X.org nv video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+license=('custom')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('c6b7e52fa18455c22eb040b8d2575ce5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core-testing/xf86-video-radeonhd/PKGBUILD b/abs/core-testing/xf86-video-radeonhd/PKGBUILD
new file mode 100644
index 0000000..7173afd
--- /dev/null
+++ b/abs/core-testing/xf86-video-radeonhd/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 861 2008-04-23 21:44:36Z juergen $
+# Maintainer: <juergen@archlinux.org>
+pkgname=xf86-video-radeonhd
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="Experimental Radeon HD video driver for r500 and r600 ATI cards"
+arch=(i686 x86_64)
+url="http://wiki.x.org/wiki/radeonhd"
+license=('custom')
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server' 'diffutils')
+options=('!libtool')
+conflicts=('xf86-video-radeonhd-git')
+replaces=('xf86-video-radeonhd-git')
+groups=('xorg-video-drivers')
+source=(ftp://ftp.freedesktop.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2)
+md5sums=('9db15e1f1f891f514ca72dd9a3cc360a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE || return 1
+}
diff --git a/abs/core-testing/xf86-video-rendition/PKGBUILD b/abs/core-testing/xf86-video-rendition/PKGBUILD
new file mode 100644
index 0000000..20fba5f
--- /dev/null
+++ b/abs/core-testing/xf86-video-rendition/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-rendition
+pkgver=4.1.3
+pkgrel=4
+pkgdesc="X.org Rendition video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('a8b97feccb32184820d5856fe78d34db')
diff --git a/abs/core-testing/xf86-video-s3/PKGBUILD b/abs/core-testing/xf86-video-s3/PKGBUILD
new file mode 100644
index 0000000..c7aefc2
--- /dev/null
+++ b/abs/core-testing/xf86-video-s3/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-s3
+pkgver=0.5.0
+pkgrel=4
+pkgdesc="X.org S3 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d95ab6445cab477f39adfbbc81006f67')
diff --git a/abs/core-testing/xf86-video-s3virge/PKGBUILD b/abs/core-testing/xf86-video-s3virge/PKGBUILD
new file mode 100644
index 0000000..4a27540
--- /dev/null
+++ b/abs/core-testing/xf86-video-s3virge/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3244 2008-06-21 18:11:55Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-s3virge
+pkgver=1.10.1
+pkgrel=1
+pkgdesc="X.org S3 Virge video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('expat>=2.0' 'libdrm')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('4a293047e988d4ea1e9e96d3b5793f43'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = s3v" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-savage/PKGBUILD b/abs/core-testing/xf86-video-savage/PKGBUILD
new file mode 100644
index 0000000..99e5324
--- /dev/null
+++ b/abs/core-testing/xf86-video-savage/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3243 2008-06-21 18:08:53Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-savage
+pkgver=2.2.1
+pkgrel=1
+pkgdesc="X.org savage video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3' 'xf86driproto' 'glproto>=1.4.9')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('62b8aba48b54eaefeae87df502bf219c'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}
+
+ cd configs
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = savage" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-siliconmotion/PKGBUILD b/abs/core-testing/xf86-video-siliconmotion/PKGBUILD
new file mode 100644
index 0000000..0e785ed
--- /dev/null
+++ b/abs/core-testing/xf86-video-siliconmotion/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-siliconmotion
+pkgver=1.5.1
+pkgrel=4
+pkgdesc="X.org siliconmotion video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ee35d7714ce44a2b5ac7ad7b7b7dd75a')
diff --git a/abs/core-testing/xf86-video-sis/PKGBUILD b/abs/core-testing/xf86-video-sis/PKGBUILD
new file mode 100644
index 0000000..02c519d
--- /dev/null
+++ b/abs/core-testing/xf86-video-sis/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-sis
+pkgver=0.9.4
+pkgrel=3
+pkgdesc="X.org SiS video driver"
+mesaver="7.0.4"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'xf86driproto' 'mesa>=7.0.3rc1' 'glproto>=1.4.9')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://voxel.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.gz)
+md5sums=('43f12cabf770b06170cdd1cdaafdc50f'
+ '909afa3a01ae31478d363837681415ac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = sis" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-sisusb/PKGBUILD b/abs/core-testing/xf86-video-sisusb/PKGBUILD
new file mode 100644
index 0000000..43992ab
--- /dev/null
+++ b/abs/core-testing/xf86-video-sisusb/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-sisusb
+pkgver=0.8.1
+pkgrel=4
+pkgdesc="X.org SiS USB video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('cbd669507e4aa35e468905f09b546333')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-tdfx/PKGBUILD b/abs/core-testing/xf86-video-tdfx/PKGBUILD
new file mode 100644
index 0000000..82a75af
--- /dev/null
+++ b/abs/core-testing/xf86-video-tdfx/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3259 2008-06-21 18:34:20Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-tdfx
+pkgver=1.4.0
+pkgrel=1
+pkgdesc="X.org tdfx video driver"
+_mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('expat>=2.0' 'libdrm>=2.3.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'mesa>=7.0.3')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}
+ cd configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = tdfx" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('b13132f24683ef759bfb0c1db5096496'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core-testing/xf86-video-trident/PKGBUILD b/abs/core-testing/xf86-video-trident/PKGBUILD
new file mode 100644
index 0000000..5616e12
--- /dev/null
+++ b/abs/core-testing/xf86-video-trident/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3257 2008-06-21 18:32:30Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-trident
+pkgver=1.3.0
+pkgrel=2
+pkgdesc="X.org Trident video driver"
+_mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'mesa>=7.0.3' 'xf86driproto')
+groups=('xorg-video-drivers')
+options=(!libtool)
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}
+ cd configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = trident" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('e89799579d0cf3858362bd751469e0bf'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core-testing/xf86-video-tseng/PKGBUILD b/abs/core-testing/xf86-video-tseng/PKGBUILD
new file mode 100644
index 0000000..6863c46
--- /dev/null
+++ b/abs/core-testing/xf86-video-tseng/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-tseng
+pkgver=1.1.1
+pkgrel=4
+pkgdesc="X.org tseng video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('488aa9c3ec7a95e6589afa4b50bec8b4')
diff --git a/abs/core-testing/xf86-video-unichrome/PKGBUILD b/abs/core-testing/xf86-video-unichrome/PKGBUILD
new file mode 100644
index 0000000..2f618ca
--- /dev/null
+++ b/abs/core-testing/xf86-video-unichrome/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3256 2008-06-21 18:31:47Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-unichrome
+pkgver=0.2.6
+pkgrel=8
+pkgdesc="Unichrome video drivers for X.Org"
+arch=(i686 x86_64)
+url="http://unichrome.sf.net/"
+depends=('unichrome-dri>=7.0.3')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'xorg-util-macros' 'xf86driproto' \
+ 'glproto' 'mesa>=7.0.3' 'autoconf' 'automake' 'libtool')
+options=('!libtool')
+conflicts=('xf86-video-via' 'openchrome')
+groups=('xorg-video-drivers')
+source=(http://downloads.sf.net/unichrome/${pkgname}-${pkgver}.tar.gz
+ fix-defines.patch)
+md5sums=('fd81a739ae8145bb9729fa9665ef426c' '84142497ed91048bb2d0d082ce8a0229')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/fix-defines.patch || return 1
+ ./autogen.sh --prefix=/usr \
+ --enable-dri
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-unichrome/fix-defines.patch b/abs/core-testing/xf86-video-unichrome/fix-defines.patch
new file mode 100644
index 0000000..5b9f040
--- /dev/null
+++ b/abs/core-testing/xf86-video-unichrome/fix-defines.patch
@@ -0,0 +1,68 @@
+From: Luc Verhaegen <libv@skynet.be>
+Date: Wed, 6 Dec 2006 23:16:01 +0000 (+0100)
+Subject: Fix build issues due to hard uint32_t and Bool #defines.
+X-Git-Url: http://gitweb.freedesktop.org/?p=users/libv/xf86-video-unichrome.git;a=commitdiff;h=13c214345787a3340f230e77b7770b7c2d115c85
+
+Fix build issues due to hard uint32_t and Bool #defines.
+
+Ported from xf86-video_via, which was by Matthias Hopf.
+---
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -70,6 +70,7 @@ sdkdir=$(pkg-config --variable=sdkdir xo
+
+ # Checks for header files.
+ AC_HEADER_STDC
++AC_CHECK_HEADERS([inttypes.h])
+
+ if test "$DRI" != no; then
+ AC_CHECK_FILE([${sdkdir}/dri.h],
+--- a/src/via_dri.h
++++ b/src/via_dri.h
+@@ -35,7 +35,7 @@
+ #define VIA_DRIDDX_VERSION_MINOR 0
+ #define VIA_DRIDDX_VERSION_PATCH 0
+
+-#ifndef XFree86Server
++#if !defined(XFree86Server) && !defined(_XTYPEDEF_BOOL)
+ typedef int Bool;
+ #endif
+
+--- a/src/via_drmclient.h
++++ b/src/via_drmclient.h
+@@ -27,7 +27,13 @@
+ #include "drm.h"
+ #include "xf86drm.h"
+
+-typedef CARD32 uint32_t;
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#else
++# ifndef uint32_t
++# define uint32_t CARD32
++# endif
++#endif
+
+ #ifdef X_NEED_DRMLOCK
+ #define drm_hw_lock_t drmLock
+--- a/src/via_video.c
++++ b/src/via_video.c
+@@ -367,7 +367,7 @@ ViaSwovCopyDMA(VIAPtr pVia, struct ViaMe
+ if (error) {
+ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: DMA copy sheduling failed: %d.\n",
+ __FUNCTION__, error);
+- xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08lX\n",
++ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08X\n",
+ __func__, blit.mem_addr, blit.fb_addr);
+ if (new_buf)
+ xfree(new_buf);
+@@ -391,7 +391,7 @@ ViaSwovCopyDMA(VIAPtr pVia, struct ViaMe
+ if (error) {
+ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: DMA copy sync failed: %d - %d\n",
+ __FUNCTION__, error, -EAGAIN);
+- xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08lX\n",
++ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08X\n",
+ __func__, blit.mem_addr, blit.fb_addr);
+ return FALSE;
+ }
diff --git a/abs/core-testing/xf86-video-v4l/PKGBUILD b/abs/core-testing/xf86-video-v4l/PKGBUILD
new file mode 100644
index 0000000..dc8ba80
--- /dev/null
+++ b/abs/core-testing/xf86-video-v4l/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-v4l
+pkgver=0.1.1
+pkgrel=4
+pkgdesc="X.org v4l video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('69339c38eba2cebc357d67e7a755d734')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-vesa/COPYING b/abs/core-testing/xf86-video-vesa/COPYING
new file mode 100644
index 0000000..22b4b13
--- /dev/null
+++ b/abs/core-testing/xf86-video-vesa/COPYING
@@ -0,0 +1,24 @@
+Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.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
+CONECTIVA LINUX 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.
+
+Except as contained in this notice, the name of Conectiva Linux shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from
+Conectiva Linux.
diff --git a/abs/core-testing/xf86-video-vesa/PKGBUILD b/abs/core-testing/xf86-video-vesa/PKGBUILD
new file mode 100644
index 0000000..ed4acc7
--- /dev/null
+++ b/abs/core-testing/xf86-video-vesa/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 5566 2008-07-18 20:48:52Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-vesa
+pkgver=1.3.0
+pkgrel=6
+pkgdesc="X.org vesa video driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg' 'xorg-video-drivers')
+options=('!libtool' 'force')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ COPYING)
+md5sums=('4a307852f3b4850e436a41dab2a73676'
+ 'e5418e7a75e21268637984e70265e146')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xf86-video-vga/PKGBUILD b/abs/core-testing/xf86-video-vga/PKGBUILD
new file mode 100644
index 0000000..1ac84a7
--- /dev/null
+++ b/abs/core-testing/xf86-video-vga/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-vga
+pkgver=4.1.0
+pkgrel=4
+pkgdesc="X.org VGA 16 color video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('b93e5fe9757db779a75cd3ce97b9613d')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-vmware/PKGBUILD b/abs/core-testing/xf86-video-vmware/PKGBUILD
new file mode 100644
index 0000000..5992099
--- /dev/null
+++ b/abs/core-testing/xf86-video-vmware/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3242 2008-06-21 18:06:18Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-vmware
+pkgver=10.16.2
+pkgrel=1
+pkgdesc="X.org vmware video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'randrproto' 'renderproto' 'xextproto' 'xineramaproto' 'videoproto')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d79b660e1effb86628930e5c01989216')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86-video-voodoo/PKGBUILD b/abs/core-testing/xf86-video-voodoo/PKGBUILD
new file mode 100644
index 0000000..bbbc518
--- /dev/null
+++ b/abs/core-testing/xf86-video-voodoo/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-voodoo
+pkgver=1.1.1
+pkgrel=4
+pkgdesc="X.org voodoo video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('bc878e795688b49a595b355482d27174')
diff --git a/abs/core-testing/xf86dgaproto/PKGBUILD b/abs/core-testing/xf86dgaproto/PKGBUILD
new file mode 100644
index 0000000..b24270f
--- /dev/null
+++ b/abs/core-testing/xf86dgaproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86dgaproto
+pkgver=2.0.3
+pkgrel=1
+pkgdesc="X11 Direct Graphics Access extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('42fdcebc66efac02ab4beec2b1b0ad6e')
diff --git a/abs/core-testing/xf86miscproto/PKGBUILD b/abs/core-testing/xf86miscproto/PKGBUILD
new file mode 100644
index 0000000..ca025a5
--- /dev/null
+++ b/abs/core-testing/xf86miscproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86miscproto
+pkgver=0.9.2
+pkgrel=1
+pkgdesc="X11 XFree86-Miscellaneous extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('acae8edeb05a406f7f60bcbb218a8f1d')
+sha1sums=('bfaf893bb97085c79ef84e9911c97d11b2a4fdbe')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xf86vidmodeproto/PKGBUILD b/abs/core-testing/xf86vidmodeproto/PKGBUILD
new file mode 100644
index 0000000..378f02d
--- /dev/null
+++ b/abs/core-testing/xf86vidmodeproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86vidmodeproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Video Mode extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f00844a63d6e76b69eb0eb5e41eed843')
+sha1sums=('4a228958879eb06206d13f4f09ec902f837fb8dd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xfsprogs/PKGBUILD b/abs/core-testing/xfsprogs/PKGBUILD
new file mode 100644
index 0000000..9750021
--- /dev/null
+++ b/abs/core-testing/xfsprogs/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 3596 2008-06-25 23:37:31Z paul $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=xfsprogs
+pkgver=2.9.8
+pkgrel=10
+pkgdesc="XFS filesystem utilities"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://oss.sgi.com/projects/xfs/"
+groups=('base')
+depends=(e2fsprogs)
+options=('!makeflags' '!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_${pkgver}-1.tar.gz)
+md5sums=('f32ab3282c3e02ce25128f7a6c2d5157')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ #sed -i '/autoconf/d' Makefile
+
+ if [ "$CARCH" == "x86_64" ]; then
+ export OPTIMIZER="-march=x86-64 -O1" # for x86_64
+ else export OPTIMIZER="-march=${CARCH} -O1" # for i686
+fi
+
+ export DEBUG=-DNDEBUG
+ make || return 1
+ make DIST_ROOT=${startdir}/pkg install install-dev
+}
diff --git a/abs/core-testing/xineramaproto/PKGBUILD b/abs/core-testing/xineramaproto/PKGBUILD
new file mode 100644
index 0000000..f1c69e0
--- /dev/null
+++ b/abs/core-testing/xineramaproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xineramaproto
+pkgver=1.1.2
+pkgrel=1
+pkgdesc="X11 Xinerama extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('1cc292c562962ad0ad3a253cae68c632')
+sha1sums=('d09ef306ffc0d058120051d88dd64776fd0de0d5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xkeyboard-config/PKGBUILD b/abs/core-testing/xkeyboard-config/PKGBUILD
new file mode 100644
index 0000000..5b26253
--- /dev/null
+++ b/abs/core-testing/xkeyboard-config/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 7542 2008-08-02 21:31:59Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+pkgname=xkeyboard-config
+pkgver=1.3
+pkgrel=1
+pkgdesc="X keyboard configuration files"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.freedesktop.org/wiki/Software/XKeyboardConfig"
+depends=('xorg-xkb-utils')
+makedepends=('perlxml' 'pkgconfig')
+provides=('xkbdata')
+replaces=('xkbdata')
+conflicts=('xkbdata')
+source=(http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-${pkgver}.tar.bz2)
+md5sums=('d9e9f69f9c6ef5c5a8255cfbe6a57d51')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --with-xkb-base=/usr/share/X11/xkb \
+ --with-xkb-rules-symlink=xorg \
+ --enable-compat-rules=yes || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ rm -f ${startdir}/pkg/usr/share/X11/xkb/compiled || return 1
+ install -m755 -d ${startdir}/pkg/var/lib/xkb
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xmltv/PKGBUILD b/abs/core-testing/xmltv/PKGBUILD
new file mode 100755
index 0000000..2583e94
--- /dev/null
+++ b/abs/core-testing/xmltv/PKGBUILD
@@ -0,0 +1,29 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=xmltv
+pkgver=0.5.51
+pkgrel=2
+pkgdesc="Set of utilities to download tv listings and format them in xml"
+arch=(i686 x86_64)
+url="http://xmltv.org/wiki/"
+license="GPL"
+depends=('perl-archive-zip' 'perl-date-manip' 'perl-file-slurp' 'perl-html-tree' \
+ 'perl-http-cache-transparent' 'perl-io-stringy' 'perl-xml-libxml' \
+ 'perl-lingua-en-numbers' 'perl-lingua-en-numbers-ordinate' 'perl-lingua-preferred' \
+ 'perl-soap-lite' 'perl-term-progressbar' 'perl-term-readkey' 'perl-text-bidi' \
+ 'perl-text-kakasi' 'perl-timedate' 'perl-tk-tablematrix' 'perl-unicode-string' \
+ 'perl-unicode-utf8simple' 'perl-www-mechanize' 'perl-xml-twig' 'perl-xml-writer')
+source=(http://downloads.sourceforge.net/xmltv/xmltv-${pkgver}.tar.bz2)
+md5sums=('b0b3f0d31b0e7fbc2f615024faedfbb7')
+
+build() {
+ cd $startdir/src/xmltv-${pkgver}
+ yes | perl Makefile.PL PREFIX=/usr INSTALLDIRS=vendor
+ make || return 1
+ make DESTDIR=$startdir/pkg PREFIX=/usr install
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+} \ No newline at end of file
diff --git a/abs/core-testing/xorg-apps/PKGBUILD b/abs/core-testing/xorg-apps/PKGBUILD
new file mode 100644
index 0000000..dae4b4e
--- /dev/null
+++ b/abs/core-testing/xorg-apps/PKGBUILD
@@ -0,0 +1,78 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-apps
+pkgver=1.0.3
+pkgrel=3
+pkgdesc="Various X.Org applications"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(libxcursor libxkbfile libpng libxft libfontenc libxaw)
+makedepends=(pkgconfig xbitmaps)
+
+source=(${url}/releases/individual/app/oclock-1.0.1.tar.bz2
+ ${url}/releases/individual/app/luit-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xclock-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xpr-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xwd-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xwud-1.0.1.tar.bz2
+ ${url}/releases/individual/app/x11perf-1.4.1.tar.bz2
+ ${url}/releases/individual/app/xbiff-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xclipboard-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xconsole-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xcursorgen-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xeyes-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xkill-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xload-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xlogo-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xmag-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmessage-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xcalc-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xman-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xedit-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmh-1.0.1.tar.bz2)
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ case "${i}" in
+ x11perf*)
+ sed -e 's|^LIBPATH = $(libdir)|LIBPATH = $(datadir)|' \
+ -i Makefile.* || return 1
+ ;;
+ xedit*)
+ sed -e 's|^XEDITDIR = ${libdir}|XEDITDIR = ${datadir}|' \
+ -i Makefile.* || return 1
+ ;;
+ esac
+ ./configure --prefix=/usr --disable-xprint \
+ --with-localealiasfile=/usr/share/X11/locale/locale.alias
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
+md5sums=('91f49547f9ed3cd0137c8b7c3183e360'
+ 'b01e4f71c20fc1c79ed727759c1df40c'
+ '6b930326f71993fb54b7203902b387cd'
+ '6b3a6896081f628bf5a2c9129417c86f'
+ '911addfb7fa402217ddac63e5c1d97c7'
+ '6e3c5d0297d88e890b6f5df31f73dd60'
+ 'fd06c8b8e3572a0e14af65a49e0dd7d1'
+ '404f5add4537d22dd109c33e518a5190'
+ '2c6ecedb10dc51adbb64c95f22fd99c2'
+ '0e1a3110bebabecc2897d67a973526b0'
+ '6fc90896b8c786cb1a2100b4167f7874'
+ '033f14f7c4e30d1f4edbb22d5ef86883'
+ 'f66d76abb0f75514ca32272e23cca757'
+ 'b41ed6b4bcfc9897366c27a94d2bf150'
+ '4c5482552f38a7d42398a694cc9b2ee6'
+ '7c6a783e42c88360ac31d259a864a19d'
+ 'b3674c3a00a089764d86aa94e257ccec'
+ 'd31a99795b9668f047aa11bf36df6df0'
+ '855f2dbfa2aff58b8b9cd6a1c1120fad'
+ 'c56160e93c24ddf17e69891ed50deb72'
+ '656bcbdd41818a8b5a9f7dba77a3eeba')
diff --git a/abs/core-testing/xorg-font-utils/PKGBUILD b/abs/core-testing/xorg-font-utils/PKGBUILD
new file mode 100644
index 0000000..a97db44
--- /dev/null
+++ b/abs/core-testing/xorg-font-utils/PKGBUILD
@@ -0,0 +1,54 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-font-utils
+pkgver=1.0.3
+pkgrel=3
+pkgdesc="X.Org font utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+options=('!libtool')
+depends=('libxfont' 'libfontenc' 'xproto')
+makedepends=('pkgconfig')
+replaces=('font-util')
+provides=('font-util')
+conflicts=('font-util')
+install=xorg-font-utils.install
+source=(${url}/releases/individual/app/bdftopcf-1.0.1.tar.bz2
+ ${url}/releases/individual/app/fonttosfnt-1.0.3.tar.bz2
+ ${url}/releases/individual/app/mkfontdir-1.0.3.tar.bz2
+ ${url}/releases/individual/app/mkfontscale-1.0.3.tar.bz2
+ ${url}/releases/individual/font/font-util-1.0.1.tar.bz2
+ http://people.redhat.com/yshao/ttmkfdir2.20021109.tar.bz2
+ ttmkfdir.patch
+ ttmkfdir_gcc43.patch)
+
+build() {
+ cd ${startdir}/src
+
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ if [ "${i}" = "ttmkfdir2" ]; then
+ patch -Np0 -i ${startdir}/src/ttmkfdir.patch || return 1
+ patch -Np1 -i ${startdir}/src/ttmkfdir_gcc43.patch || return 1
+ make || return 1
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 ttmkfdir ${startdir}/pkg/usr/bin/ || return 1
+ else
+ ./configure --prefix=/usr --with-mapdir=/usr/share/fonts/util
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ fi
+ popd
+ fi
+ done
+}
+md5sums=('9685fab33d39954ab8a0d22e0969d5a4'
+ 'b0ebd86029571239b9d7b0c61191b591'
+ '4d0f89a23f77e22f1671a77bf0898955'
+ '1d608771aca9695b828cec1e34178fd1'
+ 'b81535f78fe05732931f02841e5ca37b'
+ '79e0401393c9728865aa73bb2bd68dd4'
+ '099278628ad63631e872bc5590bade74'
+ '43cd6303d38dbbf36ba91d3a08430bb4')
diff --git a/abs/core-testing/xorg-font-utils/ttmkfdir.patch b/abs/core-testing/xorg-font-utils/ttmkfdir.patch
new file mode 100644
index 0000000..983c18b
--- /dev/null
+++ b/abs/core-testing/xorg-font-utils/ttmkfdir.patch
@@ -0,0 +1,86 @@
+--- encoding.cpp.orig Tue Mar 12 15:40:09 2002
++++ encoding.cpp Sun Mar 21 22:33:00 2004
+@@ -2,7 +2,7 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+-#include "freetype/freetype.h"
++#include <ft2build.h>
+
+ #include "ttmkfdir.h"
+ #include "encoding.h"
+
+--- encoding.h.orig Tue Mar 12 15:41:27 2002
++++ encoding.h Sun Mar 21 22:35:15 2004
+@@ -6,7 +6,8 @@
+ #include <map>
+ #include <string>
+
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
+
+ #include "util.h"
+
+--- ttf.h.orig Wed Mar 13 19:16:38 2002
++++ ttf.h Sun Mar 21 22:30:16 2004
+@@ -3,15 +3,18 @@
+ #define TTF_H__
+
+ #include <string>
+-#include "freetype/freetype.h"
+-#include "freetype/tttables.h"
+-#include "freetype/ftsnames.h"
+-#include "freetype/ttnameid.h"
+-#include "freetype/fterrors.h"
+-#include "freetype/ftmodule.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include FT_TRUETYPE_TABLES_H
++#include FT_SFNT_NAMES_H
++#include FT_TRUETYPE_IDS_H
++#include FT_ERRORS_H
++#include FT_MODULE_H
+
+ #include "util.h"
+ #include "encoding.h"
++
++using namespace std;
+
+ namespace ttf {
+
+--- Makefile.orig Thu Mar 14 14:03:49 2002
++++ Makefile Sun Jan 22 20:15:17 2006
+@@ -1,10 +1,7 @@
+-FREETYPE_BASE=/usr/include/freetype2
+-FREETYPE_INCL=-I$(FREETYPE_BASE)/.
+-FREETYPE_LIB=/usr/lib/libfreetype.so
+-
+-DEBUG=-ggdb
+-CXX=g++
+-CXXFLAGS=-Wall -pedantic $(FREETYPE_INCL) $(DEBUG)
++FREETYPE_INCL=`freetype-config --cflags`
++FREETYPE_LIB=`freetype-config --libs`
+
+-LDFLAGS=$(FREETYPE_LIB) $(DEBUG)
++CXXFLAGS+=$(FREETYPE_INCL)
++
++LDFLAGS+=$(FREETYPE_LIB)
+
+@@ -21,3 +18,3 @@
+ parser.cpp: encoding.l
+- flex -i -8 -o$@ $<
++ lex -i -8 -o$@ $<
+
+--- ttf.cpp.orig 2002-11-07 06:30:04.000000000 +0100
++++ ttf.cpp
+@@ -226,7 +226,7 @@ Face::FontFamilyName (void) const
+ for (i = 0; i < n; i++) {
+ if ((fterror = FT_Get_Sfnt_Name (face, i, &NamePtr)) != FT_Err_Ok) {
+ std::cout << "Warning: Can't SFNT name : " << FileName << "(" << fterror << ")" << std::endl;
+- return;
++ return "unknown";
+ };
+ platform = NamePtr.platform_id;
+ encoding = NamePtr.encoding_id;
+
diff --git a/abs/core-testing/xorg-font-utils/ttmkfdir_gcc43.patch b/abs/core-testing/xorg-font-utils/ttmkfdir_gcc43.patch
new file mode 100644
index 0000000..5dadb11
--- /dev/null
+++ b/abs/core-testing/xorg-font-utils/ttmkfdir_gcc43.patch
@@ -0,0 +1,8 @@
+--- ttmkfdir-3.0.9-orig/directory.cpp 2008-04-20 19:48:00.000000000 -0600
++++ ttmkfdir-3.0.9/directory.cpp 2008-04-20 19:48:39.000000000 -0600
+@@ -1,4 +1,5 @@
+ #include <cctype>
++#include <cstring>
+ #include <dirent.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
diff --git a/abs/core-testing/xorg-font-utils/xorg-font-utils.install b/abs/core-testing/xorg-font-utils/xorg-font-utils.install
new file mode 100644
index 0000000..a291dc6
--- /dev/null
+++ b/abs/core-testing/xorg-font-utils/xorg-font-utils.install
@@ -0,0 +1,8 @@
+# arg 1: the new package version
+post_install() {
+ ldconfig -r .
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/xorg-fonts-100dpi/PKGBUILD b/abs/core-testing/xorg-fonts-100dpi/PKGBUILD
new file mode 100644
index 0000000..1c3cb5f
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-100dpi/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-fonts-100dpi
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org 100dpi fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xorg-fonts-encodings' 'xorg-fonts-alias' 'xorg-font-utils' 'fontconfig')
+groups=('xorg')
+install=xfonts.install
+source=(${url}/releases/individual/font/font-adobe-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-adobe-utopia-100dpi-1.0.1.tar.bz2
+ ${url}/releases/individual/font/font-bh-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bh-lucidatypewriter-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bitstream-100dpi-1.0.0.tar.bz2)
+md5sums=('443acfe70e26716282f9068730fe92c4' '5d28a30efef966f8dbbaff9a6619f01a'\
+ 'e5592de74a5c04e3a2608800dd079197' 'c44d3f730564da465993e9292a33c235'\
+ '173352ddec3d26e2b91df1edcf1ae85b')
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-100dpi-1.0.0 font-*-100dpi-1.0.1; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/100dpi
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ done
+ rm -f ${startdir}/pkg/usr/share/fonts/100dpi/fonts.*
+}
+
diff --git a/abs/core-testing/xorg-fonts-100dpi/xfonts.install b/abs/core-testing/xorg-fonts-100dpi/xfonts.install
new file mode 100644
index 0000000..9400b64
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-100dpi/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/100dpi
+ mkfontdir /usr/share/fonts/100dpi
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/xorg-fonts-75dpi/PKGBUILD b/abs/core-testing/xorg-fonts-75dpi/PKGBUILD
new file mode 100644
index 0000000..435c14f
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-75dpi/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-fonts-75dpi
+pkgver=1.0.1
+pkgrel=2
+pkgdesc="X.org 75dpi fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig)
+groups=('xorg')
+install=xfonts.install
+source=(${url}/releases/individual/font/font-adobe-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-adobe-utopia-75dpi-1.0.1.tar.bz2
+ ${url}/releases/individual/font/font-bh-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bh-lucidatypewriter-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bitstream-75dpi-1.0.0.tar.bz2)
+md5sums=('813b5d3723c84388a938ab6732e1329c' 'dd912284e4750023f9682812532fa033'\
+ '6e51cd02f4ce32e1393e34ab17a9b211' 'fdd9be5b9db94ef363a33e39b7977e2b'\
+ 'beb476657d50d07d17eef7c325a5ed08')
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-75dpi-1.0.0 font-*-75dpi-1.0.1; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/75dpi
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ done
+ rm -f ${startdir}/pkg/usr/share/fonts/75dpi/fonts.*
+}
+
diff --git a/abs/core-testing/xorg-fonts-75dpi/xfonts.install b/abs/core-testing/xorg-fonts-75dpi/xfonts.install
new file mode 100644
index 0000000..997982b
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-75dpi/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/75dpi
+ mkfontdir /usr/share/fonts/75dpi
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/xorg-fonts-alias/PKGBUILD b/abs/core-testing/xorg-fonts-alias/PKGBUILD
new file mode 100644
index 0000000..41b431d
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-alias/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-alias
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org font alias files"
+url="http://xorg.freedesktop.org/"
+_xorg=X11R7.0
+_relname=font-alias
+arch=('i686' 'x86_64')
+source=(${url}/releases/${_xorg}/src/everything/${_relname}-${_xorg}-${pkgver}.tar.bz2)
+md5sums=('de7035b15ba7edc36f8685ab3c17a9cf')
+
+build() {
+ cd ${startdir}/src/${_relname}-${_xorg}-${pkgver}
+ ./configure --prefix=/usr \
+ --with-top-fontdir=/usr/share/fonts
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core-testing/xorg-fonts-encodings/PKGBUILD b/abs/core-testing/xorg-fonts-encodings/PKGBUILD
new file mode 100644
index 0000000..e0e3633
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-encodings/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-encodings
+pkgver=1.0.2
+pkgrel=2
+pkgdesc="X.org font encoding files"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xorg-font-utils')
+install="xorg-fonts-encodings.install"
+source=(${url}/releases/individual/font/encodings-${pkgver}.tar.bz2)
+md5sums=('11adda157b03d63fd61d95ad7ef00466')
+
+build() {
+ cd ${startdir}/src/encodings-${pkgver}
+ ./configure --prefix=/usr \
+ --with-encodingsdir=/usr/share/fonts/encodings
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core-testing/xorg-fonts-encodings/xorg-fonts-encodings.install b/abs/core-testing/xorg-fonts-encodings/xorg-fonts-encodings.install
new file mode 100644
index 0000000..37eac40
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-encodings/xorg-fonts-encodings.install
@@ -0,0 +1,16 @@
+# arg 1: the new package version
+post_install() {
+ echo -n "Regenerating font encodings... "
+ pushd usr/share/fonts/encodings &>/dev/null
+ mkfontscale -n -e "/usr/share/fonts/encodings" -e "/usr/share/fonts/encodings/large"
+ popd &>/dev/null
+ echo "done."
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/xorg-fonts-misc/PKGBUILD b/abs/core-testing/xorg-fonts-misc/PKGBUILD
new file mode 100644
index 0000000..6c51349
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-misc/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-misc
+pkgver=1.0.0
+pkgrel=3
+pkgdesc="X.org misc fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig)
+install=xfonts.install
+source=(${url}/releases/individual/font/font-arabic-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-cursor-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-daewoo-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-dec-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-isas-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-jis-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-micro-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-misc-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-mutt-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-schumacher-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-sony-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-sun-misc-${pkgver}.tar.bz2)
+
+md5sums=(81595016e2ff859716fc256ebb136ba6 305fa22cdfefb8f80babd711051a534b
+ 61f9eab48c619af5494d3e384d8d7d79 284e554db1c64fb7580a06df01444a2b
+ ec709a96b64b497a5cb5658c93bd38dc 61febb49a71065723a1fba17cbf23c67
+ 8c8bffd7540f05caa0dbb4e6e1d6c58e 2a57f6188c41d4bc1b88ca3d08ad011d
+ 648b409b7eb78ad1cd5f6d7fac3eef88 f1c6063d2fadc57e696a0aab69afd6e0
+ 0dfddd1a946e4497f009094c0ae1bdd5 e17d43a7c6c0d862cfba0908ff132ffa)
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-misc-${pkgver}; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/misc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ rm -f ${startdir}/pkg/usr/share/fonts/*/fonts.*
+ done
+}
+
diff --git a/abs/core-testing/xorg-fonts-misc/xfonts.install b/abs/core-testing/xorg-fonts-misc/xfonts.install
new file mode 100644
index 0000000..6b5cf74
--- /dev/null
+++ b/abs/core-testing/xorg-fonts-misc/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/misc
+ mkfontdir /usr/share/fonts/misc
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core-testing/xorg-res-utils/PKGBUILD b/abs/core-testing/xorg-res-utils/PKGBUILD
new file mode 100644
index 0000000..7e062e5
--- /dev/null
+++ b/abs/core-testing/xorg-res-utils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-res-utils
+pkgver=1.0.3
+pkgrel=2
+pkgdesc="X.Org X11 resource utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxaw')
+makedepends=('pkgconfig')
+groups=('xorg')
+source=(${url}/releases/individual/app/appres-1.0.1.tar.bz2
+ ${url}/releases/individual/app/editres-1.0.3.tar.bz2
+ ${url}/releases/individual/app/listres-1.0.1.tar.bz2
+ ${url}/releases/individual/app/viewres-1.0.1.tar.bz2)
+md5sums=('420e6cdf38bb771ec8b00228bf09e8ff' 'a25f931cc6c8d03daaed434f5db5df2d'\
+ '827a1ac5adf9aadd0c13b54a897e297b' 'cdbed540daf7975b56000420c9aa5bf9')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr --disable-xprint
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core-testing/xorg-server-utils/PKGBUILD b/abs/core-testing/xorg-server-utils/PKGBUILD
new file mode 100644
index 0000000..eb30890
--- /dev/null
+++ b/abs/core-testing/xorg-server-utils/PKGBUILD
@@ -0,0 +1,75 @@
+# $Id: PKGBUILD 3241 2008-06-21 18:04:39Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-server-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="X.Org utilities required by xorg-server"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfontcache' 'libxi' 'liblbxutil' 'libxrandr>=1.2.1' 'libxxf86misc'
+ 'libxaw' 'libxxf86vm' 'libxtrap' 'mcpp>=2.6' 'xtrans')
+makedepends=('pkgconfig' 'xbitmaps' 'xproxymngproto')
+source=(${url}/releases/individual/app/iceauth-1.0.2.tar.bz2
+ ${url}/releases/individual/app/lbxproxy-1.0.1.tar.bz2
+ ${url}/releases/individual/app/rgb-1.0.3.tar.bz2
+ ${url}/releases/individual/app/sessreg-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xcmsdb-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xbacklight-1.1.tar.bz2
+ ${url}/releases/individual/app/xgamma-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xhost-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmodmap-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xrandr-1.2.3.tar.bz2
+ ${url}/releases/individual/app/xrdb-1.0.5.tar.bz2
+ ${url}/releases/individual/app/xrefresh-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xset-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xsetmode-1.0.0.tar.bz2
+ ${url}/releases/individual/app/xsetpointer-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xsetroot-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xstdcmap-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xtrap-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xvidtune-1.0.1.tar.bz2)
+md5sums=('7ab8b64edf0212a9d9a3c8129901a450'
+ '9d5045a5c76b1fe360221b967a5aa0e9'
+ '44ea16cc3104de6401bc74035f642357'
+ '839e968d7197b9563f0fd8a5a3aac2e3'
+ '8579d5f50ba7f0c4a5bf16b9670fea01'
+ '51b4a1c0ae2b3bd77417306fd78a3e94'
+ 'f13ddedaa63a608d3b025d326f4f5b5d'
+ 'f746aba36f075ae4cae313d849a94f4e'
+ '626731003ec22a74ecf9e44ed098bbdf'
+ '41a9d0cc073fa6165a31fbf9e85f68a6'
+ '9c30b8e1709d5367beb7706146640c07'
+ '1228f890f86148e4e6ae22aa73118cbb'
+ '2f41fd983ba4d89419204854936025e2'
+ 'd074e79d380b031d2f60e4cd56538c93'
+ '9e5bcbeda4aaf02bfa095e41d30baee4'
+ '9af7db9f3052aef0b11636720b3101dd'
+ '86ab558441edfb86f853639e4290a754'
+ '97a62a011a11f03b46d72851aa298fa8'
+ 'e0744594f4e5969b20df28d897781318')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ case "${i}" in
+ xrdb*)
+ ./configure --prefix=/usr --with-cpp=/usr/bin/mcpp\ -@old
+ ;;
+ lbxproxy*)
+ sed -e 's|$(libdir)/X11/lbxproxy|$(datadir)/X11/libxproxy|g' \
+ -i Makefile.* || return 1
+ ./configure --prefix=/usr
+ ;;
+ *)
+ ./configure --prefix=/usr
+ ;;
+ esac
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core-testing/xorg-server/PKGBUILD b/abs/core-testing/xorg-server/PKGBUILD
new file mode 100644
index 0000000..0582a82
--- /dev/null
+++ b/abs/core-testing/xorg-server/PKGBUILD
@@ -0,0 +1,92 @@
+# $Id: PKGBUILD 3240 2008-06-21 18:01:37Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-server
+pkgver=1.4.2
+pkgrel=1
+_mesaver=7.0.3
+pkgdesc="X.Org X servers"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org"
+depends=('libxkbui' 'ncurses' 'libxxf86misc' 'libxfont'
+ 'libxaw' 'libxxf86vm' 'xcursor-themes'
+ 'xkeyboard-config' 'xorg-server-utils' 'xorg-utils' 'libdrm>=2.3.0'
+ 'xorg-fonts-misc' 'pixman>=0.10' 'xbitmaps')
+makedepends=('pkgconfig' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto'
+ 'xf86bigfontproto' 'resourceproto' 'evieext' 'damageproto>=1.1.0'
+ 'compositeproto>=0.4' 'scrnsaverproto' 'libxres' 'xorg-util-macros'
+ 'randrproto' 'glproto>=1.4.9' 'renderproto>=0.9.3' 'autoconf'
+ 'automake' 'libtool' 'bison' 'flex' 'gcc' 'libxrender'
+ 'libxfixes' 'quilt' 'mesa')
+options=('!libtool')
+provides=('x-server')
+groups=('xorg')
+install=xorg-server.install
+source=(${url}/releases/individual/xserver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2
+ ftp://ftp.archlinux.org/other/xorg-server/xorg-server-patches-1.4.2-1.tar.bz2)
+md5sums=('fa2915ae377f61c340a18ebef484b64b'
+ 'e6e6379d7793af40a6bc3ce1bace572e'
+ 'bc907d6d69b55b445c3046a4d7ecc8ef')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ quilt push -a || return 1
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+ ./configure --prefix=/usr \
+ --with-mesa-source=${startdir}/src/Mesa-${_mesaver} \
+ --enable-ipv6 \
+ --enable-dri \
+ --disable-dmx \
+ --enable-xvfb \
+ --enable-xnest \
+ --enable-composite \
+ --enable-xcsecurity \
+ --enable-xorg \
+ --enable-xtrap \
+ --enable-xevie \
+ --enable-xephyr \
+ --enable-glx-tls \
+ --enable-xorgcfg \
+ --enable-kdrive \
+ --disable-xfbdev \
+ --disable-xfake \
+ --disable-xsdl \
+ --disable-kdrive-vesa \
+ --enable-install-setuid \
+ --disable-xprint \
+ --sysconfdir=/etc/X11 \
+ --localstatedir=/var \
+ --with-default-font-path=/usr/share/fonts/misc,/usr/share/fonts/100dpi:unscaled,/usr/share/fonts/75dpi:unscaled,/usr/share/fonts/TTF,/usr/share/fonts/Type1 \
+ --with-rgb-path=/usr/share/X11/rgb \
+ --with-xkb-path=/usr/share/X11/xkb \
+ --with-xkb-output=/usr/share/X11/xkb/compiled \
+ --with-dri-driver-path=/usr/lib/xorg/modules/dri \
+ --disable-config-hal \
+ --disable-static
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${startdir}/pkg/etc/X11 || return 1
+ install -m755 -d ${startdir}/pkg/var/lib || return 1
+ mv ${startdir}/pkg/usr/share/X11/xkb/compiled ${startdir}/pkg/var/lib/xkb
+ ln -sf /var/lib/xkb ${startdir}/pkg/usr/share/X11/xkb/compiled || return 1
+
+ cd ${startdir}/pkg/usr/lib/xorg/modules/extensions
+ mv libGLcore.so libGLcore.xorg
+ mv libglx.so libglx.xorg
+
+ # No longer needed, but as nvidia-utils mangles these files,
+ # keep them like this so they can be restored
+ mv ${startdir}/pkg/usr/lib/xorg/modules/libwfb.so \
+ ${startdir}/pkg/usr/lib/xorg/modules/libwfb.so.1.4 || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xorg-server/xorg-server.install b/abs/core-testing/xorg-server/xorg-server.install
new file mode 100644
index 0000000..f7ff03a
--- /dev/null
+++ b/abs/core-testing/xorg-server/xorg-server.install
@@ -0,0 +1,12 @@
+post_install() {
+ rm -f /usr/lib/xorg/modules/libwfb.so
+ ln -sf libwfb.so.1.4 /usr/lib/xorg/modules/libwfb.so
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ rm -f /usr/lib/xorg/modules/libwfb.so
+}
diff --git a/abs/core-testing/xorg-utils/PKGBUILD b/abs/core-testing/xorg-utils/PKGBUILD
new file mode 100644
index 0000000..2355fd9
--- /dev/null
+++ b/abs/core-testing/xorg-utils/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 3238 2008-06-21 17:44:50Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="Collection of client utilities used to query the X server"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxxf86dga' 'libxi' 'libxxf86misc' 'libxtst' 'libxinerama' 'libxv'
+ 'libdmx' 'libxft' 'libxaw')
+makedepends=('pkgconfig' 'mesa')
+source=(${url}/releases/individual/app/xdpyinfo-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xdriinfo-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xev-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xfd-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xfontsel-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xlsatoms-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xlsclients-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xlsfonts-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xprop-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xvinfo-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xwininfo-1.0.3.tar.bz2)
+md5sums=('b7cbab6cbcd12bf7ad65dbc12d86e104'
+ 'a5ec51ed9f0a55dc3462d90d52ff899c'
+ 'a9532c3d1683c99bb5df1895cb3a60b1'
+ 'c72abd90f50ef459bc14b39ec9fcc7f8'
+ '288fe4cf8a990e4e602aac16dd9109fb'
+ '69adcda848479acc3b82b3928812d191'
+ '44473b880d26bfbe8b3d4d72b183cba7'
+ '28958248590ff60ecd70e8f590d977b7'
+ '48aa8fd78802f477dcbf9ef0dfd9f783'
+ 'e1e318436f49e2f0f3764593dadd9ad2'
+ '721f84332c98c33152460bb22ba9ded6')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core-testing/xorg-xauth/PKGBUILD b/abs/core-testing/xorg-xauth/PKGBUILD
new file mode 100644
index 0000000..5f42377
--- /dev/null
+++ b/abs/core-testing/xorg-xauth/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4401 2008-07-06 20:28:57Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xauth
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X.Org authorization settings program"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxmu')
+makedepends=('pkgconfig')
+source=(${url}/releases/individual/app/xauth-${pkgver}.tar.bz2)
+md5sums=('e91e10ace1df0d5f2cbc74ead256407a')
+
+build() {
+ cd ${startdir}/src/xauth-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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-testing/xorg-xinit/PKGBUILD b/abs/core-testing/xorg-xinit/PKGBUILD
new file mode 100644
index 0000000..ffad09c
--- /dev/null
+++ b/abs/core-testing/xorg-xinit/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 3232 2008-06-21 15:51:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xinit
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X.Org initialisation program "
+arch=(i686 x86_64)
+license=('GPL')
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'xorg-xauth')
+makedepends=('pkgconfig')
+backup=('etc/skel/.xinitrc'
+ 'etc/skel/.xsession'
+ 'etc/X11/xinit/xserverrc'
+ 'etc/X11/xinit/xinitrc')
+groups=('xorg')
+source=(${url}/releases/individual/app/xinit-${pkgver}.tar.bz2
+ xinitrc
+ xsession
+ xserverrc)
+options=(!emptydirs)
+md5sums=('9144097186c3d2454beffe8ac3b53c6e'
+ 'f165d9a52284ef8cd4c8a129463a2b49'
+ '7873d97db30d6c279ed37e3559e7c59d'
+ 'bb550d3b9a2d2b6cbe6e2667a3a7cd03')
+
+build() {
+ cd ${startdir}/src/xinit-${pkgver}
+ ./configure --prefix=/usr
+ make XINITDIR=/etc/X11/xinit || return 1
+ make XINITDIR=/etc/X11/xinit DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${pkgdir}/etc/skel
+ install -m755 -d ${pkgdir}/etc/X11/xinit
+ install -m755 ${srcdir}/xinitrc ${pkgdir}/etc/skel/.xinitrc || return 1
+ install -m755 ${srcdir}/xsession ${pkgdir}/etc/skel/.xsession || return 1
+ install -m755 ${srcdir}/xserverrc ${pkgdir}/etc/X11/xinit/xserverrc
+}
diff --git a/abs/core-testing/xorg-xinit/xinitrc b/abs/core-testing/xorg-xinit/xinitrc
new file mode 100644
index 0000000..7af398d
--- /dev/null
+++ b/abs/core-testing/xorg-xinit/xinitrc
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+#
+# ~/.xinitrc
+#
+# Executed by startx (run your window manager from here)
+#
+
+# exec gnome-session
+# exec startkde
+# exec startxfce4
+# exec icewm
+# exec openbox
+# exec blackbox
+# exec fluxbox
+# exec ratpoison
+# exec dwm
+# ... or any other WM of your choosing ...
diff --git a/abs/core-testing/xorg-xinit/xserverrc b/abs/core-testing/xorg-xinit/xserverrc
new file mode 100644
index 0000000..6a636c1
--- /dev/null
+++ b/abs/core-testing/xorg-xinit/xserverrc
@@ -0,0 +1 @@
+exec /usr/bin/X -nolisten tcp
diff --git a/abs/core-testing/xorg-xinit/xsession b/abs/core-testing/xorg-xinit/xsession
new file mode 100644
index 0000000..a16dc0b
--- /dev/null
+++ b/abs/core-testing/xorg-xinit/xsession
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+#
+# ~/.xsession
+#
+# Executed by xdm/gdm/kdm at login
+#
+
+/bin/bash --login -i ~/.xinitrc
+
diff --git a/abs/core-testing/xorg-xkb-utils/PKGBUILD b/abs/core-testing/xorg-xkb-utils/PKGBUILD
new file mode 100644
index 0000000..5bfac78
--- /dev/null
+++ b/abs/core-testing/xorg-xkb-utils/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 4399 2008-07-06 20:26:41Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xkb-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="X.org keyboard utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxaw' 'libxkbfile')
+makedepends=(pkgconfig)
+source=(${url}/releases/individual/app/xkbutils-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xkbcomp-1.0.5.tar.bz2
+ ${url}/releases/individual/app/xkbevd-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xkbprint-1.0.1.tar.bz2
+ ${url}/releases/individual/app/setxkbmap-1.0.4.tar.bz2)
+md5sums=('84396a3dd75337caaae29d8fa5616fb1'
+ '6cc96c3e4ed5d9802fe717beac008f19'
+ '68f2a143716c23b566f8509d9498f516'
+ 'b98ae2d8b21c545b7b322d0b302efefa'
+ '6fab3bb176be9e510c5613d054ef1ca4')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core-testing/xproto/PKGBUILD b/abs/core-testing/xproto/PKGBUILD
new file mode 100644
index 0000000..bdde6af
--- /dev/null
+++ b/abs/core-testing/xproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3230 2008-06-21 15:50:01Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xproto
+pkgver=7.0.13
+pkgrel=1
+pkgdesc="X11 core wire protocol and auxiliary headers"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('7d26f45dca52632712a696e0631dc17b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core-testing/xterm/PKGBUILD b/abs/core-testing/xterm/PKGBUILD
new file mode 100644
index 0000000..ced251a
--- /dev/null
+++ b/abs/core-testing/xterm/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 3697 2008-06-29 12:44:48Z jgc $
+# ppc Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# i686 Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=xterm
+pkgver=235
+pkgrel=1
+pkgdesc="X Terminal Emulator"
+arch=(i686 x86_64)
+url="http://invisible-island.net/xterm/"
+depends=('libxft' 'libxaw' 'ncurses' 'xorg-apps')
+groups=('xorg')
+source=(ftp://invisible-island.net/${pkgname}/${pkgname}-${pkgver}.tgz)
+md5sums=('5060cab9cef0ea09a24928f3c7fbde2b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --libdir=/etc \
+ --with-app-defaults=/usr/share/X11/app-defaults/ \
+ --with-x \
+ --disable-full-tgetent \
+ --disable-imake \
+ --enable-ansi-color \
+ --enable-88-color \
+ --enable-256-color \
+ --enable-broken-osc \
+ --enable-broken-st \
+ --enable-load-vt-fonts \
+ --enable-i18n \
+ --enable-wide-chars \
+ --enable-doublechars \
+ --enable-warnings \
+ --enable-tcap-query \
+ --enable-logging \
+ --enable-dabbrev \
+ --enable-freetype \
+ --enable-luit \
+ --enable-mini-luit \
+ --enable-narrowproto || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ chmod 0755 ${startdir}/pkg/usr/bin/xterm || return 1
+}
diff --git a/abs/core-testing/xtrans/PKGBUILD b/abs/core-testing/xtrans/PKGBUILD
new file mode 100644
index 0000000..f1f0b19
--- /dev/null
+++ b/abs/core-testing/xtrans/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4408 2008-07-06 20:48:35Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xtrans
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X transport library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('96e142331edd498a9364887b2548f1bb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core-testing/xvidcore/PKGBUILD b/abs/core-testing/xvidcore/PKGBUILD
new file mode 100644
index 0000000..82e87b5
--- /dev/null
+++ b/abs/core-testing/xvidcore/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: tobias <tobias@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+
+pkgname=xvidcore
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="XviD is an open source MPEG-4 video codec"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.xvid.org/"
+depends=('glibc')
+makedepends=('nasm')
+source=(http://downloads.xvid.org/downloads/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('29c60d4d991ac18f687a8fd13cfe64b7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}/build/generic
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ #Fix dynamic libraries
+ cd ${startdir}/pkg/usr/lib
+ mylib=$(basename libxvidcore.so.*)
+ ln -sf ${mylib} libxvidcore.so.4
+ ln -sf ${mylib} libxvidcore.so
+}
diff --git a/abs/core-testing/zd1211-firmware/PKGBUILD b/abs/core-testing/zd1211-firmware/PKGBUILD
new file mode 100644
index 0000000..179a8ca
--- /dev/null
+++ b/abs/core-testing/zd1211-firmware/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=zd1211-firmware
+pkgver=1.4
+pkgrel=2
+pkgdesc="Firmware for the in-kernel26 zd1211rw wireless driver"
+arch=(i686 x86_64)
+url="http://zd1211.wiki.sourceforge.net/"
+# firmware files are here:
+# http://sourceforge.net/project/showfiles.php?group_id=129083
+license=('GPL')
+provides=('zd1211')
+source=(http://downloads.sourceforge.net/zd1211/zd1211-firmware-$pkgver.tar.bz2)
+md5sums=('19f28781d76569af8551c9d11294c870')
+
+build() {
+ cd $startdir/src/zd1211-firmware
+ mkdir -p $startdir/pkg/lib/firmware/zd1211/
+ # just unpack the files to the firmware directory
+ install -m644 * $startdir/pkg/lib/firmware/zd1211/ || return 1
+}
diff --git a/abs/core-testing/zlib/PKGBUILD b/abs/core-testing/zlib/PKGBUILD
new file mode 100644
index 0000000..70d4b2d
--- /dev/null
+++ b/abs/core-testing/zlib/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4237 2008-07-05 19:17:35Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=zlib
+pkgver=1.2.3.3
+pkgrel=14
+pkgdesc="A compression/decompression Library"
+arch=('i686' 'x86_64')
+license=('custom:zlib')
+url="http://www.gzip.org/zlib"
+groups=('base')
+depends=('glibc')
+source=("ftp://ftp.archlinux.org/other/zlib/zlib-${pkgver}.tar.gz")
+md5sums=('c444cf020e5f0e3323b11f5a2d8af8d3')
+
+build() {
+ cd ${srcdir}/zlib-$pkgver
+
+ ./configure --prefix=/usr --shared
+ make || return 1
+ make install prefix=${pkgdir}/usr || return 1
+
+ grep -A 24 '^ Copyright' zlib.h > license.txt
+ install -D license.txt ${pkgdir}/usr/share/licenses/zlib/license.txt
+}
diff --git a/abs/core/a52dec/PKGBUILD b/abs/core/a52dec/PKGBUILD
new file mode 100644
index 0000000..cba41ae
--- /dev/null
+++ b/abs/core/a52dec/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 5601 2008-07-18 22:06:17Z jgc $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=a52dec
+pkgver=0.7.4
+pkgrel=4
+pkgdesc="liba52 is a free library for decoding ATSC A/52 streams."
+arch=('i686' 'x86_64')
+license=('GPL2')
+depends=('glibc')
+options=(!libtool)
+source=(http://liba52.sourceforge.net/files/${pkgname}-${pkgver}.tar.gz
+ a52dec-0.7.4-build.patch)
+url="http://liba52.sourceforge.net/"
+md5sums=('caa9f5bc44232dc8aeea773fea56be80' 'fa16f224a7dceb7613824380abef0052')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -Np1 -i ${srcdir}/a52dec-0.7.4-build.patch || return 1
+ ./bootstrap || return 1
+ ./configure --prefix=/usr --enable-shared || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m644 liba52/a52_internal.h $startdir/pkg/usr/include/a52dec/ || return 1
+}
diff --git a/abs/core/a52dec/a52dec-0.7.4-build.patch b/abs/core/a52dec/a52dec-0.7.4-build.patch
new file mode 100644
index 0000000..f3a29f3
--- /dev/null
+++ b/abs/core/a52dec/a52dec-0.7.4-build.patch
@@ -0,0 +1,27 @@
+diff -Naur a52dec-0.7.4.orig/liba52/Makefile.am a52dec-0.7.4/liba52/Makefile.am
+--- a52dec-0.7.4.orig/liba52/Makefile.am 2002-01-27 20:36:48.000000000 -0800
++++ a52dec-0.7.4/liba52/Makefile.am 2004-11-05 01:10:21.317401872 -0800
+@@ -1,4 +1,3 @@
+-CFLAGS = @CFLAGS@ @LIBA52_CFLAGS@
+
+ lib_LTLIBRARIES = liba52.la
+
+diff -Naur a52dec-0.7.4.orig/liba52/configure.incl a52dec-0.7.4/liba52/configure.incl
+--- a52dec-0.7.4.orig/liba52/configure.incl 2002-01-27 20:36:48.000000000 -0800
++++ a52dec-0.7.4/liba52/configure.incl 2004-11-05 01:11:38.172672216 -0800
+@@ -2,7 +2,6 @@
+ AC_SUBST([LIBA52_LIBS])
+
+ dnl avoid -fPIC when possible
+-LIBA52_CFLAGS="$LIBA52_CFLAGS -prefer-non-pic"
+
+ AC_ARG_ENABLE([double],
+ [ --enable-double use double-precision samples])
+diff -Naur a52dec-0.7.4.orig/src/Makefile.am a52dec-0.7.4/src/Makefile.am
+--- a52dec-0.7.4.orig/src/Makefile.am 2002-06-22 18:51:57.000000000 -0700
++++ a52dec-0.7.4/src/Makefile.am 2004-11-05 01:10:21.320401375 -0800
+@@ -1,4 +1,3 @@
+-CFLAGS = @A52DEC_CFLAGS@
+
+ bin_PROGRAMS = a52dec extract_a52
+ a52dec_SOURCES = a52dec.c getopt.c gettimeofday.c
diff --git a/abs/core/aalib/PKGBUILD b/abs/core/aalib/PKGBUILD
new file mode 100644
index 0000000..ee23967
--- /dev/null
+++ b/abs/core/aalib/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 2990 2008-06-18 01:46:24Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+#
+pkgname=aalib
+pkgver=1.4rc5
+pkgrel=5
+pkgdesc="AAlib is a portable ASCII art GFX library"
+arch=('i686' 'x86_64')
+url="http://aa-project.sourceforge.net/aalib/"
+license=('LGPL')
+depends=('glibc' 'ncurses' 'gpm>=1.20.4' 'libx11')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/aa-project/$pkgname-$pkgver.tar.gz
+ aclocal-fixes.patch)
+md5sums=('9801095c42bba12edebd1902bcf0a990' '863a96a6689aa7ee073ca448bc2f133d')
+
+build() {
+ cd $startdir/src/$pkgname-1.4.0
+ patch -Np0 -i ${startdir}/src/aclocal-fixes.patch || return 1
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/aalib/aclocal-fixes.patch b/abs/core/aalib/aclocal-fixes.patch
new file mode 100644
index 0000000..3f1919a
--- /dev/null
+++ b/abs/core/aalib/aclocal-fixes.patch
@@ -0,0 +1,11 @@
+--- aalib.m4.orig 2006-03-05 13:58:21.000000000 +0000
++++ aalib.m4 2006-03-05 13:58:32.000000000 +0000
+@@ -9,7 +9,7 @@
+ dnl AM_PATH_AALIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+ dnl Test for AALIB, and define AALIB_CFLAGS and AALIB_LIBS
+ dnl
+-AC_DEFUN(AM_PATH_AALIB,
++AC_DEFUN([AM_PATH_AALIB],
+ [dnl
+ dnl Get the cflags and libraries from the aalib-config script
+ dnl
diff --git a/abs/core/acl/PKGBUILD b/abs/core/acl/PKGBUILD
new file mode 100644
index 0000000..099eb04
--- /dev/null
+++ b/abs/core/acl/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=acl
+pkgver=2.2.47
+pkgrel=10
+pkgdesc="Library for filesystem ACL support"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('LGPL')
+groups=('base')
+depends=('attr>=2.4.41')
+replaces=('xfsacl')
+provides=('xfsacl')
+conflicts=('xfsacl')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/acl_${pkgver}-1.tar.gz)
+md5sums=('a11e4571a54a0b1ae83010d1e68a64c2')
+
+build() {
+ cd $startdir/src/acl-$pkgver
+ autoconf
+ ./configure --prefix=$startdir/pkg/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr/ install install-lib install-dev
+
+ # tidy up
+ cd $startdir/pkg
+
+ mkdir -v lib
+ mv -v usr/lib/libacl.so* lib/
+ ln -sv ../../lib/libacl.so.1 usr/lib/libacl.so
+
+ mv -v usr/libexec/libacl.{a,la} usr/lib/
+ rm -rf $startdir/pkg/usr/libexec
+}
diff --git a/abs/core/alsa-lib/PKGBUILD b/abs/core/alsa-lib/PKGBUILD
new file mode 100644
index 0000000..785f6b2
--- /dev/null
+++ b/abs/core/alsa-lib/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=alsa-lib
+pkgver=1.0.16
+pkgrel=1
+pkgdesc="An alternative implementation of Linux sound support"
+arch=(i686 x86_64)
+url="http://www.alsa-project.org"
+depends=('glibc')
+optdepends=('python')
+makedepends=('python')
+license=('GPL')
+options=(!libtool)
+source=(ftp://ftp.alsa-project.org/pub/lib/$pkgname-$pkgver.tar.bz2)
+md5sums=('73b0986758bb762648a5fafc93e287c1')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/alsa-lib/python2.5.patch b/abs/core/alsa-lib/python2.5.patch
new file mode 100644
index 0000000..cd0032b
--- /dev/null
+++ b/abs/core/alsa-lib/python2.5.patch
@@ -0,0 +1,11 @@
+--- modules/mixer/simple/python.c~ 2007-08-21 17:21:28.000000000 +0200
++++ modules/mixer/simple/python.c 2007-08-21 17:26:39.000000000 +0200
+@@ -23,7 +23,7 @@
+ #include "config.h"
+ #include "asoundlib.h"
+ #include "mixer_abst.h"
+-#include <python/Python.h>
++#include <python2.5/Python.h>
+
+ struct python_priv {
+ int py_initialized;
diff --git a/abs/core/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch b/abs/core/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch
new file mode 100644
index 0000000..588272f
--- /dev/null
+++ b/abs/core/alsa-lib/revert-patch-to-fix-converting-32bit-audio-to-16bit.patch
@@ -0,0 +1,242 @@
+
+--- a/src/pcm/plugin_ops.h Mon Jan 09 14:40:08 2006 +0000
++++ b/src/pcm/plugin_ops.h Fri Mar 09 17:06:23 2007 +0100
+@@ -85,6 +85,8 @@ static inline u_int32_t sx24s(u_int32_t
+ #define _put_triple(ptr,val) _put_triple_be(ptr,val)
+ #define _put_triple_s(ptr,val) _put_triple_le(ptr,val)
+ #endif
++
++#define shift_down(val, bits) (((val) + (1 << ((bits) - 1))) >> (bits))
+
+ #ifdef COPY_LABELS
+ static void *copy_labels[5] = {
+@@ -256,14 +258,14 @@ conv_xxx1_009x: as_u32(dst) = sx24s((u_i
+ conv_xxx1_009x: as_u32(dst) = sx24s((u_int32_t)(as_u8c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_xxx1_9000: as_u32(dst) = (u_int32_t)(as_u8c(src) ^ 0x80) << 24; goto CONV_END;
+ conv_xxx1_0009: as_u32(dst) = (u_int32_t)(as_u8c(src) ^ 0x80); goto CONV_END;
+-conv_xx12_xxx1: as_u8(dst) = as_u16c(src) >> 8; goto CONV_END;
++conv_xx12_xxx1: as_u8(dst) = shift_down(as_u16c(src), 8); goto CONV_END;
+ conv_xx12_xx12: as_u16(dst) = as_u16c(src); goto CONV_END;
+ conv_xx12_xx21: as_u16(dst) = bswap_16(as_u16c(src)); goto CONV_END;
+ conv_xx12_x120: as_u32(dst) = sx24((u_int32_t)as_u16c(src) << 8); goto CONV_END;
+ conv_xx12_021x: as_u32(dst) = sx24s((u_int32_t)bswap_16(as_u16c(src)) << 8); goto CONV_END;
+ conv_xx12_1200: as_u32(dst) = (u_int32_t)as_u16c(src) << 16; goto CONV_END;
+ conv_xx12_0021: as_u32(dst) = (u_int32_t)bswap_16(as_u16c(src)); goto CONV_END;
+-conv_xx12_xxx9: as_u8(dst) = (as_u16c(src) >> 8) ^ 0x80; goto CONV_END;
++conv_xx12_xxx9: as_u8(dst) = shift_down(as_u16c(src), 8) ^ 0x80; goto CONV_END;
+ conv_xx12_xx92: as_u16(dst) = as_u16c(src) ^ 0x8000; goto CONV_END;
+ conv_xx12_xx29: as_u16(dst) = bswap_16(as_u16c(src)) ^ 0x80; goto CONV_END;
+ conv_xx12_x920: as_u32(dst) = sx24((u_int32_t)(as_u16c(src) ^ 0x8000) << 8); goto CONV_END;
+@@ -282,57 +284,57 @@ conv_xx12_01Ax: as_u32(dst) = sx24s((u_i
+ conv_xx12_01Ax: as_u32(dst) = sx24s((u_int32_t)(as_u16c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_xx12_A100: as_u32(dst) = (u_int32_t)bswap_16(as_u16c(src) ^ 0x80) << 16; goto CONV_END;
+ conv_xx12_001A: as_u32(dst) = (u_int32_t)(as_u16c(src) ^ 0x80); goto CONV_END;
+-conv_x123_xxx1: as_u8(dst) = as_u32c(src) >> 16; goto CONV_END;
+-conv_x123_xx12: as_u16(dst) = as_u32c(src) >> 8; goto CONV_END;
+-conv_x123_xx21: as_u16(dst) = bswap_16(as_u32c(src) >> 8); goto CONV_END;
++conv_x123_xxx1: as_u8(dst) = shift_down(as_u32c(src), 16); goto CONV_END;
++conv_x123_xx12: as_u16(dst) = shift_down(as_u32c(src), 8); goto CONV_END;
++conv_x123_xx21: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)); goto CONV_END;
+ conv_x123_x123: as_u32(dst) = sx24(as_u32c(src)); goto CONV_END;
+ conv_x123_321x: as_u32(dst) = sx24s(bswap_32(as_u32c(src))); goto CONV_END;
+ conv_x123_1230: as_u32(dst) = as_u32c(src) << 8; goto CONV_END;
+-conv_x123_0321: as_u32(dst) = bswap_32(as_u32c(src)) >> 8; goto CONV_END;
+-conv_x123_xxx9: as_u8(dst) = (as_u32c(src) >> 16) ^ 0x80; goto CONV_END;
+-conv_x123_xx92: as_u16(dst) = (as_u32c(src) >> 8) ^ 0x8000; goto CONV_END;
+-conv_x123_xx29: as_u16(dst) = bswap_16(as_u32c(src) >> 8) ^ 0x80; goto CONV_END;
++conv_x123_0321: as_u32(dst) = shift_down(bswap_32(as_u32c(src)), 8); goto CONV_END;
++ conv_x123_xxx9: as_u8(dst) = shift_down(as_u32c(src), 16) ^ 0x80; goto CONV_END;
++conv_x123_xx92: as_u16(dst) = shift_down(as_u32c(src), 8) ^ 0x8000; goto CONV_END;
++conv_x123_xx29: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)) ^ 0x80; goto CONV_END;
+ conv_x123_x923: as_u32(dst) = sx24(as_u32c(src) ^ 0x800000); goto CONV_END;
+ conv_x123_329x: as_u32(dst) = sx24s(bswap_32(as_u32c(src)) ^ 0x8000); goto CONV_END;
+ conv_x123_9230: as_u32(dst) = (as_u32c(src) ^ 0x800000) << 8; goto CONV_END;
+-conv_x123_0329: as_u32(dst) = (bswap_32(as_u32c(src)) >> 8) ^ 0x80; goto CONV_END;
+-conv_123x_xxx3: as_u8(dst) = (as_u32c(src) >> 8) & 0xff; goto CONV_END;
+-conv_123x_xx32: as_u16(dst) = bswap_16(as_u32c(src) >> 8); goto CONV_END;
+-conv_123x_xx23: as_u16(dst) = (as_u32c(src) >> 8) & 0xffff; goto CONV_END;
++conv_x123_0329: as_u32(dst) = shift_down(bswap_32(as_u32c(src)), 8) ^ 0x80; goto CONV_END;
++conv_123x_xxx3: as_u8(dst) = shift_down(as_u32c(src), 8) & 0xff; goto CONV_END;
++conv_123x_xx32: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8)); goto CONV_END;
++conv_123x_xx23: as_u16(dst) = shift_down(as_u32c(src), 8) & 0xffff; goto CONV_END;
+ conv_123x_x321: as_u32(dst) = sx24(bswap_32(as_u32c(src))); goto CONV_END;
+ conv_123x_123x: as_u32(dst) = sx24s(as_u32c(src)); goto CONV_END;
+ conv_123x_3210: as_u32(dst) = bswap_32(as_u32c(src)) << 8; goto CONV_END;
+-conv_123x_0123: as_u32(dst) = as_u32c(src) >> 8; goto CONV_END;
+-conv_123x_xxxB: as_u8(dst) = ((as_u32c(src) >> 8) & 0xff) ^ 0x80; goto CONV_END;
+-conv_123x_xxB2: as_u16(dst) = bswap_16((as_u32c(src) >> 8) ^ 0x80); goto CONV_END;
+-conv_123x_xx2B: as_u16(dst) = ((as_u32c(src) >> 8) & 0xffff) ^ 0x80; goto CONV_END;
++conv_123x_0123: as_u32(dst) = shift_down(as_u32c(src), 8); goto CONV_END;
++conv_123x_xxxB: as_u8(dst) = (shift_down(as_u32c(src), 8) & 0xff) ^ 0x80; goto CONV_END;
++conv_123x_xxB2: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 8) ^ 0x80); goto CONV_END;
++conv_123x_xx2B: as_u16(dst) = (shift_down(as_u32c(src), 8) & 0xffff) ^ 0x80; goto CONV_END;
+ conv_123x_xB21: as_u32(dst) = sx24(bswap_32(as_u32c(src)) ^ 0x800000); goto CONV_END;
+ conv_123x_12Bx: as_u32(dst) = sx24s(as_u32c(src) ^ 0x8000); goto CONV_END;
+ conv_123x_B210: as_u32(dst) = bswap_32(as_u32c(src) ^ 0x8000) << 8; goto CONV_END;
+-conv_123x_012B: as_u32(dst) = (as_u32c(src) >> 8) ^ 0x80; goto CONV_END;
+-conv_1234_xxx1: as_u8(dst) = as_u32c(src) >> 24; goto CONV_END;
+-conv_1234_xx12: as_u16(dst) = as_u32c(src) >> 16; goto CONV_END;
+-conv_1234_xx21: as_u16(dst) = bswap_16(as_u32c(src) >> 16); goto CONV_END;
+-conv_1234_x123: as_u32(dst) = sx24(as_u32c(src) >> 8); goto CONV_END;
++conv_123x_012B: as_u32(dst) = shift_down(as_u32c(src), 8) ^ 0x80; goto CONV_END;
++conv_1234_xxx1: as_u8(dst) = shift_down(as_u32c(src), 24); goto CONV_END;
++conv_1234_xx12: as_u16(dst) = shift_down(as_u32c(src), 16); goto CONV_END;
++conv_1234_xx21: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 16)); goto CONV_END;
++conv_1234_x123: as_u32(dst) = sx24(shift_down(as_u32c(src), 8)); goto CONV_END;
+ conv_1234_321x: as_u32(dst) = sx24s(bswap_32(as_u32c(src)) << 8); goto CONV_END;
+ conv_1234_1234: as_u32(dst) = as_u32c(src); goto CONV_END;
+ conv_1234_4321: as_u32(dst) = bswap_32(as_u32c(src)); goto CONV_END;
+-conv_1234_xxx9: as_u8(dst) = (as_u32c(src) >> 24) ^ 0x80; goto CONV_END;
+-conv_1234_xx92: as_u16(dst) = (as_u32c(src) >> 16) ^ 0x8000; goto CONV_END;
+-conv_1234_xx29: as_u16(dst) = bswap_16(as_u32c(src) >> 16) ^ 0x80; goto CONV_END;
+-conv_1234_x923: as_u32(dst) = sx24((as_u32c(src) >> 8) ^ 0x800000); goto CONV_END;
++conv_1234_xxx9: as_u8(dst) = shift_down(as_u32c(src), 24) ^ 0x80; goto CONV_END;
++conv_1234_xx92: as_u16(dst) = shift_down(as_u32c(src), 16) ^ 0x8000; goto CONV_END;
++conv_1234_xx29: as_u16(dst) = bswap_16(shift_down(as_u32c(src), 16)) ^ 0x80; goto CONV_END;
++conv_1234_x923: as_u32(dst) = sx24(shift_down(as_u32c(src), 8) ^ 0x800000); goto CONV_END;
+ conv_1234_329x: as_u32(dst) = sx24s((bswap_32(as_u32c(src)) ^ 0x80) << 8); goto CONV_END;
+ conv_1234_9234: as_u32(dst) = as_u32c(src) ^ 0x80000000; goto CONV_END;
+ conv_1234_4329: as_u32(dst) = bswap_32(as_u32c(src)) ^ 0x80; goto CONV_END;
+ conv_1234_xxx4: as_u8(dst) = as_u32c(src) & 0xff; goto CONV_END;
+ conv_1234_xx43: as_u16(dst) = bswap_16(as_u32c(src)); goto CONV_END;
+ conv_1234_xx34: as_u16(dst) = as_u32c(src) & 0xffff; goto CONV_END;
+-conv_1234_x432: as_u32(dst) = sx24(bswap_32(as_u32c(src)) >> 8); goto CONV_END;
++conv_1234_x432: as_u32(dst) = sx24(shift_down(bswap_32(as_u32c(src)), 8)); goto CONV_END;
+ conv_1234_234x: as_u32(dst) = sx24s(as_u32c(src) << 8); goto CONV_END;
+ conv_1234_xxxC: as_u8(dst) = (as_u32c(src) & 0xff) ^ 0x80; goto CONV_END;
+ conv_1234_xxC3: as_u16(dst) = bswap_16(as_u32c(src) ^ 0x80); goto CONV_END;
+ conv_1234_xx3C: as_u16(dst) = (as_u32c(src) & 0xffff) ^ 0x80; goto CONV_END;
+-conv_1234_xC32: as_u32(dst) = sx24((bswap_32(as_u32c(src)) >> 8) ^ 0x800000); goto CONV_END;
++conv_1234_xC32: as_u32(dst) = sx24(shift_down(bswap_32(as_u32c(src)), 8) ^ 0x800000); goto CONV_END;
+ conv_1234_23Cx: as_u32(dst) = sx24s((as_u32c(src) ^ 0x80) << 8); goto CONV_END;
+ conv_1234_C321: as_u32(dst) = bswap_32(as_u32c(src) ^ 0x80); goto CONV_END;
+ conv_1234_123C: as_u32(dst) = as_u32c(src) ^ 0x80; goto CONV_END;
+@@ -382,26 +384,26 @@ get16_12_92: sample = as_u16c(src) ^ 0x8
+ get16_12_92: sample = as_u16c(src) ^ 0x8000; goto GET16_END;
+ get16_12_21: sample = bswap_16(as_u16c(src)); goto GET16_END;
+ get16_12_A1: sample = bswap_16(as_u16c(src) ^ 0x80); goto GET16_END;
+-get16_0123_12: sample = as_u32c(src) >> 8; goto GET16_END;
+-get16_0123_92: sample = (as_u32c(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_1230_32: sample = bswap_16(as_u32c(src) >> 8); goto GET16_END;
+-get16_1230_B2: sample = bswap_16((as_u32c(src) >> 8) ^ 0x80); goto GET16_END;
+-get16_1234_12: sample = as_u32c(src) >> 16; goto GET16_END;
+-get16_1234_92: sample = (as_u32c(src) >> 16) ^ 0x8000; goto GET16_END;
++get16_0123_12: sample = shift_down(as_u32c(src), 8); goto GET16_END;
++get16_0123_92: sample = shift_down(as_u32c(src), 8) ^ 0x8000; goto GET16_END;
++get16_1230_32: sample = bswap_16(shift_down(as_u32c(src), 8)); goto GET16_END;
++get16_1230_B2: sample = bswap_16(shift_down(as_u32c(src), 8) ^ 0x80); goto GET16_END;
++get16_1234_12: sample = shift_down(as_u32c(src), 16); goto GET16_END;
++get16_1234_92: sample = shift_down(as_u32c(src), 16) ^ 0x8000; goto GET16_END;
+ get16_1234_43: sample = bswap_16(as_u32c(src)); goto GET16_END;
+ get16_1234_C3: sample = bswap_16(as_u32c(src) ^ 0x80); goto GET16_END;
+-get16_123_12: sample = _get_triple(src) >> 8; goto GET16_END;
+-get16_123_92: sample = (_get_triple(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_123_32: sample = _get_triple_s(src) >> 8; goto GET16_END;
+-get16_123_B2: sample = (_get_triple_s(src) >> 8) ^ 0x8000; goto GET16_END;
+-get16_123_12_20: sample = _get_triple(src) >> 4; goto GET16_END;
+-get16_123_92_20: sample = (_get_triple(src) >> 4) ^ 0x8000; goto GET16_END;
+-get16_123_32_20: sample = _get_triple_s(src) >> 4; goto GET16_END;
+-get16_123_B2_20: sample = (_get_triple_s(src) >> 4) ^ 0x8000; goto GET16_END;
+-get16_123_12_18: sample = _get_triple(src) >> 2; goto GET16_END;
+-get16_123_92_18: sample = (_get_triple(src) >> 2) ^ 0x8000; goto GET16_END;
+-get16_123_32_18: sample = _get_triple_s(src) >> 2; goto GET16_END;
+-get16_123_B2_18: sample = (_get_triple_s(src) >> 2) ^ 0x8000; goto GET16_END;
++get16_123_12: sample = shift_down(_get_triple(src), 8); goto GET16_END;
++get16_123_92: sample = shift_down(_get_triple(src), 8) ^ 0x8000; goto GET16_END;
++get16_123_32: sample = shift_down(_get_triple_s(src), 8); goto GET16_END;
++get16_123_B2: sample = shift_down(_get_triple_s(src), 8) ^ 0x8000; goto GET16_END;
++get16_123_12_20: sample = shift_down(_get_triple(src), 4); goto GET16_END;
++get16_123_92_20: sample = shift_down(_get_triple(src), 4) ^ 0x8000; goto GET16_END;
++get16_123_32_20: sample = shift_down(_get_triple_s(src), 4); goto GET16_END;
++get16_123_B2_20: sample = shift_down(_get_triple_s(src), 4) ^ 0x8000; goto GET16_END;
++get16_123_12_18: sample = shift_down(_get_triple(src), 2); goto GET16_END;
++get16_123_92_18: sample = shift_down(_get_triple(src), 2) ^ 0x8000; goto GET16_END;
++get16_123_32_18: sample = shift_down(_get_triple_s(src), 2); goto GET16_END;
++get16_123_B2_18: sample = shift_down(_get_triple_s(src), 2) ^ 0x8000; goto GET16_END;
+ }
+ #endif
+
+@@ -429,8 +431,8 @@ static void *put16_labels[4 * 2 * 2] = {
+
+ #ifdef PUT16_END
+ while (0) {
+-put16_12_1: as_u8(dst) = sample >> 8; goto PUT16_END;
+-put16_12_9: as_u8(dst) = (sample >> 8) ^ 0x80; goto PUT16_END;
++put16_12_1: as_u8(dst) = shift_down(sample, 8); goto PUT16_END;
++put16_12_9: as_u8(dst) = shift_down(sample, 8) ^ 0x80; goto PUT16_END;
+ put16_12_12: as_u16(dst) = sample; goto PUT16_END;
+ put16_12_92: as_u16(dst) = sample ^ 0x8000; goto PUT16_END;
+ put16_12_21: as_u16(dst) = bswap_16(sample); goto PUT16_END;
+@@ -500,8 +502,8 @@ get32_12_A100: sample = (u_int32_t)bswap
+ get32_12_A100: sample = (u_int32_t)bswap_16(as_u16c(src) ^ 0x80) << 16; goto GET32_END;
+ get32_0123_1230: sample = as_u32c(src) << 8; goto GET32_END;
+ get32_0123_9230: sample = (as_u32c(src) << 8) ^ 0x80000000; goto GET32_END;
+-get32_1230_3210: sample = bswap_32(as_u32c(src) >> 8); goto GET32_END;
+-get32_1230_B210: sample = bswap_32((as_u32c(src) >> 8) ^ 0x80); goto GET32_END;
++get32_1230_3210: sample = bswap_32(shift_down(as_u32c(src), 8)); goto GET32_END;
++get32_1230_B210: sample = bswap_32(shift_down(as_u32c(src), 8) ^ 0x80); goto GET32_END;
+ get32_1234_1234: sample = as_u32c(src); goto GET32_END;
+ get32_1234_9234: sample = as_u32c(src) ^ 0x80000000; goto GET32_END;
+ get32_1234_4321: sample = bswap_32(as_u32c(src)); goto GET32_END;
+@@ -568,32 +570,32 @@ static void *put32_labels[4 * 2 * 2 + 4
+
+ #ifdef PUT32_END
+ while (0) {
+-put32_1234_1: as_u8(dst) = sample >> 24; goto PUT32_END;
+-put32_1234_9: as_u8(dst) = (sample >> 24) ^ 0x80; goto PUT32_END;
+-put32_1234_12: as_u16(dst) = sample >> 16; goto PUT32_END;
+-put32_1234_92: as_u16(dst) = (sample >> 16) ^ 0x8000; goto PUT32_END;
+-put32_1234_21: as_u16(dst) = bswap_16(sample >> 16); goto PUT32_END;
+-put32_1234_29: as_u16(dst) = bswap_16(sample >> 16) ^ 0x80; goto PUT32_END;
+-put32_1234_0123: as_u32(dst) = sx24(sample >> 8); goto PUT32_END;
+-put32_1234_0923: as_u32(dst) = sx24((sample >> 8) ^ 0x800000); goto PUT32_END;
++put32_1234_1: as_u8(dst) = shift_down(sample, 24); goto PUT32_END;
++put32_1234_9: as_u8(dst) = shift_down(sample, 24) ^ 0x80; goto PUT32_END;
++put32_1234_12: as_u16(dst) = shift_down(sample, 16); goto PUT32_END;
++put32_1234_92: as_u16(dst) = shift_down(sample, 16) ^ 0x8000; goto PUT32_END;
++put32_1234_21: as_u16(dst) = bswap_16(shift_down(sample, 16)); goto PUT32_END;
++put32_1234_29: as_u16(dst) = bswap_16(shift_down(sample, 16)) ^ 0x80; goto PUT32_END;
++put32_1234_0123: as_u32(dst) = sx24(shift_down(sample, 8)); goto PUT32_END;
++put32_1234_0923: as_u32(dst) = sx24(shift_down(sample, 8) ^ 0x800000); goto PUT32_END;
+ put32_1234_3210: as_u32(dst) = sx24s(bswap_32(sample) << 8); goto PUT32_END;
+ put32_1234_3290: as_u32(dst) = sx24s((bswap_32(sample) ^ 0x80) << 8); goto PUT32_END;
+ put32_1234_1234: as_u32(dst) = sample; goto PUT32_END;
+ put32_1234_9234: as_u32(dst) = sample ^ 0x80000000; goto PUT32_END;
+ put32_1234_4321: as_u32(dst) = bswap_32(sample); goto PUT32_END;
+ put32_1234_4329: as_u32(dst) = bswap_32(sample) ^ 0x80; goto PUT32_END;
+-put32_1234_123: _put_triple(dst, sample >> 8); goto PUT32_END;
+-put32_1234_923: _put_triple(dst, (sample ^ 0x80000000) >> 8); goto PUT32_END;
+-put32_1234_321: _put_triple_s(dst, sample >> 8); goto PUT32_END;
+-put32_1234_329: _put_triple_s(dst, (sample ^ 0x80000000) >> 8); goto PUT32_END;
+-put32_1234_123_20: _put_triple(dst, sample >> 12); goto PUT32_END;
+-put32_1234_923_20: _put_triple(dst, (sample ^ 0x80000000) >> 12); goto PUT32_END;
+-put32_1234_321_20: _put_triple_s(dst, sample >> 12); goto PUT32_END;
+-put32_1234_329_20: _put_triple_s(dst, (sample ^ 0x80000000) >> 12); goto PUT32_END;
+-put32_1234_123_18: _put_triple(dst, sample >> 14); goto PUT32_END;
+-put32_1234_923_18: _put_triple(dst, (sample ^ 0x80000000) >> 14); goto PUT32_END;
+-put32_1234_321_18: _put_triple_s(dst, sample >> 14); goto PUT32_END;
+-put32_1234_329_18: _put_triple_s(dst, (sample ^ 0x80000000) >> 14); goto PUT32_END;
++put32_1234_123: _put_triple(dst, shift_down(sample, 8)); goto PUT32_END;
++put32_1234_923: _put_triple(dst, shift_down(sample ^ 0x80000000, 8)); goto PUT32_END;
++put32_1234_321: _put_triple_s(dst, shift_down(sample, 8)); goto PUT32_END;
++put32_1234_329: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 8)); goto PUT32_END;
++put32_1234_123_20: _put_triple(dst, shift_down(sample, 12)); goto PUT32_END;
++put32_1234_923_20: _put_triple(dst, shift_down(sample ^ 0x80000000, 12)); goto PUT32_END;
++put32_1234_321_20: _put_triple_s(dst, shift_down(sample, 12)); goto PUT32_END;
++put32_1234_329_20: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 12)); goto PUT32_END;
++put32_1234_123_18: _put_triple(dst, shift_down(sample, 14)); goto PUT32_END;
++put32_1234_923_18: _put_triple(dst, shift_down(sample ^ 0x80000000, 14)); goto PUT32_END;
++put32_1234_321_18: _put_triple_s(dst, shift_down(sample, 14)); goto PUT32_END;
++put32_1234_329_18: _put_triple_s(dst, shift_down(sample ^ 0x80000000, 14)); goto PUT32_END;
+ }
+ #endif
+
+@@ -1079,3 +1081,4 @@ norms_32_s32s: _norms(src, dst, 32, 1,
+ #undef _put_triple_le
+ #undef _put_triple_be
+
++#undef shift_down
+
+
+
+
diff --git a/abs/core/alsa-oss/PKGBUILD b/abs/core/alsa-oss/PKGBUILD
new file mode 100644
index 0000000..d70a9e9
--- /dev/null
+++ b/abs/core/alsa-oss/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=alsa-oss
+pkgver=1.0.15
+pkgrel=1
+pkgdesc="OSS compatibility library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.alsa-project.org"
+options=(!libtool)
+depends=('glibc' 'alsa-lib>=1.0.15')
+source=(ftp://ftp.alsa-project.org/pub/oss-lib/$pkgname-$pkgver.tar.bz2)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('49fb5fbae8bf955b248e46ff9c9a2aa1')
diff --git a/abs/core/alsa-utils/PKGBUILD b/abs/core/alsa-utils/PKGBUILD
new file mode 100644
index 0000000..a14e0ad
--- /dev/null
+++ b/abs/core/alsa-utils/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=alsa-utils
+pkgver=1.0.16
+pkgrel=1
+pkgdesc="An alternative implementation of Linux sound support"
+arch=(i686 x86_64)
+url="http://www.alsa-project.org"
+depends=('alsa-lib>=1.0.16' 'dialog' 'pciutils' 'ncurses')
+license=('GPL')
+source=(ftp://ftp.alsa-project.org/pub/utils/$pkgname-${pkgver}.tar.bz2 \
+ alsa alsaconf.patch alsa.conf.d)
+backup=(etc/conf.d/alsa)
+md5sums=('b9f803f45e6988bb27a6bed521a949fc'
+ 'cce0969b0203a2bb35540fdf4f7e96ae'
+ '538f82650d08e901efea86c5395520df'
+ '366d370f874a45e67b63ce4a8b048202')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}
+ patch -Np1 -i ../alsaconf.patch || return 1
+ ./configure --prefix=/usr --with-curses=ncursesw
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m755 ../alsa $startdir/pkg/etc/rc.d/alsa
+ install -D -m644 ../alsa.conf.d $startdir/pkg/etc/conf.d/alsa
+}
diff --git a/abs/core/alsa-utils/alsa b/abs/core/alsa-utils/alsa
new file mode 100755
index 0000000..2581a9a
--- /dev/null
+++ b/abs/core/alsa-utils/alsa
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/conf.d/alsa
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Restoring ALSA Levels"
+ /usr/sbin/alsactl restore
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ add_daemon alsa
+ fi
+
+ POWERSAVE=${POWERSAVE:-0}
+ if [ -e /sys/module/snd_ac97_codec/parameters/power_save \
+ -a $POWERSAVE -ne 0 ]; then
+ echo $POWERSAVE > /sys/module/snd_ac97_codec/parameters/power_save
+ echo 1 > /dev/dsp
+ fi
+
+ if [ -e /sys/module/snd_hda_intel/parameters/power_save \
+ -a $POWERSAVE -ne 0 ]; then
+ echo $POWERSAVE > /sys/module/snd_hda_intel/parameters/power_save
+ echo 1 > /dev/dsp
+ fi
+ ;;
+ stop)
+ stat_busy "Saving ALSA Levels"
+ /usr/sbin/alsactl store
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ rm_daemon alsa
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core/alsa-utils/alsa.conf.d b/abs/core/alsa-utils/alsa.conf.d
new file mode 100644
index 0000000..1fa3d38
--- /dev/null
+++ b/abs/core/alsa-utils/alsa.conf.d
@@ -0,0 +1,4 @@
+# Enables powersaving mode for AC97 and hda_intel audio chips.
+# Set to 1 to enable powersaving.
+# Set to 0 to disable powersaving (default).
+POWERSAVE=0
diff --git a/abs/core/alsa-utils/alsaconf.patch b/abs/core/alsa-utils/alsaconf.patch
new file mode 100644
index 0000000..c1d2eb2
--- /dev/null
+++ b/abs/core/alsa-utils/alsaconf.patch
@@ -0,0 +1,21 @@
+diff -Naur alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in alsa-utils-1.0.9a/alsaconf/alsaconf.in
+--- alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in 2005-03-24 00:24:52.000000000 -0800
++++ alsa-utils-1.0.9a/alsaconf/alsaconf.in 2005-07-18 09:25:02.000000000 -0700
+@@ -58,6 +58,8 @@
+ distribution="redhat"
+ elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then
+ distribution="fedora"
++elif test -f /etc/arch-release && grep -q "Arch" /etc/arch-release; then
++ distribution="arch"
+ else
+ distribution="unknown"
+ fi
+@@ -382,6 +384,8 @@
+ rcalsasound=/etc/rc.d/init.d/alsasound
+ elif [ -x /etc/init.d/alsa ]; then
+ rcalsasound=/etc/init.d/alsa
++elif [ -x /etc/rc.d/alsa ]; then
++ rcalsasound=/etc/rc.d/alsa
+ else
+ rcalsasound=rcalsasound
+ fi
diff --git a/abs/core/apache/PKGBUILD b/abs/core/apache/PKGBUILD
new file mode 100644
index 0000000..0bd3936
--- /dev/null
+++ b/abs/core/apache/PKGBUILD
@@ -0,0 +1,81 @@
+# $Id: PKGBUILD 4776 2008-07-09 21:51:30Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apache
+pkgver=2.2.9
+pkgrel=4
+pkgdesc="A high performance Unix-based HTTP server"
+arch=('i686' 'x86_64')
+options=('!libtool')
+url='http://www.apache.org/dist/httpd'
+license=('APACHE')
+backup=(etc/httpd/conf/httpd.conf
+ etc/httpd/conf/extra/httpd-{autoindex,dav,default,info,languages}.conf
+ etc/httpd/conf/extra/httpd-{manual,mpm,multilang-errordoc}.conf
+ etc/httpd/conf/extra/httpd-{ssl,userdir,vhosts}.conf)
+depends=('openssl>=0.9.8b' 'zlib' 'apr-util>=1.3.2-2' 'db>=4.7' 'pcre')
+install='httpd.install'
+source=("http://www.apache.org/dist/httpd/httpd-${pkgver}.tar.bz2"
+ 'httpd.logrotate' 'httpd' 'arch.layout')
+md5sums=('3afa8137dc1999be695a20b62fdf032b'
+ 'f4d627c64024c1b7b95efb5ffbaa625e'
+ 'fb6baeced65b7cf5b80083f278adebba'
+ '3d659d41276ba3bfcb20c231eb254e0c')
+
+build() {
+ cd ${srcdir}/httpd-${pkgver}
+
+ # set default user
+ sed -e 's#User daemon#User http#' \
+ -e 's#Group daemon#Group http#' \
+ -i docs/conf/httpd.conf.in || return 1
+
+ cat ${srcdir}/arch.layout >> config.layout
+ ./configure --enable-layout=Arch \
+ --enable-modules=all \
+ --enable-mods-shared=all \
+ --enable-so \
+ --enable-suexec \
+ --with-suexec-caller=http \
+ --with-suexec-docroot=/srv/http \
+ --with-suexec-logfile=/var/log/httpd/suexec.log \
+ --with-suexec-bin=/usr/sbin/suexec \
+ --with-suexec-uidmin=99 --with-suexec-gidmin=99 \
+ --enable-ldap --enable-authnz-ldap \
+ --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
+ --enable-ssl --with-ssl \
+ --enable-deflate --enable-cgid \
+ --enable-proxy --enable-proxy-connect \
+ --enable-proxy-http --enable-proxy-ftp \
+ --enable-dbd \
+ --with-apr=/usr/bin/apr-1-config \
+ --with-apr-util=/usr/bin/apu-1-config \
+ --with-pcre=/usr || return 1
+
+ make || return 1
+
+ make DESTDIR=${pkgdir} install || return 1
+ install -D -m755 ${srcdir}/httpd ${pkgdir}/etc/rc.d/httpd
+ install -D -m644 ${srcdir}/httpd.logrotate ${pkgdir}/etc/logrotate.d/httpd
+
+ # symlinks for /etc/httpd
+ ln -fs /var/log/httpd ${pkgdir}/etc/httpd/logs
+ ln -fs /var/run/httpd ${pkgdir}/etc/httpd/run
+ ln -fs /usr/lib/httpd/modules ${pkgdir}/etc/httpd/modules
+ ln -fs /usr/lib/httpd/build ${pkgdir}/etc/httpd/build
+
+ # set sane defaults
+ sed -e 's#/usr/lib/httpd/modules/#modules/#' \
+ -e 's|#\(Include conf/extra/httpd-multilang-errordoc.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-autoindex.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-languages.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-userdir.conf\)|\1|' \
+ -e 's|#\(Include conf/extra/httpd-default.conf\)|\1|' \
+ -i ${pkgdir}/etc/httpd/conf/httpd.conf || return 1
+
+ # cleanup
+ rm -rf ${pkgdir}/usr/share/httpd/manual
+ rm -rf ${pkgdir}/etc/httpd/conf/original
+ rm -rf ${pkgdir}/srv/http/*
+ rmdir ${pkgdir}/usr/bin
+}
diff --git a/abs/core/apache/arch.layout b/abs/core/apache/arch.layout
new file mode 100644
index 0000000..ab59db8
--- /dev/null
+++ b/abs/core/apache/arch.layout
@@ -0,0 +1,22 @@
+<Layout Arch>
+ prefix: /etc/httpd
+ exec_prefix: /usr
+ bindir: /usr/bin
+ sbindir: /usr/sbin
+ libdir: /usr/lib/httpd
+ libexecdir: /usr/lib/httpd/modules
+ mandir: /usr/share/man
+ sysconfdir: /etc/httpd/conf
+ datadir: /usr/share/httpd
+ installbuilddir: /usr/lib/httpd/build
+ errordir: /usr/share/httpd/error
+ iconsdir: /usr/share/httpd/icons
+ htdocsdir: /srv/http
+ manualdir: /usr/share/httpd/manual
+ cgidir: /srv/http/cgi-bin
+ includedir: /usr/include/httpd
+ localstatedir: /var
+ runtimedir: /var/run/httpd
+ logfiledir: /var/log/httpd
+ proxycachedir: /var/cache/httpd
+</Layout> \ No newline at end of file
diff --git a/abs/core/apache/httpd b/abs/core/apache/httpd
new file mode 100755
index 0000000..da4de25
--- /dev/null
+++ b/abs/core/apache/httpd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting HTTP Daemon"
+ /usr/sbin/apachectl start &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon httpd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping HTTP Daemon"
+ /usr/sbin/apachectl stop &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon httpd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ reload)
+ if [ -f /var/run/httpd/httpd.pid ]; then
+ status "Reloading HTTP Configuration" kill -HUP `cat /var/run/httpd/httpd.pid`
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|reload}"
+esac
diff --git a/abs/core/apache/httpd.install b/abs/core/apache/httpd.install
new file mode 100644
index 0000000..f72141a
--- /dev/null
+++ b/abs/core/apache/httpd.install
@@ -0,0 +1,16 @@
+post_upgrade() {
+ if [ $(vercmp '2.2.8' $2) -ge 0 ]; then
+ echo '
+ ==> New default DocumentRoot
+
+ Apache httpd uses /srv/http as default DocumentRoot.
+ You can still use your current DocumentRoot
+
+ ==> New default user and group
+
+ Instead of "nobody" apache runs as user/group "http" by default now. You might
+ want to adjust your httpd.conf according to this change. But you can still
+ run httpd as nobody.
+ '
+ fi
+} \ No newline at end of file
diff --git a/abs/core/apache/httpd.logrotate b/abs/core/apache/httpd.logrotate
new file mode 100644
index 0000000..3f9298c
--- /dev/null
+++ b/abs/core/apache/httpd.logrotate
@@ -0,0 +1,5 @@
+/var/log/httpd/*log {
+ postrotate
+ /bin/kill -HUP `cat /var/run/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true
+ endscript
+}
diff --git a/abs/core/apr-util/PKGBUILD b/abs/core/apr-util/PKGBUILD
new file mode 100644
index 0000000..cce5804
--- /dev/null
+++ b/abs/core/apr-util/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4551 2008-07-08 03:25:33Z allan $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apr-util
+pkgver=1.3.2
+pkgrel=2
+pkgdesc="The Apache Portable Runtime"
+arch=('i686' 'x86_64')
+url="http://apr.apache.org/"
+depends=('apr>=1.3.2' 'gdbm' 'expat>=2.0' 'db>=4.7' 'libldap')
+options=('!libtool')
+license=('APACHE')
+source=("http://www.apache.org/dist/apr/apr-util-${pkgver}.tar.bz2")
+md5sums=('aa782fb9ced8b59c8e99419d8cdd1981')
+
+build() {
+ cd ${srcdir}/apr-util-${pkgver}
+
+ ./configure --prefix=/usr --with-apr=/usr \
+ --without-pgsql --without-mysql --without-sqlite2 --without-sqlite3 \
+ --with-berkeley-db=/usr --with-gdbm=/usr --with-ldap
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core/apr/PKGBUILD b/abs/core/apr/PKGBUILD
new file mode 100644
index 0000000..561e8e3
--- /dev/null
+++ b/abs/core/apr/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 8457 2008-08-11 22:13:07Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=apr
+pkgver=1.3.2
+pkgrel=2
+pkgdesc="The Apache Portable Runtime"
+arch=('i686' 'x86_64')
+url="http://apr.apache.org/"
+depends=('e2fsprogs')
+options=('!libtool')
+license=('APACHE')
+source=("http://www.apache.org/dist/apr/apr-${pkgver}.tar.bz2")
+md5sums=('a0631c63640176371dd4a5bf13beeee8')
+
+build() {
+ cd ${srcdir}/apr-${pkgver}
+
+ ./configure --prefix=/usr --includedir=/usr/include/apr-1 \
+ --with-installbuilddir=/usr/share/apr-1/build \
+ --enable-nonportable-atomics \
+ --with-devrandom=/dev/urandom
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core/aspell/PKGBUILD b/abs/core/aspell/PKGBUILD
new file mode 100644
index 0000000..0b8a590
--- /dev/null
+++ b/abs/core/aspell/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 521 2008-04-20 13:00:37Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Jochem Kossen <j.kossen@home.nl>
+pkgname=aspell
+pkgver=0.60.6
+_pkgmajorver=0.60
+pkgrel=1
+pkgdesc="A Free and Open Source spell checker designed to eventually replace Ispell"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gcc-libs' 'ncurses')
+options=(!libtool)
+source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+install=aspell.install
+url="http://aspell.net/"
+md5sums=('bc80f0198773d5c05086522be67334eb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ ln -s ${pkgname}-${_pkgmajorver} ${startdir}/pkg/usr/lib/${pkgname}
+}
diff --git a/abs/core/aspell/aspell.install b/abs/core/aspell/aspell.install
new file mode 100644
index 0000000..b635a4a
--- /dev/null
+++ b/abs/core/aspell/aspell.install
@@ -0,0 +1,8 @@
+post_install() {
+ echo "NOTE: aspell comes with no default dictionary"
+}
+
+op=$1
+shift
+
+[ "$(type -t "$op")" = "function" ] && $op "$@"
diff --git a/abs/core/atk/PKGBUILD b/abs/core/atk/PKGBUILD
new file mode 100644
index 0000000..90ba910
--- /dev/null
+++ b/abs/core/atk/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=atk
+pkgver=1.22.0
+pkgrel=1
+pkgdesc="A library providing a set of interfaces for accessibility"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glib2>=2.16.0')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.22/${pkgname}-${pkgver}.tar.bz2)
+url='http://www.gtk.org/'
+md5sums=('06a2b39a22d5ca35c47435da6b9643ac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/attr/PKGBUILD b/abs/core/attr/PKGBUILD
new file mode 100644
index 0000000..3100b24
--- /dev/null
+++ b/abs/core/attr/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=attr
+pkgver=2.4.41
+pkgrel=10
+pkgdesc="Extended attribute support library for ACL support"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('LGPL')
+groups=('base')
+depends=('glibc')
+makedepends=('gettext')
+replaces=('xfsattr')
+provides=('xfsattr')
+conflicts=('xfsattr')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_${pkgver}-1.tar.gz)
+md5sums=('867eb6e8863e39900382d77e2b538696')
+
+build() {
+ cd $startdir/src/attr-$pkgver
+ autoconf
+ ./configure --prefix=/usr
+ sed -i -e 's/man2//g' man/Makefile
+ make || return 1
+ make prefix=${startdir}/pkg/usr install install-lib install-dev
+
+ # tidy up
+ cd "${startdir}/pkg"
+
+ mkdir -v lib
+ mv -v usr/lib/libattr.so* lib/
+ ln -sv ../../lib/libattr.so.1 usr/lib/libattr.so
+
+ mv -v usr/libexec/libattr.{a,la} usr/lib/
+ rm -rvf usr/libexec
+}
diff --git a/abs/core/aufs-utils/PKGBUILD b/abs/core/aufs-utils/PKGBUILD
new file mode 100644
index 0000000..b845405
--- /dev/null
+++ b/abs/core/aufs-utils/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 2265 2008-05-30 12:12:12Z paul $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <pjmattal@elys.com>
+pkgname=aufs-utils
+pkgver=20080527
+pkgrel=1
+_kernver='2.6.26-ARCH'
+pkgdesc="Another Unionfs Implementation that supports NFS branches"
+arch=('i686' 'x86_64')
+url="http://aufs.sourceforge.net/"
+license=('GPL2')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/aufs/aufs-$pkgver.tar.gz)
+md5sums=('4378221aa5763d1f4408a0bbb0e80f0a')
+
+build() {
+ cd $startdir/src/aufs || return 1
+
+ # configure for NFS by:
+ # 1) configure local.mk to use FILP and LHASH
+ sed -i 's|CONFIG_AUFS_PUT_FILP_PATCH =|CONFIG_AUFS_PUT_FILP_PATCH = y|' \
+ local.mk || return 1
+ sed -i 's|CONFIG_AUFS_LHASH_PATCH =|CONFIG_AUFS_LHASH_PATCH = y|' \
+ local.mk || return 1
+ # 2) configure local.mk NOT to use FAKE_DM
+ sed -i 's|CONFIG_AUFS_FAKE_DM = y|CONFIG_AUFS_FAKE_DM = |' \
+ local.mk || return 1
+
+ # build
+ make KDIR=/usr/src/linux-$_kernver/ -f local.mk || return 1
+
+ # install
+ install -D -m755 util/aufind.sh $startdir/pkg/usr/bin/aufind.sh || return 1
+ install -D -m755 util/aulchown $startdir/pkg/usr/bin/aulchown || return 1
+ install -D -m755 util/auplink $startdir/pkg/usr/bin/auplink || return 1
+ install -D -m755 util/mount.aufs $startdir/pkg/sbin/mount.aufs || return 1
+ install -D -m755 util/umount.aufs $startdir/pkg/sbin/umount.aufs || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/aufs/PKGBUILD b/abs/core/aufs/PKGBUILD
new file mode 100644
index 0000000..57b6e24
--- /dev/null
+++ b/abs/core/aufs/PKGBUILD
@@ -0,0 +1,57 @@
+# $Id: PKGBUILD 5885 2008-07-21 19:28:11Z thomas $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <pjmattal@elys.com>
+pkgname=aufs
+pkgver=20080527
+pkgrel=2
+_kernver='2.6.26-ARCH'
+pkgdesc="Another Unionfs Implementation that supports NFS branches"
+arch=('i686' 'x86_64')
+url="http://aufs.sourceforge.net/"
+license=('GPL2')
+depends=('kernel26>=2.6.26-1' 'kernel26<=2.6.27' 'glibc' 'aufs-utils')
+install=$pkgname.install
+source=(ftp://ftp.archlinux.org/other/aufs/$pkgname-$pkgver.tar.gz)
+options=(!libtool !makeflags)
+md5sums=('4378221aa5763d1f4408a0bbb0e80f0a')
+
+build() {
+ cd $startdir/src/$pkgname || return 1
+
+ # use splice functions exported by unionfs kernel patch
+ # - important for loopback fs mounts
+ sed s'|#if.*KERNEL_VERSION(2, 6, 26).*|#if 0|' -i fs/aufs25/vfsub.h \
+ || return 1
+ sed -i 's|CONFIG_AUFS_SPLICE_PATCH =|CONFIG_AUFS_SPLICE_PATCH = y|' \
+ local.mk || return 1
+
+ # patch for spin_lock conflict with the new unionfs patch
+ sed s'|#if.*KERNEL_VERSION(2, 6, 26).*|#if 0|' -i fs/aufs25/cpup.c \
+ || return 1
+
+ sed -i 's|.*CONFIG_AUFS_SHWH =.*|CONFIG_AUFS_SHWH = y|' \
+ local.mk || return 1
+
+ # configure for NFS by:
+ # 1) configure local.mk to use FILP and LHASH
+ sed -i 's|CONFIG_AUFS_PUT_FILP_PATCH =|CONFIG_AUFS_PUT_FILP_PATCH = y|' \
+ local.mk || return 1
+ sed -i 's|CONFIG_AUFS_LHASH_PATCH =|CONFIG_AUFS_LHASH_PATCH = y|' \
+ local.mk || return 1
+ # 2) configure local.mk NOT to use FAKE_DM
+ sed -i 's|CONFIG_AUFS_FAKE_DM = y|CONFIG_AUFS_FAKE_DM = |' \
+ local.mk || return 1
+
+ # build
+ make KDIR=/usr/src/linux-$_kernver/ -f local.mk || return 1
+
+ # install
+ install -D -m644 fs/aufs25/aufs.ko \
+ $startdir/pkg/lib/modules/$_kernver/fs/aufs25/aufs.ko || return 1
+
+ # tweak the install script for the right kernel version
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
+ $startdir/$pkgname.install || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/aufs/aufs.install b/abs/core/aufs/aufs.install
new file mode 100644
index 0000000..42d039a
--- /dev/null
+++ b/abs/core/aufs/aufs.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/b43-fwcutter/PKGBUILD b/abs/core/b43-fwcutter/PKGBUILD
new file mode 100644
index 0000000..a1f73b8
--- /dev/null
+++ b/abs/core/b43-fwcutter/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=b43-fwcutter
+pkgver=011
+pkgrel=1
+pkgdesc="firmware extractor for the bcm43xx kernel module"
+url="http://linuxwireless.org/en/users/Drivers/b43"
+depends=('glibc')
+license=('GPL')
+arch=('i686' 'x86_64')
+source=(http://bu3sch.de/b43/fwcutter/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3db2f4de85a459451f5b391cf67a8d44')
+
+build()
+{
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ install -D -m755 b43-fwcutter $startdir/pkg/usr/bin/b43-fwcutter || return 1
+ install -D -m644 b43-fwcutter.1 $startdir/pkg/usr/share/man/man1/b43-fwcutter.1 || return 1
+}
diff --git a/abs/core/base.list b/abs/core/base.list
new file mode 100755
index 0000000..004186f
--- /dev/null
+++ b/abs/core/base.list
@@ -0,0 +1,98 @@
+base acl
+base attr
+base bash
+base binutils
+base bzip2
+base ca-certificates
+base coreutils
+base cpio
+base cracklib
+base cryptsetup
+base dash
+base db
+base dcron
+base device-mapper
+base dhcpcd
+base dialog
+base dmapi
+base e2fsprogs
+base file
+base filesystem
+base findutils
+base gawk
+base gcc-libs
+base gdbm
+base gen-init-cpio
+base gettext
+base glibc
+base grep
+base groff
+base grub
+base gzip
+base hdparm
+base hwdetect
+base initscripts
+base iputils
+base jfsutils
+base kbd
+base kernel-headers
+base kernel26
+base klibc
+base klibc-extras
+base klibc-kbd
+base klibc-module-init-tools
+base klibc-udev
+base less
+base libarchive
+base libdownload
+base libgcrypt
+base libgpg-error
+base libpcap
+base libusb
+base licenses
+base logrotate
+base lvm2
+base lzo2
+base mailx
+base man
+base man-pages
+base mdadm
+base mkinitcpio
+base mlocate
+base module-init-tools
+base nano
+base ncurses
+base net-tools
+base openssl
+base pacman
+base pam
+base pciutils
+base pcmciautils
+base pcre
+base perl
+base popt
+base ppp
+base procinfo
+base procps
+base psmisc
+base readline
+base reiserfsprogs
+base rp-pppoe
+base sdparm
+base sed
+base shadow
+base sysfsutils
+base syslog-ng
+base sysvinit
+base tar
+base tcp_wrappers
+base tzdata
+base udev
+base usbutils
+base util-linux-ng
+base vi
+base wget
+base which
+base wpa_supplicant
+base xfsprogs
+base zlib
diff --git a/abs/core/bash/PKGBUILD b/abs/core/bash/PKGBUILD
new file mode 100644
index 0000000..24f80ef
--- /dev/null
+++ b/abs/core/bash/PKGBUILD
@@ -0,0 +1,87 @@
+# $Id: PKGBUILD 5542 2008-07-18 15:21:56Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=bash
+_patchlevel=039
+pkgver=3.2.$_patchlevel
+pkgrel=11
+pkgdesc="The GNU Bourne Again shell"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.gnu.org/software/bash/bash.html"
+groups=('base')
+backup=(etc/profile.bash etc/skel/.bashrc etc/skel/.bash_profile)
+depends=('readline>=5.2' 'glibc')
+provides=('sh')
+source=(http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz
+ bash-noinfo.patch profile.bash bashrc)
+for p in $(seq -w 001 $_patchlevel); do
+ source=(${source[@]} http://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-$p)
+done
+md5sums=('00bfa16d58e034e3c2aa27f390390d30'
+ 'f2a3cf51e58f9b82af50b861191d96fd'
+ 'c2fae355facefcac8a732cce877da194'
+ '9451109f3fe09d6381cbf36de9fbf06f'
+ 'd8e10c754f477e3f3a581af566b89301'
+ 'd38a5288b2f0ea6c9ac76b66cc74ef7d'
+ '0b90d37911827d8cb95f3b4353cc225e'
+ '8062f3a59631f58d78b180d83759b68a'
+ '585b5943fadf0875ced243b245adde58'
+ '1d5732e01ea938aeed42f3def131fa4d'
+ 'dcd0cc5d801607827f7c851e72b0eabc'
+ 'bb3c7dd11198c0ab93d0e960bebf6256'
+ '434a6f29b0ca5f1ab784b2437ae8eaed'
+ '2efff04dd246fcf63bd4b99f77c9a081'
+ '1dd104342f6920dfaf5efb3131e922e0'
+ '4f24b696ab78bdfae4f9cb7eb59b835d'
+ '7c40addbf1187a26ae1c8373ed383442'
+ '28e88c9f8679e99ac590d4a4a8227c56'
+ '7c17d29675bd0d49470f162774385f80'
+ 'a1edaa98b4449fe2205fa75448b7b105'
+ '889ed119bbf9d363660b9a0127f35efa'
+ 'a7d3f85fa687d2c1b5a134839f6d395d'
+ 'f0399da4007e46fc5820ce25d07425b9'
+ 'b76602281c3104d904fd064510fe0c21'
+ '923374ae4403c92820f711e62e1d01a5'
+ 'c82d3bd14e373878b2a680dce18d1596'
+ '987c949a77b4b0ffe4a2597141e77635'
+ '5a2b976e761ab83f0fc7daae11451b86'
+ '08668dc2825f65eced9cac6b09ce1b45'
+ 'f35b2b217f088ff009f956894550d41d'
+ 'b5ff2b9610c61290f773c4b02cc1a37d'
+ '016f5b56c93404d32aea09385f0fc13e'
+ 'a81420626d4d88d0dce2ffac0ac56341'
+ '11f91baf970c132949f9072ee93f2ea6'
+ 'f6bbc1e8ec0246740731c728ef476191'
+ '8180ec936770579bce69f0816c2dd878'
+ '3cec33c3711860c4c6b7614afeec7870'
+ '7bc6c5b5f38b7027152f8db0458a2e14'
+ 'a2db61fe90e39371d0e6cd2285ec9208'
+ '95c70c7ae9de5bd3659c86284be7fb76'
+ '62b876a3d7cd192cc8db2476fbb6b7b9'
+ 'aca3afc341bd3e5a0d8a3b4ca40dbb3f'
+ 'e240c34f979b64bcb83c5f6567110bb1')
+
+build() {
+ cd ${startdir}/src/${pkgname}-3.2
+ for p in ../bash32-*; do
+ msg "applying patch ${p}"
+ patch -Np0 -i ${p} || return 1
+ done
+ patch -Np1 -i ../bash-noinfo.patch || return 1
+ ./configure --prefix=/usr --with-curses --enable-readline \
+ --without-bash-malloc --with-installed-readline \
+ --bindir=/bin --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ install -D -m644 ${startdir}/src/profile.bash ${startdir}/pkg/etc/profile.bash
+
+ # for now, bash is our default /bin/sh
+ cd ${startdir}/pkg/bin
+ ln -s bash sh
+
+ mkdir -p $startdir/pkg/etc/skel/
+ install -D -m644 $startdir/src/bashrc $startdir/pkg/etc/skel/.bashrc
+ echo ". \$HOME/.bashrc" >$startdir/pkg/etc/skel/.bash_profile
+}
diff --git a/abs/core/bash/bash-noinfo.patch b/abs/core/bash/bash-noinfo.patch
new file mode 100644
index 0000000..856ec80
--- /dev/null
+++ b/abs/core/bash/bash-noinfo.patch
@@ -0,0 +1,12 @@
+diff -Naur bash-3.0-orig/doc/Makefile.in bash-3.0/doc/Makefile.in
+--- bash-3.0-orig/doc/Makefile.in 2004-07-27 05:57:48.000000000 -0700
++++ bash-3.0/doc/Makefile.in 2005-02-11 22:44:49.000000000 -0800
+@@ -220,7 +220,7 @@
+ $(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(htmldir) ; \
+ fi
+
+-install: info installdirs bash.info
++install: installdirs
+ -$(INSTALL_DATA) $(srcdir)/bash.1 $(DESTDIR)$(man1dir)/bash${man1ext}
+ -$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
+ # uncomment the next line to install the builtins man page
diff --git a/abs/core/bash/bashrc b/abs/core/bash/bashrc
new file mode 100644
index 0000000..fcabce0
--- /dev/null
+++ b/abs/core/bash/bashrc
@@ -0,0 +1,3 @@
+alias ls='ls --color=auto'
+PS1='[\u@\h \W]\$ '
+
diff --git a/abs/core/bash/profile b/abs/core/bash/profile
new file mode 100644
index 0000000..ca1d402
--- /dev/null
+++ b/abs/core/bash/profile
@@ -0,0 +1,35 @@
+#
+# /etc/profile
+#
+
+export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/opt/bin"
+
+export MANPATH="/usr/man:/usr/X11R6/man"
+export LESSCHARSET="latin1"
+export INPUTRC="/etc/inputrc"
+export LESS="-R"
+
+export LC_COLLATE="C"
+
+export COLUMNS LINES
+
+export PS1='[\u@\h \W]\$ '
+export PS2='> '
+
+umask 022
+
+if [ "$TERM" = "xterm" -o "$TERM" = "xterm-color" -o "$TERM" = "rxvt" -o "$TERM" = "xterm-xfree86" ]; then
+ PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+fi
+
+# load profiles from /etc/profile.d
+# (to disable a profile, just remove execute permission on it)
+if [ `ls -A1 /etc/profile.d/ | wc -l` -gt 0 ]; then
+ for profile in /etc/profile.d/*.sh; do
+ if [ -x $profile ]; then
+ . $profile
+ fi
+ done
+ unset profile
+fi
+# End of file
diff --git a/abs/core/bash/profile.bash b/abs/core/bash/profile.bash
new file mode 100644
index 0000000..8a7e1aa
--- /dev/null
+++ b/abs/core/bash/profile.bash
@@ -0,0 +1,25 @@
+#
+# /etc/profile.bash
+# Global settings for bash shells
+#
+
+PS1='[\u@\h \W]\$ '
+PS2='> '
+PS3='> '
+PS4='+ '
+
+export PS1 PS2 PS3 PS4
+
+#In the future we may want to add more ulimit entries here,
+# in the offchance that /etc/security/limits.conf is skipped
+ulimit -Sc 0 #Don't create core files
+
+if test "$TERM" = "xterm" -o \
+ "$TERM" = "xterm-color" -o \
+ "$TERM" = "xterm-256color" -o \
+ "$TERM" = "rxvt" -o \
+ "$TERM" = "rxvt-unicode" -o \
+ "$TERM" = "xterm-xfree86"; then
+ PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+ export PROMPT_COMMAND
+fi
diff --git a/abs/core/bc/PKGBUILD b/abs/core/bc/PKGBUILD
new file mode 100644
index 0000000..88a85df
--- /dev/null
+++ b/abs/core/bc/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=bc
+pkgver=1.06
+pkgrel=4
+pkgdesc="An arbitrary precision calculator language"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('readline')
+replaces=(bc-readline)
+conflicts=(bc-readline)
+source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ build-fix.patch)
+md5sums=('d44b5dddebd8a7a7309aea6c36fda117' 'fc7ecbd9e55ef04c6d3a495692626116')
+
+build() {
+ CFLAGS="$CFLAGS -O3"
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/build-fix.patch || return 1
+ ./configure --prefix=/usr --with-readline
+ make LEX="flex -I" || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/bc/build-fix.patch b/abs/core/bc/build-fix.patch
new file mode 100644
index 0000000..98a4082
--- /dev/null
+++ b/abs/core/bc/build-fix.patch
@@ -0,0 +1,13 @@
+diff -wbBur bc-1.06/bc/scan.l bc-1.06.my/bc/scan.l
+--- bc-1.06/bc/scan.l 2000-09-13 22:25:47 +0400
++++ bc-1.06.my/bc/scan.l 2006-12-25 12:39:34 +0300
+@@ -143,7 +143,9 @@
+
+ /* Definitions for readline access. */
+ extern FILE *rl_instream;
++#if 0
+ _PROTOTYPE(char *readline, (char *));
++#endif
+
+ /* rl_input puts upto MAX characters into BUF with the number put in
+ BUF placed in *RESULT. If the yy input file is the same as
diff --git a/abs/core/bigreqsproto/PKGBUILD b/abs/core/bigreqsproto/PKGBUILD
new file mode 100644
index 0000000..2b2bc95
--- /dev/null
+++ b/abs/core/bigreqsproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=bigreqsproto
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Big Requests extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('95c29d9d10bf2868996c0c47a3b9a8dc')
+sha1sums=('8f6c112f607a137dce5d8958753c770ac3f06c14')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/binutils/PKGBUILD b/abs/core/binutils/PKGBUILD
new file mode 100644
index 0000000..f958da6
--- /dev/null
+++ b/abs/core/binutils/PKGBUILD
@@ -0,0 +1,67 @@
+# $Id: PKGBUILD 2707 2008-06-12 14:03:09Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+# compile always twice: first binutils, then gcc, then binutils again
+
+pkgname=binutils
+pkgver=2.18
+pkgrel=17
+_date=20080610
+pkgdesc="A set of programs to assemble and manipulate binary and object files"
+arch=('i686' 'x86_64')
+url="http://sources.redhat.com/binutils"
+license=('GPL')
+groups=('base')
+options=('!libtool' '!distcc' '!ccache')
+depends=('glibc>=2.8-1')
+makedepends=('texinfo>=4.12-2')
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}_${_date}.tar.bz2)
+md5sums=('9847b4141a1c99558cfd88dd65182566')
+
+build() {
+ # for cvs checkout
+# mkdir ${startdir}/src/${pkgname}-${_date}
+# cd ${startdir}/src/${pkgname}-${_date}
+# export _TAG=binutils-2_18-branch
+# export 'CVSROOT=:pserver:anoncvs@sourceware.org:/cvs/src'
+# cvs -z9 co -r $_TAG binutils || return 1
+# cd src && tar -cvjf ../binutils-2.18_${_date}.tar.bz2 *
+# return 1
+
+ cd ${startdir}/src
+ autoconf
+
+ mkdir build
+ cd build
+
+ CC="gcc -L`pwd`/bfd/.libs/"
+ if [ "${CARCH}" = "x86_64" ]; then
+ ../configure --prefix=/usr --enable-shared --enable-64-bit-bfd --disable-multilib
+ else
+ ../configure --prefix=/usr --enable-shared
+ fi
+
+ # This checks the host environment and makes sure all the necessary tools are available to compile Binutils.
+ make configure-host || return 1
+
+ make tooldir=${startdir}/pkg/usr || return 1
+ make prefix=${startdir}/pkg/usr tooldir=${startdir}/pkg/usr install
+ install -m 644 ../include/libiberty.h ${startdir}/pkg/usr/include
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # Rebuild libiberty.a with -fPIC
+ make -C libiberty clean
+ make CFLAGS="$CFLAGS -fPIC" -C libiberty
+ install -m 644 libiberty/libiberty.a ${startdir}/pkg/usr/lib
+ # Rebuild libbfd.a with -fPIC
+ make -C bfd clean
+ make CFLAGS="$CFLAGS -fPIC" -C bfd
+ install -m 644 bfd/libbfd.a ${startdir}/pkg/usr/lib
+ fi
+
+ rm -f ${startdir}/pkg/usr/share/man/man1/{dlltool,nlmconv,windres,windmc}*
+
+ # Remove these symlinks, with binutils prereleases they are not ABI stable.
+ # Programs should compile static to the .a file.
+ rm -f ${startdir}/pkg/usr/lib/lib{bfd,opcodes}.so
+}
diff --git a/abs/core/bzip2/PKGBUILD b/abs/core/bzip2/PKGBUILD
new file mode 100644
index 0000000..bd3b1c2
--- /dev/null
+++ b/abs/core/bzip2/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 7561 2008-08-02 22:14:50Z jgc $
+# Maintainer: Judd <jvinet@zeroflux.org>
+
+pkgname=bzip2
+pkgver=1.0.5
+pkgrel=12
+pkgdesc="A high-quality data compression program"
+arch=(i686 x86_64)
+license=('custom')
+url="http://sources.redhat.com/bzip2"
+groups=('base')
+depends=('glibc')
+source=(http://www.bzip.org/$pkgver/bzip2-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/bin $startdir/pkg/usr/share/man/man1
+ mkdir -p $startdir/pkg/usr/include $startdir/pkg/usr/lib
+ mkdir -p $startdir/pkg/lib
+ # add large-file support
+ sed -e 's/^CFLAGS=\(.*\)$/CFLAGS=\1 \$(BIGFILES)/' -i ./Makefile-libbz2_so
+ make -f Makefile-libbz2_so || return 1
+ make bzip2recover libbz2.a || return 1
+ ln -s libbz2.so.1.0.4 libbz2.so
+ ln -s libbz2.so.1.0.4 libbz2.so.1
+ cp bzip2-shared $startdir/pkg/bin/bzip2
+ cp bzip2recover $startdir/pkg/bin
+ cp bzip2.1 $startdir/pkg/usr/share/man/man1
+ mkdir -p $startdir/pkg/usr/include
+ cp bzlib.h $startdir/pkg/usr/include
+ cp -a libbz2.so* $startdir/pkg/lib
+ rm -f $startdir/pkg/usr/lib/libbz2.a
+ cp libbz2.a $startdir/pkg/usr/lib
+ cd $startdir/pkg/usr/lib
+ ln -sf ../../lib/libbz2.so
+ cd $startdir/pkg/bin
+ ln -sf bzip2 bunzip2
+ ln -sf bzip2 bzcat
+ cd $startdir/pkg/usr/share/man/man1
+ ln -sf bzip2.1 bunzip2.1
+ ln -sf bzip2.1 bzcat.1
+ ln -sf bzip2.1 bzip2recover.1
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
+md5sums=('3c15a0c8d1d3ee1c46a1634d00617b1a')
diff --git a/abs/core/ca-certificates/PKGBUILD b/abs/core/ca-certificates/PKGBUILD
new file mode 100644
index 0000000..03871c6
--- /dev/null
+++ b/abs/core/ca-certificates/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 9715 2008-08-18 10:20:37Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=ca-certificates
+pkgver=20080809
+pkgrel=13
+pkgdesc='Common CA certificates'
+arch=('i686' 'x86_64')
+url='http://packages.qa.debian.org/c/ca-certificates.html'
+license=('MPL' 'GPL')
+source=("http://ftp.debian.org/debian/pool/main/c/${pkgname}/${pkgname}_${pkgver}.tar.gz")
+depends=('bash' 'run-parts' 'openssl' 'findutils' 'coreutils' 'sed')
+makedepends=('ruby')
+groups=('base')
+install=ca-certificates.install
+backup=('etc/ca-certificates.conf')
+md5sums=('c155f5059006b94ad0aea7018161ab37')
+
+build() {
+ cd $srcdir/$pkgname
+
+ install -d -m755 $pkgdir/{etc/ca-certificates/update.d,usr/{sbin,share/ca-certificates}}
+ install -D -m644 sbin/update-ca-certificates.8 $pkgdir/usr/share/man/man8/update-ca-certificates.8
+ make
+ make install DESTDIR=$pkgdir
+
+ (
+ echo "# Automatically generated by ${pkgname}-${pkgver}-${pkgrel}"
+ echo "# "
+ cd $pkgdir/usr/share/ca-certificates
+ find . -name '*.crt' | sort | cut -b3-
+ ) > $pkgdir/etc/ca-certificates.conf
+}
diff --git a/abs/core/ca-certificates/ca-certificates.install b/abs/core/ca-certificates/ca-certificates.install
new file mode 100644
index 0000000..3a7ac28
--- /dev/null
+++ b/abs/core/ca-certificates/ca-certificates.install
@@ -0,0 +1,7 @@
+post_install() {
+ usr/sbin/update-ca-certificates --fresh
+}
+
+post_upgrade() {
+ post_install
+}
diff --git a/abs/core/cairo/PKGBUILD b/abs/core/cairo/PKGBUILD
new file mode 100644
index 0000000..16f38b3
--- /dev/null
+++ b/abs/core/cairo/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 491 2008-04-20 11:39:47Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Brice Carpentier <brice@daknet.org>
+
+pkgname=cairo
+pkgver=1.6.4
+pkgrel=1
+pkgdesc="Cairo vector graphics library"
+arch=(i686 x86_64)
+license=('LGPL' 'MPL')
+url="http://cairographics.org/"
+depends=('libpng>=1.2.25' 'libxrender' 'fontconfig>=2.5.0' 'pixman>=0.10.0')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://cairographics.org/releases/${pkgname}-${pkgver}.tar.gz)
+md5sums=('a198d509f9e3a35b78de8bb02174ebb9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/cdparanoia/ChangeLog b/abs/core/cdparanoia/ChangeLog
new file mode 100644
index 0000000..f1873ff
--- /dev/null
+++ b/abs/core/cdparanoia/ChangeLog
@@ -0,0 +1,18 @@
+2008-08-07 Alexander Fehr <pizzapunk gmail com>
+
+ * cdparanoia-10.1-1:
+ New upstream release.
+ Changed license to GPL.
+ Added !makeflags option.
+
+2008-07-07 Alexander Fehr <pizzapunk gmail com>
+
+ * cdparanoia-10.0-1:
+ New upstream release.
+ New maintainer.
+ Added arch variable.
+ Changed license to GPL3.
+ Fixed man page location.
+ Removed cdparanoia.patch.
+ Removed gcc34.patch.
+ Added ChangeLog.
diff --git a/abs/core/cdparanoia/PKGBUILD b/abs/core/cdparanoia/PKGBUILD
new file mode 100644
index 0000000..a29bac7
--- /dev/null
+++ b/abs/core/cdparanoia/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8181 2008-08-08 15:48:07Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+
+pkgname=cdparanoia
+pkgver=10.1
+pkgrel=1
+pkgdesc="Compact Disc Digital Audio extraction tool"
+arch=('i686' 'x86_64')
+url="http://www.xiph.org/paranoia/"
+license=('GPL')
+depends=('glibc')
+options=('!makeflags')
+source=(http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-$pkgver.src.tgz)
+md5sums=('abf410217c4ba42f927bfd9d7b86e163')
+
+build() {
+ cd "$srcdir/cdparanoia-III-$pkgver"
+
+ ./configure --prefix=/usr --mandir=/usr/share/man || return 1
+ make || return 1
+ make prefix="$pkgdir/usr" MANDIR="$pkgdir/usr/share/man" install || return 1
+}
diff --git a/abs/core/cdrdao/PKGBUILD b/abs/core/cdrdao/PKGBUILD
new file mode 100644
index 0000000..ff79afd
--- /dev/null
+++ b/abs/core/cdrdao/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=cdrdao
+pkgver=1.2.2
+pkgrel=2
+pkgdesc="Records audio/data CD-Rs in disk-at-once (DAO) mode"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://cdrdao.sourceforge.net/"
+depends=('gcc-libs' 'lame' 'libmad' 'libvorbis' 'libao')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ cdrdao-1.2.2-gcc43.patch)
+md5sums=('f0cbf36907406cb4f4c568f9e6669a34' '828963048850fe9e540c2b29ee987fd7')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/cdrdao-1.2.2-gcc43.patch
+ ./configure --prefix=/usr --with-lame
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/cdrdao/cdrdao-1.2.2-gcc43.patch b/abs/core/cdrdao/cdrdao-1.2.2-gcc43.patch
new file mode 100644
index 0000000..f6707a9
--- /dev/null
+++ b/abs/core/cdrdao/cdrdao-1.2.2-gcc43.patch
@@ -0,0 +1,73 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+## 09-gcc-3.4.dpatch by Matthias Klose <doko@debian.org>
+##
+## DP: Fix build failures with g++-4.3 (Closes: #455309).
+
+@DPATCH@
+
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatConverter.cc cdrdao-1.2.2/trackdb/FormatConverter.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatConverter.cc 2005-05-10 00:55:28.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatConverter.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -22,6 +22,7 @@
+ #include <ao/ao.h>
+ #endif
+ #include <fstream>
++#include <cstring>
+
+ #include "config.h"
+ #include "util.h"
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatOgg.cc cdrdao-1.2.2/trackdb/FormatOgg.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatOgg.cc 2005-04-22 02:01:46.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatOgg.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -18,6 +18,7 @@
+ */
+
+ #include <stdio.h>
++#include <cstring>
+
+ #include "util.h"
+ #include "FormatOgg.h"
+diff -Naurp cdrdao-1.2.2.orig/trackdb/FormatMp3.cc cdrdao-1.2.2/trackdb/FormatMp3.cc
+--- cdrdao-1.2.2.orig/trackdb/FormatMp3.cc 2005-09-24 20:28:43.000000000 +0000
++++ cdrdao-1.2.2/trackdb/FormatMp3.cc 2008-03-07 11.14.07.000000000 +0000
+@@ -25,6 +25,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <cstring>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
+diff -Naurp cdrdao-1.2.2.orig/trackdb/TempFileManager.cc cdrdao-1.2.2/trackdb/TempFileManager.cc
+--- cdrdao-1.2.2.orig/trackdb/TempFileManager.cc 2005-04-22 02:01:46.000000000 +0000
++++ cdrdao-1.2.2/trackdb/TempFileManager.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -24,6 +24,7 @@
+ #include <sys/stat.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <cstring>
+
+ #define DEFAULT_TEMP_PATH "/tmp/"
+
+diff -Naurp cdrdao-1.2.2.orig/xdao/AudioCDProject.cc cdrdao-1.2.2/xdao/AudioCDProject.cc
+--- cdrdao-1.2.2.orig/xdao/AudioCDProject.cc 2006-09-18 10:42:26.000000000 +0000
++++ cdrdao-1.2.2/xdao/AudioCDProject.cc 2008-03-07 11:15:26.000000000 +0000
+@@ -18,6 +18,7 @@
+ */
+
+ #include <assert.h>
++#include <cstring>
+ #include <gtkmm.h>
+ #include <libgnome/gnome-i18n.h>
+
+diff -Naurp cdrdao-1.2.2.orig/xdao/TextEdit.cc cdrdao-1.2.2/xdao/TextEdit.cc
+--- cdrdao-1.2.2.orig/xdao/TextEdit.cc 2004-02-12 01:13:32.000000000 +0000
++++ cdrdao-1.2.2/xdao/TextEdit.cc 2008-03-07 11:14:07.000000000 +0000
+@@ -21,6 +21,7 @@
+
+ #include <stddef.h>
+ #include <ctype.h>
++#include <cstring>
+
+ TextEdit::TextEdit(const char *sample) : Gtk::Entry()
+ {
diff --git a/abs/core/cdrdao/gcc4.patch b/abs/core/cdrdao/gcc4.patch
new file mode 100644
index 0000000..8fc84b7
--- /dev/null
+++ b/abs/core/cdrdao/gcc4.patch
@@ -0,0 +1,23 @@
+--- cdrdao-1.2.0/trackdb/FormatConverter.h 2005-06-30 13:35:59.000000000 +0200
++++ cdrdao-1.2.0.az/trackdb/FormatConverter.h 2005-06-30 13:34:18.000000000 +0200
+@@ -95,7 +95,7 @@
+
+ // Convert all files contained in a given Toc object, and update the
+ // Toc accordingly. This is a big time blocking call.
+- FormatSupport::Status convert(Toc* toc);
++ FormatSupport::Status convert(class Toc* toc);
+
+ // Dynamic allocator.
+ FormatSupport* newConverter(const char* src);
+--- cdrdao-1.2.0/trackdb/CueParser.cc 2005-06-30 13:36:09.000000000 +0200
++++ cdrdao-1.2.0.az/trackdb/CueParser.cc 2005-06-30 13:36:22.000000000 +0200
+@@ -23,7 +23,7 @@
+
+ #include "Cue2Toc.h"
+
+-extern Toc *parseToc(const char* tocBuffer, const char *filename);
++extern class Toc *parseToc(const char* tocBuffer, const char *filename);
+
+ Toc *parseCue(FILE *fp, const char *filename)
+ {
+
diff --git a/abs/core/cdrkit/ChangeLog b/abs/core/cdrkit/ChangeLog
new file mode 100644
index 0000000..b09c057
--- /dev/null
+++ b/abs/core/cdrkit/ChangeLog
@@ -0,0 +1,10 @@
+2008-07-14 Alexander Fehr <pizzapunk gmail com>
+
+ * cdrkit-1.1.8-1:
+ New upstream release.
+ New maintainer.
+ Changed license to GPL2.
+ Added dependency on bzip2.
+ Removed replaces cdrtools.
+ Cleaned up cdrtools compatibility symlinks.
+ Added ChangeLog.
diff --git a/abs/core/cdrkit/PKGBUILD b/abs/core/cdrkit/PKGBUILD
new file mode 100644
index 0000000..1f8bfa8
--- /dev/null
+++ b/abs/core/cdrkit/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 5822 2008-07-21 11:34:04Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+
+pkgname=cdrkit
+pkgver=1.1.8
+pkgrel=1
+pkgdesc="Suite of programs for CD/DVD recording, ISO image creation, and audio CD extraction"
+arch=('i686' 'x86_64')
+url="http://cdrkit.org/"
+license=('GPL2')
+depends=('libcap' 'file' 'bzip2')
+makedepends=('cmake')
+provides=('cdrtools')
+conflicts=('cdrtools')
+source=(http://cdrkit.org/releases/cdrkit-$pkgver.tar.gz)
+md5sums=('97a9ea4e1bf59beb12aca649958d8c6c')
+
+build() {
+ cd "$srcdir/cdrkit-$pkgver"
+
+ make || return 1
+ make PREFIX="$pkgdir/usr" install || return 1
+
+ # Make symlinks for cdrtools compatibility
+ cd "$pkgdir/usr/bin"
+ ln -s wodim cdrecord || return 1
+ ln -s readom readcd || return 1
+ ln -s genisoimage mkisofs || return 1
+ ln -s genisoimage mkhybrid || return 1
+ ln -s icedax cdda2wav || return 1
+
+ cd "$pkgdir/usr/share/man/man1"
+ ln -s wodim.1 cdrecord.1 || return 1
+ ln -s readom.1 readcd.1 || return 1
+ ln -s genisoimage.1 mkisofs.1 || return 1
+ ln -s genisoimage.1 mkhybrid.1 || return 1
+ ln -s icedax.1 cdda2wav.1 || return 1
+}
diff --git a/abs/core/compositeproto/PKGBUILD b/abs/core/compositeproto/PKGBUILD
new file mode 100644
index 0000000..5ccaa8f
--- /dev/null
+++ b/abs/core/compositeproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=compositeproto
+pkgver=0.4
+pkgrel=1
+pkgdesc="X11 Composite extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(fixesproto)
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('6281344d656d4e0c8e9db4918efe3d1d')
diff --git a/abs/core/coreutils/PKGBUILD b/abs/core/coreutils/PKGBUILD
new file mode 100644
index 0000000..bb35755
--- /dev/null
+++ b/abs/core/coreutils/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 2936 2008-06-16 06:21:37Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=coreutils
+pkgver=6.12
+pkgrel=10
+pkgdesc="The basic file, shell and text manipulation utilities of the GNU operating system"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://www.gnu.org/software/coreutils"
+groups=('base')
+depends=('glibc>=2.7-9' 'shadow>=4.0.18.2-2' 'pam>=1.0.1-1' 'acl>=2.2.47-1')
+provides=('mktemp')
+conflicts=('mktemp')
+replaces=('sh-utils' 'fileutils' 'textutils' 'mktemp')
+backup=('etc/pam.d/su')
+options=('!emptydirs')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz
+ coreutils-i18n.patch
+ coreutils-uname.patch
+ coreutils-pam.patch
+ coreutils-6.10-configuration.patch
+ su)
+md5sums=('2ca9ac69823dbd567b905a9e9f53c4f6'
+ '64991a860ddb98a9b7a2a5a0221a399a'
+ '18d3ba178e2691242287b59bd81aedb9'
+ '8810a22cdc05d502a69b59511e9abf79'
+ 'e0f3edab474a4c96591c4f94a7962c9b'
+ 'fa85e5cce5d723275b14365ba71a8aad')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # only needed if new autoconf 2.62 is used
+ autoreconf
+
+ # added pam patch and i18n patch from fedora cvs
+ patch -Np1 -i ../coreutils-pam.patch || return 1
+ patch -Np1 -i ../coreutils-i18n.patch || return 1
+ patch -Np1 -i ../coreutils-6.10-configuration.patch || return 1
+ # from gentoo portage
+ patch -Np1 -i ../coreutils-uname.patch || return 1
+ # make head and tail recognize the old syntax (eg, tail -10)
+ export DEFAULT_POSIX2_VERSION=199209
+
+ autoconf
+ ./configure --prefix=/usr ac_cv_func_openat=no --enable-install-program=su --enable-pam
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ rm -f $startdir/pkg/usr/bin/hostname $startdir/pkg/usr/share/man/man1/hostname.1 || return 1
+ rm -f $startdir/pkg/usr/bin/uptime $startdir/pkg/usr/share/man/man1/uptime.1 || return 1
+ rm -f $startdir/pkg/usr/bin/groups $startdir/pkg/usr/share/man/man1/groups.1 || return 1
+ rm -f $startdir/pkg/usr/bin/kill $startdir/pkg/usr/share/man/man1/kill.1|| return 1
+ cd $startdir/pkg/usr/bin
+ mkdir -p $startdir/pkg/bin $startdir/pkg/sbin $startdir/pkg/usr/sbin
+ mv su date echo false pwd stty true uname cat tr cut readlink ../../bin
+ mv dd cp df du ln ls mv rm dir sync vdir chgrp chmod chown ../../bin
+ mv mkdir mknod rmdir shred touch mkfifo dircolors install sleep ../../bin
+ mv chroot ../sbin
+ ln -sf test [
+ ln -sf /bin/sleep $startdir/pkg/usr/bin/sleep
+ install -D -m644 $startdir/src/su $startdir/pkg/etc/pam.d/su
+}
diff --git a/abs/core/coreutils/coreutils-6.10-configuration.patch b/abs/core/coreutils/coreutils-6.10-configuration.patch
new file mode 100644
index 0000000..f80ab84
--- /dev/null
+++ b/abs/core/coreutils/coreutils-6.10-configuration.patch
@@ -0,0 +1,62 @@
+diff -urN coreutils-6.12-orig/tests/misc/cut coreutils-6.12/tests/misc/cut
+--- coreutils-6.12-orig/tests/misc/cut 2008-05-17 08:41:11.000000000 +0200
++++ coreutils-6.12/tests/misc/cut 2008-06-02 11:13:08.000000000 +0200
+@@ -26,7 +26,7 @@
+ my $prog = 'cut';
+ my $try = "Try \`$prog --help' for more information.\n";
+ my $from_1 = "$prog: fields and positions are numbered from 1\n$try";
+-my $inval = "$prog: invalid byte or field list\n$try";
++my $inval = "$prog: invalid byte, character or field list\n$try";
+ my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try";
+
+ my @Tests =
+@@ -140,8 +140,8 @@
+ ['od-overlap5', '-b1-3,1-4', '--output-d=:', {IN=>"abcde\n"}, {OUT=>"abcd\n"}],
+
+ # None of the following invalid ranges provoked an error up to coreutils-6.9.
+- ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
+- {ERR=>"$prog: invalid decreasing range\n$try"}],
++ ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
++ {ERR=>"$prog: invalid byte, character or field list\n$try"}],
+ ['inval2', qw(-f -), {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+ ['inval3', '-f', '4,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+ ['inval4', '-f', '1-2,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
+diff -urN coreutils-6.11-orig/tests/mkdir/selinux coreutils-6.11/tests/mkdir/selinux
+--- coreutils-6.11-orig/tests/mkdir/selinux 2008-04-19 23:34:23.000000000 +0200
++++ coreutils-6.11/tests/mkdir/selinux 2008-04-22 13:23:50.000000000 +0200
+@@ -38,6 +28,7 @@
+ # successfully, in spite of the invalid context string.
+
+ . $srcdir/test-lib.sh
++require_selinux_
+
+ c=invalid-selinux-context
+ msg="failed to set default file creation context to \`$c':"
+diff -urNp coreutils-6.11-orig/tests/test-lib.sh coreutils-6.11/tests/test-lib.sh
+--- coreutils-6.11-orig/tests/test-lib.sh 2008-04-19 23:34:23.000000000 +0200
++++ coreutils-6.11/tests/test-lib.sh 2008-04-24 14:18:59.000000000 +0200
+@@ -97,8 +97,8 @@ skip_if_()
+
+ require_selinux_()
+ {
+- case `ls -Zd .` in
+- '? .'|'unlabeled .')
++ case `ls --scontext -d . | cut -f1 -d" "` in
++ '?'|'unlabeled')
+ skip_test_ "this system (or maybe just" \
+ "the current file system) lacks SELinux support"
+ ;;
+diff -urp coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.11/gnulib-tests/test-getaddrinfo.c
+--- coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c
++++ coreutils-6.11/gnulib-tests/test-getaddrinfo.c
+@@ -70,6 +70,10 @@ int simple (char *host, char *service)
+ if (res == EAI_NODATA)
+ return 0;
+
++ /* Do not fail this test for temporary name resolution errors. */
++ if (res == EAI_AGAIN)
++ return 0;
++
+ return 1;
+ }
+
diff --git a/abs/core/coreutils/coreutils-i18n.patch b/abs/core/coreutils/coreutils-i18n.patch
new file mode 100644
index 0000000..1230c23
--- /dev/null
+++ b/abs/core/coreutils/coreutils-i18n.patch
@@ -0,0 +1,4045 @@
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/sort-mb-tests 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,58 @@
++#! /bin/sh
++case $# in
++ 0) xx='../src/sort';;
++ *) xx="$1";;
++esac
++test "$VERBOSE" && echo=echo || echo=:
++$echo testing program: $xx
++errors=0
++test "$srcdir" || srcdir=.
++test "$VERBOSE" && $xx --version 2> /dev/null
++
++export LC_ALL=en_US.UTF-8
++locale -k LC_CTYPE 2>&1 | grep -q charmap.*UTF-8 || exit 77
++errors=0
++
++$xx -t ï¼  -k2 -n misc/mb1.I > misc/mb1.O
++code=$?
++if test $code != 0; then
++ $echo "Test mb1 failed: $xx return code $code differs from expected value 0" 1>&2
++ errors=`expr $errors + 1`
++else
++ cmp misc/mb1.O $srcdir/misc/mb1.X > /dev/null 2>&1
++ case $? in
++ 0) if test "$VERBOSE"; then $echo "passed mb1"; fi;;
++ 1) $echo "Test mb1 failed: files misc/mb1.O and $srcdir/misc/mb1.X differ" 1>&2
++ (diff -c misc/mb1.O $srcdir/misc/mb1.X) 2> /dev/null
++ errors=`expr $errors + 1`;;
++ 2) $echo "Test mb1 may have failed." 1>&2
++ $echo The command "cmp misc/mb1.O $srcdir/misc/mb1.X" failed. 1>&2
++ errors=`expr $errors + 1`;;
++ esac
++fi
++
++$xx -t ï¼  -k4 -n misc/mb2.I > misc/mb2.O
++code=$?
++if test $code != 0; then
++ $echo "Test mb2 failed: $xx return code $code differs from expected value 0" 1>&2
++ errors=`expr $errors + 1`
++else
++ cmp misc/mb2.O $srcdir/misc/mb2.X > /dev/null 2>&1
++ case $? in
++ 0) if test "$VERBOSE"; then $echo "passed mb2"; fi;;
++ 1) $echo "Test mb2 failed: files misc/mb2.O and $srcdir/misc/mb2.X differ" 1>&2
++ (diff -c misc/mb2.O $srcdir/misc/mb2.X) 2> /dev/null
++ errors=`expr $errors + 1`;;
++ 2) $echo "Test mb2 may have failed." 1>&2
++ $echo The command "cmp misc/mb2.O $srcdir/misc/mb2.X" failed. 1>&2
++ errors=`expr $errors + 1`;;
++ esac
++fi
++
++if test $errors = 0; then
++ $echo Passed all 113 tests. 1>&2
++else
++ $echo Failed $errors tests. 1>&2
++fi
++test $errors = 0 || errors=1
++exit $errors
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb2.I 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Apple@AA10@@20
++Banana@AA5@@30
++Citrus@AA20@@5
++Cherry@AA30@@10
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb2.X 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Citrus@AA20@@5
++Cherry@AA30@@10
++Apple@AA10@@20
++Banana@AA5@@30
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb1.I 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Appleï¼ 10
++Bananaï¼ 5
++Citrusï¼ 20
++Cherryï¼ 30
+--- /dev/null 2007-03-01 09:16:39.219409909 +0000
++++ coreutils-6.8+/tests/misc/mb1.X 2007-03-01 15:08:24.000000000 +0000
+@@ -0,0 +1,4 @@
++Bananaï¼ 5
++Appleï¼ 10
++Citrusï¼ 20
++Cherryï¼ 30
+diff -urN coreutils-6.12-orig/tests/Makefile.am coreutils-6.12/tests/Makefile.am
+--- coreutils-6.12-orig/tests/Makefile.am 2008-05-27 13:47:53.000000000 +0200
++++ coreutils-6.12/tests/Makefile.am 2008-06-02 10:06:03.000000000 +0200
+@@ -191,6 +191,7 @@
+ misc/shuf \
+ misc/sort \
+ misc/sort-compress \
++ misc/sort-mb-tests \
+ misc/sort-merge \
+ misc/sort-rand \
+ misc/split-a \
+@@ -391,6 +392,10 @@
+ $(root_tests)
+
+ pr_data = \
++ misc/mb1.X \
++ misc/mb1.I \
++ misc/mb2.X \
++ misc/mb2.I \
+ pr/0F \
+ pr/0FF \
+ pr/0FFnt \
+--- coreutils-6.8+/lib/linebuffer.h.i18n 2005-05-14 07:44:24.000000000 +0100
++++ coreutils-6.8+/lib/linebuffer.h 2007-03-01 15:08:24.000000000 +0000
+@@ -22,6 +22,11 @@
+
+ # include <stdio.h>
+
++/* Get mbstate_t. */
++# if HAVE_WCHAR_H
++# include <wchar.h>
++# endif
++
+ /* A `struct linebuffer' holds a line of text. */
+
+ struct linebuffer
+@@ -29,6 +34,9 @@
+ size_t size; /* Allocated. */
+ size_t length; /* Used. */
+ char *buffer;
++# if HAVE_WCHAR_H
++ mbstate_t state;
++# endif
+ };
+
+ /* Initialize linebuffer LINEBUFFER for use. */
+--- coreutils-6.8+/src/expand.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/expand.c 2007-03-01 15:08:24.000000000 +0000
+@@ -38,11 +38,28 @@
+ #include <stdio.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "expand"
+
+@@ -183,6 +200,7 @@
+ stops = num_start + len - 1;
+ }
+ }
++
+ else
+ {
+ error (0, 0, _("tab size contains invalid character(s): %s"),
+@@ -365,6 +383,142 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++static void
++expand_multibyte (void)
++{
++ FILE *fp; /* Input strem. */
++ mbstate_t i_state; /* Current shift state of the input stream. */
++ mbstate_t i_state_bak; /* Back up the I_STATE. */
++ mbstate_t o_state; /* Current shift state of the output stream. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ wchar_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character
++ which shows as same character as WC. */
++ int tab_index = 0; /* Index in `tab_list' of next tabstop. */
++ int column = 0; /* Column on screen of the next char. */
++ int next_tab_column; /* Column the next tab stop is on. */
++ int convert = 1; /* If nonzero, perform translations. */
++
++ fp = next_file ((FILE *) NULL);
++ if (fp == NULL)
++ return;
++
++ memset (&o_state, '\0', sizeof(mbstate_t));
++ memset (&i_state, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ /* Refill the buffer BUF. */
++ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
++ bufpos = buf;
++ }
++
++ /* No character is left in BUF. */
++ if (buflen < 1)
++ {
++ fp = next_file (fp);
++
++ if (fp == NULL)
++ break; /* No more files. */
++ else
++ {
++ memset (&i_state, '\0', sizeof(mbstate_t));
++ continue;
++ }
++ }
++
++ /* Get a wide character. */
++ i_state_bak = i_state;
++ mblength = mbrtowc (&wc, bufpos, buflen, &i_state);
++
++ switch (mblength)
++ {
++ case (size_t)-1: /* illegal byte sequence. */
++ case (size_t)-2:
++ mblength = 1;
++ i_state = i_state_bak;
++ if (convert)
++ {
++ ++column;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ putchar (*bufpos);
++ break;
++
++ case 0: /* null. */
++ mblength = 1;
++ if (convert && convert_entire_line == 0)
++ convert = 0;
++ putchar ('\0');
++ break;
++
++ default:
++ if (wc == L'\n') /* LF. */
++ {
++ tab_index = 0;
++ column = 0;
++ convert = 1;
++ putchar ('\n');
++ }
++ else if (wc == L'\t' && convert) /* Tab. */
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (tab_index < first_free_tab - 1
++ && column >= tab_list[tab_index])
++ tab_index++;
++ next_tab_column = tab_list[tab_index];
++ if (tab_index < first_free_tab - 1)
++ tab_index++;
++ if (column >= next_tab_column)
++ next_tab_column = column + 1;
++ }
++ else
++ next_tab_column = column + tab_size - column % tab_size;
++
++ while (column < next_tab_column)
++ {
++ putchar (' ');
++ ++column;
++ }
++ }
++ else /* Others. */
++ {
++ if (convert)
++ {
++ if (wc == L'\b')
++ {
++ if (column > 0)
++ --column;
++ }
++ else
++ {
++ int width; /* The width of WC. */
++
++ width = wcwidth (wc);
++ column += (width > 0) ? width : 0;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ }
++ fwrite (bufpos, sizeof(char), mblength, stdout);
++ }
++ }
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
+ int
+ main (int argc, char **argv)
+ {
+@@ -429,7 +583,12 @@
+
+ file_list = (optind < argc ? &argv[optind] : stdin_argv);
+
+- expand ();
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ expand_multibyte ();
++ else
++#endif
++ expand ();
+
+ if (have_read_stdin && fclose (stdin) != 0)
+ error (EXIT_FAILURE, errno, "-");
+--- coreutils-6.8+/src/join.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/join.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,17 +23,31 @@
+ #include <sys/types.h>
+ #include <getopt.h>
+
++/* Get mbstate_t, mbrtowc(), mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswblank(), towupper. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "hard-locale.h"
+ #include "linebuffer.h"
+-#include "memcasecmp.h"
+ #include "quote.h"
+ #include "stdio--.h"
+ #include "xmemcoll.h"
+ #include "xstrtol.h"
+ #include "argmatch.h"
+
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "join"
+
+@@ -104,10 +118,12 @@
+ /* Last element in `outlist', where a new element can be added. */
+ static struct outlist *outlist_end = &outlist_head;
+
+-/* Tab character separating fields. If negative, fields are separated
+- by any nonempty string of blanks, otherwise by exactly one
+- tab character whose value (when cast to unsigned char) equals TAB. */
+-static int tab = -1;
++/* Tab character separating fields. If NULL, fields are separated
++ by any nonempty string of blanks. */
++static char *tab = NULL;
++
++/* The number of bytes used for tab. */
++static size_t tablen = 0;
+
+ static struct option const longopts[] =
+ {
+@@ -190,6 +206,8 @@
+
+ /* Fill in the `fields' structure in LINE. */
+
++/* Fill in the `fields' structure in LINE. */
++
+ static void
+ xfields (struct line *line)
+ {
+@@ -199,10 +217,11 @@
+ if (ptr == lim)
+ return;
+
+- if (0 <= tab)
++ if (tab != NULL)
+ {
++ unsigned char t = tab[0];
+ char *sep;
+- for (; (sep = memchr (ptr, tab, lim - ptr)) != NULL; ptr = sep + 1)
++ for (; (sep = memchr (ptr, t, lim - ptr)) != NULL; ptr = sep + 1)
+ extract_field (line, ptr, sep - ptr);
+ }
+ else
+@@ -229,6 +248,148 @@
+ extract_field (line, ptr, lim - ptr);
+ }
+
++#if HAVE_MBRTOWC
++static void
++xfields_multibyte (struct line *line)
++{
++ char *ptr = line->buf.buffer;
++ char const *lim = ptr + line->buf.length - 1;
++ wchar_t wc = 0;
++ size_t mblength = 1;
++ mbstate_t state, state_bak;
++
++ memset (&state, 0, sizeof (mbstate_t));
++
++ if (ptr == lim)
++ return;
++
++ if (tab != NULL)
++ {
++ unsigned char t = tab[0];
++ char *sep = ptr;
++ for (; ptr < lim; ptr = sep + mblength)
++ {
++ sep = ptr;
++ while (sep < lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (mblength == tablen && !memcmp (sep, tab, mblength))
++ break;
++ else
++ {
++ sep += mblength;
++ continue;
++ }
++ }
++
++ if (sep == lim)
++ break;
++
++ extract_field (line, ptr, sep - ptr);
++ }
++ }
++ else
++ {
++ /* Skip leading blanks before the first field. */
++ while(ptr < lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (!iswblank(wc))
++ break;
++ ptr += mblength;
++ }
++
++ do
++ {
++ char *sep;
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ sep = ptr + mblength;
++ while (sep != lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (iswblank (wc))
++ break;
++
++ sep += mblength;
++ }
++
++ extract_field (line, ptr, sep - ptr);
++ if (sep == lim)
++ return;
++
++ state_bak = state;
++ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ ptr = sep + mblength;
++ while (ptr != lim)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ mblength = 1;
++ state = state_bak;
++ break;
++ }
++ mblength = (mblength < 1) ? 1 : mblength;
++
++ if (!iswblank (wc))
++ break;
++
++ ptr += mblength;
++ }
++ }
++ while (ptr != lim);
++ }
++
++ extract_field (line, ptr, lim - ptr);
++}
++#endif
++
+ /* Read a line from FP into LINE and split it into fields.
+ Return true if successful. */
+
+@@ -249,6 +410,11 @@
+ line->nfields_allocated = 0;
+ line->nfields = 0;
+ line->fields = NULL;
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ xfields_multibyte (line);
++ else
++#endif
+ xfields (line);
+ return true;
+ }
+@@ -377,11 +601,18 @@
+
+ /* Print the join of LINE1 and LINE2. */
+
++#define PUT_TAB_CHAR \
++ do \
++ { \
++ (tab != NULL) ? \
++ fwrite(tab, sizeof(char), tablen, stdout) : putchar (' '); \
++ } \
++ while (0)
++
+ static void
+ prjoin (struct line const *line1, struct line const *line2)
+ {
+ const struct outlist *outlist;
+- char output_separator = tab < 0 ? ' ' : tab;
+
+ outlist = outlist_head.next;
+ if (outlist)
+@@ -397,12 +628,12 @@
+ if (o->file == 0)
+ {
+ if (line1 == &uni_blank)
+- {
++ {
+ line = line2;
+ field = join_field_2;
+ }
+ else
+- {
++ {
+ line = line1;
+ field = join_field_1;
+ }
+@@ -416,7 +647,7 @@
+ o = o->next;
+ if (o == NULL)
+ break;
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ }
+ putchar ('\n');
+ }
+@@ -434,23 +665,23 @@
+ prfield (join_field_1, line1);
+ for (i = 0; i < join_field_1 && i < line1->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line1);
+ }
+ for (i = join_field_1 + 1; i < line1->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line1);
+ }
+
+ for (i = 0; i < join_field_2 && i < line2->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line2);
+ }
+ for (i = join_field_2 + 1; i < line2->nfields; ++i)
+ {
+- putchar (output_separator);
++ PUT_TAB_CHAR;
+ prfield (i, line2);
+ }
+ putchar ('\n');
+@@ -859,20 +1090,41 @@
+
+ case 't':
+ {
+- unsigned char newtab = optarg[0];
+- if (! newtab)
++ char *newtab;
++ size_t newtablen;
++ if (! optarg[0])
+ error (EXIT_FAILURE, 0, _("empty tab"));
+- if (optarg[1])
++ newtab = xstrdup (optarg);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ mbstate_t state;
++
++ memset (&state, 0, sizeof (mbstate_t));
++ newtablen = mbrtowc (NULL, newtab,
++ strnlen (newtab, MB_LEN_MAX),
++ &state);
++ if (newtablen == (size_t) 0
++ || newtablen == (size_t) -1
++ || newtablen == (size_t) -2)
++ newtablen = 1;
++ }
++ else
++#endif
++ newtablen = 1;
++
++ if (newtablen == 1 && newtab[1])
++ {
++ if (STREQ (newtab, "\\0"))
++ newtab[0] = '\0';
++ }
++ if (tab != NULL && strcmp (tab, newtab))
+ {
+- if (STREQ (optarg, "\\0"))
+- newtab = '\0';
+- else
+- error (EXIT_FAILURE, 0, _("multi-character tab %s"),
+- quote (optarg));
++ free (newtab);
++ error (EXIT_FAILURE, 0, _("incompatible tabs"));
+ }
+- if (0 <= tab && tab != newtab)
+- error (EXIT_FAILURE, 0, _("incompatible tabs"));
+ tab = newtab;
++ tablen = newtablen;
+ }
+ break;
+
+diff -urNp coreutils-6.11-orig/src/join.c coreutils-6.11/src/join.c
+--- coreutils-6.11-orig/src/join.c 2008-04-21 13:44:32.000000000 +0200
++++ coreutils-6.11/src/join.c 2008-04-21 14:03:22.000000000 +0200
+@@ -324,56 +324,115 @@ keycmp (struct line const *line1, struct
+ size_t jf_1, size_t jf_2)
+ {
+ /* Start of field to compare in each file. */
+- char *beg1;
+- char *beg2;
+-
+- size_t len1;
+- size_t len2; /* Length of fields to compare. */
++ char *beg[2];
++ char *copy[2];
++ size_t len[2]; /* Length of fields to compare. */
+ int diff;
++ int i, j;
+
+ if (jf_1 < line1->nfields)
+ {
+- beg1 = line1->fields[jf_1].beg;
+- len1 = line1->fields[jf_1].len;
++ beg[0] = line1->fields[jf_1].beg;
++ len[0] = line1->fields[jf_1].len;
+ }
+ else
+ {
+- beg1 = NULL;
+- len1 = 0;
++ beg[0] = NULL;
++ len[0] = 0;
+ }
+
+ if (jf_2 < line2->nfields)
+ {
+- beg2 = line2->fields[jf_2].beg;
+- len2 = line2->fields[jf_2].len;
++ beg[1] = line2->fields[jf_2].beg;
++ len[1] = line2->fields[jf_2].len;
+ }
+ else
+ {
+- beg2 = NULL;
+- len2 = 0;
++ beg[1] = NULL;
++ len[1] = 0;
+ }
+
+- if (len1 == 0)
+- return len2 == 0 ? 0 : -1;
+- if (len2 == 0)
++ if (len[0] == 0)
++ return len[1] == 0 ? 0 : -1;
++ if (len[1] == 0)
+ return 1;
+
+ if (ignore_case)
+ {
+- /* FIXME: ignore_case does not work with NLS (in particular,
+- with multibyte chars). */
+- diff = memcasecmp (beg1, beg2, MIN (len1, len2));
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ size_t mblength;
++ wchar_t wc, uwc;
++ mbstate_t state, state_bak;
++
++ memset (&state, '\0', sizeof (mbstate_t));
++
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0; j < MIN (len[0], len[1]);)
++ {
++ state_bak = state;
++ mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state);
++
++ switch (mblength)
++ {
++ case (size_t) -1:
++ case (size_t) -2:
++ state = state_bak;
++ /* Fall through */
++ case 0:
++ mblength = 1;
++ break;
++
++ default:
++ uwc = towupper (wc);
++
++ if (uwc != wc)
++ {
++ mbstate_t state_wc;
++
++ memset (&state_wc, '\0', sizeof (mbstate_t));
++ wcrtomb (copy[i] + j, uwc, &state_wc);
++ }
++ else
++ memcpy (copy[i] + j, beg[i] + j, mblength);
++ }
++ j += mblength;
++ }
++ copy[i][j] = '\0';
++ }
++ }
++ else
++#endif
++ {
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0; j < MIN (len[0], len[1]); j++)
++ copy[i][j] = toupper (beg[i][j]);
++
++ copy[i][j] = '\0';
++ }
++ }
+ }
+ else
+ {
+- if (hard_LC_COLLATE)
+- return xmemcoll (beg1, len1, beg2, len2);
+- diff = memcmp (beg1, beg2, MIN (len1, len2));
++ copy[0] = (unsigned char *) beg[0];
++ copy[1] = (unsigned char *) beg[1];
+ }
+
++ if (hard_LC_COLLATE)
++ return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]);
++ diff = memcmp (copy[0], copy[1], MIN (len[0], len[1]));
++
++
+ if (diff)
+ return diff;
+- return len1 < len2 ? -1 : len1 != len2;
++ return len[0] - len[1];
+ }
+
+ /* Check that successive input lines PREV and CURRENT from input file
+--- coreutils-6.8+/src/uniq.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/uniq.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,6 +23,16 @@
+ #include <getopt.h>
+ #include <sys/types.h>
+
++/* Get mbstate_t, mbrtowc(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get isw* functions. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "argmatch.h"
+ #include "linebuffer.h"
+@@ -32,7 +42,19 @@
+ #include "quote.h"
+ #include "xmemcoll.h"
+ #include "xstrtol.h"
+-#include "memcasecmp.h"
++#include "xmemcoll.h"
++
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "uniq"
+@@ -109,6 +131,10 @@
+ /* Select whether/how to delimit groups of duplicate lines. */
+ static enum delimit_method delimit_groups;
+
++/* Function pointers. */
++static char *
++(*find_field) (struct linebuffer *line);
++
+ static struct option const longopts[] =
+ {
+ {"count", no_argument, NULL, 'c'},
+@@ -198,7 +224,7 @@
+ return a pointer to the beginning of the line's field to be compared. */
+
+ static char *
+-find_field (const struct linebuffer *line)
++find_field_uni (struct linebuffer *line)
+ {
+ size_t count;
+ char *lp = line->buffer;
+@@ -219,6 +245,83 @@
+ return lp + i;
+ }
+
++#if HAVE_MBRTOWC
++
++# define MBCHAR_TO_WCHAR(WC, MBLENGTH, LP, POS, SIZE, STATEP, CONVFAIL) \
++ do \
++ { \
++ mbstate_t state_bak; \
++ \
++ CONVFAIL = 0; \
++ state_bak = *STATEP; \
++ \
++ MBLENGTH = mbrtowc (&WC, LP + POS, SIZE - POS, STATEP); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-2: \
++ case (size_t)-1: \
++ *STATEP = state_bak; \
++ CONVFAIL++; \
++ /* Fall through */ \
++ case 0: \
++ MBLENGTH = 1; \
++ } \
++ } \
++ while (0)
++
++static char *
++find_field_multi (struct linebuffer *line)
++{
++ size_t count;
++ char *lp = line->buffer;
++ size_t size = line->length - 1;
++ size_t pos;
++ size_t mblength;
++ wchar_t wc;
++ mbstate_t *statep;
++ int convfail;
++
++ pos = 0;
++ statep = &(line->state);
++
++ /* skip fields. */
++ for (count = 0; count < skip_fields && pos < size; count++)
++ {
++ while (pos < size)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++
++ if (convfail || !iswblank (wc))
++ {
++ pos += mblength;
++ break;
++ }
++ pos += mblength;
++ }
++
++ while (pos < size)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++
++ if (!convfail && iswblank (wc))
++ break;
++
++ pos += mblength;
++ }
++ }
++
++ /* skip fields. */
++ for (count = 0; count < skip_chars && pos < size; count++)
++ {
++ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
++ pos += mblength;
++ }
++
++ return lp + pos;
++}
++#endif
++
+ /* Return false if two strings OLD and NEW match, true if not.
+ OLD and NEW point not to the beginnings of the lines
+ but rather to the beginnings of the fields to compare.
+@@ -227,6 +330,8 @@
+ static bool
+ different (char *old, char *new, size_t oldlen, size_t newlen)
+ {
++ char *copy_old, *copy_new;
++
+ if (check_chars < oldlen)
+ oldlen = check_chars;
+ if (check_chars < newlen)
+@@ -234,14 +339,92 @@
+
+ if (ignore_case)
+ {
+- /* FIXME: This should invoke strcoll somehow. */
+- return oldlen != newlen || memcasecmp (old, new, oldlen);
++ size_t i;
++
++ copy_old = alloca (oldlen + 1);
++ copy_new = alloca (oldlen + 1);
++
++ for (i = 0; i < oldlen; i++)
++ {
++ copy_old[i] = toupper (old[i]);
++ copy_new[i] = toupper (new[i]);
++ }
+ }
+- else if (hard_LC_COLLATE)
+- return xmemcoll (old, oldlen, new, newlen) != 0;
+ else
+- return oldlen != newlen || memcmp (old, new, oldlen);
++ {
++ copy_old = (char *)old;
++ copy_new = (char *)new;
++ }
++
++ return xmemcoll (copy_old, oldlen, copy_new, newlen);
++}
++
++#if HAVE_MBRTOWC
++static int
++different_multi (const char *old, const char *new, size_t oldlen, size_t newlen, mbstate_t oldstate, mbstate_t newstate)
++{
++ size_t i, j, chars;
++ const char *str[2];
++ char *copy[2];
++ size_t len[2];
++ mbstate_t state[2];
++ size_t mblength;
++ wchar_t wc, uwc;
++ mbstate_t state_bak;
++
++ str[0] = old;
++ str[1] = new;
++ len[0] = oldlen;
++ len[1] = newlen;
++ state[0] = oldstate;
++ state[1] = newstate;
++
++ for (i = 0; i < 2; i++)
++ {
++ copy[i] = alloca (len[i] + 1);
++
++ for (j = 0, chars = 0; j < len[i] && chars < check_chars; chars++)
++ {
++ state_bak = state[i];
++ mblength = mbrtowc (&wc, str[i] + j, len[i] - j, &(state[i]));
++
++ switch (mblength)
++ {
++ case (size_t)-1:
++ case (size_t)-2:
++ state[i] = state_bak;
++ /* Fall through */
++ case 0:
++ mblength = 1;
++ break;
++
++ default:
++ if (ignore_case)
++ {
++ uwc = towupper (wc);
++
++ if (uwc != wc)
++ {
++ mbstate_t state_wc;
++
++ memset (&state_wc, '\0', sizeof(mbstate_t));
++ wcrtomb (copy[i] + j, uwc, &state_wc);
++ }
++ else
++ memcpy (copy[i] + j, str[i] + j, mblength);
++ }
++ else
++ memcpy (copy[i] + j, str[i] + j, mblength);
++ }
++ j += mblength;
++ }
++ copy[i][j] = '\0';
++ len[i] = j;
++ }
++
++ return xmemcoll (copy[0], len[0], copy[1], len[1]);
+ }
++#endif
+
+ /* Output the line in linebuffer LINE to standard output
+ provided that the switches say it should be output.
+@@ -295,15 +478,43 @@
+ {
+ char *prevfield IF_LINT (= NULL);
+ size_t prevlen IF_LINT (= 0);
++#if HAVE_MBRTOWC
++ mbstate_t prevstate;
++
++ memset (&prevstate, '\0', sizeof (mbstate_t));
++#endif
+
+ while (!feof (stdin))
+ {
+ char *thisfield;
+ size_t thislen;
++#if HAVE_MBRTOWC
++ mbstate_t thisstate;
++#endif
++
+ if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
+ break;
+ thisfield = find_field (thisline);
+ thislen = thisline->length - 1 - (thisfield - thisline->buffer);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ thisstate = thisline->state;
++
++ if (prevline->length == 0 || different_multi
++ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate))
++ {
++ fwrite (thisline->buffer, sizeof (char),
++ thisline->length, stdout);
++
++ SWAP_LINES (prevline, thisline);
++ prevfield = thisfield;
++ prevlen = thislen;
++ prevstate = thisstate;
++ }
++ }
++ else
++#endif
+ if (prevline->length == 0
+ || different (thisfield, prevfield, thislen, prevlen))
+ {
+@@ -322,17 +533,26 @@
+ size_t prevlen;
+ uintmax_t match_count = 0;
+ bool first_delimiter = true;
++#if HAVE_MBRTOWC
++ mbstate_t prevstate;
++#endif
+
+ if (readlinebuffer_delim (prevline, stdin, delimiter) == 0)
+ goto closefiles;
+ prevfield = find_field (prevline);
+ prevlen = prevline->length - 1 - (prevfield - prevline->buffer);
++#if HAVE_MBRTOWC
++ prevstate = prevline->state;
++#endif
+
+ while (!feof (stdin))
+ {
+ bool match;
+ char *thisfield;
+ size_t thislen;
++#if HAVE_MBRTOWC
++ mbstate_t thisstate;
++#endif
+ if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
+ {
+ if (ferror (stdin))
+@@ -341,6 +561,15 @@
+ }
+ thisfield = find_field (thisline);
+ thislen = thisline->length - 1 - (thisfield - thisline->buffer);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ thisstate = thisline->state;
++ match = !different_multi (thisfield, prevfield,
++ thislen, prevlen, thisstate, prevstate);
++ }
++ else
++#endif
+ match = !different (thisfield, prevfield, thislen, prevlen);
+ match_count += match;
+
+@@ -373,6 +602,9 @@
+ SWAP_LINES (prevline, thisline);
+ prevfield = thisfield;
+ prevlen = thislen;
++#if HAVE_MBRTOWC
++ prevstate = thisstate;
++#endif
+ if (!match)
+ match_count = 0;
+ }
+@@ -417,6 +649,19 @@
+
+ atexit (close_stdout);
+
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ find_field = find_field_multi;
++ }
++ else
++#endif
++ {
++ find_field = find_field_uni;
++ }
++
++
++
+ skip_chars = 0;
+ skip_fields = 0;
+ check_chars = SIZE_MAX;
+--- coreutils-6.8+/src/fold.c.i18n 2007-02-23 12:01:47.000000000 +0000
++++ coreutils-6.8+/src/fold.c 2007-03-01 15:08:24.000000000 +0000
+@@ -23,11 +23,33 @@
+ #include <getopt.h>
+ #include <sys/types.h>
+
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswprint(), iswblank(), wcwidth(). */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrtol.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# undef MB_LEN_MAX
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ #define TAB_WIDTH 8
+
+ /* The official name of this program (e.g., no `g' prefix). */
+@@ -35,23 +57,44 @@
+
+ #define AUTHORS "David MacKenzie"
+
++#define FATAL_ERROR(Message) \
++ do \
++ { \
++ error (0, 0, (Message)); \
++ usage (2); \
++ } \
++ while (0)
++
++enum operating_mode
++{
++ /* Fold texts by columns that are at the given positions. */
++ column_mode,
++
++ /* Fold texts by bytes that are at the given positions. */
++ byte_mode,
++
++ /* Fold texts by characters that are at the given positions. */
++ character_mode,
++};
++
+ /* The name this program was run with. */
+ char *program_name;
+
++/* The argument shows current mode. (Default: column_mode) */
++static enum operating_mode operating_mode;
++
+ /* If nonzero, try to break on whitespace. */
+ static bool break_spaces;
+
+-/* If nonzero, count bytes, not column positions. */
+-static bool count_bytes;
+-
+ /* If nonzero, at least one of the files we read was standard input. */
+ static bool have_read_stdin;
+
+-static char const shortopts[] = "bsw:0::1::2::3::4::5::6::7::8::9::";
++static char const shortopts[] = "bcsw:0::1::2::3::4::5::6::7::8::9::";
+
+ static struct option const longopts[] =
+ {
+ {"bytes", no_argument, NULL, 'b'},
++ {"characters", no_argument, NULL, 'c'},
+ {"spaces", no_argument, NULL, 's'},
+ {"width", required_argument, NULL, 'w'},
+ {GETOPT_HELP_OPTION_DECL},
+@@ -81,6 +124,7 @@
+ "), stdout);
+ fputs (_("\
+ -b, --bytes count bytes rather than columns\n\
++ -c, --characters count characters rather than columns\n\
+ -s, --spaces break at spaces\n\
+ -w, --width=WIDTH use WIDTH columns instead of 80\n\
+ "), stdout);
+@@ -98,7 +142,7 @@
+ static size_t
+ adjust_column (size_t column, char c)
+ {
+- if (!count_bytes)
++ if (operating_mode != byte_mode)
+ {
+ if (c == '\b')
+ {
+@@ -121,30 +165,14 @@
+ to stdout, with maximum line length WIDTH.
+ Return true if successful. */
+
+-static bool
+-fold_file (char const *filename, size_t width)
++static void
++fold_text (FILE *istream, size_t width, int *saved_errno)
+ {
+- FILE *istream;
+ int c;
+ size_t column = 0; /* Screen column where next char will go. */
+ size_t offset_out = 0; /* Index in `line_out' for next char. */
+ static char *line_out = NULL;
+ static size_t allocated_out = 0;
+- int saved_errno;
+-
+- if (STREQ (filename, "-"))
+- {
+- istream = stdin;
+- have_read_stdin = true;
+- }
+- else
+- istream = fopen (filename, "r");
+-
+- if (istream == NULL)
+- {
+- error (0, errno, "%s", filename);
+- return false;
+- }
+
+ while ((c = getc (istream)) != EOF)
+ {
+@@ -172,6 +200,15 @@
+ bool found_blank = false;
+ size_t logical_end = offset_out;
+
++ /* If LINE_OUT has no wide character,
++ put a new wide character in LINE_OUT
++ if column is bigger than width. */
++ if (offset_out == 0)
++ {
++ line_out[offset_out++] = c;
++ continue;
++ }
++
+ /* Look for the last blank. */
+ while (logical_end)
+ {
+@@ -218,11 +255,225 @@
+ line_out[offset_out++] = c;
+ }
+
+- saved_errno = errno;
++ *saved_errno = errno;
++
++ if (offset_out)
++ fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
++
++ free(line_out);
++}
++
++#if HAVE_MBRTOWC
++static void
++fold_multibyte_text (FILE *istream, size_t width, int *saved_errno)
++{
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ char *bufpos; /* Next read position of BUF. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state, state_bak; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ char *line_out = NULL;
++ size_t offset_out = 0; /* Index in `line_out' for next char. */
++ size_t allocated_out = 0;
++
++ int increment;
++ size_t column = 0;
++
++ size_t last_blank_pos;
++ size_t last_blank_column;
++ int is_blank_seen;
++ int last_blank_increment;
++ int is_bs_following_last_blank;
++ size_t bs_following_last_blank_num;
++ int is_cr_after_last_blank;
++
++#define CLEAR_FLAGS \
++ do \
++ { \
++ last_blank_pos = 0; \
++ last_blank_column = 0; \
++ is_blank_seen = 0; \
++ is_bs_following_last_blank = 0; \
++ bs_following_last_blank_num = 0; \
++ is_cr_after_last_blank = 0; \
++ } \
++ while (0)
++
++#define START_NEW_LINE \
++ do \
++ { \
++ putchar ('\n'); \
++ column = 0; \
++ offset_out = 0; \
++ CLEAR_FLAGS; \
++ } \
++ while (0)
++
++ CLEAR_FLAGS;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ for (;; bufpos += mblength, buflen -= mblength)
++ {
++ if (buflen < MB_LEN_MAX && !feof (istream) && !ferror (istream))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, istream);
++ bufpos = buf;
++ }
++
++ if (buflen < 1)
++ break;
++
++ /* Get a wide character. */
++ convfail = 0;
++ state_bak = state;
++ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &state);
++
++ switch (mblength)
++ {
++ case (size_t)-1:
++ case (size_t)-2:
++ convfail++;
++ state = state_bak;
++ /* Fall through. */
++
++ case 0:
++ mblength = 1;
++ break;
++ }
++
++rescan:
++ if (operating_mode == byte_mode) /* byte mode */
++ increment = mblength;
++ else if (operating_mode == character_mode) /* character mode */
++ increment = 1;
++ else /* column mode */
++ {
++ if (convfail)
++ increment = 1;
++ else
++ {
++ switch (wc)
++ {
++ case L'\n':
++ fwrite (line_out, sizeof(char), offset_out, stdout);
++ START_NEW_LINE;
++ continue;
++
++ case L'\b':
++ increment = (column > 0) ? -1 : 0;
++ break;
++
++ case L'\r':
++ increment = -1 * column;
++ break;
++
++ case L'\t':
++ increment = 8 - column % 8;
++ break;
++
++ default:
++ increment = wcwidth (wc);
++ increment = (increment < 0) ? 0 : increment;
++ }
++ }
++ }
++
++ if (column + increment > width && break_spaces && last_blank_pos)
++ {
++ fwrite (line_out, sizeof(char), last_blank_pos, stdout);
++ putchar ('\n');
++
++ offset_out = offset_out - last_blank_pos;
++ column = column - last_blank_column + ((is_cr_after_last_blank)
++ ? last_blank_increment : bs_following_last_blank_num);
++ memmove (line_out, line_out + last_blank_pos, offset_out);
++ CLEAR_FLAGS;
++ goto rescan;
++ }
++
++ if (column + increment > width && column != 0)
++ {
++ fwrite (line_out, sizeof(char), offset_out, stdout);
++ START_NEW_LINE;
++ goto rescan;
++ }
++
++ if (allocated_out < offset_out + mblength)
++ {
++ allocated_out += 1024;
++ line_out = xrealloc (line_out, allocated_out);
++ }
++
++ memcpy (line_out + offset_out, bufpos, mblength);
++ offset_out += mblength;
++ column += increment;
++
++ if (is_blank_seen && !convfail && wc == L'\r')
++ is_cr_after_last_blank = 1;
++
++ if (is_bs_following_last_blank && !convfail && wc == L'\b')
++ ++bs_following_last_blank_num;
++ else
++ is_bs_following_last_blank = 0;
++
++ if (break_spaces && !convfail && iswblank (wc))
++ {
++ last_blank_pos = offset_out;
++ last_blank_column = column;
++ is_blank_seen = 1;
++ last_blank_increment = increment;
++ is_bs_following_last_blank = 1;
++ bs_following_last_blank_num = 0;
++ is_cr_after_last_blank = 0;
++ }
++ }
++
++ *saved_errno = errno;
+
+ if (offset_out)
+ fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
+
++ free(line_out);
++}
++#endif
++
++/* Fold file FILENAME, or standard input if FILENAME is "-",
++ to stdout, with maximum line length WIDTH.
++ Return 0 if successful, 1 if an error occurs. */
++
++static bool
++fold_file (char *filename, size_t width)
++{
++ FILE *istream;
++ int saved_errno;
++
++ if (STREQ (filename, "-"))
++ {
++ istream = stdin;
++ have_read_stdin = 1;
++ }
++ else
++ istream = fopen (filename, "r");
++
++ if (istream == NULL)
++ {
++ error (0, errno, "%s", filename);
++ return 1;
++ }
++
++ /* Define how ISTREAM is being folded. */
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ fold_multibyte_text (istream, width, &saved_errno);
++ else
++#endif
++ fold_text (istream, width, &saved_errno);
++
+ if (ferror (istream))
+ {
+ error (0, saved_errno, "%s", filename);
+@@ -255,7 +506,8 @@
+
+ atexit (close_stdout);
+
+- break_spaces = count_bytes = have_read_stdin = false;
++ operating_mode = column_mode;
++ break_spaces = have_read_stdin = false;
+
+ while ((optc = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1)
+ {
+@@ -264,7 +516,15 @@
+ switch (optc)
+ {
+ case 'b': /* Count bytes rather than columns. */
+- count_bytes = true;
++ if (operating_mode != column_mode)
++ FATAL_ERROR (_("only one way of folding may be specified"));
++ operating_mode = byte_mode;
++ break;
++
++ case 'c':
++ if (operating_mode != column_mode)
++ FATAL_ERROR (_("only one way of folding may be specified"));
++ operating_mode = character_mode;
+ break;
+
+ case 's': /* Break at word boundaries. */
+--- coreutils-6.8+/src/sort.c.i18n 2007-02-24 11:23:23.000000000 +0000
++++ coreutils-6.8+/src/sort.c 2007-03-01 15:10:57.000000000 +0000
+@@ -23,10 +23,19 @@
+
+ #include <config.h>
+
++#include <assert.h>
+ #include <getopt.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <signal.h>
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++/* Get isw* functions. */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++
+ #include "system.h"
+ #include "argmatch.h"
+ #include "error.h"
+@@ -116,14 +125,38 @@
+ /* Thousands separator; if -1, then there isn't one. */
+ static int thousands_sep;
+
++static int force_general_numcompare = 0;
++
+ /* Nonzero if the corresponding locales are hard. */
+ static bool hard_LC_COLLATE;
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ static bool hard_LC_TIME;
+ #endif
+
+ #define NONZERO(x) ((x) != 0)
+
++/* get a multibyte character's byte length. */
++#define GET_BYTELEN_OF_CHAR(LIM, PTR, MBLENGTH, STATE) \
++ do \
++ { \
++ wchar_t wc; \
++ mbstate_t state_bak; \
++ \
++ state_bak = STATE; \
++ mblength = mbrtowc (&wc, PTR, LIM - PTR, &STATE); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-1: \
++ case (size_t)-2: \
++ STATE = state_bak; \
++ /* Fall through. */ \
++ case 0: \
++ MBLENGTH = 1; \
++ } \
++ } \
++ while (0)
++
+ /* The kind of blanks for '-b' to skip in various options. */
+ enum blanktype { bl_start, bl_end, bl_both };
+
+@@ -261,13 +294,11 @@
+ they were read if all keys compare equal. */
+ static bool stable;
+
+-/* If TAB has this value, blanks separate fields. */
+-enum { TAB_DEFAULT = CHAR_MAX + 1 };
+-
+-/* Tab character separating fields. If TAB_DEFAULT, then fields are
++/* Tab character separating fields. If tab_length is 0, then fields are
+ separated by the empty string between a non-blank character and a blank
+ character. */
+-static int tab = TAB_DEFAULT;
++static char tab[MB_LEN_MAX + 1];
++static size_t tab_length = 0;
+
+ /* Flag to remove consecutive duplicate lines from the output.
+ Only the last of a sequence of equal lines will be output. */
+@@ -639,6 +670,44 @@
+ update_proc (pid);
+ }
+
++/* Function pointers. */
++static void
++(*inittables) (void);
++static char *
++(*begfield) (const struct line*, const struct keyfield *);
++static char *
++(*limfield) (const struct line*, const struct keyfield *);
++static int
++(*getmonth) (char const *, size_t);
++static int
++(*keycompare) (const struct line *, const struct line *);
++static int
++(*numcompare) (const char *, const char *);
++
++/* Test for white space multibyte character.
++ Set LENGTH the byte length of investigated multibyte character. */
++#if HAVE_MBRTOWC
++static int
++ismbblank (const char *str, size_t len, size_t *length)
++{
++ size_t mblength;
++ wchar_t wc;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++ mblength = mbrtowc (&wc, str, len, &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ *length = 1;
++ return 0;
++ }
++
++ *length = (mblength < 1) ? 1 : mblength;
++ return iswblank (wc);
++}
++#endif
++
+ /* Clean up any remaining temporary files. */
+
+ static void
+@@ -978,7 +1047,7 @@
+ free (node);
+ }
+
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+
+ static int
+ struct_month_cmp (const void *m1, const void *m2)
+@@ -993,7 +1062,7 @@
+ /* Initialize the character class tables. */
+
+ static void
+-inittables (void)
++inittables_uni (void)
+ {
+ size_t i;
+
+@@ -1005,7 +1074,7 @@
+ fold_toupper[i] = toupper (i);
+ }
+
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ /* If we're not in the "C" locale, read different names for months. */
+ if (hard_LC_TIME)
+ {
+@@ -1031,6 +1100,64 @@
+ #endif
+ }
+
++#if HAVE_MBRTOWC
++static void
++inittables_mb (void)
++{
++ int i, j, k, l;
++ char *name, *s;
++ size_t s_len, mblength;
++ char mbc[MB_LEN_MAX];
++ wchar_t wc, pwc;
++ mbstate_t state_mb, state_wc;
++
++ for (i = 0; i < MONTHS_PER_YEAR; i++)
++ {
++ s = (char *) nl_langinfo (ABMON_1 + i);
++ s_len = strlen (s);
++ monthtab[i].name = name = (char *) xmalloc (s_len + 1);
++ monthtab[i].val = i + 1;
++
++ memset (&state_mb, '\0', sizeof (mbstate_t));
++ memset (&state_wc, '\0', sizeof (mbstate_t));
++
++ for (j = 0; j < s_len;)
++ {
++ if (!ismbblank (s + j, s_len - j, &mblength))
++ break;
++ j += mblength;
++ }
++
++ for (k = 0; j < s_len;)
++ {
++ mblength = mbrtowc (&wc, (s + j), (s_len - j), &state_mb);
++ assert (mblength != (size_t)-1 && mblength != (size_t)-2);
++ if (mblength == 0)
++ break;
++
++ pwc = towupper (wc);
++ if (pwc == wc)
++ {
++ memcpy (mbc, s + j, mblength);
++ j += mblength;
++ }
++ else
++ {
++ j += mblength;
++ mblength = wcrtomb (mbc, pwc, &state_wc);
++ assert (mblength != (size_t)0 && mblength != (size_t)-1);
++ }
++
++ for (l = 0; l < mblength; l++)
++ name[k++] = mbc[l];
++ }
++ name[k] = '\0';
++ }
++ qsort ((void *) monthtab, MONTHS_PER_YEAR,
++ sizeof (struct month), struct_month_cmp);
++}
++#endif
++
+ /* Specify the amount of main memory to use when sorting. */
+ static void
+ specify_sort_size (char const *s)
+@@ -1241,7 +1368,7 @@
+ by KEY in LINE. */
+
+ static char *
+-begfield (const struct line *line, const struct keyfield *key)
++begfield_uni (const struct line *line, const struct keyfield *key)
+ {
+ char *ptr = line->text, *lim = ptr + line->length - 1;
+ size_t sword = key->sword;
+@@ -1251,10 +1378,10 @@
+ /* The leading field separator itself is included in a field when -t
+ is absent. */
+
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ while (ptr < lim && sword--)
+ {
+- while (ptr < lim && *ptr != tab)
++ while (ptr < lim && *ptr != tab[0])
+ ++ptr;
+ if (ptr < lim)
+ ++ptr;
+@@ -1282,11 +1409,70 @@
+ return ptr;
+ }
+
++#if HAVE_MBRTOWC
++static char *
++begfield_mb (const struct line *line, const struct keyfield *key)
++{
++ int i;
++ char *ptr = line->text, *lim = ptr + line->length - 1;
++ size_t sword = key->sword;
++ size_t schar = key->schar;
++ size_t mblength;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ if (tab_length)
++ while (ptr < lim && sword--)
++ {
++ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ }
++ else
++ while (ptr < lim && sword--)
++ {
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ }
++
++ if (key->skipsblanks)
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++
++ for (i = 0; i < schar; i++)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++
++ if (ptr + mblength > lim)
++ break;
++ else
++ ptr += mblength;
++ }
++
++ return ptr;
++}
++#endif
++
+ /* Return the limit of (a pointer to the first character after) the field
+ in LINE specified by KEY. */
+
+ static char *
+-limfield (const struct line *line, const struct keyfield *key)
++limfield_uni (const struct line *line, const struct keyfield *key)
+ {
+ char *ptr = line->text, *lim = ptr + line->length - 1;
+ size_t eword = key->eword, echar = key->echar;
+@@ -1299,10 +1485,10 @@
+ `beginning' is the first character following the delimiting TAB.
+ Otherwise, leave PTR pointing at the first `blank' character after
+ the preceding field. */
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ while (ptr < lim && eword--)
+ {
+- while (ptr < lim && *ptr != tab)
++ while (ptr < lim && *ptr != tab[0])
+ ++ptr;
+ if (ptr < lim && (eword | echar))
+ ++ptr;
+@@ -1348,10 +1534,10 @@
+ */
+
+ /* Make LIM point to the end of (one byte past) the current field. */
+- if (tab != TAB_DEFAULT)
++ if (tab_length)
+ {
+ char *newlim;
+- newlim = memchr (ptr, tab, lim - ptr);
++ newlim = memchr (ptr, tab[0], lim - ptr);
+ if (newlim)
+ lim = newlim;
+ }
+@@ -1384,6 +1570,107 @@
+ return ptr;
+ }
+
++#if HAVE_MBRTOWC
++static char *
++limfield_mb (const struct line *line, const struct keyfield *key)
++{
++ char *ptr = line->text, *lim = ptr + line->length - 1;
++ size_t eword = key->eword, echar = key->echar;
++ int i;
++ size_t mblength;
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ if (tab_length)
++ while (ptr < lim && eword--)
++ {
++ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ if (ptr < lim && (eword | echar))
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ }
++ else
++ while (ptr < lim && eword--)
++ {
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++ }
++
++
++# ifdef POSIX_UNSPECIFIED
++ /* Make LIM point to the end of (one byte past) the current field. */
++ if (tab_length)
++ {
++ char *newlim, *p;
++
++ newlim = NULL;
++ for (p = ptr; p < lim;)
++ {
++ if (memcmp (p, tab, tab_length) == 0)
++ {
++ newlim = p;
++ break;
++ }
++
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ p += mblength;
++ }
++ }
++ else
++ {
++ char *newlim;
++ newlim = ptr;
++
++ while (newlim < lim && ismbblank (newlim, lim - newlim, &mblength))
++ newlim += mblength;
++ if (ptr < lim)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++ ptr += mblength;
++ }
++ while (newlim < lim && !ismbblank (newlim, lim - newlim, &mblength))
++ newlim += mblength;
++ lim = newlim;
++ }
++# endif
++
++ /* If we're skipping leading blanks, don't start counting characters
++ * until after skipping past any leading blanks. */
++ if (key->skipsblanks)
++ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
++ ptr += mblength;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ /* Advance PTR by ECHAR (if possible), but no further than LIM. */
++ for (i = 0; i < echar; i++)
++ {
++ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
++
++ if (ptr + mblength > lim)
++ break;
++ else
++ ptr += mblength;
++ }
++
++ return ptr;
++}
++#endif
++
+ /* Fill BUF reading from FP, moving buf->left bytes from the end
+ of buf->buf to the beginning first. If EOF is reached and the
+ file wasn't terminated by a newline, supply one. Set up BUF's line
+@@ -1466,8 +1753,24 @@
+ else
+ {
+ if (key->skipsblanks)
+- while (blanks[to_uchar (*line_start)])
+- line_start++;
++ {
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ size_t mblength;
++ mbstate_t state;
++ memset (&state, '\0', sizeof(mbstate_t));
++ while (line_start < line->keylim &&
++ ismbblank (line_start,
++ line->keylim - line_start,
++ &mblength))
++ line_start += mblength;
++ }
++ else
++#endif
++ while (blanks[to_uchar (*line_start)])
++ line_start++;
++ }
+ line->keybeg = line_start;
+ }
+ }
+@@ -1500,7 +1803,7 @@
+ hideously fast. */
+
+ static int
+-numcompare (const char *a, const char *b)
++numcompare_uni (const char *a, const char *b)
+ {
+ while (blanks[to_uchar (*a)])
+ a++;
+@@ -1510,6 +1813,25 @@
+ return strnumcmp (a, b, decimal_point, thousands_sep);
+ }
+
++#if HAVE_MBRTOWC
++static int
++numcompare_mb (const char *a, const char *b)
++{
++ size_t mblength, len;
++ len = strlen (a); /* okay for UTF-8 */
++ while (*a && ismbblank (a, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
++ {
++ a += mblength;
++ len -= mblength;
++ }
++ len = strlen (b); /* okay for UTF-8 */
++ while (*b && ismbblank (b, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
++ b += mblength;
++
++ return strnumcmp (a, b, decimal_point, thousands_sep);
++}
++#endif /* HAV_EMBRTOWC */
++
+ static int
+ general_numcompare (const char *sa, const char *sb)
+ {
+@@ -1543,7 +1865,7 @@
+ Return 0 if the name in S is not recognized. */
+
+ static int
+-getmonth (char const *month, size_t len)
++getmonth_uni (char const *month, size_t len)
+ {
+ size_t lo = 0;
+ size_t hi = MONTHS_PER_YEAR;
+@@ -1698,11 +2020,79 @@
+ return diff;
+ }
+
++#if HAVE_MBRTOWC
++static int
++getmonth_mb (const char *s, size_t len)
++{
++ char *month;
++ register size_t i;
++ register int lo = 0, hi = MONTHS_PER_YEAR, result;
++ char *tmp;
++ size_t wclength, mblength;
++ const char **pp;
++ const wchar_t **wpp;
++ wchar_t *month_wcs;
++ mbstate_t state;
++
++ while (len > 0 && ismbblank (s, len, &mblength))
++ {
++ s += mblength;
++ len -= mblength;
++ }
++
++ if (len == 0)
++ return 0;
++
++ month = (char *) alloca (len + 1);
++
++ tmp = (char *) alloca (len + 1);
++ memcpy (tmp, s, len);
++ tmp[len] = '\0';
++ pp = (const char **)&tmp;
++ month_wcs = (wchar_t *) alloca ((len + 1) * sizeof (wchar_t));
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ wclength = mbsrtowcs (month_wcs, pp, len + 1, &state);
++ assert (wclength != (size_t)-1 && *pp == NULL);
++
++ for (i = 0; i < wclength; i++)
++ {
++ month_wcs[i] = towupper(month_wcs[i]);
++ if (iswblank (month_wcs[i]))
++ {
++ month_wcs[i] = L'\0';
++ break;
++ }
++ }
++
++ wpp = (const wchar_t **)&month_wcs;
++
++ mblength = wcsrtombs (month, wpp, len + 1, &state);
++ assert (mblength != (-1) && *wpp == NULL);
++
++ do
++ {
++ int ix = (lo + hi) / 2;
++
++ if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0)
++ hi = ix;
++ else
++ lo = ix;
++ }
++ while (hi - lo > 1);
++
++ result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name))
++ ? monthtab[lo].val : 0);
++
++ return result;
++}
++#endif
++
+ /* Compare two lines A and B trying every key in sequence until there
+ are no more keys or a difference is found. */
+
+ static int
+-keycompare (const struct line *a, const struct line *b)
++keycompare_uni (const struct line *a, const struct line *b)
+ {
+ struct keyfield const *key = keylist;
+
+@@ -1875,6 +2265,179 @@
+ return key->reverse ? -diff : diff;
+ }
+
++#if HAVE_MBRTOWC
++static int
++keycompare_mb (const struct line *a, const struct line *b)
++{
++ struct keyfield *key = keylist;
++
++ /* For the first iteration only, the key positions have been
++ precomputed for us. */
++ char *texta = a->keybeg;
++ char *textb = b->keybeg;
++ char *lima = a->keylim;
++ char *limb = b->keylim;
++
++ size_t mblength_a, mblength_b;
++ wchar_t wc_a, wc_b;
++ mbstate_t state_a, state_b;
++
++ int diff;
++
++ memset (&state_a, '\0', sizeof(mbstate_t));
++ memset (&state_b, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ unsigned char *translate = (unsigned char *) key->translate;
++ bool const *ignore = key->ignore;
++
++ /* Find the lengths. */
++ size_t lena = lima <= texta ? 0 : lima - texta;
++ size_t lenb = limb <= textb ? 0 : limb - textb;
++
++ /* Actually compare the fields. */
++ if (key->random)
++ diff = compare_random (texta, lena, textb, lenb);
++ else if (key->numeric | key->general_numeric)
++ {
++ char savea = *lima, saveb = *limb;
++
++ *lima = *limb = '\0';
++ if (force_general_numcompare)
++ diff = general_numcompare (texta, textb);
++ else
++ diff = ((key->numeric ? numcompare : general_numcompare)
++ (texta, textb));
++ *lima = savea, *limb = saveb;
++ }
++ else if (key->month)
++ diff = getmonth (texta, lena) - getmonth (textb, lenb);
++ else
++ {
++ if (ignore || translate)
++ {
++ char *copy_a = (char *) alloca (lena + 1 + lenb + 1);
++ char *copy_b = copy_a + lena + 1;
++ size_t new_len_a, new_len_b;
++ size_t i, j;
++
++ /* Ignore and/or translate chars before comparing. */
++# define IGNORE_CHARS(NEW_LEN, LEN, TEXT, COPY, WC, MBLENGTH, STATE) \
++ do \
++ { \
++ wchar_t uwc; \
++ char mbc[MB_LEN_MAX]; \
++ mbstate_t state_wc; \
++ \
++ for (NEW_LEN = i = 0; i < LEN;) \
++ { \
++ mbstate_t state_bak; \
++ \
++ state_bak = STATE; \
++ MBLENGTH = mbrtowc (&WC, TEXT + i, LEN - i, &STATE); \
++ \
++ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1 \
++ || MBLENGTH == 0) \
++ { \
++ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1) \
++ STATE = state_bak; \
++ if (!ignore) \
++ COPY[NEW_LEN++] = TEXT[i++]; \
++ continue; \
++ } \
++ \
++ if (ignore) \
++ { \
++ if ((ignore == nonprinting && !iswprint (WC)) \
++ || (ignore == nondictionary \
++ && !iswalnum (WC) && !iswblank (WC))) \
++ { \
++ i += MBLENGTH; \
++ continue; \
++ } \
++ } \
++ \
++ if (translate) \
++ { \
++ \
++ uwc = towupper(WC); \
++ if (WC == uwc) \
++ { \
++ memcpy (mbc, TEXT + i, MBLENGTH); \
++ i += MBLENGTH; \
++ } \
++ else \
++ { \
++ i += MBLENGTH; \
++ WC = uwc; \
++ memset (&state_wc, '\0', sizeof (mbstate_t)); \
++ \
++ MBLENGTH = wcrtomb (mbc, WC, &state_wc); \
++ assert (MBLENGTH != (size_t)-1 && MBLENGTH != 0); \
++ } \
++ \
++ for (j = 0; j < MBLENGTH; j++) \
++ COPY[NEW_LEN++] = mbc[j]; \
++ } \
++ else \
++ for (j = 0; j < MBLENGTH; j++) \
++ COPY[NEW_LEN++] = TEXT[i++]; \
++ } \
++ COPY[NEW_LEN] = '\0'; \
++ } \
++ while (0)
++ IGNORE_CHARS (new_len_a, lena, texta, copy_a,
++ wc_a, mblength_a, state_a);
++ IGNORE_CHARS (new_len_b, lenb, textb, copy_b,
++ wc_b, mblength_b, state_b);
++ diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b);
++ }
++ else if (lena == 0)
++ diff = - NONZERO (lenb);
++ else if (lenb == 0)
++ goto greater;
++ else
++ diff = xmemcoll (texta, lena, textb, lenb);
++ }
++
++ if (diff)
++ goto not_equal;
++
++ key = key->next;
++ if (! key)
++ break;
++
++ /* Find the beginning and limit of the next field. */
++ if (key->eword != -1)
++ lima = limfield (a, key), limb = limfield (b, key);
++ else
++ lima = a->text + a->length - 1, limb = b->text + b->length - 1;
++
++ if (key->sword != -1)
++ texta = begfield (a, key), textb = begfield (b, key);
++ else
++ {
++ texta = a->text, textb = b->text;
++ if (key->skipsblanks)
++ {
++ while (texta < lima && ismbblank (texta, lima - texta, &mblength_a))
++ texta += mblength_a;
++ while (textb < limb && ismbblank (textb, limb - textb, &mblength_b))
++ textb += mblength_b;
++ }
++ }
++ }
++
++ return 0;
++
++greater:
++ diff = 1;
++not_equal:
++ return key->reverse ? -diff : diff;
++}
++#endif
++
+ /* Compare two lines A and B, returning negative, zero, or positive
+ depending on whether A compares less than, equal to, or greater than B. */
+
+@@ -2744,7 +3305,7 @@
+ initialize_exit_failure (SORT_FAILURE);
+
+ hard_LC_COLLATE = hard_locale (LC_COLLATE);
+-#if HAVE_NL_LANGINFO
++#if HAVE_LANGINFO_CODESET
+ hard_LC_TIME = hard_locale (LC_TIME);
+ #endif
+
+@@ -2765,6 +3326,27 @@
+ thousands_sep = -1;
+ }
+
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ inittables = inittables_mb;
++ begfield = begfield_mb;
++ limfield = limfield_mb;
++ getmonth = getmonth_mb;
++ keycompare = keycompare_mb;
++ numcompare = numcompare_mb;
++ }
++ else
++#endif
++ {
++ inittables = inittables_uni;
++ begfield = begfield_uni;
++ limfield = limfield_uni;
++ getmonth = getmonth_uni;
++ keycompare = keycompare_uni;
++ numcompare = numcompare_uni;
++ }
++
+ have_read_stdin = false;
+ inittables ();
+
+@@ -3015,13 +3597,35 @@
+
+ case 't':
+ {
+- char newtab = optarg[0];
+- if (! newtab)
++ char newtab[MB_LEN_MAX + 1];
++ size_t newtab_length = 1;
++ strncpy (newtab, optarg, MB_LEN_MAX);
++ if (! newtab[0])
+ error (SORT_FAILURE, 0, _("empty tab"));
+- if (optarg[1])
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ wchar_t wc;
++ mbstate_t state;
++ size_t i;
++
++ memset (&state, '\0', sizeof (mbstate_t));
++ newtab_length = mbrtowc (&wc, newtab, strnlen (newtab,
++ MB_LEN_MAX),
++ &state);
++ switch (newtab_length)
++ {
++ case (size_t) -1:
++ case (size_t) -2:
++ case 0:
++ newtab_length = 1;
++ }
++ }
++#endif
++ if (newtab_length == 1 && optarg[1])
+ {
+ if (STREQ (optarg, "\\0"))
+- newtab = '\0';
++ newtab[0] = '\0';
+ else
+ {
+ /* Provoke with `sort -txx'. Complain about
+@@ -3032,9 +3636,12 @@
+ quote (optarg));
+ }
+ }
+- if (tab != TAB_DEFAULT && tab != newtab)
++ if (tab_length
++ && (tab_length != newtab_length
++ || memcmp (tab, newtab, tab_length) != 0))
+ error (SORT_FAILURE, 0, _("incompatible tabs"));
+- tab = newtab;
++ memcpy (tab, newtab, newtab_length);
++ tab_length = newtab_length;
+ }
+ break;
+
+--- coreutils-6.8+/src/unexpand.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/unexpand.c 2007-03-01 15:08:24.000000000 +0000
+@@ -39,11 +39,28 @@
+ #include <stdio.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "unexpand"
+
+@@ -110,6 +127,208 @@
+ {NULL, 0, NULL, 0}
+ };
+
++static FILE *next_file (FILE *fp);
++
++#if HAVE_MBRTOWC
++static void
++unexpand_multibyte (void)
++{
++ FILE *fp; /* Input stream. */
++ mbstate_t i_state; /* Current shift state of the input stream. */
++ mbstate_t i_state_bak; /* Back up the I_STATE. */
++ mbstate_t o_state; /* Current shift state of the output stream. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen = 0; /* The length of the byte sequence in buf. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character
++ which shows as same character as WC. */
++
++ /* Index in `tab_list' of next tabstop: */
++ int tab_index = 0; /* For calculating width of pending tabs. */
++ int print_tab_index = 0; /* For printing as many tabs as possible. */
++ unsigned int column = 0; /* Column on screen of next char. */
++ int next_tab_column; /* Column the next tab stop is on. */
++ int convert = 1; /* If nonzero, perform translations. */
++ unsigned int pending = 0; /* Pending columns of blanks. */
++
++ fp = next_file ((FILE *) NULL);
++ if (fp == NULL)
++ return;
++
++ memset (&o_state, '\0', sizeof(mbstate_t));
++ memset (&i_state, '\0', sizeof(mbstate_t));
++
++ for (;;)
++ {
++ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
++ {
++ memmove (buf, bufpos, buflen);
++ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
++ bufpos = buf;
++ }
++
++ /* Get a wide character. */
++ if (buflen < 1)
++ {
++ mblength = 1;
++ wc = WEOF;
++ }
++ else
++ {
++ i_state_bak = i_state;
++ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &i_state);
++ }
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ i_state = i_state_bak;
++ wc = L'\0';
++ }
++
++ if (wc == L' ' && convert && column < INT_MAX)
++ {
++ ++pending;
++ ++column;
++ }
++ else if (wc == L'\t' && convert)
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (tab_index < first_free_tab - 1
++ && column >= tab_list[tab_index])
++ tab_index++;
++ next_tab_column = tab_list[tab_index];
++ if (tab_index < first_free_tab - 1)
++ tab_index++;
++ if (column >= next_tab_column)
++ {
++ convert = 0; /* Ran out of tab stops. */
++ goto flush_pend_mb;
++ }
++ }
++ else
++ {
++ next_tab_column = column + tab_size - column % tab_size;
++ }
++ pending += next_tab_column - column;
++ column = next_tab_column;
++ }
++ else
++ {
++flush_pend_mb:
++ /* Flush pending spaces. Print as many tabs as possible,
++ then print the rest as spaces. */
++ if (pending == 1)
++ {
++ putchar (' ');
++ pending = 0;
++ }
++ column -= pending;
++ while (pending > 0)
++ {
++ if (tab_size == 0)
++ {
++ /* Do not let print_tab_index == first_free_tab;
++ stop when it is 1 less. */
++ while (print_tab_index < first_free_tab - 1
++ && column >= tab_list[print_tab_index])
++ print_tab_index++;
++ next_tab_column = tab_list[print_tab_index];
++ if (print_tab_index < first_free_tab - 1)
++ print_tab_index++;
++ }
++ else
++ {
++ next_tab_column =
++ column + tab_size - column % tab_size;
++ }
++ if (next_tab_column - column <= pending)
++ {
++ putchar ('\t');
++ pending -= next_tab_column - column;
++ column = next_tab_column;
++ }
++ else
++ {
++ --print_tab_index;
++ column += pending;
++ while (pending != 0)
++ {
++ putchar (' ');
++ pending--;
++ }
++ }
++ }
++
++ if (wc == WEOF)
++ {
++ fp = next_file (fp);
++ if (fp == NULL)
++ break; /* No more files. */
++ else
++ {
++ memset (&i_state, '\0', sizeof(mbstate_t));
++ continue;
++ }
++ }
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ if (convert)
++ {
++ ++column;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ mblength = 1;
++ putchar (buf[0]);
++ }
++ else if (mblength == 0)
++ {
++ if (convert && convert_entire_line == 0)
++ convert = 0;
++ mblength = 1;
++ putchar ('\0');
++ }
++ else
++ {
++ if (convert)
++ {
++ if (wc == L'\b')
++ {
++ if (column > 0)
++ --column;
++ }
++ else
++ {
++ int width; /* The width of WC. */
++
++ width = wcwidth (wc);
++ column += (width > 0) ? width : 0;
++ if (convert_entire_line == 0)
++ convert = 0;
++ }
++ }
++
++ if (wc == L'\n')
++ {
++ tab_index = print_tab_index = 0;
++ column = pending = 0;
++ convert = 1;
++ }
++ fwrite (bufpos, sizeof(char), mblength, stdout);
++ }
++ }
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
++
+ void
+ usage (int status)
+ {
+@@ -531,7 +750,12 @@
+
+ file_list = (optind < argc ? &argv[optind] : stdin_argv);
+
+- unexpand ();
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ unexpand_multibyte ();
++ else
++#endif
++ unexpand ();
+
+ if (have_read_stdin && fclose (stdin) != 0)
+ error (EXIT_FAILURE, errno, "-");
+--- coreutils-6.8+/src/pr.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/pr.c 2007-03-01 15:08:24.000000000 +0000
+@@ -313,6 +313,32 @@
+
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get MB_LEN_MAX. */
++#include <limits.h>
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX == 1
++# define MB_LEN_MAX 16
++#endif
++
++/* Get MB_CUR_MAX. */
++#include <stdlib.h>
++
++/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
++/* Get mbstate_t, mbrtowc(), wcwidth(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
++
++/* Get iswprint(). -- for wcwidth(). */
++#if HAVE_WCTYPE_H
++# include <wctype.h>
++#endif
++#if !defined iswprint && !HAVE_ISWPRINT
++# define iswprint(wc) 1
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "hard-locale.h"
+@@ -324,6 +350,18 @@
+ #include "strftime.h"
+ #include "xstrtol.h"
+
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
++#ifndef HAVE_DECL_WCWIDTH
++"this configure-time declaration test was not run"
++#endif
++#if !HAVE_DECL_WCWIDTH
++extern int wcwidth ();
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "pr"
+
+@@ -416,7 +454,20 @@
+
+ #define NULLCOL (COLUMN *)0
+
+-static int char_to_clump (char c);
++/* Funtion pointers to switch functions for single byte locale or for
++ multibyte locale. If multibyte functions do not exist in your sysytem,
++ these pointers always point the function for single byte locale. */
++static void (*print_char) (char c);
++static int (*char_to_clump) (char c);
++
++/* Functions for single byte locale. */
++static void print_char_single (char c);
++static int char_to_clump_single (char c);
++
++/* Functions for multibyte locale. */
++static void print_char_multi (char c);
++static int char_to_clump_multi (char c);
++
+ static bool read_line (COLUMN *p);
+ static bool print_page (void);
+ static bool print_stored (COLUMN *p);
+@@ -426,6 +477,7 @@
+ static void pad_across_to (int position);
+ static void add_line_number (COLUMN *p);
+ static void getoptarg (char *arg, char switch_char, char *character,
++ int *character_length, int *character_width,
+ int *number);
+ void usage (int status);
+ static void print_files (int number_of_files, char **av);
+@@ -440,7 +492,6 @@
+ static void pad_down (int lines);
+ static void read_rest_of_line (COLUMN *p);
+ static void skip_read (COLUMN *p, int column_number);
+-static void print_char (char c);
+ static void cleanup (void);
+ static void print_sep_string (void);
+ static void separator_string (const char *optarg_S);
+@@ -455,7 +506,7 @@
+ we store the leftmost columns contiguously in buff.
+ To print a line from buff, get the index of the first character
+ from line_vector[i], and print up to line_vector[i + 1]. */
+-static char *buff;
++static unsigned char *buff;
+
+ /* Index of the position in buff where the next character
+ will be stored. */
+@@ -559,7 +610,7 @@
+ static bool untabify_input = false;
+
+ /* (-e) The input tab character. */
+-static char input_tab_char = '\t';
++static char input_tab_char[MB_LEN_MAX] = "\t";
+
+ /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ...
+ where the leftmost column is 1. */
+@@ -569,7 +620,10 @@
+ static bool tabify_output = false;
+
+ /* (-i) The output tab character. */
+-static char output_tab_char = '\t';
++static char output_tab_char[MB_LEN_MAX] = "\t";
++
++/* (-i) The byte length of output tab character. */
++static int output_tab_char_length = 1;
+
+ /* (-i) The width of the output tab. */
+ static int chars_per_output_tab = 8;
+@@ -643,7 +697,13 @@
+ static bool numbered_lines = false;
+
+ /* (-n) Character which follows each line number. */
+-static char number_separator = '\t';
++static char number_separator[MB_LEN_MAX] = "\t";
++
++/* (-n) The byte length of the character which follows each line number. */
++static int number_separator_length = 1;
++
++/* (-n) The character width of the character which follows each line number. */
++static int number_separator_width = 0;
+
+ /* (-n) line counting starts with 1st line of input file (not with 1st
+ line of 1st page printed). */
+@@ -696,6 +756,7 @@
+ -a|COLUMN|-m is a `space' and with the -J option a `tab'. */
+ static char *col_sep_string = "";
+ static int col_sep_length = 0;
++static int col_sep_width = 0;
+ static char *column_separator = " ";
+ static char *line_separator = "\t";
+
+@@ -852,6 +913,13 @@
+ col_sep_length = (int) strlen (optarg_S);
+ col_sep_string = xmalloc (col_sep_length + 1);
+ strcpy (col_sep_string, optarg_S);
++
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ col_sep_width = mbswidth (col_sep_string, 0);
++ else
++#endif
++ col_sep_width = col_sep_length;
+ }
+
+ int
+@@ -877,6 +945,21 @@
+
+ atexit (close_stdout);
+
++/* Define which functions are used, the ones for single byte locale or the ones
++ for multibyte locale. */
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1)
++ {
++ print_char = print_char_multi;
++ char_to_clump = char_to_clump_multi;
++ }
++ else
++#endif
++ {
++ print_char = print_char_single;
++ char_to_clump = char_to_clump_single;
++ }
++
+ n_files = 0;
+ file_names = (argc > 1
+ ? xmalloc ((argc - 1) * sizeof (char *))
+@@ -949,8 +1032,12 @@
+ break;
+ case 'e':
+ if (optarg)
+- getoptarg (optarg, 'e', &input_tab_char,
+- &chars_per_input_tab);
++ {
++ int dummy_length, dummy_width;
++
++ getoptarg (optarg, 'e', input_tab_char, &dummy_length,
++ &dummy_width, &chars_per_input_tab);
++ }
+ /* Could check tab width > 0. */
+ untabify_input = true;
+ break;
+@@ -963,8 +1050,12 @@
+ break;
+ case 'i':
+ if (optarg)
+- getoptarg (optarg, 'i', &output_tab_char,
+- &chars_per_output_tab);
++ {
++ int dummy_width;
++
++ getoptarg (optarg, 'i', output_tab_char, &output_tab_char_length,
++ &dummy_width, &chars_per_output_tab);
++ }
+ /* Could check tab width > 0. */
+ tabify_output = true;
+ break;
+@@ -991,8 +1082,8 @@
+ case 'n':
+ numbered_lines = true;
+ if (optarg)
+- getoptarg (optarg, 'n', &number_separator,
+- &chars_per_number);
++ getoptarg (optarg, 'n', number_separator, &number_separator_length,
++ &number_separator_width, &chars_per_number);
+ break;
+ case 'N':
+ skip_count = false;
+@@ -1031,7 +1122,7 @@
+ old_s = false;
+ /* Reset an additional input of -s, -S dominates -s */
+ col_sep_string = "";
+- col_sep_length = 0;
++ col_sep_length = col_sep_width = 0;
+ use_col_separator = true;
+ if (optarg)
+ separator_string (optarg);
+@@ -1188,10 +1279,45 @@
+ a number. */
+
+ static void
+-getoptarg (char *arg, char switch_char, char *character, int *number)
++getoptarg (char *arg, char switch_char, char *character, int *character_length,
++ int *character_width, int *number)
+ {
+ if (!ISDIGIT (*arg))
+- *character = *arg++;
++ {
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1) /* for multibyte locale. */
++ {
++ wchar_t wc;
++ size_t mblength;
++ int width;
++ mbstate_t state = {'\0'};
++
++ mblength = mbrtowc (&wc, arg, strnlen(arg, MB_LEN_MAX), &state);
++
++ if (mblength == (size_t)-1 || mblength == (size_t)-2)
++ {
++ *character_length = 1;
++ *character_width = 1;
++ }
++ else
++ {
++ *character_length = (mblength < 1) ? 1 : mblength;
++ width = wcwidth (wc);
++ *character_width = (width < 0) ? 0 : width;
++ }
++
++ strncpy (character, arg, *character_length);
++ arg += *character_length;
++ }
++ else /* for single byte locale. */
++#endif
++ {
++ *character = *arg++;
++ *character_length = 1;
++ *character_width = 1;
++ }
++ }
++
+ if (*arg)
+ {
+ long int tmp_long;
+@@ -1256,7 +1382,7 @@
+ else
+ col_sep_string = column_separator;
+
+- col_sep_length = 1;
++ col_sep_length = col_sep_width = 1;
+ use_col_separator = true;
+ }
+ /* It's rather pointless to define a TAB separator with column
+@@ -1288,11 +1414,11 @@
+ TAB_WIDTH (chars_per_input_tab, chars_per_number); */
+
+ /* Estimate chars_per_text without any margin and keep it constant. */
+- if (number_separator == '\t')
++ if (number_separator[0] == '\t')
+ number_width = chars_per_number +
+ TAB_WIDTH (chars_per_default_tab, chars_per_number);
+ else
+- number_width = chars_per_number + 1;
++ number_width = chars_per_number + number_separator_width;
+
+ /* The number is part of the column width unless we are
+ printing files in parallel. */
+@@ -1307,7 +1433,7 @@
+ }
+
+ chars_per_column = (chars_per_line - chars_used_by_number -
+- (columns - 1) * col_sep_length) / columns;
++ (columns - 1) * col_sep_width) / columns;
+
+ if (chars_per_column < 1)
+ error (EXIT_FAILURE, 0, _("page width too narrow"));
+@@ -1432,7 +1558,7 @@
+
+ /* Enlarge p->start_position of first column to use the same form of
+ padding_not_printed with all columns. */
+- h = h + col_sep_length;
++ h = h + col_sep_width;
+
+ /* This loop takes care of all but the rightmost column. */
+
+@@ -1466,7 +1592,7 @@
+ }
+ else
+ {
+- h = h_next + col_sep_length;
++ h = h_next + col_sep_width;
+ h_next = h + chars_per_column;
+ }
+ }
+@@ -1756,9 +1882,9 @@
+ align_column (COLUMN *p)
+ {
+ padding_not_printed = p->start_position;
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2029,13 +2155,13 @@
+ /* May be too generous. */
+ buff = X2REALLOC (buff, &buff_allocated);
+ }
+- buff[buff_current++] = c;
++ buff[buff_current++] = (unsigned char) c;
+ }
+
+ static void
+ add_line_number (COLUMN *p)
+ {
+- int i;
++ int i, j;
+ char *s;
+ int left_cut;
+
+@@ -2058,22 +2184,24 @@
+ /* Tabification is assumed for multiple columns, also for n-separators,
+ but `default n-separator = TAB' hasn't been given priority over
+ equal column_width also specified by POSIX. */
+- if (number_separator == '\t')
++ if (number_separator[0] == '\t')
+ {
+ i = number_width - chars_per_number;
+ while (i-- > 0)
+ (p->char_func) (' ');
+ }
+ else
+- (p->char_func) (number_separator);
++ for (j = 0; j < number_separator_length; j++)
++ (p->char_func) (number_separator[j]);
+ }
+ else
+ /* To comply with POSIX, we avoid any expansion of default TAB
+ separator with a single column output. No column_width requirement
+ has to be considered. */
+ {
+- (p->char_func) (number_separator);
+- if (number_separator == '\t')
++ for (j = 0; j < number_separator_length; j++)
++ (p->char_func) (number_separator[j]);
++ if (number_separator[0] == '\t')
+ output_position = POS_AFTER_TAB (chars_per_output_tab,
+ output_position);
+ }
+@@ -2234,7 +2362,7 @@
+ while (goal - h_old > 1
+ && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
+ {
+- putchar (output_tab_char);
++ fwrite (output_tab_char, sizeof(char), output_tab_char_length, stdout);
+ h_old = h_new;
+ }
+ while (++h_old <= goal)
+@@ -2254,6 +2382,7 @@
+ {
+ char *s;
+ int l = col_sep_length;
++ int not_space_flag;
+
+ s = col_sep_string;
+
+@@ -2267,6 +2396,7 @@
+ {
+ for (; separators_not_printed > 0; --separators_not_printed)
+ {
++ not_space_flag = 0;
+ while (l-- > 0)
+ {
+ /* 3 types of sep_strings: spaces only, spaces and chars,
+@@ -2280,12 +2410,15 @@
+ }
+ else
+ {
++ not_space_flag = 1;
+ if (spaces_not_printed > 0)
+ print_white_space ();
+ putchar (*s++);
+- ++output_position;
+ }
+ }
++ if (not_space_flag)
++ output_position += col_sep_width;
++
+ /* sep_string ends with some spaces */
+ if (spaces_not_printed > 0)
+ print_white_space ();
+@@ -2313,7 +2446,7 @@
+ required number of tabs and spaces. */
+
+ static void
+-print_char (char c)
++print_char_single (char c)
+ {
+ if (tabify_output)
+ {
+@@ -2337,6 +2470,74 @@
+ putchar (c);
+ }
+
++#ifdef HAVE_MBRTOWC
++static void
++print_char_multi (char c)
++{
++ static size_t mbc_pos = 0;
++ static char mbc[MB_LEN_MAX] = {'\0'};
++ static mbstate_t state = {'\0'};
++ mbstate_t state_bak;
++ wchar_t wc;
++ size_t mblength;
++ int width;
++
++ if (tabify_output)
++ {
++ state_bak = state;
++ mbc[mbc_pos++] = c;
++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
++
++ while (mbc_pos > 0)
++ {
++ switch (mblength)
++ {
++ case (size_t)-2:
++ state = state_bak;
++ return;
++
++ case (size_t)-1:
++ state = state_bak;
++ ++output_position;
++ putchar (mbc[0]);
++ memmove (mbc, mbc + 1, MB_CUR_MAX - 1);
++ --mbc_pos;
++ break;
++
++ case 0:
++ mblength = 1;
++
++ default:
++ if (wc == L' ')
++ {
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ --mbc_pos;
++ ++spaces_not_printed;
++ return;
++ }
++ else if (spaces_not_printed > 0)
++ print_white_space ();
++
++ /* Nonprintables are assumed to have width 0, except L'\b'. */
++ if ((width = wcwidth (wc)) < 1)
++ {
++ if (wc == L'\b')
++ --output_position;
++ }
++ else
++ output_position += width;
++
++ fwrite (mbc, sizeof(char), mblength, stdout);
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ mbc_pos -= mblength;
++ }
++ }
++ return;
++ }
++ putchar (c);
++}
++#endif
++
+ /* Skip to page PAGE before printing.
+ PAGE may be larger than total number of pages. */
+
+@@ -2517,9 +2718,9 @@
+ align_empty_cols = false;
+ }
+
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2620,9 +2821,9 @@
+ }
+ }
+
+- if (padding_not_printed - col_sep_length > 0)
++ if (padding_not_printed - col_sep_width > 0)
+ {
+- pad_across_to (padding_not_printed - col_sep_length);
++ pad_across_to (padding_not_printed - col_sep_width);
+ padding_not_printed = ANYWHERE;
+ }
+
+@@ -2635,8 +2836,8 @@
+ if (spaces_not_printed == 0)
+ {
+ output_position = p->start_position + end_vector[line];
+- if (p->start_position - col_sep_length == chars_per_margin)
+- output_position -= col_sep_length;
++ if (p->start_position - col_sep_width == chars_per_margin)
++ output_position -= col_sep_width;
+ }
+
+ return true;
+@@ -2655,7 +2856,7 @@
+ number of characters is 1.) */
+
+ static int
+-char_to_clump (char c)
++char_to_clump_single (char c)
+ {
+ unsigned char uc = c;
+ char *s = clump_buff;
+@@ -2665,10 +2866,10 @@
+ int chars;
+ int chars_per_c = 8;
+
+- if (c == input_tab_char)
++ if (c == input_tab_char[0])
+ chars_per_c = chars_per_input_tab;
+
+- if (c == input_tab_char || c == '\t')
++ if (c == input_tab_char[0] || c == '\t')
+ {
+ width = TAB_WIDTH (chars_per_c, input_position);
+
+@@ -2739,6 +2940,154 @@
+ return chars;
+ }
+
++#ifdef HAVE_MBRTOWC
++static int
++char_to_clump_multi (char c)
++{
++ static size_t mbc_pos = 0;
++ static char mbc[MB_LEN_MAX] = {'\0'};
++ static mbstate_t state = {'\0'};
++ mbstate_t state_bak;
++ wchar_t wc;
++ size_t mblength;
++ int wc_width;
++ register char *s = clump_buff;
++ register int i, j;
++ char esc_buff[4];
++ int width;
++ int chars;
++ int chars_per_c = 8;
++
++ state_bak = state;
++ mbc[mbc_pos++] = c;
++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
++
++ width = 0;
++ chars = 0;
++ while (mbc_pos > 0)
++ {
++ switch (mblength)
++ {
++ case (size_t)-2:
++ state = state_bak;
++ return 0;
++
++ case (size_t)-1:
++ state = state_bak;
++ mblength = 1;
++
++ if (use_esc_sequence || use_cntrl_prefix)
++ {
++ width = +4;
++ chars = +4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", mbc[0]);
++ for (i = 0; i <= 2; ++i)
++ *s++ = (int) esc_buff[i];
++ }
++ else
++ {
++ width += 1;
++ chars += 1;
++ *s++ = mbc[0];
++ }
++ break;
++
++ case 0:
++ mblength = 1;
++ /* Fall through */
++
++ default:
++ if (memcmp (mbc, input_tab_char, mblength) == 0)
++ chars_per_c = chars_per_input_tab;
++
++ if (memcmp (mbc, input_tab_char, mblength) == 0 || c == '\t')
++ {
++ int width_inc;
++
++ width_inc = TAB_WIDTH (chars_per_c, input_position);
++ width += width_inc;
++
++ if (untabify_input)
++ {
++ for (i = width_inc; i; --i)
++ *s++ = ' ';
++ chars += width_inc;
++ }
++ else
++ {
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ chars += mblength;
++ }
++ }
++ else if ((wc_width = wcwidth (wc)) < 1)
++ {
++ if (use_esc_sequence)
++ {
++ for (i = 0; i < mblength; i++)
++ {
++ width += 4;
++ chars += 4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", c);
++ for (j = 0; j <= 2; ++j)
++ *s++ = (int) esc_buff[j];
++ }
++ }
++ else if (use_cntrl_prefix)
++ {
++ if (wc < 0200)
++ {
++ width += 2;
++ chars += 2;
++ *s++ = '^';
++ *s++ = wc ^ 0100;
++ }
++ else
++ {
++ for (i = 0; i < mblength; i++)
++ {
++ width += 4;
++ chars += 4;
++ *s++ = '\\';
++ sprintf (esc_buff, "%03o", c);
++ for (j = 0; j <= 2; ++j)
++ *s++ = (int) esc_buff[j];
++ }
++ }
++ }
++ else if (wc == L'\b')
++ {
++ width += -1;
++ chars += 1;
++ *s++ = c;
++ }
++ else
++ {
++ width += 0;
++ chars += mblength;
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ }
++ }
++ else
++ {
++ width += wc_width;
++ chars += mblength;
++ for (i = 0; i < mblength; i++)
++ *s++ = mbc[i];
++ }
++ }
++ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
++ mbc_pos -= mblength;
++ }
++
++ input_position += width;
++ return chars;
++}
++#endif
++
+ /* We've just printed some files and need to clean up things before
+ looking for more options and printing the next batch of files.
+
+--- coreutils-6.8+/src/cut.c.i18n 2007-01-14 15:41:28.000000000 +0000
++++ coreutils-6.8+/src/cut.c 2007-03-01 15:08:24.000000000 +0000
+@@ -29,6 +29,11 @@
+ #include <assert.h>
+ #include <getopt.h>
+ #include <sys/types.h>
++
++/* Get mbstate_t, mbrtowc(). */
++#if HAVE_WCHAR_H
++# include <wchar.h>
++#endif
+ #include "system.h"
+
+ #include "error.h"
+@@ -37,6 +42,18 @@
+ #include "quote.h"
+ #include "xstrndup.h"
+
++/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
++ installation; work around this configuration error. */
++#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
++# undef MB_LEN_MAX
++# define MB_LEN_MAX 16
++#endif
++
++/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
++#if HAVE_MBRTOWC && defined mbstate_t
++# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
++#endif
++
+ /* The official name of this program (e.g., no `g' prefix). */
+ #define PROGRAM_NAME "cut"
+
+@@ -67,6 +84,52 @@
+ } \
+ while (0)
+
++/* Refill the buffer BUF to get a multibyte character. */
++#define REFILL_BUFFER(BUF, BUFPOS, BUFLEN, STREAM) \
++ do \
++ { \
++ if (BUFLEN < MB_LEN_MAX && !feof (STREAM) && !ferror (STREAM)) \
++ { \
++ memmove (BUF, BUFPOS, BUFLEN); \
++ BUFLEN += fread (BUF + BUFLEN, sizeof(char), BUFSIZ, STREAM); \
++ BUFPOS = BUF; \
++ } \
++ } \
++ while (0)
++
++/* Get wide character on BUFPOS. BUFPOS is not included after that.
++ If byte sequence is not valid as a character, CONVFAIL is 1. Otherwise 0. */
++#define GET_NEXT_WC_FROM_BUFFER(WC, BUFPOS, BUFLEN, MBLENGTH, STATE, CONVFAIL) \
++ do \
++ { \
++ mbstate_t state_bak; \
++ \
++ if (BUFLEN < 1) \
++ { \
++ WC = WEOF; \
++ break; \
++ } \
++ \
++ /* Get a wide character. */ \
++ CONVFAIL = 0; \
++ state_bak = STATE; \
++ MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE); \
++ \
++ switch (MBLENGTH) \
++ { \
++ case (size_t)-1: \
++ case (size_t)-2: \
++ CONVFAIL++; \
++ STATE = state_bak; \
++ /* Fall througn. */ \
++ \
++ case 0: \
++ MBLENGTH = 1; \
++ break; \
++ } \
++ } \
++ while (0)
++
+ struct range_pair
+ {
+ size_t lo;
+@@ -85,7 +148,7 @@
+ /* The number of bytes allocated for FIELD_1_BUFFER. */
+ static size_t field_1_bufsize;
+
+-/* The largest field or byte index used as an endpoint of a closed
++/* The largest byte, character or field index used as an endpoint of a closed
+ or degenerate range specification; this doesn't include the starting
+ index of right-open-ended ranges. For example, with either range spec
+ `2-5,9-', `2-3,5,9-' this variable would be set to 5. */
+@@ -97,10 +160,11 @@
+
+ /* This is a bit vector.
+ In byte mode, which bytes to output.
++ In character mode, which characters to output.
+ In field mode, which DELIM-separated fields to output.
+- Both bytes and fields are numbered starting with 1,
++ Bytes, characters and fields are numbered starting with 1,
+ so the zeroth bit of this array is unused.
+- A field or byte K has been selected if
++ A byte, character or field K has been selected if
+ (K <= MAX_RANGE_ENDPOINT and is_printable_field(K))
+ || (EOL_RANGE_START > 0 && K >= EOL_RANGE_START). */
+ static unsigned char *printable_field;
+@@ -109,9 +173,12 @@
+ {
+ undefined_mode,
+
+- /* Output characters that are in the given bytes. */
++ /* Output bytes that are at the given positions. */
+ byte_mode,
+
++ /* Output characters that are at the given positions. */
++ character_mode,
++
+ /* Output the given delimeter-separated fields. */
+ field_mode
+ };
+@@ -121,6 +188,13 @@
+
+ static enum operating_mode operating_mode;
+
++/* If nonzero, when in byte mode, don't split multibyte characters. */
++static int byte_mode_character_aware;
++
++/* If nonzero, the function for single byte locale is work
++ if this program runs on multibyte locale. */
++static int force_singlebyte_mode;
++
+ /* If true do not output lines containing no delimeter characters.
+ Otherwise, all such lines are printed. This option is valid only
+ with field mode. */
+@@ -132,6 +206,9 @@
+
+ /* The delimeter character for field mode. */
+ static unsigned char delim;
++#if HAVE_WCHAR_H
++static wchar_t wcdelim;
++#endif
+
+ /* True if the --output-delimiter=STRING option was specified. */
+ static bool output_delimiter_specified;
+@@ -205,7 +282,7 @@
+ -f, --fields=LIST select only these fields; also print any line\n\
+ that contains no delimiter character, unless\n\
+ the -s option is specified\n\
+- -n (ignored)\n\
++ -n with -b: don't split multibyte characters\n\
+ "), stdout);
+ fputs (_("\
+ --complement complement the set of selected bytes, characters\n\
+@@ -362,7 +439,7 @@
+ in_digits = false;
+ /* Starting a range. */
+ if (dash_found)
+- FATAL_ERROR (_("invalid byte or field list"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+ dash_found = true;
+ fieldstr++;
+
+@@ -387,14 +464,16 @@
+ if (!rhs_specified)
+ {
+ /* `n-'. From `initial' to end of line. */
+- eol_range_start = initial;
++ if (eol_range_start == 0 ||
++ (eol_range_start != 0 && eol_range_start > initial))
++ eol_range_start = initial;
+ field_found = true;
+ }
+ else
+ {
+ /* `m-n' or `-n' (1-n). */
+ if (value < initial)
+- FATAL_ERROR (_("invalid decreasing range"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+
+ /* Is there already a range going to end of line? */
+ if (eol_range_start != 0)
+@@ -467,6 +546,9 @@
+ if (operating_mode == byte_mode)
+ error (0, 0,
+ _("byte offset %s is too large"), quote (bad_num));
++ else if (operating_mode == character_mode)
++ error (0, 0,
++ _("character offset %s is too large"), quote (bad_num));
+ else
+ error (0, 0,
+ _("field number %s is too large"), quote (bad_num));
+@@ -477,7 +559,7 @@
+ fieldstr++;
+ }
+ else
+- FATAL_ERROR (_("invalid byte or field list"));
++ FATAL_ERROR (_("invalid byte, character or field list"));
+ }
+
+ max_range_endpoint = 0;
+@@ -570,6 +652,63 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++/* This function is in use for the following case.
++
++ 1. Read from the stream STREAM, printing to standard output any selected
++ characters.
++
++ 2. Read from stream STREAM, printing to standard output any selected bytes,
++ without splitting multibyte characters. */
++
++static void
++cut_characters_or_cut_bytes_no_split (FILE *stream)
++{
++ int idx; /* number of bytes or characters in the line so far. */
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen; /* The length of the byte sequence in buf. */
++ wint_t wc; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ idx = 0;
++ buflen = 0;
++ bufpos = buf;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ {
++ if (idx > 0)
++ putchar ('\n');
++ break;
++ }
++ else if (wc == L'\n')
++ {
++ putchar ('\n');
++ idx = 0;
++ }
++ else
++ {
++ idx += (operating_mode == byte_mode) ? mblength : 1;
++ if (print_kth (idx, NULL))
++ fwrite (bufpos, mblength, sizeof(char), stdout);
++ }
++
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++}
++#endif
++
+ /* Read from stream STREAM, printing to standard output any selected fields. */
+
+ static void
+@@ -692,13 +831,192 @@
+ }
+ }
+
++#if HAVE_MBRTOWC
++static void
++cut_fields_mb (FILE *stream)
++{
++ int c;
++ unsigned int field_idx;
++ int found_any_selected_field;
++ int buffer_first_field;
++ int empty_input;
++ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
++ char *bufpos; /* Next read position of BUF. */
++ size_t buflen; /* The length of the byte sequence in buf. */
++ wint_t wc = 0; /* A gotten wide character. */
++ size_t mblength; /* The byte size of a multibyte character which shows
++ as same character as WC. */
++ mbstate_t state; /* State of the stream. */
++ int convfail; /* 1, when conversion is failed. Otherwise 0. */
++
++ found_any_selected_field = 0;
++ field_idx = 1;
++ bufpos = buf;
++ buflen = 0;
++ memset (&state, '\0', sizeof(mbstate_t));
++
++ c = getc (stream);
++ empty_input = (c == EOF);
++ if (c != EOF)
++ ungetc (c, stream);
++ else
++ wc = WEOF;
++
++ /* To support the semantics of the -s flag, we may have to buffer
++ all of the first field to determine whether it is `delimited.'
++ But that is unnecessary if all non-delimited lines must be printed
++ and the first field has been selected, or if non-delimited lines
++ must be suppressed and the first field has *not* been selected.
++ That is because a non-delimited line has exactly one field. */
++ buffer_first_field = (suppress_non_delimited ^ !print_kth (1, NULL));
++
++ while (1)
++ {
++ if (field_idx == 1 && buffer_first_field)
++ {
++ int len = 0;
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER
++ (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ break;
++
++ field_1_buffer = xrealloc (field_1_buffer, len + mblength);
++ memcpy (field_1_buffer + len, bufpos, mblength);
++ len += mblength;
++ buflen -= mblength;
++ bufpos += mblength;
++
++ if (!convfail && (wc == L'\n' || wc == wcdelim))
++ break;
++ }
++
++ if (wc == WEOF)
++ break;
++
++ /* If the first field extends to the end of line (it is not
++ delimited) and we are printing all non-delimited lines,
++ print this one. */
++ if (convfail || (!convfail && wc != wcdelim))
++ {
++ if (suppress_non_delimited)
++ {
++ /* Empty. */
++ }
++ else
++ {
++ fwrite (field_1_buffer, sizeof (char), len, stdout);
++ /* Make sure the output line is newline terminated. */
++ if (convfail || (!convfail && wc != L'\n'))
++ putchar ('\n');
++ }
++ continue;
++ }
++
++ if (print_kth (1, NULL))
++ {
++ /* Print the field, but not the trailing delimiter. */
++ fwrite (field_1_buffer, sizeof (char), len - 1, stdout);
++ found_any_selected_field = 1;
++ }
++ ++field_idx;
++ }
++
++ if (wc != WEOF)
++ {
++ if (print_kth (field_idx, NULL))
++ {
++ if (found_any_selected_field)
++ {
++ fwrite (output_delimiter_string, sizeof (char),
++ output_delimiter_length, stdout);
++ }
++ found_any_selected_field = 1;
++ }
++
++ while (1)
++ {
++ REFILL_BUFFER (buf, bufpos, buflen, stream);
++
++ GET_NEXT_WC_FROM_BUFFER
++ (wc, bufpos, buflen, mblength, state, convfail);
++
++ if (wc == WEOF)
++ break;
++ else if (!convfail && (wc == wcdelim || wc == L'\n'))
++ {
++ buflen -= mblength;
++ bufpos += mblength;
++ break;
++ }
++
++ if (print_kth (field_idx, NULL))
++ fwrite (bufpos, mblength, sizeof(char), stdout);
++
++ buflen -= mblength;
++ bufpos += mblength;
++ }
++ }
++
++ if ((!convfail || wc == L'\n') && buflen < 1)
++ wc = WEOF;
++
++ if (!convfail && wc == wcdelim)
++ ++field_idx;
++ else if (wc == WEOF || (!convfail && wc == L'\n'))
++ {
++ if (found_any_selected_field
++ || (!empty_input && !(suppress_non_delimited && field_idx == 1)))
++ putchar ('\n');
++ if (wc == WEOF)
++ break;
++ field_idx = 1;
++ found_any_selected_field = 0;
++ }
++ }
++}
++#endif
++
+ static void
+ cut_stream (FILE *stream)
+ {
+- if (operating_mode == byte_mode)
+- cut_bytes (stream);
++#if HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
++ {
++ switch (operating_mode)
++ {
++ case byte_mode:
++ if (byte_mode_character_aware)
++ cut_characters_or_cut_bytes_no_split (stream);
++ else
++ cut_bytes (stream);
++ break;
++
++ case character_mode:
++ cut_characters_or_cut_bytes_no_split (stream);
++ break;
++
++ case field_mode:
++ cut_fields_mb (stream);
++ break;
++
++ default:
++ abort ();
++ }
++ }
+ else
+- cut_fields (stream);
++#endif
++ {
++ if (operating_mode == field_mode)
++ cut_fields (stream);
++ else
++ cut_bytes (stream);
++ }
+ }
+
+ /* Process file FILE to standard output.
+@@ -748,6 +1066,8 @@
+ bool ok;
+ bool delim_specified = false;
+ char *spec_list_string IF_LINT(= NULL);
++ char mbdelim[MB_LEN_MAX + 1];
++ size_t delimlen = 0;
+
+ initialize_main (&argc, &argv);
+ program_name = argv[0];
+@@ -770,7 +1090,6 @@
+ switch (optc)
+ {
+ case 'b':
+- case 'c':
+ /* Build the byte list. */
+ if (operating_mode != undefined_mode)
+ FATAL_ERROR (_("only one type of list may be specified"));
+@@ -778,6 +1097,14 @@
+ spec_list_string = optarg;
+ break;
+
++ case 'c':
++ /* Build the character list. */
++ if (operating_mode != undefined_mode)
++ FATAL_ERROR (_("only one type of list may be specified"));
++ operating_mode = character_mode;
++ spec_list_string = optarg;
++ break;
++
+ case 'f':
+ /* Build the field list. */
+ if (operating_mode != undefined_mode)
+@@ -789,10 +1116,35 @@
+ case 'd':
+ /* New delimiter. */
+ /* Interpret -d '' to mean `use the NUL byte as the delimiter.' */
+- if (optarg[0] != '\0' && optarg[1] != '\0')
+- FATAL_ERROR (_("the delimiter must be a single character"));
+- delim = optarg[0];
+- delim_specified = true;
++ {
++#if HAVE_MBRTOWC
++ if(MB_CUR_MAX > 1)
++ {
++ mbstate_t state;
++
++ memset (&state, '\0', sizeof(mbstate_t));
++ delimlen = mbrtowc (&wcdelim, optarg, strnlen(optarg, MB_LEN_MAX), &state);
++
++ if (delimlen == (size_t)-1 || delimlen == (size_t)-2)
++ ++force_singlebyte_mode;
++ else
++ {
++ delimlen = (delimlen < 1) ? 1 : delimlen;
++ if (wcdelim != L'\0' && *(optarg + delimlen) != '\0')
++ FATAL_ERROR (_("the delimiter must be a single character"));
++ memcpy (mbdelim, optarg, delimlen);
++ }
++ }
++
++ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
++#endif
++ {
++ if (optarg[0] != '\0' && optarg[1] != '\0')
++ FATAL_ERROR (_("the delimiter must be a single character"));
++ delim = (unsigned char) optarg[0];
++ }
++ delim_specified = true;
++ }
+ break;
+
+ case OUTPUT_DELIMITER_OPTION:
+@@ -805,6 +1157,7 @@
+ break;
+
+ case 'n':
++ byte_mode_character_aware = 1;
+ break;
+
+ case 's':
+@@ -827,7 +1180,7 @@
+ if (operating_mode == undefined_mode)
+ FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));
+
+- if (delim != '\0' && operating_mode != field_mode)
++ if (delim_specified && operating_mode != field_mode)
+ FATAL_ERROR (_("an input delimiter may be specified only\
+ when operating on fields"));
+
+@@ -854,15 +1207,34 @@
+ }
+
+ if (!delim_specified)
+- delim = '\t';
++ {
++ delim = '\t';
++#ifdef HAVE_MBRTOWC
++ wcdelim = L'\t';
++ mbdelim[0] = '\t';
++ mbdelim[1] = '\0';
++ delimlen = 1;
++#endif
++ }
+
+ if (output_delimiter_string == NULL)
+ {
+- static char dummy[2];
+- dummy[0] = delim;
+- dummy[1] = '\0';
+- output_delimiter_string = dummy;
+- output_delimiter_length = 1;
++#ifdef HAVE_MBRTOWC
++ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
++ {
++ output_delimiter_string = xstrdup(mbdelim);
++ output_delimiter_length = delimlen;
++ }
++
++ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
++#endif
++ {
++ static char dummy[2];
++ dummy[0] = delim;
++ dummy[1] = '\0';
++ output_delimiter_string = dummy;
++ output_delimiter_length = 1;
++ }
+ }
+
+ if (optind == argc)
diff --git a/abs/core/coreutils/coreutils-pam.patch b/abs/core/coreutils/coreutils-pam.patch
new file mode 100644
index 0000000..8593ecc
--- /dev/null
+++ b/abs/core/coreutils/coreutils-pam.patch
@@ -0,0 +1,413 @@
+--- coreutils-6.7/src/Makefile.am.pam 2006-11-24 21:28:10.000000000 +0000
++++ coreutils-6.7/src/Makefile.am 2007-01-09 17:00:01.000000000 +0000
+@@ -103,7 +103,7 @@
+ # If necessary, add -lm to resolve use of pow in lib/strtod.c.
+ uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
+
+-su_LDADD = $(LDADD) $(LIB_CRYPT)
++su_LDADD = $(LDADD) $(LIB_CRYPT) @LIB_PAM@
+
+ dir_LDADD += $(LIB_ACL)
+ ls_LDADD += $(LIB_ACL)
+--- coreutils-6.7/src/su.c.pam 2007-01-09 17:00:01.000000000 +0000
++++ coreutils-6.7/src/su.c 2007-01-09 17:16:43.000000000 +0000
+@@ -38,6 +38,16 @@
+ restricts who can su to UID 0 accounts. RMS considers that to
+ be fascist.
+
++#ifdef USE_PAM
++
++ Actually, with PAM, su has nothing to do with whether or not a
++ wheel group is enforced by su. RMS tries to restrict your access
++ to a su which implements the wheel group, but PAM considers that
++ to be fascist, and gives the user/sysadmin the opportunity to
++ enforce a wheel group by proper editing of /etc/pam.conf
++
++#endif
++
+ Compile-time options:
+ -DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
+ -DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
+@@ -59,6 +69,15 @@
+ prototype (returning `int') in <unistd.h>. */
+ #define getusershell _getusershell_sys_proto_
+
++#ifdef USE_PAM
++# include <signal.h>
++# include <sys/wait.h>
++# include <sys/fsuid.h>
++# include <unistd.h>
++# include <security/pam_appl.h>
++# include <security/pam_misc.h>
++#endif /* USE_PAM */
++
+ #include "system.h"
+ #include "getpass.h"
+
+@@ -128,15 +147,22 @@
+ /* The user to become if none is specified. */
+ #define DEFAULT_USER "root"
+
++#ifndef USE_PAM
+ char *crypt ();
++#endif
+ char *getusershell ();
+ void endusershell ();
+ void setusershell ();
+
+ extern char **environ;
+
+-static void run_shell (char const *, char const *, char **, size_t)
++static void run_shell (char const *, char const *, char **, size_t,
++ const struct passwd *)
++#ifdef USE_PAM
++ ;
++#else
+ ATTRIBUTE_NORETURN;
++#endif
+
+ /* The name this program was run with. */
+ char *program_name;
+@@ -225,7 +251,26 @@
+ }
+ #endif
+
++#ifdef USE_PAM
++static pam_handle_t *pamh = NULL;
++static int retval;
++static struct pam_conv conv = {
++ misc_conv,
++ NULL
++};
++
++#define PAM_BAIL_P if (retval) { \
++ pam_end(pamh, PAM_SUCCESS); \
++ return 0; \
++}
++#define PAM_BAIL_P_VOID if (retval) { \
++ pam_end(pamh, PAM_SUCCESS); \
++return; \
++}
++#endif
++
+ /* Ask the user for a password.
++ If PAM is in use, let PAM ask for the password if necessary.
+ Return true if the user gives the correct password for entry PW,
+ false if not. Return true without asking for a password if run by UID 0
+ or if PW has an empty password. */
+@@ -233,6 +278,44 @@
+ static bool
+ correct_password (const struct passwd *pw)
+ {
++#ifdef USE_PAM
++ struct passwd *caller;
++ char *tty_name, *ttyn;
++ retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
++ PAM_BAIL_P;
++
++ if (getuid() != 0 && !isatty(0)) {
++ fprintf(stderr, "standard in must be a tty\n");
++ exit(1);
++ }
++
++ caller = getpwuid(getuid());
++ if(caller != NULL && caller->pw_name != NULL) {
++ retval = pam_set_item(pamh, PAM_RUSER, caller->pw_name);
++ PAM_BAIL_P;
++ }
++
++ ttyn = ttyname(0);
++ if (ttyn) {
++ if (strncmp(ttyn, "/dev/", 5) == 0)
++ tty_name = ttyn+5;
++ else
++ tty_name = ttyn;
++ retval = pam_set_item(pamh, PAM_TTY, tty_name);
++ PAM_BAIL_P;
++ }
++ retval = pam_authenticate(pamh, 0);
++ PAM_BAIL_P;
++ retval = pam_acct_mgmt(pamh, 0);
++ if (retval == PAM_NEW_AUTHTOK_REQD) {
++ /* password has expired. Offer option to change it. */
++ retval = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
++ PAM_BAIL_P;
++ }
++ PAM_BAIL_P;
++ /* must be authenticated if this point was reached */
++ return 1;
++#else /* !USE_PAM */
+ char *unencrypted, *encrypted, *correct;
+ #if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
+ /* Shadow passwd stuff for SVR3 and maybe other systems. */
+@@ -257,6 +340,7 @@
+ encrypted = crypt (unencrypted, correct);
+ memset (unencrypted, 0, strlen (unencrypted));
+ return STREQ (encrypted, correct);
++#endif /* !USE_PAM */
+ }
+
+ /* Update `environ' for the new shell based on PW, with SHELL being
+@@ -270,12 +354,18 @@
+ /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
+ Unset all other environment variables. */
+ char const *term = getenv ("TERM");
++ char const *display = getenv ("DISPLAY");
++ char const *xauthority = getenv ("XAUTHORITY");
+ if (term)
+ term = xstrdup (term);
+ environ = xmalloc ((6 + !!term) * sizeof (char *));
+ environ[0] = NULL;
+ if (term)
+ xsetenv ("TERM", term);
++ if (display)
++ xsetenv ("DISPLAY", display);
++ if (xauthority)
++ xsetenv ("XAUTHORITY", xauthority);
+ xsetenv ("HOME", pw->pw_dir);
+ xsetenv ("SHELL", shell);
+ xsetenv ("USER", pw->pw_name);
+@@ -308,8 +398,13 @@
+ {
+ #ifdef HAVE_INITGROUPS
+ errno = 0;
+- if (initgroups (pw->pw_name, pw->pw_gid) == -1)
++ if (initgroups (pw->pw_name, pw->pw_gid) == -1) {
++#ifdef USE_PAM
++ pam_close_session(pamh, 0);
++ pam_end(pamh, PAM_ABORT);
++#endif
+ error (EXIT_FAILURE, errno, _("cannot set groups"));
++ }
+ endgrent ();
+ #endif
+ if (setgid (pw->pw_gid))
+@@ -318,6 +413,31 @@
+ error (EXIT_FAILURE, errno, _("cannot set user id"));
+ }
+
++#ifdef USE_PAM
++static int caught=0;
++/* Signal handler for parent process later */
++static void su_catch_sig(int sig)
++{
++ ++caught;
++}
++
++int
++pam_copyenv (pam_handle_t *pamh)
++{
++ char **env;
++
++ env = pam_getenvlist(pamh);
++ if(env) {
++ while(*env) {
++ if (putenv (*env))
++ xalloc_die ();
++ env++;
++ }
++ }
++ return(0);
++}
++#endif
++
+ /* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
+ If COMMAND is nonzero, pass it to the shell with the -c option.
+ Pass ADDITIONAL_ARGS to the shell as more arguments; there
+@@ -325,17 +445,49 @@
+
+ static void
+ run_shell (char const *shell, char const *command, char **additional_args,
+- size_t n_additional_args)
++ size_t n_additional_args, const struct passwd *pw)
+ {
+ size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
+ char const **args = xnmalloc (n_args, sizeof *args);
+ size_t argno = 1;
++#ifdef USE_PAM
++ int child;
++ sigset_t ourset;
++ int status;
++
++ retval = pam_open_session(pamh,0);
++ if (retval != PAM_SUCCESS) {
++ fprintf (stderr, "could not open session\n");
++ exit (1);
++ }
++
++/* do this at the last possible moment, because environment variables may
++ be passed even in the session phase
++*/
++ if(pam_copyenv(pamh) != PAM_SUCCESS)
++ fprintf (stderr, "error copying PAM environment\n");
++
++ /* Credentials should be set in the parent */
++ if (pam_setcred(pamh, PAM_ESTABLISH_CRED) != PAM_SUCCESS) {
++ pam_close_session(pamh, 0);
++ fprintf(stderr, "could not set PAM credentials\n");
++ exit(1);
++ }
++
++ child = fork();
++ if (child == 0) { /* child shell */
++ change_identity (pw);
++ pam_end(pamh, 0);
++#endif
+
+ if (simulate_login)
+ {
+ char *arg0;
+ char *shell_basename;
+
++ if(chdir(pw->pw_dir))
++ error(0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
++
+ shell_basename = last_component (shell);
+ arg0 = xmalloc (strlen (shell_basename) + 2);
+ arg0[0] = '-';
+@@ -360,6 +512,66 @@
+ error (0, errno, "%s", shell);
+ exit (exit_status);
+ }
++#ifdef USE_PAM
++ } else if (child == -1) {
++ fprintf(stderr, "can not fork user shell: %s", strerror(errno));
++ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
++ pam_close_session(pamh, 0);
++ pam_end(pamh, PAM_ABORT);
++ exit(1);
++ }
++ /* parent only */
++ sigfillset(&ourset);
++ if (sigprocmask(SIG_BLOCK, &ourset, NULL)) {
++ fprintf(stderr, "%s: signal malfunction\n", PROGRAM_NAME);
++ caught = 1;
++ }
++ if (!caught) {
++ struct sigaction action;
++ action.sa_handler = su_catch_sig;
++ sigemptyset(&action.sa_mask);
++ action.sa_flags = 0;
++ sigemptyset(&ourset);
++ if (sigaddset(&ourset, SIGTERM)
++ || sigaddset(&ourset, SIGALRM)
++ || sigaction(SIGTERM, &action, NULL)
++ || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
++ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
++ caught = 1;
++ }
++ }
++ if (!caught) {
++ do {
++ int pid;
++
++ pid = waitpid(-1, &status, WUNTRACED);
++
++ if (WIFSTOPPED(status)) {
++ kill(getpid(), SIGSTOP);
++ /* once we get here, we must have resumed */
++ kill(pid, SIGCONT);
++ }
++ } while (WIFSTOPPED(status));
++ }
++
++ if (caught) {
++ fprintf(stderr, "\nSession terminated, killing shell...");
++ kill (child, SIGTERM);
++ }
++ /* Not checking retval on this because we need to call close session */
++ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
++ retval = pam_close_session(pamh, 0);
++ PAM_BAIL_P_VOID;
++ retval = pam_end(pamh, PAM_SUCCESS);
++ PAM_BAIL_P_VOID;
++ if (caught) {
++ sleep(2);
++ kill(child, SIGKILL);
++ fprintf(stderr, " ...killed.\n");
++ exit(-1);
++ }
++ exit (WEXITSTATUS(status));
++#endif /* USE_PAM */
+ }
+
+ /* Return true if SHELL is a restricted shell (one not returned by
+@@ -527,9 +739,9 @@
+ shell = xstrdup (shell ? shell : pw->pw_shell);
+ modify_environment (pw, shell);
+
++#ifndef USE_PAM
+ change_identity (pw);
+- if (simulate_login && chdir (pw->pw_dir) != 0)
+- error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
++#endif
+
+- run_shell (shell, command, argv + optind, MAX (0, argc - optind));
++ run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw);
+ }
+--- coreutils-6.7/doc/coreutils.texi.pam 2006-10-27 15:30:48.000000000 +0100
++++ coreutils-6.7/doc/coreutils.texi 2007-01-09 17:00:01.000000000 +0000
+@@ -13395,8 +13395,11 @@
+ @findex syslog
+ @command{su} can optionally be compiled to use @code{syslog} to report
+ failed, and optionally successful, @command{su} attempts. (If the system
+-supports @code{syslog}.) However, GNU @command{su} does not check if the
+-user is a member of the @code{wheel} group; see below.
++supports @code{syslog}.)
++
++This version of @command{su} has support for using PAM for
++authentication. You can edit @file{/etc/pam.d/su} to customize its
++behaviour.
+
+ The program accepts the following options. Also see @ref{Common options}.
+
+@@ -13477,33 +13480,6 @@
+ the exit status of the subshell otherwise
+ @end display
+
+-@cindex wheel group, not supported
+-@cindex group wheel, not supported
+-@cindex fascism
+-@subsection Why GNU @command{su} does not support the @samp{wheel} group
+-
+-(This section is by Richard Stallman.)
+-
+-@cindex Twenex
+-@cindex MIT AI lab
+-Sometimes a few of the users try to hold total power over all the
+-rest. For example, in 1984, a few users at the MIT AI lab decided to
+-seize power by changing the operator password on the Twenex system and
+-keeping it secret from everyone else. (I was able to thwart this coup
+-and give power back to the users by patching the kernel, but I
+-wouldn't know how to do that in Unix.)
+-
+-However, occasionally the rulers do tell someone. Under the usual
+-@command{su} mechanism, once someone learns the root password who
+-sympathizes with the ordinary users, he or she can tell the rest. The
+-``wheel group'' feature would make this impossible, and thus cement the
+-power of the rulers.
+-
+-I'm on the side of the masses, not that of the rulers. If you are
+-used to supporting the bosses and sysadmins in whatever they do, you
+-might find this idea strange at first.
+-
+-
+ @node Process control
+ @chapter Process control
+
+--- coreutils-6.7/configure.ac.pam 2006-12-07 21:30:24.000000000 +0000
++++ coreutils-6.7/configure.ac 2007-01-09 17:18:04.000000000 +0000
+@@ -44,6 +44,13 @@
+ gl_INIT
+ coreutils_MACROS
+
++dnl Give the chance to enable PAM
++AC_ARG_ENABLE(pam, dnl
++[ --enable-pam Enable use of the PAM libraries],
++[AC_DEFINE(USE_PAM, 1, [Define if you want to use PAM])
++LIB_PAM="-ldl -lpam -lpam_misc"
++AC_SUBST(LIB_PAM)])
++
+ AC_FUNC_FORK
+
+ optional_bin_progs=
diff --git a/abs/core/coreutils/coreutils-uname.patch b/abs/core/coreutils/coreutils-uname.patch
new file mode 100644
index 0000000..93cb134
--- /dev/null
+++ b/abs/core/coreutils/coreutils-uname.patch
@@ -0,0 +1,173 @@
+On linux platforms, grok /proc/cpuinfo for the CPU/vendor info.
+
+Prob not suitable for upstream seeing as how it's 100% linux-specific
+http://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
+
+Patch originally by Carlos E. Gorges <carlos@techlinux.com.br>, but
+heavily reworked to suck less.
+
+To add support for additional platforms, check out the show_cpuinfo()
+func in the linux/arch/<ARCH>/ source tree of the kernel.
+
+--- coreutils/src/uname.c
++++ coreutils/src/uname.c
+@@ -51,6 +51,11 @@
+ # include <mach-o/arch.h>
+ #endif
+
++#if defined (__linux__)
++# define USE_PROCINFO
++# define UNAME_HARDWARE_PLATFORM
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+@@ -138,6 +143,117 @@
+ exit (status);
+ }
+
++#if defined(USE_PROCINFO)
++
++# if defined(__s390__) || defined(__s390x__)
++# define CPUINFO_FILE "/proc/sysinfo"
++# define CPUINFO_FORMAT "%64[^\t :]%*[ :]%256[^\n]%c"
++# else
++# define CPUINFO_FILE "/proc/cpuinfo"
++# define CPUINFO_FORMAT "%64[^\t:]\t:%256[^\n]%c"
++# endif
++
++# define PROCINFO_PROCESSOR 0
++# define PROCINFO_HARDWARE_PLATFORM 1
++
++static void __eat_cpuinfo_space(char *buf)
++{
++ /* first eat trailing space */
++ char *tmp = buf + strlen(buf) - 1;
++ while (tmp > buf && isspace(*tmp))
++ *tmp-- = '\0';
++ /* then eat leading space */
++ tmp = buf;
++ while (*tmp && isspace(*tmp))
++ tmp++;
++ if (tmp != buf)
++ memmove(buf, tmp, strlen(tmp)+1);
++ /* finally collapse whitespace */
++ tmp = buf;
++ while (tmp[0] && tmp[1]) {
++ if (isspace(tmp[0]) && isspace(tmp[1])) {
++ memmove(tmp, tmp+1, strlen(tmp));
++ continue;
++ }
++ ++tmp;
++ }
++}
++
++static int __linux_procinfo (int x, char *fstr, size_t s)
++{
++ FILE *fp;
++
++ char *procinfo_keys[] = {
++ /* --processor --hardware-platform */
++ #if defined(__alpha__)
++ "cpu model", "system type"
++ #elif defined(__arm__)
++ "Processor", "Hardware"
++ #elif defined(__avr32__)
++ "processor", "cpu family"
++ #elif defined(__bfin__)
++ "CPU", "BOARD Name"
++ #elif defined(__cris__)
++ "cpu", "cpu model"
++ #elif defined(__frv__)
++ "CPU-Core", "System"
++ #elif defined(__i386__) || defined(__x86_64__)
++ "model name", "vendor_id"
++ #elif defined(__ia64__)
++ "family", "vendor"
++ #elif defined(__hppa__)
++ "cpu", "model"
++ #elif defined(__m68k__)
++ "CPU", "MMU"
++ #elif defined(__mips__)
++ "cpu model", "system type"
++ #elif defined(__powerpc__) || defined(__powerpc64__)
++ "cpu", "machine"
++ #elif defined(__s390__) || defined(__s390x__)
++ "Type", "Manufacturer"
++ #elif defined(__sh__)
++ "cpu type", "machine"
++ #elif defined(sparc) || defined(__sparc__)
++ "type", "cpu"
++ #elif defined(__vax__)
++ "cpu type", "cpu"
++ #else
++ "unknown", "unknown"
++ #endif
++ };
++
++ if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
++ char key[65], value[257], eol, *ret = NULL;
++
++ while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
++ __eat_cpuinfo_space(key);
++ if (!strcmp(key, procinfo_keys[x])) {
++ __eat_cpuinfo_space(value);
++ ret = value;
++ break;
++ }
++ if (eol != '\n') {
++ /* we need two fscanf's here in case the previous
++ * length limit caused us to read right up to the
++ * newline ... doing "%*[^\n]\n" wont eat the newline
++ */
++ fscanf(fp, "%*[^\n]");
++ fscanf(fp, "\n");
++ }
++ }
++ fclose(fp);
++
++ if (ret) {
++ strncpy(fstr, ret, s);
++ return 0;
++ }
++ }
++
++ return -1;
++}
++
++#endif
++
+ /* Print ELEMENT, preceded by a space if something has already been
+ printed. */
+
+@@ -250,10 +344,14 @@ main (int argc, char **argv)
+ if (toprint & PRINT_PROCESSOR)
+ {
+ char const *element = unknown;
+-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
++#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
+ {
+ static char processor[257];
++#if defined(USE_PROCINFO)
++ if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
++#else
+ if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
++#endif
+ element = processor;
+ }
+ #endif
+@@ -306,9 +404,13 @@ main (int argc, char **argv)
+ if (element == unknown)
+ {
+ static char hardware_platform[257];
++#if defined(USE_PROCINFO)
++ if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
++#else
+ size_t s = sizeof hardware_platform;
+ static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
+ if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
++#endif
+ element = hardware_platform;
+ }
+ #endif
diff --git a/abs/core/coreutils/futimes.patch b/abs/core/coreutils/futimes.patch
new file mode 100644
index 0000000..bb08384
--- /dev/null
+++ b/abs/core/coreutils/futimes.patch
@@ -0,0 +1,47 @@
+--- coreutils-6.9/lib/utimens.h.futimens 2007-02-23 18:25:21.000000000 +0000
++++ coreutils-6.9/lib/utimens.h 2007-06-13 11:40:37.000000000 +0100
+@@ -1,3 +1,3 @@
+ #include <time.h>
+-int futimens (int, char const *, struct timespec const [2]);
++int gl_futimens (int, char const *, struct timespec const [2]);
+ int utimens (char const *, struct timespec const [2]);
+--- coreutils-6.9/lib/utimens.c.futimens 2007-01-18 08:33:34.000000000 +0000
++++ coreutils-6.9/lib/utimens.c 2007-06-13 11:40:37.000000000 +0100
+@@ -75,7 +75,7 @@ struct utimbuf
+ Return 0 on success, -1 (setting errno) on failure. */
+
+ int
+-futimens (int fd ATTRIBUTE_UNUSED,
++gl_futimens (int fd ATTRIBUTE_UNUSED,
+ char const *file, struct timespec const timespec[2])
+ {
+ /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+@@ -185,5 +185,5 @@ futimens (int fd ATTRIBUTE_UNUSED,
+ int
+ utimens (char const *file, struct timespec const timespec[2])
+ {
+- return futimens (-1, file, timespec);
++ return gl_futimens (-1, file, timespec);
+ }
+--- coreutils-6.9/src/copy.c.futimens 2007-06-13 11:56:44.000000000 +0100
++++ coreutils-6.9/src/copy.c 2007-06-13 11:57:00.000000000 +0100
+@@ -547,7 +547,7 @@ copy_reg (char const *src_name, char con
+ timespec[0] = get_stat_atime (src_sb);
+ timespec[1] = get_stat_mtime (src_sb);
+
+- if (futimens (dest_desc, dst_name, timespec) != 0)
++ if (gl_futimens (dest_desc, dst_name, timespec) != 0)
+ {
+ error (0, errno, _("preserving times for %s"), quote (dst_name));
+ if (x->require_preserve)
+--- coreutils-6.9/src/touch.c.futimens 2007-06-13 11:58:00.000000000 +0100
++++ coreutils-6.9/src/touch.c 2007-06-13 11:58:06.000000000 +0100
+@@ -182,7 +182,7 @@ touch (const char *file)
+ t = timespec;
+ }
+
+- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
++ ok = (gl_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
+
+ if (fd == STDIN_FILENO)
+ {
diff --git a/abs/core/coreutils/su b/abs/core/coreutils/su
new file mode 100644
index 0000000..cf15f40
--- /dev/null
+++ b/abs/core/coreutils/su
@@ -0,0 +1,9 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+# Uncomment the following line to implicitly trust users in the "wheel" group.
+#auth sufficient pam_wheel.so trust use_uid
+# Uncomment the following line to require a user to be in the "wheel" group.
+#auth required pam_wheel.so use_uid
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
diff --git a/abs/core/cpio/PKGBUILD b/abs/core/cpio/PKGBUILD
new file mode 100644
index 0000000..9d1bbff
--- /dev/null
+++ b/abs/core/cpio/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=cpio
+pkgver=2.9
+pkgrel=12
+pkgdesc="A tool to copy files into or out of a cpio or tar archive"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.gnu.org/software/cpio"
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/cpio/cpio-${pkgver}.tar.gz \
+ cpio-2.9-gcc43.patch)
+md5sums=('2bb997a33555d4dc79d45d0cdf02cedd' '214864365e72328f5a4fd822bba55d74')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i $startdir/src/cpio-2.9-gcc43.patch
+ ./configure --prefix=/usr --mandir=/usr/man
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/usr/bin/mt ${startdir}/pkg/usr/man/man1/mt.1
+ mv ${startdir}/pkg/usr/bin ${startdir}/pkg/bin
+ rm -rf ${startdir}/pkg/usr/libexec
+}
diff --git a/abs/core/cpio/cpio-2.9-gcc43.patch b/abs/core/cpio/cpio-2.9-gcc43.patch
new file mode 100644
index 0000000..da9004a
--- /dev/null
+++ b/abs/core/cpio/cpio-2.9-gcc43.patch
@@ -0,0 +1,31 @@
+--- tar-1.19/lib/argp-fmtstream.h.gcc43 2007-09-28 15:11:36.000000000 +0200
++++ tar-1.19/lib/argp-fmtstream.h 2008-02-13 16:56:58.000000000 +0100
+@@ -198,7 +198,11 @@ extern int __argp_fmtstream_ensure (argp
+ #endif
+
+ #ifndef ARGP_FS_EI
+-#define ARGP_FS_EI extern inline
++# ifdef __GNUC_STDC_INLINE__
++# define ARGP_FS_EI extern inline __attribute__((__gnu_inline__))
++# else
++# define ARGP_FS_EI extern inline
++# endif
+ #endif
+
+ ARGP_FS_EI size_t
+diff -up tar-1.19/lib/argp.h.gcc43 tar-1.19/lib/argp.h
+--- tar-1.19/lib/argp.h.gcc43 2007-09-28 15:11:36.000000000 +0200
++++ tar-1.19/lib/argp.h 2008-02-13 16:55:36.000000000 +0100
+@@ -580,7 +580,11 @@ extern void *__argp_input (const struct
+ # endif
+
+ # ifndef ARGP_EI
+-# define ARGP_EI extern __inline__
++# if defined __GNUC_STDC_INLINE__
++# define ARGP_EI extern __inline__ __attribute__((__gnu_inline__))
++# else
++# define ARGP_EI extern __inline__
++# endif
+ # endif
+
+ ARGP_EI void
diff --git a/abs/core/cracklib/PKGBUILD b/abs/core/cracklib/PKGBUILD
new file mode 100644
index 0000000..597e160
--- /dev/null
+++ b/abs/core/cracklib/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Federico Quagliata (quaqo) <quaqo@despammed.com>
+pkgname=cracklib
+pkgver=2.8.10
+pkgrel=14
+pkgdesc="Password Checking Library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://sourceforge.net/projects/cracklib"
+groups=('base')
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('555f7832b63ebc7fb70b0373500c2358')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ mkdir -p $startdir/pkg/usr/share/dict
+ make DESTDIR=$startdir/pkg install
+ cp dicts/cracklib-small $startdir/pkg/usr/share/dict
+ sh ./util/cracklib-format dicts/cracklib-small \
+ | sh ./util/cracklib-packer $startdir/pkg/usr/share/cracklib/pw_dict
+}
diff --git a/abs/core/cryptsetup/PKGBUILD b/abs/core/cryptsetup/PKGBUILD
new file mode 100644
index 0000000..ff5f83f
--- /dev/null
+++ b/abs/core/cryptsetup/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=cryptsetup
+pkgver=1.0.6
+pkgrel=10
+pkgdesc="Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://luks.endorphin.org/dm-crypt"
+groups=('base')
+depends=('device-mapper' 'libgcrypt' 'popt' 'e2fsprogs')
+options=('!libtool' '!emptydirs')
+source=(http://luks.endorphin.org/source/cryptsetup-$pkgver.tar.bz2
+ encrypt_hook
+ encrypt_install
+ luksOpen-status.patch)
+md5sums=('00d452eb7a76e39f5749545d48934a10'
+ '40fee2419cd444cfb283c311f9555d2d'
+ '24b76e9cb938bc3c8dcff396cbab28c7'
+ 'd4be8d2059d5427c057be4de4e948887')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ # suppress "Command successful" message on luksOpen
+ patch -p1 -i $startdir/src/luksOpen-status.patch
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # include a static cryptsetup binary for initrd setups
+ make clean
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-static
+ make || return 1
+ # include a static cryptsetup binary for initrd setups
+ install -D -m755 src/cryptsetup $startdir/pkg/sbin/cryptsetup.static || return 1
+ # install hook
+ install -D -m644 $startdir/src/encrypt_hook $startdir/pkg/lib/initcpio/hooks/encrypt
+ install -D -m644 $startdir/src/encrypt_install $startdir/pkg/lib/initcpio/install/encrypt
+}
diff --git a/abs/core/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch b/abs/core/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch
new file mode 100644
index 0000000..28f85e6
--- /dev/null
+++ b/abs/core/cryptsetup/cryptsetup-1.0.5-run_udevsettle.patch
@@ -0,0 +1,29 @@
+Index: cryptsetup-1.0.5/lib/libdevmapper.c
+===================================================================
+--- cryptsetup-1.0.5.orig/lib/libdevmapper.c
++++ cryptsetup-1.0.5/lib/libdevmapper.c
+@@ -18,6 +18,13 @@
+
+ #define CRYPT_TARGET "crypt"
+
++#define UDEVSETTLE "/sbin/udevsettle"
++
++static void run_udevsettle(void)
++{
++ system(UDEVSETTLE);
++}
++
+ static void set_dm_error(int level, const char *file, int line,
+ const char *f, ...)
+ {
+@@ -184,6 +191,9 @@ static int dm_create_device(int reload,
+ if (dmi.read_only)
+ options->flags |= CRYPT_FLAG_READONLY;
+
++ /* run udevsettle to avoid problems with busy dm devices */
++ run_udevsettle();
++
+ r = 0;
+
+ out:
+
diff --git a/abs/core/cryptsetup/encrypt_hook b/abs/core/cryptsetup/encrypt_hook
new file mode 100644
index 0000000..248f1f2
--- /dev/null
+++ b/abs/core/cryptsetup/encrypt_hook
@@ -0,0 +1,122 @@
+# vim: set ft=sh:
+# TODO this one needs some work to work with lots of different
+# encryption schemes
+run_hook ()
+{
+ /sbin/modprobe -a -q dm-crypt >/dev/null 2>&1
+ if [ -e "/sys/class/misc/device-mapper" ]; then
+ if [ ! -c "/dev/mapper/control" ]; then
+ read dev_t < /sys/class/misc/device-mapper/dev
+ /bin/mknod "/dev/mapper/control" c $(/bin/replace "${dev_t}" ':')
+ fi
+ [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
+
+ # Get keyfile if specified
+ ckeyfile="/crypto_keyfile.bin"
+ if [ "x${cryptkey}" != "x" ]; then
+ set -- $(/bin/replace "${cryptkey}" ':'); ckdev=$1; ckarg1=$2; ckarg2=$3
+ try=10
+ echo "Waiting for ${ckdev} ..."
+ while [ ! -b ${ckdev} -a ${try} -gt 0 ]; do
+ sleep 1
+ try=$((${try}-1))
+ done
+ if [ -b ${ckdev} ]; then
+ case ${ckarg1} in
+ *[!0-9]*)
+ # Use a file on the device
+ # ckarg1 is not numeric: ckarg1=filesystem, ckarg2=path
+ mkdir /ckey
+ mount -r -t ${ckarg1} ${ckdev} /ckey
+ dd if=/ckey/${ckarg2} of=${ckeyfile} >/dev/null 2>&1
+ umount /ckey
+ ;;
+ *)
+ # Read raw data from the block device
+ # ckarg1 is numeric: ckarg1=offset, ckarg2=length
+ dd if=${ckdev} of=${ckeyfile} bs=1 skip=${ckarg1} count=${ckarg2} >/dev/null 2>&1
+ ;;
+ esac
+ fi
+ [ ! -f ${ckeyfile} ] && echo "Keyfile could not be opened. Reverting to passphrase."
+ fi
+
+ if [ -n "${cryptdevice}" ]; then
+ set -- $(/bin/replace "${cryptdevice}" ':'); cryptdev="$1"; cryptname="$2";
+ else
+ cryptdev="${root}"
+ cryptname="root"
+ fi
+
+ if /bin/cryptsetup isLuks ${cryptdev} >/dev/null 2>&1; then
+ dopassphrase=1
+ # If keyfile exists, try to use that
+ if [ -f ${ckeyfile} ]; then
+ if eval /bin/cryptsetup --key-file ${ckeyfile} luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; then
+ dopassphrase=0
+ else
+ echo "Invalid keyfile. Reverting to passphrase."
+ fi
+ fi
+ # Ask for a passphrase
+ if [ ${dopassphrase} -gt 0 ]; then
+ echo ""
+ echo "A password is required to access the ${cryptname} volume:"
+
+ #loop until we get a real password
+ while ! eval /bin/cryptsetup luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; do
+ sleep 2;
+ done
+ fi
+ if [ -e "/dev/mapper/${cryptname}" ]; then
+ if [ "${cryptname}" = "root" ]; then
+ export root="/dev/mapper/root"
+ fi
+ else
+ err "Password succeeded, but ${cryptname} creation failed, aborting..."
+ exit 1
+ fi
+ elif [ "x${crypto}" != "x" ]; then
+ do_oldcrypto ()
+ {
+ if [ $# -ne 5 ]; then
+ err "Verify parameter format: crypto=hash:cipher:keysize:offset:skip"
+ err "Non-LUKS decryption not attempted..."
+ return 1
+ fi
+ exe="/bin/cryptsetup create ${cryptname} ${cryptdev}"
+ [ "x$(eval echo ${1})" != "x" ] && exe="${exe} --hash \"$(eval echo ${1})\""
+ [ "x$(eval echo ${2})" != "x" ] && exe="${exe} --cipher \"$(eval echo ${2})\""
+ [ "x$(eval echo ${3})" != "x" ] && exe="${exe} --key-size \"$(eval echo ${3})\""
+ [ "x$(eval echo ${4})" != "x" ] && exe="${exe} --offset \"$(eval echo ${4})\""
+ [ "x$(eval echo ${5})" != "x" ] && exe="${exe} --skip \"$(eval echo ${5})\""
+ if [ -f ${ckeyfile} ]; then
+ exe="${exe} --key-file ${ckeyfile}"
+ else
+ exe="${exe} --verify-passphrase"
+ echo ""
+ echo "A password is required to access the ${cryptname} volume:"
+ fi
+ eval "${exe} ${CSQUIET}"
+ }
+
+ msg "Non-LUKS encrypted device found..."
+ do_oldcrypto $(/bin/replace -q "${crypto}" ':')
+
+ if [ $? -ne 0 ]; then
+ err "Non-LUKS device decryption failed. verify format: "
+ err " crypto=hash:cipher:keysize:offset:skip"
+ exit 1
+ fi
+ if [ -e "/dev/mapper/${cryptname}" ]; then
+ if [ "${cryptname}" = "root" ]; then
+ export root="/dev/mapper/root"
+ fi
+ else
+ err "Password succeeded, but ${cryptname} creation failed, aborting..."
+ exit 1
+ fi
+ fi
+ nuke ${ckeyfile}
+ fi
+}
diff --git a/abs/core/cryptsetup/encrypt_install b/abs/core/cryptsetup/encrypt_install
new file mode 100644
index 0000000..28cfa3f
--- /dev/null
+++ b/abs/core/cryptsetup/encrypt_install
@@ -0,0 +1,22 @@
+# vim: set ft=sh:
+
+install ()
+{
+ if [ -z "${CRYPTO_MODULES}" ]; then
+ MODULES=" dm-crypt $(all_modules "/crypto/") "
+ else
+ MODULES=" dm-crypt ${CRYPTO_MODULES} "
+ fi
+ BINARIES=""
+ add_dir "/dev/mapper"
+ add_file "/sbin/cryptsetup.static" "/bin/cryptsetup"
+ FILES=""
+ SCRIPT="encrypt"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook allows for an encrypted root device.
+HELPEOF
+}
diff --git a/abs/core/cryptsetup/luksOpen-status.patch b/abs/core/cryptsetup/luksOpen-status.patch
new file mode 100644
index 0000000..d2e4004
--- /dev/null
+++ b/abs/core/cryptsetup/luksOpen-status.patch
@@ -0,0 +1,13 @@
+diff -Nur cryptsetup-luks-1.0.4.orig/src/cryptsetup.c cryptsetup-luks-1.0.4/src/cryptsetup.c
+--- cryptsetup-luks-1.0.4.orig/src/cryptsetup.c 2006-10-04 15:47:00.000000000 +0200
++++ cryptsetup-luks-1.0.4/src/cryptsetup.c 2006-12-16 15:54:12.000000000 +0100
+@@ -249,7 +249,8 @@
+ if (opt_readonly)
+ options.flags |= CRYPT_FLAG_READONLY;
+ r = crypt_luksOpen(&options);
+- show_status(-r);
++ if(r)
++ show_status(-r);
+ return r;
+ }
+
diff --git a/abs/core/curl/ChangeLog b/abs/core/curl/ChangeLog
new file mode 100644
index 0000000..a508322
--- /dev/null
+++ b/abs/core/curl/ChangeLog
@@ -0,0 +1,19 @@
+2008-06-04 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.2-1
+ * Upstream update
+ * Switched to the CA Root Certificates provided by the ca-certificates package (close FS#10569)
+ * Removed bundled certificates
+ * Removed perl-libwww makedepends
+
+2008-04-30 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.1-2
+ * Added CA Root Certificates (close FS#10129)
+ * Added perl-libwww makedepends
+
+2008-03-31 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.18.1-1
+ * Upstream update
+ * Added ChangeLog
diff --git a/abs/core/curl/PKGBUILD b/abs/core/curl/PKGBUILD
new file mode 100644
index 0000000..cfac1fe
--- /dev/null
+++ b/abs/core/curl/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 2514 2008-06-05 23:10:19Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl>
+
+pkgname=curl
+pkgver=7.18.2
+pkgrel=1
+pkgdesc="An URL retrival utility and library"
+arch=('i686' 'x86_64')
+url="http://curl.haxx.se"
+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')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --without-libidn --disable-ldap \
+ --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt || 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
+}
diff --git a/abs/core/damageproto/PKGBUILD b/abs/core/damageproto/PKGBUILD
new file mode 100644
index 0000000..af6087a
--- /dev/null
+++ b/abs/core/damageproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=damageproto
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X11 Damage extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xproto' 'fixesproto')
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('33ee591e0b1ca5ad7902934541db7d24')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/dash/PKGBUILD b/abs/core/dash/PKGBUILD
new file mode 100644
index 0000000..eccfe5c
--- /dev/null
+++ b/abs/core/dash/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=dash
+pkgver=0.5.4
+pkgrel=13
+pkgdesc="A POSIX compliant shell that aims to be as small as possible"
+arch=('i686' 'x86_64')
+url="http://gondor.apana.org.au/~herbert/dash/"
+license=('BSD')
+groups=('base')
+makedepends=('klibc>=1.5')
+#provides=('sh')
+source=("http://gondor.apana.org.au/~herbert/dash/files/dash-$pkgver.tar.gz")
+md5sums=('bc457e490a589d2f87f2333616b67931')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --mandir=/usr/share/man --exec-prefix="" CC=klcc LD=klcc LDFLAGS="-static"
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # license
+ install -m644 -D COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+
+ #static dash is our default /bin/sh
+ #cd ${startdir}/pkg/bin
+ #ln -s dash sh
+}
diff --git a/abs/core/db/PKGBUILD b/abs/core/db/PKGBUILD
new file mode 100644
index 0000000..e41aeac
--- /dev/null
+++ b/abs/core/db/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 3741 2008-06-30 20:07:01Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=db
+pkgver=4.7.25
+pkgrel=10
+pkgdesc="The Berkeley DB embedded database system"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.oracle.com/technology/software/products/berkeley-db/index.html"
+groups=('base')
+depends=('gcc-libs' 'coreutils')
+options=('!libtool')
+source=(http://download-uk.oracle.com/berkeley-db/db-$pkgver.tar.gz)
+install=(db.install)
+md5sums=('ec2b87e833779681a0c3a814aa71359e')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver/build_unix
+ ../dist/configure --prefix=/usr --enable-compat185 \
+ --enable-shared --enable-static --enable-cxx
+ make LIBSO_LIBS=-lpthread || return 1
+ make DESTDIR=${pkgdir} install
+ rm -rf ${pkgdir}/usr/docs
+ mkdir -p ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/${pkgname}-${pkgver}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/db/db.install b/abs/core/db/db.install
new file mode 100644
index 0000000..7c97ea0
--- /dev/null
+++ b/abs/core/db/db.install
@@ -0,0 +1,29 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo "ATTENTION DB PACKAGE:"
+ echo "Please consider to run db_upgrade on Berkeley DB databases with a major db version number update."
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $* \ No newline at end of file
diff --git a/abs/core/db4.5/PKGBUILD b/abs/core/db4.5/PKGBUILD
new file mode 100644
index 0000000..db87a0d
--- /dev/null
+++ b/abs/core/db4.5/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=db4.5
+pkgver=4.5.20
+pkgrel=2
+pkgdesc="The Berkeley DB embedded database system 4.5"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://www.oracle.com/technology/software/products/berkeley-db/index.html"
+depends=('gcc-libs')
+options=('!libtool' '!makeflags')
+source=(http://download-uk.oracle.com/berkeley-db/db-${pkgver}.tar.gz
+ http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.1
+ http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.2)
+md5sums=('b0f1c777708cb8e9d37fb47e7ed3312d'
+ 'a571e239b9041d7990df287cbc59ad6f'
+ 'b7a7086a067ba116f5a8464362c9a9a7')
+
+build() {
+ cd ${startdir}/src/db-${pkgver}/
+ patch -Np0 -i ${startdir}/src/patch.4.5.20.1 || return 1
+ patch -Np0 -i ${startdir}/src/patch.4.5.20.2 || return 1
+
+ cd build_unix
+ ../dist/configure --prefix=/usr --enable-compat185 \
+ --enable-shared --disable-static --enable-cxx
+ make LIBSO_LIBS=-lpthread || return 1
+ make prefix=${startdir}/pkg/usr \
+ includedir=${startdir}/pkg/usr/include/db4.5 install
+
+ rm -rf ${startdir}/pkg/usr/docs
+ rm -f ${startdir}/pkg/usr/lib/libdb{,_cxx}.so
+ rm -f ${startdir}/pkg/usr/lib/libdb{,_cxx}-4.so
+
+ cd ${startdir}/pkg/usr/bin
+ for i in *; do
+ mv $i db4.5_${i/db_/}
+ done
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/db-${pkgver}/LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/dbus-glib/PKGBUILD b/abs/core/dbus-glib/PKGBUILD
new file mode 100644
index 0000000..4eb8838
--- /dev/null
+++ b/abs/core/dbus-glib/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3474 2008-06-22 20:19:25Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=dbus-glib
+pkgver=0.76
+pkgrel=1
+pkgdesc="GLib bindings for DBUS"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.freedesktop.org/wiki/Software/DBusBindings"
+depends=('dbus>=1.2.1' 'glib2>=2.16.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://dbus.freedesktop.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('d3b716a7e798faa1c6a867675f00306a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-static=no || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/dbus/PKGBUILD b/abs/core/dbus/PKGBUILD
new file mode 100644
index 0000000..dc747bc
--- /dev/null
+++ b/abs/core/dbus/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 9899 2008-08-20 20:01:17Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Link Dupont <link@subpop.net>
+#
+pkgname=dbus
+pkgver=1.2.3
+pkgrel=1
+pkgdesc="Freedesktop.org message bus system"
+url="http://www.freedesktop.org/Software/dbus"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+depends=('expat>=2.0' 'libx11' 'libsm')
+options=(!libtool)
+install=dbus.install
+source=(http://dbus.freedesktop.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ dbus)
+md5sums=('f71641385768e99361bd298568207cee'
+ 'f3fd196cc278bd7b45a4ca01fb8f7894')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/dbus-1.0 --with-dbus-user=81 \
+ --with-system-pid-file=/var/run/dbus.pid \
+ --disable-verbose-mode --disable-static \
+ --disable-tests --disable-asserts || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ chown 81:81 ${startdir}/pkg/var/run/dbus || return 1
+
+ install -m755 -d ${startdir}/pkg/etc/rc.d || return 1
+ install -m 755 ${startdir}/dbus ${startdir}/pkg/etc/rc.d/ || return 1
+
+ #Fix configuration file
+ sed -i -e 's|<user>81</user>|<user>dbus</user>|' ${startdir}/pkg/etc/dbus-1/system.conf || return 1
+
+ #install .keep files so pacman doesn't delete empty dirs
+ touch ${startdir}/pkg/usr/share/dbus-1/services/.keep || return 1
+ touch ${startdir}/pkg/usr/share/dbus-1/system-services/.keep || return 1
+ touch ${startdir}/pkg/etc/dbus-1/session.d/.keep || return 1
+ touch ${startdir}/pkg/etc/dbus-1/system.d/.keep || return 1
+
+ rmdir ${startdir}/pkg/usr/lib/dbus-1.0/dbus-1 || return 1
+
+ install -d -m755 ${startdir}/pkg/usr/share/licenses/dbus
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/dbus/ || return 1
+}
diff --git a/abs/core/dbus/dbus b/abs/core/dbus/dbus
new file mode 100644
index 0000000..cd26db8
--- /dev/null
+++ b/abs/core/dbus/dbus
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting D-BUS system messagebus"
+ if [ ! -x /var/run/dbus ] ; then
+ install -m755 -g 81 -o 81 -d /var/run/dbus
+ fi
+ if [ -x /usr/bin/dbus-uuidgen ] ; then
+ /usr/bin/dbus-uuidgen --ensure
+ fi
+
+ /usr/bin/dbus-daemon --system
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon dbus
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping D-BUS system messagebus"
+ [ -f /var/run/dbus.pid ] && kill `cat /var/run/dbus.pid`
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /var/run/dbus.pid
+ rm_daemon dbus
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ reload)
+ stat_busy "Reloading D-BUS configuration"
+ [ -f /var/run/dbus.pid ] && /usr/bin/dbus-send \
+ --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|reload}"
+ ;;
+esac
+exit 0
diff --git a/abs/core/dbus/dbus.install b/abs/core/dbus/dbus.install
new file mode 100644
index 0000000..85dd9a7
--- /dev/null
+++ b/abs/core/dbus/dbus.install
@@ -0,0 +1,21 @@
+post_install() {
+ getent group dbus >/dev/null || usr/sbin/groupadd -g 81 dbus
+ getent passwd dbus >/dev/null || usr/sbin/useradd -c 'System message bus' -u 81 -g dbus -d '/' -s /bin/false dbus
+ usr/bin/passwd -l dbus &>/dev/null
+ dbus-uuidgen --ensure
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+
+ #Make sure new rc script can shutdown running dbus
+ [ -f var/run/dbus/pid ] && mv var/run/dbus/pid var/run/dbus.pid
+}
+
+# arg 1: the old package version
+pre_remove() {
+ usr/sbin/userdel dbus &>/dev/null
+ usr/sbin/groupdel dbus &>/dev/null
+}
diff --git a/abs/core/dcron/PKGBUILD b/abs/core/dcron/PKGBUILD
new file mode 100644
index 0000000..e5a46d8
--- /dev/null
+++ b/abs/core/dcron/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=dcron
+pkgver=3.2
+pkgrel=12
+pkgdesc="Dillon's Cron Daemon"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+url="http://apollo.backplane.com/FreeSrc/"
+backup=(var/spool/cron/root)
+depends=('glibc')
+provides=('cron')
+source=(http://apollo.backplane.com/FreeSrc/dcron32.tgz
+ dcron-3.1.patch
+ root.crontab
+ crond
+ crond.logrotate
+ run-cron)
+md5sums=('c2c816deb389b4bfb00761f26afe3efd' '2f0c3f7497a12c8826c9be3f87843fcd'\
+ '7fcc06b13708ebd667711b1fbf62ee6e' 'd7edac165ef19ebb9d0089bdc218b53a'\
+ 'aeabcd5e4924d1a7593c8782d1068c86' '5ff0cdcb9ec99778938ac6ef26800327')
+
+build() {
+ cd $startdir/src/dcron
+ patch -Np1 -i ../dcron-3.1.patch || return 1
+ make || return 1
+ install -D -m4755 crontab $startdir/pkg/usr/bin/crontab
+ install -D -m755 crond $startdir/pkg/usr/sbin/crond
+ install -D -m644 crontab.1 $startdir/pkg/usr/man/man1/crontab.1
+ install -D -m644 crond.8 $startdir/pkg/usr/man/man8/crond.8
+ mkdir -p $startdir/pkg/var/spool/cron $startdir/pkg/etc/cron.d
+ mkdir -p $startdir/pkg/etc/{rc.d,cron.hourly,cron.daily,cron.weekly,cron.monthly}
+ install -D -m0600 ../root.crontab $startdir/pkg/var/spool/cron/root
+ install -D -m755 ../crond $startdir/pkg/etc/rc.d/crond
+ install -D -m644 ../crond.logrotate $startdir/pkg/etc/logrotate.d/crond
+ install -D -m755 ../run-cron $startdir/pkg/usr/sbin/run-cron
+}
diff --git a/abs/core/dcron/crond b/abs/core/dcron/crond
new file mode 100755
index 0000000..ef80db3
--- /dev/null
+++ b/abs/core/dcron/crond
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/crond`
+case "$1" in
+ start)
+ stat_busy "Starting Cron Daemon"
+ [ -z "$PID" ] && /usr/sbin/crond >>/var/log/crond 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ PID=`pidof -o %PPID /usr/sbin/crond`
+ echo $PID >/var/run/crond.pid
+ add_daemon crond
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Cron Daemon"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon crond
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/dcron/crond.logrotate b/abs/core/dcron/crond.logrotate
new file mode 100644
index 0000000..38299d6
--- /dev/null
+++ b/abs/core/dcron/crond.logrotate
@@ -0,0 +1,5 @@
+/var/log/crond {
+ sharedscripts
+ copytruncate
+ missingok
+}
diff --git a/abs/core/dcron/dcron-3.1.patch b/abs/core/dcron/dcron-3.1.patch
new file mode 100644
index 0000000..975d51c
--- /dev/null
+++ b/abs/core/dcron/dcron-3.1.patch
@@ -0,0 +1,33 @@
+diff -Naur dcron-orig/defs.h dcron/defs.h
+--- dcron-orig/defs.h 2006-04-29 10:20:58.000000000 -0700
++++ dcron/defs.h 2006-05-04 18:40:05.000000000 -0700
+@@ -28,7 +28,7 @@
+ #define arysize(ary) (sizeof(ary)/sizeof((ary)[0]))
+
+ #ifndef CRONTABS
+-#define CRONTABS "/var/spool/cron/crontabs"
++#define CRONTABS "/var/spool/cron"
+ #endif
+ #ifndef SCRONTABS
+ #define SCRONTABS "/etc/cron.d"
+@@ -44,7 +44,7 @@
+ #if defined(__DragonFly__)
+ #define SENDMAIL "/usr/sbin/sendmail"
+ #else
+-#define SENDMAIL "/usr/lib/sendmail"
++#define SENDMAIL "/usr/sbin/sendmail"
+ #endif
+ #endif
+
+diff -Naur dcron-orig/subs.c dcron/subs.c
+--- dcron-orig/subs.c 2006-04-27 10:29:56.000000000 -0700
++++ dcron/subs.c 2006-05-04 18:40:19.000000000 -0700
+@@ -79,7 +79,7 @@
+
+ buf[0] = 0;
+ if (useDate)
+- strftime(buf, 128, "%d-%b-%y %H:%M ", tp);
++ strftime(buf, 128, "%d-%b-%Y %H:%M ", tp);
+ vsnprintf(buf + strlen(buf), nmax, ctl, va);
+ return(strlen(buf));
+ }
diff --git a/abs/core/dcron/root.crontab b/abs/core/dcron/root.crontab
new file mode 100644
index 0000000..726558f
--- /dev/null
+++ b/abs/core/dcron/root.crontab
@@ -0,0 +1,12 @@
+#
+# DO NOT EDIT THIS FILE MANUALLY!! USE crontab -e INSTEAD.
+#
+
+# <minute> <hour> <day> <month> <dow> <command>
+
+
+01 * * * * /usr/sbin/run-cron /etc/cron.hourly
+02 00 * * * /usr/sbin/run-cron /etc/cron.daily
+22 00 * * 0 /usr/sbin/run-cron /etc/cron.weekly
+42 00 1 * * /usr/sbin/run-cron /etc/cron.monthly
+
diff --git a/abs/core/dcron/run-cron b/abs/core/dcron/run-cron
new file mode 100755
index 0000000..51007a1
--- /dev/null
+++ b/abs/core/dcron/run-cron
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+
+if [ -z $1 ]; then
+ echo "Usage: $0 crondir"
+ exit 1
+fi
+
+for cron in $1/* ; do
+ if [ -x $cron ]; then
+ $cron
+ fi
+done
+unset cron
diff --git a/abs/core/device-mapper/PKGBUILD b/abs/core/device-mapper/PKGBUILD
new file mode 100644
index 0000000..7c2cd46
--- /dev/null
+++ b/abs/core/device-mapper/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=device-mapper
+pkgver=1.02.27
+pkgrel=10
+pkgdesc="Device mapper userspace library and tools."
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://sourceware.org/dm/"
+groups=('base')
+depends=('glibc')
+source=(ftp://sources.redhat.com/pub/dm/device-mapper.$pkgver.tgz
+ device-mapper.rules)
+md5sums=('6074f2c2035c2a526422e691c7457277'
+ '065f32a36947e6183722ed9aef13dc0c')
+
+build() {
+ cd $startdir/src/$pkgname.$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg sbindir=$startdir/pkg/sbin \
+ libdir=$startdir/pkg/lib install
+
+ # install the static library as well
+ install -D -m644 lib/ioctl/libdevmapper.a $startdir/pkg/usr/lib/libdevmapper.a
+ # install udev rule
+ install -D -m644 $startdir/src/device-mapper.rules $startdir/pkg/etc/udev/rules.d/device-mapper.rules
+ # fix device-mapper link bug
+ ln -sf /lib/libdevmapper.so $startdir/pkg/usr/lib/libdevmapper.so
+}
diff --git a/abs/core/device-mapper/device-mapper.rules b/abs/core/device-mapper/device-mapper.rules
new file mode 100644
index 0000000..66204d4
--- /dev/null
+++ b/abs/core/device-mapper/device-mapper.rules
@@ -0,0 +1 @@
+ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", PROGRAM="/sbin/dmsetup info -c --noopencount --noheadings -o name -j %M -m %m", NAME="mapper/%c", MODE="0600", SYMLINK+="disk/by-name/%c"
diff --git a/abs/core/dhcpcd/PKGBUILD b/abs/core/dhcpcd/PKGBUILD
new file mode 100644
index 0000000..dfc1914
--- /dev/null
+++ b/abs/core/dhcpcd/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=dhcpcd
+pkgver=3.2.1
+pkgrel=10
+pkgdesc="A DHCP client daemon"
+arch=(i686 x86_64)
+license=('BSD')
+url="http://roy.marples.name/dhcpcd"
+groups=('base')
+depends=('glibc')
+backup=('etc/conf.d/dhcpcd')
+source=(http://roy.marples.name/dhcpcd/$pkgname-$pkgver.tar.bz2
+ dhcpcd.conf.d)
+md5sums=('5a437882b6b9eb29bde323dc411be4a4'
+ '12d866a78d9f5fa5f31ca18b3940d847')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #disable DUID usage
+ echo "#undef ENABLE_DUID" >> config.h
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mkdir -p $startdir/pkg/usr/sbin
+ ln -sf /sbin/dhcpcd $startdir/pkg/usr/sbin/dhcpcd
+ install -D -m644 ../dhcpcd.conf.d $startdir/pkg/etc/conf.d/dhcpcd
+}
diff --git a/abs/core/dhcpcd/dhcpcd.conf.d b/abs/core/dhcpcd/dhcpcd.conf.d
new file mode 100644
index 0000000..9f5a80b
--- /dev/null
+++ b/abs/core/dhcpcd/dhcpcd.conf.d
@@ -0,0 +1,6 @@
+#
+# Arguments to be passed to the DHCP client daemon
+#
+
+DHCPCD_ARGS="-t 30 -h $HOSTNAME"
+
diff --git a/abs/core/dialog/PKGBUILD b/abs/core/dialog/PKGBUILD
new file mode 100644
index 0000000..0299f6d
--- /dev/null
+++ b/abs/core/dialog/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1369 2008-05-06 16:13:12Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=dialog
+pkgver=1.1_20080316
+_pkgver=1.1-20080316
+pkgrel=12
+pkgdesc="A tool to display dialog boxes from shell scripts"
+arch=('i686' 'x86_64')
+license=('GPL')
+groups=('base')
+depends=('ncurses>=5.6-6')
+url="http://packages.debian.org/dialog"
+source=(ftp://ftp.debian.org/debian/pool/main/d/${pkgname}/${pkgname}_$_pkgver.orig.tar.gz)
+md5sums=('3d262cbc41e4db23251e7be924c4a28b')
+
+build() {
+ cd $startdir/src/$pkgname-$_pkgver
+ ./configure --prefix=/usr --with-ncursesw --mandir=/usr/share/man
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/dialog/timeout.patch b/abs/core/dialog/timeout.patch
new file mode 100644
index 0000000..257f275
--- /dev/null
+++ b/abs/core/dialog/timeout.patch
@@ -0,0 +1,11 @@
+--- dialog-1.1-20070514/ui_getc.c 2007-05-15 00:24:00.000000000 +0200
++++ dialog-1.1-20070514_fixed/ui_getc.c 2007-05-29 20:20:27.000000000 +0200
+@@ -252,6 +252,8 @@
+ ch = wgetch(win);
+ /* if error from resizing, wait and try again */
+ if (ch == ERR) {
++ current = time((time_t *) 0);
++ if (interval > 0 && current >= expired) dlg_exiterr("timeout");
+ napms(50);
+ continue;
+ }
diff --git a/abs/core/diffutils/PKGBUILD b/abs/core/diffutils/PKGBUILD
new file mode 100644
index 0000000..8b075bc
--- /dev/null
+++ b/abs/core/diffutils/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=diffutils
+pkgver=2.8.1
+pkgrel=5
+pkgdesc="Utility programs used for creating patch files"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base-devel')
+url="http://www.gnu.org/software/diffutils"
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('71f9c5ae19b60608f6c7f162da86a428')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/dmapi/PKGBUILD b/abs/core/dmapi/PKGBUILD
new file mode 100644
index 0000000..0f5d015
--- /dev/null
+++ b/abs/core/dmapi/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=dmapi
+pkgver=2.2.8
+pkgrel=12
+pkgdesc="Data migration API"
+arch=(i686 x86_64)
+url="http://oss.sgi.com/projects/xfs/"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+makedepends=('xfsprogs')
+provides=('xfsdmapi')
+conflicts=('xfsdmapi')
+replaces=('xfsdmapi')
+options=('!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/dmapi_$pkgver-1.tar.gz)
+md5sums=('1265828fabc6e3ec4b70696db331fb8a')
+
+build() {
+ cd $startdir/src/dmapi-$pkgver
+ [ "$CARCH" = "x86_64" ] && export CFLAGS="$CLFAGS -fPIC"
+ autoconf
+ ./configure --prefix=$startdir/pkg/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr/ install install-lib install-dev
+ # the static lib
+ install -D -m644 libdm/.libs/libdm.a $startdir/pkg/usr/lib/libdm.a
+ # and the header file, please
+ install -D -m644 include/dmapi.h $startdir/pkg/usr/include/xfs/dmapi.h
+}
diff --git a/abs/core/dmidecode/PKGBUILD b/abs/core/dmidecode/PKGBUILD
new file mode 100644
index 0000000..c29957a
--- /dev/null
+++ b/abs/core/dmidecode/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=dmidecode
+pkgver=2.9
+pkgrel=2
+pkgdesc="Desktop Management Interface table related utilities"
+arch=('i686')
+url="http://www.nongnu.org/dmidecode"
+license=('GPL')
+depends=('glibc')
+source=(http://download.savannah.nongnu.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3dac4b1817012ffebd78671473d8f56c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ make prefix=/usr || return 1
+ make prefix=/usr DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/dmxproto/PKGBUILD b/abs/core/dmxproto/PKGBUILD
new file mode 100644
index 0000000..1ccffd6
--- /dev/null
+++ b/abs/core/dmxproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=dmxproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Distributed Multihead X extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d80acad88411e7944b9b085463d53302')
+sha1sums=('80c573166ec3b9f17893e2fff84ce0107045faac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/dnsutils/PKGBUILD b/abs/core/dnsutils/PKGBUILD
new file mode 100644
index 0000000..672613e
--- /dev/null
+++ b/abs/core/dnsutils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5888 2008-07-21 19:29:16Z kevin $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: mario <mario_vazq@hotmail.com>
+pkgname=dnsutils
+pkgver=9.5.0
+_pkgver=9.5.0-P1
+pkgrel=4
+pkgdesc="Various DNS utilities - dig host nslookup nsupdate"
+arch=(i686 x86_64)
+url="http://www.isc.org/index.pl?/sw/bind/"
+license=('custom:ISC')
+depends=('openssl>=0.9.8e')
+replaces=('bind-tools')
+source=(ftp://ftp.isc.org/isc/bind9/${_pkgver}/bind-${_pkgver}.tar.gz
+ bind.so_bsdcompat.diff tools-only.patch)
+md5sums=('a4f9dd6d205d24ec89fa4e44d8188197' '447d58721cfee0e1e377b46f7d50b327'
+ '329f7e15b8c45d3efefdf5b559bb878a')
+
+build() {
+ export MAKEFLAGS="-j1"
+
+ cd ${startdir}/src/bind-${_pkgver}
+ patch -Np0 -i ${startdir}/src/bind.so_bsdcompat.diff || return 1
+ patch -Np1 -i ${startdir}/src/tools-only.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-openssl=yes --disable-linux-caps --without-libxml2
+ make || return 1
+ cd bin
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -D -m644 ../COPYRIGHT $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core/dnsutils/bind.so_bsdcompat.diff b/abs/core/dnsutils/bind.so_bsdcompat.diff
new file mode 100644
index 0000000..5d78031
--- /dev/null
+++ b/abs/core/dnsutils/bind.so_bsdcompat.diff
@@ -0,0 +1,11 @@
+--- ./lib/isc/unix/socket.c.orig 2005-11-03 17:08:42.000000000 -0600
++++ ./lib/isc/unix/socket.c 2006-02-18 13:09:15.000000000 -0600
+@@ -245,6 +245,8 @@
+
+ #define SOCK_DEAD(s) ((s)->references == 0)
+
++#undef SO_BSDCOMPAT
++
+ static void
+ manager_log(isc_socketmgr_t *sockmgr,
+ isc_logcategory_t *category, isc_logmodule_t *module, int level,
diff --git a/abs/core/dnsutils/tools-only.patch b/abs/core/dnsutils/tools-only.patch
new file mode 100644
index 0000000..f777282
--- /dev/null
+++ b/abs/core/dnsutils/tools-only.patch
@@ -0,0 +1,22 @@
+--- bind-9.3.1/bin/Makefile.in.orig 2005-05-06 01:52:36.000000000 -0400
++++ bind-9.3.1/bin/Makefile.in 2005-05-06 01:53:24.000000000 -0400
+@@ -19,7 +19,7 @@
+ VPATH = @srcdir@
+ top_srcdir = @top_srcdir@
+
+-SUBDIRS = named rndc dig dnssec tests nsupdate check
++SUBDIRS = dig nsupdate
+ TARGETS =
+
+ @BIND9_MAKE_RULES@
+--- bind-9.3.1/lib/Makefile.in.orig 2005-05-06 02:05:12.000000000 -0400
++++ bind-9.3.1/lib/Makefile.in 2005-05-06 02:05:35.000000000 -0400
+@@ -23,7 +23,7 @@
+ # Attempt to disable parallel processing.
+ .NOTPARALLEL:
+ .NO_PARALLEL:
+-SUBDIRS = isc isccc dns isccfg bind9 lwres tests
++SUBDIRS = isc dns isccfg bind9 lwres
+ TARGETS =
+
+ @BIND9_MAKE_RULES@
diff --git a/abs/core/dosfstools/PKGBUILD b/abs/core/dosfstools/PKGBUILD
new file mode 100644
index 0000000..488cab5
--- /dev/null
+++ b/abs/core/dosfstools/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 9911 2008-08-21 00:29:06Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=dosfstools
+pkgver=2.11
+pkgrel=2
+pkgdesc="DOS filesystem utilities"
+arch=(i686 x86_64)
+depends=('glibc')
+source=(ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/$pkgname/$pkgname-$pkgver.src.tar.gz linux-2.6.patch)
+md5sums=('407d405ade410f7597d364ab5dc8c9f6' '6689fb7693ed213e6c3289b533b4f66d')
+url="ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/"
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -p1 -i $startdir/src/linux-2.6.patch
+ patch -Np0 -i $startdir/src/dosfstools_$pkgver-1.diff
+ make || return 1
+ make PREFIX=$startdir/pkg install
+}
diff --git a/abs/core/dosfstools/linux-2.6.patch b/abs/core/dosfstools/linux-2.6.patch
new file mode 100644
index 0000000..e21e94c
--- /dev/null
+++ b/abs/core/dosfstools/linux-2.6.patch
@@ -0,0 +1,64 @@
+diff -Nur dosfstools-2.10/dosfsck/boot.c dosfstools-2.10-fixed/dosfsck/boot.c
+--- dosfstools-2.10/dosfsck/boot.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/boot.c 2004-02-11 21:15:48.000000000 +0100
+@@ -14,6 +14,9 @@
+ #include "io.h"
+ #include "boot.h"
+
++#ifndef MSDOS_FAT12
++# define MSDOS_FAT12 4084 /* taken from 2.4 linux/msdos_fs.h */
++#endif
+
+ #define ROUND_TO_MULTIPLE(n,m) ((n) && (m) ? (n)+(m)-1-((n)-1)%(m) : 0)
+ /* don't divide by zero */
+diff -Nur dosfstools-2.10/dosfsck/common.h dosfstools-2.10-fixed/dosfsck/common.h
+--- dosfstools-2.10/dosfsck/common.h 1998-04-28 13:14:25.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/common.h 2004-02-11 21:15:01.000000000 +0100
+@@ -6,6 +6,9 @@
+ #ifndef _COMMON_H
+ #define _COMMON_H
+
++#include <asm/types.h>
++#include <asm/byteorder.h>
++
+ void die(char *msg,...) __attribute((noreturn));
+
+ /* Displays a prinf-style message and terminates the program. */
+diff -Nur dosfstools-2.10/dosfsck/file.c dosfstools-2.10-fixed/dosfsck/file.c
+--- dosfstools-2.10/dosfsck/file.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/file.c 2004-02-11 21:13:53.000000000 +0100
+@@ -15,9 +15,9 @@
+ #define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
+ #define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h>*/
+ #define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
++#include "common.h"
+ #include <linux/msdos_fs.h>
+
+-#include "common.h"
+ #include "file.h"
+
+
+diff -Nur dosfstools-2.10/dosfsck/io.c dosfstools-2.10-fixed/dosfsck/io.c
+--- dosfstools-2.10/dosfsck/io.c 2003-06-14 22:03:20.000000000 +0200
++++ dosfstools-2.10-fixed/dosfsck/io.c 2004-02-11 21:14:24.000000000 +0100
+@@ -21,8 +21,8 @@
+ #include <fcntl.h>
+ #include <linux/fd.h>
+
+-#include "dosfsck.h"
+ #include "common.h"
++#include "dosfsck.h"
+ #include "io.h"
+
+
+diff -Nur dosfstools-2.10/mkdosfs/mkdosfs.c dosfstools-2.10-fixed/mkdosfs/mkdosfs.c
+--- dosfstools-2.10/mkdosfs/mkdosfs.c 2003-06-14 22:07:08.000000000 +0200
++++ dosfstools-2.10-fixed/mkdosfs/mkdosfs.c 2004-02-11 21:13:09.000000000 +0100
+@@ -62,6 +62,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <asm/types.h>
+ #include <unistd.h>
+ #include <time.h>
+ #include <errno.h>
diff --git a/abs/core/dvd+rw-tools/PKGBUILD b/abs/core/dvd+rw-tools/PKGBUILD
new file mode 100644
index 0000000..7f7597b
--- /dev/null
+++ b/abs/core/dvd+rw-tools/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=dvd+rw-tools
+pkgver=7.1
+origver=7.1 # sometimes it is not the same as pkgver and has '-' in it
+pkgrel=1
+[ "$CARCH" = "x86_64" ] && force=y
+pkgdesc="dvd burning tools"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://fy.chalmers.se/~appro/linux/DVD+RW"
+depends=('cdrkit' 'gcc-libs')
+source=("http://fy.chalmers.se/~appro/linux/DVD+RW/tools/${pkgname}-$origver.tar.gz"
+ "buildpatch-7.0-3-20080108-karolina.patch")
+md5sums=('8acb3c885c87f6838704a0025e435871' '54b4dc52f5380216d4d9fc2dd2086d31')
+
+build() {
+ # fix build, thank you Karolina
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/buildpatch-7.0-3-20080108-karolina.patch
+
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ make || return 1
+ mkdir -p ${startdir}/pkg/usr/bin
+ for bin in growisofs dvd+rw-booktype dvd+rw-format dvd+rw-mediainfo dvd-ram-control; do
+ install -D -m755 $bin ${startdir}/pkg/usr/bin/$bin || return 1
+ done
+ install -D -m644 growisofs.1 ${startdir}/pkg/usr/share/man/man1/growisofs.1 || return 1
+}
+
+
diff --git a/abs/core/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch b/abs/core/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch
new file mode 100644
index 0000000..0b7951f
--- /dev/null
+++ b/abs/core/dvd+rw-tools/buildpatch-7.0-3-20080108-karolina.patch
@@ -0,0 +1,22 @@
+diff -Naur dvd+rw-tools-7.0/growisofs.c dvd+rw-tools-7.0_new/growisofs.c
+--- dvd+rw-tools-7.0/growisofs.c 2006-09-24 19:28:53.000000000 +0200
++++ dvd+rw-tools-7.0_new/growisofs.c 2008-01-08 00:56:57.000000000 +0100
+@@ -418,6 +418,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <assert.h>
++#include <limits.h>
+ #include "mp.h"
+
+ #if defined(__unix) || defined(__unix__)
+diff -Naur dvd+rw-tools-7.0/transport.hxx dvd+rw-tools-7.0_new/transport.hxx
+--- dvd+rw-tools-7.0/transport.hxx 2006-09-23 13:29:07.000000000 +0200
++++ dvd+rw-tools-7.0_new/transport.hxx 2008-01-08 00:57:36.000000000 +0100
+@@ -137,6 +137,7 @@
+ #include <sys/wait.h>
+ #include <sys/utsname.h>
+ #include <scsi/sg.h>
++#include <limits.h>
+ #if !defined(SG_FLAG_LUN_INHIBIT)
+ # if defined(SG_FLAG_UNUSED_LUN_INHIBIT)
+ # define SG_FLAG_LUN_INHIBIT SG_FLAG_UNUSED_LUN_INHIBIT
diff --git a/abs/core/dvdauthor/PKGBUILD b/abs/core/dvdauthor/PKGBUILD
new file mode 100644
index 0000000..6066d7f
--- /dev/null
+++ b/abs/core/dvdauthor/PKGBUILD
@@ -0,0 +1,21 @@
+# Maintainer: Travis Willard <travisw@wmpub.ca>
+# Contributor: Jaroslaw Swierczynski <swiergot@juvepoland.com>
+# Contributor: Nicolai Lissner <nlissne@linux01.gwdg.de>
+
+pkgname=dvdauthor
+pkgver=0.6.14
+pkgrel=2
+pkgdesc="DVD authoring tools"
+arch=('i686' 'x86_64')
+url="http://dvdauthor.sourceforge.net/"
+license=('GPL')
+depends=('libdvdread' 'fribidi' 'imagemagick>=6.4.0.2')
+source=(http://dl.sourceforge.net/sourceforge/dvdauthor/${pkgname}-${pkgver}.tar.gz)
+md5sums=('bd646b47950c4091ffd781d43fd2c5e9')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+}
diff --git a/abs/core/e2fsprogs/Makefile-fsck.static.patch b/abs/core/e2fsprogs/Makefile-fsck.static.patch
new file mode 100644
index 0000000..a006443
--- /dev/null
+++ b/abs/core/e2fsprogs/Makefile-fsck.static.patch
@@ -0,0 +1,13 @@
+--- e2fsprogs-1.40.4/misc/Makefile 2008-01-16 14:52:53.000000000 +0000
++++ e2fsprogs-1.40.4/misc/Makefile.neu 2008-01-16 14:53:43.000000000 +0000
+@@ -376,6 +376,10 @@
+ @echo " LD $@"
+ @$(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBS_BLKID) $(LIBINTL)
+
++fsck.static: $(FSCK_OBJS) $(DEPSTATIC_LIBBLKID)
++ @echo " LD $@"
++ @$(CC) $(ALL_LDFLAGS) -static -o fsck.static $(FSCK_OBJS) $(STATIC_LIBBLKID) $(DEPSTATIC_LIBUUID) $(LIBINTL)
++
+ badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
+ @echo " LD $@"
+ @$(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
diff --git a/abs/core/e2fsprogs/PKGBUILD b/abs/core/e2fsprogs/PKGBUILD
new file mode 100644
index 0000000..b85652b
--- /dev/null
+++ b/abs/core/e2fsprogs/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=e2fsprogs
+pkgver=1.40.8
+pkgrel=10
+pkgdesc="Ext2 filesystem utilities"
+arch=('i686' 'x86_64')
+license=('GPL' 'LGPL' 'MIT')
+url="http://e2fsprogs.sourceforge.net"
+groups=('base')
+depends=('glibc')
+makedepends=('bc')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ Makefile-fsck.static.patch
+ mke2fs.conf)
+md5sums=('450e2fb2461b2296fec770ff8fc147ed'
+ 'ce2b0daf84e17e8c7880ba3d43020ea3'
+ '4ebb30bdb5951f1fc86c1470e4d81532')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ # Remove unnecessary init.d directory
+ sed -i '/init\.d/s|^|#|' misc/Makefile.in
+ ./configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs
+ # add fsck.static for mkinitrd use
+ patch -Np1 -i ../Makefile-fsck.static.patch || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install install-libs
+ make -C ${startdir}/src/${pkgname}-${pkgver}/misc fsck.static || return 1
+ install -D -m755 ${startdir}/src/${pkgname}-${pkgver}/misc/fsck.static ${startdir}/pkg/sbin/fsck.static
+ sed -i -e 's/^AWK=.*/AWK=awk/' ${startdir}/pkg/usr/bin/compile_et || return 1
+ install -m644 ${startdir}/src/mke2fs.conf ${startdir}/pkg/etc/ || return 1
+}
diff --git a/abs/core/e2fsprogs/mke2fs.conf b/abs/core/e2fsprogs/mke2fs.conf
new file mode 100644
index 0000000..92464e3
--- /dev/null
+++ b/abs/core/e2fsprogs/mke2fs.conf
@@ -0,0 +1,26 @@
+[defaults]
+ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ blocksize = 4096
+ inode_size = 128
+ inode_ratio = 16384
+
+[fs_types]
+ small = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 4096
+ }
+ floppy = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 8192
+ }
+ news = {
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ }
+ largefile4 = {
+ inode_ratio = 4194304
+ }
diff --git a/abs/core/eject/PKGBUILD b/abs/core/eject/PKGBUILD
new file mode 100644
index 0000000..b2ba852
--- /dev/null
+++ b/abs/core/eject/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=eject
+pkgver=2.1.5
+pkgrel=3
+pkgdesc="Eject is a program for ejecting removable media under software control"
+arch=(i686 x86_64)
+source=(http://www.pobox.com/~tranter/$pkgname-$pkgver.tar.gz eject-2.1.5-handle-spaces.patch)
+url="http://ca.geocities.com/jefftranter@rogers.com/eject.html"
+md5sums=('b96a6d4263122f1711db12701d79f738' '595b97c3bd56fd41e3b01b07885f81dc')
+
+build() {
+ cd $startdir/src/$pkgname
+ patch -Np0 -i ../eject-2.1.5-handle-spaces.patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/eject/eject-2.1.5-handle-spaces.patch b/abs/core/eject/eject-2.1.5-handle-spaces.patch
new file mode 100644
index 0000000..692368f
--- /dev/null
+++ b/abs/core/eject/eject-2.1.5-handle-spaces.patch
@@ -0,0 +1,57 @@
+http://bugs.gentoo.org/151257
+
+--- eject.c
++++ eject.c
+@@ -370,6 +370,30 @@ static int FileExists(const char *name,
+
+
+ /*
++ * Linux mangles spaces in mount points by changing them to an octal string
++ * of '\040'. So lets scan the mount point and fix it up by replacing all
++ * occurrences off '\0##' with the ASCII value of 0##. Requires a writable
++ * string as input as we mangle in place. Some of this was taken from the
++ * util-linux package.
++ */
++#define octalify(a) ((a) & 7)
++#define tooctal(s) (64*octalify(s[1]) + 8*octalify(s[2]) + octalify(s[3]))
++#define isoctal(a) (((a) & ~7) == '0')
++static char *DeMangleMount(char *s)
++{
++ char *tmp = s;
++ while ((tmp = strchr(tmp, '\\')) != NULL) {
++ if (isoctal(tmp[1]) && isoctal(tmp[2]) && isoctal(tmp[3])) {
++ tmp[0] = tooctal(tmp);
++ memmove(tmp+1, tmp+4, strlen(tmp)-3);
++ }
++ ++tmp;
++ }
++ return s;
++}
++
++
++/*
+ * Given name, such as foo, see if any of the following exist:
+ *
+ * foo (if foo starts with '.' or '/')
+@@ -884,8 +908,8 @@ static int MountedDevice(const char *nam
+ if (((strcmp(s1, name) == 0) || (strcmp(s2, name) == 0)) ||
+ ((maj != -1) && (maj == mtabmaj) && (min == mtabmin))) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
+@@ -928,8 +952,8 @@ static int MountableDevice(const char *n
+ rc = sscanf(line, "%1023s %1023s", s1, s2);
+ if (rc >= 2 && s1[0] != '#' && strcmp(s2, name) == 0) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
diff --git a/abs/core/etcnet/10-defaults b/abs/core/etcnet/10-defaults
new file mode 100644
index 0000000..42a7879
--- /dev/null
+++ b/abs/core/etcnet/10-defaults
@@ -0,0 +1,6 @@
+DHCP_CLIENT=/sbin/dhcpcd
+IP=/usr/sbin/ip
+TC=/usr/sbin/tc
+LSMOD=/bin/lsmod
+IFGROUP[1]='eth wlan plip usb dvb bnep tuntap'
+
diff --git a/abs/core/etcnet/PKGBUILD b/abs/core/etcnet/PKGBUILD
new file mode 100755
index 0000000..798213e
--- /dev/null
+++ b/abs/core/etcnet/PKGBUILD
@@ -0,0 +1,39 @@
+pkgname=etcnet
+pkgver=0.9.7
+pkgrel=2
+pkgdesc="/etc/net network configuration subsystem"
+url="http://etcnet.org/"
+depends=('bash' 'grep' 'sed' 'iproute' 'wireless_tools' 'iptables' 'dhcpcd')
+arch=i686
+install=etcnet.install
+source=(http://etcnet.org/files/$pkgname-$pkgver.tar.gz 10-defaults network functions.patch options ipv4route ipv4address )
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/var/lib/etcnet
+ mkdir -p $startdir/pkg/etc/sysconfig
+
+
+
+
+
+ #cp $startdir/src/functions.patch ./etc/net
+ cd etc/net
+ patch -p0 < $startdir/src/functions.patch
+
+
+ install -D -m 644 $startdir/src/10-defaults $startdir/pkg/etc/net/options.d/10-defaults
+ install -D -m 644 $startdir/src/network $startdir/pkg/etc/sysconfig/network
+# install -D -m 644 ../options $startdir/pkg/etc/net/ifaces/default/options
+
+#setup default for eth0
+ mkdir -p $startdir/pkg/etc/net/ifaces/eth0
+ cp $startdir/src/options $startdir/pkg/etc/net/ifaces/eth0/options
+ cp $startdir/src/ipv4route $startdir/pkg/etc/net/ifaces/eth0/ipv4route
+ cp $startdir/src/ipv4address $startdir/pkg/etc/net/ifaces/eth0/ipv4address
+
+ cd $startdir/src/$pkgname-$pkgver
+ rm -Rf etc/sysconfig etc/net/{README.ALT,TODO,ChangeLog,ifaces/unknown}
+ cp -Rf etc $startdir/pkg
+
+}
diff --git a/abs/core/etcnet/adddhcp.patch b/abs/core/etcnet/adddhcp.patch
new file mode 100755
index 0000000..ee7b782
--- /dev/null
+++ b/abs/core/etcnet/adddhcp.patch
@@ -0,0 +1,51 @@
+diff -ruN etc/net/ifaces/default/options /etc/net/ifaces/default/options
+--- etc/net/ifaces/default/options 2005-08-02 08:26:44.000000000 +0000
++++ /etc/net/ifaces/default/options 2005-10-24 16:20:07.000000000 +0000
+@@ -24,7 +24,7 @@
+ # /etc/net will try to configure interface at the first succeeding
+ # method. Note that etcnet will process routes and rules despite of
+ # BOOTPROTO.
+-BOOTPROTO=static
++BOOTPROTO=dhcp
+
+ # Defines if the interface will be automatically brought up during
+ # system startup or 'service network start' invocation.
+diff -ruN etc/net/scripts/config-ipv4 /etc/net/scripts/config-ipv4
+--- etc/net/scripts/config-ipv4 2005-08-10 08:08:40.000000000 +0000
++++ /etc/net/scripts/config-ipv4 2005-10-24 16:48:49.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ . $SCRIPTDIR/functions
+ pickup_options
+
+diff -ruN etc/net/scripts/ifup /etc/net/scripts/ifup
+--- etc/net/scripts/ifup 2005-09-16 18:38:01.000000000 +0000
++++ /etc/net/scripts/ifup 2005-10-24 16:42:12.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ # This script is intended to be run from command-line or etcnet
+ # initscript. It determines if the iface should be created, then
+ # creates the device and calls ifup-common to do the rest.
+diff -ruN etc/net/scripts/ifup-common /etc/net/scripts/ifup-common
+--- etc/net/scripts/ifup-common 2005-08-03 09:03:26.000000000 +0000
++++ /etc/net/scripts/ifup-common 2005-10-24 16:42:51.000000000 +0000
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-
++#set -x
+ # This script continues configuration of an interface started by ifup,
+ # ifup-removable or ifup-ifplugd scripts. We assume that all necessary
+ # checks are done yet.
+diff -ruN etc/net/scripts/network.init /etc/net/scripts/network.init
+--- etc/net/scripts/network.init 2005-09-29 12:54:32.000000000 +0000
++++ /etc/net/scripts/network.init 2005-10-24 16:41:17.000000000 +0000
+@@ -1,4 +1,5 @@
+ #!/bin/bash
++#set -x
+ #
+ # network
+ # chkconfig: 2345 10 90
diff --git a/abs/core/etcnet/etcnet.install b/abs/core/etcnet/etcnet.install
new file mode 100755
index 0000000..2605e95
--- /dev/null
+++ b/abs/core/etcnet/etcnet.install
@@ -0,0 +1,42 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ /bin/cp -Rf /etc/net /etc/net.pacsave >/dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+post_install() {
+ /bin/true
+ touch /etc/net/
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/cp -Rf /etc/net /etc/net.pacsave >/dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ /bin/true
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
+
diff --git a/abs/core/etcnet/functions.patch b/abs/core/etcnet/functions.patch
new file mode 100644
index 0000000..c2321b6
--- /dev/null
+++ b/abs/core/etcnet/functions.patch
@@ -0,0 +1,12 @@
+--- scripts/functions.orig 2008-09-02 03:10:21.000000000 +0000
++++ scripts/functions 2008-09-02 03:10:49.000000000 +0000
+@@ -16,7 +16,8 @@
+ DEFAULT_IFPLUGSTATUS=/usr/sbin/ifplugstatus
+ DEFAULT_IFPLUGD=/usr/sbin/ifplugd
+ DEFAULT_IWPRIV=/sbin/iwpriv
+-DEFAULT_IWCONFIG=/sbin/iwconfig
++#DEFAULT_IWCONFIG=/sbin/iwconfig
++DEFAULT_IWCONFIG=/usr/sbin/iwconfig
+ DEFAULT_WPA_SUPPLICANT=/usr/sbin/wpa_supplicant
+ DEFAULT_WPA_CLI=/usr/sbin/wpa_cli
+ DEFAULT_PLIPCONFIG=/sbin/plipconfig
diff --git a/abs/core/etcnet/ipv4address b/abs/core/etcnet/ipv4address
new file mode 100755
index 0000000..39a5dd4
--- /dev/null
+++ b/abs/core/etcnet/ipv4address
@@ -0,0 +1 @@
+192.168.1.5/24
diff --git a/abs/core/etcnet/ipv4route b/abs/core/etcnet/ipv4route
new file mode 100755
index 0000000..b0dbb61
--- /dev/null
+++ b/abs/core/etcnet/ipv4route
@@ -0,0 +1 @@
+default via 192.168.1.1
diff --git a/abs/core/etcnet/network b/abs/core/etcnet/network
new file mode 100644
index 0000000..a0a17ab
--- /dev/null
+++ b/abs/core/etcnet/network
@@ -0,0 +1,6 @@
+# When set to no, this may cause most daemons' initscripts skip starting.
+NETWORKING=yes
+# Used by hotplug/pcmcia/ifplugd scripts to detect current network config
+# subsystem.
+CONFMETHOD=etcnet
+
diff --git a/abs/core/etcnet/options b/abs/core/etcnet/options
new file mode 100755
index 0000000..23bb8bf
--- /dev/null
+++ b/abs/core/etcnet/options
@@ -0,0 +1,62 @@
+# 0.4.0: now we don't have to specify TYPE for disabled interfaces
+DISABLED=no
+
+# BOOTPROTO can be any of the following: static, dhcp, ipv4ll.
+# * "static": use ipv4address/ipv6address
+# 'static' has the same meaning as 'none' in initscripts/net-scripts sense.
+# IF you don't want to assing any address to an interface, but still keep
+# it up and running, you can just use 'static' and have no ipv4address file.
+# * "dhcp": run DHCP client
+# * "ipv4ll": run IPv4LL client (zcip)
+# As far as I know, there are no working IPv6 DHCP
+# implementations. IPv4LL is not required for IPv6 because of
+# link-scope addresses.
+# Additional feature is multi-method configurations (methods
+# can be delimited by ' ', ',' or '-':
+# * "dhcp-static": try DHCP, if it fails, configure static address(es)
+# * "dhcp-ipv4ll": same, but fallback to IPv4LL
+# * "dhcp-ipv4ll-static": try DHCP, fallback to IPv4LL (very unlikely to fail),
+# fallback to static
+# /etc/net will try to configure interface at the first succeeding
+# method. Note that etcnet will process routes and rules despite of
+# BOOTPROTO.
+BOOTPROTO=dhcp-static
+
+# Defines if the interface will be automatically brought up during
+# system startup or 'service network start' invocation.
+ONBOOT=yes
+USE_HOTPLUG=no
+USE_PCMCIA=no
+CONFIG_IPV4=yes
+CONFIG_IPV6=no
+CONFIG_IPX=no
+CONFIG_QOS=yes
+CONFIG_WIRELESS=no
+CONFIG_FW=no
+
+# If set to yes, interface will not be set UP, but configured.
+KEEP_DOWN=no
+# IPv4/IPv6. Don't flush existing addresses from interface before assigning new.
+DONT_FLUSH=no
+
+# ****************** Interface dependencies ******************
+# If interface A has REQUIRES=B in it's options file, A is the child, B is the parent.
+# I don't recommend changing defaults here. See also: README/3.5
+
+# If set to yes, this variable will cause ifup call for all child (having current
+# interface in their REQUIRES list) after the current interface is set up.
+IFUP_CHILDREN=no
+
+# If set to yes, this variable will cause ifup call for all parent (listed in current
+# REQUIRES list) before the current interface is set up.
+# Note: this will not work for ifplugd-controlled interfaces.
+IFUP_PARENTS=yes
+
+# If set to yes, this variable will cause ifdown call for all child (having current
+# interface in their REQUIRES list) before the current interface is shut down.
+IFDOWN_CHILDREN=yes
+
+# If set to yes, this variable will cause ifdown call for all parent (listed in current
+# REQUIRES list) after the current interface is shut down.
+# Note: this will not work for ifplugd-controlled interfaces.
+IFDOWN_PARENTS=no
diff --git a/abs/core/expat/PKGBUILD b/abs/core/expat/PKGBUILD
new file mode 100644
index 0000000..0d63ac7
--- /dev/null
+++ b/abs/core/expat/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=expat
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="An XML Parser library written in C"
+arch=(i686 x86_64)
+license=('custom')
+depends=('glibc')
+options=('!libtool')
+source=(http://heanet.dl.sourceforge.net/sourceforge/expat/${pkgname}-${pkgver}.tar.gz)
+url="http://expat.sourceforge.net/"
+md5sums=('ee8b492592568805593f81f8cdf2a04c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m644 -D COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core/expect/PKGBUILD b/abs/core/expect/PKGBUILD
new file mode 100644
index 0000000..c8705c6
--- /dev/null
+++ b/abs/core/expect/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+
+pkgname=expect
+pkgver=5.44.1.4
+pkgrel=1
+pkgdesc="A tool for automating interactive applications"
+arch=(i686 x86_64)
+depends=('tcl>=8.5.0')
+makedepends=('tk>=8.5.0')
+tcltkver=8.5.0
+source=(ftp://ftp.archlinux.org/other/expect/expect-$pkgver.tar.bz2
+#http://expect.nist.gov/src/expect-$pkgver.tar.bz2
+http://heanet.dl.sourceforge.net/sourceforge/tcl/tk$tcltkver-src.tar.gz
+http://heanet.dl.sourceforge.net/sourceforge/tcl/tcl$tcltkver-src.tar.gz)
+url="http://expect.nist.gov/"
+
+build() {
+ cd $startdir/src/expect-5.44.1.4
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-tcl=/usr/lib --with-tk=/usr/lib --without-x \
+ --with-tclinclude=$startdir/src/tcl$tcltkver/generic \
+ --with-tkinclude=$startdir/src/tk$tcltkver/generic
+ # Keep $startdir/pkg out of library search paths.
+ sed -e 's/-rpath,${LIB_RUNTIME_DIR}:/-rpath,/' -i Makefile
+ make || return 1
+ make prefix=$startdir/pkg/usr exec_prefix=$startdir/pkg/usr sysconfdir=$startdir/pkg/etc \
+ localstatedir=$startdir/pkg/var install
+ # Remove X related stuff.
+ rm -f $startdir/pkg/usr/bin/{multixterm,tknewsbiff,tkpasswd,xpstat}
+ rm -f $startdir/pkg/usr/man/man1/{multixterm.1,tknewsbiff.1}
+}
+md5sums=('bbfd5ef50f3c1df4fe79e5a20a947d41'
+ 'bc217c45ed6b2f5b8d3120df63fa13bd'
+ 'd890c505465411b25050b6cd95971d2c')
diff --git a/abs/core/faac/PKGBUILD b/abs/core/faac/PKGBUILD
new file mode 100644
index 0000000..3d7ce11
--- /dev/null
+++ b/abs/core/faac/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+# Contributor: dorphell <dorphell@archlinux.org>
+pkgname=faac
+pkgver=1.26
+pkgrel=1
+pkgdesc="FAAC is an AAC audio encoder."
+arch=(i686 x86_64)
+url="http://www.audiocoding.com/"
+license=('GPL' 'custom')
+depends=('libmp4v2' 'glibc')
+makedepends=('automake' 'autoconf' 'libtool')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+
+build() {
+ cd ${startdir}/src/${pkgname}
+ find . -type f -print0 | xargs -0 sed -i 's/\r//g'
+ ./bootstrap
+ ./configure --prefix=/usr --with-mp4v2
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ install -D -m644 ${startdir}/src/${pkgname}/libfaac/kiss_fft/COPYING \
+ ${startdir}/pkg/usr/share/licenses/faac/COPYING.kiss_fft
+}
+md5sums=('1d7c019bd2dbb4f3101b8937ebc59cf6')
diff --git a/abs/core/faac/libmp4v2.patch b/abs/core/faac/libmp4v2.patch
new file mode 100644
index 0000000..b2c0165
--- /dev/null
+++ b/abs/core/faac/libmp4v2.patch
@@ -0,0 +1,11 @@
+--- faac/configure.in 2006-08-13 14:17:26.000000000 +0000
++++ faac-patched/configure.in 2007-01-29 19:18:45.000000000 +0000
+@@ -35,6 +35,8 @@
+
+ if test x$external_mp4v2 = xyes; then
+ AC_MSG_NOTICE([*** Building with external mp4v2 ***])
++ MY_DEFINE(HAVE_LIBMP4V2)
++ LIBS="-lmp4v2 $LIBS"
+ else
+ if test x$WITHMP4V2 = xyes; then
+ AC_MSG_NOTICE([*** Building with internal mp4v2 ***])
diff --git a/abs/core/faac/pipe-output.patch b/abs/core/faac/pipe-output.patch
new file mode 100644
index 0000000..a8581f3
--- /dev/null
+++ b/abs/core/faac/pipe-output.patch
@@ -0,0 +1,18 @@
+--- faac/frontend/main.c 2004-12-08 11:07:17.000000000 +0000
++++ faac-patched/frontend/main.c 2007-01-29 19:17:26.000000000 +0000
+@@ -918,7 +918,14 @@
+ {
+ #endif
+ /* open the aac output file */
+- outfile = fopen(aacFileName, "wb");
++ if (aacFileName[0] == '-')
++ {
++ outfile = stdout;
++ }
++ else
++ {
++ outfile = fopen(aacFileName, "wb");
++ }
+ if (!outfile)
+ {
+ fprintf(stderr, "Couldn't create output file %s\n", aacFileName);
diff --git a/abs/core/faad2/ChangeLog b/abs/core/faad2/ChangeLog
new file mode 100644
index 0000000..b4073ba
--- /dev/null
+++ b/abs/core/faad2/ChangeLog
@@ -0,0 +1,14 @@
+2008-07-19 Eric Belanger <eric@archlinux.org>
+
+ * faad2 2.6.1-1
+ * Upstream update
+ * Patched to fix libtool build problem :
+ faad2-2.6.1-libtool22.patch
+ * Patched to make faad2 exit if output pipe breaks :
+ faad2-2.6.1-broken-pipe.patch
+ * Patched to fix include file implicit declaration :
+ faad2-2.6.1-implicitdeclar.patch
+ * Patched to bump soname (symbols have been changed) :
+ faad2-2.6.1-abi_has_changed.patch
+ * Updated license
+ * Added ChangeLog
diff --git a/abs/core/faad2/LICENSE b/abs/core/faad2/LICENSE
new file mode 100644
index 0000000..ecb2c75
--- /dev/null
+++ b/abs/core/faad2/LICENSE
@@ -0,0 +1,28 @@
+/*
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.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.
+**
+** Any non-GPL usage of this software or parts of this software is strictly
+** forbidden.
+**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
+**
+*/
diff --git a/abs/core/faad2/PKGBUILD b/abs/core/faad2/PKGBUILD
new file mode 100644
index 0000000..227cc3b
--- /dev/null
+++ b/abs/core/faad2/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 5668 2008-07-20 05:06:05Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+
+pkgname=faad2
+pkgver=2.6.1
+pkgrel=1
+pkgdesc="ISO AAC audio decoder"
+arch=('i686' 'x86_64')
+url="http://www.audiocoding.com/"
+license=('custom:GPL')
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/faac/${pkgname}-${pkgver}.tar.gz
+ faad2-2.6.1-libtool22.patch
+ faad2-2.6.1-broken-pipe.patch
+ faad2-2.6.1-implicitdeclar.patch
+ faad2-2.6.1-abi_has_changed.patch
+ LICENSE)
+md5sums=('74e92df40c270f216a8305fc87603c8a' 'ca9515b6617d7fd060d0d172616eb192'\
+ 'bb6a345dd2e6c4df6609e6a374134066' 'bc43fd3f8cd582a8bc092b9b5e611865'\
+ '06e83633c609d20436794b62a382b3dc' 'b6a1c72534807b8a038b71e784f57e32')
+sha1sums=('b4ad33d3c4dfa6dbf3011a3da34c631926cabfad'
+ 'ca4ee04aa1757b8f9deeef52b5bf35dc823da844'
+ '0b03728f40d00e552f738900e2f6215177af5417'
+ 'd4ab5d38c9b75ed6417529c4d1a7ca204293c224'
+ 'f7e9d89fc551e0b61a7b7555749ed7a3129a4ce8'
+ '6225fd997671206f5222c4a86d9e092359552c43')
+
+build() {
+ cd ${srcdir}/${pkgname}
+ patch -p1 < ../faad2-2.6.1-libtool22.patch || return 1
+ patch -p1 < ../faad2-2.6.1-broken-pipe.patch || return 1
+ patch -p1 < ../faad2-2.6.1-implicitdeclar.patch || return 1
+ patch -p1 < ../faad2-2.6.1-abi_has_changed.patch || return 1
+
+ autoreconf -vif || return 1
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff.h ${pkgdir}/usr/include/ || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff_int_types.h ${pkgdir}/usr/include/ || return 1
+ install -m644 ${srcdir}/${pkgname}/common/mp4ff/.libs/*.a ${pkgdir}/usr/lib/ || return 1
+ install -D -m644 ${srcdir}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+}
diff --git a/abs/core/faad2/faad2-2.6.1-abi_has_changed.patch b/abs/core/faad2/faad2-2.6.1-abi_has_changed.patch
new file mode 100644
index 0000000..7206e38
--- /dev/null
+++ b/abs/core/faad2/faad2-2.6.1-abi_has_changed.patch
@@ -0,0 +1,14 @@
+Index: faad2/libfaad/Makefile.am
+===================================================================
+--- faad2.orig/libfaad/Makefile.am
++++ faad2/libfaad/Makefile.am
+@@ -3,7 +3,8 @@ lib_LTLIBRARIES = libfaad.la
+ include_HEADERS = $(top_srcdir)/include/faad.h \
+ $(top_srcdir)/include/neaacdec.h
+
+-libfaad_la_LDFLAGS = -lm
++libfaad_la_LDFLAGS = -version-info 1:0:0
++libfaad_la_LIBADD = -lm
+
+ libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \
+ drm_dec.c error.c filtbank.c \
diff --git a/abs/core/faad2/faad2-2.6.1-broken-pipe.patch b/abs/core/faad2/faad2-2.6.1-broken-pipe.patch
new file mode 100644
index 0000000..428d7dd
--- /dev/null
+++ b/abs/core/faad2/faad2-2.6.1-broken-pipe.patch
@@ -0,0 +1,22 @@
+--- faad2/frontend/main.c~ 2007-11-01 06:33:29.000000000 -0600
++++ faad2/frontend/main.c 2008-01-03 18:05:10.000000000 -0700
+@@ -640,7 +640,8 @@
+
+ if ((frameInfo.error == 0) && (frameInfo.samples > 0) && (!adts_out))
+ {
+- write_audio_file(aufile, sample_buffer, frameInfo.samples, 0);
++ if (write_audio_file(aufile, sample_buffer, frameInfo.samples, 0) == 0)
++ break;
+ }
+
+ /* fill buffer */
+@@ -976,7 +977,8 @@
+
+ if ((frameInfo.error == 0) && (sample_count > 0) && (!adts_out))
+ {
+- write_audio_file(aufile, sample_buffer, sample_count, delay);
++ if (write_audio_file(aufile, sample_buffer, sample_count, delay) == 0)
++ break;
+ }
+
+ if (frameInfo.error > 0)
diff --git a/abs/core/faad2/faad2-2.6.1-implicitdeclar.patch b/abs/core/faad2/faad2-2.6.1-implicitdeclar.patch
new file mode 100644
index 0000000..9379329
--- /dev/null
+++ b/abs/core/faad2/faad2-2.6.1-implicitdeclar.patch
@@ -0,0 +1,11 @@
+diff -aur faad2-orig/frontend/main.c faad2/frontend/main.c
+--- faad2-orig/frontend/main.c 2007-11-01 08:33:29.000000000 -0400
++++ faad2/frontend/main.c 2008-06-21 19:33:08.000000000 -0400
+@@ -41,6 +41,7 @@
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <getopt.h>
++#include <string.h>
+
+ #include <neaacdec.h>
+ #include <mp4ff.h>
diff --git a/abs/core/faad2/faad2-2.6.1-libtool22.patch b/abs/core/faad2/faad2-2.6.1-libtool22.patch
new file mode 100644
index 0000000..4eab084
--- /dev/null
+++ b/abs/core/faad2/faad2-2.6.1-libtool22.patch
@@ -0,0 +1,13 @@
+Index: faad2/configure.in
+===================================================================
+--- faad2.orig/configure.in
++++ faad2/configure.in
+@@ -18,7 +18,7 @@ dnl Checks for programs.
+ AC_PROG_CC
+ AC_PROG_CPP
+ dnl disable for mpeg4ip plugin
+-dnl AC_PROG_CXX
++AC_PROG_CXX
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+ AC_PROG_MAKE_SET
diff --git a/abs/core/feh/PKGBUILD b/abs/core/feh/PKGBUILD
new file mode 100644
index 0000000..23a2627
--- /dev/null
+++ b/abs/core/feh/PKGBUILD
@@ -0,0 +1,17 @@
+
+pkgname=feh
+pkgver=1.3.4
+pkgrel=3
+pkgdesc="feh is a fast, lightweight image viewer which uses imlib2"
+depends=('libpng' 'libxinerama' 'giblib')
+#source=(http://linuxbrit.co.uk/downloads/$pkgname-$pkgver.tar.gz)
+source=(http://ftp.gva.es/mirror/debian/pool/main/f/feh/feh_1.3.4.orig.tar.gz)
+url="http://www.linuxbrit.co.uk/feh/"
+arch=('i686')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+}
diff --git a/abs/core/ffmpeg/PKGBUILD b/abs/core/ffmpeg/PKGBUILD
new file mode 100644
index 0000000..463fa98
--- /dev/null
+++ b/abs/core/ffmpeg/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 5671 2008-07-20 05:09:25Z eric $
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=ffmpeg
+pkgver=20080715
+pkgrel=3
+pkgdesc="Complete and free Internet live audio and video broadcasting solution for Linux/Unix"
+arch=(i686 x86_64)
+url="http://ffmpeg.mplayerhq.hu/"
+license=('LGPL')
+depends=('lame' 'sdl' 'libvorbis' 'a52dec' 'faad2>=2.6.1' 'faac' 'xvidcore' 'zlib' 'imlib2' 'x264>=20080625' 'libtheora')
+#remake snapshot with: svn export svn://svn.mplayerhq.hu/ffmpeg/trunk@14236
+source=(ftp://ftp.archlinux.org/other/ffmpeg/ffmpeg-20080715-14236.tar.bz2)
+md5sums=('899ee3dd56a779b1152e48a94fde69f0')
+
+build() {
+ cd "$srcdir/$pkgname" || return 1
+
+ ./configure \
+ --prefix=/usr \
+ --enable-gpl \
+ --enable-libmp3lame \
+ --enable-libvorbis \
+ --enable-libfaac \
+ --enable-libfaad \
+ --enable-liba52 \
+ --enable-libxvid \
+ --enable-libx264 \
+ --enable-libtheora \
+ --enable-postproc \
+ --enable-shared \
+ --enable-pthreads \
+ --enable-x11grab \
+ --enable-swscale \
+ || return 1
+
+ make -j 2 || return 1
+ make doc/ff{mpeg,play,server}.1 || return 1
+
+ make DESTDIR="$pkgdir" install || return 1
+ make DESTDIR="$pkgdir" install-man || return 1
+
+ # since makepkg currently declines to strip .a files, do this for now
+ strip --strip-debug $startdir/pkg/usr/lib/*.a || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/fftw2/PKGBUILD b/abs/core/fftw2/PKGBUILD
new file mode 100644
index 0000000..4198e96
--- /dev/null
+++ b/abs/core/fftw2/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=fftw2
+pkgver=2.1.5
+pkgrel=4
+pkgdesc="FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of both real and complex data, and of arbitrary input size. This is package is offering backwards compatibility version 2.x.y. of fftw."
+arch=(i686 x86_64)
+url="http://www.fftw.org/"
+license=('GPL2')
+depends=('glibc')
+options=(!libtool)
+source=(http://www.fftw.org/fftw-${pkgver}.tar.gz)
+md5sums=('8d16a84f3ca02a785ef9eb36249ba433')
+
+build() {
+ cd ${startdir}/src/fftw-${pkgver}
+ # build + install double precision
+ ./configure F77=gfortran --prefix=/usr \
+ --enable-type-prefix --enable-shared \
+ --enable-threads
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ make clean
+
+ # build + install single precision
+ ./configure F77=gfortran --prefix=/usr \
+ --enable-float --enable-type-prefix --enable-shared \
+ --enable-threads
+ make || return 1
+ #make prefix=$startdir/pkg/usr install || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/file/PKGBUILD b/abs/core/file/PKGBUILD
new file mode 100644
index 0000000..63a224f
--- /dev/null
+++ b/abs/core/file/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4745 2008-07-09 19:17:02Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=file
+pkgver=4.25
+pkgrel=10
+pkgdesc="File type identification utility"
+arch=('i686' 'x86_64')
+license=('custom')
+groups=('base')
+url="http://www.darwinsys.com/file/"
+depends=('glibc' 'zlib')
+options=('!libtool')
+source=(ftp://ftp.astron.com/pub/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('cdf1f90d2704e71118353c16c19898ba')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+ ./configure --prefix=/usr --datadir=/usr/share/misc
+ make || return 1
+ make DESTDIR=${pkgdir} install
+ install -D -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core/filesystem/PKGBUILD b/abs/core/filesystem/PKGBUILD
new file mode 100644
index 0000000..4dee201
--- /dev/null
+++ b/abs/core/filesystem/PKGBUILD
@@ -0,0 +1,90 @@
+# $Id: PKGBUILD 4675 2008-07-08 19:16:06Z pierre $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=filesystem
+pkgver=2008.07
+pkgrel=10
+pkgdesc="Base filesystem"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.archlinux.org"
+groups=('base')
+install=filesystem.install
+#depends=('sh' 'coreutils')
+backup=(etc/fstab etc/crypttab etc/group etc/hosts etc/ld.so.conf etc/passwd \
+ etc/shadow etc/gshadow etc/resolv.conf etc/motd etc/nsswitch.conf \
+ etc/shells etc/host.conf etc/securetty etc/profile etc/issue)
+source=(group issue nsswitch.conf securetty host.conf ld.so.conf \
+ passwd shadow fstab crypttab hosts motd resolv.conf shells \
+ gshadow services protocols profile)
+
+build()
+{
+ cd $startdir/pkg
+ mkdir -p bin boot dev etc home lib mnt proc root sbin tmp usr var opt srv sys
+ chmod 555 proc
+ mkdir -p media/{fl,cd,dvd}
+ mkdir -p usr/{bin,include,lib,sbin,share/misc,src,man}
+
+ mkdir -p usr/share/man/man{1,2,3,4,5,6,7,8}
+ ln -s man3 $startdir/pkg/usr/share/man/man3x
+
+ # fhs compliance
+ mkdir -p usr/local/{bin,games,include,lib,man,sbin,share,src}
+ ln -s ../man $startdir/pkg/usr/local/share/man
+ mkdir -p var/{cache/man,local,lock,opt,run,spool/mail,tmp,games}
+ chmod 1777 var/lock
+ mkdir -p var/log/old
+ mkdir -p etc/{skel,profile.d}
+ mkdir -p lib/modules
+ (cd $startdir/pkg/usr; ln -s ../var var)
+ (cd $startdir/pkg/var; ln -s spool/mail mail)
+
+ # vsftpd won't run with write perms on /srv/ftp
+ mkdir -p srv/ftp
+ chown root.ftp srv/ftp
+ chmod 555 srv/ftp
+
+ install -d -o root -g root -m 755 srv/http
+
+ chmod 1777 var/spool/mail tmp var/tmp
+ chmod 0750 root
+
+ #Allow setgid games to write scores:
+ chmod 775 ${startdir}/pkg/var/games
+ chown root:50 ${startdir}/pkg/var/games
+
+ cd $startdir/src
+ cp fstab crypttab group host.conf hosts issue 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
+ chmod 600 $startdir/pkg/etc/shadow
+ chmod 600 $startdir/pkg/etc/crypttab
+
+ # no version any more
+ #cat issue | sed "s/#VERSION#/$pkgver/" >$startdir/pkg/etc/issue
+
+ # re-add /etc/arch-release, some software uses it
+ # to check whether arch is running
+ touch $startdir/pkg/etc/arch-release
+}
+md5sums=('f64f86c4a6356961b69ead0471294145'
+ '1bdc5dba66947d74866a5df8ce9ef3b1'
+ '775464ba7588b4976e0c2a02b83123f4'
+ '655071da46d2ac03e0fb8a071bf193ea'
+ 'f28150d4c0b22a017be51b9f7f9977ed'
+ '2c24792d97ef3cf0d73b60d4c429730b'
+ '8a9042a2cedf6b6b47eb8973f14289cb'
+ '019e5c24f9befef395a28e7ef2e4e5b9'
+ '4e2f238bae5cbf716ff73c9404404269'
+ 'e5d8323a4dbee7a6d0d2a19cbf4b819f'
+ '81b3cb42a6ddabc2ed2310511ee9c859'
+ 'd41d8cd98f00b204e9800998ecf8427e'
+ '6f48288b6fcaf0065fcb7b0e525413e0'
+ '40dac0de4c6b99c8ca97effbd7527c84'
+ 'ab9c2a40eba287b2918589ab8e0b2fbf'
+ 'f436d2e0ed02b7b73bd10c6693e95ac3'
+ '65d78e621ed69eed69f854c3ee2e5942'
+ 'f2a88eacb5c37201368c916d9e594440')
diff --git a/abs/core/filesystem/crypttab b/abs/core/filesystem/crypttab
new file mode 100644
index 0000000..dd6994b
--- /dev/null
+++ b/abs/core/filesystem/crypttab
@@ -0,0 +1,33 @@
+# crypttab: Mappings for encrypted partitions
+#
+# Each mapped device will be created in /dev/mapper, so your /etc/fstab
+# should use the /dev/mapper/{NAME} paths for encrypted devices.
+#
+# Each PASSWORD field can be an absolute pathname to a key file (starting
+# with a slash, recommended) or a literal string that will be used as
+# a passphrase. To use special characters in the passphrase, surround it
+# by quotes, the usual bash quoting rules apply.
+# There are two special keywords that cannot be used as passphrases:
+# - ASK ask for a passphrase on boot
+# - SWAP use a random key and create a swapspace afterwards
+# WARNING: use the SWAP keyword carefully, as it overwrites the data
+# on the specified partition
+#
+# To create a key file:
+# hashalot -n 32 ripemd160 >/etc/crytfs.key
+# or
+# dd if=/dev/urandom of=/etc/cryptfs.key bs=256 count=1
+#
+# To pass additional options to cryptsetup for non-LUKS partitions, use the
+# fourth column.
+#
+# NOTE: Do not list your root (/) partition here, it must be set up
+# beforehand by the initramfs (/etc/mkinitcpio.conf).
+
+
+# NAME SOURCE DEVICE PASSWORD OPTIONS
+#home /dev/hda4 mypassword
+#data1 /dev/hda3 "my \"password\""
+#data2 /dev/hda5 /etc/cryptfs.key
+#swap /dev/hdx4 SWAP -c aes-cbc-essiv:sha256 -s 256
+#vol /dev/hdb7 ASK
diff --git a/abs/core/filesystem/filesystem.install b/abs/core/filesystem/filesystem.install
new file mode 100644
index 0000000..92b336f
--- /dev/null
+++ b/abs/core/filesystem/filesystem.install
@@ -0,0 +1,60 @@
+# arg 1: the new package version
+post_install() {
+ [ -f var/log/lastlog ] || : >var/log/lastlog
+ [ -f var/log/wtmp ] || : >var/log/wtmp
+ [ -f var/run/utmp ] || : >var/run/utmp
+ [ -f var/log/btmp ] || (: >var/log/btmp && bin/chmod 600 var/log/btmp)
+ # workaround for bug #7194
+ # readded due to bug #9465
+ # please do not remove!
+ chmod 1777 var/spool/mail tmp var/tmp var/lock
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+ if [ ! "`grep ^optical: etc/group`" ]; then
+ echo "adding new groups: audio optical"
+ usr/sbin/groupadd -g 92 audio >/dev/null
+ usr/sbin/groupadd -g 93 optical >/dev/null
+ fi
+ if [ ! "`grep ^video: etc/group`" ]; then
+ echo "adding new groups: video floppy storage"
+ usr/sbin/groupadd -g 91 video >/dev/null
+ usr/sbin/groupadd -g 94 floppy >/dev/null
+ usr/sbin/groupadd -g 95 storage >/dev/null
+ fi
+ if [ ! "`grep ^log: etc/group`" ]; then
+ echo "adding new group: log"
+ usr/sbin/groupadd -g 19 log >/dev/null
+ fi
+ if [ ! "`grep ^power: etc/group`" ]; then
+ echo "adding new group: power"
+ usr/sbin/groupadd -g 98 power >/dev/null
+ fi
+ if [ ! "`grep ^network: etc/group`" ]; then
+ echo "adding new group: network"
+ usr/sbin/groupadd -g 90 network >/dev/null
+ fi
+ if [ ! "`grep ^games: etc/group`" ]; then
+ echo "adding new group: games"
+ usr/sbin/groupadd -g 50 games >/dev/null
+ fi
+ if [ ! "`grep ^uucp: etc/group`" ]; then
+ echo "adding new group: uucp"
+ usr/sbin/groupadd -g 14 uucp >/dev/null
+ fi
+ if [ ! "`grep ^http: etc/group`" ]; then
+ echo "adding new group: http"
+ usr/sbin/groupadd -g 33 http >/dev/null
+ fi
+ if [ ! "`grep ^http: etc/passwd`" ]; then
+ echo "adding new user http"
+ usr/sbin/useradd -u 33 -d /srv/http -g http -s /bin/false http >/dev/null
+ fi
+ if [ ! "`grep ^scanner: etc/group`" ]; then
+ echo "adding new group: scanner"
+ usr/sbin/groupadd -g 96 scanner >/dev/null
+ fi
+}
diff --git a/abs/core/filesystem/fstab b/abs/core/filesystem/fstab
new file mode 100644
index 0000000..a609a32
--- /dev/null
+++ b/abs/core/filesystem/fstab
@@ -0,0 +1,11 @@
+#
+# /etc/fstab: static file system information
+#
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+
+/dev/cdrom /media/cd auto ro,user,noauto,unhide 0 0
+/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0
+/dev/fd0 /media/fl auto user,noauto 0 0
+
diff --git a/abs/core/filesystem/group b/abs/core/filesystem/group
new file mode 100644
index 0000000..f0d4712
--- /dev/null
+++ b/abs/core/filesystem/group
@@ -0,0 +1,28 @@
+root::0:root
+bin::1:root,bin,daemon
+daemon::2:root,bin,daemon
+sys::3:root,bin
+adm::4:root,daemon
+tty::5:
+disk::6:root
+lp::7:daemon
+mem::8:
+kmem::9:
+wheel::10:root
+ftp::11:
+mail::12:
+uucp::14:
+log::19:root
+smmsp::25:
+http::33:
+games::50:
+network:x:90:
+video:x:91:
+audio::92:
+optical::93:
+floppy:x:94:
+storage:x:95:
+scanner:x:96:
+power:x:98:
+nobody::99:
+users::100:
diff --git a/abs/core/filesystem/gshadow b/abs/core/filesystem/gshadow
new file mode 100644
index 0000000..30733e3
--- /dev/null
+++ b/abs/core/filesystem/gshadow
@@ -0,0 +1,27 @@
+root:::root
+bin:::root,bin,daemon
+daemon:::root,bin,daemon
+sys:::root,bin
+adm:::root,daemon
+tty:::
+disk:::root
+lp:::daemon
+mem:::
+kmem:::
+wheel:::root
+ftp:::
+mail:::
+log:::root
+smmsp:::
+http:::
+games:::
+network:x::
+video:x::
+audio:::
+optical:::
+floppy:x::
+storage:x::
+scanner:x::
+power:x::
+nobody:::
+users:::
diff --git a/abs/core/filesystem/host.conf b/abs/core/filesystem/host.conf
new file mode 100644
index 0000000..cf52fe5
--- /dev/null
+++ b/abs/core/filesystem/host.conf
@@ -0,0 +1,8 @@
+#
+# /etc/host.conf
+#
+
+order hosts,bind
+multi on
+
+# End of file
diff --git a/abs/core/filesystem/hosts b/abs/core/filesystem/hosts
new file mode 100644
index 0000000..ec12849
--- /dev/null
+++ b/abs/core/filesystem/hosts
@@ -0,0 +1,8 @@
+#
+# /etc/hosts: static lookup table for host names
+#
+
+#<ip-address> <hostname.domain.org> <hostname>
+127.0.0.1 localhost.localdomain localhost
+
+# End of file
diff --git a/abs/core/filesystem/issue b/abs/core/filesystem/issue
new file mode 100644
index 0000000..3db753d
--- /dev/null
+++ b/abs/core/filesystem/issue
@@ -0,0 +1,3 @@
+
+Arch Linux \r (\n) (\l)
+
diff --git a/abs/core/filesystem/ld.so.conf b/abs/core/filesystem/ld.so.conf
new file mode 100644
index 0000000..2227e1e
--- /dev/null
+++ b/abs/core/filesystem/ld.so.conf
@@ -0,0 +1,5 @@
+#
+# /etc/ld.so.conf
+#
+
+# End of file
diff --git a/abs/core/filesystem/motd b/abs/core/filesystem/motd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core/filesystem/motd
diff --git a/abs/core/filesystem/nsswitch.conf b/abs/core/filesystem/nsswitch.conf
new file mode 100644
index 0000000..7d86691
--- /dev/null
+++ b/abs/core/filesystem/nsswitch.conf
@@ -0,0 +1,19 @@
+# Begin /etc/nsswitch.conf
+
+passwd: files
+group: files
+shadow: files
+
+publickey: files
+
+hosts: files dns
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: db files
+
+# End /etc/nsswitch.conf
diff --git a/abs/core/filesystem/passwd b/abs/core/filesystem/passwd
new file mode 100644
index 0000000..a4a24e3
--- /dev/null
+++ b/abs/core/filesystem/passwd
@@ -0,0 +1,7 @@
+root:x:0:0:root:/root:/bin/bash
+bin:x:1:1:bin:/bin:/bin/false
+daemon:x:2:2:daemon:/sbin:/bin/false
+mail:x:8:12:mail:/var/spool/mail:/bin/false
+ftp:x:14:11:ftp:/srv/ftp:/bin/false
+http:x:33:33:http:/srv/http:/bin/false
+nobody:x:99:99:nobody:/:/bin/false
diff --git a/abs/core/filesystem/profile b/abs/core/filesystem/profile
new file mode 100644
index 0000000..d18b99a
--- /dev/null
+++ b/abs/core/filesystem/profile
@@ -0,0 +1,57 @@
+#
+# /etc/profile
+#
+# This file is intended to be used for ALL common
+# Bourne-compatible shells. Shell specifics should be
+# handled in /etc/profile.$SHELL where $SHELL is the name
+# of the binary being run (discounting symlinks)
+#
+# Sections taken from SuSe's /etc/profile
+# Note the explicit use of 'test' to cover all bases
+# and potentially incompatible shells
+
+#Determine our shell without using $SHELL, which may lie
+shell="sh"
+if test -f /proc/mounts; then
+ case $(/bin/ls -l /proc/$$/exe) in
+ *bash) shell=bash ;;
+ *dash) shell=dash ;;
+ *ash) shell=ash ;;
+ *ksh) shell=ksh ;;
+ *zsh) shell=zsh ;;
+ esac
+fi
+
+# Load shell specific profile settings
+test -f "/etc/profile.$shell" && . "/etc/profile.$shell"
+
+#Set our umask
+umask 022
+
+# Set our default path
+PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+export PATH
+
+# Some readline stuff that is fairly common
+HISTSIZE=1000
+HISTCONTROL="erasedups"
+
+INPUTRC="/etc/inputrc"
+LESS="-R"
+LC_COLLATE="C"
+
+export HISTSIZE HISTCONTROL INPUTRC LESS LC_COLLATE
+
+# Load profiles from /etc/profile.d
+if test -d /etc/profile.d/; then
+ for profile in /etc/profile.d/*.sh; do
+ test -x $profile && . $profile
+ done
+ unset profile
+fi
+
+# Termcap is outdated, old, and crusty, kill it.
+unset TERMCAP
+
+# Man is much better than us at figuring this out
+unset MANPATH
diff --git a/abs/core/filesystem/protocols b/abs/core/filesystem/protocols
new file mode 100644
index 0000000..670728e
--- /dev/null
+++ b/abs/core/filesystem/protocols
@@ -0,0 +1,57 @@
+# Internet (IP) protocols
+#
+# Updated from http://www.iana.org/assignments/protocol-numbers and other
+# sources.
+# New protocols will be added on request if they have been officially
+# assigned by IANA and are not historical.
+# If you need a huge list of used numbers please install the nmap package.
+
+ip 0 IP # internet protocol, pseudo protocol number
+#hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # Internet Group Management
+ggp 3 GGP # gateway-gateway protocol
+ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
+st 5 ST # ST datagram mode
+tcp 6 TCP # transmission control protocol
+egp 8 EGP # exterior gateway protocol
+igp 9 IGP # any private interior gateway (Cisco)
+pup 12 PUP # PARC universal packet protocol
+udp 17 UDP # user datagram protocol
+hmp 20 HMP # host monitoring protocol
+xns-idp 22 XNS-IDP # Xerox NS IDP
+rdp 27 RDP # "reliable datagram" protocol
+iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905]
+xtp 36 XTP # Xpress Transfer Protocol
+ddp 37 DDP # Datagram Delivery Protocol
+idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
+ipv6 41 IPv6 # Internet Protocol, version 6
+ipv6-route 43 IPv6-Route # Routing Header for IPv6
+ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
+idrp 45 IDRP # Inter-Domain Routing Protocol
+rsvp 46 RSVP # Reservation Protocol
+gre 47 GRE # General Routing Encapsulation
+esp 50 IPSEC-ESP # Encap Security Payload [RFC2406]
+ah 51 IPSEC-AH # Authentication Header [RFC2402]
+skip 57 SKIP # SKIP
+ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
+ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
+ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
+rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB)
+vmtp 81 VMTP # Versatile Message Transport
+eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco)
+ospf 89 OSPFIGP # Open Shortest Path First IGP
+ax.25 93 AX.25 # AX.25 frames
+ipip 94 IPIP # IP-within-IP Encapsulation Protocol
+etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378]
+encap 98 ENCAP # Yet Another IP encapsulation [RFC1241]
+# 99 # any private encryption scheme
+pim 103 PIM # Protocol Independent Multicast
+ipcomp 108 IPCOMP # IP Payload Compression Protocol
+vrrp 112 VRRP # Virtual Router Redundancy Protocol
+l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661]
+isis 124 ISIS # IS-IS over IPv4
+sctp 132 SCTP # Stream Control Transmission Protocol
+fc 133 FC # Fibre Channel
+udplite 136 UDPLite # UDP-Lite
+
diff --git a/abs/core/filesystem/resolv.conf b/abs/core/filesystem/resolv.conf
new file mode 100644
index 0000000..cecafba
--- /dev/null
+++ b/abs/core/filesystem/resolv.conf
@@ -0,0 +1,8 @@
+#
+# /etc/resolv.conf
+#
+
+#search <yourdomain.tld>
+#nameserver <ip>
+
+# End of file
diff --git a/abs/core/filesystem/securetty b/abs/core/filesystem/securetty
new file mode 100644
index 0000000..af01d2e
--- /dev/null
+++ b/abs/core/filesystem/securetty
@@ -0,0 +1,13 @@
+#
+# /etc/securetty
+#
+
+console
+vc/1
+vc/2
+vc/3
+vc/4
+vc/5
+vc/6
+
+# End of file
diff --git a/abs/core/filesystem/services b/abs/core/filesystem/services
new file mode 100644
index 0000000..2f1f99c
--- /dev/null
+++ b/abs/core/filesystem/services
@@ -0,0 +1,557 @@
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, officially ports have two entries
+# even if the protocol doesn't support UDP operations.
+#
+# Updated from http://www.iana.org/assignments/port-numbers and other
+# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
+# New ports will be added on request if they have been officially assigned
+# by IANA and used in the real-world or are needed by a debian package.
+# If you need a huge list of used numbers please install the nmap package.
+
+tcpmux 1/tcp # TCP port service multiplexer
+echo 7/tcp
+echo 7/udp
+discard 9/tcp sink null
+discard 9/udp sink null
+systat 11/tcp users
+daytime 13/tcp
+daytime 13/udp
+netstat 15/tcp
+qotd 17/tcp quote
+msp 18/tcp # message send protocol
+msp 18/udp
+chargen 19/tcp ttytst source
+chargen 19/udp ttytst source
+ftp-data 20/tcp
+ftp 21/tcp
+fsp 21/udp fspd
+ssh 22/tcp # SSH Remote Login Protocol
+ssh 22/udp
+telnet 23/tcp
+smtp 25/tcp mail
+time 37/tcp timserver
+time 37/udp timserver
+rlp 39/udp resource # resource location
+nameserver 42/tcp name # IEN 116
+whois 43/tcp nicname
+tacacs 49/tcp # Login Host Protocol (TACACS)
+tacacs 49/udp
+re-mail-ck 50/tcp # Remote Mail Checking Protocol
+re-mail-ck 50/udp
+domain 53/tcp # name-domain server
+domain 53/udp
+mtp 57/tcp # deprecated
+tacacs-ds 65/tcp # TACACS-Database Service
+tacacs-ds 65/udp
+bootps 67/tcp # BOOTP server
+bootps 67/udp
+bootpc 68/tcp # BOOTP client
+bootpc 68/udp
+tftp 69/udp
+gopher 70/tcp # Internet Gopher
+gopher 70/udp
+rje 77/tcp netrjs
+finger 79/tcp
+www 80/tcp http # WorldWideWeb HTTP
+www 80/udp # HyperText Transfer Protocol
+link 87/tcp ttylink
+kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5
+kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5
+supdup 95/tcp
+hostnames 101/tcp hostname # usually from sri-nic
+iso-tsap 102/tcp tsap # part of ISODE
+acr-nema 104/tcp dicom # Digital Imag. & Comm. 300
+acr-nema 104/udp dicom # Digital Imag. & Comm. 300
+csnet-ns 105/tcp cso-ns # also used by CSO name server
+csnet-ns 105/udp cso-ns
+rtelnet 107/tcp # Remote Telnet
+rtelnet 107/udp
+pop2 109/tcp postoffice pop-2 # POP version 2
+pop2 109/udp pop-2
+pop3 110/tcp pop-3 # POP version 3
+pop3 110/udp pop-3
+sunrpc 111/tcp portmapper # RPC 4.0 portmapper
+sunrpc 111/udp portmapper
+auth 113/tcp authentication tap ident
+sftp 115/tcp
+uucp-path 117/tcp
+nntp 119/tcp readnews untp # USENET News Transfer Protocol
+ntp 123/tcp
+ntp 123/udp # Network Time Protocol
+pwdgen 129/tcp # PWDGEN service
+pwdgen 129/udp # PWDGEN service
+loc-srv 135/tcp epmap # Location Service
+loc-srv 135/udp epmap
+netbios-ns 137/tcp # NETBIOS Name Service
+netbios-ns 137/udp
+netbios-dgm 138/tcp # NETBIOS Datagram Service
+netbios-dgm 138/udp
+netbios-ssn 139/tcp # NETBIOS session service
+netbios-ssn 139/udp
+imap2 143/tcp imap # Interim Mail Access P 2 and 4
+imap2 143/udp imap
+snmp 161/tcp # Simple Net Mgmt Protocol
+snmp 161/udp # Simple Net Mgmt Protocol
+snmp-trap 162/tcp snmptrap # Traps for SNMP
+snmp-trap 162/udp snmptrap # Traps for SNMP
+cmip-man 163/tcp # ISO mgmt over IP (CMOT)
+cmip-man 163/udp
+cmip-agent 164/tcp
+cmip-agent 164/udp
+mailq 174/tcp # Mailer transport queue for Zmailer
+mailq 174/udp # Mailer transport queue for Zmailer
+xdmcp 177/tcp # X Display Mgr. Control Proto
+xdmcp 177/udp
+nextstep 178/tcp NeXTStep NextStep # NeXTStep window
+nextstep 178/udp NeXTStep NextStep # server
+bgp 179/tcp # Border Gateway Protocol
+bgp 179/udp
+prospero 191/tcp # Cliff Neuman's Prospero
+prospero 191/udp
+irc 194/tcp # Internet Relay Chat
+irc 194/udp
+smux 199/tcp # SNMP Unix Multiplexer
+smux 199/udp
+at-rtmp 201/tcp # AppleTalk routing
+at-rtmp 201/udp
+at-nbp 202/tcp # AppleTalk name binding
+at-nbp 202/udp
+at-echo 204/tcp # AppleTalk echo
+at-echo 204/udp
+at-zis 206/tcp # AppleTalk zone information
+at-zis 206/udp
+qmtp 209/tcp # Quick Mail Transfer Protocol
+qmtp 209/udp # Quick Mail Transfer Protocol
+z3950 210/tcp wais # NISO Z39.50 database
+z3950 210/udp wais
+ipx 213/tcp # IPX
+ipx 213/udp
+imap3 220/tcp # Interactive Mail Access
+imap3 220/udp # Protocol v3
+pawserv 345/tcp # Perf Analysis Workbench
+pawserv 345/udp
+zserv 346/tcp # Zebra server
+zserv 346/udp
+fatserv 347/tcp # Fatmen Server
+fatserv 347/udp
+rpc2portmap 369/tcp
+rpc2portmap 369/udp # Coda portmapper
+codaauth2 370/tcp
+codaauth2 370/udp # Coda authentication server
+clearcase 371/tcp Clearcase
+clearcase 371/udp Clearcase
+ulistserv 372/tcp # UNIX Listserv
+ulistserv 372/udp
+ldap 389/tcp # Lightweight Directory Access Protocol
+ldap 389/udp
+imsp 406/tcp # Interactive Mail Support Protocol
+imsp 406/udp
+https 443/tcp # http protocol over TLS/SSL
+https 443/udp
+snpp 444/tcp # Simple Network Paging Protocol
+snpp 444/udp
+microsoft-ds 445/tcp # Microsoft Naked CIFS
+microsoft-ds 445/udp
+kpasswd 464/tcp
+kpasswd 464/udp
+saft 487/tcp # Simple Asynchronous File Transfer
+saft 487/udp
+isakmp 500/tcp # IPsec - Internet Security Association
+isakmp 500/udp # and Key Management Protocol
+rtsp 554/tcp # Real Time Stream Control Protocol
+rtsp 554/udp # Real Time Stream Control Protocol
+nqs 607/tcp # Network Queuing system
+nqs 607/udp
+npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS
+npmp-local 610/udp dqs313_qmaster
+npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS
+npmp-gui 611/udp dqs313_execd
+hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS
+hmmp-ind 612/udp dqs313_intercell
+ipp 631/tcp # Internet Printing Protocol
+ipp 631/udp
+#
+# UNIX specific services
+#
+exec 512/tcp
+biff 512/udp comsat
+login 513/tcp
+who 513/udp whod
+shell 514/tcp cmd # no passwords used
+syslog 514/udp
+printer 515/tcp spooler # line printer spooler
+talk 517/udp
+ntalk 518/udp
+route 520/udp router routed # RIP
+timed 525/udp timeserver
+tempo 526/tcp newdate
+courier 530/tcp rpc
+conference 531/tcp chat
+netnews 532/tcp readnews
+netwall 533/udp # for emergency broadcasts
+gdomap 538/tcp # GNUstep distributed objects
+gdomap 538/udp
+uucp 540/tcp uucpd # uucp daemon
+klogin 543/tcp # Kerberized `rlogin' (v5)
+kshell 544/tcp krcmd # Kerberized `rsh' (v5)
+afpovertcp 548/tcp # AFP over TCP
+afpovertcp 548/udp
+remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
+nntps 563/tcp snntp # NNTP over SSL
+nntps 563/udp snntp
+submission 587/tcp # Submission [RFC2476]
+submission 587/udp
+ldaps 636/tcp # LDAP over SSL
+ldaps 636/udp
+tinc 655/tcp # tinc control port
+tinc 655/udp
+silc 706/tcp
+silc 706/udp
+kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
+#
+webster 765/tcp # Network dictionary
+webster 765/udp
+rsync 873/tcp
+rsync 873/udp
+ftps-data 989/tcp # FTP over SSL (data)
+ftps 990/tcp
+telnets 992/tcp # Telnet over SSL
+telnets 992/udp
+imaps 993/tcp # IMAP over SSL
+imaps 993/udp
+ircs 994/tcp # IRC over SSL
+ircs 994/udp
+pop3s 995/tcp # POP-3 over SSL
+pop3s 995/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations. For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined. This list specifies the port used by the server process as its
+#> contact port. While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+socks 1080/tcp # socks proxy server
+socks 1080/udp
+proofd 1093/tcp
+proofd 1093/udp
+rootd 1094/tcp
+rootd 1094/udp
+openvpn 1194/tcp
+openvpn 1194/udp
+rmiregistry 1099/tcp # Java RMI Registry
+rmiregistry 1099/udp
+kazaa 1214/tcp
+kazaa 1214/udp
+nessus 1241/tcp # Nessus vulnerability
+nessus 1241/udp # assessment scanner
+lotusnote 1352/tcp lotusnotes # Lotus Note
+lotusnote 1352/udp lotusnotes
+ms-sql-s 1433/tcp # Microsoft SQL Server
+ms-sql-s 1433/udp
+ms-sql-m 1434/tcp # Microsoft SQL Monitor
+ms-sql-m 1434/udp
+ingreslock 1524/tcp
+ingreslock 1524/udp
+prospero-np 1525/tcp # Prospero non-privileged
+prospero-np 1525/udp
+datametrics 1645/tcp old-radius
+datametrics 1645/udp old-radius
+sa-msg-port 1646/tcp old-radacct
+sa-msg-port 1646/udp old-radacct
+kermit 1649/tcp
+kermit 1649/udp
+l2f 1701/tcp l2tp
+l2f 1701/udp l2tp
+radius 1812/tcp
+radius 1812/udp
+radius-acct 1813/tcp radacct # Radius Accounting
+radius-acct 1813/udp radacct
+msnp 1863/tcp # MSN Messenger
+msnp 1863/udp
+unix-status 1957/tcp # remstats unix-status server
+log-server 1958/tcp # remstats log server
+remoteping 1959/tcp # remstats remoteping server
+nfs 2049/tcp # Network File System
+nfs 2049/udp # Network File System
+rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99
+rtcm-sc104 2101/udp
+cvspserver 2401/tcp # CVS client/server operations
+cvspserver 2401/udp
+venus 2430/tcp # codacon port
+venus 2430/udp # Venus callback/wbc interface
+venus-se 2431/tcp # tcp side effects
+venus-se 2431/udp # udp sftp side effect
+codasrv 2432/tcp # not used
+codasrv 2432/udp # server port
+codasrv-se 2433/tcp # tcp side effects
+codasrv-se 2433/udp # udp sftp side effect
+mon 2583/tcp # MON
+mon 2583/udp
+dict 2628/tcp # Dictionary server
+dict 2628/udp
+gpsd 2947/tcp
+gpsd 2947/udp
+gds_db 3050/tcp # InterBase server
+gds_db 3050/udp
+icpv2 3130/tcp icp # Internet Cache Protocol
+icpv2 3130/udp icp
+mysql 3306/tcp
+mysql 3306/udp
+nut 3493/tcp # Network UPS Tools
+nut 3493/udp
+distcc 3632/tcp # distributed compiler
+distcc 3632/udp
+daap 3689/tcp # Digital Audio Access Protocol
+daap 3689/udp
+svn 3690/tcp subversion # Subversion protocol
+svn 3690/udp subversion
+suucp 4013/tcp # UUCP over SSL
+suucp 4013/udp # UUCP over SSL
+sysrqd 4094/tcp # sysrq daemon
+sysrqd 4094/udp # sysrq daemon
+iax 4569/tcp # Inter-Asterisk eXchange
+iax 4569/udp
+radmin-port 4899/tcp # RAdmin Port
+radmin-port 4899/udp
+rfe 5002/udp # Radio Free Ethernet
+rfe 5002/tcp
+mmcc 5050/tcp # multimedia conference control tool (Yahoo IM)
+mmcc 5050/udp
+sip 5060/tcp # Session Initiation Protocol
+sip 5060/udp
+sip-tls 5061/tcp
+sip-tls 5061/udp
+aol 5190/tcp # AIM
+aol 5190/udp
+xmpp-client 5222/tcp jabber-client # Jabber Client Connection
+xmpp-client 5222/udp jabber-client
+xmpp-server 5269/tcp jabber-server # Jabber Server Connection
+xmpp-server 5269/udp jabber-server
+cfengine 5308/tcp
+cfengine 5308/udp
+mdns 5353/tcp # Multicast DNS
+mdns 5353/udp # Multicast DNS
+postgresql 5432/tcp postgres # PostgreSQL Database
+postgresql 5432/udp postgres
+ggz 5688/tcp # GGZ Gaming Zone
+ggz 5688/udp # GGZ Gaming Zone
+x11 6000/tcp x11-0 # X Window System
+x11 6000/udp x11-0
+x11-1 6001/tcp
+x11-1 6001/udp
+x11-2 6002/tcp
+x11-2 6002/udp
+x11-3 6003/tcp
+x11-3 6003/udp
+x11-4 6004/tcp
+x11-4 6004/udp
+x11-5 6005/tcp
+x11-5 6005/udp
+x11-6 6006/tcp
+x11-6 6006/udp
+x11-7 6007/tcp
+x11-7 6007/udp
+gnutella-svc 6346/tcp # gnutella
+gnutella-svc 6346/udp
+gnutella-rtr 6347/tcp # gnutella
+gnutella-rtr 6347/udp
+sge_qmaster 6444/tcp # Grid Engine Qmaster Service
+sge_qmaster 6444/udp # Grid Engine Qmaster Service
+sge_execd 6445/tcp # Grid Engine Execution Service
+sge_execd 6445/udp # Grid Engine Execution Service
+afs3-fileserver 7000/tcp bbs # file server itself
+afs3-fileserver 7000/udp bbs
+afs3-callback 7001/tcp # callbacks to cache managers
+afs3-callback 7001/udp
+afs3-prserver 7002/tcp # users & groups database
+afs3-prserver 7002/udp
+afs3-vlserver 7003/tcp # volume location database
+afs3-vlserver 7003/udp
+afs3-kaserver 7004/tcp # AFS/Kerberos authentication
+afs3-kaserver 7004/udp
+afs3-volser 7005/tcp # volume managment server
+afs3-volser 7005/udp
+afs3-errors 7006/tcp # error interpretation service
+afs3-errors 7006/udp
+afs3-bos 7007/tcp # basic overseer process
+afs3-bos 7007/udp
+afs3-update 7008/tcp # server-to-server updater
+afs3-update 7008/udp
+afs3-rmtsys 7009/tcp # remote cache manager service
+afs3-rmtsys 7009/udp
+font-service 7100/tcp xfs # X Font Service
+font-service 7100/udp xfs
+bacula-dir 9101/tcp # Bacula Director
+bacula-dir 9101/udp
+bacula-fd 9102/tcp # Bacula File Daemon
+bacula-fd 9102/udp
+bacula-sd 9103/tcp # Bacula Storage Daemon
+bacula-sd 9103/udp
+amanda 10080/tcp # amanda backup services
+amanda 10080/udp
+hkp 11371/tcp # OpenPGP HTTP Keyserver
+hkp 11371/udp # OpenPGP HTTP Keyserver
+bprd 13720/tcp # VERITAS NetBackup
+bprd 13720/udp
+bpdbm 13721/tcp # VERITAS NetBackup
+bpdbm 13721/udp
+bpjava-msvc 13722/tcp # BP Java MSVC Protocol
+bpjava-msvc 13722/udp
+vnetd 13724/tcp # Veritas Network Utility
+vnetd 13724/udp
+bpcd 13782/tcp # VERITAS NetBackup
+bpcd 13782/udp
+vopied 13783/tcp # VERITAS NetBackup
+vopied 13783/udp
+wnn6 22273/tcp # wnn6
+wnn6 22273/udp
+
+#
+# Datagram Delivery Protocol services
+#
+rtmp 1/ddp # Routing Table Maintenance Protocol
+nbp 2/ddp # Name Binding Protocol
+echo 4/ddp # AppleTalk Echo Protocol
+zip 6/ddp # Zone Information Protocol
+
+#=========================================================================
+# The remaining port numbers are not as allocated by IANA.
+#=========================================================================
+
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial. Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+kerberos4 750/udp kerberos-iv kdc # Kerberos (server)
+kerberos4 750/tcp kerberos-iv kdc
+kerberos_master 751/udp # Kerberos authentication
+kerberos_master 751/tcp
+passwd_server 752/udp # Kerberos passwd server
+krb_prop 754/tcp krb5_prop hprop # Kerberos slave propagation
+krbupdate 760/tcp kreg # Kerberos registration
+swat 901/tcp # swat
+kpop 1109/tcp # Pop with Kerberos
+knetd 2053/tcp # Kerberos de-multiplexor
+zephyr-srv 2102/udp # Zephyr server
+zephyr-clt 2103/udp # Zephyr serv-hm connection
+zephyr-hm 2104/udp # Zephyr hostmanager
+eklogin 2105/tcp # Kerberos encrypted rlogin
+# Hmmm. Are we using Kv4 or Kv5 now? Worrying.
+# The following is probably Kerberos v5 --- ajt@debian.org (11/02/2000)
+kx 2111/tcp # X over Kerberos
+iprop 2121/tcp # incremental propagation
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv 871/tcp # SUP server
+supfiledbg 1127/tcp # SUP debugging
+
+#
+# Services added for the Debian GNU/Linux distribution
+#
+linuxconf 98/tcp # LinuxConf
+poppassd 106/tcp # Eudora
+poppassd 106/udp
+ssmtp 465/tcp smtps # SMTP over SSL
+moira_db 775/tcp # Moira database
+moira_update 777/tcp # Moira update protocol
+moira_ureg 779/udp # Moira user registration
+spamd 783/tcp # spamassassin daemon
+omirr 808/tcp omirrd # online mirror
+omirr 808/udp omirrd
+customs 1001/tcp # pmake customs server
+customs 1001/udp
+skkserv 1178/tcp # skk jisho server port
+predict 1210/udp # predict -- satellite tracking
+rmtcfg 1236/tcp # Gracilis Packeten remote config server
+wipld 1300/tcp # Wipl network monitor
+xtel 1313/tcp # french minitel
+xtelw 1314/tcp # french minitel
+support 1529/tcp # GNATS
+sieve 2000/tcp # Sieve mail filter daemon
+cfinger 2003/tcp # GNU Finger
+ndtp 2010/tcp # Network dictionary transfer protocol
+frox 2121/tcp # frox: caching ftp proxy
+ninstall 2150/tcp # ninstall service
+ninstall 2150/udp
+zebrasrv 2600/tcp # zebra service
+zebra 2601/tcp # zebra vty
+ripd 2602/tcp # ripd vty (zebra)
+ripngd 2603/tcp # ripngd vty (zebra)
+ospfd 2604/tcp # ospfd vty (zebra)
+bgpd 2605/tcp # bgpd vty (zebra)
+ospf6d 2606/tcp # ospf6d vty (zebra)
+ospfapi 2607/tcp # OSPF-API
+isisd 2608/tcp # ISISd vty (zebra)
+afbackup 2988/tcp # Afbackup system
+afbackup 2988/udp
+afmbackup 2989/tcp # Afmbackup system
+afmbackup 2989/udp
+xtell 4224/tcp # xtell server
+fax 4557/tcp # FAX transmission service (old)
+hylafax 4559/tcp # HylaFAX client-server protocol (new)
+distmp3 4600/tcp # distmp3host daemon
+munin 4949/tcp lrrd # Munin
+enbd-cstatd 5051/tcp # ENBD client statd
+enbd-sstatd 5052/tcp # ENBD server statd
+pcrd 5151/tcp # PCR-1000 Daemon
+noclog 5354/tcp # noclogd with TCP (nocol)
+noclog 5354/udp # noclogd with UDP (nocol)
+hostmon 5355/tcp # hostmon uses TCP (nocol)
+hostmon 5355/udp # hostmon uses UDP (nocol)
+rplay 5555/udp # RPlay audio service
+rplay 5555/tcp
+rptp 5556/udp # Remote Play Transfer Protocol
+rptp 5556/tcp
+nsca 5667/tcp # Nagios Agent - NSCA
+mrtd 5674/tcp # MRT Routing Daemon
+bgpsim 5675/tcp # MRT Routing Simulator
+canna 5680/tcp # cannaserver
+sane-port 6566/tcp sane saned # SANE network scanner daemon
+ircd 6667/tcp # Internet Relay Chat
+zope-ftp 8021/tcp # zope management by ftp
+webcache 8080/tcp # WWW caching service
+tproxy 8081/tcp # Transparent Proxy
+omniorb 8088/tcp # OmniORB
+omniorb 8088/udp
+clc-build-daemon 8990/tcp # Common lisp build daemon
+xinetd 9098/tcp
+mandelspawn 9359/udp mandelbrot # network mandelbrot
+git 9418/tcp # Git Version Control System
+zope 9673/tcp # zope server
+webmin 10000/tcp
+kamanda 10081/tcp # amanda backup services (Kerberos)
+kamanda 10081/udp
+amandaidx 10082/tcp # amanda backup services
+amidxtape 10083/tcp # amanda backup services
+smsqp 11201/tcp # Alamin SMS gateway
+smsqp 11201/udp
+xpilot 15345/tcp # XPilot Contact Port
+xpilot 15345/udp
+sgi-cmsd 17001/udp # Cluster membership services daemon
+sgi-crsd 17002/udp
+sgi-gcd 17003/udp # SGI Group membership daemon
+sgi-cad 17004/tcp # Cluster Admin daemon
+isdnlog 20011/tcp # isdn logging system
+isdnlog 20011/udp
+vboxd 20012/tcp # voice box system
+vboxd 20012/udp
+binkp 24554/tcp # binkp fidonet protocol
+asp 27374/tcp # Address Search Protocol
+asp 27374/udp
+csync2 30865/tcp # cluster synchronization tool
+dircproxy 57000/tcp # Detachable IRC Proxy
+tfido 60177/tcp # fidonet EMSI over telnet
+fido 60179/tcp # fidonet EMSI over TCP
+
+# Local services
diff --git a/abs/core/filesystem/shadow b/abs/core/filesystem/shadow
new file mode 100644
index 0000000..6d4a8be
--- /dev/null
+++ b/abs/core/filesystem/shadow
@@ -0,0 +1,7 @@
+root::99999::::::
+bin:x:0::::::
+daemon:x:0::::::
+mail:x:0::::::
+ftp:x:0::::::
+http:x:0::::::
+nobody:x:0::::::
diff --git a/abs/core/filesystem/shells b/abs/core/filesystem/shells
new file mode 100644
index 0000000..ff9e383
--- /dev/null
+++ b/abs/core/filesystem/shells
@@ -0,0 +1,9 @@
+#
+# /etc/shells
+#
+
+/bin/sh
+/bin/bash
+/bin/dash
+
+# End of file
diff --git a/abs/core/findutils/PKGBUILD b/abs/core/findutils/PKGBUILD
new file mode 100644
index 0000000..0027aca
--- /dev/null
+++ b/abs/core/findutils/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 2673 2008-06-11 02:45:30Z eric $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=findutils
+pkgver=4.4.0
+pkgrel=10
+pkgdesc="GNU utilities to locate files"
+arch=(i686 x86_64)
+license=('GPL3')
+groups=('base')
+depends=('glibc>=2.8')
+url="http://www.gnu.org/software/findutils"
+source=(ftp://ftp.gnu.org/pub/gnu/findutils/findutils-$pkgver.tar.gz)
+md5sums=('49e769ac4382fae6f104f99d54d0a112')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ # believe it or not, the Makefile really wants to remove /usr/var, so
+ # we let it...
+ mkdir -p $startdir/pkg/usr/var
+ make DESTDIR=$startdir/pkg install
+ rm -rf $startdir/pkg/usr/libexec
+
+ # remove locate utils (we use slocate instead)
+ rm -f $startdir/pkg/usr/bin/{locate,updatedb}
+ rm -f $startdir/pkg/usr/share/man/man1/{updatedb.1,locate.1}
+ rm -f $startdir/pkg/usr/share/man/man5/locatedb.5
+ rmdir $startdir/pkg/usr/var
+}
diff --git a/abs/core/fixesproto/PKGBUILD b/abs/core/fixesproto/PKGBUILD
new file mode 100644
index 0000000..2f77d60
--- /dev/null
+++ b/abs/core/fixesproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fixesproto
+pkgver=4.0
+pkgrel=2
+pkgdesc="X11 Fixes extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xproto xextproto)
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(8b298cc3424597f8138c7faf7763dce9)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/flac/PKGBUILD b/abs/core/flac/PKGBUILD
new file mode 100644
index 0000000..ce31e8b
--- /dev/null
+++ b/abs/core/flac/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=flac
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="Free Lossless Audio Codec"
+license=('custom:Xiph' 'LGPL' 'GPL' 'FDL')
+url="http://flac.sourceforge.net/"
+arch=(i686 x86_64)
+options=('!libtool')
+depends=('glibc' 'libogg')
+makedepends=('nasm' 'xmms')
+source=(http://downloads.sf.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz \
+ flac-1.2.1-gcc43.patch)
+md5sums=('153c8b15a54da428d1f0fadc756c22c7' '4922379f33c86792630b624ddc83b236')
+
+build() {
+ # -j1 to get the xmms plugin working (from gentoo)
+ export MAKEFLAGS="-j1"
+ cd $startdir/src/$pkgname-$pkgver || return 1
+ patch -Np1 -i $startdir/src/flac-1.2.1-gcc43.patch
+ ./configure --prefix=/usr --enable-shared --disable-sse \
+ --disable-rpath --with-pic || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # install license
+ install -Dm0644 $startdir/src/$pkgname-$pkgver/COPYING.Xiph \
+ $startdir/pkg/usr/share/licenses/$pkgname/COPYING.Xiph
+}
+
diff --git a/abs/core/flac/flac-1.2.1-gcc43.patch b/abs/core/flac/flac-1.2.1-gcc43.patch
new file mode 100644
index 0000000..d8e8ab9
--- /dev/null
+++ b/abs/core/flac/flac-1.2.1-gcc43.patch
@@ -0,0 +1,10 @@
+--- flac-1.2.1/examples/cpp/encode/file/main.cpp.gcc43 2007-09-13 17:58:03.000000000 +0200
++++ flac-1.2.1/examples/cpp/encode/file/main.cpp 2008-01-08 10:27:39.000000000 +0100
+@@ -29,6 +29,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <string.h>
+ #include <stdlib.h>
+ #include "FLAC++/metadata.h"
+ #include "FLAC++/encoder.h"
diff --git a/abs/core/flac/flac-linking.diff b/abs/core/flac/flac-linking.diff
new file mode 100644
index 0000000..3f9f595
--- /dev/null
+++ b/abs/core/flac/flac-linking.diff
@@ -0,0 +1,12 @@
+diff -ur flac-1.1.2-orig/configure flac-1.1.2/configure
+--- flac-1.1.2-orig/configure 2005-07-24 17:58:19.180907080 +0100
++++ flac-1.1.2/configure 2005-07-24 17:58:59.139832400 +0100
+@@ -3462,7 +3462,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* | x86_64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
diff --git a/abs/core/flac/xmms-plugin.patch b/abs/core/flac/xmms-plugin.patch
new file mode 100644
index 0000000..e5fcf2e
--- /dev/null
+++ b/abs/core/flac/xmms-plugin.patch
@@ -0,0 +1,11 @@
+--- src/plugin_xmms/configure.c.old 2005-04-08 12:16:17.000000000 +0200
++++ src/plugin_xmms/configure.c 2005-04-08 12:16:41.000000000 +0200
+@@ -61,7 +61,7 @@
+ "", /* proxy_user */
+ "", /* proxy_pass */
+ FALSE, /* save_http_stream */
+- "", /* save_http_path */
++ FALSE, /* save_http_path */
+ FALSE, /* cast_title_streaming */
+ FALSE /* use_udp_channel */
+ },
diff --git a/abs/core/fltk/PKGBUILD b/abs/core/fltk/PKGBUILD
new file mode 100644
index 0000000..f1bbbb1
--- /dev/null
+++ b/abs/core/fltk/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 1248 2008-05-02 22:01:06Z tobias $
+# Maintainer: roberto <roberto@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Updated to produce shared libs: Andrew Rose <ody@netrux.com>
+
+pkgname=fltk
+pkgver=1.1.9
+pkgrel=1
+pkgdesc="Graphical user interface toolkit for X"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://www.fltk.org/"
+depends=('libjpeg' 'libpng' 'gcc-libs' 'libxft' 'libxext')
+makedepends=('mesa')
+source=(http://ftp.easysw.com/pub/$pkgname/$pkgver/$pkgname-$pkgver-source.tar.bz2)
+md5sums=('e146fd264e1001b1313acfd41ef75552')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-threads --enable-xft --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/fluxbox/PKGBUILD b/abs/core/fluxbox/PKGBUILD
new file mode 100644
index 0000000..9d09c63
--- /dev/null
+++ b/abs/core/fluxbox/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 1350 2008-05-05 22:19:58Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=fluxbox
+pkgver=1.0.0
+pkgrel=1
+pkgdesc="A lightweight and highly-configurable window manager"
+arch=('i686' 'x86_64')
+url="http://www.fluxbox.org"
+license=('MIT')
+depends=('libxft' 'libxpm' 'libxinerama' 'libxrandr' 'gcc-libs' 'bash' 'imlib2')
+makedepends=('pkgconfig')
+options=('!makeflags')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ $pkgname.desktop fluxbox-1.0.0-gcc43.patch)
+md5sums=('990e276ead0d04421dce4080f485caca' 'eeae9c88a2526ac0bd8afcd9ce97f9ed'\
+ '9ddb3fcd5f080574a44f394282132b3c')
+sha1sums=('7985e35fbb170fda24b9e04610690cd04c7a8748'
+ 'f3f83b8ce84d79c2f8670ef687e0dd89ab0552b8'
+ '51de3957bacfc4848529ba7df80bddca59b1a20b')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}
+ patch -p1 < ../fluxbox-1.0.0-gcc43.patch || return 1
+ ./configure --prefix=/usr \
+ --enable-kde --enable-gnome \
+ --enable-xft --enable-xinerama \
+ --enable-imlib2 --enable-nls
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # this is a fix to allow fluxbox to shutdown, but this can be changed by the user :-(
+ sed -i 's|^.*slit\.autoHide.*$|session.screen0.slit.autoHide: True|' \
+ $startdir/pkg/usr/share/fluxbox/init
+ install -D -m644 ../$pkgname.desktop \
+ $startdir/pkg/etc/X11/sessions/$pkgname.desktop
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core/fluxbox/fluxbox-1.0.0-gcc43.patch b/abs/core/fluxbox/fluxbox-1.0.0-gcc43.patch
new file mode 100644
index 0000000..2e7db28
--- /dev/null
+++ b/abs/core/fluxbox/fluxbox-1.0.0-gcc43.patch
@@ -0,0 +1,10 @@
+--- fluxbox-1.0.0-orig/src/main.cc 2007-08-11 14:22:20.000000000 -0400
++++ fluxbox-1.0.0/src/main.cc 2008-05-05 15:14:59.000000000 -0400
+@@ -49,6 +49,7 @@
+ #include <fstream>
+ #include <stdexcept>
+ #include <typeinfo>
++#include <cstring>
+
+ using std::cout;
+ using std::cerr;
diff --git a/abs/core/fluxbox/fluxbox.desktop b/abs/core/fluxbox/fluxbox.desktop
new file mode 100644
index 0000000..418d29a
--- /dev/null
+++ b/abs/core/fluxbox/fluxbox.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=XSession
+Exec=/usr/bin/startfluxbox
+TryExec=/usr/bin/startfluxbox
+Name=fluxbox
diff --git a/abs/core/fontcacheproto/PKGBUILD b/abs/core/fontcacheproto/PKGBUILD
new file mode 100644
index 0000000..5bc123b
--- /dev/null
+++ b/abs/core/fontcacheproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fontcacheproto
+pkgver=0.1.2
+pkgrel=1
+pkgdesc="X11 font cache extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('60df6b625074a9790e28543dcea71651')
+sha1sums=('6a531ef505ba2f7c1aa884bb4efdac3e32dfd99b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/fontconfig/29-replace-bitmap-fonts.conf b/abs/core/fontconfig/29-replace-bitmap-fonts.conf
new file mode 100644
index 0000000..7ac4483
--- /dev/null
+++ b/abs/core/fontconfig/29-replace-bitmap-fonts.conf
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <!-- Replace generic bitmap font names by generic font families.
+ These font-families will get replaced by other rules and
+ default to scaled ones. -->
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Helvetica</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Arial</string>
+ <string>Liberation Sans</string>
+ <string>sans-serif</string>
+ </edit>
+ </match>
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Courier</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Courier New</string>
+ <string>Liberation Mono</string>
+ <string>monospace</string>
+ </edit>
+ </match>
+ <match target="pattern" name="family">
+ <test name="family" qual="any">
+ <string>Times</string>
+ </test>
+ <edit mode="assign" name="family">
+ <string>Times New Roman</string>
+ <string>Liberation Serif</string>
+ <string>serif</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/abs/core/fontconfig/PKGBUILD b/abs/core/fontconfig/PKGBUILD
new file mode 100644
index 0000000..7abdf6d
--- /dev/null
+++ b/abs/core/fontconfig/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 4424 2008-07-06 22:09:03Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=fontconfig
+pkgver=2.6.0
+pkgrel=2
+pkgdesc="A library for configuring and customizing font access"
+arch=(i686 x86_64)
+url="http://www.fontconfig.org/release/"
+license=('custom')
+depends=('expat>=2.0' 'freetype2>=2.3.7')
+options=('!libtool')
+install=fontconfig.install
+source=(http://www.fontconfig.org/release/${pkgname}-${pkgver}.tar.gz
+ 29-replace-bitmap-fonts.conf)
+md5sums=('ab54ec1d4ddd836313fdbc0cd5299d6d'
+ 'f6b67e8cc79197ed6abd4701911e83da')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ # enable Position Independent Code for prelinking
+ export CFLAGS="${CFLAGS} -fPIC"
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 ${startdir}/src/29-replace-bitmap-fonts.conf \
+ ${startdir}/pkg/etc/fonts/conf.avail || return 1
+ rm -f ${startdir}/pkg/etc/fonts/conf.d/*.conf
+
+ #Install license
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/fontconfig/fontconfig.install b/abs/core/fontconfig/fontconfig.install
new file mode 100644
index 0000000..6608834
--- /dev/null
+++ b/abs/core/fontconfig/fontconfig.install
@@ -0,0 +1,100 @@
+configs=('20-fix-globaladvance.conf'
+ '20-unhint-small-vera.conf'
+ '29-replace-bitmap-fonts.conf'
+ '30-metric-aliases.conf'
+ '30-urw-aliases.conf'
+ '40-nonlatin.conf'
+ '45-latin.conf'
+ '49-sansserif.conf'
+ '50-user.conf'
+ '51-local.conf'
+ '60-latin.conf'
+ '65-fonts-persian.conf'
+ '65-nonlatin.conf'
+ '69-unifont.conf'
+ '80-delicious.conf'
+ '90-synthetic.conf')
+
+post_install() {
+ echo -n "updating font cache... "
+ /sbin/ldconfig -r .
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ ln -sf ../conf.avail/${config} .
+ done
+ popd > /dev/null
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+post_upgrade() {
+ rm -f /etc/fonts/conf.d/10-bitmaps.conf
+ cat << _EOF
+
+===> Important Fontconfig configuration change <===
+
+ The way fontconfig is configured has been changed.
+ Configuration is done via /etc/fonts/conf.avail and conf.d.
+ Read /etc/fonts/conf.avail/README for more information.
+
+ Configuration via /etc/fonts/local.conf is still possible,
+ but is no longer recommended for options available in conf.avail.
+
+_EOF
+
+ if [ `vercmp 2.4.1-1 $2` -gt 0 ]; then
+ # Upgrade from old version, place all symlinks. pre-symlink package version
+ echo -n "Linking configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ ln -sf ../conf.avail/${config} .
+ done
+ popd > /dev/null
+ echo "done."
+ fi
+
+ if [ `vercmp 2.6.0-1 $2` -gt 0 ]; then
+ # pre-2.6.0 versions have missing config
+ echo -n "Adding missing configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ ln -sf ../conf.avail/30-metric-aliases.conf .
+ ln -sf ../conf.avail/40-nonlatin.conf .
+ ln -sf ../conf.avail/45-latin.conf .
+ popd > /dev/null
+ echo "done."
+ fi
+
+ # Remove dead links
+ echo -n "Removing outdated configuration files... "
+ for config in /etc/fonts/conf.d/*; do
+ if [ ! -f ${config} ]; then
+ rm -f ${config}
+ fi
+ done
+ echo "done."
+
+ echo -n "updating font cache... "
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+pre_upgrade() {
+ # Link new config files not present on system yet
+ echo -n "Symlinking new configuration files... "
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ if [ ! -f ../conf.avail/${config} ]; then
+ ln -sf ../conf.avail/${config} .
+ fi
+ done
+ popd > /dev/null
+ echo "done."
+}
+
+post_remove() {
+ pushd /etc/fonts/conf.d > /dev/null
+ for config in "${configs[@]}"; do
+ rm -f ${config}
+ done
+ popd > /dev/null
+}
diff --git a/abs/core/fontsproto/PKGBUILD b/abs/core/fontsproto/PKGBUILD
new file mode 100644
index 0000000..7847a5c
--- /dev/null
+++ b/abs/core/fontsproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=fontsproto
+pkgver=2.0.2
+pkgrel=1
+pkgdesc="X11 font extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('c946f166107b016a21cc7a02e1132724')
+sha1sums=('1244f63bd90668c7ddc88febbf4a220fd83ea492')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/freeglut/PKGBUILD b/abs/core/freeglut/PKGBUILD
new file mode 100644
index 0000000..402ef70
--- /dev/null
+++ b/abs/core/freeglut/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=freeglut
+pkgver=2.4.0
+pkgrel=3
+pkgdesc="Provides functionality for small OpenGL programs"
+arch=('i686' 'x86_64')
+url="http://freeglut.sourceforge.net/"
+license=('custom')
+depends=('libxxf86vm' 'mesa')
+replaces=('glut')
+provides=('glut')
+conflicts=('glut')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/freeglut/${pkgname}-${pkgver}.tar.gz \
+ glut-cursor-inherit.patch)
+md5sums=('6d16873bd876fbf4980a927cfbc496a1' 'd6ba7e22ebb0fd7904b8e18c97475ba6')
+sha1sums=('91a528aa72758b7288a0d69a964b1b7e3f322a12' '9353d7b811fdfd6f0c5766f0e93924ca63e9d6a9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/glut-cursor-inherit.patch || return 1
+ sed -i 's/-Werror//' configure
+ ./configure --prefix=/usr
+ make all || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core/freeglut/glut-cursor-inherit.patch b/abs/core/freeglut/glut-cursor-inherit.patch
new file mode 100644
index 0000000..b56a37c
--- /dev/null
+++ b/abs/core/freeglut/glut-cursor-inherit.patch
@@ -0,0 +1,23 @@
+--- freeglut-2.4.0.orig/src/freeglut_cursor.c
++++ freeglut-2.4.0/src/freeglut_cursor.c
+@@ -130,7 +130,9 @@
+ XCreateFontCursor( fgDisplay.Display, entry->cursorShape );
+ }
+ cursor = entry->cachedCursor;
+- } else {
++ if (cursor == None)
++ fgError( "Failed to create cursor" );
++ } else {
+ switch( cursorIDToUse )
+ {
+ case GLUT_CURSOR_NONE:
+@@ -147,9 +149,6 @@
+ }
+ }
+
+- if ( ( cursorIDToUse != GLUT_CURSOR_NONE ) && ( cursor == None ) ) {
+- fgError( "Failed to create cursor" );
+- }
+ XDefineCursor( fgDisplay.Display,
+ window->Window.Handle, cursor );
+ }
diff --git a/abs/core/freetype2/PKGBUILD b/abs/core/freetype2/PKGBUILD
new file mode 100644
index 0000000..177f421
--- /dev/null
+++ b/abs/core/freetype2/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 4337 2008-07-06 17:43:50Z jgc $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=freetype2
+pkgver=2.3.7
+pkgrel=1
+pkgdesc="TrueType font rendering library"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://freetype.sourceforge.net"
+depends=('zlib')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/freetype/freetype-${pkgver}.tar.bz2
+ bytecode.patch
+ freetype-2.3.0-enable-spr.patch
+ freetype-2.2.1-enable-valid.patch
+ freetype-2.2.1-memcpy-fix.patch)
+md5sums=('83306194817ebdea554133b4232a34aa'
+ '9ff19e742968c29e3ba52b08d6bf0a50'
+ '816dc8619a6904a7385769433c0a8653'
+ '214119610444c9b02766ccee5e220680'
+ '6fb6606d28082ecb8e0c6d986b0b26aa')
+
+build() {
+ cd ${startdir}/src/freetype-${pkgver}
+ patch -Np0 -i ${startdir}/src/bytecode.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.3.0-enable-spr.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.2.1-enable-valid.patch || return 1
+ patch -Np1 -i ${startdir}/src/freetype-2.2.1-memcpy-fix.patch || return 1
+
+ ./configure --prefix=/usr --disable-static || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/freetype2/bytecode.patch b/abs/core/freetype2/bytecode.patch
new file mode 100644
index 0000000..dd901ad
--- /dev/null
+++ b/abs/core/freetype2/bytecode.patch
@@ -0,0 +1,29 @@
+--- include/freetype/config/ftoption.h.old 2006-05-12 02:05:49.000000000 +0800
++++ include/freetype/config/ftoption.h 2006-10-02 01:22:50.000000000 +0800
+@@ -436,7 +436,7 @@
+ /* Do not #undef this macro here, since the build system might */
+ /* define it for certain configurations only. */
+ /* */
+-/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
++#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+
+ /*************************************************************************/
+@@ -448,7 +448,7 @@
+ /* FT_PARAM_TAG_UNPATENTED_HINTING; or when the debug hook */
+ /* FT_DEBUG_HOOK_UNPATENTED_HINTING is globally activated. */
+ /* */
+-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
++#undef TT_CONFIG_OPTION_UNPATENTED_HINTING
+
+
+ /*************************************************************************/
+@@ -480,7 +480,7 @@
+ /* http://partners.adobe.com/asn/developer/opentype/glyf.html */
+ /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* */
+-#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
++#define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+ /*************************************************************************/
diff --git a/abs/core/freetype2/freetype-2.2.1-enable-valid.patch b/abs/core/freetype2/freetype-2.2.1-enable-valid.patch
new file mode 100644
index 0000000..c78b6b7
--- /dev/null
+++ b/abs/core/freetype2/freetype-2.2.1-enable-valid.patch
@@ -0,0 +1,20 @@
+--- freetype-2.2.1/modules.cfg.orig 2006-07-07 21:01:09.000000000 -0400
++++ freetype-2.2.1/modules.cfg 2006-07-07 21:01:54.000000000 -0400
+@@ -110,7 +110,7 @@
+ AUX_MODULES += cache
+
+ # TrueType GX/AAT table validation. Needs ftgxval.c below.
+-# AUX_MODULES += gxvalid
++AUX_MODULES += gxvalid
+
+ # Support for streams compressed with gzip (files with suffix .gz).
+ #
+@@ -124,7 +124,7 @@
+
+ # OpenType table validation. Needs ftotval.c below.
+ #
+-# AUX_MODULES += otvalid
++AUX_MODULES += otvalid
+
+ # Auxiliary PostScript driver component to share common code.
+ #
diff --git a/abs/core/freetype2/freetype-2.2.1-memcpy-fix.patch b/abs/core/freetype2/freetype-2.2.1-memcpy-fix.patch
new file mode 100644
index 0000000..67a1c07
--- /dev/null
+++ b/abs/core/freetype2/freetype-2.2.1-memcpy-fix.patch
@@ -0,0 +1,14 @@
+--- freetype-2.2.1/src/psaux/psobjs.c~ 2006-04-26 16:38:17.000000000 +0200
++++ freetype-2.2.1/src/psaux/psobjs.c 2006-09-10 15:01:13.000000000 +0200
+@@ -165,6 +165,11 @@
+ return PSaux_Err_Invalid_Argument;
+ }
+
++ if ( length < 0 ) {
++ FT_ERROR(( "ps_table_add: invalid length\n" ));
++ return PSaux_Err_Invalid_Argument;
++ }
++
+ /* grow the base block if needed */
+ if ( table->cursor + length > table->capacity )
+ {
diff --git a/abs/core/freetype2/freetype-2.3.0-enable-spr.patch b/abs/core/freetype2/freetype-2.3.0-enable-spr.patch
new file mode 100644
index 0000000..8432e28
--- /dev/null
+++ b/abs/core/freetype2/freetype-2.3.0-enable-spr.patch
@@ -0,0 +1,11 @@
+--- freetype-2.3.0/include/freetype/config/ftoption.h.spf 2007-01-18 14:27:34.000000000 -0500
++++ freetype-2.3.0/include/freetype/config/ftoption.h 2007-01-18 14:27:48.000000000 -0500
+@@ -92,7 +92,7 @@
+ /* This is done to allow FreeType clients to run unmodified, forcing */
+ /* them to display normal gray-level anti-aliased glyphs. */
+ /* */
+-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
++#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+
+ /*************************************************************************/
diff --git a/abs/core/freetype2/freetype-2.3.3-ftbitmap.patch b/abs/core/freetype2/freetype-2.3.3-ftbitmap.patch
new file mode 100644
index 0000000..bbb8b2b
--- /dev/null
+++ b/abs/core/freetype2/freetype-2.3.3-ftbitmap.patch
@@ -0,0 +1,25 @@
+===================================================================
+RCS file: /var/lib/cvs/sources/freetype/freetype2/src/base/ftbitmap.c,v
+retrieving revision 1.17
+retrieving revision 1.18
+diff -u -r1.17 -r1.18
+--- freetype/freetype2/src/base/ftbitmap.c 2007/03/29 11:56:21 1.17
++++ freetype/freetype2/src/base/ftbitmap.c 2007/04/06 08:19:04 1.18
+@@ -149,15 +149,15 @@
+ if ( bit_last < bit_width )
+ {
+ FT_Byte* line = bitmap->buffer + ( bit_last >> 3 );
++ FT_Byte* end = bitmap->buffer + pitch;
+ FT_Int shift = bit_last & 7;
+ FT_UInt mask = 0xFF00U >> shift;
+ FT_Int count = height;
+
+
+- for ( ; count > 0; count--, line += pitch )
++ for ( ; count > 0; count--, line += pitch, end += pitch )
+ {
+ FT_Byte* write = line;
+- FT_Byte* end = line + pitch;
+
+
+ if ( shift > 0 )
diff --git a/abs/core/freetype2/freetype2.install b/abs/core/freetype2/freetype2.install
new file mode 100644
index 0000000..704adac
--- /dev/null
+++ b/abs/core/freetype2/freetype2.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ echo -n "updating font cache... "
+ /sbin/ldconfig -r .
+ /usr/bin/fc-cache -f
+ echo "done."
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/fribidi/ChangeLog b/abs/core/fribidi/ChangeLog
new file mode 100644
index 0000000..43b17a5
--- /dev/null
+++ b/abs/core/fribidi/ChangeLog
@@ -0,0 +1,5 @@
+2008-02-16 Travis Willard <travis@archlinux.org>
+
+ * 0.10.9
+ Added ChangeLog
+ New upstream release.
diff --git a/abs/core/fribidi/PKGBUILD b/abs/core/fribidi/PKGBUILD
new file mode 100644
index 0000000..f8ecb19
--- /dev/null
+++ b/abs/core/fribidi/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Travis Willard <travis@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=fribidi
+pkgver=0.10.9
+pkgrel=1
+pkgdesc="A Free Implementation of the Unicode Bidirectional Algorithm"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://fribidi.org"
+depends=('glibc')
+options=('!libtool')
+source=(http://fribidi.org/download/fribidi-${pkgver}.tar.gz)
+md5sums=('647aee89079b056269ff0918dc1c6d28')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
+
diff --git a/abs/core/fuse/PKGBUILD b/abs/core/fuse/PKGBUILD
new file mode 100644
index 0000000..62d8f81
--- /dev/null
+++ b/abs/core/fuse/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Mark Rosenstand <mark@archlinux.org>
+pkgname=fuse
+pkgver=2.7.3
+pkgrel=1
+pkgdesc="A library that makes it possible to implement a filesystem in a userspace program."
+arch=(i686 x86_64)
+url="http://fuse.sourceforge.net/"
+license="GPL2"
+depends=('glibc')
+makedepends=('pkgconfig')
+install=fuse.install
+source=(http://mesh.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz)
+options=(!libtool)
+md5sums=('98563fc7b265b7479a3178181cbcf59a')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-kernel-module --enable-lib \
+ --enable-util --bindir=/bin
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # static device nodes will cause collision.
+ rm -rf $startdir/pkg/dev
+ # Remove init script in wrong path
+ # Don't add our own for now, as fusectl fs oopses on 2.6.18
+ rm -rf $startdir/pkg/etc/init.d
+ #install -D -m755 $startdir/src/fuse.rc.d $startdir/pkg/etc/rc.d/fuse
+
+ mkdir -p $startdir/pkg/lib
+ mv $startdir/pkg/usr/lib/libfuse.so.${pkgver} $startdir/pkg/lib/ || return 1
+ ln -s ../../lib/libfuse.so.${pkgver} $startdir/pkg/usr/lib/libfuse.so.${pkgver} || return 1
+ ln -s libfuse.so.${pkgver} $startdir/pkg/lib/libfuse.so.2 || return 1
+ mv $startdir/pkg/usr/lib/libulockmgr.so.1.0.1 $startdir/pkg/lib/ || return 1
+ ln -s ../../lib/libulockmgr.so.1.0.1 $startdir/pkg/usr/lib/libulockmgr.so.1.0.1 || return 1
+ ln -s libulockmgr.so.1.0.1 $startdir/pkg/lib/libulockmgr.so.1 || return 1
+}
diff --git a/abs/core/fuse/fuse.install b/abs/core/fuse/fuse.install
new file mode 100644
index 0000000..595ac7c
--- /dev/null
+++ b/abs/core/fuse/fuse.install
@@ -0,0 +1,14 @@
+post_install() {
+ cat << 'EOM'
+==> You must load the fuse kernel module to use FUSE.
+ -> Run 'modprobe fuse' to load the module now.
+ -> Add fuse to $MODULES in /etc/rc.conf to load on every boot.
+==> You will need a /dev/fuse device node to use FUSE.
+ -> If you use udev, nothing needs to be done
+ -> For a static /dev, run: mknod /dev/fuse -m 0666 c 10 229
+EOM
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/fuse/fuse.rc.d b/abs/core/fuse/fuse.rc.d
new file mode 100755
index 0000000..768da5b
--- /dev/null
+++ b/abs/core/fuse/fuse.rc.d
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# fuse Init script for Filesystem in Userspace
+# Based on the script by Miklos Szeredi <miklos@szeredi.hu>
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+FUSECTL=/sys/fs/fuse/connections
+
+case "$1" in
+ start)
+ stat_busy "Starting fuse"
+ if ! grep -qw fuse /proc/filesystems; then
+ modprobe fuse >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ fi
+ fi
+ if grep -qw fusectl /proc/filesystems && ! grep -qw $FUSECTL /proc/mounts; then
+ mount -t fusectl none $FUSECTL >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ fi
+ fi
+ add_daemon fuse
+ stat_done
+ ;;
+ stop)
+ stat_busy "Stopping fuse"
+ umount $FUSECTL >/dev/null 2>&1
+ rmmod fuse >/dev/null 2>&1
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon fuse
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/fxload/PKGBUILD b/abs/core/fxload/PKGBUILD
new file mode 100644
index 0000000..d27f525
--- /dev/null
+++ b/abs/core/fxload/PKGBUILD
@@ -0,0 +1,20 @@
+# Contributor: Jochen Immend�fer <jochen dot immendoerfer at gmail dot com>
+pkgname=fxload
+pkgver=2002_04_11
+pkgrel=4
+pkgdesc="fxload firmware loader. Used with udev or devfs/hotplug."
+url="http://linux-hotplug.sourceforge.net/"
+depends=('glibc')
+makedepends=('sed')
+source=(http://easynews.dl.sourceforge.net/sourceforge/linux-hotplug/$pkgname-$pkgver.tar.gz)
+ arch=('i686')
+build() {
+C_INCLUDE_PATH=/usr/src/linux-2.6.24-STB
+
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i 's|CFLAGS =.*-O -Wall $(RPM_OPT_FLAGS)||' Makefile
+ sed -i 's/\linux\/usb.h/linux\/usb\/ch9.h/' ezusb.c ||return 1
+ make || return 1
+ sed -i 's|/usr/bin/install|/bin/install|' Makefile
+ make exec_prefix=$startdir/pkg/ prefix=$startdir/pkg/ install
+}
diff --git a/abs/core/gawk/PKGBUILD b/abs/core/gawk/PKGBUILD
new file mode 100644
index 0000000..976a574
--- /dev/null
+++ b/abs/core/gawk/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=gawk
+pkgver=3.1.6
+pkgrel=11
+pkgdesc="Gnu version of awk"
+arch=(i686 x86_64)
+url="http://www.gnu.org/directory/GNU/gawk.html"
+license=('GPL')
+groups=('base')
+provides=('awk')
+replaces=('mawk')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+depends=('bash' 'glibc')
+md5sums=('b237751aef53c9ead9644e376bc53386')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/libexec $startdir/pkg/usr/lib
+ mkdir $startdir/pkg/bin
+ mv $startdir/pkg/usr/bin/gawk* $startdir/pkg/bin/
+ mv $startdir/pkg/usr/bin/awk $startdir/pkg/bin/
+ # don't use hardlinks to manpages, it messes up our compression stuff
+ rm $startdir/pkg/usr/share/man/man1/pgawk.1
+ ln -s gawk.1 $startdir/pkg/usr/share/man/man1/pgawk.1
+ ln -s gawk.1 $startdir/pkg/usr/share/man/man1/awk.1
+}
diff --git a/abs/core/gawk/gawk-3.1.5-segfault_fix-1.patch b/abs/core/gawk/gawk-3.1.5-segfault_fix-1.patch
new file mode 100644
index 0000000..aa2f17b
--- /dev/null
+++ b/abs/core/gawk/gawk-3.1.5-segfault_fix-1.patch
@@ -0,0 +1,43 @@
+Submitted By: Matthew Burgess <matthew@linuxfromscratch.org>
+Date: 2005-09-24
+Initial Package Version: 3.1.5
+Upstream Status: From Upstream
+Origin: http://lists.gnu.org/archive/html/bug-gnu-utils/2005-08/msg00047.html
+Description: Fixes a bug which causes gawk to segfault when operating on a non-existent file.
+
+diff -Naur gawk-3.1.5.orig/io.c gawk-3.1.5/io.c
+--- gawk-3.1.5.orig/io.c 2005-07-26 18:07:43.000000000 +0000
++++ gawk-3.1.5/io.c 2005-09-24 14:43:13.771380264 +0000
+@@ -2480,9 +2480,12 @@
+ {
+ struct stat sbuf;
+ struct open_hook *oh;
++ int iop_malloced = FALSE;
+
+- if (iop == NULL)
++ if (iop == NULL) {
+ emalloc(iop, IOBUF *, sizeof(IOBUF), "iop_alloc");
++ iop_malloced = TRUE;
++ }
+ memset(iop, '\0', sizeof(IOBUF));
+ iop->flag = 0;
+ iop->fd = fd;
+@@ -2495,7 +2498,8 @@
+ }
+
+ if (iop->fd == INVALID_HANDLE) {
+- free(iop);
++ if (iop_malloced)
++ free(iop);
+ return NULL;
+ }
+ if (isatty(iop->fd))
+@@ -2503,7 +2507,7 @@
+ iop->readsize = iop->size = optimal_bufsize(iop->fd, & sbuf);
+ iop->sbuf = sbuf;
+ if (do_lint && S_ISREG(sbuf.st_mode) && sbuf.st_size == 0)
+- lintwarn(_("data file `%s' is empty"), name);
++ lintwarn(_("data file `%s' is empty"), name);
+ errno = 0;
+ iop->count = iop->scanoff = 0;
+ emalloc(iop->buf, char *, iop->size += 2, "iop_alloc");
diff --git a/abs/core/gcc-libs/PKGBUILD b/abs/core/gcc-libs/PKGBUILD
new file mode 100644
index 0000000..7bca5de
--- /dev/null
+++ b/abs/core/gcc-libs/PKGBUILD
@@ -0,0 +1,65 @@
+# $Id: PKGBUILD 6599 2008-07-25 17:11:14Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=gcc-libs
+pkgver=4.3.1
+pkgrel=12
+_snapshot=4.3-20080724
+pkgdesc="Runtime libraries shipped by GCC for C and C++ languages"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+groups=('base')
+url="http://gcc.gnu.org"
+depends=('glibc>=2.8-2')
+makedepends=('binutils>=2.18-8' 'gcc>=4.3.1' 'mpfr>=2.3.1' 'texinfo')
+conflicts=('gcc-fortran' 'gcc-objc')
+provides=("gcc-objc=${pkgver}")
+options=('!libtool' '!emptydirs')
+source=(#ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-{core,g++,fortran,objc}-${pkgver}.tar.bz2
+ ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-{core,g++,fortran,objc}-${_snapshot}.tar.bz2
+ gcc_pure64.patch
+ gcc-hash-style-both.patch)
+md5sums=('99ce6170e379779fe9c0971f9e27c704'
+ 'e39db43584ec603b314348405c753bd5'
+ '76b9d6a71eb2cd778cd6ad3e9d576c64'
+ '2b2456702ca6362b01583160e888be14'
+ '4030ee1c08dd1e843c0225b772360e76'
+ 'bb420bc84b1104455b7230b1cd4b96c2')
+
+build() {
+ if ! locale -a | grep ^de_DE; then
+ echo "You need the de_DE locale to build gcc."
+ return 1
+ fi
+
+ #cd ${srcdir}/gcc-${pkgver}
+ cd ${srcdir}/gcc-${_snapshot}
+ # Don't install libiberty
+ sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ patch -Np1 -i ../gcc_pure64.patch || return 1
+ fi
+ patch -Np0 -i ${srcdir}/gcc-hash-style-both.patch || return 1
+
+ # Don't run fixincludes
+ sed -i -e 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
+
+ echo ${pkgver} > gcc/BASE-VER
+
+ mkdir build
+ cd build
+ ../configure --prefix=/usr --enable-shared \
+ --enable-languages=c,c++,fortran,objc,obj-c++,treelang --enable-threads=posix \
+ --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib \
+ --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch \
+ --with-tune=generic
+ make || return 1
+ make -j1 DESTDIR=${pkgdir} install-target-libstdc++-v3 install-target-libmudflap install-target-libgomp install-target-libssp install-target-libgfortran install-target-libobjc install-target-libgcc || return 1
+
+ # Cleanup, libgomp installs the whole compiler it seems...
+ rm -rf ${pkgdir}/usr/include
+ rm -rf ${pkgdir}/usr/lib/gcc
+ rm -rf ${pkgdir}/usr/bin
+ rm -rf ${pkgdir}/usr{,share}/man
+ find ${pkgdir} -name gcc.mo -delete
+}
diff --git a/abs/core/gcc-libs/gcc-hash-style-both.patch b/abs/core/gcc-libs/gcc-hash-style-both.patch
new file mode 100644
index 0000000..8fea758
--- /dev/null
+++ b/abs/core/gcc-libs/gcc-hash-style-both.patch
@@ -0,0 +1,163 @@
+#! /bin/sh -e
+
+# DP: Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+ pdir="-d $3"
+ dir="$3/"
+elif [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch)
+ patch $pdir -f --no-backup-if-mismatch -p0 < $0
+ #cd ${dir}gcc && autoconf
+ ;;
+ -unpatch)
+ patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+ #rm ${dir}gcc/configure
+ ;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+2006-07-11 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
+ * config/i386/linux64.h (LINK_SPEC): Likewise.
+ * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+ * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+ LINK_OS_LINUX_SPEC64): Likewise.
+ * config/s390/linux.h (LINK_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+ LINK_ARCH64_SPEC): Likewise.
+ * config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+--- gcc/config/alpha/linux-elf.h.orig 2007-08-04 08:55:58.000000000 +0200
++++ gcc/config/alpha/linux-elf.h 2007-09-01 15:47:26.605865578 +0200
+@@ -39,7 +39,7 @@
+
+ #define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
+
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+--- gcc/config/s390/linux.h.orig 2007-08-04 08:55:59.000000000 +0200
++++ gcc/config/s390/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -77,7 +77,7 @@
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{static:-static} \
+--- gcc/config/sparc/linux.h.orig 2007-08-04 08:56:01.000000000 +0200
++++ gcc/config/sparc/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -132,7 +132,7 @@
+
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!ibcs: \
+--- gcc/config/sparc/linux64.h.orig 2007-08-04 08:56:01.000000000 +0200
++++ gcc/config/sparc/linux64.h 2007-09-01 15:47:26.605865578 +0200
+@@ -166,7 +166,7 @@
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
+-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+@@ -175,7 +175,7 @@
+ %{static:-static}}} \
+ "
+
+-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+@@ -256,7 +256,7 @@
+ #else /* !SPARC_BI_ARCH */
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+--- gcc/config/i386/linux.h.orig 2007-08-04 08:56:07.000000000 +0200
++++ gcc/config/i386/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -108,7 +108,7 @@
+ { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+--- gcc/config/i386/linux64.h.orig 2007-08-04 08:56:07.000000000 +0200
++++ gcc/config/i386/linux64.h 2007-09-01 15:48:27.336781690 +0200
+@@ -65,7 +65,7 @@
+ #endif
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- gcc/config/ia64/linux.h.orig 2006-12-12 18:59:53.000000000 +0100
++++ gcc/config/ia64/linux.h 2007-09-01 15:47:26.605865578 +0200
+@@ -40,7 +40,7 @@
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- gcc/config/rs6000/sysv4.h.orig 2007-08-08 23:37:49.000000000 +0200
++++ gcc/config/rs6000/sysv4.h 2007-09-01 15:47:26.615865729 +0200
+@@ -901,7 +901,7 @@
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+
+--- gcc/config/rs6000/linux64.h.orig 2007-08-04 08:56:12.000000000 +0200
++++ gcc/config/rs6000/linux64.h 2007-09-01 15:47:26.615865729 +0200
+@@ -354,11 +354,11 @@
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
+
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
+
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
+
diff --git a/abs/core/gcc-libs/gcc_pure64.patch b/abs/core/gcc-libs/gcc_pure64.patch
new file mode 100644
index 0000000..8c0baf8
--- /dev/null
+++ b/abs/core/gcc-libs/gcc_pure64.patch
@@ -0,0 +1,26 @@
+diff -Naur gcc-4.2.0.orig/gcc/config/i386/linux64.h gcc-4.2.0/gcc/config/i386/linux64.h
+--- gcc-4.2.0.orig/gcc/config/i386/linux64.h 2007-05-16 19:21:19.000000000 -0400
++++ gcc-4.2.0/gcc/config/i386/linux64.h 2007-05-18 17:04:05.000000000 -0400
+@@ -49,8 +49,8 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
+-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
++#define GLIBC_DYNAMIC_LINKER32 "/lib32/ld-linux.so.2"
++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+diff -Naur gcc-4.2.0.orig/gcc/config/i386/t-linux64 gcc-4.2.0/gcc/config/i386/t-linux64
+--- gcc-4.2.0.orig/gcc/config/i386/t-linux64 2007-05-16 19:21:19.000000000 -0400
++++ gcc-4.2.0/gcc/config/i386/t-linux64 2007-05-18 17:04:36.000000000 -0400
+@@ -6,7 +6,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib ../lib32
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
diff --git a/abs/core/gdbm/PKGBUILD b/abs/core/gdbm/PKGBUILD
new file mode 100644
index 0000000..1154818
--- /dev/null
+++ b/abs/core/gdbm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gdbm
+pkgver=1.8.3
+pkgrel=14
+pkgdesc="GNU database library"
+url="http://www.gnu.org/software/gdbm/gdbm.html"
+license=('GPL')
+arch=(i686 x86_64)
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/gnu/gdbm/$pkgname-$pkgver.tar.gz)
+md5sums=('1d1b1d5c0245b1c00aff92da751e9aa1')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make prefix=/usr || return 1
+ make prefix=$startdir/pkg/usr install
+ make prefix=$startdir/pkg/usr install-compat
+ chown root.root $startdir/pkg/usr/include/{dbm.h,gdbm.h,ndbm.h}
+ chown root.root $startdir/pkg/usr/man/man3/gdbm.3
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/gen-init-cpio/Makefile b/abs/core/gen-init-cpio/Makefile
new file mode 100644
index 0000000..1ebe763
--- /dev/null
+++ b/abs/core/gen-init-cpio/Makefile
@@ -0,0 +1,42 @@
+
+DESTDIR =
+PREFIX = /
+
+MKDIR = /bin/mkdir
+INSTALL = /bin/install -c -m 755
+
+CC = /usr/bin/gcc
+LD = /usr/bin/gcc
+
+CFLAGS += -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+ -Wpointer-arith -Wcast-align -Wsign-compare
+
+#pretty print!
+E = @echo
+Q = @
+
+all: gen_init_cpio
+.PHONY: all
+.DEFAULT: all
+
+%.o: %.c
+ $(E) " compile " $@
+ $(Q) $(CC) -c $(CFLAGS) $< -o $@
+
+gen_init_cpio: gen_init_cpio.o
+ $(E) ">>build " $@
+ $(Q) $(LD) $(LDFLAGS) $@.o -o $@ $(LIB_OBJS)
+
+clean:
+ $(E) " clean "
+ $(Q) rm -f gen_init_cpio *.o
+.PHONY: clean
+
+install: all
+ $(MKDIR) -p $(DESTDIR)$(PREFIX)sbin/
+ $(INSTALL) gen_init_cpio $(DESTDIR)$(PREFIX)sbin/
+.PHONY: install
+
+uninstall:
+ rm $(DESTDIR)$(PREFIX)sbin/gen_init_cpio
+.PHONY: uninstall
diff --git a/abs/core/gen-init-cpio/PKGBUILD b/abs/core/gen-init-cpio/PKGBUILD
new file mode 100644
index 0000000..ca1fa2e
--- /dev/null
+++ b/abs/core/gen-init-cpio/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=gen-init-cpio
+pkgver=2.6.17
+pkgrel=12
+pkgdesc="Program to compress initramfs images"
+arch=(i686 x86_64)
+license=('custom:none')
+groups=('base')
+url="http://www.kernel.org/"
+depends=('glibc')
+source=(Makefile gen_init_cpio.c)
+md5sums=('8e3a142a522d65121c3bead41013be98' 'fe53a05f5fcfca9e4dd8d67d29190f6e')
+
+build()
+{
+ cd $startdir/src/
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/gen-init-cpio/gen_init_cpio.c b/abs/core/gen-init-cpio/gen_init_cpio.c
new file mode 100644
index 0000000..83acd6c
--- /dev/null
+++ b/abs/core/gen-init-cpio/gen_init_cpio.c
@@ -0,0 +1,514 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+#include <limits.h>
+
+/*
+ * Original work by Jeff Garzik
+ *
+ * External file lists, symlink, pipe and fifo support by Thayne Harbaugh
+ */
+
+#define xstr(s) #s
+#define str(s) xstr(s)
+
+static unsigned int offset;
+static unsigned int ino = 721;
+
+struct file_handler {
+ const char *type;
+ int (*handler)(const char *line);
+};
+
+static void push_string(const char *name)
+{
+ unsigned int name_len = strlen(name) + 1;
+
+ fputs(name, stdout);
+ putchar(0);
+ offset += name_len;
+}
+
+static void push_pad (void)
+{
+ while (offset & 3) {
+ putchar(0);
+ offset++;
+ }
+}
+
+static void push_rest(const char *name)
+{
+ unsigned int name_len = strlen(name) + 1;
+ unsigned int tmp_ofs;
+
+ fputs(name, stdout);
+ putchar(0);
+ offset += name_len;
+
+ tmp_ofs = name_len + 110;
+ while (tmp_ofs & 3) {
+ putchar(0);
+ offset++;
+ tmp_ofs++;
+ }
+}
+
+static void push_hdr(const char *s)
+{
+ fputs(s, stdout);
+ offset += 110;
+}
+
+static void cpio_trailer(void)
+{
+ char s[256];
+ const char name[] = "TRAILER!!!";
+
+ sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ 0, /* ino */
+ 0, /* mode */
+ (long) 0, /* uid */
+ (long) 0, /* gid */
+ 1, /* nlink */
+ (long) 0, /* mtime */
+ 0, /* filesize */
+ 0, /* major */
+ 0, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name)+1, /* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+
+ while (offset % 512) {
+ putchar(0);
+ offset++;
+ }
+}
+
+static int cpio_mkslink(const char *name, const char *target,
+ unsigned int mode, uid_t uid, gid_t gid)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ S_IFLNK | mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) mtime, /* mtime */
+ (unsigned)strlen(target)+1, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_string(name);
+ push_pad();
+ push_string(target);
+ push_pad();
+ return 0;
+}
+
+static int cpio_mkslink_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ char target[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d", name, target, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized dir format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mkslink(name, target, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+static int cpio_mkgeneric(const char *name, unsigned int mode,
+ uid_t uid, gid_t gid)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 2, /* nlink */
+ (long) mtime, /* mtime */
+ 0, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+ return 0;
+}
+
+enum generic_types {
+ GT_DIR,
+ GT_PIPE,
+ GT_SOCK
+};
+
+struct generic_type {
+ const char *type;
+ mode_t mode;
+};
+
+static struct generic_type generic_type_table[] = {
+ [GT_DIR] = {
+ .type = "dir",
+ .mode = S_IFDIR
+ },
+ [GT_PIPE] = {
+ .type = "pipe",
+ .mode = S_IFIFO
+ },
+ [GT_SOCK] = {
+ .type = "sock",
+ .mode = S_IFSOCK
+ }
+};
+
+static int cpio_mkgeneric_line(const char *line, enum generic_types gt)
+{
+ char name[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (4 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d", name, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized %s format '%s'",
+ line, generic_type_table[gt].type);
+ goto fail;
+ }
+ mode |= generic_type_table[gt].mode;
+ rc = cpio_mkgeneric(name, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+static int cpio_mkdir_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_DIR);
+}
+
+static int cpio_mkpipe_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_PIPE);
+}
+
+static int cpio_mksock_line(const char *line)
+{
+ return cpio_mkgeneric_line(line, GT_SOCK);
+}
+
+static int cpio_mknod(const char *name, unsigned int mode,
+ uid_t uid, gid_t gid, char dev_type,
+ unsigned int maj, unsigned int min)
+{
+ char s[256];
+ time_t mtime = time(NULL);
+
+ if (dev_type == 'b')
+ mode |= S_IFBLK;
+ else
+ mode |= S_IFCHR;
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) mtime, /* mtime */
+ 0, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ maj, /* rmajor */
+ min, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_rest(name);
+ return 0;
+}
+
+static int cpio_mknod_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ char dev_type;
+ unsigned int maj;
+ unsigned int min;
+ int rc = -1;
+
+ if (7 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d %c %u %u",
+ name, &mode, &uid, &gid, &dev_type, &maj, &min)) {
+ fprintf(stderr, "Unrecognized nod format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mknod(name, mode, uid, gid, dev_type, maj, min);
+ fail:
+ return rc;
+}
+
+/* Not marked static to keep the compiler quiet, as no one uses this yet... */
+static int cpio_mkfile(const char *name, const char *location,
+ unsigned int mode, uid_t uid, gid_t gid)
+{
+ char s[256];
+ char *filebuf = NULL;
+ struct stat buf;
+ int file = -1;
+ int retval;
+ int rc = -1;
+
+ mode |= S_IFREG;
+
+ retval = stat (location, &buf);
+ if (retval) {
+ fprintf (stderr, "File %s could not be located\n", location);
+ goto error;
+ }
+
+ file = open (location, O_RDONLY);
+ if (file < 0) {
+ fprintf (stderr, "File %s could not be opened for reading\n", location);
+ goto error;
+ }
+
+ filebuf = malloc(buf.st_size);
+ if (!filebuf) {
+ fprintf (stderr, "out of memory\n");
+ goto error;
+ }
+
+ retval = read (file, filebuf, buf.st_size);
+ if (retval < 0) {
+ fprintf (stderr, "Can not read %s file\n", location);
+ goto error;
+ }
+
+ sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701", /* magic */
+ ino++, /* ino */
+ mode, /* mode */
+ (long) uid, /* uid */
+ (long) gid, /* gid */
+ 1, /* nlink */
+ (long) buf.st_mtime, /* mtime */
+ (int) buf.st_size, /* filesize */
+ 3, /* major */
+ 1, /* minor */
+ 0, /* rmajor */
+ 0, /* rminor */
+ (unsigned)strlen(name) + 1,/* namesize */
+ 0); /* chksum */
+ push_hdr(s);
+ push_string(name);
+ push_pad();
+
+ fwrite(filebuf, buf.st_size, 1, stdout);
+ offset += buf.st_size;
+ push_pad();
+ rc = 0;
+
+error:
+ if (filebuf) free(filebuf);
+ if (file >= 0) close(file);
+ return rc;
+}
+
+static int cpio_mkfile_line(const char *line)
+{
+ char name[PATH_MAX + 1];
+ char location[PATH_MAX + 1];
+ unsigned int mode;
+ int uid;
+ int gid;
+ int rc = -1;
+
+ if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d", name, location, &mode, &uid, &gid)) {
+ fprintf(stderr, "Unrecognized file format '%s'", line);
+ goto fail;
+ }
+ rc = cpio_mkfile(name, location, mode, uid, gid);
+ fail:
+ return rc;
+}
+
+void usage(const char *prog)
+{
+ fprintf(stderr, "Usage:\n"
+ "\t%s <cpio_list>\n"
+ "\n"
+ "<cpio_list> is a file containing newline separated entries that\n"
+ "describe the files to be included in the initramfs archive:\n"
+ "\n"
+ "# a comment\n"
+ "file <name> <location> <mode> <uid> <gid>\n"
+ "dir <name> <mode> <uid> <gid>\n"
+ "nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>\n"
+ "slink <name> <target> <mode> <uid> <gid>\n"
+ "pipe <name> <mode> <uid> <gid>\n"
+ "sock <name> <mode> <uid> <gid>\n"
+ "\n"
+ "<name> name of the file/dir/nod/etc in the archive\n"
+ "<location> location of the file in the current filesystem\n"
+ "<target> link target\n"
+ "<mode> mode/permissions of the file\n"
+ "<uid> user id (0=root)\n"
+ "<gid> group id (0=root)\n"
+ "<dev_type> device type (b=block, c=character)\n"
+ "<maj> major number of nod\n"
+ "<min> minor number of nod\n"
+ "\n"
+ "example:\n"
+ "# A simple initramfs\n"
+ "dir /dev 0755 0 0\n"
+ "nod /dev/console 0600 0 0 c 5 1\n"
+ "dir /root 0700 0 0\n"
+ "dir /sbin 0755 0 0\n"
+ "file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n",
+ prog);
+}
+
+struct file_handler file_handler_table[] = {
+ {
+ .type = "file",
+ .handler = cpio_mkfile_line,
+ }, {
+ .type = "nod",
+ .handler = cpio_mknod_line,
+ }, {
+ .type = "dir",
+ .handler = cpio_mkdir_line,
+ }, {
+ .type = "slink",
+ .handler = cpio_mkslink_line,
+ }, {
+ .type = "pipe",
+ .handler = cpio_mkpipe_line,
+ }, {
+ .type = "sock",
+ .handler = cpio_mksock_line,
+ }, {
+ .type = NULL,
+ .handler = NULL,
+ }
+};
+
+#define LINE_SIZE (2 * PATH_MAX + 50)
+
+int main (int argc, char *argv[])
+{
+ FILE *cpio_list;
+ char line[LINE_SIZE];
+ char *args, *type;
+ int ec = 0;
+ int line_nr = 0;
+
+ if (2 != argc) {
+ usage(argv[0]);
+ exit(1);
+ }
+
+ if (! (cpio_list = fopen(argv[1], "r"))) {
+ fprintf(stderr, "ERROR: unable to open '%s': %s\n\n",
+ argv[1], strerror(errno));
+ usage(argv[0]);
+ exit(1);
+ }
+
+ while (fgets(line, LINE_SIZE, cpio_list)) {
+ int type_idx;
+ size_t slen = strlen(line);
+
+ line_nr++;
+
+ if ('#' == *line) {
+ /* comment - skip to next line */
+ continue;
+ }
+
+ if (! (type = strtok(line, " \t"))) {
+ fprintf(stderr,
+ "ERROR: incorrect format, could not locate file type line %d: '%s'\n",
+ line_nr, line);
+ ec = -1;
+ break;
+ }
+
+ if ('\n' == *type) {
+ /* a blank line */
+ continue;
+ }
+
+ if (slen == strlen(type)) {
+ /* must be an empty line */
+ continue;
+ }
+
+ if (! (args = strtok(NULL, "\n"))) {
+ fprintf(stderr,
+ "ERROR: incorrect format, newline required line %d: '%s'\n",
+ line_nr, line);
+ ec = -1;
+ }
+
+ for (type_idx = 0; file_handler_table[type_idx].type; type_idx++) {
+ int rc;
+ if (! strcmp(line, file_handler_table[type_idx].type)) {
+ if ((rc = file_handler_table[type_idx].handler(args))) {
+ ec = rc;
+ fprintf(stderr, " line %d\n", line_nr);
+ }
+ break;
+ }
+ }
+
+ if (NULL == file_handler_table[type_idx].type) {
+ fprintf(stderr, "unknown file type line %d: '%s'\n",
+ line_nr, line);
+ }
+ }
+ if (ec == 0)
+ cpio_trailer();
+
+ exit(ec);
+}
diff --git a/abs/core/gettext/PKGBUILD b/abs/core/gettext/PKGBUILD
new file mode 100644
index 0000000..fab83f2
--- /dev/null
+++ b/abs/core/gettext/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gettext
+pkgver=0.17
+pkgrel=10
+pkgdesc="GNU internationalization library"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/gettext"
+license=('GPL')
+groups=('base')
+depends=('gcc-libs' 'acl')
+options=(!libtool)
+source=(ftp://ftp.gnu.org/pub/gnu/gettext/${pkgname}-${pkgver}.tar.gz)
+md5sums=('58a2bc6d39c0ba57823034d55d65d606')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/libexpat.so.0/libexpat.so.1/' gettext-tools/src/x-glade.c
+ ./configure --prefix=/usr --enable-csharp
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/ghostscript/PKGBUILD b/abs/core/ghostscript/PKGBUILD
new file mode 100644
index 0000000..2cf5416
--- /dev/null
+++ b/abs/core/ghostscript/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 7626 2008-08-03 15:52:01Z jgc $
+# Maintainer: AndyRTR <andyrtr@archlinux.org>
+
+pkgname=ghostscript
+pkgver=8.63
+pkgrel=3
+pkgdesc="An interpreter for the PostScript language"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+depends=('libxext' 'libxt' 'libcups>=1.3.8-2' 'fontconfig>=2.6.0' 'gtk2>=2.12.11' 'gnutls>=2.4.1')
+makedepends=('automake' 'autoconf')
+replaces=('ghostscript-lrpng')
+provides=('ghostscript-lprng')
+url="http://www.cs.wisc.edu/~ghost/"
+#url="http://www.cups.org/espgs/"
+install=ghostscript.install
+source=(ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs863/ghostscript-${pkgver}.tar.bz2
+ ghostscript-fPIC.patch)
+options=('!libtool' '!makeflags')
+md5sums=('c770eedfdd846a53e211e3ba5339de21'
+ '29540cd88aad9a3a788d68193523080d')
+
+build() {
+ cd ${srcdir}/ghostscript-${pkgver}
+ if [ "$CARCH" = "x86_64" ]; then
+ patch -Np1 -i ${srcdir}/ghostscript-fPIC.patch || return 1
+ fi
+
+ # Build IJS
+ cd ${srcdir}/ghostscript-${pkgver}/ijs
+ ./autogen.sh
+ ./configure --prefix=/usr --enable-shared --disable-static
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+
+ cd ..
+ ./configure --prefix=/usr --enable-dynamic --enable-threads --with-ijs \
+ --with-jbig2dec --with-omni --with-x --with-drivers=ALL\
+ --with-fontpath=/usr/share/fonts/Type1:/usr/share/fonts
+ make || return 1
+ make DESTDIR=${pkgdir} \
+ cups_serverroot=${pkgdir}/etc/cups \
+ cups_serverbin=${pkgdir}/usr/lib/cups install soinstall
+
+ mkdir -p ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/
+
+ # remove unwanted localized man-pages
+ rm -rf $pkgdir/usr/share/man/[^man1]*
+}
diff --git a/abs/core/ghostscript/ghostscript-fPIC.patch b/abs/core/ghostscript/ghostscript-fPIC.patch
new file mode 100644
index 0000000..9b4deb2
--- /dev/null
+++ b/abs/core/ghostscript/ghostscript-fPIC.patch
@@ -0,0 +1,31 @@
+--- ghostscript-8.60-r8112/src/lib.mak.fPIC 2007-07-10 17:03:11.000000000 +0100
++++ ghostscript-8.60-r8112/src/lib.mak 2007-07-10 17:05:56.000000000 +0100
+@@ -874,7 +874,7 @@
+ $(GLOBJ)gsparamx.$(OBJ) : $(GLSRC)gsparamx.c $(string__h)\
+ $(gserror_h) $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gsparamx_h)\
+ $(gstypes_h)
+- $(GLCC) $(GLO_)gsparamx.$(OBJ) $(C_) $(GLSRC)gsparamx.c
++ $(GLCCSHARED) $(GLO_)gsparamx.$(OBJ) $(C_) $(GLSRC)gsparamx.c
+
+ # Future replacement for gsparams.c
+ $(GLOBJ)gsparam2.$(OBJ) : $(GLSRC)gsparam2.c $(GXERR) $(memory__h)\
+@@ -1077,7 +1077,7 @@
+
+ # Provide a mapping between StandardEncoding and ISOLatin1Encoding.
+ $(GLOBJ)gdevemap.$(OBJ) : $(GLSRC)gdevemap.c $(AK) $(std_h)
+- $(GLCC) $(GLO_)gdevemap.$(OBJ) $(C_) $(GLSRC)gdevemap.c
++ $(GLCCSHARED) $(GLO_)gdevemap.$(OBJ) $(C_) $(GLSRC)gdevemap.c
+
+ ###### Create a pseudo-"feature" for the entire graphics library.
+
+--- ghostscript-8.60-r8112/src/devs.mak.fPIC 2007-07-10 17:05:00.000000000 +0100
++++ ghostscript-8.60-r8112/src/devs.mak 2007-07-10 17:05:07.000000000 +0100
+@@ -464,7 +464,7 @@
+ $(GLCCSHARED) $(XINCLUDE) $(GLO_)gdevx.$(OBJ) $(C_) $(GLSRC)gdevx.c
+
+ $(GLOBJ)gdevxcmp.$(OBJ) : $(GLSRC)gdevxcmp.c $(GDEVX) $(math__h)
+- $(GLCC) $(XINCLUDE) $(GLO_)gdevxcmp.$(OBJ) $(C_) $(GLSRC)gdevxcmp.c
++ $(GLCCSHARED) $(XINCLUDE) $(GLO_)gdevxcmp.$(OBJ) $(C_) $(GLSRC)gdevxcmp.c
+
+ $(GLOBJ)gdevxini.$(OBJ) : $(GLSRC)gdevxini.c $(GDEVX) $(memory__h)\
+ $(gserrors_h) $(gsparamx_h) $(gxdevmem_h) $(gdevbbox_h)
diff --git a/abs/core/ghostscript/ghostscript.install b/abs/core/ghostscript/ghostscript.install
new file mode 100644
index 0000000..10d2d7a
--- /dev/null
+++ b/abs/core/ghostscript/ghostscript.install
@@ -0,0 +1,14 @@
+post_install() {
+cat << EOF
+==> To use dvipdf, you need to install tetex:
+==> # pacman -S tetex
+EOF
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/giblib/PKGBUILD b/abs/core/giblib/PKGBUILD
new file mode 100644
index 0000000..413711c
--- /dev/null
+++ b/abs/core/giblib/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=giblib
+pkgver=1.2.4
+pkgrel=3
+pkgdesc="Giblib is a library that feh uses as a wrapper to imlib2"
+depends=('imlib2' 'libxext' 'freetype2')
+#source=(http://linuxbrit.co.uk/downloads/$pkgname-$pkgver.tar.gz)
+source=(http://ftp.gva.es/mirror/debian/pool/main/g/giblib/giblib_1.2.4.orig.tar.gz)
+url="http://linuxbrit.co.uk/giblib/"
+ arch=('i686')
+build() {
+cd $startdir/src/$pkgname-$pkgver.orig
+./configure --prefix=/usr
+make || return 1
+make prefix=$startdir/pkg/usr install
+find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/giflib/PKGBUILD b/abs/core/giflib/PKGBUILD
new file mode 100644
index 0000000..6bc0de0
--- /dev/null
+++ b/abs/core/giflib/PKGBUILD
@@ -0,0 +1,35 @@
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Baptiste Daroussin <baptiste.daroussin@gmail.com>
+# Contributor: Grigorios Bouzakis <grbzks[at]gmail[dot]com>
+# Contributor: mightyjaym <jm.ambrosino@free.fr>
+
+pkgname=giflib
+pkgver=4.1.6
+pkgrel=3
+pkgdesc="A library for reading and writing gif images"
+url="http://sourceforge.net/projects/giflib/"
+arch=('i686' 'x86_64')
+license=('MIT')
+depends=('libx11' 'libsm')
+provides=("libungif=${pkgver}")
+conflicts=('libungif')
+replaces=('libungif')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/giflib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('7125644155ae6ad33dbc9fc15a14735f')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+
+ # libungif compatibility - instructions taken from Redhat specfile
+ MAJOR=`echo ${pkgver} | sed 's/\([0-9]\+\)\..*/\1/'`
+ gcc -shared -Wl,-soname,libungif.so.${MAJOR} -Llib/.libs -lgif -o libungif.so.${pkgver} || return 1
+ install -m755 libungif.so.${pkgver} ${pkgdir}/usr/lib/ || return 1
+ ln -sf libungif.so.${pkgver} ${pkgdir}/usr/lib/libungif.so.4 || return 1
+ ln -sf libungif.so.4 ${pkgdir}/usr/lib/libungif.so || return 1
+}
diff --git a/abs/core/glib2/PKGBUILD b/abs/core/glib2/PKGBUILD
new file mode 100644
index 0000000..3e4abd7
--- /dev/null
+++ b/abs/core/glib2/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7524 2008-08-02 20:27:35Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=glib2
+pkgver=2.16.5
+pkgrel=1
+pkgdesc="Common C routines used by GTK+ 2.4 and other libs"
+url="http://www.gtk.org/"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('pcre>=7.7')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/GNOME/sources/glib/2.16/glib-${pkgver}.tar.bz2
+ gkeyfile-bool-nocase.patch
+ glib2.sh
+ glib2.csh)
+md5sums=('039f02d47d4071322a3f00abf031e5d9'
+ '5ca65611e824662146369e814d49ad06'
+ '803017b365bd35dc20b092ce43b8c8c5'
+ '90c7b830bef4baf225c2eb8b7ead0cab')
+
+build() {
+ cd ${startdir}/src/glib-${pkgver}
+ patch -Np0 -i ${startdir}/src/gkeyfile-bool-nocase.patch || return 1
+ ./configure --prefix=/usr --enable-static --enable-shared --with-pcre=system --disable-fam || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -d -m755 ${startdir}/pkg/etc/profile.d
+ install -m755 ${startdir}/src/glib2.{csh,sh} ${startdir}/pkg/etc/profile.d/ || return 1
+}
diff --git a/abs/core/glib2/gkeyfile-bool-nocase.patch b/abs/core/glib2/gkeyfile-bool-nocase.patch
new file mode 100644
index 0000000..133f135
--- /dev/null
+++ b/abs/core/glib2/gkeyfile-bool-nocase.patch
@@ -0,0 +1,16 @@
+Index: glib/gkeyfile.c
+===================================================================
+--- glib/gkeyfile.c (revision 5714)
++++ glib/gkeyfile.c (working copy)
+@@ -3639,9 +3639,9 @@
+ {
+ gchar *value_utf8;
+
+- if (strcmp (value, "true") == 0 || strcmp (value, "1") == 0)
++ if (g_ascii_strcasecmp (value, "true") == 0 || strcmp (value, "1") == 0)
+ return TRUE;
+- else if (strcmp (value, "false") == 0 || strcmp (value, "0") == 0)
++ else if (g_ascii_strcasecmp (value, "false") == 0 || strcmp (value, "0") == 0)
+ return FALSE;
+
+ value_utf8 = _g_utf8_make_valid (value);
diff --git a/abs/core/glib2/glib2.csh b/abs/core/glib2/glib2.csh
new file mode 100644
index 0000000..7aa3a2f
--- /dev/null
+++ b/abs/core/glib2/glib2.csh
@@ -0,0 +1 @@
+setenv G_BROKEN_FILENAMES 1
diff --git a/abs/core/glib2/glib2.sh b/abs/core/glib2/glib2.sh
new file mode 100644
index 0000000..96a056e
--- /dev/null
+++ b/abs/core/glib2/glib2.sh
@@ -0,0 +1 @@
+export G_BROKEN_FILENAMES=1
diff --git a/abs/core/glibc/ChangeLog b/abs/core/glibc/ChangeLog
new file mode 100644
index 0000000..79a44e7
--- /dev/null
+++ b/abs/core/glibc/ChangeLog
@@ -0,0 +1,28 @@
+glibc 2.8-2
+- fix an old memory issue again
+
+glibc 2.8-1
+- no more tarballs
+- we checkout the current release branch incl. libidn
+- cleanup the patches
+
+glibc 2.7-6
+- fix broken locales with upstream changes
+- disable the whole weekday patch, fixes #8530
+
+glibc 2.7-5
+- fix a regression: http://sourceware.org/bugzilla/show_bug.cgi?id=4781
+ mainly for x86_64 where using gcc-gcj eats all memory
+
+glibc 2.7-4
+- extract /etc/locale.gen from sources to have all new locales supported
+- mask other broken locales / added a comment to post.install message
+- apply changes from Debian 2.7-exp7 pkg
+ to fix some broken locales
+
+glibc 2.7-3
+- removed locale/check-unknown-symbols.diff
+ localedata/tailor-iso14651_t1.diff partly
+ to fix broken et_EE locale
+- switch to compressed patches
+- added ChangeLog \ No newline at end of file
diff --git a/abs/core/glibc/PKGBUILD b/abs/core/glibc/PKGBUILD
new file mode 100644
index 0000000..68df516
--- /dev/null
+++ b/abs/core/glibc/PKGBUILD
@@ -0,0 +1,100 @@
+# $Id: PKGBUILD 2685 2008-06-11 13:30:43Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=glibc
+pkgver=2.8
+pkgrel=11
+_glibcdate=20080610
+install=glibc.install
+backup=(etc/locale.gen)
+pkgdesc="GNU C Library"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://www.gnu.org/software/libc"
+groups=('base')
+depends=('sh' 'kernel-headers>=2.6.25.6' 'tzdata')
+makedepends=('gcc>=4.3.1-1')
+replaces=('glibc-xen')
+source=(ftp://ftp.archlinux.org/other/glibc/${pkgname}-2.8_${_glibcdate}.tar.bz2
+ ftp://ftp.archlinux.org/other/glibc/glibc-patches-${pkgver}-2.tar.bz2
+ nscd
+ locale.gen.txt
+ locale-gen)
+md5sums=('63def58972f0e8429247916154c21323'
+ '3ec00d9aa3f2fec046bc3e615dfb723a'
+ 'b587ee3a70c9b3713099295609afde49'
+ '07ac979b6ab5eeb778d55f041529d623'
+ '476e9113489f93b348b21e144b6a8fcf')
+
+build() {
+
+ # for cvs checkout
+# mkdir ${startdir}/src/glibc-${_glibcdate}
+# cd ${startdir}/src/glibc-${_glibcdate}
+# export _TAG=glibc-2_8-branch
+# export 'CVSROOT=:pserver:anoncvs@sources.redhat.com:/cvs/glibc'
+# cvs -z9 co -r $_TAG libc || return 1
+# tar -cvjf glibc-2.8_${_glibcdate}.tar.bz2 libc
+# return 1
+
+ cd ${startdir}/src/libc
+
+ # patch from Debian
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-2.5-localedef_segfault-1.patch || return 1 # still needed?
+
+ # Upstream fixes. See sources.redhat.com bugzilla
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-2.7-bz4781.patch || return 1
+
+ # Gentoo fixes
+ patch -Np1 -i ${startdir}/src/glibc-patches/glibc-dont-build-timezone.patch || return 1
+
+ install -m755 -d ${startdir}/pkg/etc
+ touch ${startdir}/pkg/etc/ld.so.conf
+
+ mkdir glibc-build
+ cd glibc-build
+
+ if [ "${CARCH}" = "i686" ]; then
+ # Hack to fix NPTL issues with Xen, only required on 32bit platforms
+ export CFLAGS="${CFLAGS} -mno-tls-direct-seg-refs"
+ fi
+
+ echo "slibdir=/lib" >> configparms
+
+ ../configure --prefix=/usr \
+ --enable-add-ons=nptl,libidn --without-cvs \
+ --enable-kernel=2.6.16 --disable-profile \
+ --with-headers=/usr/include --libexecdir=/usr/lib \
+ --enable-bind-now --with-tls --with-__thread \
+ --libdir=/usr/lib --without-gd
+
+ make || return 1
+ make install_root=${startdir}/pkg install || return 1
+
+ rm -f ${startdir}/pkg/etc/ld.so.cache ${startdir}/pkg/etc/ld.so.conf ${startdir}/pkg/etc/localtime
+
+ install -m755 -d ${startdir}/pkg/etc/rc.d
+ install -m755 -d ${startdir}/pkg/usr/sbin
+ install -m755 -d ${startdir}/pkg/usr/lib/locale
+ install -m644 ${startdir}/src/libc/nscd/nscd.conf ${startdir}/pkg/etc/nscd.conf
+ install -m755 ${startdir}/src/nscd ${startdir}/pkg/etc/rc.d/nscd
+ install -m755 ${startdir}/src/locale-gen ${startdir}/pkg/usr/sbin
+
+ sed -i -e 's/^\tserver-user/#\tserver-user/' ${startdir}/pkg/etc/nscd.conf || return 1
+
+ # create /etc/locale.gen
+ install -m644 ${startdir}/src/locale.gen.txt ${startdir}/pkg/etc/locale.gen
+ sed -i "s|/| |g" ${startdir}/src/libc/localedata/SUPPORTED
+ sed -i 's|\\| |g' ${startdir}/src/libc/localedata/SUPPORTED
+ sed -i "s|SUPPORTED-LOCALES=||" ${startdir}/src/libc/localedata/SUPPORTED
+ cat ${startdir}/src/libc/localedata/SUPPORTED >> ${startdir}/pkg/etc/locale.gen
+ sed -i "s|^|#|g" ${startdir}/pkg/etc/locale.gen
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # fix for the linker
+ sed -i '/RTLDLIST/s%/ld-linux.so.2 /lib64%%' ${startdir}/pkg/usr/bin/ldd
+ #Comply with multilib binaries, they look for the linker in /lib64
+ mkdir ${startdir}/pkg/lib64
+ cd ${startdir}/pkg/lib64
+ ln -v -s ../lib/ld* .
+ fi
+}
diff --git a/abs/core/glibc/fix-makecontext.patch b/abs/core/glibc/fix-makecontext.patch
new file mode 100644
index 0000000..f507b7a
--- /dev/null
+++ b/abs/core/glibc/fix-makecontext.patch
@@ -0,0 +1,33 @@
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/makecontext.S,v
+retrieving revision 1.8
+retrieving revision 1.9
+diff -u -r1.8 -r1.9
+--- libc/sysdeps/unix/sysv/linux/i386/makecontext.S 2007/12/03 04:56:56 1.8
++++ libc/sysdeps/unix/sysv/linux/i386/makecontext.S 2008/01/09 19:35:15 1.9
+@@ -1,5 +1,5 @@
+ /* Create new context.
+- Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
++ Copyright (C) 2001, 2002, 2005, 2007, 2008 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+@@ -41,13 +41,15 @@
+ movl 12(%esp), %ecx
+ movl %ecx, oEBX(%eax)
+
+- /* Make room on the new stack for the parameters. */
++ /* Make room on the new stack for the parameters.
++ Room for the arguments, return address (== L(exitcode)) and
++ oLINK pointer is needed. One of the pointer sizes is subtracted
++ after aligning the stack. */
+ negl %ecx
+- leal -8(%edx,%ecx,4), %edx
++ leal -4(%edx,%ecx,4), %edx
+ negl %ecx
+
+ /* Align the stack. */
+- addl $16, %edx
+ andl $0xfffffff0, %edx
+ subl $4, %edx
+
diff --git a/abs/core/glibc/glibc.install b/abs/core/glibc/glibc.install
new file mode 100644
index 0000000..2a35040
--- /dev/null
+++ b/abs/core/glibc/glibc.install
@@ -0,0 +1,122 @@
+pre_upgrade() {
+if [ "`uname -m`" = "x86_64" ]; then
+ if [ "`vercmp $2 2.4`" -lt 0 ]; then
+ cat << _EOF
+ ==> glibc oldpkgver < 2.4 detected!
+ ==>
+ ==> ATTENTION x86_64 USERS:
+ ==>
+ ==> We now switch from the former lib-linking to pure /lib support. To get rid
+ ==> of all lib64 directories we have removed the link /lib -> /lib64 and
+ ==> /usr/lib -> /usr/lib64.
+ ==>
+ ==> We have also rebuilt all packages we know that still used lib64 directories.
+ ==> Now all should go to /lib directories.
+ ==>
+ ==> Internally we have removed the link and then mv /lib64 /lib. Same to /usr/lib64.
+ ==> /lib64 and /usr/lib64 shouldn't exist anymore. If any package still installs to
+ ==> /lib64 or /usr/lib64 let us know.
+ ==>
+_EOF
+
+# now the moving
+rm -rf /lib/tls && echo "/lib/tls removed"
+ldconfig -r .
+rm -f /usr/lib
+mv /usr/lib64 /usr/lib && echo "/usr/lib64 moved"
+rm -f /lib
+mv /lib64 /lib && echo "/lib64 moved"
+
+ fi
+fi
+}
+
+
+post_upgrade() {
+ echo -n "reloading init: "
+ ldconfig -r .
+ init u
+ echo "done."
+ cat << _EOF
+ ==> ATTENTION INTERNATIONAL USERS:
+ ==>
+ ==> Locales are no longer included in the glibc package.
+ ==> They are generated by /usr/sbin/locale-gen depending on the contents
+ ==> of /etc/locale.gen.
+ ==> glibc will try to autodetect the required locales now, if you need
+ ==> additional locales, please enable them in /etc/locale.gen and run
+ ==> /usr/sbin/locale-gen
+ ==>
+ ==> Check /etc/locale.gen.pacnew for new supported locales
+ ==>
+_EOF
+ # Check active locales, enable the ones that are in use
+ loc=("$LANG"
+ "`grep '^LOCALE=' etc/rc.conf | awk -F '=' '{ print $2 }'`")
+ for l in "${loc[@]}"; do
+ if [ ! -z "${l}" ]; then
+ line="`grep -i "^#${l}[[:space:]]" etc/locale.gen`"
+ if [ ! -z "${line}" ]; then
+ sed -i -e "s|${line}|${line/\#/}|" etc/locale.gen
+ fi
+ fi
+ done
+
+ usr/sbin/locale-gen
+
+# fix CHOST for arch64
+if [ "`uname -m`" = "x86_64" ]; then
+ if [ "`vercmp $2 2.4`" -lt 0 ]; then
+ sed -i s/'x86_64-pc-linux-gnu'/'x86_64-unknown-linux-gnu'/ /etc/makepkg.conf && \
+ echo "in /etc/makepkg.conf CHOST has been changed to \"x86_64-unknown-linux-gnu\""
+
+ # we remove files from glibc 2.3.6 that are not removed automatically
+ rm -f /lib/ld-2.3.* && echo "removing unneeded old files"
+ rm -f /lib/libBrokenLocale-2.3.*
+ rm -f /lib/libNoVersion*
+ rm -f /lib/libanl-2.3.*
+ rm -f /lib/libc-2.3.*
+ rm -f /lib/libcidn-2.3.*
+ rm -f /lib/libcrypt-2.3.*
+ rm -f /lib/libdl-2.3.*
+ rm -f /lib/libm-2.3.*
+ rm -f /lib/libnsl-2.3.*
+ rm -f /lib/libnss1*
+ rm -f /lib/libnss_compat-2.3.*
+ rm -f /lib/libnss_dns-2.3.*
+ rm -f /lib/libnss_dns.so.1
+ rm -f /lib/libnss_files-2.3.*
+ rm -f /lib/libnss_files.so.1
+ rm -f /lib/libnss_hesiod-2.3.*
+ rm -f /lib/libnss_nis-2.3.*
+ rm -f /lib/libnss_nis.so.1
+ rm -f /lib/libnss_nisplus-2.3.*
+ rm -f /lib/libpthread-0.10.so
+ rm -f /lib/libresolv-2.3.*
+ rm -f /lib/librt-2.3.*
+ rm -f /lib/libutil-2.3.*
+ rm -fR /lib/nosegneg
+ #rm -fR /usr/include/asm
+ #rm -fR /usr/include/linux
+ rm -fR /usr/include/ntpl
+ rm -f /usr/lib/libNoVersion*
+ rm -f /usr/lib/libc_stubs.a
+ rm -f /usr/lib/libnss1*
+ rm -f /usr/lib/libnss_compat.so.1
+ rm -f /usr/lib/libnss_dns.so.1
+ rm -f /usr/lib/libnss_files.so.1
+ rm -f /usr/lib/libnss_nis.so.1
+ rm -fR /usr/lib/nptl
+ rm -f /usr/sbin/nscd_nischeck
+ rm -fR /usr/share/zoneinfo/SystemV
+ rm -fR /usr/share/zoneinfo/posix/SystemV
+ rm -fR /usr/share/zoneinfo/right/SystemV
+ ldconfig -r .
+ fi
+fi
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/glibc/locale-gen b/abs/core/glibc/locale-gen
new file mode 100755
index 0000000..5aff344
--- /dev/null
+++ b/abs/core/glibc/locale-gen
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+set -e
+
+LOCALEGEN=/etc/locale.gen
+LOCALES=/usr/share/i18n/locales
+if [ -n "$POSIXLY_CORRECT" ]; then
+ unset POSIXLY_CORRECT
+fi
+
+
+[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0;
+
+# Remove all old locale dir and locale-archive before generating new
+# locale data.
+rm -rf /usr/lib/locale/* || true
+
+umask 022
+
+is_entry_ok() {
+ if [ -n "$locale" -a -n "$charset" ] ; then
+ true
+ else
+ echo "error: Bad entry '$locale $charset'"
+ false
+ fi
+}
+
+echo "Generating locales..."
+while read locale charset; do \
+ case $locale in \#*) continue;; "") continue;; esac; \
+ is_entry_ok || continue
+ echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \
+ echo -n ".$charset"; \
+ echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \
+ echo -n '...'; \
+ if [ -f $LOCALES/$locale ]; then input=$locale; else \
+ input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \
+ localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale; \
+ echo ' done'; \
+done < $LOCALEGEN
+echo "Generation complete."
diff --git a/abs/core/glibc/locale.gen b/abs/core/glibc/locale.gen
new file mode 100644
index 0000000..c739380
--- /dev/null
+++ b/abs/core/glibc/locale.gen
@@ -0,0 +1,438 @@
+# Configuration file for locale-gen
+#
+# lists of locales that are to be generated by the locale-gen command.
+#
+# Each line is of the form:
+#
+# <locale> <charset>
+#
+# where <locale> is one of the locales given in /usr/share/i18n/locales
+# and <charset> is one of the character sets listed in /usr/share/i18n/charmaps
+#
+# Examples:
+# en_US ISO-8859-1
+# en_US.UTF-8 UTF-8
+# de_DE ISO-8859-1
+# de_DE@euro ISO-8859-15
+#
+# The locale-gen command will generate all the locales,
+# placing them in /usr/lib/locale.
+#
+# A list of supported locales is included in this file.
+# Uncomment the ones you need.
+#
+#aa_DJ.UTF-8 UTF-8
+#aa_DJ ISO-8859-1
+#aa_ER UTF-8
+#aa_ER@saaho UTF-8
+#aa_ET UTF-8
+#af_ZA.UTF-8 UTF-8
+#af_ZA ISO-8859-1
+#am_ET UTF-8
+#an_ES.UTF-8 UTF-8
+#an_ES ISO-8859-15
+#ar_AE.UTF-8 UTF-8
+#ar_AE ISO-8859-6
+#ar_BH.UTF-8 UTF-8
+#ar_BH ISO-8859-6
+#ar_DZ.UTF-8 UTF-8
+#ar_DZ ISO-8859-6
+#ar_EG.UTF-8 UTF-8
+#ar_EG ISO-8859-6
+#ar_IN UTF-8
+#ar_IQ.UTF-8 UTF-8
+#ar_IQ ISO-8859-6
+#ar_JO.UTF-8 UTF-8
+#ar_JO ISO-8859-6
+#ar_KW.UTF-8 UTF-8
+#ar_KW ISO-8859-6
+#ar_LB.UTF-8 UTF-8
+#ar_LB ISO-8859-6
+#ar_LY.UTF-8 UTF-8
+#ar_LY ISO-8859-6
+#ar_MA.UTF-8 UTF-8
+#ar_MA ISO-8859-6
+#ar_OM.UTF-8 UTF-8
+#ar_OM ISO-8859-6
+#ar_QA.UTF-8 UTF-8
+#ar_QA ISO-8859-6
+#ar_SA.UTF-8 UTF-8
+#ar_SA ISO-8859-6
+#ar_SD.UTF-8 UTF-8
+#ar_SD ISO-8859-6
+#ar_SY.UTF-8 UTF-8
+#ar_SY ISO-8859-6
+#ar_TN.UTF-8 UTF-8
+#ar_TN ISO-8859-6
+#ar_YE.UTF-8 UTF-8
+#ar_YE ISO-8859-6
+#az_AZ.UTF-8 UTF-8
+#as_IN.UTF-8 UTF-8
+#ast_ES.UTF-8 UTF-8
+#ast_ES ISO-8859-15
+#be_BY.UTF-8 UTF-8
+#be_BY CP1251
+#be_BY@latin UTF-8
+#ber_DZ UTF-8
+#ber_MA UTF-8
+#bg_BG.UTF-8 UTF-8
+#bg_BG CP1251
+#bn_BD UTF-8
+#bn_IN UTF-8
+#br_FR.UTF-8 UTF-8
+#br_FR ISO-8859-1
+#br_FR@euro ISO-8859-15
+#bs_BA.UTF-8 UTF-8
+#bs_BA ISO-8859-2
+#byn_ER UTF-8
+#ca_AD.UTF-8 UTF-8
+#ca_AD ISO-8859-15
+#ca_ES.UTF-8 UTF-8
+#ca_ES ISO-8859-1
+#ca_ES@euro ISO-8859-15
+#ca_ES.UTF-8@valencia UTF-8
+#ca_ES@valencia ISO-8859-15
+#ca_FR.UTF-8 UTF-8
+#ca_FR ISO-8859-15
+#ca_IT.UTF-8 UTF-8
+#ca_IT ISO-8859-15
+#crh_UA UTF-8
+#cs_CZ.UTF-8 UTF-8
+#cs_CZ ISO-8859-2
+#csb_PL UTF-8
+#cy_GB.UTF-8 UTF-8
+#cy_GB ISO-8859-14
+#da_DK.UTF-8 UTF-8
+#da_DK ISO-8859-1
+#da_DK.ISO-8859-15 ISO-8859-15
+#de_AT.UTF-8 UTF-8
+#de_AT ISO-8859-1
+#de_AT@euro ISO-8859-15
+#de_BE.UTF-8 UTF-8
+#de_BE ISO-8859-1
+#de_BE@euro ISO-8859-15
+#de_CH.UTF-8 UTF-8
+#de_CH ISO-8859-1
+#de_DE.UTF-8 UTF-8
+#de_DE ISO-8859-1
+#de_DE@euro ISO-8859-15
+#de_LU.UTF-8 UTF-8
+#de_LU ISO-8859-1
+#de_LU@euro ISO-8859-15
+#dz_BT UTF-8
+#el_GR.UTF-8 UTF-8
+#el_GR ISO-8859-7
+#el_CY.UTF-8 UTF-8
+#el_CY ISO-8859-7
+#en_AU.UTF-8 UTF-8
+#en_AU ISO-8859-1
+#en_BW.UTF-8 UTF-8
+#en_BW ISO-8859-1
+#en_CA.UTF-8 UTF-8
+#en_CA ISO-8859-1
+#en_DK.UTF-8 UTF-8
+#en_DK.ISO-8859-15 ISO-8859-15
+#en_DK ISO-8859-1
+#en_GB.UTF-8 UTF-8
+#en_GB ISO-8859-1
+#en_GB.ISO-8859-15 ISO-8859-15
+#en_HK.UTF-8 UTF-8
+#en_HK ISO-8859-1
+#en_IE.UTF-8 UTF-8
+#en_IE ISO-8859-1
+#en_IE@euro ISO-8859-15
+#en_IN UTF-8
+#en_NG UTF-8
+#en_NZ.UTF-8 UTF-8
+#en_NZ ISO-8859-1
+#en_PH.UTF-8 UTF-8
+#en_PH ISO-8859-1
+#en_SG.UTF-8 UTF-8
+#en_SG ISO-8859-1
+#en_US.UTF-8 UTF-8
+#en_US ISO-8859-1
+#en_US.ISO-8859-15 ISO-8859-15
+#en_ZA.UTF-8 UTF-8
+#en_ZA ISO-8859-1
+#en_ZW.UTF-8 UTF-8
+#en_ZW ISO-8859-1
+#eo.UTF-8 UTF-8
+#eo ISO-8859-3
+#es_AR.UTF-8 UTF-8
+#es_AR ISO-8859-1
+#es_BO.UTF-8 UTF-8
+#es_BO ISO-8859-1
+#es_CL.UTF-8 UTF-8
+#es_CL ISO-8859-1
+#es_CO.UTF-8 UTF-8
+#es_CO ISO-8859-1
+#es_CR.UTF-8 UTF-8
+#es_CR ISO-8859-1
+#es_DO.UTF-8 UTF-8
+#es_DO ISO-8859-1
+#es_EC.UTF-8 UTF-8
+#es_EC ISO-8859-1
+#es_ES.UTF-8 UTF-8
+#es_ES ISO-8859-1
+#es_ES@euro ISO-8859-15
+#es_GT.UTF-8 UTF-8
+#es_GT ISO-8859-1
+#es_HN.UTF-8 UTF-8
+#es_HN ISO-8859-1
+#es_MX.UTF-8 UTF-8
+#es_MX ISO-8859-1
+#es_NI.UTF-8 UTF-8
+#es_NI ISO-8859-1
+#es_PA.UTF-8 UTF-8
+#es_PA ISO-8859-1
+#es_PE.UTF-8 UTF-8
+#es_PE ISO-8859-1
+#es_PR.UTF-8 UTF-8
+#es_PR ISO-8859-1
+#es_PY.UTF-8 UTF-8
+#es_PY ISO-8859-1
+#es_SV.UTF-8 UTF-8
+#es_SV ISO-8859-1
+#es_US.UTF-8 UTF-8
+#es_US ISO-8859-1
+#es_UY.UTF-8 UTF-8
+#es_UY ISO-8859-1
+#es_VE.UTF-8 UTF-8
+#es_VE ISO-8859-1
+#et_EE.UTF-8 UTF-8
+#et_EE ISO-8859-1
+#et_EE.ISO-8859-15 ISO-8859-15
+#eu_ES.UTF-8 UTF-8
+#eu_ES ISO-8859-1
+#eu_ES@euro ISO-8859-15
+#eu_FR.UTF-8 UTF-8
+#eu_FR ISO-8859-1
+#eu_FR@euro ISO-8859-15
+#fa_IR UTF-8
+#fi_FI.UTF-8 UTF-8
+#fi_FI ISO-8859-1
+#fi_FI@euro ISO-8859-15
+#fil_PH UTF-8
+#fo_FO.UTF-8 UTF-8
+#fo_FO ISO-8859-1
+#fr_BE.UTF-8 UTF-8
+#fr_BE ISO-8859-1
+#fr_BE@euro ISO-8859-15
+#fr_CA.UTF-8 UTF-8
+#fr_CA ISO-8859-1
+#fr_CH.UTF-8 UTF-8
+#fr_CH ISO-8859-1
+#fr_FR.UTF-8 UTF-8
+#fr_FR ISO-8859-1
+#fr_FR@euro ISO-8859-15
+#fr_LU.UTF-8 UTF-8
+#fr_LU ISO-8859-1
+#fr_LU@euro ISO-8859-15
+#fur_IT UTF-8
+#fy_NL UTF-8
+#fy_DE UTF-8
+#ga_IE.UTF-8 UTF-8
+#ga_IE ISO-8859-1
+#ga_IE@euro ISO-8859-15
+#gd_GB.UTF-8 UTF-8
+#gd_GB ISO-8859-15
+#gez_ER UTF-8
+#gez_ER@abegede UTF-8
+#gez_ET UTF-8
+#gez_ET@abegede UTF-8
+#gl_ES.UTF-8 UTF-8
+#gl_ES ISO-8859-1
+#gl_ES@euro ISO-8859-15
+#gu_IN UTF-8
+#gv_GB.UTF-8 UTF-8
+#gv_GB ISO-8859-1
+#ha_NG UTF-8
+#he_IL.UTF-8 UTF-8
+#he_IL ISO-8859-8
+#hi_IN UTF-8
+#hr_HR.UTF-8 UTF-8
+#hr_HR ISO-8859-2
+#hsb_DE.UTF-8 UTF-8
+#hsb_DE ISO-8859-2
+#hu_HU.UTF-8 UTF-8
+#hu_HU ISO-8859-2
+#hy_AM UTF-8
+#hy_AM.ARMSCII-8 ARMSCII-8
+#ia UTF-8
+#id_ID.UTF-8 UTF-8
+#id_ID ISO-8859-1
+#ig_NG UTF-8
+#ik_CA UTF-8
+#is_IS.UTF-8 UTF-8
+#is_IS ISO-8859-1
+#it_CH.UTF-8 UTF-8
+#it_CH ISO-8859-1
+#it_IT.UTF-8 UTF-8
+#it_IT ISO-8859-1
+#it_IT@euro ISO-8859-15
+#iu_CA UTF-8
+#iw_IL.UTF-8 UTF-8
+#iw_IL ISO-8859-8
+#ja_JP.UTF-8 UTF-8
+#ja_JP.EUC-JP EUC-JP
+#ka_GE.UTF-8 UTF-8
+#ka_GE GEORGIAN-PS
+#kk_KZ.UTF-8 UTF-8
+#kk_KZ PT154
+#kl_GL.UTF-8 UTF-8
+#kl_GL ISO-8859-1
+#km_KH UTF-8
+#kn_IN UTF-8
+#ko_KR.UTF-8 UTF-8
+#ko_KR.EUC-KR EUC-KR
+#ku_TR.UTF-8 UTF-8
+#ku_TR ISO-8859-9
+#kw_GB.UTF-8 UTF-8
+#kw_GB ISO-8859-1
+#ky_KG UTF-8
+#lg_UG.UTF-8 UTF-8
+#lg_UG ISO-8859-10
+#li_BE UTF-8
+#li_NL UTF-8
+#lo_LA UTF-8
+#lt_LT.UTF-8 UTF-8
+#lt_LT ISO-8859-13
+#lv_LV.UTF-8 UTF-8
+#lv_LV ISO-8859-13
+#mai_IN UTF-8
+#mg_MG.UTF-8 UTF-8
+#mg_MG ISO-8859-15
+#mi_NZ.UTF-8 UTF-8
+#mi_NZ ISO-8859-13
+#mk_MK.UTF-8 UTF-8
+#mk_MK ISO-8859-5
+#ml_IN UTF-8
+#mn_MN UTF-8
+#mr_IN UTF-8
+#ms_MY.UTF-8 UTF-8
+#ms_MY ISO-8859-1
+#mt_MT.UTF-8 UTF-8
+#mt_MT ISO-8859-3
+#nb_NO.UTF-8 UTF-8
+#nb_NO ISO-8859-1
+#nds_DE UTF-8
+#nds_NL UTF-8
+#ne_NP UTF-8
+#nl_BE.UTF-8 UTF-8
+#nl_BE ISO-8859-1
+#nl_BE@euro ISO-8859-15
+#nl_NL.UTF-8 UTF-8
+#nl_NL ISO-8859-1
+#nl_NL@euro ISO-8859-15
+#nn_NO.UTF-8 UTF-8
+#nn_NO ISO-8859-1
+#nr_ZA UTF-8
+#nso_ZA UTF-8
+#oc_FR.UTF-8 UTF-8
+#oc_FR ISO-8859-1
+#om_ET UTF-8
+#om_KE.UTF-8 UTF-8
+#om_KE ISO-8859-1
+#or_IN UTF-8
+#pa_IN UTF-8
+#pa_PK UTF-8
+#pap_AN UTF-8
+#pl_PL.UTF-8 UTF-8
+#pl_PL ISO-8859-2
+#pt_BR.UTF-8 UTF-8
+#pt_BR ISO-8859-1
+#pt_PT.UTF-8 UTF-8
+#pt_PT ISO-8859-1
+#pt_PT@euro ISO-8859-15
+#ro_RO.UTF-8 UTF-8
+#ro_RO ISO-8859-2
+#ru_RU.UTF-8 UTF-8
+#ru_RU.KOI8-R KOI8-R
+#ru_RU ISO-8859-5
+#ru_RU.CP1251 CP1251
+#ru_UA.UTF-8 UTF-8
+#ru_UA KOI8-U
+#rw_RW UTF-8
+#sa_IN UTF-8
+#sc_IT UTF-8
+#se_NO UTF-8
+#si_LK UTF-8
+#sid_ET UTF-8
+#sk_SK.UTF-8 UTF-8
+#sk_SK ISO-8859-2
+#sl_SI.UTF-8 UTF-8
+#sl_SI ISO-8859-2
+#so_DJ.UTF-8 UTF-8
+#so_DJ ISO-8859-1
+#so_ET UTF-8
+#so_KE.UTF-8 UTF-8
+#so_KE ISO-8859-1
+#so_SO.UTF-8 UTF-8
+#so_SO ISO-8859-1
+#sq_AL.UTF-8 UTF-8
+#sq_AL ISO-8859-1
+#sr_ME UTF-8
+#sr_RS UTF-8
+#sr_RS@latin UTF-8
+#ss_ZA UTF-8
+#st_ZA.UTF-8 UTF-8
+#st_ZA ISO-8859-1
+#sv_FI.UTF-8 UTF-8
+#sv_FI ISO-8859-1
+#sv_FI@euro ISO-8859-15
+#sv_SE.UTF-8 UTF-8
+#sv_SE ISO-8859-1
+#sv_SE.ISO-8859-15 ISO-8859-15
+#ta_IN UTF-8
+#te_IN UTF-8
+#tg_TJ.UTF-8 UTF-8
+#tg_TJ KOI8-T
+#th_TH.UTF-8 UTF-8
+#th_TH TIS-620
+#ti_ER UTF-8
+#ti_ET UTF-8
+#tig_ER UTF-8
+#tk_TM UTF-8
+#tl_PH.UTF-8 UTF-8
+#tl_PH ISO-8859-1
+#tn_ZA UTF-8
+#tr_CY.UTF-8 UTF-8
+#tr_CY ISO-8859-9
+#tr_TR.UTF-8 UTF-8
+#tr_TR ISO-8859-9
+#ts_ZA UTF-8
+#tt_RU.UTF-8 UTF-8
+#tt_RU@iqtelif.UTF-8 UTF-8
+#ug_CN UTF-8
+#uk_UA.UTF-8 UTF-8
+#uk_UA KOI8-U
+#ur_PK UTF-8
+#uz_UZ.UTF-8 UTF-8
+#uz_UZ ISO-8859-1
+#uz_UZ@cyrillic UTF-8
+#ve_ZA UTF-8
+#vi_VN UTF-8
+#vi_VN.TCVN TCVN5712-1
+#wa_BE.UTF-8 UTF-8
+#wa_BE ISO-8859-1
+#wa_BE@euro ISO-8859-15
+#wo_SN UTF-8
+#xh_ZA.UTF-8 UTF-8
+#xh_ZA ISO-8859-1
+#yi_US.UTF-8 UTF-8
+#yi_US CP1255
+#yo_NG UTF-8
+#zh_CN.UTF-8 UTF-8
+#zh_CN.GB18030 GB18030
+#zh_CN.GBK GBK
+#zh_CN GB2312
+#zh_HK.UTF-8 UTF-8
+#zh_HK BIG5-HKSCS
+#zh_SG.UTF-8 UTF-8
+#zh_SG.GBK GBK
+#zh_SG GB2312
+#zh_TW.UTF-8 UTF-8
+#zh_TW BIG5
+#zh_TW.EUC-TW EUC-TW
+#zu_ZA.UTF-8 UTF-8
+#zu_ZA ISO-8859-1
diff --git a/abs/core/glibc/locale.gen.txt b/abs/core/glibc/locale.gen.txt
new file mode 100644
index 0000000..ccdd817
--- /dev/null
+++ b/abs/core/glibc/locale.gen.txt
@@ -0,0 +1,23 @@
+# Configuration file for locale-gen
+#
+# lists of locales that are to be generated by the locale-gen command.
+#
+# Each line is of the form:
+#
+# <locale> <charset>
+#
+# where <locale> is one of the locales given in /usr/share/i18n/locales
+# and <charset> is one of the character sets listed in /usr/share/i18n/charmaps
+#
+# Examples:
+# en_US ISO-8859-1
+# en_US.UTF-8 UTF-8
+# de_DE ISO-8859-1
+# de_DE@euro ISO-8859-15
+#
+# The locale-gen command will generate all the locales,
+# placing them in /usr/lib/locale.
+#
+# A list of supported locales is included in this file.
+# Uncomment the ones you need.
+#
diff --git a/abs/core/glibc/nscd b/abs/core/glibc/nscd
new file mode 100755
index 0000000..8b14f2a
--- /dev/null
+++ b/abs/core/glibc/nscd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/nscd`
+case "$1" in
+ start)
+ stat_busy "Starting nscd"
+ # create necessary directories if they don't already exist
+ mkdir -p /var/run/nscd /var/db/nscd 2>/dev/null
+ # remove stale files
+ rm -f /var/db/nscd/* /var/run/nscd/* 2>/dev/null
+ [ -z "$PID" ] && /usr/sbin/nscd
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon nscd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping nscd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon nscd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/glproto/PKGBUILD b/abs/core/glproto/PKGBUILD
new file mode 100644
index 0000000..fe75df2
--- /dev/null
+++ b/abs/core/glproto/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=glproto
+pkgver=1.4.9
+pkgrel=1
+pkgdesc="X11 OpenGL extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+license=('custom')
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('e60951628422663e60faeb400f27bac1')
diff --git a/abs/core/gnutls/PKGBUILD b/abs/core/gnutls/PKGBUILD
new file mode 100644
index 0000000..ec50f98
--- /dev/null
+++ b/abs/core/gnutls/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 8715 2008-08-16 04:25:59Z eric $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+# Notice:
+# When building a new major version, build, install, build again.
+#
+pkgname=gnutls
+pkgver=2.4.1
+pkgrel=1
+pkgdesc="A library which provides a secure layer over a reliable transport layer"
+arch=(i686 x86_64)
+license=('GPL3' 'LGPL')
+url="http://www.gnu.org/software/gnutls/"
+options=('libtool')
+depends=('gcc-libs' 'libtasn1>=1.4' 'readline' 'zlib' 'libgcrypt>=1.4')
+source=(ftp://ftp.gnutls.org/pub/gnutls/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('573db36cb3f8472b0293cfa1f52c607a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --with-zlib --disable-guile || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/gpm/ChangeLog b/abs/core/gpm/ChangeLog
new file mode 100644
index 0000000..c6c6a14
--- /dev/null
+++ b/abs/core/gpm/ChangeLog
@@ -0,0 +1,11 @@
+2008-06-16 Eric Belanger <eric@archlinux.org>
+
+ * gpm 1.20.5-1
+ * Upstream update
+ * Added sanity checks
+
+2008-04-17 Eric Belanger <eric@archlinux.org>
+
+ * gpm 1.20.3-1
+ * Upstream update
+ * Added missing /usr/lib/libgpm.so.1 symlink (close FS#9949)
diff --git a/abs/core/gpm/PKGBUILD b/abs/core/gpm/PKGBUILD
new file mode 100644
index 0000000..7a7c571
--- /dev/null
+++ b/abs/core/gpm/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 3002 2008-06-18 01:56:59Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=gpm
+pkgver=1.20.5
+pkgrel=1
+pkgdesc="A mouse server for the console and xterm"
+arch=('i686' 'x86_64')
+url="http://unix.schottelius.org/gpm/"
+license=('GPL')
+depends=('ncurses')
+backup=('etc/conf.d/gpm')
+options=('!makeflags')
+source=(http://unix.schottelius.org/gpm/archives/${pkgname}-${pkgver}.tar.bz2 \
+ gpm gpm.conf.d)
+md5sums=('e55473932e4052f3b74c730dfefe0d15' 'c4d42a4725503a5524cae060a959a3d3'\
+ '5f109341a7d1bb18c59d7c3a395d848a')
+sha1sums=('4a8c2109167da8e60055c25dadc383d02ba32538'
+ 'c13ad1422d24af320e2abb9786c7eacef39b293c'
+ '3bcb67027f0ad7dc393388fb02c261126671f9f5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -D -m755 ../gpm ${startdir}/pkg/etc/rc.d/gpm || return 1
+ install -D -m644 ../gpm.conf.d ${startdir}/pkg/etc/conf.d/gpm || return 1
+
+# library fixes
+ cd ${startdir}/pkg/usr/lib/
+ ln -s libgpm.so.2.* libgpm.so || return 1
+ chmod 755 ${startdir}/pkg/usr/lib/libgpm.so.* || return 1
+}
diff --git a/abs/core/gpm/gpm b/abs/core/gpm/gpm
new file mode 100755
index 0000000..4acc908
--- /dev/null
+++ b/abs/core/gpm/gpm
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# source application-specific settings
+GPM_ARGS=
+[ -f /etc/conf.d/gpm ] && . /etc/conf.d/gpm
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/gpm`
+case "$1" in
+ start)
+ stat_busy "Starting GPM Daemon"
+ [ -z "$PID" ] && /usr/sbin/gpm ${GPM_ARGS}
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon gpm
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping GPM Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon gpm
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/gpm/gpm.conf.d b/abs/core/gpm/gpm.conf.d
new file mode 100644
index 0000000..ed84f91
--- /dev/null
+++ b/abs/core/gpm/gpm.conf.d
@@ -0,0 +1,4 @@
+#
+# Parameters to be passed to gpm
+#
+GPM_ARGS="-m /dev/misc/psaux"
diff --git a/abs/core/grep/01-fgrep.patch b/abs/core/grep/01-fgrep.patch
new file mode 100644
index 0000000..c7f8f96
--- /dev/null
+++ b/abs/core/grep/01-fgrep.patch
@@ -0,0 +1,145 @@
+--- grep-2.5.1/src/search.c.fgrep 2001-04-19 04:42:14.000000000 +0100
++++ grep-2.5.1/src/search.c 2004-02-26 13:09:32.000000000 +0000
+@@ -360,13 +360,7 @@
+ /* Find a possible match using the KWset matcher. */
+ size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+- {
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free(mb_properties);
+-#endif
+- return (size_t)-1;
+- }
++ goto failure;
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+@@ -379,7 +373,7 @@
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ if (kwsm.index < kwset_exact_matches)
+- goto success;
++ goto success_in_beg_and_end;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+ }
+@@ -398,7 +392,7 @@
+ }
+ /* Successful, no backreferences encountered! */
+ if (!backref)
+- goto success;
++ goto success_in_beg_and_end;
+ }
+ else
+ end = beg + size;
+@@ -413,14 +407,11 @@
+ end - beg - 1, &(patterns[i].regs))))
+ {
+ len = patterns[i].regs.end[0] - start;
+- if (exact)
+- {
+- *match_size = len;
+- return start;
+- }
++ if (exact && !match_words)
++ goto success_in_start_and_len;
+ if ((!match_lines && !match_words)
+ || (match_lines && len == end - beg - 1))
+- goto success;
++ goto success_in_beg_and_end;
+ /* If -w, check if the match aligns with word boundaries.
+ We do this iteratively because:
+ (a) the line may contain more than one occurence of the
+@@ -434,7 +425,7 @@
+ if ((start == 0 || !WCHAR ((unsigned char) beg[start - 1]))
+ && (len == end - beg - 1
+ || !WCHAR ((unsigned char) beg[start + len])))
+- goto success;
++ goto success_in_beg_and_end;
+ if (len > 0)
+ {
+ /* Try a shorter length anchored at the same place. */
+@@ -461,19 +452,26 @@
+ }
+ } /* for Regex patterns. */
+ } /* for (beg = end ..) */
++
++ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties)
+ free (mb_properties);
+ #endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+- success:
++ success_in_beg_and_end:
++ len = end - beg;
++ start = beg - buf;
++ /* FALLTHROUGH */
++
++ success_in_start_and_len:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties)
+ free (mb_properties);
+ #endif /* MBS_SUPPORT */
+- *match_size = end - beg;
+- return beg - buf;
++ *match_size = len;
++ return start;
+ }
+
+ static void
+@@ -516,28 +514,15 @@
+ {
+ size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
+ if (offset == (size_t) -1)
+- {
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free(mb_properties);
+-#endif /* MBS_SUPPORT */
+- return offset;
+- }
++ goto failure;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+ continue; /* It is a part of multibyte character. */
+ #endif /* MBS_SUPPORT */
+ beg += offset;
+ len = kwsmatch.size[0];
+- if (exact)
+- {
+- *match_size = len;
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free (mb_properties);
+-#endif /* MBS_SUPPORT */
+- return beg - buf;
+- }
++ if (exact && !match_words)
++ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+@@ -551,6 +536,7 @@
+ goto success;
+ }
+
++ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+ free (mb_properties);
+@@ -583,7 +569,11 @@
+ end++;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+- *match_size = end - beg;
++ len = end - beg;
++ /* FALLTHROUGH */
++
++ success_in_beg_and_len:
++ *match_size = len;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+ free (mb_properties);
diff --git a/abs/core/grep/02-bracket.patch b/abs/core/grep/02-bracket.patch
new file mode 100644
index 0000000..f99571c
--- /dev/null
+++ b/abs/core/grep/02-bracket.patch
@@ -0,0 +1,11 @@
+--- grep-2.5.1/src/dfa.c.bracket 2003-10-30 16:21:14.000000000 +0000
++++ grep-2.5.1/src/dfa.c 2003-10-30 16:22:38.000000000 +0000
+@@ -586,7 +586,7 @@
+ work_mbc->coll_elems[work_mbc->ncoll_elems++] = elem;
+ }
+ }
+- wc = -1;
++ wc1 = wc = -1;
+ }
+ else
+ /* We treat '[' as a normal character here. */
diff --git a/abs/core/grep/03-i18n.patch b/abs/core/grep/03-i18n.patch
new file mode 100644
index 0000000..8dc3dfe
--- /dev/null
+++ b/abs/core/grep/03-i18n.patch
@@ -0,0 +1,303 @@
+--- grep-2.5.1/src/dfa.c 2004-02-26 13:09:54.000000000 +0000
++++ grep-2.5.1/src/dfa.c 2004-05-18 16:43:31.189200479 +0100
+@@ -414,7 +414,7 @@
+
+ /* This function fetch a wide character, and update cur_mb_len,
+ used only if the current locale is a multibyte environment. */
+-static wchar_t
++static wint_t
+ fetch_wc (char const *eoferr)
+ {
+ wchar_t wc;
+@@ -423,7 +423,7 @@
+ if (eoferr != 0)
+ dfaerror (eoferr);
+ else
+- return -1;
++ return WEOF;
+ }
+
+ cur_mb_len = mbrtowc(&wc, lexptr, lexleft, &mbs);
+@@ -459,7 +459,7 @@
+ static void
+ parse_bracket_exp_mb ()
+ {
+- wchar_t wc, wc1, wc2;
++ wint_t wc, wc1, wc2;
+
+ /* Work area to build a mb_char_classes. */
+ struct mb_char_classes *work_mbc;
+@@ -496,7 +496,7 @@
+ work_mbc->invert = 0;
+ do
+ {
+- wc1 = -1; /* mark wc1 is not initialized". */
++ wc1 = WEOF; /* mark wc1 is not initialized". */
+
+ /* Note that if we're looking at some other [:...:] construct,
+ we just treat it as a bunch of ordinary characters. We can do
+@@ -586,7 +586,7 @@
+ work_mbc->coll_elems[work_mbc->ncoll_elems++] = elem;
+ }
+ }
+- wc1 = wc = -1;
++ wc1 = wc = WEOF;
+ }
+ else
+ /* We treat '[' as a normal character here. */
+@@ -600,7 +600,7 @@
+ wc = fetch_wc(("Unbalanced ["));
+ }
+
+- if (wc1 == -1)
++ if (wc1 == WEOF)
+ wc1 = fetch_wc(_("Unbalanced ["));
+
+ if (wc1 == L'-')
+@@ -630,17 +630,17 @@
+ }
+ REALLOC_IF_NECESSARY(work_mbc->range_sts, wchar_t,
+ range_sts_al, work_mbc->nranges + 1);
+- work_mbc->range_sts[work_mbc->nranges] = wc;
++ work_mbc->range_sts[work_mbc->nranges] = (wchar_t)wc;
+ REALLOC_IF_NECESSARY(work_mbc->range_ends, wchar_t,
+ range_ends_al, work_mbc->nranges + 1);
+- work_mbc->range_ends[work_mbc->nranges++] = wc2;
++ work_mbc->range_ends[work_mbc->nranges++] = (wchar_t)wc2;
+ }
+- else if (wc != -1)
++ else if (wc != WEOF)
+ /* build normal characters. */
+ {
+ REALLOC_IF_NECESSARY(work_mbc->chars, wchar_t, chars_al,
+ work_mbc->nchars + 1);
+- work_mbc->chars[work_mbc->nchars++] = wc;
++ work_mbc->chars[work_mbc->nchars++] = (wchar_t)wc;
+ }
+ }
+ while ((wc = wc1) != L']');
+@@ -2552,6 +2552,8 @@
+ }
+
+ /* match with a character? */
++ if (case_fold)
++ wc = towlower (wc);
+ for (i = 0; i<work_mbc->nchars; i++)
+ {
+ if (wc == work_mbc->chars[i])
+--- grep-2.5.1/src/grep.c.i18n 2002-03-26 15:54:12.000000000 +0000
++++ grep-2.5.1/src/grep.c 2004-02-26 13:09:54.000000000 +0000
+@@ -30,6 +30,12 @@
+ # include <sys/time.h>
+ # include <sys/resource.h>
+ #endif
++#if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H && defined HAVE_MBRTOWC
++/* We can handle multibyte string. */
++# define MBS_SUPPORT
++# include <wchar.h>
++# include <wctype.h>
++#endif
+ #include <stdio.h>
+ #include "system.h"
+ #include "getopt.h"
+@@ -1697,6 +1703,37 @@
+ if (!install_matcher (matcher) && !install_matcher ("default"))
+ abort ();
+
++#ifdef MBS_SUPPORT
++ if (MB_CUR_MAX != 1 && match_icase)
++ {
++ wchar_t wc;
++ mbstate_t cur_state, prev_state;
++ int i, len = strlen(keys);
++
++ memset(&cur_state, 0, sizeof(mbstate_t));
++ for (i = 0; i <= len ;)
++ {
++ size_t mbclen;
++ mbclen = mbrtowc(&wc, keys + i, len - i, &cur_state);
++ if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
++ {
++ /* An invalid sequence, or a truncated multibyte character.
++ We treat it as a singlebyte character. */
++ mbclen = 1;
++ }
++ else
++ {
++ if (iswupper((wint_t)wc))
++ {
++ wc = towlower((wint_t)wc);
++ wcrtomb(keys + i, wc, &cur_state);
++ }
++ }
++ i += mbclen;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
+ (*compile)(keys, keycc);
+
+ if ((argc - optind > 1 && !no_filenames) || with_filenames)
+--- grep-2.5.1/src/search.c.i18n 2004-02-26 13:09:54.000000000 +0000
++++ grep-2.5.1/src/search.c 2004-02-26 13:17:12.000000000 +0000
+@@ -149,15 +149,16 @@
+ static char*
+ check_multibyte_string(char const *buf, size_t size)
+ {
+- char *mb_properties = malloc(size);
++ char *mb_properties = xmalloc(size);
+ mbstate_t cur_state;
++ wchar_t wc;
+ int i;
+ memset(&cur_state, 0, sizeof(mbstate_t));
+ memset(mb_properties, 0, sizeof(char)*size);
+ for (i = 0; i < size ;)
+ {
+ size_t mbclen;
+- mbclen = mbrlen(buf + i, size - i, &cur_state);
++ mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+
+ if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+ {
+@@ -165,6 +166,14 @@
+ We treat it as a singlebyte character. */
+ mbclen = 1;
+ }
++ else if (match_icase)
++ {
++ if (iswupper((wint_t)wc))
++ {
++ wc = towlower((wint_t)wc);
++ wcrtomb(buf + i, wc, &cur_state);
++ }
++ }
+ mb_properties[i] = mbclen;
+ i += mbclen;
+ }
+@@ -233,7 +242,7 @@
+ static char const line_end[] = "\\)$";
+ static char const word_beg[] = "\\(^\\|[^[:alnum:]_]\\)\\(";
+ static char const word_end[] = "\\)\\([^[:alnum:]_]\\|$\\)";
+- char *n = malloc (sizeof word_beg - 1 + size + sizeof word_end);
++ char *n = xmalloc (sizeof word_beg - 1 + size + sizeof word_end);
+ size_t i;
+ strcpy (n, match_lines ? line_beg : word_beg);
+ i = strlen (n);
+@@ -316,7 +325,7 @@
+ static char const line_end[] = ")$";
+ static char const word_beg[] = "(^|[^[:alnum:]_])(";
+ static char const word_end[] = ")([^[:alnum:]_]|$)";
+- char *n = malloc (sizeof word_beg - 1 + size + sizeof word_end);
++ char *n = xmalloc (sizeof word_beg - 1 + size + sizeof word_end);
+ size_t i;
+ strcpy (n, match_lines ? line_beg : word_beg);
+ i = strlen(n);
+@@ -339,14 +348,20 @@
+ char eol = eolbyte;
+ int backref, start, len;
+ struct kwsmatch kwsm;
+- size_t i;
++ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+ char *mb_properties = NULL;
+-#endif /* MBS_SUPPORT */
+-
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && kwset)
+- mb_properties = check_multibyte_string(buf, size);
++ if (MB_CUR_MAX > 1)
++ {
++ if (match_icase)
++ {
++ char *case_buf = xmalloc(size);
++ memcpy(case_buf, buf, size);
++ buf = case_buf;
++ }
++ if (kwset)
++ mb_properties = check_multibyte_string(buf, size);
++ }
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -455,8 +470,13 @@
+
+ failure:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties)
+- free (mb_properties);
++ if (MB_CUR_MAX > 1)
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+@@ -467,8 +487,13 @@
+
+ success_in_start_and_len:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties)
+- free (mb_properties);
++ if (MB_CUR_MAX > 1)
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ *match_size = len;
+ return start;
+@@ -504,10 +529,19 @@
+ register size_t len;
+ char eol = eolbyte;
+ struct kwsmatch kwsmatch;
++ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties;
++ char *mb_properties = NULL;
+ if (MB_CUR_MAX > 1)
+- mb_properties = check_multibyte_string (buf, size);
++ {
++ if (match_icase)
++ {
++ char *case_buf = xmalloc(size);
++ memcpy(case_buf, buf, size);
++ buf = case_buf;
++ }
++ mb_properties = check_multibyte_string(buf, size);
++ }
+ #endif /* MBS_SUPPORT */
+
+ for (beg = buf; beg <= buf + size; ++beg)
+@@ -565,7 +599,12 @@
+ failure:
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ {
++ if (match_icase)
++ free((char *) buf);
++ if (mb_properties)
++ free(mb_properties);
++ }
+ #endif /* MBS_SUPPORT */
+ return -1;
+
+@@ -581,7 +620,12 @@
+ *match_size = len;
+ #ifdef MBS_SUPPORT
+ if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ {
++ if (mb_properties)
++ free (mb_properties);
++ if (match_icase)
++ free ((char *) buf);
++ }
+ #endif /* MBS_SUPPORT */
+ return beg - buf;
+ }
diff --git a/abs/core/grep/04-oi.patch b/abs/core/grep/04-oi.patch
new file mode 100644
index 0000000..eb997ad
--- /dev/null
+++ b/abs/core/grep/04-oi.patch
@@ -0,0 +1,48 @@
+--- grep-2.5.1/lib/posix/regex.h.oi 2004-01-05 12:09:12.984391131 +0000
++++ grep-2.5.1/lib/posix/regex.h 2004-01-05 12:09:24.717990622 +0000
+@@ -109,6 +109,10 @@
+ If not set, \{, \}, {, and } are literals. */
+ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
++/* If this bit is set, then ignore case when matching.
++ If not set, then case is significant. */
++#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
++
+ /* If this bit is set, +, ? and | aren't recognized as operators.
+ If not set, they are. */
+ #define RE_LIMITED_OPS (RE_INTERVALS << 1)
+--- grep-2.5.1/src/search.c.oi 2004-01-05 12:07:00.550199415 +0000
++++ grep-2.5.1/src/search.c 2004-01-05 12:07:00.566197505 +0000
+@@ -31,7 +31,7 @@
+
+ #include "system.h"
+ #include "grep.h"
+-#include "regex.h"
++#include <regex.h>
+ #include "dfa.h"
+ #include "kwset.h"
+ #include "error.h"
+@@ -190,7 +190,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
+- re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE);
++ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE, match_icase, eolbyte);
+
+ /* For GNU regex compiler we have to pass the patterns separately to detect
+@@ -268,12 +268,12 @@
+
+ if (strcmp (matcher, "awk") == 0)
+ {
+- re_set_syntax (RE_SYNTAX_AWK);
++ re_set_syntax (RE_SYNTAX_AWK | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_AWK, match_icase, eolbyte);
+ }
+ else
+ {
+- re_set_syntax (RE_SYNTAX_POSIX_EGREP);
++ re_set_syntax (RE_SYNTAX_POSIX_EGREP | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_POSIX_EGREP, match_icase, eolbyte);
+ }
+
diff --git a/abs/core/grep/05-manpage.patch b/abs/core/grep/05-manpage.patch
new file mode 100644
index 0000000..284f0c4
--- /dev/null
+++ b/abs/core/grep/05-manpage.patch
@@ -0,0 +1,19 @@
+--- grep-2.5.1/doc/grep.1.manpage 2002-01-22 13:20:04.000000000 +0000
++++ grep-2.5.1/doc/grep.1 2003-10-08 09:37:32.000000000 +0100
+@@ -191,6 +191,7 @@
+ .I PATTERN
+ as a list of fixed strings, separated by newlines,
+ any of which is to be matched.
++.TP
+ .BR \-P ", " \-\^\-perl-regexp
+ Interpret
+ .I PATTERN
+@@ -302,7 +303,7 @@
+ This is especially useful for tools like zgrep, e.g.
+ .B "gzip -cd foo.gz |grep --label=foo something"
+ .TP
+-.BR \-\^\-line-buffering
++.BR \-\^\-line-buffered
+ Use line buffering, it can be a performance penality.
+ .TP
+ .BR \-q ", " \-\^\-quiet ", " \-\^\-silent
diff --git a/abs/core/grep/06-color.patch b/abs/core/grep/06-color.patch
new file mode 100644
index 0000000..f54c258
--- /dev/null
+++ b/abs/core/grep/06-color.patch
@@ -0,0 +1,10 @@
+--- grep-2.5.1/src/grep.c.color 2004-11-16 16:46:22.845505847 +0000
++++ grep-2.5.1/src/grep.c 2004-11-16 16:46:27.961530537 +0000
+@@ -607,6 +607,7 @@
+ fputs ("\33[00m", stdout);
+ beg = b + match_size;
+ }
++ fputs ("\33[K", stdout);
+ }
+ fwrite (beg, 1, lim - beg, stdout);
+ if (ferror (stdout))
diff --git a/abs/core/grep/07-icolor.patch b/abs/core/grep/07-icolor.patch
new file mode 100644
index 0000000..14b2617
--- /dev/null
+++ b/abs/core/grep/07-icolor.patch
@@ -0,0 +1,36 @@
+--- grep-2.5.1a/src/grep.c.icolor 2005-01-07 12:05:20.877785250 +0000
++++ grep-2.5.1a/src/grep.c 2005-01-07 12:05:44.690194388 +0000
+@@ -564,33 +564,6 @@
+ {
+ size_t match_size;
+ size_t match_offset;
+- if(match_icase)
+- {
+- /* Yuck, this is tricky */
+- char *buf = (char*) xmalloc (lim - beg);
+- char *ibeg = buf;
+- char *ilim = ibeg + (lim - beg);
+- int i;
+- for (i = 0; i < lim - beg; i++)
+- ibeg[i] = tolower (beg[i]);
+- while ((match_offset = (*execute) (ibeg, ilim-ibeg, &match_size, 1))
+- != (size_t) -1)
+- {
+- char const *b = beg + match_offset;
+- if (b == lim)
+- break;
+- fwrite (beg, sizeof (char), match_offset, stdout);
+- printf ("\33[%sm", grep_color);
+- fwrite (b, sizeof (char), match_size, stdout);
+- fputs ("\33[00m", stdout);
+- beg = b + match_size;
+- ibeg = ibeg + match_offset + match_size;
+- }
+- fwrite (beg, 1, lim - beg, stdout);
+- free (buf);
+- lastout = lim;
+- return;
+- }
+ while (lim-beg && (match_offset = (*execute) (beg, lim - beg, &match_size, 1))
+ != (size_t) -1)
+ {
diff --git a/abs/core/grep/08-skip.patch b/abs/core/grep/08-skip.patch
new file mode 100644
index 0000000..fb6645f
--- /dev/null
+++ b/abs/core/grep/08-skip.patch
@@ -0,0 +1,42 @@
+--- grep-2.5.1a/src/grep.c.skip 2006-05-31 09:26:58.000000000 +0100
++++ grep-2.5.1a/src/grep.c 2006-05-31 09:28:24.000000000 +0100
+@@ -261,19 +261,6 @@
+ bufbeg[-1] = eolbyte;
+ bufdesc = fd;
+
+- if (fstat (fd, &stats->stat) != 0)
+- {
+- error (0, errno, "fstat");
+- return 0;
+- }
+- if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
+- return 0;
+-#ifndef DJGPP
+- if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode)))
+-#else
+- if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
+-#endif
+- return 0;
+ if (S_ISREG (stats->stat.st_mode))
+ {
+ if (file)
+@@ -875,6 +862,19 @@
+ }
+ else
+ {
++ if (stat (file, &stats->stat) != 0)
++ {
++ suppressible_error (file, errno);
++ return 1;
++ }
++ if (directories == SKIP_DIRECTORIES && S_ISDIR (stats->stat.st_mode))
++ return 1;
++#ifndef DJGPP
++ if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode) || S_ISSOCK(stats->stat.st_mode) || S_ISFIFO(stats->stat.st_mode)))
++#else
++ if (devices == SKIP_DEVICES && (S_ISCHR(stats->stat.st_mode) || S_ISBLK(stats->stat.st_mode)))
++#endif
++ return 1;
+ while ((desc = open (file, O_RDONLY)) < 0 && errno == EINTR)
+ continue;
+
diff --git a/abs/core/grep/09-egf-speedup.patch b/abs/core/grep/09-egf-speedup.patch
new file mode 100644
index 0000000..08e92c7
--- /dev/null
+++ b/abs/core/grep/09-egf-speedup.patch
@@ -0,0 +1,823 @@
+--- grep-2.5.1/src/search.c 2004-12-31 15:28:35.720391036 +0000
++++ grep-2.5.1a/src/search.c 2005-01-07 14:53:10.308860193 +0000
+@@ -18,9 +18,13 @@
+
+ /* Written August 1992 by Mike Haertel. */
+
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
++#include <assert.h>
+ #include <sys/types.h>
+ #if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H && defined HAVE_MBRTOWC
+ /* We can handle multibyte string. */
+@@ -39,6 +43,9 @@
+ #ifdef HAVE_LIBPCRE
+ # include <pcre.h>
+ #endif
++#ifdef HAVE_LANGINFO_CODESET
++# include <langinfo.h>
++#endif
+
+ #define NCHAR (UCHAR_MAX + 1)
+
+@@ -70,9 +77,10 @@
+ call the regexp matcher at all. */
+ static int kwset_exact_matches;
+
+-#if defined(MBS_SUPPORT)
+-static char* check_multibyte_string PARAMS ((char const *buf, size_t size));
+-#endif
++/* UTF-8 encoding allows some optimizations that we can't otherwise
++ assume in a multibyte encoding. */
++static int using_utf8;
++
+ static void kwsinit PARAMS ((void));
+ static void kwsmusts PARAMS ((void));
+ static void Gcompile PARAMS ((char const *, size_t));
+@@ -84,6 +92,15 @@
+ static size_t Pexecute PARAMS ((char const *, size_t, size_t *, int));
+
+ void
++check_utf8 (void)
++{
++#ifdef HAVE_LANGINFO_CODESET
++ if (strcmp (nl_langinfo (CODESET), "UTF-8") == 0)
++ using_utf8 = 1;
++#endif
++}
++
++void
+ dfaerror (char const *mesg)
+ {
+ error (2, 0, mesg);
+@@ -141,47 +158,6 @@
+ }
+ }
+
+-#ifdef MBS_SUPPORT
+-/* This function allocate the array which correspond to "buf".
+- Then this check multibyte string and mark on the positions which
+- are not singlebyte character nor the first byte of a multibyte
+- character. Caller must free the array. */
+-static char*
+-check_multibyte_string(char const *buf, size_t size)
+-{
+- char *mb_properties = xmalloc(size);
+- mbstate_t cur_state;
+- wchar_t wc;
+- int i;
+- memset(&cur_state, 0, sizeof(mbstate_t));
+- memset(mb_properties, 0, sizeof(char)*size);
+- for (i = 0; i < size ;)
+- {
+- size_t mbclen;
+- mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+-
+- if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+- {
+- /* An invalid sequence, or a truncated multibyte character.
+- We treat it as a singlebyte character. */
+- mbclen = 1;
+- }
+- else if (match_icase)
+- {
+- if (iswupper((wint_t)wc))
+- {
+- wc = towlower((wint_t)wc);
+- wcrtomb(buf + i, wc, &cur_state);
+- }
+- }
+- mb_properties[i] = mbclen;
+- i += mbclen;
+- }
+-
+- return mb_properties;
+-}
+-#endif
+-
+ static void
+ Gcompile (char const *pattern, size_t size)
+ {
+@@ -190,6 +166,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | (match_icase ? RE_ICASE : 0));
+ dfasyntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE, match_icase, eolbyte);
+
+@@ -266,6 +243,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ if (strcmp (matcher, "awk") == 0)
+ {
+ re_set_syntax (RE_SYNTAX_AWK | (match_icase ? RE_ICASE : 0));
+@@ -350,18 +328,9 @@
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- buf = case_buf;
+- }
+- if (kwset)
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -373,21 +342,63 @@
+ if (kwset)
+ {
+ /* Find a possible match using the KWset matcher. */
+- size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
++ size_t offset;
++#ifdef MBS_SUPPORT
++ /* kwsexec doesn't work with match_icase and multibyte input. */
++ if (match_icase && mb_cur_max > 1)
++ /* Avoid kwset */
++ offset = 0;
++ else
++#endif /* MBS_SUPPORT */
++ offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+ goto failure;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+ end = memchr(beg, eol, buflim - beg);
+ end++;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[beg - buf] == 0)
++ if (mb_cur_max > 1 && bytes_left)
+ continue;
+-#endif
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+- if (kwsm.index < kwset_exact_matches)
++ if (
++#ifdef MBS_SUPPORT
++ !(match_icase && mb_cur_max > 1) &&
++#endif /* MBS_SUPPORT */
++ (kwsm.index < kwset_exact_matches))
+ goto success_in_beg_and_end;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+@@ -395,13 +406,47 @@
+ else
+ {
+ /* No good fixed strings; start with DFA. */
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
+ size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ end = memchr (beg, eol, buflim - beg);
+ end++;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && bytes_left)
++ continue;
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ }
+@@ -469,15 +514,6 @@
+ } /* for (beg = end ..) */
+
+ failure:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ return (size_t) -1;
+
+ success_in_beg_and_end:
+@@ -486,24 +522,144 @@
+ /* FALLTHROUGH */
+
+ success_in_start_and_len:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ *match_size = len;
+ return start;
+ }
+
++#ifdef MBS_SUPPORT
++static int f_i_multibyte; /* whether we're using the new -Fi MB method */
++static struct
++{
++ wchar_t **patterns;
++ size_t count, maxlen;
++ unsigned char *match;
++} Fimb;
++#endif
++
+ static void
+ Fcompile (char const *pattern, size_t size)
+ {
++ int mb_cur_max = MB_CUR_MAX;
+ char const *beg, *lim, *err;
+
++ check_utf8 ();
++#ifdef MBS_SUPPORT
++ /* Support -F -i for UTF-8 input. */
++ if (match_icase && mb_cur_max > 1)
++ {
++ mbstate_t mbs;
++ wchar_t *wcpattern = xmalloc ((size + 1) * sizeof (wchar_t));
++ const char *patternend = pattern;
++ size_t wcsize;
++ kwset_t fimb_kwset = NULL;
++ char *starts = NULL;
++ wchar_t *wcbeg, *wclim;
++ size_t allocated = 0;
++
++ memset (&mbs, '\0', sizeof (mbs));
++# ifdef __GNU_LIBRARY__
++ wcsize = mbsnrtowcs (wcpattern, &patternend, size, size, &mbs);
++ if (patternend != pattern + size)
++ wcsize = (size_t) -1;
++# else
++ {
++ char *patterncopy = xmalloc (size + 1);
++
++ memcpy (patterncopy, pattern, size);
++ patterncopy[size] = '\0';
++ patternend = patterncopy;
++ wcsize = mbsrtowcs (wcpattern, &patternend, size, &mbs);
++ if (patternend != patterncopy + size)
++ wcsize = (size_t) -1;
++ free (patterncopy);
++ }
++# endif
++ if (wcsize + 2 <= 2)
++ {
++fimb_fail:
++ free (wcpattern);
++ free (starts);
++ if (fimb_kwset)
++ kwsfree (fimb_kwset);
++ free (Fimb.patterns);
++ Fimb.patterns = NULL;
++ }
++ else
++ {
++ if (!(fimb_kwset = kwsalloc (NULL)))
++ error (2, 0, _("memory exhausted"));
++
++ starts = xmalloc (mb_cur_max * 3);
++ wcbeg = wcpattern;
++ do
++ {
++ int i;
++ size_t wclen;
++
++ if (Fimb.count >= allocated)
++ {
++ if (allocated == 0)
++ allocated = 128;
++ else
++ allocated *= 2;
++ Fimb.patterns = xrealloc (Fimb.patterns,
++ sizeof (wchar_t *) * allocated);
++ }
++ Fimb.patterns[Fimb.count++] = wcbeg;
++ for (wclim = wcbeg;
++ wclim < wcpattern + wcsize && *wclim != L'\n'; ++wclim)
++ *wclim = towlower (*wclim);
++ *wclim = L'\0';
++ wclen = wclim - wcbeg;
++ if (wclen > Fimb.maxlen)
++ Fimb.maxlen = wclen;
++ if (wclen > 3)
++ wclen = 3;
++ if (wclen == 0)
++ {
++ if ((err = kwsincr (fimb_kwset, "", 0)) != 0)
++ error (2, 0, err);
++ }
++ else
++ for (i = 0; i < (1 << wclen); i++)
++ {
++ char *p = starts;
++ int j, k;
++
++ for (j = 0; j < wclen; ++j)
++ {
++ wchar_t wc = wcbeg[j];
++ if (i & (1 << j))
++ {
++ wc = towupper (wc);
++ if (wc == wcbeg[j])
++ continue;
++ }
++ k = wctomb (p, wc);
++ if (k <= 0)
++ goto fimb_fail;
++ p += k;
++ }
++ if ((err = kwsincr (fimb_kwset, starts, p - starts)) != 0)
++ error (2, 0, err);
++ }
++ if (wclim < wcpattern + wcsize)
++ ++wclim;
++ wcbeg = wclim;
++ }
++ while (wcbeg < wcpattern + wcsize);
++ f_i_multibyte = 1;
++ kwset = fimb_kwset;
++ free (starts);
++ Fimb.match = xmalloc (Fimb.count);
++ if ((err = kwsprep (kwset)) != 0)
++ error (2, 0, err);
++ return;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
++
+ kwsinit ();
+ beg = pattern;
+ do
+@@ -522,6 +678,76 @@
+ error (2, 0, err);
+ }
+
++#ifdef MBS_SUPPORT
++static int
++Fimbexec (const char *buf, size_t size, size_t *plen, int exact)
++{
++ size_t len, letter, i;
++ int ret = -1;
++ mbstate_t mbs;
++ wchar_t wc;
++ int patterns_left;
++
++ assert (match_icase && f_i_multibyte == 1);
++ assert (MB_CUR_MAX > 1);
++
++ memset (&mbs, '\0', sizeof (mbs));
++ memset (Fimb.match, '\1', Fimb.count);
++ letter = len = 0;
++ patterns_left = 1;
++ while (patterns_left && len <= size)
++ {
++ size_t c;
++
++ patterns_left = 0;
++ if (len < size)
++ {
++ c = mbrtowc (&wc, buf + len, size - len, &mbs);
++ if (c + 2 <= 2)
++ return ret;
++
++ wc = towlower (wc);
++ }
++ else
++ {
++ c = 1;
++ wc = L'\0';
++ }
++
++ for (i = 0; i < Fimb.count; i++)
++ {
++ if (Fimb.match[i])
++ {
++ if (Fimb.patterns[i][letter] == L'\0')
++ {
++ /* Found a match. */
++ *plen = len;
++ if (!exact && !match_words)
++ return 0;
++ else
++ {
++ /* For -w or exact look for longest match. */
++ ret = 0;
++ Fimb.match[i] = '\0';
++ continue;
++ }
++ }
++
++ if (Fimb.patterns[i][letter] == wc)
++ patterns_left = 1;
++ else
++ Fimb.match[i] = '\0';
++ }
++ }
++
++ len += c;
++ letter++;
++ }
++
++ return ret;
++}
++#endif /* MBS_SUPPORT */
++
+ static size_t
+ Fexecute (char const *buf, size_t size, size_t *match_size, int exact)
+ {
+@@ -531,80 +757,258 @@
+ struct kwsmatch kwsmatch;
+ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- buf = case_buf;
+- }
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ const char *last_char = NULL;
+ #endif /* MBS_SUPPORT */
+
+ for (beg = buf; beg <= buf + size; ++beg)
+ {
+- size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
++ size_t offset;
++ offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
++
+ if (offset == (size_t) -1)
+ goto failure;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+- continue; /* It is a part of multibyte character. */
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character: no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ continue;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+ beg += offset;
++#ifdef MBS_SUPPORT
++ /* For f_i_multibyte, the string at beg now matches first 3 chars of
++ one of the search strings (less if there are shorter search strings).
++ See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, buf + size - beg, &kwsmatch.size[0], exact))
++ goto next_char;
++#endif /* MBS_SUPPORT */
+ len = kwsmatch.size[0];
+ if (exact && !match_words)
+ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+- continue;
++ goto next_char;
+ if (beg + len < buf + size && beg[len] != eol)
+- continue;
++ goto next_char;
+ goto success;
+ }
+ else if (match_words)
+- for (try = beg; len; )
+- {
+- if (try > buf && WCHAR((unsigned char) try[-1]))
+- break;
+- if (try + len < buf + size && WCHAR((unsigned char) try[len]))
+- {
+- offset = kwsexec (kwset, beg, --len, &kwsmatch);
+- if (offset == (size_t) -1)
+- {
++ {
++ while (len)
++ {
++ int word_match = 0;
++ if (beg > buf)
++ {
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- free (mb_properties);
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ int mr;
++ wchar_t pwc;
++
++ if (using_utf8)
++ {
++ s = beg - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ s = last_char;
++ mr = mbtowc (&pwc, s, beg - s);
++ if (mr <= 0)
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ else if ((iswalnum (pwc) || pwc == L'_')
++ && mr == (int) (beg - s))
++ goto next_char;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+- return offset;
+- }
+- try = beg + offset;
+- len = kwsmatch.size[0];
+- }
+- else
+- goto success;
+- }
++ if (WCHAR ((unsigned char) beg[-1]))
++ goto next_char;
++ }
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
++
++ mr = mbtowc (&nwc, beg + len, buf + size - beg - len);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ word_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ word_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (beg + len >= buf + size || !WCHAR ((unsigned char) beg[len]))
++ word_match = 1;
++ if (word_match)
++ {
++ if (!exact)
++ /* Returns the whole line now we know there's a word match. */
++ goto success;
++ else
++ /* Returns just this word match. */
++ goto success_in_beg_and_len;
++ }
++ if (len > 0)
++ {
++ /* Try a shorter length anchored at the same place. */
++ --len;
++ offset = kwsexec (kwset, beg, len, &kwsmatch);
++
++ if (offset == -1)
++ goto next_char; /* Try a different anchor. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ {
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++ }
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ goto next_char; /* Try a different anchor. */
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
++ beg += offset;
++#ifdef MBS_SUPPORT
++ /* The string at beg now matches first 3 chars of one of
++ the search strings (less if there are shorter search
++ strings). See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, len - offset, &kwsmatch.size[0],
++ exact))
++ goto next_char;
++#endif /* MBS_SUPPORT */
++ len = kwsmatch.size[0];
++ }
++ }
++ }
+ else
+ goto success;
++next_char:;
++#ifdef MBS_SUPPORT
++ /* Advance to next character. For MB_CUR_MAX == 1 case this is handled
++ by ++beg above. */
++ if (mb_cur_max > 1)
++ {
++ if (using_utf8)
++ {
++ unsigned char c = *beg;
++ if (c >= 0xc2)
++ {
++ if (c < 0xe0)
++ ++beg;
++ else if (c < 0xf0)
++ beg += 2;
++ else if (c < 0xf8)
++ beg += 3;
++ else if (c < 0xfc)
++ beg += 4;
++ else if (c < 0xfe)
++ beg += 5;
++ }
++ }
++ else
++ {
++ size_t l = mbrlen (beg, buf + size - beg, &mbs);
++
++ last_char = beg;
++ if (l + 2 >= 2)
++ beg += l - 1;
++ else
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ }
++ }
++#endif /* MBS_SUPPORT */
+ }
+
+ failure:
++ return -1;
++
++ success:
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
++ if (mb_cur_max > 1 && !using_utf8)
+ {
+- if (match_icase)
+- free((char *) buf);
+- if (mb_properties)
+- free(mb_properties);
++ end = beg + len;
++ while (end < buf + size)
++ {
++ size_t mlen = mbrlen (end, buf + size - end, &mbs);
++ if (mlen == (size_t) -1 || mlen == (size_t) -2 || mlen == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ mlen = 1;
++ }
++ if (mlen == 1 && *end == eol)
++ break;
++
++ end += mlen;
++ }
+ }
++ else
+ #endif /* MBS_SUPPORT */
+- return -1;
+-
+- success:
+ end = memchr (beg + len, eol, (buf + size) - (beg + len));
++
+ end++;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+@@ -613,15 +1017,6 @@
+
+ success_in_beg_and_len:
+ *match_size = len;
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (mb_properties)
+- free (mb_properties);
+- if (match_icase)
+- free ((char *) buf);
+- }
+-#endif /* MBS_SUPPORT */
+ return beg - buf;
+ }
+
diff --git a/abs/core/grep/10-dfa-optional.patch b/abs/core/grep/10-dfa-optional.patch
new file mode 100644
index 0000000..784eba9
--- /dev/null
+++ b/abs/core/grep/10-dfa-optional.patch
@@ -0,0 +1,67 @@
+--- grep-2.5.1a/src/search.c.dfa-optional 2005-01-07 14:58:45.714869815 +0000
++++ grep-2.5.1a/src/search.c 2005-01-07 14:58:45.725867716 +0000
+@@ -327,12 +327,34 @@
+ int backref, start, len;
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
++ static int use_dfa;
++ static int use_dfa_checked = 0;
+ #ifdef MBS_SUPPORT
+ int mb_cur_max = MB_CUR_MAX;
+ mbstate_t mbs;
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
++ if (!use_dfa_checked)
++ {
++ char *grep_use_dfa = getenv ("GREP_USE_DFA");
++ if (!grep_use_dfa)
++ {
++#ifdef MBS_SUPPORT
++ /* Turn off DFA when processing multibyte input. */
++ use_dfa = (MB_CUR_MAX == 1);
++#else
++ use_dfa = 1;
++#endif /* MBS_SUPPORT */
++ }
++ else
++ {
++ use_dfa = atoi (grep_use_dfa);
++ }
++
++ use_dfa_checked = 1;
++ }
++
+ buflim = buf + size;
+
+ for (beg = end = buf; end < buflim; beg = end)
+@@ -400,7 +422,8 @@
+ #endif /* MBS_SUPPORT */
+ (kwsm.index < kwset_exact_matches))
+ goto success_in_beg_and_end;
+- if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
++ if (use_dfa &&
++ dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+ }
+ else
+@@ -409,7 +432,9 @@
+ #ifdef MBS_SUPPORT
+ size_t bytes_left = 0;
+ #endif /* MBS_SUPPORT */
+- size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
++ size_t offset = 0;
++ if (use_dfa)
++ offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
+@@ -451,7 +476,7 @@
+ --beg;
+ }
+ /* Successful, no backreferences encountered! */
+- if (!backref)
++ if (use_dfa && !backref)
+ goto success_in_beg_and_end;
+ }
+ else
diff --git a/abs/core/grep/11-tests.patch b/abs/core/grep/11-tests.patch
new file mode 100644
index 0000000..2934a21
--- /dev/null
+++ b/abs/core/grep/11-tests.patch
@@ -0,0 +1,138 @@
+--- grep-2.5.1/tests/Makefile.am.jj 2001-03-07 05:11:27.000000000 +0100
++++ grep-2.5.1/tests/Makefile.am 2004-12-31 11:42:41.595492300 +0100
+@@ -3,7 +3,8 @@
+ AWK=@AWK@
+
+ TESTS = warning.sh khadafy.sh spencer1.sh bre.sh ere.sh \
+- status.sh empty.sh options.sh backref.sh file.sh
++ status.sh empty.sh options.sh backref.sh file.sh \
++ fmbtest.sh
+ EXTRA_DIST = $(TESTS) \
+ khadafy.lines khadafy.regexp \
+ spencer1.awk spencer1.tests \
+--- grep-2.5.1/tests/fmbtest.sh 2004-12-31 13:30:23.942871250 +0100
++++ grep-2.5.1/tests/fmbtest.sh 2004-12-31 14:09:13.219463855 +0100
+@@ -0,0 +1,111 @@
++#!/bin/sh
++
++: ${srcdir=.}
++
++# If cs_CZ.UTF-8 locale doesn't work, skip this test silently
++LC_ALL=cs_CZ.UTF-8 locale -k LC_CTYPE 2>/dev/null | ${GREP} -q charmap.*UTF-8 \
++ || exit 77
++
++failures=0
++
++cat > csinput <<EOF
++01 ŽluÅ¥ouÄká Äíše
++ČíŠE 02
++03 Z Äíší ÄŒiší cosi
++04 Čí
++Å e 05
++06 ČČČČČČČíšČÃÅ Äíš
++07 ČČČ ČČČČíšČÃÅ ÄíšEEEE
++ÄAs 08
++09ÄŒapka
++10ÄŒaSy se mÄ›nÃ
++ÄŒÃÅ¡E11
++ÄŒas12
++ð‡•ÄŒÃÅ¡Eð‡“13
++ŽČÃÅ¡Eð‡“14
++ð‡•ÄŒÃÅ¡EŽ15
++ŽČÃÅ¡EŽ16
++ÄŒÃÅ¡Eð‡“17
++ÄŒÃÅ¡EŽ18
++19ð‡•ÄŒÃÅ¡e
++20ŽČÃÅ¡e
++EOF
++cat > cspatfile <<EOF
++ÄŒÃÅ¡E
++ÄŒas
++EOF
++
++for mode in F G E; do
++
++test1="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode} -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test1" != "11 12 13 14 15 16 17 18"; then
++ echo "Test #1 ${mode} failed: $test1"
++ failures=1
++fi
++
++test2="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test2" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #2 ${mode} failed: $test2"
++ failures=1
++fi
++
++test3="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -e 'ÄŒÃÅ¡E' -e 'ÄŒas' csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test3" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #3 ${mode} failed: $test3"
++ failures=1
++fi
++
++test4="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}iw -f cspatfile csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test4" != "01 02 08 13 17 19"; then
++ echo "Test #4 ${mode} failed: $test4"
++ failures=1
++fi
++
++done
++
++# Test that -F --color=always prefers longer matches.
++test5="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -Fi -e 'ÄiÅ¡' -e 'Äiší'`"
++if echo "$test5" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡Ã.*\[.*m\(.\[K\)\?\.\.\.'; then
++ :
++else
++ echo "Test #5 F failed: $test5"
++ failures=1
++fi
++
++for mode in G E; do
++
++# Test that -{G,E} --color=always prefers earlier pattern matches.
++test6="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -${mode}i -e 'ÄiÅ¡' -e 'Äiší'`"
++if echo "$test6" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡.*\[.*m\(.\[K\)\?Ã\.\.\.'; then
++ :
++else
++ echo "Test #6 ${mode} failed: $test6"
++ failures=1
++fi
++
++# Test that -{G,E} --color=always prefers earlier pattern matches.
++test7="`echo 'Cosi tu ÄŒiÅ¡Ã...' \
++ | LC_ALL=cs_CZ.UTF-8 ${GREP} --color=always -${mode}i -e 'Äiší' -e 'ÄiÅ¡'`"
++if echo "$test7" | LC_ALL=C ${GREP} -q 'Cosi tu .*\[.*mÄŒiÅ¡Ã.*\[.*m\(.\[K\)\?\.\.\.'; then
++ :
++else
++ echo "Test #7 ${mode} failed: $test7"
++ failures=1
++fi
++
++test8="$(echo `LC_ALL=cs_CZ.UTF-8 ${GREP} -${mode}i -e 'Č.šE' -e 'Č[a-f]s' csinput \
++ | LC_ALL=C sed 's/^.*\([0-9][0-9]\).*$/\1/'`)"
++if test "$test8" != "01 02 07 08 10 11 12 13 14 15 16 17 18 19 20"; then
++ echo "Test #8 ${mode} failed: $test8"
++ failures=1
++fi
++
++done
++
++exit $failures
+--- grep-2.5.1/tests/Makefile.in.jj 2004-12-31 11:42:53.000000000 +0100
++++ grep-2.5.1/tests/Makefile.in 2004-12-31 11:43:36.871514505 +0100
+@@ -97,7 +97,8 @@ install_sh = @install_sh@
+ AWK = @AWK@
+
+ TESTS = warning.sh khadafy.sh spencer1.sh bre.sh ere.sh \
+- status.sh empty.sh options.sh backref.sh file.sh
++ status.sh empty.sh options.sh backref.sh file.sh \
++ fmbtest.sh
+
+ EXTRA_DIST = $(TESTS) \
+ khadafy.lines khadafy.regexp \
diff --git a/abs/core/grep/12-w.patch b/abs/core/grep/12-w.patch
new file mode 100644
index 0000000..79ae2ae
--- /dev/null
+++ b/abs/core/grep/12-w.patch
@@ -0,0 +1,121 @@
+--- grep-2.5.1a/src/search.c.w 2006-02-20 14:27:27.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-02-20 14:32:07.000000000 +0000
+@@ -507,10 +507,114 @@
+ if (match_words)
+ while (start >= 0)
+ {
+- if ((start == 0 || !WCHAR ((unsigned char) beg[start - 1]))
+- && (len == end - beg - 1
+- || !WCHAR ((unsigned char) beg[start + len])))
+- goto success_in_beg_and_end;
++ int lword_match = 0;
++ if (start == 0)
++ lword_match = 1;
++ else
++ {
++ assert (start > 0);
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ size_t mr;
++ wchar_t pwc;
++
++ /* Locate the start of the multibyte character
++ before the match position (== beg + start). */
++ if (using_utf8)
++ {
++ /* UTF-8 is a special case: scan backwards
++ until we find a 7-bit character or a
++ lead byte. */
++ s = beg + start - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ {
++ /* Scan forwards to find the start of the
++ last complete character before the
++ match position. */
++ size_t bytes_left = start - 1;
++ s = beg;
++ while (bytes_left > 0)
++ {
++ mr = mbrlen (s, bytes_left, &mbs);
++ if (mr == (size_t) -1 || mr == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbs));
++ s++;
++ bytes_left--;
++ continue;
++ }
++ if (mr == (size_t) -2)
++ {
++ memset (&mbs, '\0', sizeof (mbs));
++ break;
++ }
++ s += mr;
++ bytes_left -= mr;
++ }
++ }
++ mr = mbrtowc (&pwc, s, beg + start - s, &mbs);
++ if (mr == (size_t) -2 || mr == (size_t) -1 ||
++ mr == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ lword_match = 1;
++ }
++ else if (!(iswalnum (pwc) || pwc == L'_')
++ && mr == beg + start - s)
++ lword_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (!WCHAR ((unsigned char) beg[start - 1]))
++ lword_match = 1;
++ }
++
++ if (lword_match)
++ {
++ int rword_match = 0;
++ if (start + len == end - beg - 1)
++ rword_match = 1;
++ else
++ {
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
++
++ mr = mbtowc (&nwc, beg + start + len,
++ end - beg - start - len - 1);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ rword_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ rword_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (!WCHAR ((unsigned char) beg[start + len]))
++ rword_match = 1;
++ }
++
++ if (rword_match)
++ {
++ if (!exact)
++ /* Returns the whole line. */
++ goto success_in_beg_and_end;
++ else
++ /* Returns just this word match. */
++ goto success_in_start_and_len;
++ }
++ }
+ if (len > 0)
+ {
+ /* Try a shorter length anchored at the same place. */
diff --git a/abs/core/grep/13-P.patch b/abs/core/grep/13-P.patch
new file mode 100644
index 0000000..9dca4ad
--- /dev/null
+++ b/abs/core/grep/13-P.patch
@@ -0,0 +1,14 @@
+--- grep-2.5.1a/src/search.c.P 2006-02-03 14:08:00.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-02-03 14:11:20.000000000 +0000
+@@ -1234,8 +1234,9 @@
+ char eol = eolbyte;
+ if (!exact)
+ {
+- end = memchr (end, eol, buflim - end);
+- end++;
++ while (end < buflim)
++ if (*end++ == eol)
++ break;
+ while (buf < beg && beg[-1] != eol)
+ --beg;
+ }
diff --git a/abs/core/grep/14-mem-exhausted.patch b/abs/core/grep/14-mem-exhausted.patch
new file mode 100644
index 0000000..d6a996d
--- /dev/null
+++ b/abs/core/grep/14-mem-exhausted.patch
@@ -0,0 +1,15 @@
+--- grep-2.5.1a/src/grep.c.mem-exhausted 2006-11-22 14:49:35.000000000 +0000
++++ grep-2.5.1a/src/grep.c 2006-11-22 14:53:12.000000000 +0000
+@@ -299,6 +299,12 @@
+ int cc = 1;
+ char *readbuf;
+ size_t readsize;
++ const size_t max_save = 200 * 1024 * 1024;
++
++ /* Limit the amount of saved data to 200Mb so we don't fail on
++ * large files. */
++ if (save > max_save)
++ save = max_save;
+
+ /* Offset from start of buffer to start of old stuff
+ that we want to save. */
diff --git a/abs/core/grep/15-empty-pattern.patch b/abs/core/grep/15-empty-pattern.patch
new file mode 100644
index 0000000..acb702a
--- /dev/null
+++ b/abs/core/grep/15-empty-pattern.patch
@@ -0,0 +1,36 @@
+--- grep-2.5.1a/src/grep.c.empty-pattern 2006-11-22 19:05:43.000000000 +0000
++++ grep-2.5.1a/src/grep.c 2006-11-22 19:22:04.000000000 +0000
+@@ -1667,9 +1667,6 @@
+ out_invert ^= 1;
+ match_lines = match_words = 0;
+ }
+- else
+- /* Strip trailing newline. */
+- --keycc;
+ }
+ else
+ if (optind < argc)
+--- grep-2.5.1a/src/search.c.empty-pattern 2006-11-22 19:21:11.000000000 +0000
++++ grep-2.5.1a/src/search.c 2006-11-22 19:35:06.000000000 +0000
+@@ -204,6 +204,10 @@
+ motif = sep;
+ } while (sep && total != 0);
+
++ /* Strip trailing newline. */
++ if (size && pattern[size - 1] == '\n')
++ size--;
++
+ /* In the match_words and match_lines cases, we use a different pattern
+ for the DFA matcher that will quickly throw out cases that won't work.
+ Then if DFA succeeds we do some hairy stuff using the regex matcher
+@@ -288,6 +292,10 @@
+ motif = sep;
+ } while (sep && total != 0);
+
++ /* Strip trailing newline. */
++ if (size && pattern[size - 1] == '\n')
++ size--;
++
+ /* In the match_words and match_lines cases, we use a different pattern
+ for the DFA matcher that will quickly throw out cases that won't work.
+ Then if DFA succeeds we do some hairy stuff using the regex matcher
diff --git a/abs/core/grep/64-egf-speedup.patch b/abs/core/grep/64-egf-speedup.patch
new file mode 100644
index 0000000..a1fa024
--- /dev/null
+++ b/abs/core/grep/64-egf-speedup.patch
@@ -0,0 +1,791 @@
+--- a/src/search.c.orig
++++ b/src/search.c
+@@ -18,10 +18,15 @@
+
+ /* Written August 1992 by Mike Haertel. */
+
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+
++#include <assert.h>
++
+ #include <sys/types.h>
+
+ #include "mbsupport.h"
+@@ -43,6 +48,9 @@
+ #ifdef HAVE_LIBPCRE
+ # include <pcre.h>
+ #endif
++#ifdef HAVE_LANGINFO_CODESET
++# include <langinfo.h>
++#endif
+
+ #define NCHAR (UCHAR_MAX + 1)
+
+@@ -68,6 +76,19 @@
+ error (2, 0, _("memory exhausted"));
+ }
+
++/* UTF-8 encoding allows some optimizations that we can't otherwise
++ assume in a multibyte encoding. */
++static int using_utf8;
++
++void
++check_utf8 (void)
++{
++#ifdef HAVE_LANGINFO_CODESET
++ if (strcmp (nl_langinfo (CODESET), "UTF-8") == 0)
++ using_utf8 = 1;
++#endif
++}
++
+ #ifndef FGREP_PROGRAM
+ /* DFA compiled regexp. */
+ static struct dfa dfa;
+@@ -134,49 +155,6 @@
+ }
+ #endif /* !FGREP_PROGRAM */
+
+-#ifdef MBS_SUPPORT
+-/* This function allocate the array which correspond to "buf".
+- Then this check multibyte string and mark on the positions which
+- are not single byte character nor the first byte of a multibyte
+- character. Caller must free the array. */
+-static char*
+-check_multibyte_string(char const *buf, size_t size)
+-{
+- char *mb_properties = xmalloc(size);
+- mbstate_t cur_state;
+- wchar_t wc;
+- int i;
+-
+- memset(&cur_state, 0, sizeof(mbstate_t));
+- memset(mb_properties, 0, sizeof(char)*size);
+-
+- for (i = 0; i < size ;)
+- {
+- size_t mbclen;
+- mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
+-
+- if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+- {
+- /* An invalid sequence, or a truncated multibyte character.
+- We treat it as a single byte character. */
+- mbclen = 1;
+- }
+- else if (match_icase)
+- {
+- if (iswupper((wint_t)wc))
+- {
+- wc = towlower((wint_t)wc);
+- wcrtomb(buf + i, wc, &cur_state);
+- }
+- }
+- mb_properties[i] = mbclen;
+- i += mbclen;
+- }
+-
+- return mb_properties;
+-}
+-#endif /* MBS_SUPPORT */
+-
+ #if defined(GREP_PROGRAM) || defined(EGREP_PROGRAM)
+ #ifdef EGREP_PROGRAM
+ COMPILE_FCT(Ecompile)
+@@ -193,6 +171,7 @@
+ size_t total = size;
+ char const *motif = pattern;
+
++ check_utf8 ();
+ #if 0
+ if (match_icase)
+ syntax_bits |= RE_ICASE;
+@@ -303,20 +282,9 @@ hunk6
+ struct kwsmatch kwsm;
+ size_t i, ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- if (start_ptr)
+- start_ptr = case_buf + (start_ptr - buf);
+- buf = case_buf;
+- }
+- if (kwset)
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
+ #endif /* MBS_SUPPORT */
+
+ buflim = buf + size;
+@@ -329,21 +282,63 @@ hunk6
+ if (kwset)
+ {
+ /* Find a possible match using the KWset matcher. */
+- size_t offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
++ size_t offset;
++#ifdef MBS_SUPPORT
++ /* kwsexec doesn't work with match_icase and multibyte input. */
++ if (match_icase && mb_cur_max > 1)
++ /* Avoid kwset */
++ offset = 0;
++ else
++#endif /* MBS_SUPPORT */
++ offset = kwsexec (kwset, beg, buflim - beg, &kwsm);
+ if (offset == (size_t) -1)
+- goto failure;
++ return (size_t)-1;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ /* Narrow down to the line containing the candidate, and
+ run it through DFA. */
+ end = memchr(beg, eol, buflim - beg);
+ end++;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[beg - buf] == 0)
++ if (mb_cur_max > 1 && bytes_left)
+ continue;
+ #endif
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+- if (kwsm.index < kwset_exact_matches)
++ if (
++#ifdef MBS_SUPPORT
++ !(match_icase && mb_cur_max > 1) &&
++#endif /* MBS_SUPPORT */
++ (kwsm.index < kwset_exact_matches))
+ goto success;
+ if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+ continue;
+@@ -351,13 +363,47 @@
+ else
+ {
+ /* No good fixed strings; start with DFA. */
++#ifdef MBS_SUPPORT
++ size_t bytes_left = 0;
++#endif /* MBS_SUPPORT */
+ size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+ if (offset == (size_t) -1)
+ break;
+ /* Narrow down to the line we've found. */
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
+ beg += offset;
+ end = memchr (beg, eol, buflim - beg);
+ end++;
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && bytes_left)
++ continue;
++#endif /* MBS_SUPPORT */
+ while (beg > buf && beg[-1] != eol)
+ --beg;
+ }
+@@ -475,24 +521,144 @@
+ *match_size = len;
+ ret_val = beg - buf;
+ out:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- free((char*)buf);
+- if (mb_properties)
+- free(mb_properties);
+- }
+-#endif /* MBS_SUPPORT */
+ return ret_val;
+ }
+ #endif /* defined(GREP_PROGRAM) || defined(EGREP_PROGRAM) */
+
++#ifdef MBS_SUPPORT
++static int f_i_multibyte; /* whether we're using the new -Fi MB method */
++static struct
++{
++ wchar_t **patterns;
++ size_t count, maxlen;
++ unsigned char *match;
++} Fimb;
++#endif
++
+ #if defined(GREP_PROGRAM) || defined(FGREP_PROGRAM)
+ COMPILE_FCT(Fcompile)
+ {
++ int mb_cur_max = MB_CUR_MAX;
+ char const *beg, *lim, *err;
+
++ check_utf8 ();
++#ifdef MBS_SUPPORT
++ /* Support -F -i for UTF-8 input. */
++ if (match_icase && mb_cur_max > 1)
++ {
++ mbstate_t mbs;
++ wchar_t *wcpattern = xmalloc ((size + 1) * sizeof (wchar_t));
++ const char *patternend = pattern;
++ size_t wcsize;
++ kwset_t fimb_kwset = NULL;
++ char *starts = NULL;
++ wchar_t *wcbeg, *wclim;
++ size_t allocated = 0;
++
++ memset (&mbs, '\0', sizeof (mbs));
++# ifdef __GNU_LIBRARY__
++ wcsize = mbsnrtowcs (wcpattern, &patternend, size, size, &mbs);
++ if (patternend != pattern + size)
++ wcsize = (size_t) -1;
++# else
++ {
++ char *patterncopy = xmalloc (size + 1);
++
++ memcpy (patterncopy, pattern, size);
++ patterncopy[size] = '\0';
++ patternend = patterncopy;
++ wcsize = mbsrtowcs (wcpattern, &patternend, size, &mbs);
++ if (patternend != patterncopy + size)
++ wcsize = (size_t) -1;
++ free (patterncopy);
++ }
++# endif
++ if (wcsize + 2 <= 2)
++ {
++fimb_fail:
++ free (wcpattern);
++ free (starts);
++ if (fimb_kwset)
++ kwsfree (fimb_kwset);
++ free (Fimb.patterns);
++ Fimb.patterns = NULL;
++ }
++ else
++ {
++ if (!(fimb_kwset = kwsalloc (NULL)))
++ error (2, 0, _("memory exhausted"));
++
++ starts = xmalloc (mb_cur_max * 3);
++ wcbeg = wcpattern;
++ do
++ {
++ int i;
++ size_t wclen;
++
++ if (Fimb.count >= allocated)
++ {
++ if (allocated == 0)
++ allocated = 128;
++ else
++ allocated *= 2;
++ Fimb.patterns = xrealloc (Fimb.patterns,
++ sizeof (wchar_t *) * allocated);
++ }
++ Fimb.patterns[Fimb.count++] = wcbeg;
++ for (wclim = wcbeg;
++ wclim < wcpattern + wcsize && *wclim != L'\n'; ++wclim)
++ *wclim = towlower (*wclim);
++ *wclim = L'\0';
++ wclen = wclim - wcbeg;
++ if (wclen > Fimb.maxlen)
++ Fimb.maxlen = wclen;
++ if (wclen > 3)
++ wclen = 3;
++ if (wclen == 0)
++ {
++ if ((err = kwsincr (fimb_kwset, "", 0)) != 0)
++ error (2, 0, err);
++ }
++ else
++ for (i = 0; i < (1 << wclen); i++)
++ {
++ char *p = starts;
++ int j, k;
++
++ for (j = 0; j < wclen; ++j)
++ {
++ wchar_t wc = wcbeg[j];
++ if (i & (1 << j))
++ {
++ wc = towupper (wc);
++ if (wc == wcbeg[j])
++ continue;
++ }
++ k = wctomb (p, wc);
++ if (k <= 0)
++ goto fimb_fail;
++ p += k;
++ }
++ if ((err = kwsincr (fimb_kwset, starts, p - starts)) != 0)
++ error (2, 0, err);
++ }
++ if (wclim < wcpattern + wcsize)
++ ++wclim;
++ wcbeg = wclim;
++ }
++ while (wcbeg < wcpattern + wcsize);
++ f_i_multibyte = 1;
++ kwset = fimb_kwset;
++ free (starts);
++ Fimb.match = xmalloc (Fimb.count);
++ if ((err = kwsprep (kwset)) != 0)
++ error (2, 0, err);
++ return;
++ }
++ }
++#endif /* MBS_SUPPORT */
++
++
+ kwsinit ();
+ beg = pattern;
+ do
+@@ -511,6 +677,76 @@
+ error (2, 0, err);
+ }
+
++#ifdef MBS_SUPPORT
++static int
++Fimbexec (const char *buf, size_t size, size_t *plen, int exact)
++{
++ size_t len, letter, i;
++ int ret = -1;
++ mbstate_t mbs;
++ wchar_t wc;
++ int patterns_left;
++
++ assert (match_icase && f_i_multibyte == 1);
++ assert (MB_CUR_MAX > 1);
++
++ memset (&mbs, '\0', sizeof (mbs));
++ memset (Fimb.match, '\1', Fimb.count);
++ letter = len = 0;
++ patterns_left = 1;
++ while (patterns_left && len <= size)
++ {
++ size_t c;
++
++ patterns_left = 0;
++ if (len < size)
++ {
++ c = mbrtowc (&wc, buf + len, size - len, &mbs);
++ if (c + 2 <= 2)
++ return ret;
++
++ wc = towlower (wc);
++ }
++ else
++ {
++ c = 1;
++ wc = L'\0';
++ }
++
++ for (i = 0; i < Fimb.count; i++)
++ {
++ if (Fimb.match[i])
++ {
++ if (Fimb.patterns[i][letter] == L'\0')
++ {
++ /* Found a match. */
++ *plen = len;
++ if (!exact && !match_words)
++ return 0;
++ else
++ {
++ /* For -w or exact look for longest match. */
++ ret = 0;
++ Fimb.match[i] = '\0';
++ continue;
++ }
++ }
++
++ if (Fimb.patterns[i][letter] == wc)
++ patterns_left = 1;
++ else
++ Fimb.match[i] = '\0';
++ }
++ }
++
++ len += c;
++ letter++;
++ }
++
++ return ret;
++}
++#endif /* MBS_SUPPORT */
++
+ EXECUTE_FCT(Fexecute)
+ {
+ register char const *beg, *try, *end;
+@@ -519,69 +755,256 @@
+ struct kwsmatch kwsmatch;
+ size_t ret_val;
+ #ifdef MBS_SUPPORT
+- char *mb_properties = NULL;
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- {
+- char *case_buf = xmalloc(size);
+- memcpy(case_buf, buf, size);
+- if (start_ptr)
+- start_ptr = case_buf + (start_ptr - buf);
+- buf = case_buf;
+- }
+- mb_properties = check_multibyte_string(buf, size);
+- }
++ int mb_cur_max = MB_CUR_MAX;
++ mbstate_t mbs;
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ const char *last_char = NULL;
+ #endif /* MBS_SUPPORT */
+
+ for (beg = start_ptr ? start_ptr : buf; beg <= buf + size; beg++)
+ {
+ size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
+ if (offset == (size_t) -1)
+- goto failure;
++ return offset;
+ #ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1 && mb_properties[offset+beg-buf] == 0)
+- continue; /* It is a part of multibyte character. */
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ /* Offset points inside multibyte character: no good. */
++ break;
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ continue;
++ }
++ else
+ #endif /* MBS_SUPPORT */
+ beg += offset;
++#ifdef MBS_SUPPORT
++ /* For f_i_multibyte, the string at beg now matches first 3 chars of
++ one of the search strings (less if there are shorter search strings).
++ See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, buf + size - beg, &kwsmatch.size[0], start_ptr == NULL))
++ goto next_char;
++#endif /* MBS_SUPPORT */
+ len = kwsmatch.size[0];
+ if (start_ptr && !match_words)
+ goto success_in_beg_and_len;
+ if (match_lines)
+ {
+ if (beg > buf && beg[-1] != eol)
+- continue;
++ goto next_char;
+ if (beg + len < buf + size && beg[len] != eol)
+- continue;
++ goto next_char;
+ goto success;
+ }
+ else if (match_words)
+- for (try = beg; len; )
+- {
+- if (try > buf && WCHAR((unsigned char) try[-1]))
+- break;
+- if (try + len < buf + size && WCHAR((unsigned char) try[len]))
+- {
+- offset = kwsexec (kwset, beg, --len, &kwsmatch);
+- if (offset == (size_t) -1)
+- break;
+- try = beg + offset;
+- len = kwsmatch.size[0];
+- }
+- else if (!start_ptr)
+- goto success;
+- else
+- goto success_in_beg_and_len;
+- } /* for (try) */
+- else
+- goto success;
+- } /* for (beg in buf) */
++ {
++ while (len)
++ {
++ int word_match = 0;
++ if (beg > buf)
++ {
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ const char *s;
++ int mr;
++ wchar_t pwc;
++
++ if (using_utf8)
++ {
++ s = beg - 1;
++ while (s > buf
++ && (unsigned char) *s >= 0x80
++ && (unsigned char) *s <= 0xbf)
++ --s;
++ }
++ else
++ s = last_char;
++ mr = mbtowc (&pwc, s, beg - s);
++ if (mr <= 0)
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ else if ((iswalnum (pwc) || pwc == L'_')
++ && mr == (int) (beg - s))
++ goto next_char;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (WCHAR ((unsigned char) beg[-1]))
++ goto next_char;
++ }
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1)
++ {
++ wchar_t nwc;
++ int mr;
+
+- failure:
+- ret_val = -1;
+- goto out;
++ mr = mbtowc (&nwc, beg + len, buf + size - beg - len);
++ if (mr <= 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ word_match = 1;
++ }
++ else if (!iswalnum (nwc) && nwc != L'_')
++ word_match = 1;
++ }
++ else
++#endif /* MBS_SUPPORT */
++ if (beg + len >= buf + size || !WCHAR ((unsigned char) beg[len]))
++ word_match = 1;
++ if (word_match)
++ {
++ if (start_ptr == NULL)
++ /* Returns the whole line now we know there's a word match. */
++ goto success;
++ else {
++ /* Returns just this word match. */
++ *match_size = len;
++ return beg - buf;
++ }
++ }
++ if (len > 0)
++ {
++ /* Try a shorter length anchored at the same place. */
++ --len;
++ offset = kwsexec (kwset, beg, len, &kwsmatch);
++
++ if (offset == -1)
++ goto next_char; /* Try a different anchor. */
++#ifdef MBS_SUPPORT
++
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ size_t bytes_left = offset;
++ while (bytes_left)
++ {
++ size_t mlen = mbrlen (beg, bytes_left, &mbs);
++
++ last_char = beg;
++ if (mlen == (size_t) -1 || mlen == 0)
++ {
++ /* Incomplete character: treat as single-byte. */
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ beg++;
++ bytes_left--;
++ continue;
++ }
++
++ if (mlen == (size_t) -2)
++ {
++ /* Offset points inside multibyte character:
++ * no good. */
++ break;
++ }
++
++ beg += mlen;
++ bytes_left -= mlen;
++ }
++
++ if (bytes_left)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ goto next_char; /* Try a different anchor. */
++ }
++ }
++ else
++#endif /* MBS_SUPPORT */
++ beg += offset;
++#ifdef MBS_SUPPORT
++ /* The string at beg now matches first 3 chars of one of
++ the search strings (less if there are shorter search
++ strings). See if this is a real match. */
++ if (f_i_multibyte
++ && Fimbexec (beg, len - offset, &kwsmatch.size[0],
++ start_ptr == NULL))
++ goto next_char;
++#endif /* MBS_SUPPORT */
++ len = kwsmatch.size[0];
++ }
++ }
++ }
++ else
++ goto success;
++next_char:;
++#ifdef MBS_SUPPORT
++ /* Advance to next character. For MB_CUR_MAX == 1 case this is handled
++ by ++beg above. */
++ if (mb_cur_max > 1)
++ {
++ if (using_utf8)
++ {
++ unsigned char c = *beg;
++ if (c >= 0xc2)
++ {
++ if (c < 0xe0)
++ ++beg;
++ else if (c < 0xf0)
++ beg += 2;
++ else if (c < 0xf8)
++ beg += 3;
++ else if (c < 0xfc)
++ beg += 4;
++ else if (c < 0xfe)
++ beg += 5;
++ }
++ }
++ else
++ {
++ size_t l = mbrlen (beg, buf + size - beg, &mbs);
++
++ last_char = beg;
++ if (l + 2 >= 2)
++ beg += l - 1;
++ else
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ }
++ }
++#endif /* MBS_SUPPORT */
++ }
++
++ return -1;
+
+ success:
++#ifdef MBS_SUPPORT
++ if (mb_cur_max > 1 && !using_utf8)
++ {
++ end = beg + len;
++ while (end < buf + size)
++ {
++ size_t mlen = mbrlen (end, buf + size - end, &mbs);
++ if (mlen == (size_t) -1 || mlen == (size_t) -2 || mlen == 0)
++ {
++ memset (&mbs, '\0', sizeof (mbstate_t));
++ mlen = 1;
++ }
++ if (mlen == 1 && *end == eol)
++ break;
++
++ end += mlen;
++ }
++ }
++ else
++ #endif /* MBS_SUPPORT */
+ end = memchr (beg + len, eol, (buf + size) - (beg + len));
+ end++;
+ while (buf < beg && beg[-1] != eol)
+@@ -591,15 +1016,6 @@
+ *match_size = len;
+ ret_val = beg - buf;
+ out:
+-#ifdef MBS_SUPPORT
+- if (MB_CUR_MAX > 1)
+- {
+- if (match_icase)
+- free((char*)buf);
+- if (mb_properties)
+- free(mb_properties);
+- }
+-#endif /* MBS_SUPPORT */
+ return ret_val;
+ }
+ #endif /* defined(GREP_PROGRAM) || defined(FGREP_PROGRAM) */
diff --git a/abs/core/grep/PKGBUILD b/abs/core/grep/PKGBUILD
new file mode 100644
index 0000000..168d2d3
--- /dev/null
+++ b/abs/core/grep/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=grep
+pkgver=2.5.3
+pkgrel=12
+pkgdesc="A string search utility"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/grep/grep.html"
+groups=('base')
+depends=('glibc' 'pcre')
+makedepends=('texinfo>=4.8a')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz
+ # patches from fedora cvs
+ #01-fgrep.patch
+ #02-bracket.patch
+ #03-i18n.patch
+ #04-oi.patch
+ #05-manpage.patch
+ #06-color.patch
+ #07-icolor.patch
+ #08-skip.patch
+ #09-egf-speedup.patch
+ #10-dfa-optional.patch
+ #11-tests.patch
+ #12-w.patch
+ #13-P.patch
+ 14-mem-exhausted.patch
+ 15-empty-pattern.patch
+ 64-egf-speedup.patch
+)
+md5sums=('4f371f25f413f700fb1984b878421f9d'
+ 'bc937da562d468f32c1fef2894610283'
+ 'f421415b679ebcc9152797caaa0b1d51'
+ 'efbe9d49d71a74092db6b86224b09fdd')
+
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ for i in ../*.patch; do
+ patch -Np1 -i ../$i
+ done
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mkdir $startdir/pkg/bin
+ mv $startdir/pkg/usr/bin/*grep $startdir/pkg/bin/
+ rmdir $startdir/pkg/usr/bin
+}
diff --git a/abs/core/groff/PKGBUILD b/abs/core/groff/PKGBUILD
new file mode 100644
index 0000000..5183acc
--- /dev/null
+++ b/abs/core/groff/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=groff
+pkgver=1.19.2
+pkgrel=13
+pkgdesc="GNU troff text-formatting system"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/groff/groff.html"
+license=('GPL')
+groups=('base')
+depends=('perl' 'gcc-libs')
+source=(ftp://ftp.gnu.org/gnu/groff/groff-$pkgver.tar.gz
+ man-utf8.tmac)
+md5sums=('f7c9cf2e4b9967d3af167d7c9fadaae4'
+ 'faefbef2b05ee5438b632464607c6cc4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --without-x
+ mkdir -p $startdir/pkg/usr
+ make -j1 || return 1
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin
+ # needed for xman
+ ln -s eqn geqn
+ ln -s tbl gtbl
+ ln -s soelim zsoelim
+ rm -rf $startdir/pkg/usr/lib
+
+ # Fix some issues when encoding to utf8 man pages
+ # The output chars don't match keyboard chars...
+ cat $startdir/src/man-utf8.tmac >> \
+ $startdir/pkg/usr/share/groff/site-tmac/man.local
+}
diff --git a/abs/core/groff/man-utf8.tmac b/abs/core/groff/man-utf8.tmac
new file mode 100644
index 0000000..17c0983
--- /dev/null
+++ b/abs/core/groff/man-utf8.tmac
@@ -0,0 +1,9 @@
+.\" This file is loaded after an-old.tmac.
+.\" Put any local modifications to an-old.tmac here.
+
+.if '\*[.T]'utf8' \
+. char \- \N'45'
+. char - \N'45'
+. char ' \N'39'
+..
+
diff --git a/abs/core/grub/040_all_grub-0.96-nxstack.patch b/abs/core/grub/040_all_grub-0.96-nxstack.patch
new file mode 100644
index 0000000..121941c
--- /dev/null
+++ b/abs/core/grub/040_all_grub-0.96-nxstack.patch
@@ -0,0 +1,623 @@
+Fix NX segfaulting on amd64.
+
+Patch by Peter Jones.
+
+http://lists.gnu.org/archive/html/bug-grub/2005-03/msg00011.html
+
+--- grub-0.97/grub/asmstub.c
++++ grub-0.97/grub/asmstub.c
+@@ -42,6 +42,7 @@
+ #include <sys/time.h>
+ #include <termios.h>
+ #include <signal.h>
++#include <sys/mman.h>
+
+ #ifdef __linux__
+ # include <sys/ioctl.h> /* ioctl */
+@@ -79,7 +80,7 @@
+ struct apm_info apm_bios_info;
+
+ /* Emulation requirements. */
+-char *grub_scratch_mem = 0;
++void *grub_scratch_mem = 0;
+
+ struct geometry *disks = 0;
+
+@@ -103,14 +104,62 @@
+ static unsigned int serial_speed;
+ #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
+
++/* This allocates page-aligned storage of the specified size, which must be
++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
++ */
++#ifdef __linux__
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE;
++
++#ifdef MAP_32BIT
++ mmap_flags |= MAP_32BIT;
++#endif
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
++}
++#else /* !defined(__linux__) */
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int fd = 0, offset = 0, ret = 0;
++ void *pa = MAP_FAILED;
++ char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
++ errno_t e;
++
++ fd = mkstemp(template);
++ if (fd < 0)
++ return pa;
++
++ unlink(template);
++
++ ret = ftruncate(fd, len);
++ if (ret < 0)
++ return pa;
++
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
++ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset);
++
++ e = errno;
++ close(fd);
++ errno = e;
++ return pa;
++}
++#endif /* defined(__linux__) */
++
+ /* The main entry point into this mess. */
+ int
+ grub_stage2 (void)
+ {
+ /* These need to be static, because they survive our stack transitions. */
+ static int status = 0;
+- static char *realstack;
+- char *scratch, *simstack;
++ static void *realstack;
++ void *simstack_alloc_base, *simstack;
++ size_t simstack_size, page_size;
+ int i;
+
+ /* We need a nested function so that we get a clean stack frame,
+@@ -140,9 +189,35 @@
+ }
+
+ assert (grub_scratch_mem == 0);
+- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
+- assert (scratch);
+- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
++
++ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
++ * make sure the memory is aligned to a multiple of the system's
++ * page size */
++ page_size = sysconf (_SC_PAGESIZE);
++ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
++ if (simstack_size % page_size)
++ {
++ /* If we're not on a page_size boundary, round up to the next one */
++ simstack_size &= ~(page_size-1);
++ simstack_size += page_size;
++ }
++
++ /* Add one for a PROT_NONE boundary page at each end. */
++ simstack_size += 2 * page_size;
++
++ simstack_alloc_base = grub_mmap_alloc(simstack_size);
++ assert (simstack_alloc_base != MAP_FAILED);
++
++ /* mark pages above and below our simstack area as innaccessable.
++ * If the implementation we're using doesn't support that, then the
++ * new protection modes are undefined. It's safe to just ignore
++ * them, though. It'd be nice if we knew that we'd get a SEGV for
++ * touching the area, but that's all. it'd be nice to have. */
++ mprotect (simstack_alloc_base, page_size, PROT_NONE);
++ mprotect ((void *)((unsigned long)simstack_alloc_base +
++ simstack_size - page_size), page_size, PROT_NONE);
++
++ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
+
+ /* FIXME: simulate the memory holes using mprot, if available. */
+
+@@ -215,7 +290,7 @@
+ device_map = 0;
+ free (disks);
+ disks = 0;
+- free (scratch);
++ munmap(simstack_alloc_base, simstack_size);
+ grub_scratch_mem = 0;
+
+ if (serial_device)
+--- grub-0.97/stage2/builtins.c
++++ grub-0.97/stage2/builtins.c
+@@ -131,63 +131,98 @@
+ }
+
+
++/* blocklist_read_helper nee disk_read_blocklist_func was a nested
++ * function, to which pointers were taken and exposed globally. Even
++ * in the GNU-C nested functions extension, they have local linkage,
++ * and aren't guaranteed to be accessable *at all* outside of their
++ * containing scope.
++ *
++ * Above and beyond all of that, the variables within blocklist_func_context
++ * are originally local variables, with local (not even static) linkage,
++ * from within blocklist_func. These were each referenced by
++ * disk_read_blocklist_func, which is only called from other functions
++ * through a globally scoped pointer.
++ *
++ * The documentation in GCC actually uses the words "all hell will break
++ * loose" to describe this scenario.
++ *
++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
++ * about it (possibly because of the scoping madness?)
++ */
++
++static struct {
++ int start_sector;
++ int num_sectors;
++ int num_entries;
++ int last_length;
++} blocklist_func_context = {
++ .start_sector = 0,
++ .num_sectors = 0,
++ .num_entries = 0,
++ .last_length = 0
++};
++
++/* Collect contiguous blocks into one entry as many as possible,
++ and print the blocklist notation on the screen. */
++static void
++blocklist_read_helper (int sector, int offset, int length)
++{
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++ int *last_length = &blocklist_func_context.last_length;
++
++ if (*num_sectors > 0)
++ {
++ if (*start_sector + *num_sectors == sector
++ && offset == 0 && *last_length == SECTOR_SIZE)
++ {
++ *num_sectors++;
++ *last_length = length;
++ return;
++ }
++ else
++ {
++ if (*last_length == SECTOR_SIZE)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
++ else if (*num_sectors > 1)
++ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors-1,
++ *start_sector + *num_sectors-1 - part_start,
++ *last_length);
++ else
++ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *last_length);
++ *num_entries++;
++ *num_sectors = 0;
++ }
++ }
++
++ if (offset > 0)
++ {
++ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
++ sector-part_start, offset, offset+length);
++ *num_entries++;
++ }
++ else
++ {
++ *start_sector = sector;
++ *num_sectors = 1;
++ *last_length = length;
++ }
++}
++
+ /* blocklist */
+ static int
+ blocklist_func (char *arg, int flags)
+ {
+ char *dummy = (char *) RAW_ADDR (0x100000);
+- int start_sector;
+- int num_sectors = 0;
+- int num_entries = 0;
+- int last_length = 0;
+-
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Collect contiguous blocks into one entry as many as possible,
+- and print the blocklist notation on the screen. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (num_sectors > 0)
+- {
+- if (start_sector + num_sectors == sector
+- && offset == 0 && last_length == SECTOR_SIZE)
+- {
+- num_sectors++;
+- last_length = length;
+- return;
+- }
+- else
+- {
+- if (last_length == SECTOR_SIZE)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
+- else if (num_sectors > 1)
+- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, num_sectors-1,
+- start_sector + num_sectors-1 - part_start,
+- last_length);
+- else
+- grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, last_length);
+- num_entries++;
+- num_sectors = 0;
+- }
+- }
+-
+- if (offset > 0)
+- {
+- grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
+- sector-part_start, offset, offset+length);
+- num_entries++;
+- }
+- else
+- {
+- start_sector = sector;
+- num_sectors = 1;
+- last_length = length;
+- }
+- }
+
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++
+ /* Open the file. */
+ if (! grub_open (arg))
+ return 1;
+@@ -204,15 +241,15 @@
+ grub_printf (")");
+
+ /* Read in the whole file to DUMMY. */
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = blocklist_read_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+ /* The last entry may not be printed yet. Don't check if it is a
+ * full sector, since it doesn't matter if we read too much. */
+- if (num_sectors > 0)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
++ if (*num_sectors > 0)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
+
+ grub_printf ("\n");
+
+@@ -1868,6 +1905,77 @@
+
+
+ /* install */
++static struct {
++ int saved_sector;
++ int installaddr;
++ int installlist;
++ char *stage2_first_buffer;
++} install_func_context = {
++ .saved_sector = 0,
++ .installaddr = 0,
++ .installlist = 0,
++ .stage2_first_buffer = NULL,
++};
++
++/* Save the first sector of Stage2 in STAGE2_SECT. */
++/* Formerly disk_read_savesect_func with local scope inside install_func */
++static void
++install_savesect_helper(int sector, int offset, int length)
++{
++ if (debug)
++ printf ("[%d]", sector);
++
++ /* ReiserFS has files which sometimes contain data not aligned
++ on sector boundaries. Returning an error is better than
++ silently failing. */
++ if (offset != 0 || length != SECTOR_SIZE)
++ errnum = ERR_UNALIGNED;
++
++ install_func_context.saved_sector = sector;
++}
++
++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */
++/* Formerly disk_read_blocklist_func with local scope inside install_func */
++static void
++install_blocklist_helper (int sector, int offset, int length)
++{
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* Was the last sector full? */
++ static int last_length = SECTOR_SIZE;
++
++ if (debug)
++ printf("[%d]", sector);
++
++ if (offset != 0 || last_length != SECTOR_SIZE)
++ {
++ /* We found a non-sector-aligned data block. */
++ errnum = ERR_UNALIGNED;
++ return;
++ }
++
++ last_length = length;
++
++ if (*((unsigned long *) (*installlist - 4))
++ + *((unsigned short *) *installlist) != sector
++ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
++ {
++ *installlist -= 8;
++
++ if (*((unsigned long *) (*installlist - 8)))
++ errnum = ERR_WONT_FIT;
++ else
++ {
++ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
++ *((unsigned long *) (*installlist - 4)) = sector;
++ }
++ }
++
++ *((unsigned short *) *installlist) += 1;
++ *installaddr += 512;
++}
++
+ static int
+ install_func (char *arg, int flags)
+ {
+@@ -1875,8 +1983,12 @@
+ char *stage1_buffer = (char *) RAW_ADDR (0x100000);
+ char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
+ char *old_sect = stage2_buffer + SECTOR_SIZE;
+- char *stage2_first_buffer = old_sect + SECTOR_SIZE;
+- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
++ /* stage2_first_buffer used to be defined as:
++ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* and stage2_second_buffer was:
++ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
++ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
+ /* XXX: Probably SECTOR_SIZE is reasonable. */
+ char *config_filename = stage2_second_buffer + SECTOR_SIZE;
+ char *dummy = config_filename + SECTOR_SIZE;
+@@ -1885,10 +1997,11 @@
+ int src_drive, src_partition, src_part_start;
+ int i;
+ struct geometry dest_geom, src_geom;
+- int saved_sector;
++ int *saved_sector = &install_func_context.saved_sector;
+ int stage2_first_sector, stage2_second_sector;
+ char *ptr;
+- int installaddr, installlist;
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
+ /* Point to the location of the name of a configuration file in Stage 2. */
+ char *config_file_location;
+ /* If FILE is a Stage 1.5? */
+@@ -1897,67 +2010,13 @@
+ int is_open = 0;
+ /* If LBA is forced? */
+ int is_force_lba = 0;
+- /* Was the last sector full? */
+- int last_length = SECTOR_SIZE;
+-
++
++ *stage2_first_buffer = old_sect + SECTOR_SIZE;
+ #ifdef GRUB_UTIL
+ /* If the Stage 2 is in a partition mounted by an OS, this will store
+ the filename under the OS. */
+ char *stage2_os_file = 0;
+ #endif /* GRUB_UTIL */
+-
+- auto void disk_read_savesect_func (int sector, int offset, int length);
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Save the first sector of Stage2 in STAGE2_SECT. */
+- auto void disk_read_savesect_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf ("[%d]", sector);
+-
+- /* ReiserFS has files which sometimes contain data not aligned
+- on sector boundaries. Returning an error is better than
+- silently failing. */
+- if (offset != 0 || length != SECTOR_SIZE)
+- errnum = ERR_UNALIGNED;
+-
+- saved_sector = sector;
+- }
+-
+- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
+- INSTALLSECT. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf("[%d]", sector);
+-
+- if (offset != 0 || last_length != SECTOR_SIZE)
+- {
+- /* We found a non-sector-aligned data block. */
+- errnum = ERR_UNALIGNED;
+- return;
+- }
+-
+- last_length = length;
+-
+- if (*((unsigned long *) (installlist - 4))
+- + *((unsigned short *) installlist) != sector
+- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
+- {
+- installlist -= 8;
+-
+- if (*((unsigned long *) (installlist - 8)))
+- errnum = ERR_WONT_FIT;
+- else
+- {
+- *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
+- *((unsigned long *) (installlist - 4)) = sector;
+- }
+- }
+-
+- *((unsigned short *) installlist) += 1;
+- installaddr += 512;
+- }
+
+ /* First, check the GNU-style long option. */
+ while (1)
+@@ -1987,10 +2049,10 @@
+ addr = skip_to (0, file);
+
+ /* Get the installation address. */
+- if (! safe_parse_maxint (&addr, &installaddr))
++ if (! safe_parse_maxint (&addr, installaddr))
+ {
+ /* ADDR is not specified. */
+- installaddr = 0;
++ *installaddr = 0;
+ ptr = addr;
+ errnum = 0;
+ }
+@@ -2084,17 +2146,17 @@
+ = (dest_drive & BIOS_FLAG_FIXED_DISK);
+
+ /* Read the first sector of Stage 2. */
+- disk_read_hook = disk_read_savesect_func;
+- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++ disk_read_hook = install_savesect_helper;
++ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_first_sector = saved_sector;
++ stage2_first_sector = *saved_sector;
+
+ /* Read the second sector of Stage 2. */
+ if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_second_sector = saved_sector;
++ stage2_second_sector = *saved_sector;
+
+ /* Check for the version of Stage 2. */
+ if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
+@@ -2110,27 +2172,27 @@
+
+ /* If INSTALLADDR is not specified explicitly in the command-line,
+ determine it by the Stage 2 id. */
+- if (! installaddr)
++ if (! *installaddr)
+ {
+ if (! is_stage1_5)
+ /* Stage 2. */
+- installaddr = 0x8000;
++ *installaddr = 0x8000;
+ else
+ /* Stage 1.5. */
+- installaddr = 0x2000;
++ *installaddr = 0x2000;
+ }
+
+ *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
+ = stage2_first_sector;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
+- = installaddr;
++ = *installaddr;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
+- = installaddr >> 4;
++ = *installaddr >> 4;
+
+- i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
++ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
+ while (*((unsigned long *) i))
+ {
+- if (i < (int) stage2_first_buffer
++ if (i < (int) *stage2_first_buffer
+ || (*((int *) (i - 4)) & 0x80000000)
+ || *((unsigned short *) i) >= 0xA00
+ || *((short *) (i + 2)) == 0)
+@@ -2144,13 +2206,13 @@
+ i -= 8;
+ }
+
+- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
+- installaddr += SECTOR_SIZE;
++ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
++ *installaddr += SECTOR_SIZE;
+
+ /* Read the whole of Stage2 except for the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = install_blocklist_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+@@ -2233,7 +2295,7 @@
+ /* Skip the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_savesect_func;
++ disk_read_hook = install_savesect_helper;
+ if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+@@ -2303,7 +2365,7 @@
+ else
+ #endif /* GRUB_UTIL */
+ {
+- if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
++ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
+ goto fail;
+ }
+ }
+@@ -2325,7 +2387,7 @@
+ goto fail;
+ }
+
+- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
+ {
+ fclose (fp);
+ errnum = ERR_WRITE;
+@@ -2352,7 +2414,7 @@
+ goto fail;
+
+ if (! devwrite (stage2_first_sector - src_part_start, 1,
+- stage2_first_buffer))
++ *stage2_first_buffer))
+ goto fail;
+
+ if (! devwrite (stage2_second_sector - src_part_start, 1,
+--- grub-0.97/stage2/shared.h
++++ grub-0.97/stage2/shared.h
+@@ -36,8 +36,8 @@
+
+ /* Maybe redirect memory requests through grub_scratch_mem. */
+ #ifdef GRUB_UTIL
+-extern char *grub_scratch_mem;
+-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
++extern void *grub_scratch_mem;
++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
+ # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
+ #else
+ # define RAW_ADDR(x) (x)
diff --git a/abs/core/grub/05-grub-0.97-initrdaddr.diff b/abs/core/grub/05-grub-0.97-initrdaddr.diff
new file mode 100644
index 0000000..ccf5f3e
--- /dev/null
+++ b/abs/core/grub/05-grub-0.97-initrdaddr.diff
@@ -0,0 +1,16 @@
+--- grub-0.96/stage2/boot.c
++++ grub-0.96/stage2/boot.c
+@@ -824,8 +824,11 @@
+ moveto = (mbi.mem_upper + 0x400) << 10;
+
+ moveto = (moveto - len) & 0xfffff000;
+- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
+- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
++ max_addr = LINUX_INITRD_MAX_ADDRESS;
++ if (lh->header == LINUX_MAGIC_SIGNATURE &&
++ lh->version >= 0x0203 &&
++ lh->initrd_addr_max < max_addr)
++ max_addr = lh->initrd_addr_max;
+ if (moveto + len >= max_addr)
+ moveto = (max_addr - len) & 0xfffff000;
+
diff --git a/abs/core/grub/PKGBUILD b/abs/core/grub/PKGBUILD
new file mode 100644
index 0000000..398d782
--- /dev/null
+++ b/abs/core/grub/PKGBUILD
@@ -0,0 +1,81 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=grub
+pkgver=0.97
+pkgrel=21
+pkgdesc="A GNU multiboot boot loader"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/grub/"
+groups=('base')
+depends=('ncurses' 'diffutils' 'sed')
+source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz
+ menu.lst
+ install-grub
+ 040_all_grub-0.96-nxstack.patch
+ 05-grub-0.97-initrdaddr.diff
+ i2o.patch
+ special-devices.patch
+ more-raid.patch
+ intelmac.patch
+ grub-inode-size.patch
+ grub-0.97-gpt.patch)
+backup=('boot/grub/menu.lst')
+md5sums=('cd3f3eb54446be6003156158d51f4884'
+ 'cce52ae9ee1f8686cd700b3c967e78f9'
+ '3182c4ae4963a16930bc772bba89dacf'
+ 'eb9d69c46af3a0667c1f651817d7f075'
+ 'ccd2d757e79e3a03dc19ede7391ed328'
+ '826fdbf446067f9861baf9f6a69a4583'
+ '49f6d4bcced0bc8bbcff273f3254bbfa'
+ 'f41f702014a064918d7afc6fc23baa6e'
+ '175dc6b9f4ab94e8056c3afb3e34460a'
+ 'ada26cbc681907823cc4ff2a55b97866'
+ '52cd09a6966f12961d11f7b3b7e76bd2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ #set destination architecture here
+ DESTARCH="i686"
+ #DESTARCH="x86_64"
+
+ # optimizations break the build -- disable them
+ # adding special devices to grub, patches are from fedora
+ patch -Np1 -i ../special-devices.patch || return 1
+ patch -Np1 -i ../i2o.patch || return 1
+ patch -Np1 -i ../more-raid.patch || return 1
+ patch -Np1 -i ../intelmac.patch || return 1
+ # Add support for bigger inode size to e2fs_stage1_5
+ patch -Np1 -i ../grub-inode-size.patch || return 1
+ # Add gpt support
+ # http://bugs.archlinux.org/task/9864
+ patch -Np1 -i ../grub-0.97-gpt.patch || return 1
+
+ #arch64 fixes for static build
+ if [ "$CARCH" = "x86_64" ]; then
+ echo "this package has to be built on i686, won't compile on x86_64"
+ sleep 5
+ else
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # patch from gentoo for fixing a segfault
+ patch -Np1 -i ../040_all_grub-0.96-nxstack.patch || return 1
+ # patch from frugalware to make it boot when more than 2GB ram installed
+ patch -Np1 -i ../05-grub-0.97-initrdaddr.diff || return 1
+ CFLAGS="-static" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin
+ else
+ CFLAGS= ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin
+ fi
+ fi
+
+ CFLAGS= make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../menu.lst $startdir/pkg/boot/grub/menu.lst
+ install -D -m755 ../install-grub $startdir/pkg/sbin/install-grub
+
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # fool makepkg into building a x86_64 package
+ export CARCH="x86_64"
+ fi
+}
diff --git a/abs/core/grub/grub-0.97-gpt.patch b/abs/core/grub/grub-0.97-gpt.patch
new file mode 100644
index 0000000..7b1a55c
--- /dev/null
+++ b/abs/core/grub/grub-0.97-gpt.patch
@@ -0,0 +1,315 @@
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/builtins.c grub-0.96-patched/stage2/builtins.c
+--- grub-0.96/stage2/builtins.c 2004-06-20 09:33:04.000000000 -0400
++++ grub-0.96-patched/stage2/builtins.c 2007-01-04 13:56:06.000000000 -0500
+@@ -1229,14 +1229,15 @@
+ for (drive = 0x80; drive < 0x88; drive++)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int type, entry;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int type, entry, gpt_count, gpt_size;
+ char buf[SECTOR_SIZE];
+
+ current_drive = drive;
+ while (next_partition (drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, buf))
++ &ext_offset, &gpt_offset,
++ &gpt_count, &gpt_size, buf))
+ {
+ if (type != PC_SLICE_TYPE_NONE
+ && ! IS_PC_SLICE_TYPE_BSD (type)
+@@ -2806,8 +2807,8 @@
+ {
+ int new_type;
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* Get the drive and the partition. */
+@@ -2844,7 +2845,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/disk_io.c grub-0.96-patched/stage2/disk_io.c
+--- grub-0.96/stage2/disk_io.c 2004-05-23 12:35:24.000000000 -0400
++++ grub-0.96-patched/stage2/disk_io.c 2007-01-04 14:01:08.000000000 -0500
+@@ -21,6 +21,7 @@
+
+ #include <shared.h>
+ #include <filesys.h>
++#include <gpt.h>
+
+ #ifdef SUPPORT_NETBOOT
+ # define GRUB 1
+@@ -502,8 +503,8 @@
+ set_partition_hidden_flag (int hidden)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* The drive must be a hard disk. */
+@@ -524,7 +525,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+@@ -577,11 +585,14 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf)
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf)
+ {
+ /* Forward declarations. */
+ auto int next_bsd_partition (void);
+ auto int next_pc_slice (void);
++ auto int next_gpt_slice(void);
+
+ /* Get next BSD partition in current PC slice. */
+ int next_bsd_partition (void)
+@@ -666,6 +677,40 @@
+ return 0;
+ }
+
++ /* If this is a GPT partition table, read it as such. */
++ if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT)
++ {
++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
++
++ /* Read in the GPT Partition table header. */
++ if (! rawread (drive, 1, 0, SECTOR_SIZE, buf))
++ return 0;
++
++ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
++ {
++ /* Let gpt_offset point to the first entry in the GPT
++ partition table. This can also be used by callers of
++ next_partition to determine if a entry comes from a
++ GPT partition table or not. */
++ *gpt_offset = hdr->partitions;
++ *gpt_count = hdr->maxpart;
++ *gpt_size = hdr->partentry_size;
++
++ return next_gpt_slice();
++ }
++ else
++ {
++ /* This is not a valid header for a GPT partition table.
++ Re-read the MBR or the boot sector of the extended
++ partition. */
++ if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
++ return 0;
++ }
++ }
++
++ /* Not a GPT partition. */
++ *gpt_offset = 0;
++
+ /* Increase the entry number. */
+ (*entry)++;
+
+@@ -710,6 +755,43 @@
+ return 1;
+ }
+
++ /* Get the next GPT slice. */
++ int next_gpt_slice (void)
++ {
++ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
++ /* Make GPT partitions show up as PC slices. */
++ int pc_slice_no = (*partition & 0xFF0000) >> 16;
++
++ /* If this is the first time... */
++ if (pc_slice_no == 0xFF)
++ {
++ pc_slice_no = -1;
++ *entry = -1;
++ }
++
++ do {
++ (*entry)++;
++
++ if (*entry >= *gpt_count)
++ {
++ errnum = ERR_NO_PART;
++ return 0;
++ }
++ /* Read in the GPT Partition table entry. */
++ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf))
++ return 0;
++ } while (! (gptentry->type1 && gptentry->type2));
++
++ pc_slice_no++;
++ *start = gptentry->start;
++ *len = gptentry->end - gptentry->start + 1;
++ *type = PC_SLICE_TYPE_EXT2FS;
++ *entry = pc_slice_no;
++ *partition = (*entry << 16) | 0xFFFF;
++
++ return 1;
++ }
++
+ /* Start the body of this function. */
+
+ #ifndef STAGE1_5
+@@ -717,6 +799,9 @@
+ return 0;
+ #endif
+
++ if (*partition != 0xFFFFFF && *gpt_offset != 0)
++ return next_gpt_slice ();
++
+ /* If previous partition is a BSD partition or a PC slice which
+ contains BSD partitions... */
+ if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
+@@ -755,6 +840,9 @@
+ unsigned long dest_partition = current_partition;
+ unsigned long part_offset;
+ unsigned long ext_offset;
++ unsigned long gpt_offset;
++ int gpt_count;
++ int gpt_size;
+ int entry;
+ char buf[SECTOR_SIZE];
+ int bsd_part, pc_slice;
+@@ -766,7 +854,8 @@
+ int ret = next_partition (current_drive, dest_partition,
+ &current_partition, &current_slice,
+ &part_start, &part_length,
+- &part_offset, &entry, &ext_offset, buf);
++ &part_offset, &entry, &ext_offset,
++ &gpt_offset, &gpt_count, &gpt_size, buf);
+ bsd_part = (current_partition >> 8) & 0xFF;
+ pc_slice = current_partition >> 16;
+ return ret;
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/gpt.h grub-0.96-patched/stage2/gpt.h
+--- grub-0.96/stage2/gpt.h 1969-12-31 19:00:00.000000000 -0500
++++ grub-0.96-patched/stage2/gpt.h 2007-01-04 13:52:14.000000000 -0500
+@@ -0,0 +1,68 @@
++/*
++ * GRUB -- GRand Unified Bootloader
++ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc.
++ *
++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef _GPT_H
++#define _GPT_H
++
++typedef signed char grub_int8_t;
++typedef signed short grub_int16_t;
++typedef signed int grub_int32_t;
++typedef signed long long int grub_int64_t;
++typedef unsigned char grub_uint8_t;
++typedef unsigned short grub_uint16_t;
++typedef unsigned int grub_uint32_t;
++typedef unsigned long long int grub_uint64_t;
++
++struct grub_gpt_header
++{
++ grub_uint64_t magic;
++ grub_uint32_t version;
++ grub_uint32_t headersize;
++ grub_uint32_t crc32;
++ grub_uint32_t unused1;
++ grub_uint64_t primary;
++ grub_uint64_t backup;
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t guid[16];
++ grub_uint64_t partitions;
++ grub_uint32_t maxpart;
++ grub_uint32_t partentry_size;
++ grub_uint32_t partentry_crc32;
++} __attribute__ ((packed));
++
++struct grub_gpt_partentry
++{
++ grub_uint64_t type1;
++ grub_uint64_t type2;
++ grub_uint8_t guid[16];
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t attrib;
++ char name[72];
++} __attribute__ ((packed));
++
++#define GPT_HEADER_MAGIC 0x5452415020494645UL
++
++#define GPT_ENTRY_SECTOR(size,entry) \
++ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS)
++#define GPT_ENTRY_INDEX(size,entry) \
++ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1)
++
++#endif /* _GPT_H */
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/pc_slice.h grub-0.96-patched/stage2/pc_slice.h
+--- grub-0.96/stage2/pc_slice.h 2003-07-09 07:45:53.000000000 -0400
++++ grub-0.96-patched/stage2/pc_slice.h 2007-01-04 13:52:14.000000000 -0500
+@@ -115,6 +115,7 @@
+ #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85
+ #define PC_SLICE_TYPE_VSTAFS 0x9e
+ #define PC_SLICE_TYPE_DELL_UTIL 0xde
++#define PC_SLICE_TYPE_GPT 0xee
+ #define PC_SLICE_TYPE_LINUX_RAID 0xfd
+
+
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/shared.h grub-0.96-patched/stage2/shared.h
+--- grub-0.96/stage2/shared.h 2004-06-19 12:40:09.000000000 -0400
++++ grub-0.96-patched/stage2/shared.h 2007-01-04 13:52:15.000000000 -0500
+@@ -934,7 +934,9 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf);
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf);
+
+ /* Sets device to the one represented by the SAVED_* parameters. */
+ int make_saved_active (void);
diff --git a/abs/core/grub/grub-inode-size.patch b/abs/core/grub/grub-inode-size.patch
new file mode 100644
index 0000000..bef3bc1
--- /dev/null
+++ b/abs/core/grub/grub-inode-size.patch
@@ -0,0 +1,94 @@
+diff -Nrup a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c
+--- a/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200
++++ b/stage2/fsys_ext2fs.c 2008-01-30 14:27:20.000000000 +0100
+@@ -79,7 +79,52 @@ struct ext2_super_block
+ __u32 s_rev_level; /* Revision level */
+ __u16 s_def_resuid; /* Default uid for reserved blocks */
+ __u16 s_def_resgid; /* Default gid for reserved blocks */
+- __u32 s_reserved[235]; /* Padding to the end of the block */
++ /*
++ * These fields are for EXT2_DYNAMIC_REV superblocks only.
++ *
++ * Note: the difference between the compatible feature set and
++ * the incompatible feature set is that if there is a bit set
++ * in the incompatible feature set that the kernel doesn't
++ * know about, it should refuse to mount the filesystem.
++ *
++ * e2fsck's requirements are more strict; if it doesn't know
++ * about a feature in either the compatible or incompatible
++ * feature set, it must abort and not try to meddle with
++ * things it doesn't understand...
++ */
++ __u32 s_first_ino; /* First non-reserved inode */
++ __u16 s_inode_size; /* size of inode structure */
++ __u16 s_block_group_nr; /* block group # of this superblock */
++ __u32 s_feature_compat; /* compatible feature set */
++ __u32 s_feature_incompat; /* incompatible feature set */
++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */
++ __u8 s_uuid[16]; /* 128-bit uuid for volume */
++ char s_volume_name[16]; /* volume name */
++ char s_last_mounted[64]; /* directory where last mounted */
++ __u32 s_algorithm_usage_bitmap; /* For compression */
++ /*
++ * Performance hints. Directory preallocation should only
++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++ */
++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
++ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
++ /*
++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++ */
++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
++ __u32 s_journal_inum; /* inode number of journal file */
++ __u32 s_journal_dev; /* device number of journal file */
++ __u32 s_last_orphan; /* start of list of inodes to delete */
++ __u32 s_hash_seed[4]; /* HTREE hash seed */
++ __u8 s_def_hash_version; /* Default hash version to use */
++ __u8 s_jnl_backup_type; /* Default type of journal backup */
++ __u16 s_reserved_word_pad;
++ __u32 s_default_mount_opts;
++ __u32 s_first_meta_bg; /* First metablock group */
++ __u32 s_mkfs_time; /* When the filesystem was created */
++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
++ __u32 s_reserved[172]; /* Padding to the end of the block */
+ };
+
+ struct ext2_group_desc
+@@ -218,6 +263,9 @@ struct ext2_dir_entry
+ #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
+ #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s)))
+
++#define EXT2_INODE_SIZE(s) (SUPERBLOCK->s_inode_size)
++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++
+ /* linux/ext2_fs.h */
+ #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
+ /* kind of from ext2/super.c */
+@@ -553,7 +601,7 @@ ext2fs_dir (char *dirname)
+ gdp = GROUP_DESC;
+ ino_blk = gdp[desc].bg_inode_table +
+ (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
+- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
++ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
+ #ifdef E2DEBUG
+ printf ("inode table fsblock=%d\n", ino_blk);
+ #endif /* E2DEBUG */
+@@ -565,13 +613,12 @@ ext2fs_dir (char *dirname)
+ /* reset indirect blocks! */
+ mapblock2 = mapblock1 = -1;
+
+- raw_inode = INODE +
+- ((current_ino - 1)
+- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
++ raw_inode = (struct ext2_inode *)((char *)INODE +
++ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
++ EXT2_INODE_SIZE (SUPERBLOCK));
+ #ifdef E2DEBUG
+ printf ("ipb=%d, sizeof(inode)=%d\n",
+- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
+- sizeof (struct ext2_inode));
++ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
+ printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
+ printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
+ for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
diff --git a/abs/core/grub/i2o.patch b/abs/core/grub/i2o.patch
new file mode 100644
index 0000000..2af846c
--- /dev/null
+++ b/abs/core/grub/i2o.patch
@@ -0,0 +1,45 @@
+Only in grub-0.94/docs: grub.info
+Only in grub-0.94/docs: multiboot.info
+diff -ur grub-0.94/lib/device.c grub-0.94.new/lib/device.c
+--- grub-0.94/lib/device.c 2004-05-07 04:50:36.375238696 +0200
++++ grub-0.94.new/lib/device.c 2004-05-07 04:48:57.611253104 +0200
+@@ -419,6 +419,12 @@
+ {
+ sprintf (name, "/dev/rd/c%dd%d", controller, drive);
+ }
++
++static void
++get_i2o_disk_name (char *name, int unit)
++{
++ sprintf (name, "/dev/i2o/hd%c", unit + 'a');
++}
+ #endif
+
+ /* Check if DEVICE can be read. If an error occurs, return zero,
+@@ -789,6 +795,26 @@
+ }
+ }
+ }
++
++ /* I2O disks. */
++ for (i = 0; i < 8; i++)
++ {
++ char name[16];
++
++ get_i2o_disk_name (name, i);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++
+ #endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
diff --git a/abs/core/grub/install-grub b/abs/core/grub/install-grub
new file mode 100755
index 0000000..3eb7ce5
--- /dev/null
+++ b/abs/core/grub/install-grub
@@ -0,0 +1,187 @@
+#!/bin/bash
+
+#
+# This is a little helper script that tries to convert linux-style device
+# names to grub-style. It's not very smart, so it
+# probably won't work for more complicated setups.
+#
+# If it doesn't work for you, try installing grub manually:
+#
+# # mkdir -p /boot/grub
+# # cp /usr/lib/grub/i386-pc/* /boot/grub/
+#
+# Then start up the 'grub' shell and run something like the following:
+#
+# grub> root(hd0,0)
+# grub> setup(hd0)
+#
+# The "root" line should point to the partition your kernel is located on,
+# /boot if you have a separate boot partition, otherwise your root (/).
+#
+# The "setup" line tells grub which disc/partition to install the
+# bootloader to. In the example above, it will install to the MBR of the
+# primary master hard drive.
+#
+
+usage() {
+ echo "usage: install-grub <install_device> [boot_device]"
+ echo
+ echo "where <install_device> is the device where Grub will be installed"
+ echo "and [boot_device] is the partition that contains the /boot"
+ echo "directory (auto-detected if omitted)"
+ echo
+ echo "examples: install-grub /dev/hda"
+ echo " install-grub /dev/hda /dev/hda1"
+ echo
+ exit 0
+}
+
+## new install-grub, code was taken from setup script
+ROOTDEV=$1
+PART_ROOT=$2
+VMLINUZ=vmlinuz26
+
+if [ "$ROOTDEV" = "" ]; then
+ usage
+fi
+if [ "$PART_ROOT" = "" ]; then
+ PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1)
+fi
+if [ "$PART_ROOT" = "" ]; then
+ PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1)
+fi
+if [ "$PART_ROOT" = "" ]; then
+ echo "error: could not determine BOOT_DEVICE, please specify manually" >&2
+ exit 1
+fi
+
+
+get_grub_map() {
+ [ -e /tmp/dev.map ] && rm /tmp/dev.map
+ /sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF
+quit
+EOF
+}
+
+mapdev() {
+ partition_flag=0
+ device_found=0
+ devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g')
+ linuxdevice=$(echo $1 | cut -b1-8)
+ if [ "$(echo $1 | egrep '[0-9]$')" ]; then
+ # /dev/hdXY
+ pnum=$(echo $1 | cut -b9-)
+ pnum=$(($pnum-1))
+ partition_flag=1
+ fi
+ for dev in $devs
+ do
+ if [ "(" = $(echo $dev | cut -b1) ]; then
+ grubdevice="$dev"
+ else
+ if [ "$dev" = "$linuxdevice" ]; then
+ device_found=1
+ break
+ fi
+ fi
+ done
+ if [ "$device_found" = "1" ]; then
+ if [ "$partition_flag" = "0" ]; then
+ echo "$grubdevice"
+ else
+ grubdevice_stringlen=${#grubdevice}
+ let grubdevice_stringlen--
+ grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen)
+ echo "$grubdevice,$pnum)"
+ fi
+ else
+ echo " DEVICE NOT FOUND"
+ fi
+}
+
+dogrub() {
+ get_grub_map
+ if [ ! -f /boot/grub/menu.lst ]; then
+ echo "Error: Couldn't find /boot/grub/menu.lst. Is GRUB installed?"
+ exit 1
+ fi
+ # try to auto-configure GRUB...
+ if [ "$PART_ROOT" != "" -a "$S_GRUB" != "1" ]; then
+ grubdev=$(mapdev $PART_ROOT)
+ # look for a separately-mounted /boot partition
+ bootdev=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "$grubdev" != "" -o "$bootdev" != "" ]; then
+ cp /boot/grub/menu.lst /tmp/.menu.lst
+ # remove the default entries by truncating the file at our little tag (#-*)
+ head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst
+ rm -f /tmp/.menu.lst
+ echo "" >>/boot/grub/menu.lst
+ echo "# (0) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux" >>/boot/grub/menu.lst
+ subdir=
+ if [ "$bootdev" != "" ]; then
+ grubdev=$(mapdev $bootdev)
+ else
+ subdir="/boot"
+ fi
+ echo "root $grubdev" >>/boot/grub/menu.lst
+ echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
+ if [ "$VMLINUZ" = "vmlinuz26" ]; then
+ echo "initrd $subdir/kernel26.img" >>/boot/grub/menu.lst
+ fi
+ echo "" >>/boot/grub/menu.lst
+ # adding fallback/full image
+ echo "# (1) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux Fallback" >>/boot/grub/menu.lst
+ echo "root $grubdev" >>/boot/grub/menu.lst
+ echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
+ if [ "$VMLINUZ" = "vmlinuz26" ]; then
+ echo "initrd $subdir/kernel26-fallback.img" >>/boot/grub/menu.lst
+ fi
+ echo "" >>/boot/grub/menu.lst
+ fi
+ fi
+
+ echo "Installing the GRUB bootloader..."
+ cp -a /usr/lib/grub/i386-pc/* /boot/grub/
+ sync
+ # freeze xfs filesystems to enable grub installation on xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -f / > /dev/null 2>&1
+ fi
+ # look for a separately-mounted /boot partition
+ bootpart=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "$bootpart" = "" ]; then
+ bootpart=$PART_ROOT
+ fi
+ bootpart=$(mapdev $bootpart)
+ bootdev=$(mapdev $ROOTDEV)
+ if [ "$bootpart" = "" ]; then
+ echo "Error: Missing/Invalid root device: $bootpart"
+ exit 1
+ fi
+ /sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF
+root $bootpart
+setup $bootdev
+quit
+EOF
+cat /tmp/grub.log
+ # unfreeze xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -u / > /dev/null 2>&1
+ fi
+
+ if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then
+ echo "Error installing GRUB. (see /tmp/grub.log for output)"
+ exit 1
+ fi
+ echo "GRUB was successfully installed."
+
+rm -f /tmp/grub.log
+
+exit 0
+}
+
+dogrub \ No newline at end of file
diff --git a/abs/core/grub/intelmac.patch b/abs/core/grub/intelmac.patch
new file mode 100644
index 0000000..a3fabc7
--- /dev/null
+++ b/abs/core/grub/intelmac.patch
@@ -0,0 +1,67 @@
+--- grub-0.97.orig/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200
++++ grub-0.97/stage2/asm.S 2006-04-21 11:10:52.000000000 +0200
+@@ -1651,7 +1651,29 @@
+ jnz 3f
+ ret
+
+-3: /* use keyboard controller */
++3: /*
++ * try to switch gateA20 using PORT92, the "Fast A20 and Init"
++ * register
++ */
++ mov $0x92, %dx
++ inb %dx, %al
++ /* skip the port92 code if it's unimplemented (read returns 0xff) */
++ cmpb $0xff, %al
++ jz 6f
++
++ /* set or clear bit1, the ALT_A20_GATE bit */
++ movb 4(%esp), %ah
++ testb %ah, %ah
++ jz 4f
++ orb $2, %al
++ jmp 5f
++4: and $0xfd, %al
++
++ /* clear the INIT_NOW bit don't accidently reset the machine */
++5: and $0xfe, %al
++ outb %al, %dx
++
++6: /* use keyboard controller */
+ pushl %eax
+
+ call gloop1
+@@ -1661,9 +1683,12 @@
+
+ gloopint1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloopint1_done
+ andb $K_IBUF_FUL, %al
+ jnz gloopint1
+
++gloopint1_done:
+ movb $KB_OUTPUT_MASK, %al
+ cmpb $0, 0x8(%esp)
+ jz gdoit
+@@ -1684,6 +1709,8 @@
+
+ gloop1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloop2ret
+ andb $K_IBUF_FUL, %al
+ jnz gloop1
+
+@@ -1991,6 +2018,11 @@
+ ENTRY(console_getkey)
+ push %ebp
+
++wait_for_key:
++ call EXT_C(console_checkkey)
++ incl %eax
++ jz wait_for_key
++
+ call EXT_C(prot_to_real)
+ .code16
+
diff --git a/abs/core/grub/menu.lst b/abs/core/grub/menu.lst
new file mode 100644
index 0000000..57fcf0d
--- /dev/null
+++ b/abs/core/grub/menu.lst
@@ -0,0 +1,46 @@
+# Config file for GRUB - The GNU GRand Unified Bootloader
+# /boot/grub/menu.lst
+
+# DEVICE NAME CONVERSIONS
+#
+# Linux Grub
+# -------------------------
+# /dev/fd0 (fd0)
+# /dev/hda (hd0)
+# /dev/hdb2 (hd1,1)
+# /dev/hda3 (hd0,2)
+#
+
+# FRAMEBUFFER RESOLUTION SETTINGS
+# +-------------------------------------------------+
+# | 640x480 800x600 1024x768 1280x1024
+# ----+--------------------------------------------
+# 256 | 0x301=769 0x303=771 0x305=773 0x307=775
+# 32K | 0x310=784 0x313=787 0x316=790 0x319=793
+# 64K | 0x311=785 0x314=788 0x317=791 0x31A=794
+# 16M | 0x312=786 0x315=789 0x318=792 0x31B=795
+# +-------------------------------------------------+
+
+# general configuration:
+timeout 5
+default 0
+color light-blue/black light-cyan/blue
+
+# boot sections follow
+# each is implicitly numbered from 0 in the order of appearance below
+#
+# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
+#
+#-*
+
+# (0) Arch Linux
+title Arch Linux [/boot/vmlinuz26]
+root (hd0,0)
+kernel /vmlinuz26 root=/dev/hda3 ro
+initrd /kernel26.img
+
+# (1) Windows
+#title Windows
+#rootnoverify (hd0,0)
+#makeactive
+#chainloader +1
diff --git a/abs/core/grub/more-raid.patch b/abs/core/grub/more-raid.patch
new file mode 100644
index 0000000..39db234
--- /dev/null
+++ b/abs/core/grub/more-raid.patch
@@ -0,0 +1,100 @@
+--- grub-0.95/lib/device.c.moreraid 2004-11-30 17:09:36.736099360 -0500
++++ grub-0.95/lib/device.c 2004-11-30 17:12:17.319686944 -0500
+@@ -544,6 +544,17 @@
+ }
+
+ static void
++get_cciss_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
++}
++
++static void
++get_cpqarray_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/ida/c%dd%d", controller, drive);
++}
++static void
+ get_ataraid_disk_name (char *name, int unit)
+ {
+ sprintf (name, "/dev/ataraid/d%c", unit + '0');
+@@ -920,7 +931,7 @@
+
+ for (controller = 0; controller < 8; controller++)
+ {
+- for (drive = 0; drive < 15; drive++)
++ for (drive = 0; drive < 32; drive++)
+ {
+ char name[24];
+
+@@ -940,6 +951,70 @@
+ }
+ }
+ #endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cciss - we have
++ /dev/cciss/c<controller>d<logical drive>p<partition>.
++
++ cciss driver currently supports up to 8 controllers, 16 logical
++ drives, and 7 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 16; drive++)
++ {
++ char name[24];
++
++ get_cciss_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cpqarray - we have
++ /dev/ida/c<controller>d<logical drive>p<partition>.
++
++ cpqarray driver currently supports up to 8 controllers, 16 logical
++ drives, and 15 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 15; drive++)
++ {
++ char name[24];
++
++ get_cpqarray_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
+ if (fp)
diff --git a/abs/core/grub/special-devices.patch b/abs/core/grub/special-devices.patch
new file mode 100644
index 0000000..894f3e8
--- /dev/null
+++ b/abs/core/grub/special-devices.patch
@@ -0,0 +1,18 @@
+--- grub-0.93/lib/device.c.raid 2002-05-20 05:53:46.000000000 -0400
++++ grub-0.93/lib/device.c 2002-12-28 23:24:10.000000000 -0500
+@@ -689,7 +689,14 @@
+ if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
+ strcpy (dev + strlen(dev) - 5, "/part");
+ }
+- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
++
++ sprintf (dev + strlen(dev), "%s%d",
++ /* Compaq smart and others */
++ (strncmp(dev, "/dev/ida/", 9) == 0 ||
++ strncmp(dev, "/dev/ataraid/", 13) == 0 ||
++ strncmp(dev, "/dev/cciss/", 11) == 0 ||
++ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "",
++ ((partition >> 16) & 0xFF) + 1);
+
+ /* Open the partition. */
+ fd = open (dev, O_RDWR);
diff --git a/abs/core/gsfonts/PKGBUILD b/abs/core/gsfonts/PKGBUILD
new file mode 100644
index 0000000..5294731
--- /dev/null
+++ b/abs/core/gsfonts/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=gsfonts
+pkgver=8.11
+pkgrel=4
+pkgdesc="Ghostscript standard Type1 fonts"
+arch=(i686 x86_64)
+depends=('xorg-font-utils' 'fontconfig')
+install=xfonts.install
+url="http://sourceforge.net/projects/ghostscript"
+source=(http://switch.dl.sourceforge.net/ghostscript/ghostscript-fonts-std-8.11.tar.gz)
+md5sums=('6865682b095f8c4500c54b285ff05ef6')
+
+build() {
+ mkdir -p ${startdir}/pkg/usr/share/fonts/Type1
+ install -m644 ${startdir}/src/fonts/*.{pfb,pfm,afm} \
+ ${startdir}/pkg/usr/share/fonts/Type1/ || return 1
+}
diff --git a/abs/core/gsfonts/xfonts.install b/abs/core/gsfonts/xfonts.install
new file mode 100644
index 0000000..3eb0455
--- /dev/null
+++ b/abs/core/gsfonts/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/Type1
+ mkfontdir /usr/share/fonts/Type1
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/gtk2/PKGBUILD b/abs/core/gtk2/PKGBUILD
new file mode 100644
index 0000000..7cab655
--- /dev/null
+++ b/abs/core/gtk2/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7635 2008-08-03 15:54:30Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gtk2
+pkgver=2.12.11
+pkgrel=3
+pkgdesc="The GTK+ Toolkit (v2)"
+arch=(i686 x86_64)
+url="http://www.gtk.org/"
+install=gtk2.install
+depends=('atk>=1.22.0' 'pango>=1.20.5' 'libxcursor' 'libxinerama' 'libxrandr>=1.2.1' 'libxi' 'libcups>=1.3.8-2' 'libxcomposite' 'libxdamage' 'heimdal>=1.2' 'gnutls>=2.4.1')
+makedepends=('pkgconfig')
+replaces=('gtkprint-cups')
+conflicts=('gtkprint-cups')
+options=('!libtool')
+backup=(etc/gtk-2.0/gtkrc)
+license=('LGPL')
+source=(http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-${pkgver}.tar.bz2
+ gtkclipboard-check.patch)
+md5sums=('f7aab88e856a813386f797aade5867ad'
+ '4025d3c15d6c6f73a032f403ffd4ff1c')
+
+build() {
+ cd ${startdir}/src/gtk+-${pkgver}
+ # Workaround patch for flash
+ patch -Np1 -i ${startdir}/src/gtkclipboard-check.patch || return 1
+
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --with-xinput=xfree \
+ --with-included-loaders=png || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ echo 'gtk-fallback-icon-theme = "gnome"' > ${startdir}/pkg/etc/gtk-2.0/gtkrc || return 1
+}
diff --git a/abs/core/gtk2/gtk2.install b/abs/core/gtk2/gtk2.install
new file mode 100644
index 0000000..3b4a881
--- /dev/null
+++ b/abs/core/gtk2/gtk2.install
@@ -0,0 +1,27 @@
+# arg 1: the new package version
+post_install() {
+ # we need to ldconfig first, in case xfree86's libs aren't
+ # in ld.so.cache yet
+ sbin/ldconfig -r .
+ mkdir -p etc/gtk-2.0 &>/dev/null
+ usr/bin/gtk-query-immodules-2.0 >etc/gtk-2.0/gtk.immodules
+ usr/bin/gdk-pixbuf-query-loaders >etc/gtk-2.0/gdk-pixbuf.loaders
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ rm -f etc/gtk-2.0/gtk.immodules &>/dev/null
+ rm -f etc/gtk-2.0/gdk-pixbuf.loaders &>/dev/null
+ rmdir etc/gtk-2.0 &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/gtk2/gtkclipboard-check.patch b/abs/core/gtk2/gtkclipboard-check.patch
new file mode 100644
index 0000000..48894fb
--- /dev/null
+++ b/abs/core/gtk2/gtkclipboard-check.patch
@@ -0,0 +1,11 @@
+--- gtk+-2.11.6/gtk/gtkclipboard.c.orig 2007-08-18 13:48:22.000000000 +0000
++++ gtk+-2.11.6/gtk/gtkclipboard.c 2007-08-18 13:49:08.000000000 +0000
+@@ -287,6 +287,8 @@
+ gtk_clipboard_get_for_display (GdkDisplay *display,
+ GdkAtom selection)
+ {
++ if (display == NULL)
++ return NULL;
+ g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+ g_return_val_if_fail (!display->closed, NULL);
+
diff --git a/abs/core/gzip/PKGBUILD b/abs/core/gzip/PKGBUILD
new file mode 100644
index 0000000..dea881c
--- /dev/null
+++ b/abs/core/gzip/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=gzip
+pkgver=1.3.12
+pkgrel=13
+pkgdesc="GNU compression utility"
+arch=(i686 x86_64)
+url="http://www.gzip.org"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'bash')
+makedepends=('patch')
+source=(ftp://ftp.gnu.org/pub/gnu/gzip/gzip-$pkgver.tar.gz
+ gzip-fixutimens.patch)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ${startdir}/src/gzip-fixutimens.patch || return 1
+
+ ./configure --prefix=/usr
+ make || return 1
+ mkdir -p $startdir/pkg/bin $startdir/pkg/usr/bin
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin
+ mv $pkgname $startdir/pkg/bin
+ mv gunzip zcat uncompress $startdir/pkg/bin
+ cd $startdir/pkg/bin
+ ln -sf $pkgname compress
+}
+md5sums=('b5bac2d21840ae077e0217bc5e4845b1'
+ 'cb592761476921018386031d91625153')
diff --git a/abs/core/gzip/gzip-fixpaths.patch b/abs/core/gzip/gzip-fixpaths.patch
new file mode 100644
index 0000000..c95dc67
--- /dev/null
+++ b/abs/core/gzip/gzip-fixpaths.patch
@@ -0,0 +1,37 @@
+diff -Naur gzip-1.2.4a-orig/Makefile.in gzip-1.2.4a/Makefile.in
+--- gzip-1.2.4a-orig/Makefile.in 1993-08-17 10:12:40.000000000 -0700
++++ gzip-1.2.4a/Makefile.in 2005-04-21 11:45:27.000000000 -0700
+@@ -348,27 +348,27 @@
+ rm -f _match.s
+
+ $(G)zdiff: zdiff.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zdiff.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zdiff.in > $@
+ chmod 755 $@
+
+ $(G)zgrep: zgrep.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zgrep.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zgrep.in > $@
+ chmod 755 $@
+
+ $(G)zmore: zmore.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zmore.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zmore.in > $@
+ chmod 755 $@
+
+ $(G)znew: znew.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/znew.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/znew.in > $@
+ chmod 755 $@
+
+ $(G)zforce: zforce.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/zforce.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/zforce.in > $@
+ chmod 755 $@
+
+ gzexe: gzexe.in
+- sed -e "$(SEDCMD)" -e "s|BINDIR|$(bindir)|" $(srcdir)/gzexe.in > $@
++ sed -e "$(SEDCMD)" -e "s|BINDIR|/bin|" $(srcdir)/gzexe.in > $@
+ chmod 755 $@
+
+ gzip.info: gzip.texi
diff --git a/abs/core/gzip/gzip-fixutimens.patch b/abs/core/gzip/gzip-fixutimens.patch
new file mode 100644
index 0000000..a78aa79
--- /dev/null
+++ b/abs/core/gzip/gzip-fixutimens.patch
@@ -0,0 +1,36 @@
+--- gzip-1.3.12.orig/gzip.c
++++ gzip-1.3.12/gzip.c
+@@ -1637,7 +1642,7 @@
+ }
+ }
+
+- if (futimens (ofd, ofname, timespec) != 0)
++ if (gz_futimens (ofd, ofname, timespec) != 0)
+ {
+ int e = errno;
+ WARN ((stderr, "%s: ", program_name));
+--- gzip-1.3.12.orig/lib/utimens.h
++++ gzip-1.3.12/lib/utimens.h
+@@ -1,3 +1,3 @@
+ #include <time.h>
+-int futimens (int, char const *, struct timespec const [2]);
++int gz_futimens (int, char const *, struct timespec const [2]);
+ int utimens (char const *, struct timespec const [2]);
+--- gzip-1.3.12.orig/lib/utimens.c
++++ gzip-1.3.12/lib/utimens.c
+@@ -75,7 +75,7 @@
+ Return 0 on success, -1 (setting errno) on failure. */
+
+ int
+-futimens (int fd ATTRIBUTE_UNUSED,
++gz_futimens (int fd ATTRIBUTE_UNUSED,
+ char const *file, struct timespec const timespec[2])
+ {
+ /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+@@ -185,5 +185,5 @@
+ int
+ utimens (char const *file, struct timespec const timespec[2])
+ {
+- return futimens (-1, file, timespec);
++ return gz_futimens (-1, file, timespec);
+ }
diff --git a/abs/core/gzip/gzip-security-update.patch b/abs/core/gzip/gzip-security-update.patch
new file mode 100644
index 0000000..2fff599
--- /dev/null
+++ b/abs/core/gzip/gzip-security-update.patch
@@ -0,0 +1,186 @@
+Only in gzip-1.3.5: cscope.out
+diff -ru gzip-1.3.5.orig/gzip.h gzip-1.3.5/gzip.h
+--- gzip-1.3.5.orig/gzip.h 2001-10-01 07:53:41.000000000 +0100
++++ gzip-1.3.5/gzip.h 2006-08-18 22:44:38.755598000 +0100
+@@ -198,6 +198,8 @@
+ extern int to_stdout; /* output to stdout (-c) */
+ extern int save_orig_name; /* set if original name must be saved */
+
++#define MIN(a,b) ((a) <= (b) ? (a) : (b))
++
+ #define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(0))
+ #define try_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(1))
+
+diff -ru gzip-1.3.5.orig/inflate.c gzip-1.3.5/inflate.c
+--- gzip-1.3.5.orig/inflate.c 2002-09-25 22:20:13.000000000 +0100
++++ gzip-1.3.5/inflate.c 2006-07-21 09:10:43.350376000 +0100
+@@ -337,7 +337,7 @@
+ {
+ *t = (struct huft *)NULL;
+ *m = 0;
+- return 0;
++ return 2;
+ }
+
+
+Only in gzip-1.3.5: testcases
+diff -ru gzip-1.3.5.orig/unlzh.c gzip-1.3.5/unlzh.c
+--- gzip-1.3.5.orig/unlzh.c 1999-10-06 06:00:00.000000000 +0100
++++ gzip-1.3.5/unlzh.c 2006-08-18 22:56:19.446997000 +0100
+@@ -149,13 +149,17 @@
+ unsigned i, k, len, ch, jutbits, avail, nextcode, mask;
+
+ for (i = 1; i <= 16; i++) count[i] = 0;
+- for (i = 0; i < (unsigned)nchar; i++) count[bitlen[i]]++;
++ for (i = 0; i < (unsigned)nchar; i++) {
++ if (bitlen[i] > 16)
++ error("Bad table (case a)\n");
++ else count[bitlen[i]]++;
++ }
+
+ start[1] = 0;
+ for (i = 1; i <= 16; i++)
+ start[i + 1] = start[i] + (count[i] << (16 - i));
+- if ((start[17] & 0xffff) != 0)
+- error("Bad table\n");
++ if ((start[17] & 0xffff) != 0 || tablebits > 16) /* 16 for weight below */
++ error("Bad table (case b)\n");
+
+ jutbits = 16 - tablebits;
+ for (i = 1; i <= (unsigned)tablebits; i++) {
+@@ -169,15 +173,15 @@
+
+ i = start[tablebits + 1] >> jutbits;
+ if (i != 0) {
+- k = 1 << tablebits;
+- while (i != k) table[i++] = 0;
++ k = MIN(1 << tablebits, DIST_BUFSIZE);
++ while (i < k) table[i++] = 0;
+ }
+
+ avail = nchar;
+ mask = (unsigned) 1 << (15 - tablebits);
+ for (ch = 0; ch < (unsigned)nchar; ch++) {
+ if ((len = bitlen[ch]) == 0) continue;
+- nextcode = start[len] + weight[len];
++ nextcode = MIN(start[len] + weight[len], DIST_BUFSIZE);
+ if (len <= (unsigned)tablebits) {
+ for (i = start[len]; i < nextcode; i++) table[i] = ch;
+ } else {
+@@ -218,7 +222,7 @@
+ for (i = 0; i < 256; i++) pt_table[i] = c;
+ } else {
+ i = 0;
+- while (i < n) {
++ while (i < MIN(n,NPT)) {
+ c = bitbuf >> (BITBUFSIZ - 3);
+ if (c == 7) {
+ mask = (unsigned) 1 << (BITBUFSIZ - 1 - 3);
+@@ -228,7 +232,7 @@
+ pt_len[i++] = c;
+ if (i == i_special) {
+ c = getbits(2);
+- while (--c >= 0) pt_len[i++] = 0;
++ while (--c >= 0 && i < NPT) pt_len[i++] = 0;
+ }
+ }
+ while (i < nn) pt_len[i++] = 0;
+@@ -248,7 +252,7 @@
+ for (i = 0; i < 4096; i++) c_table[i] = c;
+ } else {
+ i = 0;
+- while (i < n) {
++ while (i < MIN(n,NC)) {
+ c = pt_table[bitbuf >> (BITBUFSIZ - 8)];
+ if (c >= NT) {
+ mask = (unsigned) 1 << (BITBUFSIZ - 1 - 8);
+@@ -256,14 +260,14 @@
+ if (bitbuf & mask) c = right[c];
+ else c = left [c];
+ mask >>= 1;
+- } while (c >= NT);
++ } while (c >= NT && (mask || c != left[c]));
+ }
+ fillbuf((int) pt_len[c]);
+ if (c <= 2) {
+ if (c == 0) c = 1;
+ else if (c == 1) c = getbits(4) + 3;
+ else c = getbits(CBIT) + 20;
+- while (--c >= 0) c_len[i++] = 0;
++ while (--c >= 0 && i < NC) c_len[i++] = 0;
+ } else c_len[i++] = c - 2;
+ }
+ while (i < NC) c_len[i++] = 0;
+@@ -292,7 +296,7 @@
+ if (bitbuf & mask) j = right[j];
+ else j = left [j];
+ mask >>= 1;
+- } while (j >= NC);
++ } while (j >= NC && (mask || j != left[j]));
+ }
+ fillbuf((int) c_len[j]);
+ return j;
+@@ -309,7 +313,7 @@
+ if (bitbuf & mask) j = right[j];
+ else j = left [j];
+ mask >>= 1;
+- } while (j >= NP);
++ } while (j >= NP && (mask || j != left[j]));
+ }
+ fillbuf((int) pt_len[j]);
+ if (j != 0) j = ((unsigned) 1 << (j - 1)) + getbits((int) (j - 1));
+@@ -356,7 +360,7 @@
+ while (--j >= 0) {
+ buffer[r] = buffer[i];
+ i = (i + 1) & (DICSIZ - 1);
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ }
+ for ( ; ; ) {
+ c = decode_c();
+@@ -366,14 +370,14 @@
+ }
+ if (c <= UCHAR_MAX) {
+ buffer[r] = c;
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ } else {
+ j = c - (UCHAR_MAX + 1 - THRESHOLD);
+ i = (r - decode_p() - 1) & (DICSIZ - 1);
+ while (--j >= 0) {
+ buffer[r] = buffer[i];
+ i = (i + 1) & (DICSIZ - 1);
+- if (++r == count) return r;
++ if (++r >= count) return r;
+ }
+ }
+ }
+diff -ru gzip-1.3.5.orig/unpack.c gzip-1.3.5/unpack.c
+--- gzip-1.3.5.orig/unpack.c 1999-10-06 06:00:00.000000000 +0100
++++ gzip-1.3.5/unpack.c 2006-07-21 15:49:48.615190000 +0100
+@@ -13,7 +13,6 @@
+ #include "gzip.h"
+ #include "crypt.h"
+
+-#define MIN(a,b) ((a) <= (b) ? (a) : (b))
+ /* The arguments must not have side effects. */
+
+ #define MAX_BITLEN 25
+@@ -133,7 +132,7 @@
+ /* Remember where the literals of this length start in literal[] : */
+ lit_base[len] = base;
+ /* And read the literals: */
+- for (n = leaves[len]; n > 0; n--) {
++ for (n = leaves[len]; n > 0 && base < LITERALS; n--) {
+ literal[base++] = (uch)get_byte();
+ }
+ }
+@@ -169,7 +168,7 @@
+ prefixp = &prefix_len[1<<peek_bits];
+ for (len = 1; len <= peek_bits; len++) {
+ int prefixes = leaves[len] << (peek_bits-len); /* may be 0 */
+- while (prefixes--) *--prefixp = (uch)len;
++ while (prefixes-- && prefixp > prefix_len) *--prefixp = (uch)len;
+ }
+ /* The length of all other codes is unknown: */
+ while (prefixp > prefix_len) *--prefixp = 0;
diff --git a/abs/core/hal-info/PKGBUILD b/abs/core/hal-info/PKGBUILD
new file mode 100644
index 0000000..7f697c8
--- /dev/null
+++ b/abs/core/hal-info/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 2153 2008-05-27 14:12:39Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=hal-info
+_date=20080508
+pkgver=0.20080508
+pkgrel=1
+pkgdesc="Hardware Abstraction Layer information files"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+url="http://www.freedesktop.org/wiki/Software/hal"
+source=(http://hal.freedesktop.org/releases/hal-info-${_date}.tar.gz)
+md5sums=('6fc99d15d38945c17a291ea93e664664')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${_date}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/hal/PKGBUILD b/abs/core/hal/PKGBUILD
new file mode 100644
index 0000000..f1a3b3f
--- /dev/null
+++ b/abs/core/hal/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 8861 2008-08-16 22:34:13Z eric $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Link Dupont <link@subpop.net>
+
+pkgname=hal
+pkgver=0.5.11
+pkgrel=1
+pkgdesc="Hardware Abstraction Layer"
+arch=(i686 x86_64)
+license=('GPL' 'custom')
+url="http://www.freedesktop.org/wiki/Software/hal"
+depends=('dbus-glib>=0.74' 'dbus>=1.2.1' 'libusb>=0.1.12' 'udev>=118' 'filesystem>=0.7.1-5' 'hal-info>=0.20080508' 'eject' 'libsmbios>=2.0.2' 'dmidecode' 'pciutils>=2.2.8-3' 'usbutils>=0.73-5' 'pm-utils>=1.1.2')
+makedepends=('pkgconfig' 'gperf')
+options=('!libtool')
+install=hal.install
+source=(http://hal.freedesktop.org/releases/${pkgname}-${pkgver}.tar.bz2
+ hal
+ hal-policy.patch
+ cryptsetup_location.patch
+ hal-0.5.9-hide-diagnostic.patch
+ ntfs3g-valid-options.patch)
+md5sums=('5e8935ab61bcb14afd2d4548084aace0' '277e96ac130d7bfce0b30f0b80db8782'\
+ '18dcdaa79952e2057c2e4745fbc8ad52' 'c688a3c6574699365926f4fef7441545'\
+ '4d4b6801a1cedca22b8bdd9db73b16fb' '4242a2c78885e396f639d0cd5e33218c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/hal-policy.patch || return 1
+ patch -Np1 -i ${startdir}/src/cryptsetup_location.patch || return 1
+ patch -Np1 -i ${startdir}/src/hal-0.5.9-hide-diagnostic.patch || return 1
+ patch -Np0 -i ${startdir}/src/ntfs3g-valid-options.patch || return 1
+
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/hal --enable-static=no \
+ --enable-acpi-ibm --enable-acpi-toshiba \
+ --disable-docbook-docs --disable-doxygen-docs \
+ --with-hal-user=hal --with-hal-group=hal \
+ --with-pid-file=/var/run/hald.pid \
+ --enable-policy-kit=no || return 1
+ sed -e 's/device-manager//' -i tools/Makefile || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${startdir}/pkg/etc/rc.d
+ install -m755 -d ${startdir}/pkg/media || return 1
+ install -m 755 ${startdir}/src/hal ${startdir}/pkg/etc/rc.d/hal || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/hal/cryptsetup_location.patch b/abs/core/hal/cryptsetup_location.patch
new file mode 100644
index 0000000..1e4f5ef
--- /dev/null
+++ b/abs/core/hal/cryptsetup_location.patch
@@ -0,0 +1,36 @@
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-remove-linux hal-0.5.8.1-new/tools/linux/hal-luks-remove-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-remove-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-remove-linux 2007-02-11 13:04:46.000000000 +0100
+@@ -6,7 +6,7 @@
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License version 2.
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ echo LUKS cryptotext device $HAL_PROP_INFO_UDI is going away
+
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-setup-linux hal-0.5.8.1-new/tools/linux/hal-luks-setup-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-setup-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-setup-linux 2007-02-11 13:04:45.000000000 +0100
+@@ -9,7 +9,7 @@
+ read password
+ PASSWORD=${PASSWORD//[^[:alnum:]_=[:space:]:.+-]/@}
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ if [ ! -f $CRYPTSETUP ]; then
+ echo org.freedesktop.Hal.Device.Volume.Crypto.SetupError >&2
+diff -Naur hal-0.5.8.1/tools/linux/hal-luks-teardown-linux hal-0.5.8.1-new/tools/linux/hal-luks-teardown-linux
+--- hal-0.5.8.1/tools/linux/hal-luks-teardown-linux 2006-09-19 22:23:25.000000000 +0200
++++ hal-0.5.8.1-new/tools/linux/hal-luks-teardown-linux 2007-02-11 13:04:44.000000000 +0100
+@@ -6,7 +6,7 @@
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License version 2.
+
+-CRYPTSETUP=/sbin/cryptsetup
++CRYPTSETUP=/usr/sbin/cryptsetup
+
+ if [ ! -f $CRYPTSETUP ]; then
+ echo org.freedesktop.Hal.Device.Volume.Crypto.TeardownError >&2
diff --git a/abs/core/hal/hal b/abs/core/hal/hal
new file mode 100644
index 0000000..012d456
--- /dev/null
+++ b/abs/core/hal/hal
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ #Check for running dbus, start when not running
+ ck_daemon dbus && /etc/rc.d/dbus start
+ if [ -x /etc/rc.d/acpid ]; then
+ ck_daemon acpid && /etc/rc.d/acpid start
+ fi
+ stat_busy "Starting Hardware Abstraction Layer"
+ if [ ! -x /var/cache/hald ] ; then
+ install -m755 -g 82 -o 82 -d /var/cache/hald
+ fi
+ if [ ! -x /var/run/hald ]; then
+ install -m755 -g 82 -o 82 -d /var/run/hald
+ fi
+ if [ ! -x /var/run/hald/hald-local ]; then
+ install -m755 -g 0 -o 0 -d /var/run/hald/hald-local
+ fi
+ if [ ! -x /var/run/hald/hald-runner ]; then
+ install -m755 -g 0 -o 0 -d /var/run/hald/hald-runner
+ fi
+ /usr/sbin/hald
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon hal
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Hardware Abstraction Layer"
+ [ -f /var/run/hald.pid ] && kill `cat /var/run/hald.pid` &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon hal
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core/hal/hal-0.5.9-hide-diagnostic.patch b/abs/core/hal/hal-0.5.9-hide-diagnostic.patch
new file mode 100644
index 0000000..58c882d
--- /dev/null
+++ b/abs/core/hal/hal-0.5.9-hide-diagnostic.patch
@@ -0,0 +1,14 @@
+--- hal-0.5.9/fdi/policy/10osvendor/20-storage-methods.fdi.orig 2007-05-01 21:39:31.000000000 +0000
++++ hal-0.5.9/fdi/policy/10osvendor/20-storage-methods.fdi 2007-05-01 21:51:14.000000000 +0000
+@@ -100,6 +100,11 @@
+ </match>
+ </match>
+
++ <!-- Hide partitions marked as Compaq Diagnostics -->
++ <match key="volume.partition.type" string="0x12">
++ <merge key="volume.ignore" type="bool">true</merge>
++ </match>
++
+ <!-- EFI firmware partitions -->
+ <match key="volume.fstype" string="vfat">
+ <match key="volume.label" string="EFI">
diff --git a/abs/core/hal/hal-policy.patch b/abs/core/hal/hal-policy.patch
new file mode 100644
index 0000000..96528b5
--- /dev/null
+++ b/abs/core/hal/hal-policy.patch
@@ -0,0 +1,32 @@
+--- hal-0.5.11/hal.conf.in 2008-05-27 16:09:25.000000000 +0200
++++ hal-0.5.11/hal.conf.in 2008-05-27 16:21:28.000000000 +0200
+@@ -37,9 +37,27 @@
+ receive_sender="org.freedesktop.Hal"/>
+ </policy>
+
+- <!-- Default policy for the exported interfaces; if PolicyKit is not used
+- for access control you will need to modify this -->
++ <!-- Default policy for the exported interfaces -->
+ <policy context="default">
++ <deny send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
++ <deny send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
++ <deny send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
++ <deny send_interface="org.freedesktop.Hal.Device.Volume"/>
++ <deny send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
++ </policy>
++
++ <policy group="power">
++ <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
++ <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
++ </policy>
++
++ <policy group="storage">
++ <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
++ <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
++ </policy>
++
++ <!-- You can change this to a more suitable user, or make per-group -->
++ <policy user="0">
+ <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
+ <allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
+ <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
diff --git a/abs/core/hal/hal.install b/abs/core/hal/hal.install
new file mode 100644
index 0000000..d3f3686
--- /dev/null
+++ b/abs/core/hal/hal.install
@@ -0,0 +1,25 @@
+post_install() {
+ getent group hal >/dev/null || usr/sbin/groupadd -g 82 hal
+ getent group optical >/dev/null || usr/sbin/groupadd -g 93 optical
+ getent group floppy >/dev/null || usr/sbin/groupadd -g 94 floppy
+ getent group storage >/dev/null || usr/sbin/groupadd -g 95 storage
+ getent passwd hal >/dev/null || usr/sbin/useradd -c 'HAL daemon' -u 82 -g hal -G optical,floppy,storage -d '/' -s /bin/false hal
+ usr/bin/passwd -l hal &>/dev/null
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ usr/sbin/userdel hal &>/dev/null
+ usr/sbin/groupdel hal &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/hal/ntfs3g-valid-options.patch b/abs/core/hal/ntfs3g-valid-options.patch
new file mode 100644
index 0000000..4731442
--- /dev/null
+++ b/abs/core/hal/ntfs3g-valid-options.patch
@@ -0,0 +1,11 @@
+--- fdi/policy/10osvendor/20-storage-methods.fdi.orig 2007-10-28 19:40:22.000000000 +0000
++++ fdi/policy/10osvendor/20-storage-methods.fdi 2007-10-28 19:40:58.000000000 +0000
+@@ -240,6 +240,8 @@
+ <append key="volume.mount.valid_options" type="strlist">uid=</append>
+ <append key="volume.mount.valid_options" type="strlist">gid=</append>
+ <append key="volume.mount.valid_options" type="strlist">umask=</append>
++ <append key="volume.mount.valid_options" type="strlist">dmask=</append>
++ <append key="volume.mount.valid_options" type="strlist">fmask=</append>
+ <append key="volume.mount.valid_options" type="strlist">locale=</append>
+ <append key="volume.mount.valid_options" type="strlist">utf8</append>
+ </match>
diff --git a/abs/core/hdparm/PKGBUILD b/abs/core/hdparm/PKGBUILD
new file mode 100644
index 0000000..de29521
--- /dev/null
+++ b/abs/core/hdparm/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 7862 2008-08-04 20:16:21Z tpowa $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=hdparm
+pkgver=8.9
+pkgrel=10
+pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
+arch=(i686 x86_64)
+depends=('glibc')
+groups=('base')
+source=(http://heanet.dl.sourceforge.net/sourceforge/hdparm/${pkgname}-${pkgver}.tar.gz)
+license=('BSD')
+url="http://sourceforge.net/projects/hdparm/"
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver} || return 1
+
+ # build
+ make || return 1
+
+ # install
+ mkdir -p ${startdir}/pkg/{usr,sbin} || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 contrib/idectl ${startdir}/pkg/sbin || return 1
+ install -m755 contrib/ultrabayd ${startdir}/pkg/sbin || return 1
+
+ #install license file
+ install -D -m 644 LICENSE.TXT $startdir/pkg/usr/share/licenses/hdparm/LICENSE.TXT
+
+ # installs empty /usr/share, which we let it do since it causes
+ # no harm and it might put something there someday
+}
+md5sums=('19fa013956612581af7d00907990ac84')
diff --git a/abs/core/heimdal/002_all_heimdal-no_libedit.patch b/abs/core/heimdal/002_all_heimdal-no_libedit.patch
new file mode 100644
index 0000000..7806597
--- /dev/null
+++ b/abs/core/heimdal/002_all_heimdal-no_libedit.patch
@@ -0,0 +1,10 @@
+--- cf/krb-readline.m4 2004-09-15 13:24:15.000000000 +0000
++++ cf/krb-readline.m4 2004-09-17 16:11:39.610756024 +0000
+@@ -6,7 +6,6 @@
+ dnl el_init
+
+ AC_DEFUN([KRB_READLINE],[
+-AC_FIND_FUNC_NO_LIBS(el_init, edit, [], [], [$LIB_tgetent])
+ if test "$ac_cv_func_el_init" = yes ; then
+ AC_CACHE_CHECK(for four argument el_init, ac_cv_func_el_init_four,[
+ AC_TRY_COMPILE([#include <stdio.h>
diff --git a/abs/core/heimdal/003_all_heimdal-fPIC.patch b/abs/core/heimdal/003_all_heimdal-fPIC.patch
new file mode 100644
index 0000000..ee01e34
--- /dev/null
+++ b/abs/core/heimdal/003_all_heimdal-fPIC.patch
@@ -0,0 +1,12 @@
+--- lib/editline/Makefile.am 2004-05-10 09:27:21.442490749 +0000
++++ lib/editline/Makefile.am 2004-05-10 09:27:38.876209101 +0000
+@@ -47,6 +47,9 @@
+
+ EXTRA_DIST = $(man_MANS)
+
++$(libeditline_la_OBJECTS): %.lo: %.c
++ $(LTCOMPILE) -fPIC -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
++
+ snprintf.c:
+ $(LN_S) $(srcdir)/../roken/snprintf.c .
+ strdup.c:
diff --git a/abs/core/heimdal/004_all_heimdal-rxapps.patch b/abs/core/heimdal/004_all_heimdal-rxapps.patch
new file mode 100644
index 0000000..d6142a7
--- /dev/null
+++ b/abs/core/heimdal/004_all_heimdal-rxapps.patch
@@ -0,0 +1,19 @@
+--- appl/kx/rxterm.in 2004-02-21 21:49:23.893934354 +0000
++++ appl/kx/rxterm.in 2004-02-21 21:49:34.617299076 +0000
+@@ -2,6 +2,6 @@
+ #
+ usage="Usage: $0 [-l username] [-k] [-f] [-r rsh_args] [-x xterm_args] [-K kx_args] [-w term_emulator] [-b rsh_binary][-v] [-h | --help] [--version] host"
+-binary=rsh
++binary=krsh
+ term=xterm
+ while true
+ do
+--- appl/kx/rxtelnet.in 2005-06-16 16:29:10.000000000 +0000
++++ appl/kx/rxtelnet.in 2005-07-11 20:33:10.000000000 +0000
+@@ -2,7 +2,7 @@
+ #
+ usage="Usage: $0 [-l username] [-k] [-fF] [-t args_to_telnet] [-x args_to_xterm] [-K args_to_kx] [-w term_emulator] [-b telnet_binary] [-n] [-v] [-h | --help] [--version] host [port]"
+-binary=telnet
++binary=ktelnet
+ term=
+ kx_args=-P
diff --git a/abs/core/heimdal/006_all_heimdal-suid_fix.patch b/abs/core/heimdal/006_all_heimdal-suid_fix.patch
new file mode 100644
index 0000000..0f7d281
--- /dev/null
+++ b/abs/core/heimdal/006_all_heimdal-suid_fix.patch
@@ -0,0 +1,20 @@
+--- appl/otp/Makefile.am 2004-09-17 22:22:54.046301075 +0000
++++ appl/otp/Makefile.am 2004-09-17 22:23:15.293145945 +0000
+@@ -8,6 +8,7 @@
+ bin_SUIDS = otp
+ otp_SOURCES = otp.c otp_locl.h
+ otpprint_SOURCES = otpprint.c otp_locl.h
++otp_LDFLAGS = -Wl,-z,now
+
+ man_MANS = otp.1 otpprint.1
+
+--- appl/su/Makefile.am 2005-06-16 16:27:46.000000000 +0000
++++ appl/su/Makefile.am 2005-07-11 20:34:21.000000000 +0000
+@@ -7,6 +7,7 @@
+ bin_PROGRAMS = su
+ bin_SUIDS = su
+ su_SOURCES = su.c
++su_LDFLAGS = -Wl,-z,now
+ man_MANS = su.1
+
+ LDADD = $(LIB_kafs) \
diff --git a/abs/core/heimdal/010_all_heimdal-system-libss.patch b/abs/core/heimdal/010_all_heimdal-system-libss.patch
new file mode 100644
index 0000000..5cd4d9d
--- /dev/null
+++ b/abs/core/heimdal/010_all_heimdal-system-libss.patch
@@ -0,0 +1,40 @@
+--- lib/sl/Makefile.am~ 2007-06-01 09:48:09.000000000 +0200
++++ lib/sl/Makefile.am 2007-06-01 09:49:30.000000000 +0200
+@@ -12,36 +12,24 @@
+
+ include_HEADERS = sl.h
+
+-lib_LTLIBRARIES = libsl.la libss.la
++lib_LTLIBRARIES = libsl.la
+ libsl_la_LDFLAGS = -version-info 2:0:2
+-libss_la_LDFLAGS = -version-info 1:5:1
+
+ libsl_la_LIBADD = @LIB_readline@
+-libss_la_LIBADD = @LIB_readline@ @LIB_com_err@
+
+ libsl_la_SOURCES = sl_locl.h sl.c $(ES)
+-libss_la_SOURCES = $(libsl_la_SOURCES) ss.c ss.h
+
+ TESTS = test_sl
+ check_PROGRAMS = $(TESTS)
+
+ # install these?
+
+-bin_PROGRAMS = mk_cmds
+ noinst_PROGRAMS = slc
+
+-mk_cmds_SOURCES = make_cmds.c make_cmds.h parse.y lex.l
+-mk_cmds_LDADD = libsl.la $(LDADD)
+-
+ slc_SOURCES = slc-gram.y slc-lex.l slc.h
+
+-ssincludedir = $(includedir)/ss
+-ssinclude_HEADERS = ss.h
+-
+ CLEANFILES = lex.c parse.c parse.h snprintf.c strtok_r.c strdup.c strupr.c getprogname.c
+
+-$(mk_cmds_OBJECTS): parse.h parse.c
+-
+ LDADD = \
+ libsl.la \
+ $(LIB_roken) \
diff --git a/abs/core/heimdal/PKGBUILD b/abs/core/heimdal/PKGBUILD
new file mode 100644
index 0000000..4c79af6
--- /dev/null
+++ b/abs/core/heimdal/PKGBUILD
@@ -0,0 +1,103 @@
+# $Id: PKGBUILD 3738 2008-06-30 20:03:06Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+#
+### Attention: build it 2 times - it links against itself! ###
+# ^ better remove old pkg before ;)
+
+pkgname=heimdal
+pkgver=1.2
+pkgrel=1
+pkgdesc="Heimdal Kerberos V5 libraries"
+arch=(i686 x86_64)
+url="http://www.pdc.kth.se/heimdal/"
+license=('custom')
+depends=('db>=4.7' 'openssl' 'e2fsprogs')
+options=('!libtool' '!emptydirs')
+backup=(etc/krb5.conf)
+source=(http://www.h5l.org/dist/src/heimdal-$pkgver.tar.gz \
+ 002_all_heimdal-no_libedit.patch \
+ 003_all_heimdal-fPIC.patch \
+ 004_all_heimdal-rxapps.patch \
+ #006_all_heimdal-suid_fix.patch \
+ heimdal-kdc.rc \
+ kadmind.rc \
+ kpasswd.rc)
+md5sums=('8d6b690069acd2ae8ada1315174f52f9'
+ '1199c4a4a38e9c2b2c0a99bd5781767a'
+ '3d0262aa218e1611500de735d3581e28'
+ '0fe81cb1e33b2a2e60edaf47dfdfe4de'
+ #'30372b1581e4d49a76688e450fd42443'
+ 'e59650992b9541a30dfce727a194f6e0'
+ '1f2f86a67bbfddb7af581d35fdca9627'
+ 'f8f1eca95b9d3f2b4ebf2417b71b81cf')
+
+build() {
+ [ -e /usr/lib/libasn1.so ] && echo "## remove old heimdal pkg first ##" && return 1
+
+ cd ${srcdir}/heimdal-${pkgver}
+ patch -Np0 -i ${srcdir}/002_all_heimdal-no_libedit.patch || return 1
+ patch -Np0 -i ${srcdir}/003_all_heimdal-fPIC.patch || return 1
+ patch -Np0 -i ${srcdir}/004_all_heimdal-rxapps.patch || return 1
+# patch -Np0 -i ${srcdir}/006_all_heimdal-suid_fix.patch || return 1
+
+# libtoolize -f -c || return 1
+# aclocal -I cf || return 1
+# autoheader || return 1
+# automake -a || return 1
+# autoconf || return 1
+# libtoolize -f -c || return 1
+
+# autoreconf || return 1
+# libtoolize -f -c || return 1
+
+ sed -i -e 's|var/heimdal|var/lib/heimdal|g' configure.in configure \
+ doc/setup.texi doc/heimdal.info kadmin/kadmind.8 kdc/kdc.8 \
+ lib/hdb/hdb.h lib/krb5/krb5.conf.5 lib/krb5/krb5.conf.cat5
+
+ ./configure --prefix=/usr --enable-shared=yes --without-x \
+ --sysconfdir=/etc --mandir=/usr/man \
+ --datadir=/var/lib/heimdal \
+ --localstatedir=/var/lib/heimdal \
+ --with-openssl=/usr \
+ --with-readline-lib=/usr/lib \
+ --with-readline-include=/usr/include/readline \
+ --libexecdir=/usr/sbin --with-berkeley-db \
+ --disable-krb4
+
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+
+ for i in telnetd ftpd rshd; do
+ mv ${pkgdir}/usr/man/man8/${i}.8 ${pkgdir}/usr/man/man8/k${i}.8
+ mv ${pkgdir}/usr/sbin/${i} ${pkgdir}/usr/sbin/k${i}
+ done
+
+ for i in rcp rsh telnet ftp su login; do
+ if [ -f ${pkgdir}/usr/man/man1/${i}.1 ]; then
+ mv ${pkgdir}/usr/man/man1/${i}.1 ${pkgdir}/usr/man/man1/k${i}.1
+ fi
+ mv ${pkgdir}/usr/bin/${i} ${pkgdir}/usr/bin/k${i}
+ done
+ rm -rf ${pkgdir}/usr/man/cat{1,3,5,8}
+
+ #Arch could be a KDC too
+ mkdir -p ${pkgdir}/etc/rc.d
+ install -m644 ${srcdir}/heimdal-${pkgver}/krb5.conf ${pkgdir}/etc
+ for i in heimdal-kdc kadmind kpasswd; do
+ install -m755 ${srcdir}/${i}.rc ${pkgdir}/etc/rc.d/${i}
+ done
+
+ #Remove some conflicts
+ rm ${pkgdir}/usr/man/man5/ftpusers.5*
+ rm ${pkgdir}/usr/man/man5/login.access.5*
+ # and some more
+ rm ${pkgdir}/usr/bin/mk_cmds
+ rm ${pkgdir}/usr/include/ss/ss.h
+ rm ${pkgdir}/usr/lib/libss.a
+ rm ${pkgdir}/usr/lib/libss.so
+
+ # install the license
+ install -D -m644 ${srcdir}/${pkgname}-${pkgver}/LICENSE \
+ ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/heimdal/heimdal-kdc.rc b/abs/core/heimdal/heimdal-kdc.rc
new file mode 100644
index 0000000..b2a3b5f
--- /dev/null
+++ b/abs/core/heimdal/heimdal-kdc.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kdc`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal kdc"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kdc --detach
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon heimdal-kdc
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal kdc"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon heimdal-kdc
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core/heimdal/kadmind.rc b/abs/core/heimdal/kadmind.rc
new file mode 100644
index 0000000..0f3b8c7
--- /dev/null
+++ b/abs/core/heimdal/kadmind.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kadmind`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal admin server"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kadmind &
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon kadmind
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal admin server"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon kadmind
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core/heimdal/kpasswd.rc b/abs/core/heimdal/kpasswd.rc
new file mode 100644
index 0000000..3697322
--- /dev/null
+++ b/abs/core/heimdal/kpasswd.rc
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/kpasswdd`
+case "$1" in
+ start)
+ stat_busy "Starting heimdal kpasswdd"
+ if [ -z "$PID" ]; then
+ /usr/sbin/kpasswdd &
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon kpasswd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping heimdal kpasswdd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon kpasswd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/abs/core/hwdetect/PKGBUILD b/abs/core/hwdetect/PKGBUILD
new file mode 100644
index 0000000..14fd6a9
--- /dev/null
+++ b/abs/core/hwdetect/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=hwdetect
+pkgver=0.9
+pkgrel=10
+pkgdesc="Hardware detection script with loading modules and mkinitcpio.conf / rc.conf support"
+arch=(i686 x86_64)
+license=('custom:none')
+groups=('base')
+backup=()
+depends=('sh' 'awk' 'grep' 'coreutils' 'sed')
+source=(hwdetect)
+md5sums=('bae2a26062c1ae8036b3a2173c8e3b51')
+
+build() {
+ install -D -m 755 $startdir/src/hwdetect $startdir/pkg/sbin/hwdetect
+}
+
diff --git a/abs/core/hwdetect/hwdetect b/abs/core/hwdetect/hwdetect
new file mode 100755
index 0000000..4991210
--- /dev/null
+++ b/abs/core/hwdetect/hwdetect
@@ -0,0 +1,482 @@
+#! /bin/sh
+# Autodetection script for scanning /sys for hardware
+# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+usage () {
+ echo "$0 [options]"
+ echo ""
+ echo " This is a tool that detects/lists modules that are exported by /sys"
+ echo ""
+ echo " Options:"
+ echo " --kernel_version= use kernel version (no autodetect)"
+ echo " --ide-legacy use old ide modules instead of pata"
+ echo " --load-modules load all detected modules"
+ echo " --unload-modules unload all detected modules"
+ echo " --show-modules show all detected modules"
+ echo " --show-modules-order shows load order of detected modules"
+ echo " --show-agp show AGP modules"
+ echo " --show-acpi show ACPI modules"
+ echo " --show-ide show IDE modules"
+ echo " --show-scsi show SCSI modules"
+ echo " --show-sata show SATA modules"
+ echo " --show-usb show USB modules"
+ echo " --show-fw show FIREWIRE modules"
+ echo " --show-net show NETWORK modules"
+ echo " --show-input show INPUT modules"
+ echo " --show-irda show IRDA modules"
+ echo " --show-isdn show ISDN modules"
+ echo " --show-pcmcia show PCMCIA modules"
+ echo " --show-sound show SOUND modules"
+ echo " --show-video show VIDEO modules"
+ echo " --show-other show OTHER modules"
+ echo ""
+ echo " For /etc/mkinitcpio.conf use:"
+ echo " --hostcontroller show MODULES= for all hostcontrollers"
+ echo " --vmware add BusLogic to MODULES for vmware"
+ echo ""
+ echo " --hooks show HOOKS="
+ echo " --hooks-dir use this directory for HOOKS check"
+ echo " --dsdt add dsdt to HOOKS="
+ echo " --raid add raid to HOOKS="
+ echo " --raid-partitions add raid-partitions to HOOKS="
+ echo " --encrypt add encrypt to HOOKS="
+ echo " --lvm2 add lvm2 to HOOKS="
+ echo " --keymap add keymap to HOOKS="
+ echo " --usb add usb to HOOKS="
+ echo " --fw add fw to HOOKS="
+ echo " --pcmcia add pcmcia to HOOKS="
+ echo " --nfs add net to HOOKS="
+ echo ""
+ echo " For /etc/rc.conf use:"
+ echo " --net show network MODULES"
+ echo " --sound show sound MODULES"
+ echo " --modules show all detected MODULES"
+ echo ""
+ exit 1
+}
+
+[ "$1" = "" ] && usage
+[ "$1" = "--help" ] && usage
+[ "$1" = "-h" ] && usage
+
+# setting kernel version
+case $1 in
+ --kernel_version=*)
+ KERNEL_VERSION="`echo $1 | awk -F= '{print $2;}'`"
+ ;;
+esac
+
+if [ "$KERNEL_VERSION" = "" ]; then
+ KERNEL_VERSION="`uname -r`"
+fi
+
+# IDE/PATA switch
+[ "$(echo $* | grep '\-ide-legacy')" ] && IDE_LEGACY=1
+
+# dsdt switch
+[ "$(echo $* | grep '\-dsdt')" ] && DSDT=1
+
+# raid switch
+[ "$(echo $* | grep '\-raid-partition')" ] && RAID_PARTITIONS=1
+if ! [ "$RAID_PARTITIONS" = "1" ]; then
+ [ "$(echo $* | grep '\-raid')" ] && RAID=1
+fi
+
+# encrypt switch
+[ "$(echo $* | grep '\-encrypt')" ] && ENCRYPT=1
+
+# lvm2 switch
+[ "$(echo $* | grep '\-lvm2')" ] && LVM2=1
+
+# keymap switch
+[ "$(echo $* | grep '\-keymap')" ] && KEYMAP=1
+
+# usb switch
+[ "$(echo $* | grep '\-usb')" ] && USB=1
+
+# fw switch
+[ "$(echo $* | grep '\-fw')" ] && FW=1
+
+# pcmcia switch
+[ "$(echo $* | grep '\-pcmcia')" ] && PCMCIA=1
+
+# nfs switch
+[ "$(echo $* | grep '\-nfs')" ] && NFS=1
+
+# vmware switch
+[ "$(echo $* | grep '\-vmware')" ] && VMWARE=1
+
+# checking /sys
+if ! [ -d /sys/ ]; then
+ echo "/sys/ is not present -- mount /sys first" >&2
+ exit 1
+fi
+
+: >/tmp/modules-plain
+: >/tmp/modules-stripped
+: >/tmp/modules-sorted
+: >/tmp/moduleslist
+
+# find pci aliases
+aliases=`find /sys/ -noleaf -name modalias -exec cat {} +`
+
+# check for empty aliases
+if [ "$aliases" = "" ]; then
+ echo "hwdetect aborted -- you need a kernel >= 2.6.12" >&2
+ exit 1
+fi
+
+# generate files for the different actions
+modprobe -a --set-version=$KERNEL_VERSION --show-depends $aliases >> /tmp/modules-plain 2>/dev/null
+
+# fix evdev detection
+#if [ "`echo $aliases | grep 'serio:ty06pr*[id]*[ex]*'`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends evdev >> /tmp/modules-plain 2>/dev/null
+#fi
+# fix Intel536ep detection
+#if [ "`echo $aliases | grep 'pci:v00008086d00001040sv000016BEsd00001040bc07sc80i00'`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends Intel536 >> /tmp/modules-plain 2>/dev/null
+#fi
+
+# fix ide cdrom detection on proliant 1600
+if [ "`echo $aliases | grep 'pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00'`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-generic >> /tmp/modules-plain 2>/dev/null
+fi
+
+# find PNP devices like parports, soundcards etc.
+# (workaround for rtc, pcspkr, irtty-sir and analog are included)
+if [ "`find /sys/devices -noleaf -name 'id' | grep /pnp`" ]; then
+ for i in `find /sys/devices -noleaf -name "id" | grep /pnp`; do
+ devid=`cat $i | grep PNP`
+ [ "$devid" ] || continue
+
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends pnp:d${devid} >> /tmp/modules-plain 2>/dev/null
+
+ [ "$devid" = "PNP0800" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends pcspkr 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ #[ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_proc 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_sysfs 2>/dev/null >> /tmp/modules-plain
+ [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_dev 2>/dev/null >> /tmp/modules-plain
+ [ "$devid" = "PNP0510" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNP0511" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ [ "$devid" = "PNPb02f" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends analog 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+
+ # load ppp-generic if serial ports are detected for modems
+ [ "$devid" = "PNP0501" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic 2>/dev/null >> /tmp/modules-plain 2>/dev/null
+ done
+fi
+
+# IDE disks/cdroms/floppy/tape
+#if [ "`find /proc/ide -noleaf -name 'media'`" ]; then
+# for i in $(cat `find /proc/ide -noleaf -name "media"`); do
+# case $i in
+# cdrom) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-cd >> /tmp/modules-plain 2>/dev/null ;;
+# floppy) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-floppy >> /tmp/modules-plain 2>/dev/null ;;
+# disk) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-disk >> /tmp/modules-plain 2>/dev/null ;;
+# tape) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-tape >> /tmp/modules-plain 2>/dev/null ;;
+# esac
+# done
+#fi
+
+# SCSI disks/cdroms/tapes/generic devices
+if [ "`find /sys/devices -noleaf -name 'type'`" ]; then
+ for i in $(cat `find /sys/devices -noleaf -name "type"`); do
+ case $i in (4|5) modprobe -i --set-version=$KERNEL_VERSION --show-depends sr-mod >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (2|3|6|8|9) modprobe -i --set-version=$KERNEL_VERSION --show-depends sg >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (0|7|14) modprobe -i --set-version=$KERNEL_VERSION --show-depends sd-mod >> /tmp/modules-plain 2>/dev/null ;; esac
+ case $i in (1) modprobe -i --set-version=$KERNEL_VERSION --show-depends st >> /tmp/modules-plain 2>/dev/null ;; esac
+ done
+fi
+
+# add Buslogic for vmware
+if [ "$VMWARE" = "1" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends BusLogic >> /tmp/modules-plain 2>/dev/null
+fi
+
+# Firewire disks/cdroms/network
+#if [ "`grep 'ohci1394' /tmp/modules-plain`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends sbp2 >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends eth1394 >> /tmp/modules-plain 2>/dev/null
+#fi
+
+# Modem devices
+#case $i in (Intel536|Intel537|ltmodem|ltserial|slamr|slusb) \
+# grep "$i" /tmp/modules-plain && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic >> /tmp/modules-plain 2>/dev/null ;; \
+# esac
+
+# Parport modules
+if [ "`grep 'parport' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends lp >> /tmp/modules-plain 2>/dev/null
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends ppdev >> /tmp/modules-plain 2>/dev/null
+fi
+
+# Sound OSS compat modules
+if [ "`grep 'snd-pcm' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-pcm-oss >> /tmp/modules-plain 2>/dev/null
+fi
+if [ "`grep 'snd-seq' /tmp/modules-plain`" ]; then
+ modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-seq-oss >> /tmp/modules-plain 2>/dev/null
+fi
+
+# USB modules
+#if [ "`grep 'usb/' /tmp/modules-plain`" ]; then
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usbhid >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usb-storage >> /tmp/modules-plain 2>/dev/null
+# modprobe -i --set-version=$KERNEL_VERSION --show-depends usblp >> /tmp/modules-plain 2>/dev/null
+#fi
+
+sort -u /tmp/modules-plain >> /tmp/modules-stripped
+
+# OTHER modules loading first for speed up!
+grep -v "ide/" /tmp/modules-stripped | grep -v "scsi/" | grep -v "fusion/" | grep -v "block/sx8" | grep -v "message/fusion" | \
+ grep -v "block/cciss" | grep -v "block/cpqarray" | grep -v "block/DAC960" | grep -v "ata/" | \
+ grep -v "net/" | grep -v "pcmcia/" | grep -v "usb/" | \
+ grep -v "ieee1394/" >> /tmp/modules-sorted
+# make a correct order for the modules, internal devices have priority!
+# only use old ide modules if boot parameter 'ide-legacy' is given
+if [ "$IDE_LEGACY" = "1" ]; then
+ grep "ide/" /tmp/modules-stripped >> /tmp/modules-sorted
+else
+ grep "ata/pata" /tmp/modules-stripped >> /tmp/modules-sorted
+ grep "ata/ata_generic" /tmp/modules-stripped >> /tmp/modules-sorted
+fi
+grep "scsi/" /tmp/modules-stripped | grep -v "sd_mod" | grep -v "sr_mod" | grep -v "/sg.ko" | grep -v "/st.ko" >> /tmp/modules-sorted
+grep "block/" /tmp/modules-stripped | grep -v "sx8" | grep -v "nbd" | grep -v "pktcdvd" | grep -v "floppy" >> /tmp/modules-sorted
+grep "fusion/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "ata/" /tmp/modules-stripped| grep -v "pata" | grep -v "ata_generic" | grep -v "libata" >> /tmp/modules-sorted
+grep "block/" /tmp/modules-stripped | grep "sx8" >> /tmp/modules-sorted
+grep "net/" /tmp/modules-stripped | grep -v "wireless/" | grep -v "usb/" >> /tmp/modules-sorted
+grep "wireless/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "pcmcia/" /tmp/modules-stripped >> /tmp/modules-sorted
+
+# speed up usb module loading
+grep "usb-storage" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usblp" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usbhid" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "usb/" /tmp/modules-stripped | grep -v "usb-storage" | grep -v "usbhid" | grep -v "usblp" >> /tmp/modules-sorted
+grep "firewire/" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "ieee1394/" /tmp/modules-stripped >> /tmp/modules-sorted
+
+# add scsi device modules at the end
+grep "sd_mod" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "sr_mod" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "/st.ko" /tmp/modules-stripped >> /tmp/modules-sorted
+grep "/sg.ko" /tmp/modules-stripped >> /tmp/modules-sorted
+
+
+sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" /tmp/modules-sorted >> /tmp/moduleslist
+
+# blacklist framebuffer modules
+for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*/*fb*); do
+ BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)"
+done
+for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*fb*); do
+ BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)"
+done
+# delete modules that are blacklisted
+BLACKLIST="${BLACKLIST} $(echo ${disablemodules} | sed 's|-|_|g' | sed 's|,| |g')"
+for i in $BLACKLIST; do
+ [ "$i" ] || continue
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ # since '-' and '_' are interchangeable, we have to cover both
+ if [ "`echo $i | grep '-'`" ]; then
+ i="`echo $i | sed 's|-|_|g'`"
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ elif [ "`echo $i | grep '_'`" ]; then
+ i="`echo $i | sed 's|_|-|g'`"
+ sed -i -e "/^$i$/d" /tmp/moduleslist
+ fi
+done
+
+listmods() {
+ key=$1 ; shift
+ ex=
+ while [ "$1" ]; do
+ [ "$ex" ] && ex="$ex|$1" || ex="$1"
+ shift
+ done
+ for ln in `grep "$key" /tmp/modules-sorted | sed 's|^insmod ||g'`; do
+ if [ "$ex" ]; then
+ echo $ln | egrep -v "$ex" | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p"
+ else
+ echo $ln | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p"
+ fi
+ done
+}
+showlist() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ echo -n "$cat: "
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+showlist2() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ echo -n "$cat="
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+showlist3() {
+ cat=$1 ; shift
+ [ $# -gt 0 ] || return
+ for i in $*; do echo -n "$i "; done
+ echo ""
+}
+
+# starting different actions
+while [ $# -gt 0 ]; do
+ case $1 in
+ -hooks-dir=*|--hooks-dir=*)
+ HOOKS_DIR="$(echo $1 | awk -F= '{print $2;}')"
+ ;;
+ --load-modules)
+ # load all detected pci modules
+ for i in `cat /tmp/moduleslist`; do
+ modprobe $i > /dev/null 2>&1
+ done
+ ;;
+
+ --unload-modules)
+ # load all detected pci modules
+ for i in `cat /tmp/moduleslist`; do
+ modprobe -r $i > /dev/null 2>&1
+ done
+ ;;
+
+ --show-modules)
+ showlist "AGP " `listmods agp/`
+ showlist "ACPI " `listmods acpi/`
+ showlist "IDE " `listmods ide/`
+ showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic`
+ showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy`
+ showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8`
+ showlist "USB " `listmods usb/ usb/input`
+ showlist "FW " `listmods firewire/` `listmods ieee1394/`
+ showlist "NET " `listmods net/ irda/`
+ showlist "INPUT " `listmods input/` `listmods hid/`
+ showlist "IRDA " `listmods irda/`
+ showlist "ISDN " `listmods isdn/`
+ showlist "PCMCIA " `listmods pcmcia/`
+ showlist "SOUND " `listmods sound/`
+ showlist "VIDEO " `listmods video/`
+ showlist "OTHER " `listmods modules/ agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/`
+ ;;
+
+ --show-modules-order)
+ showlist "MODULES ORDER" `listmods modules/`
+ ;;
+
+ --show-agp) showlist "AGP " `listmods agp/` ;;
+ --show-acpi) showlist "ACPI " `listmods acpi/` ;;
+ --show-ide) showlist "IDE " `listmods ide/` ;;
+ --show-pata) showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic`;;
+ --show-scsi) showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy`;;
+ --show-sata) showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8` ;;
+ --show-usb) showlist "USB " `listmods usb/ usb/input` ;;
+ --show-fw) showlist "FW " `listmods firewire/` `listmods ieee1394/` ;;
+ --show-net) showlist "NET " `listmods net/ irda/` ;;
+ --show-input) showlist "INPUT " `listmods input/` `listmods hid/` ;;
+ --show-irda) showlist "IRDA " `listmods irda/` ;;
+ --show-isdn) showlist "ISDN " `listmods isdn/` ;;
+ --show-pcmcia) showlist "PCMCIA " `listmods pcmcia/` ;;
+ --show-sound) showlist "SOUND " `listmods sound/` ;;
+ --show-video) showlist "VIDEO " `listmods video/` ;;
+ --show-other) showlist "OTHER " `listmods .ko agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/` ;;
+ --hostcontroller) showlist2 "MODULES" \"`listmods ide/pci` `listmods ata/pata` `listmods ata/ata_generic` `listmods scsi/ /sg.ko /st.ko sr_mod sd_mod` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy` `listmods ata/ pata ata_generic` `listmods drivers/block/sx8`\" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g'
+ ;;
+ --net) if [ "$(showlist2 "MODULES" \(`listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' | grep '8139cp')" ] ; then
+ if [ "$(dmesg | grep '"8139too"')" ]; then
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139cp//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ else
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139too//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ fi
+ else
+ MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ fi
+ ;;
+ --sound) MODULES_EXPORTED="$MODULES_EXPORTED $(listmods sound/)"
+ showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ ;;
+ --modules) showlist2 "MODULES" \(`listmods modules/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g'
+ ;;
+ --hooks)
+ if [ "$HOOKS_DIR" = "" ]; then
+ HOOKS_DIR="/lib/initcpio/install"
+ fi
+ START_HOOKS="base udev dsdt autodetect ide pata scsi sata usb fw pcmcia net raid raid-partitions usbinput keymap encrypt lvm2 filesystems"
+ # remove the ones that don't exist on the system
+ for i in ${START_HOOKS}; do
+ if ! [ -e "${HOOKS_DIR}/$i" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/${i}\ //g")
+ fi
+ done
+ # ide/pata check
+ if [ "${IDE_LEGACY}" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/pata//g")
+ else
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/ide//g")
+ fi
+ # usbinput, check for usbhid
+ if ! [ "$(cat /proc/modules | grep usbhid)" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/usbinput//g")
+ fi
+ # keymap, check rc.conf for KEYMAP="us"
+ if [ "$(grep '^KEYMAP="us"' /etc/rc.conf)" ]; then
+ if ! [ "${KEYMAP}" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/keymap//g")
+ fi
+ fi
+ ### TODO raid, check for presence of md devices in /dev
+ #if ! [ "$(ls /dev/md* > /dev/null 2>&1 )" ]; then
+ # START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid//g")
+ #fi
+ if ! [ "$RAID" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid\ //g")
+ fi
+ if ! [ "$RAID_PARTITIONS" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid-partitions\ //g")
+ fi
+ ### TODO lvm2, encrypt check
+ # encrypt, check for presence of mapper/root
+ #if ! [ "$(ls /dev/mapper/root > /dev/null 2>&1 )" ]; then
+ # START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g")
+ #fi
+ if ! [ "$ENCRYPT" = "1" ] ; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g")
+ fi
+ if ! [ "$LVM2" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/lvm2//g")
+ fi
+ if ! [ "$USB" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/usb\ //g")
+ fi
+ if ! [ "$FW" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/fw//g")
+ fi
+ if ! [ "$PCMCIA" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/pcmcia//g")
+ fi
+ if ! [ "$NFS" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/net//g")
+ fi
+ if ! [ "$DSDT" = "1" ]; then
+ START_HOOKS=$(echo $START_HOOKS | sed -e "s/dsdt//g")
+ fi
+ echo "HOOKS=\"$START_HOOKS\"" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g'
+ ;;
+ esac
+ shift
+done
+
+# cleanup
+rm /tmp/modules-plain
+rm /tmp/modules-sorted
+rm /tmp/modules-stripped
+rm /tmp/moduleslist
+
+# vim: set ts=2 sw=2 noet:
diff --git a/abs/core/imagemagick/ChangeLog b/abs/core/imagemagick/ChangeLog
new file mode 100644
index 0000000..8b3a5fb
--- /dev/null
+++ b/abs/core/imagemagick/ChangeLog
@@ -0,0 +1,44 @@
+2008-08-19 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.10-1
+ * Upstream update
+
+2008-08-11 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.7-1
+ * Upstream update
+ * Added bzip2 and libxml2 depends
+ * Disabled docs
+
+2008-07-18 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.4-1
+ * Upstream update
+
+2008-06-23 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.2.1-1
+ * Upstream update
+ * Fixed linking problem (close FS#10574)
+
+2008-05-19 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.1.3-1
+ * Upstream update
+
+2008-04-30 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.1.0-1
+ * Upstream update
+
+2008-04-24 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.0.9-1
+ * Upstream update
+
+2008-03-29 Eric Belanger <eric@archlinux.org>
+
+ * imagemagick 6.4.0.2-1
+ * Upstream update
+ * Added dvips to delegates list for dvi support (close FS#8914)
+ * Added ChangeLog
diff --git a/abs/core/imagemagick/PKGBUILD b/abs/core/imagemagick/PKGBUILD
new file mode 100644
index 0000000..79555bf
--- /dev/null
+++ b/abs/core/imagemagick/PKGBUILD
@@ -0,0 +1,56 @@
+# $Id: PKGBUILD 9867 2008-08-20 05:56:48Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+
+# NOTE: ImageMagick builds against an existing installation
+# uninstall ImageMagick before building, or build it, install it, build it.
+
+# NOTE 2: To circumvent linking problems (FS#10574), this package must now be built the following way:
+# install old package, build new package, install new package, rebuild
+
+pkgname=imagemagick
+pkgver=6.4.2.10
+pkgrel=1
+pkgdesc="An image viewing/manipulation program"
+arch=('i686' 'x86_64')
+url="http://www.imagemagick.org/"
+license=('custom')
+depends=('lcms' 'libwmf' 'librsvg' 'libxt' 'gcc-libs' 'ghostscript' 'openexr' 'libtool>=2.2' 'bzip2' 'libxml2')
+#makedepends=('ghostscript' 'openexr')
+options=('!makeflags' '!docs')
+source=(ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-${pkgver%.*}-${pkgver##*.}.tar.bz2 \
+ libpng_mmx_patch_x86_64.patch add_delegate.patch)
+md5sums=('f60ae313a2cc2fcc980543165e7ebaf4' '069980fc2590c02aed86420996259302'\
+ '7f5851c4450b73d52df55c7e806cc316')
+sha1sums=('0c45712a07b0d337ac4130c3ad605566d013ea3f'
+ 'e42f3acbe85b6098af75c5cecc9a254baaa0482c'
+ '19b40dcbc5bf8efb8ce7190fed17e2921de32ea5')
+
+build() {
+ cd ${srcdir}/ImageMagick-${pkgver%.*}
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ patch -Np1 < ../libpng_mmx_patch_x86_64.patch || return 1
+ fi
+
+ patch -p0 < ../add_delegate.patch || return 1
+
+ #LIBS=-lMagickWand ./configure --prefix=/usr --without-modules --disable-static --disable-openmp \
+ ./configure --prefix=/usr --without-modules --disable-static --disable-openmp \
+ --with-x --with-wmf --with-openexr \
+ --with-gslib --with-gs-font-dir=/usr/share/fonts/Type1 \
+ --with-perl --with-perl-options="INSTALLDIRS=vendor" \
+ --without-gvc --without-djvu --without-jp2 \
+ --without-fpx --without-dps || return 1
+
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -D -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+ install -D -m644 NOTICE ${pkgdir}/usr/share/licenses/${pkgname}/NOTICE || return 1
+
+ #Cleaning
+ find ${pkgdir} -name '*.bs' -exec rm {} \; || return 1
+ find ${pkgdir} -name '.packlist' -exec rm {} \; || return 1
+ find ${pkgdir} -name 'perllocal.pod' -exec rm {} \; || return 1
+
+ rm -f ${pkgdir}/usr/lib/*.la || return 1
+}
diff --git a/abs/core/imagemagick/add_delegate.patch b/abs/core/imagemagick/add_delegate.patch
new file mode 100644
index 0000000..6ba6009
--- /dev/null
+++ b/abs/core/imagemagick/add_delegate.patch
@@ -0,0 +1,8 @@
+--- config/delegates.xml.in.orig 2008-03-29 23:25:03.000000000 -0400
++++ config/delegates.xml.in 2008-03-29 23:27:35.000000000 -0400
+@@ -103,4 +103,5 @@
+ <delegate decode="xps:color" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSColorDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
+ <delegate decode="xps:cmyk" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSCMYKDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
+ <delegate decode="xps:mono" stealth="True" command="&quot;@XPSDelegate@&quot; -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 &quot;-sDEVICE=@XPSMonoDevice@&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
++ <delegate decode="dvi" command="&quot;dvips&quot; -q -o &quot;%o&quot; &quot;%i&quot;"/>
+ </delegatemap>
diff --git a/abs/core/imagemagick/libpng_mmx_patch_x86_64.patch b/abs/core/imagemagick/libpng_mmx_patch_x86_64.patch
new file mode 100644
index 0000000..d86449a
--- /dev/null
+++ b/abs/core/imagemagick/libpng_mmx_patch_x86_64.patch
@@ -0,0 +1,12 @@
+diff -Naur ImageMagick-6.2.7.orig/coders/png.c ImageMagick-6.2.7/coders/png.c
+--- ImageMagick-6.2.7.orig/coders/png.c 2006-05-21 12:35:55.784852536 +0200
++++ ImageMagick-6.2.7/coders/png.c 2006-05-21 12:36:50.698504392 +0200
+@@ -164,6 +164,8 @@
+ #define PNG_MAX_UINT (png_uint_32) 0x7fffffffL
+ #endif
+
++#undef PNG_ASSEMBLER_CODE_SUPPORTED
++
+ /*
+ Constant strings for known chunk types. If you need to add a chunk,
+ add a string holding the name here. To make the code more
diff --git a/abs/core/imlib2/PKGBUILD b/abs/core/imlib2/PKGBUILD
new file mode 100644
index 0000000..1fd9f74
--- /dev/null
+++ b/abs/core/imlib2/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 2921 2008-06-15 20:14:02Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=imlib2
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="Imlib2 is the successor to Imlib. It is NOT a newer version -- Imlib 2 can be installed alongside Imlib 1.x"
+arch=(i686 x86_64)
+url="http://sourceforge.net/projects/enlightenment"
+license=('BSD')
+depends=('libtiff' 'giflib' 'bzip2' 'freetype2' 'libxext' 'libpng' 'libid3tag')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/enlightenment/$pkgname-$pkgver.tar.gz)
+md5sums=('16a3d885e523303be794282c0ed90841')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # Enable x86 MMX optimizations for i686 (32-bit assembler code not compatible with x86_64)
+ [ "${CARCH}" = "i686" ] && EXTRAOPTS="--disable-mmx"
+ # Disable AMD64 optimizations due to bug in assembler code
+ [ "${CARCH}" = "x86_64" ] && EXTRAOPTS="--disable-amd64"
+
+ ./configure --prefix=/usr --sysconfdir=/etc/imlib2 --x-libraries=/usr/lib $EXTRAOPTS
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/LICENSE.txt
+}
diff --git a/abs/core/initscripts/ChangeLog b/abs/core/initscripts/ChangeLog
new file mode 100644
index 0000000..1ba9dc8
--- /dev/null
+++ b/abs/core/initscripts/ChangeLog
@@ -0,0 +1,2083 @@
+commit d2ae38c8b06d057c7593b7ba836bf24a1f8f6c4f
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Aug 5 14:34:53 2008 -0400
+
+ Set kbd_mode on all virtual consoles
+
+ Previous behavior only set the mode for vc0.
+ See FS#11093
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b7d66decca5117aaba3b73d2eccb97594ef1ea98
+Author: Daniel Kaminski <maniel.rulez@gmail.com>
+Date: Tue Jul 22 17:50:02 2008 -0400
+
+ ipv6 over ipv4 tunneling support in /etc/rc.d/network
+
+ This is done by checking the route config for a double colon
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 04899c1b829f1a4708a04e2188b256901845770f
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Jul 18 11:47:22 2008 -0400
+
+ Remount filesystems RO if umounting fails
+
+ Just a safeguard, suggested by FS#10947
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit e13ee23fd2d0035150d178fc683079696fb446fc
+Author: James Rayner <james@archlinux.org>
+Date: Mon Jul 14 21:24:33 2008 +1000
+
+ Add some useful error messages to wireless code
+
+ Additionally add optional WIRELESS_TIMEOUT parameter
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 84f76aafc5f6d7f3d2c2141d2930e42dcb82def0
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Jun 30 12:35:21 2008 -0400
+
+ Decouple ISO release name from initscripts
+
+ This should aleviate some gripes
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9dcd7a9fed510dacd14e4cf4497e73a98f847fac
+Author: Natanael Copa <natanael.copa@gmail.com>
+Date: Fri Jun 20 13:46:10 2008 -0400
+
+ Minor simplication for /etc/rc.d/functions.d/
+
+ Trivial simplification to make code more readable.
+ Removes one fork so booting should be "faster". Probably not mesureable
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit fa73767d19ea505ec32533b8856122968207db2f
+Author: Anton Fiuman <llexiw@gmail.com>
+Date: Sun May 25 00:55:56 2008 +0200
+
+ Allow users to ovverride daemon start and stop in rc.multi and rc.shutdown
+
+ Signed-off-by: Anton Fiuman <llexiw@gmail.com>
+
+commit 63db98c2a8e256f9219c5c6501b40846040bf089
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu May 22 13:02:55 2008 -0400
+
+ Remove source_functions in favor of always sourcing the dir
+
+ This is an obvious oversight on my part - this change allows
+ the overridden functions to work in daemon scripts and
+ anything else that uses /etc/rc.d/functions by itself.
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit de031161e02772aaeaefed1398f8ad59621bd8bc
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Wed May 14 13:49:16 2008 +0200
+
+ Fix commit 521d7678cecb3018923f7c869bc8a5f74dc29268, this makes more sense
+
+commit af36e8dd3c025d7593bda4f310612989927149d1
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 13 18:32:43 2008 +0200
+
+ Always quote $TIMEZONE to fix FS#10178
+
+commit 521d7678cecb3018923f7c869bc8a5f74dc29268
+Author: Pierre Schmitz <pierre@archlinux.de>
+Date: Sat Apr 12 13:37:22 2008 +0200
+
+ fixing udev hotplugging Some devices like scanners do not work with recent udev/initscript changes. This patch seems to fix such issues.
+
+commit 42c5f304ad361fd9e16d08a5230043e47437c399
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Tue Apr 8 20:12:55 2008 +0200
+
+ Just some whitespace fixes
+
+commit 391cfa71285cfca49aed0d6d2a05c9a949cb9857
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Apr 7 15:33:20 2008 +0200
+
+ Remove setterm screen blanking from rc.sysinit
+ Contrary to what one may think, screen blanking not only affects the
+ console, but also the X server. This line may lead to unwanted blank screens
+ although one has DPMS disabled in X. Furthermore, it adds a hardcoded,
+ non-configurable default setting to Arch.
+ This should either be made configurable (but IMO, we don't need more stuff
+ in rc.conf) or added to rc.local by the user if needed. As this is a
+ one-liner, the second solution sounds good to me.
+
+commit a58228bfe3764008ecf971d420fb7fa0bb704b54
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:37:17 2008 +0200
+
+ Remove extra newline from udev status output
+
+commit 307c850a0c345a092a21fff50da2f0658c3c03c4
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:30:48 2008 +0200
+
+ Remove the "interface is already up" check from ifup
+ As stated in commit f589387f0b9ef56de8ab30f50a3c562e010baeeb, even an
+ interface that is 'UP' may need configuring. However, the check introduced
+ in this commit is nonsense (causing bug #9960, possibly others). The best
+ idea is to remove the check altogether: This may cause duplicate dhcpcd
+ processes to run (should be fixed), but otherwise ensures the interface is
+ brought up when it should be.
+
+commit 89355a468670983476d29b415c12e097d5d79ca5
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 23:20:37 2008 +0200
+
+ Fix USEDIRECTISA in rc.shutdown as well
+
+commit b55845f7d0e3c81f1936d471370dcb40822463b0
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:55:23 2008 +0200
+
+ Remove old initrd hacks
+ We haven't been using initrd for a while, so these hacks are unnecessary.
+ The "encrypted root device hack" was obsoleted by proper udev rules long
+ ago. The code to umount and free the initrd is not critical, so if somebody
+ insists on using initrd, it can be done in rc.local.
+
+commit 4c493ec5599b1a30dadc51567e2546a63feb87ef
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:50:57 2008 +0200
+
+ Make USEDIRECTISA default to no, which is a sane default according to hwlock's manpage. This is contrary to the behaviour in older initscripts.
+
+commit 4a4cb51a138d73753bb967c27a9f7ea8bf9f88b3
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:48:22 2008 +0200
+
+ Move /sys mounting to the beginning, together with /proc and /dev and clean up some comments
+
+commit f3e064ec822b3dae191e1ae5d2bb921a970af86e
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Apr 6 15:40:08 2008 +0200
+
+ Remove any special handling of usbfs from rc.sysinit
+ libusb has migrated to /dev/bus/usb, which is managed by udev and thus more
+ flexible. Some legacy applications (like VirtualBox) still use it. However,
+ since users need special permissions to access usbfs, they have to be
+ specified via mount options in fstab. So there are two cases:
+ 1) a user does not need usbfs
+ 2) a user needs it, but must add it to fstab to force the right permissions
+ Our old special handling in rc.sysinit is thus obsolete (and it was ugly
+ anyway).
+
+commit 5386d7332dd77ecf4113dfc10773b529f583e797
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Mar 19 11:12:19 2008 +0200
+
+ Use actual device number for creating /dev/misc/rtc0
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 6e37620983c107e13120d1e249a37b3be6d0b12d
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Tue Mar 18 22:43:38 2008 +0200
+
+ Do not try to create /dev/pts and /dev/shm twice
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit a71b075e90154073e3ba331de9b74b8bc088ec45
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Mar 18 12:33:24 2008 -0500
+
+ Fix a directory typo
+
+ Looks like a 'bin/' slipped in there somewhere. Whoops
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 52a6990bc7ab0b48d6d227a8dcb782cb1d419dd5
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Mar 17 11:34:12 2008 -0500
+
+ Variable expansion quoting
+
+ This was missed, and caused some gross output if a user
+ mistakenly had a space in their timezone (we should fail
+ gracefully here, not let bash error).
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 15647a9f42a00406ec1c1c02515fe1e90825bd9b
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Tue Mar 11 00:02:22 2008 +0200
+
+ Remove the 'makedevs' script
+
+ * last touched somewhere in 2005
+ * not used by anything
+ * sits in /sbin but uses software from /usr/bin
+ * makedev in Extra exists
+ * if one wants a static /dev - just use mknod
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 12ee0a4fe0108fe952dc31c5f42648037b9c5cde
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Mon Mar 10 17:58:48 2008 +0200
+
+ Fix a typo in /dev/rtc creation steps
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 7526db5d0405188fee94d16fbcfbdf13a17e6a45
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Mar 9 17:22:11 2008 +0200
+
+ More full-path fixes
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 2c9681f461a0cde98a88de65e232369df68ed859
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 20:02:09 2008 +0200
+
+ Add basic support for dependencies in rc.d scripts
+
+ Example of use:
+ DEPENDS=('dbus' 'acpid')
+ . . .
+ ck_depends ${DEPENDS[@]}
+ and those daemons will be started if not running already
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 45e331302268490cfb532ea6fe827cba1351ec5b
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 19:22:48 2008 +0200
+
+ Use full path to binaries everywhere
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 6214a05ea023b8bc3014d8032af18b2404276d00
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 18:45:24 2008 +0200
+
+ Create /dev/rtc before running hwclock (FS#9636)
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 973c1b65ad9fb92c6a0e017a7b8bfb40c38b3bcd
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 8 19:28:08 2008 +0200
+
+ Fix indentation in rc.d/functions
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 646862aa989d82c35d267d5771c6cc620275bf4c
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Mar 7 14:35:31 2008 -0600
+
+ Additional /dev/ setup that udev doesn't do
+
+ These nodes are not covered by default udev, so lets make
+ sure they're added properly.
+
+ Ref: FS#9726
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit abe6dcb83d16c6e40fed99c202085c78cb356fa1
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Fri Mar 7 14:34:26 2008 -0600
+
+ Add my name to the copyright output
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 91b86efedd70e6b83232057fbf2b089a47b76333
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Mar 6 00:24:20 2008 +0200
+
+ Revert back to not loading defkeymap
+
+ * There is a patch for the kernel now, so no need to workaround the bug
+ * Add a missing check for an empty KEYMAP
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 56fffa9954db654c1731e07f753c3de105896455
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Mar 2 16:31:34 2008 +0200
+
+ Always load defkeymap
+
+ It seems that there's a bug in the kernel 2.6.24,
+ which makes the built-in defkeymap to produce incorrect composite chars.
+ Thus keymaps that don't have 'include "compose.latin1"' have issues (FS#9593).
+ While it is better to fix this bug in kernel and all affected keymaps
+ loading defkeymaps before other keymaps seems to not hurt anyway.
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit f94f52e5ab877ffc3160d0bf20c70be9865d45b2
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 1 00:40:02 2008 +0200
+
+ Set up vc/0 as well
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 1b5eeefa5a859a9c26a717603bd4c0e9fb74de82
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sat Mar 1 00:04:01 2008 +0200
+
+ Do not mount /proc/bus/usb if commented in fstab
+
+ Fixes FS#9451
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 4d0920ede7ce9c3d67e03c67b9ee584cf1a3fe9d
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 28 13:55:41 2008 +0200
+
+ Make non-UTF-8 consoles work correctly in .24+ kernels
+
+ * Since 2.6.24 the virtual terminal is in UTF-8 mode
+ and the keyboard is in Unicode mode by default,
+ and configurable only at run-time.
+
+ * To make non-UTF-8 consoles work correctly:
+ - the non-UTF-8 mode is set for the virtual terminal,
+ - the XLATE mode is set for the keyboard.
+
+ * UTF-8 mode is still set explicitly (not relying on default),
+ so console works correctly even in a case when user set vt.default_utf8=0
+ in kernel commandline, but LOCALE in rc.conf is *.UTF-8.
+
+ * % is a special symbol for printf, so it should be written twice.
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit ef86e38e9fd750db35e23aa949aa60e4c9f60f0c
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 21 18:07:44 2008 +0200
+
+ Remove trailing whitespaces and do some little reformatting
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit bb639b33167e13602aacf34bab6032992e7b3d6a
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Wed Feb 20 23:46:57 2008 -0600
+
+ Add some udev stats output
+
+ So we can see timing and all that jazz
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit e658f681e1d36a75b527d182ce28ee0781ed4492
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 20:16:49 2008 -0600
+
+ rc.shutdown: Fix hwclock double calls
+
+ Commit 9673449ac0af77751eab62423114f27e7dbc497c added --directisa
+ configuration to rc.shutdown, but didn't remove the old hwclock calls and
+ instead just added a second call. Remove the original calls.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit e16e2d17c97f91cdb9eda0ad3525ee7977ad40a6
+Merge: 626037f... fbb8d26...
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 19:56:02 2008 -0600
+
+ Merge branch 'posix' into working
+
+commit 626037f6043596f21511b76b088dca86fc079f42
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Feb 14 19:53:03 2008 -0600
+
+ functions:source_functions(): don't fail on empty dir
+
+ Instead of using globbing which will fail on an empty directory, use an ls
+ call similar to other places in the initscripts which is not prone to
+ failure. (See rc.single in the daemon shutdown for example.)
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit fbb8d26a81dc220d7795be871e09c89fd0e03a76
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:30:05 2007 -0600
+
+ Remove echo -e usage from rc.sysinit
+
+ Use the always available (in sh) printf method instead.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit 7b6fddfb12106c9485a9ceb8fa1876a501d1f181
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:23:02 2007 -0600
+
+ Remove some bashisms from network, even though we cannot convert it
+
+ Since netfs and network source rc.conf, we cannot fully convert it to an sh
+ script. However, we can get rid of a few things that are not sh compatible.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit e3985084056bb80c886ea649674c3da5b906ccab
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:18:26 2007 -0600
+
+ Make install.sh sh compatible
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit 980791fd888b6efff6319c77363aab473166ca6b
+Author: Dan McGee <dan@archlinux.org>
+Date: Fri Nov 30 09:17:15 2007 -0600
+
+ Make functions sh compatible
+
+ There is no reason to use bashisms in functions, so eliminate any and use
+ printf instead of echo options which are not guaranteed to be implemented in
+ a POSIX sh.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit dc4cee8f5987098a07a8b272573424b599a52598
+Author: Dan McGee <dan@archlinux.org>
+Date: Sat Nov 17 12:03:59 2007 -0600
+
+ Don't assume sh == bash
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit ccc90d4d211a61a21c835c1e51c807ddd485a136
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Thu Feb 14 14:51:40 2008 -0600
+
+ Add support for (un)mounting nfs4
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9673449ac0af77751eab62423114f27e7dbc497c
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Jan 23 17:46:03 2008 -0600
+
+ Use --directisa configuration in rc.shutdown as well
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit f589387f0b9ef56de8ab30f50a3c562e010baeeb
+Author: Loic Nageleisen <lloeki@gmail.com>
+Date: Tue Jan 8 09:14:42 2008 -0600
+
+ Enhance interface 'up' state checking
+
+ Using the 'UP' state to imply operational status is wrong and even if a
+ device is 'UP' we may still need to run ifconfig/dhcp
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9e341d31cd15172941268412d258c38591ff4988
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 09:09:46 2008 -0600
+
+ network script logic cleanups/enhancements
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 7719cd7c0ac6d3f316ed8595becf29ef418d9af9
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 09:07:05 2008 -0600
+
+ Remove the hotplug functionality from the network script
+
+ Hotplug hasn't been supported in Arch for ages
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit c2d7f40b2e0837f5544e6e2bfc22dc12e994ed16
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 03:35:05 2008 -0600
+
+ Create some basic device nodes on initialization
+
+ We need, at the very least, these three device nodes
+ (null, console, and zero) created before we get udev
+ up and running
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit cd0b3911131ee0eddc32c5e3992036c2e769948f
+Author: Jonathan Frazier <eyeswide@gmail.com>
+Date: Tue Jan 8 03:26:12 2008 -0600
+
+ minilogd cleanup and warning fixes
+
+ gcc gives a warning about signed/unsigned ints, and it tries to write to
+ syslog's /dev/log with a dgram socket which gives an EPROTOCOL error.
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9bf2014b750579d9720c13c9dfb9d358e0c27665
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Tue Jan 8 03:06:56 2008 -0600
+
+ Allow --directisa configuration for hwclock calls
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit ab5595c4f8cdea8e6b1813701828576cbfee2fc2
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:32:12 2007 -0600
+
+ Deprecate MOD_BLACKLIST via some comments
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 2694f1224dfb5b5c734a781fc813e639139feb39
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:19:56 2007 -0600
+
+ Mount our ram /dev as soon as possible
+
+ On readonly root systems, lots of fdup calls fail on device nodes, for
+ instance in minilogd. So we'll mount /dev as early as we can
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 25811badce84cd157a8b66c84e78f931cad1d129
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Thu Dec 20 12:15:26 2007 -0600
+
+ Set hwclock *before* udev is loaded
+
+ This prevents /dev/ timestamps from being 'in the future' when the hwclock
+ is not in UTC.
+
+ Closes FS#8665
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b82f9d580d1ab70e78de4c81c180c5a308bd1238
+Author: James Rayner <james@archlinux.org>
+Date: Thu Dec 20 10:53:25 2007 -0600
+
+ Tidy up rc.conf
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit a4a35bda6ef3fd3e444e90ab362369f0b1f511dc
+Author: Simo Leone <simo@archlinux.org>
+Date: Thu Dec 20 01:30:59 2007 -0600
+
+ Make the background black on all status text
+
+ This is the easiest way to cleanup the script output on white terminals
+ without resorting to shutting off color.
+
+ It won't make everyone happy, though.
+
+ Ref: FS#1186
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 5ccb8edb591213e03fc3909aa7db7242b9f54b30
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Dec 17 16:16:38 2007 -0600
+
+ Modify comment above MOD_AUTOLOAD to indicate that it autoloads
+
+ Some people thought the comment was unclear
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 20d6e1081ec7105207c01e9d8d2a58bb4a145331
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Mon Dec 17 16:08:05 2007 -0600
+
+ Save dmesg output at the end of the boot process
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 9d86b8814583509069ad6707688e2b41fc0d292f
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Wed Dec 12 10:28:37 2007 -0600
+
+ Fix FS#8843 (no colors in rc.sysinit output with separate /usr)
+
+ when tput returns exit code 3 - assume it output '8'
+ (as written in the /usr/share/terminfo/l/linux file)
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+ Converted to if/elsif form
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 662a52c15343338e9d843c6f70d39acefd3a2c4c
+Author: Dan McGee <dan@archlinux.org>
+Date: Sun Nov 18 11:47:54 2007 -0600
+
+ Move start_udev actions to rc.sysinit
+
+ start_udev has been deprecated upstream for some time. We shouldn't use
+ some hacked up version of it either.
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b1d0ec7cb6e8cea9f2fd7b0c11a0b607467615bd
+Author: James Rayner <james@archlinux.org>
+Date: Sat Nov 10 13:26:39 2007 +1100
+
+ Removing netcfg from initscripts
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit b8e558d5784c8054a91dcefd8495b739a664dbae
+Author: Aaron Griffin <aaronmgriffin@gmail.com>
+Date: Wed Nov 28 14:47:09 2007 -0600
+
+ Source /etc/rc.d/functions.d/ for additional initscript functions
+
+ Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
+
+commit 57879c6d6c51918b8106142e70643b53a9a8c7da
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Fri Nov 9 16:47:44 2007 +0200
+
+ Improve error handling and allow multiple keymaps to be loaded
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 9af6022b841c84283a061d6a7a5be943057ac3ae
+Author: Dan McGee <dan@archlinux.org>
+Date: Sun Oct 21 20:29:16 2007 -0500
+
+ Add a few more comments and examples to inittab
+
+ Signed-off-by: Dan McGee <dan@archlinux.org>
+
+commit c5cffb501763c355299e593d16089fa5e56097b2
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 18:51:51 2007 +0200
+
+ Fix broken terminal detection, disable colors when the terminal is unknown.
+
+commit e3f7fc94d40e13f65e00adb3d7c48fb6f790c7d7
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Oct 21 16:39:24 2007 +0300
+
+ make non-ASCII chars work before login too
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit bbc2f945cb5df2ff103759ccb6de5183a87487b7
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 15:11:20 2007 +0200
+
+ yes, I fixed a trailing whitespace
+
+commit 59f89b4a25fbc100551a814f5bcf81aa05b6c2e7
+Author: Roman Kyrylych <roman@archlinux.org>
+Date: Sun Oct 21 15:24:57 2007 +0300
+
+ Fix locale handling
+
+ Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+
+commit 956e12f7f57a38ed382032d361ac22196d015170
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:45:43 2007 +0200
+
+ change install.sh to exit on failure with return code 1
+
+commit 7d018e6ba90b1b006068502f443b69e258795061
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:40:50 2007 +0200
+
+ Added install script
+
+commit affd2bf9f3f84d507ab4c4a9998b4d1c2697300c
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:31:45 2007 +0200
+
+ Make daemon shutdown fix more consistent with the other init scripts and simplify it a bit
+
+commit 1b8636ed76e4bf5ef23c3b357e991c66e18714c5
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 11:06:07 2007 +0200
+
+ fixing second part of #6959
+
+commit bc1b5289228e74641a61cff3bb8b3751713dcf54
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:53:28 2007 +0200
+
+ replace all remaining backticks with $(...)
+
+commit 1828938d4406d5a95b7c89828f61600f9e6975a6
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:41:21 2007 +0200
+
+ fix the utf8 activating code: there are 63 virtual terminals, not 12
+
+commit c8030f33082229530ef2f0ed699eddea4465dad9
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:18:36 2007 +0200
+
+ Release name: "Don't Panic" -> "Core Dump"
+
+commit e064575e7842d55371db39991593f3ea0bf03b9b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:15:47 2007 +0200
+
+ Remove hwdetect as it is maintained as a separate package and this version isn't up to date anyway.
+
+commit cfab94bc71dc2e072c691122df82f4b6f2bdef29
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Oct 21 10:05:28 2007 +0200
+
+ disable colors on stupid terminals
+ (fixes #7369)
+
+commit bb0984ad899ab3ae85ef8bf2c0e178a2b485885c
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Fri Oct 19 22:22:52 2007 +0000
+
+ added (barely tested) improvement of ASK keyword in crypttab
+
+commit 39a8c53bd8c2b82e824d9299a4a18d81c9e530bd
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Oct 19 07:02:14 2007 +0000
+
+ 'upgpkg: removed double entry of ifconfig lo'
+
+commit 31dbcc786457dd92d9f56618e7c946b94ec04646
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Oct 19 06:08:19 2007 +0000
+
+ 'upgpkg: added /sys/class/net/lo check'
+
+commit 24e468641b51e5e0a05e631d62ad706b5c0a2dd7
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 16:50:26 2007 +0000
+
+ 'upgpkg: added loopbackhardcoded to rc.sysinit and remove it from rc.conf'
+
+commit 6f35411f5ee1db8db1e27faf91c7b03e900c5bee
+Author: Dan McGee <dan@archlinux.org>
+Date: Thu Oct 18 16:15:58 2007 +0000
+
+ removing unnecessary isatty.c, replaced by shell test -t option
+
+commit a7c1404def678e27e0ac808397f46f81a1d2c8d4
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 14:27:56 2007 +0000
+
+ 'upgpkg: fixed utf typo'
+
+commit fa4866f0adce9c3e0bfc09fb878eebb99797c338
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Oct 18 08:43:28 2007 +0000
+
+ 'upgpkg: trying to fix #6237,7554,7165,7641,5740'
+
+commit 8649f79e8e0027bd46da8b13f6d8ac5465471c35
+Author: Dan McGee <dan@archlinux.org>
+Date: Wed Aug 15 04:01:59 2007 +0000
+
+ upgpkg: initscripts 2007.08-2
+
+commit e3c06e981af869d6a00ec8cde34bde1e15cb53ad
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jul 30 20:24:42 2007 +0000
+
+ 'upgpgk: fixed nocpfs netfs bug and bump to don't panic release'
+
+commit 6852a33372052c1374248f6727e6f7755aeadd30
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun May 13 13:40:40 2007 +0000
+
+ upgpkg: initscripts 0.8-11
+
+commit aca95b25037ee1085c70a2e73b609a5d8cdff44b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun May 13 12:01:11 2007 +0000
+
+ upgpkg: initscripts 0.8-10
+
+commit cc2c8b1fa2a709b405e3efc65222b984a63e13c6
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat May 12 12:55:37 2007 +0000
+
+ 'upgpkg: bump to Duke and cleanup rc.sysinit and netds'
+
+commit 352dda7e7ba2c62686579e2c58b519ebb961b8be
+Author: James Rayner <james@archlinux.org>
+Date: Thu May 10 00:18:05 2007 +0000
+
+ upgpkg: initscripts 0.8-8
+ fixing flyspray #7004 #6859, change in dhcpcd state directory.
+
+commit 3fc84b485213763335a5b820f8a4b4d6483be20d
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Apr 22 13:37:53 2007 +0000
+
+ 'upgpkg: added autoloading of standard acpi modules during boot, with the possibility to blacklist by default methods'
+
+commit b04f18c15cef8f6d48aa0aa63fa8104b551fe1db
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Feb 10 09:14:34 2007 +0000
+
+ fixed typo, fixed verbose booting
+
+commit fff26e7f1fecaec1bf4c07cc07d1a426b160168b
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Tue Jan 30 18:56:37 2007 +0000
+
+ forgot to add rc.local.shutdown
+
+commit 36e129004f1dfb2e890edc55f99c8eb0df89c668
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jan 29 21:51:35 2007 +0000
+
+ 'upgpkg: added network listing help to rc.conf'
+
+commit 78b5f6beee0453dd938f1a3c6a6ab5776e6d78f3
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Jan 29 20:45:25 2007 +0000
+
+ fix 6038
+
+commit 1bad30cc17f6cec15668f2bae9d6b72dd44788ee
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Jan 22 21:52:41 2007 +0000
+
+ 'upgpkg: fixed verbose boot option'
+
+commit bced30e91fea71c05e3e521aa7cf04583f0dadbb
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Jan 18 19:21:26 2007 +0000
+
+ 'upgpkg: fixed usb removal'
+
+commit 221f3c66ca47ccf283f8ebbe7f8799cc24176def
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Dec 31 16:11:52 2006 +0000
+
+ 'added a bunch of new options'
+
+commit c323a4ae268d20d293351dc5e195e34d19ed28e7
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Mon Dec 18 21:54:53 2006 +0000
+
+ upgpkg: initscripts 0.8-2
+ finally fixed 5445
+
+commit f9b90969a7669044f098b90babe203b145bf55a9
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Dec 18 19:24:54 2006 +0000
+
+ 'upgpkg: added --keymap option'
+
+commit 4b00503d2d25e40b0e962df08005d749cf3a4c87
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sun Dec 17 12:53:22 2006 +0000
+
+ added stat_append to functions, fixed fsck bugs when clock is not set
+
+commit 779bd2abb1b67431b6e353eaba569779fb718833
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Dec 16 23:49:35 2006 +0000
+
+ let lvm start quietly
+
+commit 9b58da29d7ce93bf3dc258a28d2fae00eb181f7e
+Author: Thomas Bächler <thomas@archlinux.org>
+Date: Sat Dec 16 22:03:29 2006 +0000
+
+ rc.sysinit, rc.shutdown:
+ - Code cleanup
+ - Added "verbose" commandline option for debugging
+ - Fixed #5968
+ - Fixed #4648
+
+commit 567edd5aa95d5728b50f9fff6d71c368a7f3966a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Dec 16 13:31:00 2006 +0000
+
+ 'upgpkg: readded rc.sysinit and hwdetect for 0.8 package'
+
+commit 9a73b01bb6ea96b81b9ed887f8808b47b4fc5f19
+Author: Andreas Radke <andyrtr@archlinux.org>
+Date: Sun Dec 10 21:21:20 2006 +0000
+
+ cuurent x86_64 updated
+
+commit 3fcefcf13b87883216dd5331b2aed84db473de04
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Dec 10 14:34:46 2006 +0000
+
+ 'upgpkg: added voodoo tag and new hwdetect'
+
+commit 6b671f7901477d36fca5f8901731e4c0d5e7948f
+Author: Aaron Griffin <aaron@archlinux.org>
+Date: Thu Nov 16 01:01:16 2006 +0000
+
+ upgpkg: initscripts 0.7.3-1
+ Bugfix #5529: Set timezone before hwclock calls
+
+commit c632bec83a37945e5bb4e7cedf4f4d96f0a955ec
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 13 00:00:27 2006 +0000
+
+ FS#5385: Fixed RAID setup code
+
+commit ef6a41ebd7e2ab216e4b950df2a6d0826aef39b7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 8 20:01:06 2006 +0000
+
+ patch from Paul to disable NIS domainname before shutting down (syslog-ng was hanging). Also added a 2>/dev/null to fsck during startup
+
+commit 01f15f89c1cf4cdb77c7d0a8ddb37ddabd7df012
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Oct 2 14:50:41 2006 +0000
+
+ 'upgpkg: added psmouse workaround for new broken lappies'
+
+commit 9c34c7c5c8c525ce17a5bf447e40d78741ee15ba
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 28 19:25:16 2006 +0000
+
+ added CONSOLE check to UTF-8/Locale stuff to avoid doing it when running scripts from cron
+
+commit 00081d09b7ab18b8672a299d61a1281819904890
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Sep 26 06:34:35 2006 +0000
+
+ Added --directisa switch to hwclock in rc.shutdown
+
+commit 2f49e1bb285fc9ad7259caf5edb957d7c891c974
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Sep 20 10:36:16 2006 +0000
+
+ 'upgpkg: added udev persistent rules check'
+
+commit 8d399cf84d6d6192a13286e33258aaa369eee1bb
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Aug 4 07:54:32 2006 +0000
+
+ 'upgpkg: added kexec support to rc.shutdown'
+
+commit 977797d7a67033d03c4be04dba5b789ecdf2a36f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jul 25 22:36:42 2006 +0000
+
+ set a default for LOCALE so it's no longer needed in /etc/profile
+
+commit 87132356080924e00822a4b24d593e94bb18e24a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 21 19:40:00 2006 +0000
+
+ added --directisa to hwclock calls, support for additional options in crypttab for non-LUKS partitions, fixed the WPA_OPTS varname typo in netcfg
+
+commit 8d214daab85c043f87ed21912b68172cc0e33635
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Jul 7 15:17:34 2006 +0000
+
+ 'upgpkg: fixed usbfs mounting again'
+
+commit 93ba858cb8f3684506bcc5854ce32b637e108d00
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jun 30 19:40:10 2006 +0000
+
+ various fixes -- netcfg fixes, md device node creation fixes w/ mkinitcpio, 2.4 kernel support removed
+
+commit 4d91b544b6f666a12b84f82576b4309622806e83
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jun 30 15:54:33 2006 +0000
+
+ Fixed --menu when using gpm (#4916)
+
+commit 09bb556bf07b89130d27dc137190ff354beadecc
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 28 17:27:47 2006 +0000
+
+ handle ESSID fields that contain spaces
+
+commit 6cc15eeb857f9a01e7199c4c665866c7728244aa
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Jun 15 21:54:12 2006 +0000
+
+ added patch from James Rayner to auto-configure WPA through netcfg
+
+commit 96971f91453600f1d94d3e333dfb8773d1e4f596
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jun 12 17:36:12 2006 +0000
+
+ fixed the path to the console maps in the comment area of rc.conf
+
+commit 5d708a122229e99d1f09f9cfd8297370e1778732
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Jun 7 17:12:17 2006 +0000
+
+ 'upgpkg: removed the rest of 2.4 kernel'
+
+commit b4306a3ede324f6bdbfa5c7b80d0cff15f22c1be
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Jun 7 16:49:32 2006 +0000
+
+ 'upgpkg: removed kernel24 stuff eg. devfsd support and lvm1'
+
+commit ddac836cdbb67ba5b89d21aa3b25a67919efeb88
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 9 18:23:41 2006 +0000
+
+ upgpkg: initscripts 0.7.2
+
+commit dfb74ab60c8bb84f3e02d89cfe8127e55aeb7984
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 27 18:13:56 2006 +0000
+
+ fix for #4296
+
+commit 7cc268dcf5d2e64a3f10b808e8b1b90a8f6fec4a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 26 19:15:58 2006 +0000
+
+ Additional fix for locale stuff, re-enabled the depmod -A call at bootup
+
+commit befe253687d69267cac5e5953e0ca55d18bef000
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Feb 24 06:57:54 2006 +0000
+
+ 'upgpkg: added depmod -A again'
+
+commit 7ad516d1a7bf6fb5eed4e43669a7fb2a0832a552
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Tue Feb 21 07:35:10 2006 +0000
+
+ 'upgpkg: fixed module loading and udev startup'
+
+commit e0074ab78392be117c4cc63b4e0832fef95f2009
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 20 05:33:27 2006 +0000
+
+ default LOCALE is now en_US.utf8
+
+commit d4bd7c245c018d9de3f25eca580515cfc3048217
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 20 05:26:07 2006 +0000
+
+ fix for terminal/locale bug (3996)
+
+commit a33f5477d845f3919cd746ab2be1180cb025b415
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 16 17:56:33 2006 +0000
+
+ hwdetect->udev, removed default usbserial blacklist
+
+commit 655d3db463145facd994e5e3cfd0c0a911b30297
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 16 17:12:06 2006 +0000
+
+ added note about disallowed hyphens in bash variable names
+
+commit 207256890573ce867d4391c362b34f31a1a60865
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Feb 16 10:23:38 2006 +0000
+
+ 'upgpkg: put loading modules in front of udev and disabled depmod -A during boot'
+
+commit 9058c034c77ab62b91f2cd7d3637a2cb04f7c7d7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 13 04:47:51 2006 +0000
+
+ removed unnecessary line from netfs
+
+commit 6411dc721549d99335367f5643c0887095fc7818
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 9 18:48:17 2006 +0000
+
+ added note about dialog package required for netcfg menus
+
+commit 0d286b02f2c425d28c1908a82d99f266d3549919
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 6 19:38:45 2006 +0000
+
+ moved swap activation after local filesystem mounting, so people can use swap files
+
+commit 8172dd9403fa216479c458e222c9d01c5b293437
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Feb 6 18:13:03 2006 +0000
+
+ 'upgpkg: fixed weird scsi raid controllers'
+
+commit f137bbe79f4249a296c0e9064a29f5c76f38273d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Feb 1 21:24:08 2006 +0000
+
+ utf8 little fix
+
+commit affcb39fd921774f48b79fb9d48d68f3a917fd4f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 31 01:30:55 2006 +0000
+
+ added --mknodes switch to the vgscan call (LVM)
+
+commit bd6701616508c5bb21de9166e9b1daa6fe1de769
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 21 20:58:24 2006 +0000
+
+ fixed random-seed restoration
+
+commit e4af7e36ba40ab49993fcc4232dcebdedc1763b9
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Jan 19 16:25:38 2006 +0000
+
+ 'upgpkg: update to new udev module loading'
+
+commit 8f67fcb5f1fb15d67f024f16bf3249da85375418
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 14 08:34:09 2006 +0000
+
+ added hook for rc.local.shutdown
+
+commit cef7bab5145b923577aeea7431d7b19f2dd3946b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 3 09:06:09 2006 +0000
+
+ changed xdm path in inittab
+
+commit 33d5e65a50fa302f6863277c52c061af721a3c44
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Dec 19 18:43:03 2005 +0000
+
+ final touches for utf8 stuff (Thanks Roman\!)
+
+commit e4439a61bca626d05d3c6073ac94740db5c446c4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 18:33:46 2005 +0000
+
+ re-fixed my utf fix (yea, that's right, i fell down a lot when i was a kid)
+
+commit 00b620075a21e293db4b55a8d451ecd2930dbce1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 02:16:47 2005 +0000
+
+ added sr link to makedevs
+
+commit 0d08cad43172cc04df237a4a4271525ad1d527b3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 17 00:59:04 2005 +0000
+
+ final utf8 fixes, a couple small fixes for hwdetect and netcfg
+
+commit cee3cbb3a261ce0ba812618493e9bd253424ea3f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 15 18:56:19 2005 +0000
+
+ added scsi CD nodes
+
+commit f14a9cc609ce341ef2327c3ae93aa2695b58b392
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Tue Dec 13 21:43:08 2005 +0000
+
+ 'upgpkg: added kernel_verion=, cleaned up some parts added --modules for MODULES= generation for rc.conf use'
+
+commit c4c551a2f870f579438ae38b07ff9c14008cd6c9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 04:12:28 2005 +0000
+
+ makedevs fix
+
+commit a8db77d46d74fa3a8a0e13870b94c916a60358b8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 04:06:46 2005 +0000
+
+ latest utf fixes
+
+commit fcdcb21e2c33b1d3e359dc847638b936caf2aeee
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 13 01:55:31 2005 +0000
+
+ makedevs: added ternary and quaternary ide/scsi devices
+
+commit 675e9d69d02233e0079672f6c10cbe07da3027ad
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Dec 12 10:40:15 2005 +0000
+
+ 'upgpkg: removed unneeded utf stuff, umlauts in user names do not work, you even cannot create them,
+ added quiet option to filsystem check, fixed garbeled fonts if no framebuffer is used'
+
+commit d768a9c95a254e09a34c39aa86840c01cb6d97dd
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Dec 7 00:21:45 2005 +0000
+
+ changed both network scripts to use good ol' /bin/kill instead of dhcpcd's -k switch (I forgot about #2942)
+
+commit f45c3abd5697fa89d1a6431d8dbf5e96e6804ca8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 6 06:45:42 2005 +0000
+
+ Added interface param to dhcpcd -k calls in network and netcfg
+
+commit cfaa5552fcbe964a172138e5e6c87e54abb6ce4c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Dec 5 18:59:11 2005 +0000
+
+ dhcpcd fix in rc.d/network
+
+commit cec2d46513c7cd557f219fa2ede3c7a816a526dc
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Dec 3 13:25:37 2005 +0000
+
+ 'upgpkg: fixed ide check'
+
+commit 7e18ec8806c28d52c771cacda045aa3bd81ba0b2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 1 21:04:15 2005 +0000
+
+ fixed wpa_cli path in netcfg
+
+commit 78365fe57d61645c1b8282784d863a0cd8537eb5
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 29 01:26:11 2005 +0000
+
+ finished crypttab work, fixed a bug in hwdetect related to custom kernels
+
+commit 0d7cb77c48fc6232a8342fba9056a1896898b066
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Nov 28 22:32:00 2005 +0000
+
+ 'upgpkg: fixed custom kernels'
+
+commit 2c90c8af7bee4f06cf05c481e658406df35fe401
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 28 19:36:56 2005 +0000
+
+ added USEWPA to template to enable/disable wpa_supplicant
+
+commit 15c49deac15f97e647afc081c7b5e210ad4bdcd3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 28 19:14:53 2005 +0000
+
+ moved sysctl config stuff to precede daemon startup (#3530)
+
+commit fb8a47586d0c5c5833a6bee2adc162a22b646d5a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sun Nov 27 18:55:30 2005 +0000
+
+ 'upgpkg: fixed lock on kernels <= 2.6.12'
+
+commit 66779d909c3a08f2c3fa0811de12f0e3b5c54bc0
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 26 15:55:36 2005 +0000
+
+ 'upgpkg: fixed non ide systems, fixed usb modules'
+
+commit b087f41b86014ba5dfc0b23ea79d6897573fb562
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Nov 23 12:54:55 2005 +0000
+
+ 'upgpkg: fixed hwdetect syntax for rc.sysinit'
+
+commit a03faeb98fbe82a01977a9900b0d1b6974aac3c6
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Wed Nov 23 12:45:41 2005 +0000
+
+ 'upgpkg: fixed mtp modules, added modules-order option, changes options to -- syntax'
+
+commit d8df29152b8401e4c56a07b8920f34fdf9252bc1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 23 01:58:50 2005 +0000
+
+ added check for /sys/devices
+
+commit fca87ebae05b19c0da51c1b996f4bddad82c3115
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Mon Nov 21 08:52:49 2005 +0000
+
+ 'upgpkg: hwdetect fixed module order, added load_modules=off to rc.sysinit'
+
+commit d7695ef38916be8e806b84f8e195a45a7b2ec217
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 19 15:44:02 2005 +0000
+
+ 'upgpkg: added more modules'
+
+commit 561ff8a3abbda0a86cc2a479d8e1a9e1b965b0d1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Nov 19 01:47:31 2005 +0000
+
+ added crypttab stuff
+
+commit 23f08df5cb31d38347582e4d62f9279385c612ba
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Fri Nov 18 19:00:25 2005 +0000
+
+ 'upgpkg : added full ide,scsi detection to hwdetect'
+
+commit 6931feb5463b3ce9119753bda74279ec87ed447a
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Thu Nov 17 07:52:21 2005 +0000
+
+ 'upgpkg: added new PNP software and some workarounds'
+
+commit 0cddbac760aa1b38e5fb68d54b315cb01c67b7b6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 09:07:13 2005 +0000
+
+ cosmetics
+
+commit 2dc0038155b978eb70be482313cc8535dadc436d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 02:51:52 2005 +0000
+
+ added variables for autoloading modules, cleaned up rc.conf a bit
+
+commit abdeaf8051aaadb9f5270a14e45481a8d61e0b95
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 15 01:18:14 2005 +0000
+
+ added tpowa's changes, cleaned up output and removed redundant code
+
+commit 684a99329e37924e84344cb340e5022628d6777c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Nov 14 17:46:46 2005 +0000
+
+ more thorough cleaning of /var/run at bootup
+
+commit e3315ad97c60b8cbad31aff8500d269d9176a9b5
+Author: Tobias Powalowski <tpowa@archlinux.org>
+Date: Sat Nov 12 15:00:08 2005 +0000
+
+ 'upgpkg: added more text to show modules, to make it more readable :) "
+
+commit 9e02c37ccd310844c919f27af64c901979c4105d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 11 18:49:54 2005 +0000
+
+ updated hwdetect
+
+commit 9683aeadd86569b69ad44d270e006284e565dfd5
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 11 18:46:12 2005 +0000
+
+ changed ifup() to skip interfaces that are already up
+
+commit 78ce45a497753e2be061e29a6464fcd969041895
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 21:56:55 2005 +0000
+
+ added nocifs to pre-network mounts, fixed mdadm.conf missing errors
+
+commit 0daa0d11302e16ba26d7518c1edf0e4887aade9c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 19:21:59 2005 +0000
+
+ little bugfix
+
+commit d87c9749651741249b4c7cbf5f18b7ab1b3300fb
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 19:06:51 2005 +0000
+
+ tpowa's hardware detection script
+
+commit d7e23b7ef7c92f7c9529c65a255b524b26648cc3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Nov 10 02:34:20 2005 +0000
+
+ added more intelligence for RAID/LVM setups from the initrd
+
+commit 0e992c0464125a0cb0207171a053dbf64c593833
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 9 21:22:44 2005 +0000
+
+ added logic to free up initrd memory once it's not needed anymore
+
+commit 71468248567e6bf1e794094d9b5f87ac61de033a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 9 21:21:17 2005 +0000
+
+ added logic to free up initrd memory once it's not needed anymore
+
+commit f947ecffc4a9109d0790e5b2853e2a835b4cf81b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 18:29:25 2005 +0000
+
+ fixed a syntax bug in locale setting
+
+commit 826e8af03cdfc3edec0dfc382a4f4308748a08f7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 09:50:36 2005 +0000
+
+ added support for encrypted root filesystems through the initrd
+
+commit e00744e1d385f80f44618baea869136dcf64c88c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 01:44:56 2005 +0000
+
+ dm changes
+
+commit 3f2fb1767eb2c8167a4f78999e431da73b9c8e8d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 4 00:54:22 2005 +0000
+
+ makedevs helper script -- not added to package yet
+
+commit c8a4f09b7943a7fe9a875d9fc7af7decd29db6a2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Oct 22 21:23:47 2005 +0000
+
+ added patch for wpa_supplicant support
+
+commit f22d7a53b09ad0e28911117412c1cd0ab5c7bb68
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 21 23:35:39 2005 +0000
+
+ upgpkg: initscripts 0.7.1
+
+commit fa6d682d8bb1d95525e9f6540917446ad1247ea6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Oct 12 16:53:43 2005 +0000
+
+ another quick fix for netcfg stuff (no rebuild yet)
+
+commit 14886e1bf20897e2efbc677d6bd1846db0201cbb
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Oct 6 17:00:31 2005 +0000
+
+ added WIFI_WAIT parameter (no rebuild yet)
+
+commit 79142a38d91eaf27a6c677e0a6511f855e57e30d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Oct 3 17:58:51 2005 +0000
+
+ added ability to use the netcfg menu from the NET env var
+
+commit 39f5db6e89fd04da3979c11c3b2761ea031cd94d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 29 07:22:25 2005 +0000
+
+ added tpowa's fix for locale stuff
+
+commit e772aeae76f2ad704a834dc17df02dbc137a6573
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Sep 15 20:05:07 2005 +0000
+
+ modified netcfg/network scripts -- you can list multiple entries in NET_PROFILES that use the same INTERFACE. They will be started one at a time, and the first successful one will be kept.
+
+commit 0be8f5b2d33fc6160e2a62d33fc1f828218fa90a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jul 18 19:17:14 2005 +0000
+
+ fixed netcfg to remove stale dhcpcd .pid files (#2973)
+
+commit 00945333dc1dd08d893a6c42f395e7d3c81dad0d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 6 05:15:37 2005 +0000
+
+ fixed a netcfg bug where disabled profiles were being started
+
+commit 0fa1f0eeb3422ba0e84a346a20437172f26859da
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 1 02:54:50 2005 +0000
+
+ fixed a --stopall bug in netcfg
+
+commit a440a006d7dc42ad072b13986f1f737e8f7e1719
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 1 00:13:38 2005 +0000
+
+ fixed some spacing in rc.multi -- cosmetic
+
+commit 863e8311cfc2ec7dc98fdb43abaa8499dd3414a4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Jun 30 23:57:54 2005 +0000
+
+ added new netcfg stuff for roaming network profiles
+
+commit 47ca58301f0bf0680baf59465202c4209b1ac112
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jun 5 20:30:12 2005 +0000
+
+ rc.sysinit now sets the NIS domain name, if configured. Also fixed a /var/locks typo
+
+commit 0ad54a5ba99d95c9b5dfe02f567e1f349de6a720
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 1 17:36:42 2005 +0000
+
+ added -q switch to sysctl
+
+commit b5d692b639b9e4a47cd6ba920b91a6d2ff50dc3d
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 31 18:31:01 2005 +0000
+
+ moved usb setup above the Loading Modules stage, so sane and other usb things will work correctly (#2770)
+
+commit cc6648d06dba085b903db820ad581dd94eb669ef
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun May 22 17:40:33 2005 +0000
+
+ added sysctl call from rc.sysinit
+
+commit 41e115b5973f6498ce4bfce6fe772b8d0b459700
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 18 06:59:02 2005 +0000
+
+ added a /proc/modules check before running modprobe, just in case the user is running a non-modular kernel
+
+commit c4a367e15b1bf0c9814a674c0a55084aa714245a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Mar 24 18:53:37 2005 +0000
+
+ added CIFS to netfs script
+
+commit 8b862a2073ad6fe7303a4dbbe7d7316a60db1147
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Mar 16 17:31:30 2005 +0000
+
+ updated copyright year in rc.sysinit
+
+commit 8aff6add70fd50b3febe363a0002098f21e2679b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Mar 11 20:02:08 2005 +0000
+
+ added support for backgrounding daemons at startup with a '@' prefix, commented out the ldconfig call at startup, added support for unicode console maps, added a hotplug_ifup() function rc.d/network for hotplug's net.agent to use
+
+commit 22805e822d4e9fee9c1f4331dee31bccd1db45d2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 6 20:08:29 2005 +0000
+
+ added logic to handle shutdown -F (forcefsck)
+
+commit 92d43c54f0bd5142a2a844b1910d15c808d86992
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 11 01:21:43 2005 +0000
+
+ added ethernet bonding support (still untested)
+
+commit e8a2e4663543d16fcafa4c62c75f42fdab32ff28
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jan 2 23:52:40 2005 +0000
+
+ fixed a typo in the rc.conf comments
+
+commit 45d3c546ee36b28c6808fb4330669b1c23437c26
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 30 07:33:19 2004 +0000
+
+ fixed the missing /dev/initctl problem with udev in runlevel 1
+
+commit 4c1c59be80c29f73655913ff139717268ff1f50f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 23 22:58:25 2004 +0000
+
+ made rc.d/network pay attention to the new conf.d files (dhcpcd and wireless). also modified rc.sysinit to wait til after modules are loaded before attempting to mount /proc/bus/usb. If the user uses hotplug, then the usb host modules may not be loaded yet, but that's okay -- hotplug will mount /proc/bus/usb for them
+
+commit 2822ea48f2e7609232d4e4b47285d60097de2828
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Sep 28 06:24:03 2004 +0000
+
+ used depmod -A in rc.sysinit to update module deps
+
+commit 85c899a1ca88c088aaeb679dc009687670e30ac7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 24 17:22:34 2004 +0000
+
+ updated rc.single to pay attention to udev and syslog-ng
+
+commit 8784d3a487b1613759e871c8f8b4a4530509bdd3
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Sep 12 19:40:51 2004 +0000
+
+ added fix for xorg temp directories (bug #1408)
+
+commit 20dceb289f61b69a98c6377921ee2a009aeefd98
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 23 01:03:08 2004 +0000
+
+ re-mounted / after removing /etc/mtab, so it's written to mtab properly
+
+commit 9f5d7b15d7b58b7a3d80a8923a2ff1952c90966a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 21 22:15:59 2004 +0000
+
+ re-mount /sys and /proc once / is rw so the entries can be written to /etc/mtab
+
+commit ef0a365fc88fd1b02883dd42e0afb0929fbfa3f4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Jul 18 21:28:41 2004 +0000
+
+ fixed the sysfs problem with 2.4
+
+commit 5ef7c1839eed06599d615380dae4447fe43dfb34
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 03:03:26 2004 +0000
+
+ modified ifdown to bring a dhcp'd eth0 down even if the .pid file is not found (#756)
+
+commit 2881e158d80e1203d2fae41ff2ce0f122b132e45
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 01:03:51 2004 +0000
+
+ made syslog-ng Arch's new default logger
+
+commit 3280eeff177ecf79c32213303c9eb320b579d040
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jul 16 00:27:57 2004 +0000
+
+ updated version header to 0.7, added support for udev and static /dev trees
+
+commit 2c20f4d5637da88e983b65db9c97373aa79d8a37
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jul 3 19:40:02 2004 +0000
+
+ added iflist and rtlist functions and made ifup,ifdown,rtup,rtdown accessible from outside the script
+
+commit cd0e2c63acc50d080edba54b797f7f1c58da1312
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu May 27 00:30:15 2004 +0000
+
+ fixed the lvm2 segfault on shutdown
+
+commit f396331a675e17ef282b56ea228e66383d401400
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed May 19 16:56:48 2004 +0000
+
+ added sysfs mounting to fix LVM2 segfaults
+
+commit 446e095bdfb1d4d9c31f729d4169aa4a9f44797f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 18 23:40:53 2004 +0000
+
+ added better LVM handling
+
+commit e555d5efc43f7e8597dd90482e145f6d1936faf8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 11 21:34:59 2004 +0000
+
+ added hotplug to the DAEMONS array (disabled by default)
+
+commit 262af2251dd4675e3664435068d4a96b21ab7d74
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Mar 26 20:01:07 2004 +0000
+
+ added -h arg to poweroff to park the hard drives
+
+commit abbe7921517e87dcf3fa61036d26d72bc714257a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 29 23:09:37 2004 +0000
+
+ added --ignorelockingfailure during startup vgchange (LVM2)
+
+commit 0d76f45bffddced00c83b0c06f1be796a780366b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Feb 29 07:03:00 2004 +0000
+
+ updated for LVM2
+
+commit d9f8f3c07bcf1ab349fa6484980a04ef57c7212c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Feb 23 03:32:36 2004 +0000
+
+ added setup commands for LVM2
+
+commit d4a5c5ef402ca7315e5429eaccb0748e38b964af
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Feb 19 18:50:09 2004 +0000
+
+ added cleanups by Leif Askeland
+
+commit 45ede7cf9dd872c580e9c2a57a00b0350f035371
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Feb 18 19:35:17 2004 +0000
+
+ updated copyright
+
+commit b6fab06a33cb0c829731c3123ef35444c6909d72
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Jan 30 18:30:06 2004 +0000
+
+ added a rc.d/netfs script to mount network-based filesystems from DAEMONS
+
+commit 4abccbdf439817f1328547f1f22db969fe6d8591
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jan 10 00:46:13 2004 +0000
+
+ fixed a kernel 2.6 bug re: console fonts
+
+commit a7768b2ae842c55413b1dce8a3f19e7c730885fa
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:42:18 2003 +0000
+
+ network-based mounts are not mounted til rc.multi runs
+
+commit 9009002d949745ec8824662680c06cf34040dba8
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:37:50 2003 +0000
+
+ removed a debug comment
+
+commit 4fa550ea84f951b4afe5c2e4af4aad32b7a901f6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Dec 30 22:23:36 2003 +0000
+
+ added a cosmetic fix to ifdown() in rc.d/network
+
+commit e9b62e0418df5ce6db98de36837bab2922154229
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Dec 21 08:58:37 2003 +0000
+
+ removed a leftover debugging statement
+
+commit a71e42c461da1672582143a829654049399616e7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Dec 21 00:48:23 2003 +0000
+
+ upgpkg: initscripts 0.6
+
+commit 53ae13821436183990e40cffefa8c9cff4b4f2ae
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 22:24:34 2003 +0000
+
+ fixed the licensing line
+
+commit 93dd5710cf2273c228135959c22f9e4f33d78477
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:26:53 2003 +0000
+
+ added a missing space
+
+commit 065e944539ec9b527fa163317c0a633c872c809b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:16:08 2003 +0000
+
+ a little formatting improvement
+
+commit 7f4117b05f9e4730657779ec7d4b3b08ba12616c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Oct 10 01:10:18 2003 +0000
+
+ added color to rc messages and fixed bug #168
+
+commit be8b6f59470b8779c3d4e10b3045507920931896
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Oct 4 07:41:42 2003 +0000
+
+ added -x check to /sbin/fsck, so reiserfs users can uninstall e2fsprogs without script errors
+
+commit 3a161b0240eb8eedcc8affb5e0c5b92d058619d9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 05:16:21 2003 +0000
+
+ added consolefont setting to rc.conf
+
+commit 6ea51dec01002c6b392c374fa70a62020edffd84
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 04:57:20 2003 +0000
+
+ added timeout to dhcp startup
+
+commit 2a48c5bd8db694cfe3a26cc3ef92e36050859b31
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Sep 19 04:29:34 2003 +0000
+
+ modified network script to not bail out on error
+
+commit 25223b3c0c1be7d320299af4e31062295694098a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Aug 25 19:15:49 2003 +0000
+
+ improved lvm detection/activation
+
+commit da04ddf1b88b62ad77db29b8efa33649a0871b58
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Jul 12 19:21:26 2003 +0000
+
+ added a check for lvmtab before activating LVM groups
+
+commit e39affb13f412f21a93205431c2abc625b4238a4
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 9 02:13:45 2003 +0000
+
+ removed the conf.d stuff -- conf.d files will be parsed individually by the rc.d scripts to avoid name collisions
+
+commit d69b11e73a70c9c0ed6cd888ff4ac4eb3e877ec2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jun 4 00:22:45 2003 +0000
+
+ fixed a rc.sysinit bug and moved conf.d parsing to the top of rc.conf
+
+commit 18c7679d90ca5c1c9508548c35c0a4ea14ca4d6f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 27 18:29:39 2003 +0000
+
+ fixed a small typo
+
+commit 2e25861ad03003273707fa604522e3390c24f895
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue May 27 17:14:50 2003 +0000
+
+ moved nfsmount to nfs-utils
+
+commit ba769985bf38b1eb4e54f0e19d8b3502216646d6
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon May 26 22:22:04 2003 +0000
+
+ added lvm handling
+
+commit df91d849d2c19bd070473da49dd8befc7aae978c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri May 23 23:58:57 2003 +0000
+
+ upgpkg: initscripts 0.5
+
+commit ead9f8db5fe817f019512681d5169dffad705357
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu May 8 18:12:46 2003 +0000
+
+ added -D, -H, and -h to the dhcp line
+
+commit a85df6abb081d7a7d51b00e7e301d1497fede30a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 7 17:05:02 2003 +0000
+
+ updated PKGBUILD release
+
+commit e4398c2e693441b8844645ee69fd3b7e483b3530
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Feb 7 16:58:42 2003 +0000
+
+ added the MODULES=() line to rc.conf, with loading in rc.sysinit
+
+commit f6081f262419c2a4880d372636e391a52e148782
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jan 7 01:48:51 2003 +0000
+
+ updated rc.single to shutdown daemons correctly
+
+commit 6c4a6fc1938f12ee85b4f593de64a8776e5c1ba0
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Jan 6 23:23:41 2003 +0000
+
+ kill dhcpcd pid files before running the client daemon
+
+commit 19c04471ce76a3f803fdf47b964880266b529070
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Dec 14 00:13:55 2002 +0000
+
+ fixed the location of adjtime
+
+commit 96cb8c51e0ddb57f382c958ebb7808baaa258765
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Dec 12 22:27:36 2002 +0000
+
+ modified to stat_fail to return a $retval
+
+commit 81da8c411f590b436e0cffcae9dd4c30598d35b2
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Nov 29 09:06:45 2002 +0000
+
+ fixed a syntax bug in rc.sysinit
+
+commit c5f67416f3250e0d16eb2e588fc2b62435727d3c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Nov 27 00:36:14 2002 +0000
+
+ fix
+
+commit 43cda626dbc05e92dffc0027ef19db9d3cc44d37
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 26 23:26:48 2002 +0000
+
+ added nfsmount (from jk)
+
+commit c8cd508809408a0be9f1fbeb65775ab7fb083f3b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Nov 26 18:17:31 2002 +0000
+
+ Added utf hwclock support (from user patch)
+
+commit 914b0b3b572a3d5d311682a88424d165589798f1
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Nov 23 20:37:55 2002 +0000
+
+ added jk's changes: system clock is set earlier on, and modules.dep is only
+ updated if new modules are present.
+
+commit dd4248ed74b9adce32910ee95274719249220757
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Aug 28 21:43:10 2002 +0000
+
+ removed PROFILES array
+
+commit eb2f42cba2d8134e83321810dcad897cc88e4716
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Aug 24 20:54:22 2002 +0000
+
+ rc.sysinit removes /var/run/daemons/* on bootup
+
+commit fd8fde036ab46b593590b362bc94b051e432a295
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Jul 24 02:57:16 2002 +0000
+
+ Upgraded initscripts to 0.3
+
+commit 2b503065569fa2ffedf5eafc76158c74062ac49b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Jun 11 05:07:54 2002 +0000
+
+ nada
+
+commit efa9a6d681b87fa4b8e321173690144b17a08d35
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Apr 27 21:04:15 2002 +0000
+
+ Added DHCP handling to initscripts
+
+commit 30277f5e1ce30a10ed08ae2529282718c86ac826
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:16:37 2002 +0000
+
+ *** empty log message ***
+
+commit f7a1c1ba6c35069ed6086e41146471fe97856325
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:15:35 2002 +0000
+
+ *** empty log message ***
+
+commit 3a3db1e368443447d7eaec461110bb122d026d83
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 17:13:21 2002 +0000
+
+ Cleaned up networking in initscripts
+
+commit cd5a839558fa3e5b10423fa33e621be2f27acf12
+Author: Judd Vinet <judd@archlinux.org>
+Date: Fri Apr 19 07:28:04 2002 +0000
+
+ Updated for /etc/profile.d
+
+commit f5e0fa814e1f31279509645a25057dcefa5eaadc
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Apr 16 03:59:06 2002 +0000
+
+ Updated network rc script with jproctor's disable-eth changes
+
+commit 8bc78f134bf719b16a3b3b2a7cea947fbf526e3b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 16:45:38 2002 +0000
+
+ Added arch-release to filesystem
+ Fixed initscripts (again)
+
+commit b840b6f59bfa39bceb663ad1b40f4c0ff5984366
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 07:00:55 2002 +0000
+
+ *** empty log message ***
+
+commit 9a59bb9539dacac884b9c3b0088e22ba762f2b9b
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:53:10 2002 +0000
+
+ Updated initscripts
+
+commit 2f4936aec49df2c681ae0862103cee8376c5ab57
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:47:05 2002 +0000
+
+ Bugfix for initscripts
+
+commit 5b61b6c2bf49d75df992a4dc39757e66a536dbcd
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Apr 15 06:41:16 2002 +0000
+
+ Updated initscripts for multiple ethernet interfaces
+
+commit 91fd2beff99c9e623a201c8221964353c8669044
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Apr 11 05:06:15 2002 +0000
+
+ Updated installer script
+ Added package dhcpcd
+ Took ash job control out of busybox for bootdisk
+
+commit 2cb34b31712bf72ae6c30e5029572463152a082f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 24 08:50:48 2002 +0000
+
+ Fixed a runlevel bug in initscripts
+
+commit 65405267704892a9bcb42186c95adcf4566cbf8c
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sun Mar 24 08:40:40 2002 +0000
+
+ Added rc.d network script to initscripts
+
+commit eea6fee11ad792708d6b8fbf0cb5b42b00ea1c91
+Author: Judd Vinet <judd@archlinux.org>
+Date: Thu Mar 14 08:34:49 2002 +0000
+
+ Removed all filelist files from repository
+
+commit 57d51e9a853fc21be0e733253ac56f2d9756d3a7
+Author: Judd Vinet <judd@archlinux.org>
+Date: Wed Mar 13 08:05:47 2002 +0000
+
+ Updated inittab for X11
+
+commit d0ea35d522f7e68b198afe01bf369463af56259f
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Mar 12 05:37:01 2002 +0000
+
+ Rebuild package pcmcia-cs for 2.4.18
+ Tweaked initscripts/filesystem
+ Added doc/install.txt and misc/cdboot/etc/issue and scripts/makerelease
+
+commit 14e3f9480a7364200b999477fa4ab9da16884831
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 11 00:58:34 2002 +0000
+
+ Removed rc.proto, updated rc.single
+
+commit 325b46a6b02aee695658eafe6b714d0e02810e1a
+Author: Judd Vinet <judd@archlinux.org>
+Date: Sat Mar 9 10:07:16 2002 +0000
+
+ Added some rudimentary networking stuff
+
+commit 897380f9b8071b8df0dcdb85cc9e1424640762b9
+Author: Judd Vinet <judd@archlinux.org>
+Date: Tue Mar 5 04:59:03 2002 +0000
+
+ Changed name to Arch Linux
+
+commit 98c76a453222169f12b0e95f8a7ed0175e182598
+Author: Judd Vinet <judd@archlinux.org>
+Date: Mon Mar 4 07:28:25 2002 +0000
+
+ Initial revision
diff --git a/abs/core/initscripts/PKGBUILD b/abs/core/initscripts/PKGBUILD
new file mode 100644
index 0000000..b62fcaa
--- /dev/null
+++ b/abs/core/initscripts/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8634 2008-08-14 09:53:14Z pierre $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=initscripts
+pkgver=2008.08
+pkgrel=1
+pkgdesc="System initialization/bootup scripts"
+arch=('i686' 'x86_64')
+url="http://www.archlinux.org"
+license=('GPL')
+groups=('base')
+backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown)
+depends=('glibc' 'bash' 'awk' 'grep' 'coreutils' 'sed' 'udev>=118' 'net-tools' 'ncurses' 'kbd' 'findutils')
+install=initscripts.install
+source=(ftp://ftp.archlinux.org/other/initscripts/${pkgname}-${pkgver}-${pkgrel}.tar.gz)
+md5sums=('317ddba5c41ac61905fd8289805e00cd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}-${pkgrel}/
+ DESTDIR=$startdir/pkg ./install.sh
+}
diff --git a/abs/core/initscripts/initscripts.install b/abs/core/initscripts/initscripts.install
new file mode 100644
index 0000000..9fffa9b
--- /dev/null
+++ b/abs/core/initscripts/initscripts.install
@@ -0,0 +1,25 @@
+post_upgrade() {
+ cat << "EOF"
+-----------------------------------------------------------
+IMPORTANT NOTICE FOR ENCRYPTION USERS
+
+The "password" column in /etc/crypttab has now
+two special keywords:
+- ASK ask for a passphrase on boot
+- SWAP use a random key and create swapspace
+ This is particularly dangerous, as the
+ volume in question will be overwritten
+ If you use SWAP as your passphrase (which
+ is insecure anyway), be sure to remove it
+ from /etc/crypttab to avoid dataloss!
+
+See /etc/crypttab(.pacnew) for more information.
+-----------------------------------------------------------
+Attention netcfg users: netcfg is no longer included as
+part of the initscripts package.
+Be aware that rc.conf's NET_PROFILES has changed to
+NETWORKS, and that netcfg must be installed separately.
+For more info, see the netcfg man page.
+-----------------------------------------------------------
+EOF
+}
diff --git a/abs/core/inputproto/PKGBUILD b/abs/core/inputproto/PKGBUILD
new file mode 100644
index 0000000..ddd445c
--- /dev/null
+++ b/abs/core/inputproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 670 2008-04-21 13:49:33Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=inputproto
+pkgver=1.4.3
+pkgrel=1
+pkgdesc="X11 Input extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('a0f0d8cf6fbf0db8ba3937d0cc16138d')
diff --git a/abs/core/intel-dri/PKGBUILD b/abs/core/intel-dri/PKGBUILD
new file mode 100644
index 0000000..167f4e4
--- /dev/null
+++ b/abs/core/intel-dri/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=intel-dri
+pkgver=7.0.3
+pkgrel=1
+pkgdesc="Mesa DRI drivers for Intel chipsets"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('imake' 'mesa>=7.0.3' 'glproto>=1.4.9')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = i810 i915 i915tex i965" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${pkgver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/iproute/PKGBUILD b/abs/core/iproute/PKGBUILD
new file mode 100644
index 0000000..ae0f9f0
--- /dev/null
+++ b/abs/core/iproute/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3746 2008-06-30 20:09:01Z andyrtr $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=iproute
+#_dlver=2.6.24-rc7
+#pkgver=$(echo ${_dlver} | sed 's|-|_|g')
+pkgver=2.6.25
+pkgrel=1
+pkgdesc="IP Routing Utilities"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.linux-foundation.org/en/Net:Iproute2"
+depends=('db>=4.7')
+source=(#http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-${_dlver}.tar.bz2
+ http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-${pkgver}.tar.bz2)
+options=('force')
+md5sums=('5737bade2f5e03fad0e2c81da91e551e')
+
+build() {
+ #cd $srcdir/iproute2-${_dlver}
+ cd $srcdir/iproute2-${pkgver}
+ sed -i 's|/usr/local/lib/iptables|/usr/lib/iptables|' include/iptables.h || return 1
+ ./configure
+ make || return 1
+ make DESTDIR=$pkgdir install || return 1
+ chmod 755 $pkgdir/usr/sbin/ifcfg
+}
diff --git a/abs/core/iproute/iproute2-2.4.7-now-ss020116.patch b/abs/core/iproute/iproute2-2.4.7-now-ss020116.patch
new file mode 100644
index 0000000..0e37865
--- /dev/null
+++ b/abs/core/iproute/iproute2-2.4.7-now-ss020116.patch
@@ -0,0 +1,9823 @@
+diff -Naur iproute2-orig/Makefile iproute2/Makefile
+--- iproute2-orig/Makefile 2002-01-15 15:30:32.000000000 -0800
++++ iproute2/Makefile 2004-05-21 00:16:36.000000000 -0700
+@@ -4,8 +4,6 @@
+ CONFDIR=/etc/iproute2
+ DOCDIR=/usr/doc/iproute2
+
+-KERNEL_INCLUDE=/usr/src/linux/include
+-LIBC_INCLUDE=/usr/include
+
+ DEFINES= -DRESOLVE_HOSTNAMES
+
+@@ -23,19 +21,11 @@
+ #options for ipx
+ ADDLIB+=ipx_ntop.o ipx_pton.o
+
+-ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
+- ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
+- GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
+- endif
+-endif
+-ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
+- GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
+-endif
+
+
+ CC = gcc
+ CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
++CFLAGS = $(CCOPTS) -I../include $(DEFINES)
+
+ LDLIBS += -L../lib -lnetlink -lutil
+
+@@ -43,19 +33,11 @@
+
+ LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
+
+-all: check-kernel
++all:
+ @set -e; \
+ for i in $(SUBDIRS); \
+ do $(MAKE) -C $$i; done
+
+-check-kernel:
+-ifeq ($(KERNEL_INCLUDE),)
+- @echo "Please, set correct KERNEL_INCLUDE"; false
+-else
+- @set -e; \
+- if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
+- echo "Please, compile the kernel first"; false; fi
+-endif
+
+ install: all
+ install -m 0755 -d $(DESTDIR)$(SBINDIR)
+diff -Naur iproute2-orig/Makefile~ iproute2/Makefile~
+--- iproute2-orig/Makefile~ 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/Makefile~ 2002-01-15 15:30:32.000000000 -0800
+@@ -0,0 +1,77 @@
++# Path to parent kernel include files directory
++DESTDIR=
++SBINDIR=/sbin
++CONFDIR=/etc/iproute2
++DOCDIR=/usr/doc/iproute2
++
++KERNEL_INCLUDE=/usr/src/linux/include
++LIBC_INCLUDE=/usr/include
++
++DEFINES= -DRESOLVE_HOSTNAMES
++
++#options if you have a bind>=4.9.4 libresolv (or, maybe, glibc)
++LDLIBS=-lresolv
++ADDLIB=
++
++#options if you compile with libc5, and without a bind>=4.9.4 libresolv
++#LDLIBS=
++#ADDLIB=inet_ntop.o inet_pton.o
++
++#options for decnet
++ADDLIB+=dnet_ntop.o dnet_pton.o
++
++#options for ipx
++ADDLIB+=ipx_ntop.o ipx_pton.o
++
++ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
++ ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
++ GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
++ endif
++endif
++ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
++ GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
++endif
++
++
++CC = gcc
++CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
++CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
++
++LDLIBS += -L../lib -lnetlink -lutil
++
++SUBDIRS=lib ip tc misc
++
++LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
++
++all: check-kernel
++ @set -e; \
++ for i in $(SUBDIRS); \
++ do $(MAKE) -C $$i; done
++
++check-kernel:
++ifeq ($(KERNEL_INCLUDE),)
++ @echo "Please, set correct KERNEL_INCLUDE"; false
++else
++ @set -e; \
++ if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
++ echo "Please, compile the kernel first"; false; fi
++endif
++
++install: all
++ install -m 0755 -d $(DESTDIR)$(SBINDIR)
++ install -m 0755 -d $(DESTDIR)$(CONFDIR)
++ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples
++ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples/diffserv
++ install -m 0644 README.iproute2+tc $(shell find examples -type f -maxdepth 1) $(DESTDIR)$(DOCDIR)/examples
++ install -m 0644 $(shell echo examples/diffserv/*) $(DESTDIR)$(DOCDIR)/examples/diffserv
++ @for i in $(SUBDIRS) doc; do $(MAKE) -C $$i install; done
++ @cd etc/iproute2; for i in *; do \
++ if [ ! -e $(DESTDIR)$(CONFDIR)/$$i ]; then \
++ echo install -m 0644 $$i $(DESTDIR)$(CONFDIR); \
++ install -m 0644 $$i $(DESTDIR)$(CONFDIR); fi; done
++
++clean:
++ for i in $(SUBDIRS) doc; \
++ do $(MAKE) -C $$i clean; done
++
++.EXPORT_ALL_VARIABLES:
+diff -Naur iproute2-orig/debian/README.Debian iproute2/debian/README.Debian
+--- iproute2-orig/debian/README.Debian 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/README.Debian 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,4 @@
++This version of "iproute" includes the HTB Linux queuing discipline
++explained in http://luxik.cdi.cz/~devik/qos/htb/
++
++You need kernel version 2.4.21 or newer in order to use it.
+diff -Naur iproute2-orig/debian/changelog iproute2/debian/changelog
+--- iproute2-orig/debian/changelog 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/changelog 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,207 @@
++iproute (20010824-13) unstable; urgency=low
++
++ * debian/rules: Run dpkg-shlibdeps with all the executables,
++ to fix dependency problem (closes: Bug#224063)
++ * Really removed references to obsolete include files
++ (Bug#223165 was not fixed properly)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 25 Jan 2004 23:04:20 +0100
++
++iproute (20010824-12) unstable; urgency=low
++
++ * Updated README.Debian and copyright file
++ * Added two new manpages from http://lartc.org/manpages/:
++ ip(8) and tc-cbq-details(8).
++ * Removed references to obsolete include files which made
++ compilation fail (closes: Bug#223165)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 14 Dec 2003 00:40:10 +0100
++
++iproute (20010824-11) unstable; urgency=low
++
++ * Changed priority to "optional"
++ * Fixed "tc -s qdisc" on sparc (patch by "Nicolas S. Dade"
++ <ndade@nsd.dyndns.org>) (closes: Bug#194128)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 17 Aug 2003 00:22:47 +0200
++
++iproute (20010824-10) unstable; urgency=low
++
++ * Updated manual pages from http://www.lartc.org/manpages/
++ (closes: Bug#156353, Bug#175313, Bug#176989, Bug#189095)
++ * New Standards-Version
++ * Don't "rm -rf /etc/iproute2" on purge (closes: Bug#202862)
++ * Include "iproute2" in the description (closes: Bug#182999)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 16 Aug 2003 18:29:27 +0200
++
++iproute (20010824-9) unstable; urgency=medium
++
++ * Added patch for HTB v3.6 to be able to work with kernel 2.4.20
++ (from http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz)
++ (closes: Bug#147550, Bug#167149, Bug#167597, Bug#171277)
++
++ -- Juan Cespedes <cespedes@debian.org> Thu, 05 Dec 2002 13:44:10 +0100
++
++iproute (20010824-8) unstable; urgency=medium
++
++ * Added support for HTB queuing discipline (closes: Bug#133381)
++ NOTE: you need a patched kernel in order to use it
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 2 Apr 2002 20:29:40 +0200
++
++iproute (20010824-7) unstable; urgency=medium
++
++ * Move `ip' binary to /bin to fix FHS violation (closes: Bug#134812)
++
++ -- Juan Cespedes <cespedes@debian.org> Mon, 4 Mar 2002 00:20:30 +0100
++
++iproute (20010824-6) unstable; urgency=low
++
++ * Added a couple of #ifdef's to be able to compile with older
++ kernel headers (needed for arm) (closes: Bug#131695)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 16 Feb 2002 19:27:15 +0100
++
++iproute (20010824-5) unstable; urgency=low
++
++ * Really fix Bug#121589 (dead gateway bug); apparently I
++ forgot to include the patch in 20010824-2
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 29 Jan 2002 23:22:24 +0100
++
++iproute (20010824-4) unstable; urgency=low
++
++ * Added support for DIFFSERV and ATM in tc
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 13 Jan 2002 03:01:47 +0100
++
++iproute (20010824-3) unstable; urgency=low
++
++ * Updated tc* man pages (thanks to bert hubert <ahu@ds9a.nl>)
++ * Fixed spurious space in `tc -s qdisc' output (closes: Bug#128501)
++
++ -- Juan Cespedes <cespedes@debian.org> Thu, 10 Jan 2002 22:18:25 +0100
++
++iproute (20010824-2) unstable; urgency=low
++
++ * Fixed the following important and serious bugs:
++ + iproute doesn't compile on Alpha (closes: Bug#118113, Bug#123224)
++ + iproute doesn't compile on MIPS (closes: Bug#118424)
++ + iproute doesn't compile on powerpc (closes: Bug#119601)
++ * Added man pages for tc (closes: Bug#124230), tc-cbq, tc-red, tc-tbf,
++ tc-prio and tc-sfq
++ * Removed references to old programs from iproute(7) (closes: Bug#99536)
++ * Fixed bug which presented first hop as dead in equal cost multipath
++ (closes: Bug#121589)
++ * Do not process .ps with through `psnup' (closes: Bug#119820)
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 8 Jan 2002 16:07:27 +0100
++
++iproute (20010824-1) unstable; urgency=low
++
++ * New upstream version
++ * Make ingress qdisc work again with tc (closes: Bug#84444)
++ * Make it compile properly with new include files (closes: Bug#113112)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 28 Oct 2001 16:38:00 +0100
++
++iproute (20001007-1) unstable; urgency=low
++
++ * New upstream version (closes: Bug#63701)
++ * Remove /etc/iproute2 on purge (closes: Bug#72743)
++ * Fixed Lintian warnings (no-priority-field and no-section-field)
++
++ -- Juan Cespedes <cespedes@debian.org> Sat, 14 Oct 2000 19:27:12 +0200
++
++iproute (991023-2) unstable; urgency=low
++
++ * New Standards-Version (3.1.1) (closes: Bug#47923)
++ * Modified description of package to show which kernel options are
++ necessary to use the package (closes: Bug#47922)
++ * Updated manual page to point at /usr/share/doc/iproute (closes: Bug#47924)
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 19 Dec 1999 04:00:21 +0100
++
++iproute (991023-1) unstable; urgency=low
++
++ * New upstream version (closes: Bug#48733)
++
++ -- Juan Cespedes <cespedes@debian.org> Tue, 2 Nov 1999 16:29:37 +0100
++
++iproute (990824-1) unstable; urgency=low
++
++ * New maintainer
++ * New upstream version
++ * New Standards-Version: 3.1.0
++ * Minor fix in "ip rule list": mask in "from" address was not shown
++ correctly
++ * Removed obsoleted documentation from "debian/" directory
++
++ -- Juan Cespedes <cespedes@debian.org> Sun, 24 Oct 1999 19:02:56 +0200
++
++iproute (990630-1) unstable; urgency=low
++
++ * New upstream version.
++ * FHS and standards 3.0.1.0.
++
++ -- Roberto Lumbreras <rover@debian.org> Tue, 3 Aug 1999 02:49:28 +0200
++
++iproute (990530-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.2.10 kernel headers.
++ * Install new scripts ip/routef ip/routel, but not ip/ifcfg ip/rtpr by
++ now, I don't know who/what needs rtpr; ifcfg uses arping, and it isn't
++ available in debian for now.
++
++ -- Roberto Lumbreras <rover@debian.org> Tue, 22 Jun 1999 02:28:53 +0200
++
++iproute (990329-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.2.5 kernel headers.
++
++ -- Roberto Lumbreras <rover@debian.org> Sun, 4 Apr 1999 18:50:39 +0200
++
++iproute (980630-1) unstable; urgency=low
++
++ * New upstream version.
++ * Build with 2.1.112 kernel headers.
++ * Rewrote the rules file.
++
++ -- Roberto Lumbreras <rover@debian.org> Wed, 29 Jul 1998 23:37:52 +0200
++
++iproute (980119-1) unstable; urgency=low
++
++ * Outdated documentation. Upstream docs are scarce.
++ * Non-Maintainer release
++ * This package has no correct copyright file!
++ * Include all the README.* docs from the upstream site.
++ * Modified to build under glibc
++ * Build with 2.1.85 kernel headers.
++ * produce a correct diff.
++ * Reworked the rules file to utilize debmake fully
++ * Newest upstream release
++ * glibc compilation
++
++ -- Christoph Lameter <christoph@lameter.com> Wed, 4 Feb 1998 13:37:28 -0800
++
++iproute (961225-2) unstable frozen; urgency=low
++
++ * Added a man page for iproute. (Fixes #8080).
++ * Removed out-of-date patches.
++ * Added routing.txt from /usr/src/linux/Documentation/networking/routing.txt
++ * Newer version of debmake.
++
++ -- Tom Lees <tom@lpsg.demon.co.uk> Mon, 17 Apr 1997 17:00:36 +0100
++
++iproute (961225-1) unstable; urgency=low
++
++ * Initial Release.
++
++ -- Tom Lees <tom@lpsg.demon.co.uk> Mon, 30 Dec 1996 11:12:23 +0000
++
++Local variables:
++mode: debian-changelog
++End:
+diff -Naur iproute2-orig/debian/conffiles iproute2/debian/conffiles
+--- iproute2-orig/debian/conffiles 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/conffiles 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,5 @@
++/etc/iproute2/rt_dsfield
++/etc/iproute2/rt_protos
++/etc/iproute2/rt_realms
++/etc/iproute2/rt_scopes
++/etc/iproute2/rt_tables
+diff -Naur iproute2-orig/debian/control iproute2/debian/control
+--- iproute2-orig/debian/control 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/control 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,19 @@
++Source: iproute
++Section: net
++Priority: optional
++Maintainer: Juan Cespedes <cespedes@debian.org>
++Standards-Version: 3.6.0
++Build-Depends: tetex-bin, atm-dev
++
++Package: iproute
++Architecture: any
++Depends: ${shlibs:Depends}
++Description: Professional tools to control the networking in Linux kernels
++ This is `iproute', the professional set of tools to control the
++ networking behavior in kernels 2.2.x and later.
++ .
++ At least, the options CONFIG_NETLINK and CONFIG_RTNETLINK must
++ be compiled in the running kernel
++ .
++ This package is also known as iproute2 upstream and in some
++ documentation.
+diff -Naur iproute2-orig/debian/copyright iproute2/debian/copyright
+--- iproute2-orig/debian/copyright 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/copyright 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,42 @@
++This is the Debian GNU/Linux's prepackaged version of the
++Linux Traffic Control engine and related utils, "iproute"
++
++This package was put together from sources obtained from:
++ ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.4.7-now-ss010824.tar.gz
++
++Changes for Debian:
++ * added Debian GNU/Linux package maintenance system files
++ * Added HTB v3.6 from
++ <http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz>
++
++
++Copyrights
++----------
++Copyright (C) 1996-2001 Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
++
++Modifications for Debian:
++ Copyright (C) 1996 Tom Lees <tom@lpsg.demon.co.uk>
++ Copyright (C) 1998 Christoph Lameter <christoph@lameter.com>
++ Copyright (C) 1998-1999 Roberto Lumbreras <rover@debian.org>
++ Copyright (C) 1999-2003 Juan Cespedes <cespedes@debian.org>
++
++
++License
++-------
++
++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, 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.
++
++A copy of the GNU General Public License is available as
++`/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
++or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
++You can also obtain it by writing to the Free Software Foundation,
++Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
++
+diff -Naur iproute2-orig/debian/manpages/ip.8 iproute2/debian/manpages/ip.8
+--- iproute2-orig/debian/manpages/ip.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/ip.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,1809 @@
++.TH IP 8 "17 January 2002" "iproute2" "Linux"
++.SH NAME
++ip \- show / manipulate routing, devices, policy routing and tunnels
++.SH SYNOPSIS
++
++.ad l
++.in +8
++.ti -8
++.B ip
++.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
++.BR help " }"
++.sp
++
++.ti -8
++.IR OBJECT " := { "
++.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
++maddr " | " mroute " | " monitor " }"
++.sp
++
++.ti -8
++.IR OPTIONS " := { "
++\fB\-V\fR[\fIersion\fR] |
++\fB\-s\fR[\fItatistics\fR] |
++\fB\-r\fR[\fIesolve\fR] |
++\fB\-f\fR[\fIamily\fR] {
++.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
++\fB\-o\fR[\fIneline\fR] }
++
++.ti -8
++.BI "ip link set " DEVICE
++.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
++.br
++.BR promisc " { " on " | " off " } |"
++.br
++.BR allmulti " { " on " | " off " } |"
++.br
++.BR dynamic " { " on " | " off " } |"
++.br
++.BR multicast " { " on " | " off " } |"
++.br
++.B txqueuelen
++.IR PACKETS " |"
++.br
++.B name
++.IR NEWNAME " |"
++.br
++.B address
++.IR LLADDR " |"
++.B broadcast
++.IR LLADDR " |"
++.br
++.B mtu
++.IR MTU " }"
++
++.ti -8
++.B ip link show
++.RI "[ " DEVICE " ]"
++
++.ti -8
++.BR "ip addr" " { " add " | " del " } "
++.IB IFADDR " dev " STRING
++
++.ti -8
++.BR "ip addr" " { " show " | " flush " } [ " dev
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ] [ "
++.B to
++.IR PREFIX " ] [ " FLAG-LIST " ] [ "
++.B label
++.IR PATTERN " ]"
++
++.ti -8
++.IR IFADDR " := " PREFIX " | " ADDR
++.B peer
++.IR PREFIX " [ "
++.B broadcast
++.IR ADDR " ] [ "
++.B anycast
++.IR ADDR " ] [ "
++.B label
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ]"
++
++.ti -8
++.IR SCOPE-ID " := "
++.RB "[ " host " | " link " | " global " | "
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
++
++.ti -8
++.IR FLAG " := "
++.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
++tentative " | " deprecated " ]"
++
++.ti -8
++.BR "ip route" " { "
++.BR list " | " flush " } "
++.I SELECTOR
++
++.ti -8
++.B ip route get
++.IR ADDRESS " [ "
++.BI from " ADDRESS " iif " STRING"
++.RB " ] [ " oif
++.IR STRING " ] [ "
++.B tos
++.IR TOS " ]"
++
++.ti -8
++.BR "ip route" " { " add " | " del " | " change " | " append " | "\
++replace " | " monitor " } "
++.I ROUTE
++
++.ti -8
++.IR SELECTOR " := "
++.RB "[ " root
++.IR PREFIX " ] [ "
++.B match
++.IR PREFIX " ] [ "
++.B exact
++.IR PREFIX " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B type
++.IR TYPE " ] [ "
++.B scope
++.IR SCOPE " ]"
++
++.ti -8
++.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
++
++.ti -8
++.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
++.B tos
++.IR TOS " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B scope
++.IR SCOPE " ] [ "
++.B metric
++.IR METRIC " ]"
++
++.ti -8
++.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
++.B nexthop
++.IR NH " ] ..."
++
++.ti -8
++.IR NH " := [ "
++.B via
++.IR ADDRESS " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B weight
++.IR NUMBER " ] " NHFLAGS
++
++.ti -8
++.IR OPTIONS " := " FLAGS " [ "
++.B mtu
++.IR NUMBER " ] [ "
++.B advmss
++.IR NUMBER " ] [ "
++.B rtt
++.IR NUMBER " ] [ "
++.B rttvar
++.IR NUMBER " ] [ "
++.B window
++.IR NUMBER " ] [ "
++.B cwnd
++.IR NUMBER " ] [ "
++.B ssthresh
++.IR REALM " ] [ "
++.B realms
++.IR REALM " ]"
++
++.ti -8
++.IR TYPE " := [ "
++.BR unicast " | " local " | " broadcast " | " multicast " | "\
++throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local "| " main " | " default " | " all " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR SCOPE " := [ "
++.BR host " | " link " | " global " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAGS " := [ "
++.BR equalize " ]"
++
++.ti -8
++.IR NHFLAGS " := [ "
++.BR onlink " | " pervasive " ]"
++
++.ti -8
++.IR RTPROTO " := [ "
++.BR kernel " | " boot " | " static " |"
++.IR NUMBER " ]"
++
++.ti -8
++.B ip rule
++.RB " [ " list " | " add " | " del " ]"
++.I SELECTOR ACTION
++
++.ti -8
++.IR SELECTOR " := [ "
++.B from
++.IR PREFIX " ] [ "
++.B to
++.IR PREFIX " ] [ "
++.B tos
++.IR TOS " ] [ "
++.B fwmark
++.IR FWMARK " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B pref
++.IR NUMBER " ]"
++
++.ti -8
++.IR ACTION " := [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B nat
++.IR ADDRESS " ] [ "
++.BR prohibit " | " reject " | " unreachable " ] [ " realms
++.RI "[" SRCREALM "/]" DSTREALM " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local " | " main " | " default " |"
++.IR NUMBER " ]"
++
++.ti -8
++.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
++.IR ADDR " [ "
++.B lladdr
++.IR LLADDR " ] [ "
++.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
++.IR ADDR " } [ "
++.B dev
++.IR DEV " ]"
++
++.ti -8
++.BR "ip neigh" " { " show " | " flush " } [ " to
++.IR PREFIX " ] [ "
++.B dev
++.IR DEV " ] [ "
++.B nud
++.IR STATE " ]"
++
++.ti -8
++.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
++.RI "[ " NAME " ]"
++.br
++.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
++.br
++.RB "[ " remote
++.IR ADDR " ] [ "
++.B local
++.IR ADDR " ]"
++.br
++.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
++.IR KEY " ] [ "
++.RB "[" i "|" o "]" csum " ] ]"
++.br
++.RB "[ " ttl
++.IR TTL " ] [ "
++.B tos
++.IR TOS " ] [ "
++.RB "[" no "]" pmtudisc " ]"
++.br
++.RB "[ " dev
++.IR PHYS_DEV " ]"
++
++.ti -8
++.IR ADDR " := { " IP_ADDRESS " |"
++.BR any " }"
++
++.ti -8
++.IR TOS " := { " NUMBER " |"
++.BR inherit " }"
++
++.ti -8
++.IR TTL " := { " 1 ".." 255 " | "
++.BR inherit " }"
++
++.ti -8
++.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
++
++.ti -8
++.BR "ip maddr" " [ " add " | " del " ]"
++.IB MULTIADDR " dev " STRING
++
++.ti -8
++.BR "ip maddr show" " [ " dev
++.IR STRING " ]"
++
++.ti -8
++.BR "ip mroute show" " ["
++.IR PREFIX " ] [ "
++.B from
++.IR PREFIX " ] [ "
++.B iif
++.IR DEVICE " ]"
++
++.ti -8
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++.in -8
++.ad b
++
++.SH OPTIONS
++
++.TP
++.BR "\-V" , " -Version"
++print the version of the
++.B ip
++utility and exit.
++
++.TP
++.BR "\-s" , " \-stats", " \-statistics"
++output more information. If the option
++appears twice or more, the amount of information increases.
++As a rule, the information is statistics or some time values.
++
++.TP
++.BR "\-f" , " \-family"
++followed by protocol family identifier:
++.BR "inet" , " inet6"
++or
++.B link
++,enforce the protocol family to use. If the option is not present,
++the protocol family is guessed from other arguments. If the rest
++of the command line does not give enough information to guess the
++family,
++.B ip
++falls back to the default one, usually
++.B inet
++or
++.BR "any" .
++.B link
++is a special family identifier meaning that no networking protocol
++is involved.
++
++.TP
++.B \-4
++shortcut for
++.BR "-family inet" .
++
++.TP
++.B \-6
++shortcut for
++.BR "\-family inet6" .
++
++.TP
++.B \-0
++shortcut for
++.BR "\-family link" .
++
++.TP
++.BR "\-o" , " \-oneline"
++output each record on a single line, replacing line feeds
++with the
++.B '\'
++character. This is convenient when you want to count records
++with
++.BR wc (1)
++ or to
++.BR grep (1)
++the output.
++
++.TP
++.BR "\-r" , " \-resolve"
++use the system's name resolver to print DNS names instead of
++host addresses.
++
++.SH IP - COMMAND SYNTAX
++
++.SS
++.I OBJECT
++
++.TP
++.B link
++- network device.
++
++.TP
++.B address
++- protocol (IP or IPv6) address on a device.
++.TP
++.B neighbour
++- ARP or NDISC cache entry.
++
++.TP
++.B route
++- routing table entry.
++
++.TP
++.B rule
++- rule in routing policy database.
++
++.TP
++.B maddress
++- multicast address.
++
++.TP
++.B mroute
++- multicast routing cache entry.
++
++.TP
++.B tunnel
++- tunnel over IP.
++
++.PP
++The names of all objects may be written in full or
++abbreviated form, f.e.
++.B address
++is abbreviated as
++.B addr
++or just
++.B a.
++
++.SS
++.I COMMAND
++
++Specifies the action to perform on the object.
++The set of possible actions depends on the object type.
++As a rule, it is possible to
++.BR "add" , " delete"
++and
++.B show
++(or
++.B list
++) objects, but some objects do not allow all of these operations
++or have some additional commands. The
++.B help
++command is available for all objects. It prints
++out a list of available commands and argument syntax conventions.
++.sp
++If no command is given, some default command is assumed.
++Usually it is
++.B list
++or, if the objects of this class cannot be listed,
++.BR "help" .
++
++.SH ip link - network device configuration
++
++.B link
++is a network device and the corresponding commands
++display and change the state of devices.
++
++.SS ip link set - change device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies network device to operate on.
++
++.TP
++.BR up " and " down
++change the state of the device to
++.B UP
++or
++.BR "DOWN" .
++
++.TP
++.BR "arp on " or " arp off"
++change the
++.B NOARP
++flag on the device.
++
++.TP
++.BR "multicast on " or " multicast off"
++change the
++.B MULTICAST
++flag on the device.
++
++.TP
++.BR "dynamic on " or " dynamic off"
++change the
++.B DYNAMIC
++flag on the device.
++
++.TP
++.BI name " NAME"
++change the name of the device. This operation is not
++recommended if the device is running or has some addresses
++already configured.
++
++.TP
++.BI txqueuelen " NUMBER"
++.TP
++.BI txqlen " NUMBER"
++change the transmit queue length of the device.
++
++.TP
++.BI mtu " NUMBER"
++change the
++.I MTU
++of the device.
++
++.TP
++.BI address " LLADDRESS"
++change the station address of the interface.
++
++.TP
++.BI broadcast " LLADDRESS"
++.TP
++.BI brd " LLADDRESS"
++.TP
++.BI peer " LLADDRESS"
++change the link layer broadcast address or the peer address when
++the interface is
++.IR "POINTOPOINT" .
++
++.PP
++.B Warning:
++If multiple parameter changes are requested,
++.B ip
++aborts immediately after any of the changes have failed.
++This is the only case when
++.B ip
++can move the system to an unpredictable state. The solution
++is to avoid changing several parameters with one
++.B ip link set
++call.
++
++.SS ip link show - display device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies the network device to show.
++If this argument is omitted all devices are listed.
++
++.TP
++.B up
++only display running interfaces.
++
++.SH ip address - protocol address management.
++
++The
++.B address
++is a protocol (IP or IPv6) address attached
++to a network device. Each device must have at least one address
++to use the corresponding protocol. It is possible to have several
++different addresses attached to one device. These addresses are not
++discriminated, so that the term
++.B alias
++is not quite appropriate for them and we do not use it in this document.
++.sp
++The
++.B ip addr
++command displays addresses and their properties, adds new addresses
++and deletes old ones.
++
++.SS ip address add - add new protocol address.
++
++.TP
++.BI dev " NAME"
++the name of the device to add the address to.
++
++.TP
++.BI local " ADDRESS " (default)
++the address of the interface. The format of the address depends
++on the protocol. It is a dotted quad for IP and a sequence of
++hexadecimal halfwords separated by colons for IPv6. The
++.I ADDRESS
++may be followed by a slash and a decimal number which encodes
++the network prefix length.
++
++.TP
++.BI peer " ADDRESS"
++the address of the remote endpoint for pointopoint interfaces.
++Again, the
++.I ADDRESS
++may be followed by a slash and a decimal number, encoding the network
++prefix length. If a peer address is specified, the local address
++cannot have a prefix length. The network prefix is associated
++with the peer rather than with the local address.
++
++.TP
++.BI broadcast " ADDRESS"
++the broadcast address on the interface.
++.sp
++It is possible to use the special symbols
++.B '+'
++and
++.B '-'
++instead of the broadcast address. In this case, the broadcast address
++is derived by setting/resetting the host bits of the interface prefix.
++
++.TP
++.BI label " NAME"
++Each address may be tagged with a label string.
++In order to preserve compatibility with Linux-2.0 net aliases,
++this string must coincide with the name of the device or must be prefixed
++with the device name followed by colon.
++
++.TP
++.BI scope " SCOPE_VALUE"
++the scope of the area where this address is valid.
++The available scopes are listed in file
++.BR "/etc/iproute2/rt_scopes" .
++Predefined scope values are:
++
++.in +8
++.B global
++- the address is globally valid.
++.sp
++.B site
++- (IPv6 only) the address is site local, i.e. it is
++valid inside this site.
++.sp
++.B link
++- the address is link local, i.e. it is valid only on this device.
++.sp
++.B host
++- the address is valid only inside this host.
++.in -8
++
++.SS ip address delete - delete protocol address
++.B Arguments:
++coincide with the arguments of
++.B ip addr add.
++The device name is a required argument. The rest are optional.
++If no arguments are given, the first address is deleted.
++
++.SS ip address show - look at protocol addresses
++
++.TP
++.BI dev " NAME " (default)
++name of device.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list addresses with this scope.
++
++.TP
++.BI to " PREFIX"
++only list addresses matching this prefix.
++
++.TP
++.BI label " PATTERN"
++only list addresses with labels matching the
++.IR "PATTERN" .
++.I PATTERN
++is a usual shell style pattern.
++
++.TP
++.BR dynamic " and " permanent
++(IPv6 only) only list addresses installed due to stateless
++address configuration or only list permanent (not dynamic)
++addresses.
++
++.TP
++.B tentative
++(IPv6 only) only list addresses which did not pass duplicate
++address detection.
++
++.TP
++.B deprecated
++(IPv6 only) only list deprecated addresses.
++
++.TP
++.BR primary " and " secondary
++only list primary (or secondary) addresses.
++
++.SS ip address flush - flush protocol addresses
++This command flushes the protocol addresses selected by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The difference is that it does not run when no arguments are given.
++
++.PP
++.B Warning:
++This command (and other
++.B flush
++commands described below) is pretty dangerous. If you make a mistake,
++it will not forgive it, but will cruelly purge all the addresses.
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of deleted
++addresses and the number of rounds made to flush the address list. If
++this option is given twice,
++.B ip addr flush
++also dumps all the deleted addresses in the format described in the
++previous subsection.
++
++.SH ip neighbour - neighbour/arp tables management.
++
++.B neighbour
++objects establish bindings between protocol addresses and
++link layer addresses for hosts sharing the same link.
++Neighbour entries are organized into tables. The IPv4 neighbour table
++is known by another name - the ARP table.
++
++.P
++The corresponding commands display neighbour bindings
++and their properties, add new neighbour entries and delete old ones.
++
++.SS ip neighbour add - add a new neighbour entry
++.SS ip neighbour change - change an existing entry
++.SS ip neighbour replace - add a new entry or change an existing one
++
++These commands create new neighbour records or update existing ones.
++
++.TP
++.BI to " ADDRESS " (default)
++the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
++
++.TP
++.BI dev " NAME"
++the interface to which this neighbour is attached.
++
++.TP
++.BI lladdr " LLADDRESS"
++the link layer address of the neighbour.
++.I LLADDRESS
++can also be
++.BR "null" .
++
++.TP
++.BI nud " NUD_STATE"
++the state of the neighbour entry.
++.B nud
++is an abbreviation for 'Neigh bour Unreachability Detection'.
++The state can take one of the following values:
++
++.in +8
++.B permanent
++- the neighbour entry is valid forever and can be only
++be removed administratively.
++.sp
++
++.B noarp
++- the neighbour entry is valid. No attempts to validate
++this entry will be made but it can be removed when its lifetime expires.
++.sp
++
++.B reachable
++- the neighbour entry is valid until the reachability
++timeout expires.
++.sp
++
++.B stale
++- the neighbour entry is valid but suspicious.
++This option to
++.B ip neigh
++does not change the neighbour state if it was valid and the address
++is not changed by this command.
++.in -8
++
++.SS ip neighbour delete - delete a neighbour entry
++This command invalidates a neighbour entry.
++
++.PP
++The arguments are the same as with
++.BR "ip neigh add" ,
++except that
++.B lladdr
++and
++.B nud
++are ignored.
++
++.PP
++.B Warning:
++Attempts to delete or manually change a
++.B noarp
++entry created by the kernel may result in unpredictable behaviour.
++Particularly, the kernel may try to resolve this address even
++on a
++.B NOARP
++interface or if the address is multicast or broadcast.
++
++.SS ip neighbour show - list neighbour entries
++
++This commands displays neighbour tables.
++
++.TP
++.BI to " ADDRESS " (default)
++the prefix selecting the neighbours to list.
++
++.TP
++.BI dev " NAME"
++only list the neighbours attached to this device.
++
++.TP
++.B unused
++only list neighbours which are not currently in use.
++
++.TP
++.BI nud " NUD_STATE"
++only list neighbour entries in this state.
++.I NUD_STATE
++takes values listed below or the special value
++.B all
++which means all states. This option may occur more than once.
++If this option is absent,
++.B ip
++lists all entries except for
++.B none
++and
++.BR "noarp" .
++
++.SS ip neighbour flush - flush neighbour entries
++This command flushes neighbour tables, selecting
++entries to flush by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The differences are that it does not run when no arguments are given,
++and that the default neighbour states to be flushed do not include
++.B permanent
++and
++.BR "noarp" .
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted neighbours and the number of rounds made to flush the
++neighbour table. If the option is given
++twice,
++.B ip neigh flush
++also dumps all the deleted neighbours.
++
++.SH ip route - routing table management
++Manipulate route entries in the kernel routing tables keep
++information about paths to other networked nodes.
++.sp
++.B Route types:
++
++.in +8
++.B unicast
++- the route entry describes real paths to the destinations covered
++by the route prefix.
++
++.sp
++.B unreachable
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I host unreachable
++is generated.
++The local senders get an
++.I EHOSTUNREACH
++error.
++
++.sp
++.B blackhole
++- these destinations are unreachable. Packets are discarded silently.
++The local senders get an
++.I EINVAL
++error.
++
++.sp
++.B prohibit
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I communication administratively prohibited
++is generated. The local senders get an
++.I EACCES
++error.
++
++.sp
++.B local
++- the destinations are assigned to this host. The packets are looped
++back and delivered locally.
++
++.sp
++.B broadcast
++- the destinations are broadcast addresses. The packets are sent as
++link broadcasts.
++
++.sp
++.B throw
++- a special control route used together with policy rules. If such a
++route is selected, lookup in this table is terminated pretending that
++no route was found. Without policy routing it is equivalent to the
++absence of the route in the routing table. The packets are dropped
++and the ICMP message
++.I net unreachable
++is generated. The local senders get an
++.I ENETUNREACH
++error.
++
++.sp
++.B nat
++- a special NAT route. Destinations covered by the prefix
++are considered to be dummy (or external) addresses which require translation
++to real (or internal) ones before forwarding. The addresses to translate to
++are selected with the attribute
++.BR "via" .
++
++.sp
++.B anycast
++.RI "- " "not implemented"
++the destinations are
++.I anycast
++addresses assigned to this host. They are mainly equivalent
++to
++.B local
++with one difference: such addresses are invalid when used
++as the source address of any packet.
++
++.sp
++.B multicast
++- a special type used for multicast routing. It is not present in
++normal routing tables.
++.in -8
++
++.P
++.B Route tables:
++Linux-2.x can pack routes into several routing
++tables identified by a number in the range from 1 to 255 or by
++name from the file
++.B /etc/iproute2/rt_tables
++. By default all normal routes are inserted into the
++.B main
++table (ID 254) and the kernel only uses this table when calculating routes.
++
++.sp
++Actually, one other table always exists, which is invisible but
++even more important. It is the
++.B local
++table (ID 255). This table
++consists of routes for local and broadcast addresses. The kernel maintains
++this table automatically and the administrator usually need not modify it
++or even look at it.
++
++The multiple routing tables enter the game when
++.I policy routing
++is used.
++
++.SS ip route add - add new route
++.SS ip route change - change route
++.SS ip route replace - change or add new one
++
++.TP
++.BI to " TYPE PREFIX " (default)
++the destination prefix of the route. If
++.I TYPE
++is omitted,
++.B ip
++assumes type
++.BR "unicast" .
++Other values of
++.I TYPE
++are listed above.
++.I PREFIX
++is an IP or IPv6 address optionally followed by a slash and the
++prefix length. If the length of the prefix is missing,
++.B ip
++assumes a full-length host route. There is also a special
++.I PREFIX
++.B default
++- which is equivalent to IP
++.B 0/0
++or to IPv6
++.BR "::/0" .
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service (TOS) key. This key has no associated mask and
++the longest match is understood as: First, compare the TOS
++of the route and of the packet. If they are not equal, then the packet
++may still match a route with a zero TOS.
++.I TOS
++is either an 8 bit hexadecimal number or an identifier
++from
++.BR "/etc/iproute2/rt_dsfield" .
++
++.TP
++.BI metric " NUMBER"
++.TP
++.BI preference " NUMBER"
++the preference value of the route.
++.I NUMBER
++is an arbitrary 32bit number.
++
++.TP
++.BI table " TABLEID"
++the table to add this route to.
++.I TABLEID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_tables" .
++If this parameter is omitted,
++.B ip
++assumes the
++.B main
++table, with the exception of
++.BR local " , " broadcast " and " nat
++routes, which are put into the
++.B local
++table by default.
++
++.TP
++.BI dev " NAME"
++the output device name.
++
++.TP
++.BI via " ADDRESS"
++the address of the nexthop router. Actually, the sense of this field
++depends on the route type. For normal
++.B unicast
++routes it is either the true next hop router or, if it is a direct
++route installed in BSD compatibility mode, it can be a local address
++of the interface. For NAT routes it is the first address of the block
++of translated IP destinations.
++
++.TP
++.BI src " ADDRESS"
++the source address to prefer when sending to the destinations
++covered by the route prefix.
++
++.TP
++.BI realm " REALMID"
++the realm to which this route is assigned.
++.I REALMID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_realms" .
++
++.TP
++.BI mtu " MTU"
++.TP
++.BI "mtu lock" " MTU"
++the MTU along the path to the destination. If the modifier
++.B lock
++is not used, the MTU may be updated by the kernel due to
++Path MTU Discovery. If the modifier
++.B lock
++is used, no path MTU discovery will be tried, all packets
++will be sent without the DF bit in IPv4 case or fragmented
++to MTU for IPv6.
++
++.TP
++.BI window " NUMBER"
++the maximal window for TCP to advertise to these destinations,
++measured in bytes. It limits maximal data bursts that our TCP
++peers are allowed to send to us.
++
++.TP
++.BI rtt " NUMBER"
++the initial RTT ('Round Trip Time') estimate.
++
++.TP
++.BI rttvar " NUMBER " "(2.3.15+ only)"
++the initial RTT variance estimate.
++
++.TP
++.BI ssthresh " NUMBER " "(2.3.15+ only)"
++an estimate for the initial slow start threshold.
++
++.TP
++.BI cwnd " NUMBER " "(2.3.15+ only)"
++the clamp for congestion window. It is ignored if the
++.B lock
++flag is not used.
++
++.TP
++.BI advmss " NUMBER " "(2.3.15+ only)"
++the MSS ('Maximal Segment Size') to advertise to these
++destinations when establishing TCP connections. If it is not given,
++Linux uses a default value calculated from the first hop device MTU.
++(If the path to these destination is asymmetric, this guess may be wrong.)
++
++.TP
++.BI reordering " NUMBER " "(2.3.15+ only)"
++Maximal reordering on the path to this destination.
++If it is not given, Linux uses the value selected with
++.B sysctl
++variable
++.BR "net/ipv4/tcp_reordering" .
++
++.TP
++.BI nexthop " NEXTHOP"
++the nexthop of a multipath route.
++.I NEXTHOP
++is a complex value with its own syntax similar to the top level
++argument lists:
++
++.in +8
++.BI via " ADDRESS"
++- is the nexthop router.
++.sp
++
++.BI dev " NAME"
++- is the output device.
++.sp
++
++.BI weight " NUMBER"
++- is a weight for this element of a multipath
++route reflecting its relative bandwidth or quality.
++.in -8
++
++.TP
++.BI scope " SCOPE_VAL"
++the scope of the destinations covered by the route prefix.
++.I SCOPE_VAL
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_scopes" .
++If this parameter is omitted,
++.B ip
++assumes scope
++.B global
++for all gatewayed
++.B unicast
++routes, scope
++.B link
++for direct
++.BR unicast " and " broadcast
++routes and scope
++.BR host " for " local
++routes.
++
++.TP
++.BI protocol " RTPROTO"
++the routing protocol identifier of this route.
++.I RTPROTO
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_protos" .
++If the routing protocol ID is not given,
++.B ip assumes protocol
++.B boot
++(i.e. it assumes the route was added by someone who doesn't
++understand what they are doing). Several protocol values have
++a fixed interpretation.
++Namely:
++
++.in +8
++.B redirect
++- the route was installed due to an ICMP redirect.
++.sp
++
++.B kernel
++- the route was installed by the kernel during autoconfiguration.
++.sp
++
++.B boot
++- the route was installed during the bootup sequence.
++If a routing daemon starts, it will purge all of them.
++.sp
++
++.B static
++- the route was installed by the administrator
++to override dynamic routing. Routing daemon will respect them
++and, probably, even advertise them to its peers.
++.sp
++
++.B ra
++- the route was installed by Router Discovery protocol.
++.in -8
++
++.sp
++The rest of the values are not reserved and the administrator is free
++to assign (or not to assign) protocol tags.
++
++.TP
++.B onlink
++pretend that the nexthop is directly attached to this link,
++even if it does not match any interface prefix.
++
++.TP
++.B equalize
++allow packet by packet randomization on multipath routes.
++Without this modifier, the route will be frozen to one selected
++nexthop, so that load splitting will only occur on per-flow base.
++.B equalize
++only works if the kernel is patched.
++
++.SS ip route delete - delete route
++
++.B ip route del
++has the same arguments as
++.BR "ip route add" ,
++but their semantics are a bit different.
++
++Key values
++.RB "(" to ", " tos ", " preference " and " table ")"
++select the route to delete. If optional attributes are present,
++.B ip
++verifies that they coincide with the attributes of the route to delete.
++If no route with the given key and attributes was found,
++.B ip route del
++fails.
++
++.SS ip route show - list routes
++the command displays the contents of the routing tables or the route(s)
++selected by some criteria.
++
++.TP
++.BI to " SELECTOR " (default)
++only select routes from the given range of destinations.
++.I SELECTOR
++consists of an optional modifier
++.RB "(" root ", " match " or " exact ")"
++and a prefix.
++.BI root " PREFIX"
++selects routes with prefixes not shorter than
++.IR PREFIX "."
++F.e.
++.BI root " 0/0"
++selects the entire routing table.
++.BI match " PREFIX"
++selects routes with prefixes not longer than
++.IR PREFIX "."
++F.e.
++.BI match " 10.0/16"
++selects
++.IR 10.0/16 ","
++.IR 10/8 " and " 0/0 ,
++but it does not select
++.IR 10.1/16 " and " 10.0.0/24 .
++And
++.BI exact " PREFIX"
++(or just
++.IR PREFIX ")"
++selects routes with this exact prefix. If neither of these options
++are present,
++.B ip
++assumes
++.BI root " 0/0"
++i.e. it lists the entire table.
++
++.TP
++.BI tos " TOS"
++.BI dsfield " TOS"
++only select routes with the given TOS.
++
++.TP
++.BI table " TABLEID"
++show the routes from this table(s). The default setting is to show
++.BR table main "."
++.I TABLEID
++may either be the ID of a real table or one of the special values:
++.sp
++.in +8
++.B all
++- list all of the tables.
++.sp
++.B cache
++- dump the routing cache.
++.in -8
++
++.TP
++.B cloned
++.TP
++.B cached
++list cloned routes i.e. routes which were dynamically forked from
++other routes because some route attribute (f.e. MTU) was updated.
++Actually, it is equivalent to
++.BR "table cache" "."
++
++.TP
++.BI from " SELECTOR"
++the same syntax as for
++.BR to ","
++but it binds the source address range rather than destinations.
++Note that the
++.B from
++option only works with cloned routes.
++
++.TP
++.BI protocol " RTPROTO"
++only list routes of this protocol.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list routes with this scope.
++
++.TP
++.BI type " TYPE"
++only list routes of this type.
++
++.TP
++.BI dev " NAME"
++only list routes going via this device.
++
++.TP
++.BI via " PREFIX"
++only list routes going via the nexthop routers selected by
++.IR PREFIX "."
++
++.TP
++.BI src " PREFIX"
++only list routes with preferred source addresses selected
++by
++.IR PREFIX "."
++
++.TP
++.BI realm " REALMID"
++.TP
++.BI realms " FROMREALM/TOREALM"
++only list routes with these realms.
++
++.SS ip route flush - flush routing tables
++this command flushes routes selected by some criteria.
++
++.sp
++The arguments have the same syntax and semantics as the arguments of
++.BR "ip route show" ,
++but routing tables are not listed but purged. The only difference is
++the default action:
++.B show
++dumps all the IP main routing table but
++.B flush
++prints the helper page.
++
++.sp
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted routes and the number of rounds made to flush the routing
++table. If the option is given
++twice,
++.B ip route flush
++also dumps all the deleted routes in the format described in the
++previous subsection.
++
++.SS ip route get - get a single route
++this command gets a single route to a destination and prints its
++contents exactly as the kernel sees it.
++
++.TP
++.BI to " ADDRESS " (default)
++the destination address.
++
++.TP
++.BI from " ADDRESS"
++the source address.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service.
++
++.TP
++.BI iif " NAME"
++the device from which this packet is expected to arrive.
++
++.TP
++.BI oif " NAME"
++force the output device on which this packet will be routed.
++
++.TP
++.B connected
++if no source address
++.RB "(option " from ")"
++was given, relookup the route with the source set to the preferred
++address received from the first lookup.
++If policy routing is used, it may be a different route.
++
++.P
++Note that this operation is not equivalent to
++.BR "ip route show" .
++.B show
++shows existing routes.
++.B get
++resolves them and creates new clones if necessary. Essentially,
++.B get
++is equivalent to sending a packet along this path.
++If the
++.B iif
++argument is not given, the kernel creates a route
++to output packets towards the requested destination.
++This is equivalent to pinging the destination
++with a subsequent
++.BR "ip route ls cache" ,
++however, no packets are actually sent. With the
++.B iif
++argument, the kernel pretends that a packet arrived from this interface
++and searches for a path to forward the packet.
++
++.SH ip rule - routing policy database management
++
++.BR "Rule" s
++in the routing policy database control the route selection algorithm.
++
++.P
++Classic routing algorithms used in the Internet make routing decisions
++based only on the destination address of packets (and in theory,
++but not in practice, on the TOS field).
++
++.P
++In some circumstances we want to route packets differently depending not only
++on destination addresses, but also on other packet fields: source address,
++IP protocol, transport protocol ports or even packet payload.
++This task is called 'policy routing'.
++
++.P
++To solve this task, the conventional destination based routing table, ordered
++according to the longest match rule, is replaced with a 'routing policy
++database' (or RPDB), which selects routes by executing some set of rules.
++
++.P
++Each policy routing rule consists of a
++.B selector
++and an
++.B action predicate.
++The RPDB is scanned in the order of increasing priority. The selector
++of each rule is applied to {source address, destination address, incoming
++interface, tos, fwmark} and, if the selector matches the packet,
++the action is performed. The action predicate may return with success.
++In this case, it will either give a route or failure indication
++and the RPDB lookup is terminated. Otherwise, the RPDB program
++continues on the next rule.
++
++.P
++Semantically, natural action is to select the nexthop and the output device.
++
++.P
++At startup time the kernel configures the default RPDB consisting of three
++rules:
++
++.TP
++1.
++Priority: 0, Selector: match anything, Action: lookup routing
++table
++.B local
++(ID 255).
++The
++.B local
++table is a special routing table containing
++high priority control routes for local and broadcast addresses.
++.sp
++Rule 0 is special. It cannot be deleted or overridden.
++
++.TP
++2.
++Priority: 32766, Selector: match anything, Action: lookup routing
++table
++.B main
++(ID 254).
++The
++.B main
++table is the normal routing table containing all non-policy
++routes. This rule may be deleted and/or overridden with other
++ones by the administrator.
++
++.TP
++3.
++Priority: 32767, Selector: match anything, Action: lookup routing
++table
++.B default
++(ID 253).
++The
++.B default
++table is empty. It is reserved for some post-processing if no previous
++default rules selected the packet.
++This rule may also be deleted.
++
++.P
++Each RPDB entry has additional
++attributes. F.e. each rule has a pointer to some routing
++table. NAT and masquerading rules have an attribute to select new IP
++address to translate/masquerade. Besides that, rules have some
++optional attributes, which routes have, namely
++.BR "realms" .
++These values do not override those contained in the routing tables. They
++are only used if the route did not select any attributes.
++
++.sp
++The RPDB may contain rules of the following types:
++
++.in +8
++.B unicast
++- the rule prescribes to return the route found
++in the routing table referenced by the rule.
++
++.B blackhole
++- the rule prescribes to silently drop the packet.
++
++.B unreachable
++- the rule prescribes to generate a 'Network is unreachable' error.
++
++.B prohibit
++- the rule prescribes to generate 'Communication is administratively
++prohibited' error.
++
++.B nat
++- the rule prescribes to translate the source address
++of the IP packet into some other value.
++.in -8
++
++.SS ip rule add - insert a new rule
++.SS ip rule delete - delete a rule
++
++.TP
++.BI type " TYPE " (default)
++the type of this rule. The list of valid types was given in the previous
++subsection.
++
++.TP
++.BI from " PREFIX"
++select the source prefix to match.
++
++.TP
++.BI to " PREFIX"
++select the destination prefix to match.
++
++.TP
++.BI iif " NAME"
++select the incoming device to match. If the interface is loopback,
++the rule only matches packets originating from this host. This means
++that you may create separate routing tables for forwarded and local
++packets and, hence, completely segregate them.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++select the TOS value to match.
++
++.TP
++.BI fwmark " MARK"
++select the
++.B fwmark
++value to match.
++
++.TP
++.BI priority " PREFERENCE"
++the priority of this rule. Each rule should have an explicitly
++set
++.I unique
++priority value.
++
++.TP
++.BI table " TABLEID"
++the routing table identifier to lookup if the rule selector matches.
++
++.TP
++.BI realms " FROM/TO"
++Realms to select if the rule matched and the routing table lookup
++succeeded. Realm
++.I TO
++is only used if the route did not select any realm.
++
++.TP
++.BI nat " ADDRESS"
++The base of the IP address block to translate (for source addresses).
++The
++.I ADDRESS
++may be either the start of the block of NAT addresses (selected by NAT
++routes) or a local host address (or even zero).
++In the last case the router does not translate the packets, but
++masquerades them to this address.
++
++.B Warning:
++Changes to the RPDB made with these commands do not become active
++immediately. It is assumed that after a script finishes a batch of
++updates, it flushes the routing cache with
++.BR "ip route flush cache" .
++
++.SS ip rule show - list rules
++This command has no arguments.
++
++.SH ip maddress - multicast addresses management
++
++.B maddress
++objects are multicast addresses.
++
++.SS ip maddress show - list multicast addresses
++
++.TP
++.BI dev " NAME " (default)
++the device name.
++
++.SS ip maddress add - add a multicast address
++.SS ip maddress delete - delete a multicast address
++these commands attach/detach a static link layer multicast address
++to listen on the interface.
++Note that it is impossible to join protocol multicast groups
++statically. This command only manages link layer addresses.
++
++.TP
++.BI address " LLADDRESS " (default)
++the link layer multicast address.
++
++.TP
++.BI dev " NAME"
++the device to join/leave this multicast address.
++
++.SH ip mroute - multicast routing cache management
++.B mroute
++objects are multicast routing cache entries created by a user level
++mrouting daemon (f.e.
++.B pimd
++or
++.B mrouted
++).
++
++Due to the limitations of the current interface to the multicast routing
++engine, it is impossible to change
++.B mroute
++objects administratively, so we may only display them. This limitation
++will be removed in the future.
++
++.SS ip mroute show - list mroute cache entries
++
++.TP
++.BI to " PREFIX " (default)
++the prefix selecting the destination multicast addresses to list.
++
++.TP
++.BI iif " NAME"
++the interface on which multicast packets are received.
++
++.TP
++.BI from " PREFIX"
++the prefix selecting the IP source addresses of the multicast route.
++
++.SH ip tunnel - tunnel configuration
++.B tunnel
++objects are tunnels, encapsulating packets in IPv4 packets and then
++sending them over the IP infrastructure.
++
++.SS ip tunnel add - add a new tunnel
++.SS ip tunnel change - change an existing tunnel
++.SS ip tunnel delete - destroy a tunnel
++
++.TP
++.BI name " NAME " (default)
++select the tunnel device name.
++
++.TP
++.BI mode " MODE"
++set the tunnel mode. Three modes are currently available:
++.BR ipip ", " sit " and " gre "."
++
++.TP
++.BI remote " ADDRESS"
++set the remote endpoint of the tunnel.
++
++.TP
++.BI local " ADDRESS"
++set the fixed local address for tunneled packets.
++It must be an address on another interface of this host.
++
++.TP
++.BI ttl " N"
++set a fixed TTL
++.I N
++on tunneled packets.
++.I N
++is a number in the range 1--255. 0 is a special value
++meaning that packets inherit the TTL value.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI tos " T"
++.TP
++.BI dsfield " T"
++set a fixed TOS
++.I T
++on tunneled packets.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI dev " NAME"
++bind the tunnel to the device
++.I NAME
++so that tunneled packets will only be routed via this device and will
++not be able to escape to another device when the route to endpoint
++changes.
++
++.TP
++.B nopmtudisc
++disable Path MTU Discovery on this tunnel.
++It is enabled by default. Note that a fixed ttl is incompatible
++with this option: tunnelling with a fixed ttl always makes pmtu
++discovery.
++
++.TP
++.BI key " K"
++.TP
++.BI ikey " K"
++.TP
++.BI okey " K"
++.RB ( " only GRE tunnels " )
++use keyed GRE with key
++.IR K ". " K
++is either a number or an IP address-like dotted quad.
++The
++.B key
++parameter sets the key to use in both directions.
++The
++.BR ikey " and " okey
++parameters set different keys for input and output.
++
++.TP
++.BR csum ", " icsum ", " ocsum
++.RB ( " only GRE tunnels " )
++generate/require checksums for tunneled packets.
++The
++.B ocsum
++flag calculates checksums for outgoing packets.
++The
++.B icsum
++flag requires that all input packets have the correct
++checksum. The
++.B csum
++flag is equivalent to the combination
++.BR "icsum ocsum" .
++
++.TP
++.BR seq ", " iseq ", " oseq
++.RB ( " only GRE tunnels " )
++serialize packets.
++The
++.B oseq
++flag enables sequencing of outgoing packets.
++The
++.B iseq
++flag requires that all input packets are serialized.
++The
++.B seq
++flag is equivalent to the combination
++.BR "iseq oseq" .
++.B It isn't work. Don't use it.
++
++.SS ip tunnel show - list tunnels
++This command has no arguments.
++
++.SH ip monitor and rtmon - state monitoring
++
++The
++.B ip
++utility can monitor the state of devices, addresses
++and routes continuously. This option has a slightly different format.
++Namely, the
++.B monitor
++command is the first in the command line and then the object list follows:
++
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++
++.I OBJECT-LIST
++is the list of object types that we want to monitor.
++It may contain
++.BR link ", " address " and " route "."
++If no
++.B file
++argument is given,
++.B ip
++opens RTNETLINK, listens on it and dumps state changes in the format
++described in previous sections.
++
++.P
++If a file name is given, it does not listen on RTNETLINK,
++but opens the file containing RTNETLINK messages saved in binary format
++and dumps them. Such a history file can be generated with the
++.B rtmon
++utility. This utility has a command line syntax similar to
++.BR "ip monitor" .
++Ideally,
++.B rtmon
++should be started before the first network configuration command
++is issued. F.e. if you insert:
++.sp
++.in +8
++rtmon file /var/log/rtmon.log
++.in -8
++.sp
++in a startup script, you will be able to view the full history
++later.
++
++.P
++Certainly, it is possible to start
++.B rtmon
++at any time.
++It prepends the history with the state snapshot dumped at the moment
++of starting.
++
++.SH HISTORY
++
++.B ip
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc (8)
++.br
++.RB "IP Command reference " ip-cref.ps
++.br
++.RB "IP tunnels " ip-cref.ps
++
++.SH AUTHOR
++
++Manpage maintained by Michail Litvak <mci@owl.openwall.com>
+diff -Naur iproute2-orig/debian/manpages/old/ip.8 iproute2/debian/manpages/old/ip.8
+--- iproute2-orig/debian/manpages/old/ip.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/ip.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,1809 @@
++.TH IP 8 "17 January 2002" "iproute2" "Linux"
++.SH NAME
++ip \- show / manipulate routing, devices, policy routing and tunnels
++.SH SYNOPSIS
++
++.ad l
++.in +8
++.ti -8
++.B ip
++.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
++.BR help " }"
++.sp
++
++.ti -8
++.IR OBJECT " := { "
++.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
++maddr " | " mroute " | " monitor " }"
++.sp
++
++.ti -8
++.IR OPTIONS " := { "
++\fB\-V\fR[\fIersion\fR] |
++\fB\-s\fR[\fItatistics\fR] |
++\fB\-r\fR[\fIesolve\fR] |
++\fB\-f\fR[\fIamily\fR] {
++.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
++\fB\-o\fR[\fIneline\fR] }
++
++.ti -8
++.BI "ip link set " DEVICE
++.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
++.br
++.BR promisc " { " on " | " off " } |"
++.br
++.BR allmulti " { " on " | " off " } |"
++.br
++.BR dynamic " { " on " | " off " } |"
++.br
++.BR multicast " { " on " | " off " } |"
++.br
++.B txqueuelen
++.IR PACKETS " |"
++.br
++.B name
++.IR NEWNAME " |"
++.br
++.B address
++.IR LLADDR " |"
++.B broadcast
++.IR LLADDR " |"
++.br
++.B mtu
++.IR MTU " }"
++
++.ti -8
++.B ip link show
++.RI "[ " DEVICE " ]"
++
++.ti -8
++.BR "ip addr" " { " add " | " del " } "
++.IB IFADDR " dev " STRING
++
++.ti -8
++.BR "ip addr" " { " show " | " flush " } [ " dev
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ] [ "
++.B to
++.IR PREFIX " ] [ " FLAG-LIST " ] [ "
++.B label
++.IR PATTERN " ]"
++
++.ti -8
++.IR IFADDR " := " PREFIX " | " ADDR
++.B peer
++.IR PREFIX " [ "
++.B broadcast
++.IR ADDR " ] [ "
++.B anycast
++.IR ADDR " ] [ "
++.B label
++.IR STRING " ] [ "
++.B scope
++.IR SCOPE-ID " ]"
++
++.ti -8
++.IR SCOPE-ID " := "
++.RB "[ " host " | " link " | " global " | "
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
++
++.ti -8
++.IR FLAG " := "
++.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
++tentative " | " deprecated " ]"
++
++.ti -8
++.BR "ip route" " { "
++.BR list " | " flush " } "
++.I SELECTOR
++
++.ti -8
++.B ip route get
++.IR ADDRESS " [ "
++.BI from " ADDRESS " iif " STRING"
++.RB " ] [ " oif
++.IR STRING " ] [ "
++.B tos
++.IR TOS " ]"
++
++.ti -8
++.BR "ip route" " { " add " | " del " | " change " | " append " | "\
++replace " | " monitor " } "
++.I ROUTE
++
++.ti -8
++.IR SELECTOR " := "
++.RB "[ " root
++.IR PREFIX " ] [ "
++.B match
++.IR PREFIX " ] [ "
++.B exact
++.IR PREFIX " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B type
++.IR TYPE " ] [ "
++.B scope
++.IR SCOPE " ]"
++
++.ti -8
++.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
++
++.ti -8
++.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
++.B tos
++.IR TOS " ] [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B proto
++.IR RTPROTO " ] [ "
++.B scope
++.IR SCOPE " ] [ "
++.B metric
++.IR METRIC " ]"
++
++.ti -8
++.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
++.B nexthop
++.IR NH " ] ..."
++
++.ti -8
++.IR NH " := [ "
++.B via
++.IR ADDRESS " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B weight
++.IR NUMBER " ] " NHFLAGS
++
++.ti -8
++.IR OPTIONS " := " FLAGS " [ "
++.B mtu
++.IR NUMBER " ] [ "
++.B advmss
++.IR NUMBER " ] [ "
++.B rtt
++.IR NUMBER " ] [ "
++.B rttvar
++.IR NUMBER " ] [ "
++.B window
++.IR NUMBER " ] [ "
++.B cwnd
++.IR NUMBER " ] [ "
++.B ssthresh
++.IR REALM " ] [ "
++.B realms
++.IR REALM " ]"
++
++.ti -8
++.IR TYPE " := [ "
++.BR unicast " | " local " | " broadcast " | " multicast " | "\
++throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local "| " main " | " default " | " all " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR SCOPE " := [ "
++.BR host " | " link " | " global " |"
++.IR NUMBER " ]"
++
++.ti -8
++.IR FLAGS " := [ "
++.BR equalize " ]"
++
++.ti -8
++.IR NHFLAGS " := [ "
++.BR onlink " | " pervasive " ]"
++
++.ti -8
++.IR RTPROTO " := [ "
++.BR kernel " | " boot " | " static " |"
++.IR NUMBER " ]"
++
++.ti -8
++.B ip rule
++.RB " [ " list " | " add " | " del " ]"
++.I SELECTOR ACTION
++
++.ti -8
++.IR SELECTOR " := [ "
++.B from
++.IR PREFIX " ] [ "
++.B to
++.IR PREFIX " ] [ "
++.B tos
++.IR TOS " ] [ "
++.B fwmark
++.IR FWMARK " ] [ "
++.B dev
++.IR STRING " ] [ "
++.B pref
++.IR NUMBER " ]"
++
++.ti -8
++.IR ACTION " := [ "
++.B table
++.IR TABLE_ID " ] [ "
++.B nat
++.IR ADDRESS " ] [ "
++.BR prohibit " | " reject " | " unreachable " ] [ " realms
++.RI "[" SRCREALM "/]" DSTREALM " ]"
++
++.ti -8
++.IR TABLE_ID " := [ "
++.BR local " | " main " | " default " |"
++.IR NUMBER " ]"
++
++.ti -8
++.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
++.IR ADDR " [ "
++.B lladdr
++.IR LLADDR " ] [ "
++.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
++.IR ADDR " } [ "
++.B dev
++.IR DEV " ]"
++
++.ti -8
++.BR "ip neigh" " { " show " | " flush " } [ " to
++.IR PREFIX " ] [ "
++.B dev
++.IR DEV " ] [ "
++.B nud
++.IR STATE " ]"
++
++.ti -8
++.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
++.RI "[ " NAME " ]"
++.br
++.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
++.br
++.RB "[ " remote
++.IR ADDR " ] [ "
++.B local
++.IR ADDR " ]"
++.br
++.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
++.IR KEY " ] [ "
++.RB "[" i "|" o "]" csum " ] ]"
++.br
++.RB "[ " ttl
++.IR TTL " ] [ "
++.B tos
++.IR TOS " ] [ "
++.RB "[" no "]" pmtudisc " ]"
++.br
++.RB "[ " dev
++.IR PHYS_DEV " ]"
++
++.ti -8
++.IR ADDR " := { " IP_ADDRESS " |"
++.BR any " }"
++
++.ti -8
++.IR TOS " := { " NUMBER " |"
++.BR inherit " }"
++
++.ti -8
++.IR TTL " := { " 1 ".." 255 " | "
++.BR inherit " }"
++
++.ti -8
++.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
++
++.ti -8
++.BR "ip maddr" " [ " add " | " del " ]"
++.IB MULTIADDR " dev " STRING
++
++.ti -8
++.BR "ip maddr show" " [ " dev
++.IR STRING " ]"
++
++.ti -8
++.BR "ip mroute show" " ["
++.IR PREFIX " ] [ "
++.B from
++.IR PREFIX " ] [ "
++.B iif
++.IR DEVICE " ]"
++
++.ti -8
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++.in -8
++.ad b
++
++.SH OPTIONS
++
++.TP
++.BR "\-V" , " -Version"
++print the version of the
++.B ip
++utility and exit.
++
++.TP
++.BR "\-s" , " \-stats", " \-statistics"
++output more information. If the option
++appears twice or more, the amount of information increases.
++As a rule, the information is statistics or some time values.
++
++.TP
++.BR "\-f" , " \-family"
++followed by protocol family identifier:
++.BR "inet" , " inet6"
++or
++.B link
++,enforce the protocol family to use. If the option is not present,
++the protocol family is guessed from other arguments. If the rest
++of the command line does not give enough information to guess the
++family,
++.B ip
++falls back to the default one, usually
++.B inet
++or
++.BR "any" .
++.B link
++is a special family identifier meaning that no networking protocol
++is involved.
++
++.TP
++.B \-4
++shortcut for
++.BR "-family inet" .
++
++.TP
++.B \-6
++shortcut for
++.BR "\-family inet6" .
++
++.TP
++.B \-0
++shortcut for
++.BR "\-family link" .
++
++.TP
++.BR "\-o" , " \-oneline"
++output each record on a single line, replacing line feeds
++with the
++.B '\'
++character. This is convenient when you want to count records
++with
++.BR wc (1)
++ or to
++.BR grep (1)
++the output.
++
++.TP
++.BR "\-r" , " \-resolve"
++use the system's name resolver to print DNS names instead of
++host addresses.
++
++.SH IP - COMMAND SYNTAX
++
++.SS
++.I OBJECT
++
++.TP
++.B link
++- network device.
++
++.TP
++.B address
++- protocol (IP or IPv6) address on a device.
++.TP
++.B neighbour
++- ARP or NDISC cache entry.
++
++.TP
++.B route
++- routing table entry.
++
++.TP
++.B rule
++- rule in routing policy database.
++
++.TP
++.B maddress
++- multicast address.
++
++.TP
++.B mroute
++- multicast routing cache entry.
++
++.TP
++.B tunnel
++- tunnel over IP.
++
++.PP
++The names of all objects may be written in full or
++abbreviated form, f.e.
++.B address
++is abbreviated as
++.B addr
++or just
++.B a.
++
++.SS
++.I COMMAND
++
++Specifies the action to perform on the object.
++The set of possible actions depends on the object type.
++As a rule, it is possible to
++.BR "add" , " delete"
++and
++.B show
++(or
++.B list
++) objects, but some objects do not allow all of these operations
++or have some additional commands. The
++.B help
++command is available for all objects. It prints
++out a list of available commands and argument syntax conventions.
++.sp
++If no command is given, some default command is assumed.
++Usually it is
++.B list
++or, if the objects of this class cannot be listed,
++.BR "help" .
++
++.SH ip link - network device configuration
++
++.B link
++is a network device and the corresponding commands
++display and change the state of devices.
++
++.SS ip link set - change device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies network device to operate on.
++
++.TP
++.BR up " and " down
++change the state of the device to
++.B UP
++or
++.BR "DOWN" .
++
++.TP
++.BR "arp on " or " arp off"
++change the
++.B NOARP
++flag on the device.
++
++.TP
++.BR "multicast on " or " multicast off"
++change the
++.B MULTICAST
++flag on the device.
++
++.TP
++.BR "dynamic on " or " dynamic off"
++change the
++.B DYNAMIC
++flag on the device.
++
++.TP
++.BI name " NAME"
++change the name of the device. This operation is not
++recommended if the device is running or has some addresses
++already configured.
++
++.TP
++.BI txqueuelen " NUMBER"
++.TP
++.BI txqlen " NUMBER"
++change the transmit queue length of the device.
++
++.TP
++.BI mtu " NUMBER"
++change the
++.I MTU
++of the device.
++
++.TP
++.BI address " LLADDRESS"
++change the station address of the interface.
++
++.TP
++.BI broadcast " LLADDRESS"
++.TP
++.BI brd " LLADDRESS"
++.TP
++.BI peer " LLADDRESS"
++change the link layer broadcast address or the peer address when
++the interface is
++.IR "POINTOPOINT" .
++
++.PP
++.B Warning:
++If multiple parameter changes are requested,
++.B ip
++aborts immediately after any of the changes have failed.
++This is the only case when
++.B ip
++can move the system to an unpredictable state. The solution
++is to avoid changing several parameters with one
++.B ip link set
++call.
++
++.SS ip link show - display device attributes
++
++.TP
++.BI dev " NAME " (default)
++.I NAME
++specifies the network device to show.
++If this argument is omitted all devices are listed.
++
++.TP
++.B up
++only display running interfaces.
++
++.SH ip address - protocol address management.
++
++The
++.B address
++is a protocol (IP or IPv6) address attached
++to a network device. Each device must have at least one address
++to use the corresponding protocol. It is possible to have several
++different addresses attached to one device. These addresses are not
++discriminated, so that the term
++.B alias
++is not quite appropriate for them and we do not use it in this document.
++.sp
++The
++.B ip addr
++command displays addresses and their properties, adds new addresses
++and deletes old ones.
++
++.SS ip address add - add new protocol address.
++
++.TP
++.BI dev " NAME"
++the name of the device to add the address to.
++
++.TP
++.BI local " ADDRESS " (default)
++the address of the interface. The format of the address depends
++on the protocol. It is a dotted quad for IP and a sequence of
++hexadecimal halfwords separated by colons for IPv6. The
++.I ADDRESS
++may be followed by a slash and a decimal number which encodes
++the network prefix length.
++
++.TP
++.BI peer " ADDRESS"
++the address of the remote endpoint for pointopoint interfaces.
++Again, the
++.I ADDRESS
++may be followed by a slash and a decimal number, encoding the network
++prefix length. If a peer address is specified, the local address
++cannot have a prefix length. The network prefix is associated
++with the peer rather than with the local address.
++
++.TP
++.BI broadcast " ADDRESS"
++the broadcast address on the interface.
++.sp
++It is possible to use the special symbols
++.B '+'
++and
++.B '-'
++instead of the broadcast address. In this case, the broadcast address
++is derived by setting/resetting the host bits of the interface prefix.
++
++.TP
++.BI label " NAME"
++Each address may be tagged with a label string.
++In order to preserve compatibility with Linux-2.0 net aliases,
++this string must coincide with the name of the device or must be prefixed
++with the device name followed by colon.
++
++.TP
++.BI scope " SCOPE_VALUE"
++the scope of the area where this address is valid.
++The available scopes are listed in file
++.BR "/etc/iproute2/rt_scopes" .
++Predefined scope values are:
++
++.in +8
++.B global
++- the address is globally valid.
++.sp
++.B site
++- (IPv6 only) the address is site local, i.e. it is
++valid inside this site.
++.sp
++.B link
++- the address is link local, i.e. it is valid only on this device.
++.sp
++.B host
++- the address is valid only inside this host.
++.in -8
++
++.SS ip address delete - delete protocol address
++.B Arguments:
++coincide with the arguments of
++.B ip addr add.
++The device name is a required argument. The rest are optional.
++If no arguments are given, the first address is deleted.
++
++.SS ip address show - look at protocol addresses
++
++.TP
++.BI dev " NAME " (default)
++name of device.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list addresses with this scope.
++
++.TP
++.BI to " PREFIX"
++only list addresses matching this prefix.
++
++.TP
++.BI label " PATTERN"
++only list addresses with labels matching the
++.IR "PATTERN" .
++.I PATTERN
++is a usual shell style pattern.
++
++.TP
++.BR dynamic " and " permanent
++(IPv6 only) only list addresses installed due to stateless
++address configuration or only list permanent (not dynamic)
++addresses.
++
++.TP
++.B tentative
++(IPv6 only) only list addresses which did not pass duplicate
++address detection.
++
++.TP
++.B deprecated
++(IPv6 only) only list deprecated addresses.
++
++.TP
++.BR primary " and " secondary
++only list primary (or secondary) addresses.
++
++.SS ip address flush - flush protocol addresses
++This command flushes the protocol addresses selected by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The difference is that it does not run when no arguments are given.
++
++.PP
++.B Warning:
++This command (and other
++.B flush
++commands described below) is pretty dangerous. If you make a mistake,
++it will not forgive it, but will cruelly purge all the addresses.
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of deleted
++addresses and the number of rounds made to flush the address list. If
++this option is given twice,
++.B ip addr flush
++also dumps all the deleted addresses in the format described in the
++previous subsection.
++
++.SH ip neighbour - neighbour/arp tables management.
++
++.B neighbour
++objects establish bindings between protocol addresses and
++link layer addresses for hosts sharing the same link.
++Neighbour entries are organized into tables. The IPv4 neighbour table
++is known by another name - the ARP table.
++
++.P
++The corresponding commands display neighbour bindings
++and their properties, add new neighbour entries and delete old ones.
++
++.SS ip neighbour add - add a new neighbour entry
++.SS ip neighbour change - change an existing entry
++.SS ip neighbour replace - add a new entry or change an existing one
++
++These commands create new neighbour records or update existing ones.
++
++.TP
++.BI to " ADDRESS " (default)
++the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
++
++.TP
++.BI dev " NAME"
++the interface to which this neighbour is attached.
++
++.TP
++.BI lladdr " LLADDRESS"
++the link layer address of the neighbour.
++.I LLADDRESS
++can also be
++.BR "null" .
++
++.TP
++.BI nud " NUD_STATE"
++the state of the neighbour entry.
++.B nud
++is an abbreviation for 'Neigh bour Unreachability Detection'.
++The state can take one of the following values:
++
++.in +8
++.B permanent
++- the neighbour entry is valid forever and can be only
++be removed administratively.
++.sp
++
++.B noarp
++- the neighbour entry is valid. No attempts to validate
++this entry will be made but it can be removed when its lifetime expires.
++.sp
++
++.B reachable
++- the neighbour entry is valid until the reachability
++timeout expires.
++.sp
++
++.B stale
++- the neighbour entry is valid but suspicious.
++This option to
++.B ip neigh
++does not change the neighbour state if it was valid and the address
++is not changed by this command.
++.in -8
++
++.SS ip neighbour delete - delete a neighbour entry
++This command invalidates a neighbour entry.
++
++.PP
++The arguments are the same as with
++.BR "ip neigh add" ,
++except that
++.B lladdr
++and
++.B nud
++are ignored.
++
++.PP
++.B Warning:
++Attempts to delete or manually change a
++.B noarp
++entry created by the kernel may result in unpredictable behaviour.
++Particularly, the kernel may try to resolve this address even
++on a
++.B NOARP
++interface or if the address is multicast or broadcast.
++
++.SS ip neighbour show - list neighbour entries
++
++This commands displays neighbour tables.
++
++.TP
++.BI to " ADDRESS " (default)
++the prefix selecting the neighbours to list.
++
++.TP
++.BI dev " NAME"
++only list the neighbours attached to this device.
++
++.TP
++.B unused
++only list neighbours which are not currently in use.
++
++.TP
++.BI nud " NUD_STATE"
++only list neighbour entries in this state.
++.I NUD_STATE
++takes values listed below or the special value
++.B all
++which means all states. This option may occur more than once.
++If this option is absent,
++.B ip
++lists all entries except for
++.B none
++and
++.BR "noarp" .
++
++.SS ip neighbour flush - flush neighbour entries
++This command flushes neighbour tables, selecting
++entries to flush by some criteria.
++
++.PP
++This command has the same arguments as
++.B show.
++The differences are that it does not run when no arguments are given,
++and that the default neighbour states to be flushed do not include
++.B permanent
++and
++.BR "noarp" .
++
++.PP
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted neighbours and the number of rounds made to flush the
++neighbour table. If the option is given
++twice,
++.B ip neigh flush
++also dumps all the deleted neighbours.
++
++.SH ip route - routing table management
++Manipulate route entries in the kernel routing tables keep
++information about paths to other networked nodes.
++.sp
++.B Route types:
++
++.in +8
++.B unicast
++- the route entry describes real paths to the destinations covered
++by the route prefix.
++
++.sp
++.B unreachable
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I host unreachable
++is generated.
++The local senders get an
++.I EHOSTUNREACH
++error.
++
++.sp
++.B blackhole
++- these destinations are unreachable. Packets are discarded silently.
++The local senders get an
++.I EINVAL
++error.
++
++.sp
++.B prohibit
++- these destinations are unreachable. Packets are discarded and the
++ICMP message
++.I communication administratively prohibited
++is generated. The local senders get an
++.I EACCES
++error.
++
++.sp
++.B local
++- the destinations are assigned to this host. The packets are looped
++back and delivered locally.
++
++.sp
++.B broadcast
++- the destinations are broadcast addresses. The packets are sent as
++link broadcasts.
++
++.sp
++.B throw
++- a special control route used together with policy rules. If such a
++route is selected, lookup in this table is terminated pretending that
++no route was found. Without policy routing it is equivalent to the
++absence of the route in the routing table. The packets are dropped
++and the ICMP message
++.I net unreachable
++is generated. The local senders get an
++.I ENETUNREACH
++error.
++
++.sp
++.B nat
++- a special NAT route. Destinations covered by the prefix
++are considered to be dummy (or external) addresses which require translation
++to real (or internal) ones before forwarding. The addresses to translate to
++are selected with the attribute
++.BR "via" .
++
++.sp
++.B anycast
++.RI "- " "not implemented"
++the destinations are
++.I anycast
++addresses assigned to this host. They are mainly equivalent
++to
++.B local
++with one difference: such addresses are invalid when used
++as the source address of any packet.
++
++.sp
++.B multicast
++- a special type used for multicast routing. It is not present in
++normal routing tables.
++.in -8
++
++.P
++.B Route tables:
++Linux-2.x can pack routes into several routing
++tables identified by a number in the range from 1 to 255 or by
++name from the file
++.B /etc/iproute2/rt_tables
++. By default all normal routes are inserted into the
++.B main
++table (ID 254) and the kernel only uses this table when calculating routes.
++
++.sp
++Actually, one other table always exists, which is invisible but
++even more important. It is the
++.B local
++table (ID 255). This table
++consists of routes for local and broadcast addresses. The kernel maintains
++this table automatically and the administrator usually need not modify it
++or even look at it.
++
++The multiple routing tables enter the game when
++.I policy routing
++is used.
++
++.SS ip route add - add new route
++.SS ip route change - change route
++.SS ip route replace - change or add new one
++
++.TP
++.BI to " TYPE PREFIX " (default)
++the destination prefix of the route. If
++.I TYPE
++is omitted,
++.B ip
++assumes type
++.BR "unicast" .
++Other values of
++.I TYPE
++are listed above.
++.I PREFIX
++is an IP or IPv6 address optionally followed by a slash and the
++prefix length. If the length of the prefix is missing,
++.B ip
++assumes a full-length host route. There is also a special
++.I PREFIX
++.B default
++- which is equivalent to IP
++.B 0/0
++or to IPv6
++.BR "::/0" .
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service (TOS) key. This key has no associated mask and
++the longest match is understood as: First, compare the TOS
++of the route and of the packet. If they are not equal, then the packet
++may still match a route with a zero TOS.
++.I TOS
++is either an 8 bit hexadecimal number or an identifier
++from
++.BR "/etc/iproute2/rt_dsfield" .
++
++.TP
++.BI metric " NUMBER"
++.TP
++.BI preference " NUMBER"
++the preference value of the route.
++.I NUMBER
++is an arbitrary 32bit number.
++
++.TP
++.BI table " TABLEID"
++the table to add this route to.
++.I TABLEID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_tables" .
++If this parameter is omitted,
++.B ip
++assumes the
++.B main
++table, with the exception of
++.BR local " , " broadcast " and " nat
++routes, which are put into the
++.B local
++table by default.
++
++.TP
++.BI dev " NAME"
++the output device name.
++
++.TP
++.BI via " ADDRESS"
++the address of the nexthop router. Actually, the sense of this field
++depends on the route type. For normal
++.B unicast
++routes it is either the true next hop router or, if it is a direct
++route installed in BSD compatibility mode, it can be a local address
++of the interface. For NAT routes it is the first address of the block
++of translated IP destinations.
++
++.TP
++.BI src " ADDRESS"
++the source address to prefer when sending to the destinations
++covered by the route prefix.
++
++.TP
++.BI realm " REALMID"
++the realm to which this route is assigned.
++.I REALMID
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_realms" .
++
++.TP
++.BI mtu " MTU"
++.TP
++.BI "mtu lock" " MTU"
++the MTU along the path to the destination. If the modifier
++.B lock
++is not used, the MTU may be updated by the kernel due to
++Path MTU Discovery. If the modifier
++.B lock
++is used, no path MTU discovery will be tried, all packets
++will be sent without the DF bit in IPv4 case or fragmented
++to MTU for IPv6.
++
++.TP
++.BI window " NUMBER"
++the maximal window for TCP to advertise to these destinations,
++measured in bytes. It limits maximal data bursts that our TCP
++peers are allowed to send to us.
++
++.TP
++.BI rtt " NUMBER"
++the initial RTT ('Round Trip Time') estimate.
++
++.TP
++.BI rttvar " NUMBER " "(2.3.15+ only)"
++the initial RTT variance estimate.
++
++.TP
++.BI ssthresh " NUMBER " "(2.3.15+ only)"
++an estimate for the initial slow start threshold.
++
++.TP
++.BI cwnd " NUMBER " "(2.3.15+ only)"
++the clamp for congestion window. It is ignored if the
++.B lock
++flag is not used.
++
++.TP
++.BI advmss " NUMBER " "(2.3.15+ only)"
++the MSS ('Maximal Segment Size') to advertise to these
++destinations when establishing TCP connections. If it is not given,
++Linux uses a default value calculated from the first hop device MTU.
++(If the path to these destination is asymmetric, this guess may be wrong.)
++
++.TP
++.BI reordering " NUMBER " "(2.3.15+ only)"
++Maximal reordering on the path to this destination.
++If it is not given, Linux uses the value selected with
++.B sysctl
++variable
++.BR "net/ipv4/tcp_reordering" .
++
++.TP
++.BI nexthop " NEXTHOP"
++the nexthop of a multipath route.
++.I NEXTHOP
++is a complex value with its own syntax similar to the top level
++argument lists:
++
++.in +8
++.BI via " ADDRESS"
++- is the nexthop router.
++.sp
++
++.BI dev " NAME"
++- is the output device.
++.sp
++
++.BI weight " NUMBER"
++- is a weight for this element of a multipath
++route reflecting its relative bandwidth or quality.
++.in -8
++
++.TP
++.BI scope " SCOPE_VAL"
++the scope of the destinations covered by the route prefix.
++.I SCOPE_VAL
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_scopes" .
++If this parameter is omitted,
++.B ip
++assumes scope
++.B global
++for all gatewayed
++.B unicast
++routes, scope
++.B link
++for direct
++.BR unicast " and " broadcast
++routes and scope
++.BR host " for " local
++routes.
++
++.TP
++.BI protocol " RTPROTO"
++the routing protocol identifier of this route.
++.I RTPROTO
++may be a number or a string from the file
++.BR "/etc/iproute2/rt_protos" .
++If the routing protocol ID is not given,
++.B ip assumes protocol
++.B boot
++(i.e. it assumes the route was added by someone who doesn't
++understand what they are doing). Several protocol values have
++a fixed interpretation.
++Namely:
++
++.in +8
++.B redirect
++- the route was installed due to an ICMP redirect.
++.sp
++
++.B kernel
++- the route was installed by the kernel during autoconfiguration.
++.sp
++
++.B boot
++- the route was installed during the bootup sequence.
++If a routing daemon starts, it will purge all of them.
++.sp
++
++.B static
++- the route was installed by the administrator
++to override dynamic routing. Routing daemon will respect them
++and, probably, even advertise them to its peers.
++.sp
++
++.B ra
++- the route was installed by Router Discovery protocol.
++.in -8
++
++.sp
++The rest of the values are not reserved and the administrator is free
++to assign (or not to assign) protocol tags.
++
++.TP
++.B onlink
++pretend that the nexthop is directly attached to this link,
++even if it does not match any interface prefix.
++
++.TP
++.B equalize
++allow packet by packet randomization on multipath routes.
++Without this modifier, the route will be frozen to one selected
++nexthop, so that load splitting will only occur on per-flow base.
++.B equalize
++only works if the kernel is patched.
++
++.SS ip route delete - delete route
++
++.B ip route del
++has the same arguments as
++.BR "ip route add" ,
++but their semantics are a bit different.
++
++Key values
++.RB "(" to ", " tos ", " preference " and " table ")"
++select the route to delete. If optional attributes are present,
++.B ip
++verifies that they coincide with the attributes of the route to delete.
++If no route with the given key and attributes was found,
++.B ip route del
++fails.
++
++.SS ip route show - list routes
++the command displays the contents of the routing tables or the route(s)
++selected by some criteria.
++
++.TP
++.BI to " SELECTOR " (default)
++only select routes from the given range of destinations.
++.I SELECTOR
++consists of an optional modifier
++.RB "(" root ", " match " or " exact ")"
++and a prefix.
++.BI root " PREFIX"
++selects routes with prefixes not shorter than
++.IR PREFIX "."
++F.e.
++.BI root " 0/0"
++selects the entire routing table.
++.BI match " PREFIX"
++selects routes with prefixes not longer than
++.IR PREFIX "."
++F.e.
++.BI match " 10.0/16"
++selects
++.IR 10.0/16 ","
++.IR 10/8 " and " 0/0 ,
++but it does not select
++.IR 10.1/16 " and " 10.0.0/24 .
++And
++.BI exact " PREFIX"
++(or just
++.IR PREFIX ")"
++selects routes with this exact prefix. If neither of these options
++are present,
++.B ip
++assumes
++.BI root " 0/0"
++i.e. it lists the entire table.
++
++.TP
++.BI tos " TOS"
++.BI dsfield " TOS"
++only select routes with the given TOS.
++
++.TP
++.BI table " TABLEID"
++show the routes from this table(s). The default setting is to show
++.BR table main "."
++.I TABLEID
++may either be the ID of a real table or one of the special values:
++.sp
++.in +8
++.B all
++- list all of the tables.
++.sp
++.B cache
++- dump the routing cache.
++.in -8
++
++.TP
++.B cloned
++.TP
++.B cached
++list cloned routes i.e. routes which were dynamically forked from
++other routes because some route attribute (f.e. MTU) was updated.
++Actually, it is equivalent to
++.BR "table cache" "."
++
++.TP
++.BI from " SELECTOR"
++the same syntax as for
++.BR to ","
++but it binds the source address range rather than destinations.
++Note that the
++.B from
++option only works with cloned routes.
++
++.TP
++.BI protocol " RTPROTO"
++only list routes of this protocol.
++
++.TP
++.BI scope " SCOPE_VAL"
++only list routes with this scope.
++
++.TP
++.BI type " TYPE"
++only list routes of this type.
++
++.TP
++.BI dev " NAME"
++only list routes going via this device.
++
++.TP
++.BI via " PREFIX"
++only list routes going via the nexthop routers selected by
++.IR PREFIX "."
++
++.TP
++.BI src " PREFIX"
++only list routes with preferred source addresses selected
++by
++.IR PREFIX "."
++
++.TP
++.BI realm " REALMID"
++.TP
++.BI realms " FROMREALM/TOREALM"
++only list routes with these realms.
++
++.SS ip route flush - flush routing tables
++this command flushes routes selected by some criteria.
++
++.sp
++The arguments have the same syntax and semantics as the arguments of
++.BR "ip route show" ,
++but routing tables are not listed but purged. The only difference is
++the default action:
++.B show
++dumps all the IP main routing table but
++.B flush
++prints the helper page.
++
++.sp
++With the
++.B -statistics
++option, the command becomes verbose. It prints out the number of
++deleted routes and the number of rounds made to flush the routing
++table. If the option is given
++twice,
++.B ip route flush
++also dumps all the deleted routes in the format described in the
++previous subsection.
++
++.SS ip route get - get a single route
++this command gets a single route to a destination and prints its
++contents exactly as the kernel sees it.
++
++.TP
++.BI to " ADDRESS " (default)
++the destination address.
++
++.TP
++.BI from " ADDRESS"
++the source address.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++the Type Of Service.
++
++.TP
++.BI iif " NAME"
++the device from which this packet is expected to arrive.
++
++.TP
++.BI oif " NAME"
++force the output device on which this packet will be routed.
++
++.TP
++.B connected
++if no source address
++.RB "(option " from ")"
++was given, relookup the route with the source set to the preferred
++address received from the first lookup.
++If policy routing is used, it may be a different route.
++
++.P
++Note that this operation is not equivalent to
++.BR "ip route show" .
++.B show
++shows existing routes.
++.B get
++resolves them and creates new clones if necessary. Essentially,
++.B get
++is equivalent to sending a packet along this path.
++If the
++.B iif
++argument is not given, the kernel creates a route
++to output packets towards the requested destination.
++This is equivalent to pinging the destination
++with a subsequent
++.BR "ip route ls cache" ,
++however, no packets are actually sent. With the
++.B iif
++argument, the kernel pretends that a packet arrived from this interface
++and searches for a path to forward the packet.
++
++.SH ip rule - routing policy database management
++
++.BR "Rule" s
++in the routing policy database control the route selection algorithm.
++
++.P
++Classic routing algorithms used in the Internet make routing decisions
++based only on the destination address of packets (and in theory,
++but not in practice, on the TOS field).
++
++.P
++In some circumstances we want to route packets differently depending not only
++on destination addresses, but also on other packet fields: source address,
++IP protocol, transport protocol ports or even packet payload.
++This task is called 'policy routing'.
++
++.P
++To solve this task, the conventional destination based routing table, ordered
++according to the longest match rule, is replaced with a 'routing policy
++database' (or RPDB), which selects routes by executing some set of rules.
++
++.P
++Each policy routing rule consists of a
++.B selector
++and an
++.B action predicate.
++The RPDB is scanned in the order of increasing priority. The selector
++of each rule is applied to {source address, destination address, incoming
++interface, tos, fwmark} and, if the selector matches the packet,
++the action is performed. The action predicate may return with success.
++In this case, it will either give a route or failure indication
++and the RPDB lookup is terminated. Otherwise, the RPDB program
++continues on the next rule.
++
++.P
++Semantically, natural action is to select the nexthop and the output device.
++
++.P
++At startup time the kernel configures the default RPDB consisting of three
++rules:
++
++.TP
++1.
++Priority: 0, Selector: match anything, Action: lookup routing
++table
++.B local
++(ID 255).
++The
++.B local
++table is a special routing table containing
++high priority control routes for local and broadcast addresses.
++.sp
++Rule 0 is special. It cannot be deleted or overridden.
++
++.TP
++2.
++Priority: 32766, Selector: match anything, Action: lookup routing
++table
++.B main
++(ID 254).
++The
++.B main
++table is the normal routing table containing all non-policy
++routes. This rule may be deleted and/or overridden with other
++ones by the administrator.
++
++.TP
++3.
++Priority: 32767, Selector: match anything, Action: lookup routing
++table
++.B default
++(ID 253).
++The
++.B default
++table is empty. It is reserved for some post-processing if no previous
++default rules selected the packet.
++This rule may also be deleted.
++
++.P
++Each RPDB entry has additional
++attributes. F.e. each rule has a pointer to some routing
++table. NAT and masquerading rules have an attribute to select new IP
++address to translate/masquerade. Besides that, rules have some
++optional attributes, which routes have, namely
++.BR "realms" .
++These values do not override those contained in the routing tables. They
++are only used if the route did not select any attributes.
++
++.sp
++The RPDB may contain rules of the following types:
++
++.in +8
++.B unicast
++- the rule prescribes to return the route found
++in the routing table referenced by the rule.
++
++.B blackhole
++- the rule prescribes to silently drop the packet.
++
++.B unreachable
++- the rule prescribes to generate a 'Network is unreachable' error.
++
++.B prohibit
++- the rule prescribes to generate 'Communication is administratively
++prohibited' error.
++
++.B nat
++- the rule prescribes to translate the source address
++of the IP packet into some other value.
++.in -8
++
++.SS ip rule add - insert a new rule
++.SS ip rule delete - delete a rule
++
++.TP
++.BI type " TYPE " (default)
++the type of this rule. The list of valid types was given in the previous
++subsection.
++
++.TP
++.BI from " PREFIX"
++select the source prefix to match.
++
++.TP
++.BI to " PREFIX"
++select the destination prefix to match.
++
++.TP
++.BI iif " NAME"
++select the incoming device to match. If the interface is loopback,
++the rule only matches packets originating from this host. This means
++that you may create separate routing tables for forwarded and local
++packets and, hence, completely segregate them.
++
++.TP
++.BI tos " TOS"
++.TP
++.BI dsfield " TOS"
++select the TOS value to match.
++
++.TP
++.BI fwmark " MARK"
++select the
++.B fwmark
++value to match.
++
++.TP
++.BI priority " PREFERENCE"
++the priority of this rule. Each rule should have an explicitly
++set
++.I unique
++priority value.
++
++.TP
++.BI table " TABLEID"
++the routing table identifier to lookup if the rule selector matches.
++
++.TP
++.BI realms " FROM/TO"
++Realms to select if the rule matched and the routing table lookup
++succeeded. Realm
++.I TO
++is only used if the route did not select any realm.
++
++.TP
++.BI nat " ADDRESS"
++The base of the IP address block to translate (for source addresses).
++The
++.I ADDRESS
++may be either the start of the block of NAT addresses (selected by NAT
++routes) or a local host address (or even zero).
++In the last case the router does not translate the packets, but
++masquerades them to this address.
++
++.B Warning:
++Changes to the RPDB made with these commands do not become active
++immediately. It is assumed that after a script finishes a batch of
++updates, it flushes the routing cache with
++.BR "ip route flush cache" .
++
++.SS ip rule show - list rules
++This command has no arguments.
++
++.SH ip maddress - multicast addresses management
++
++.B maddress
++objects are multicast addresses.
++
++.SS ip maddress show - list multicast addresses
++
++.TP
++.BI dev " NAME " (default)
++the device name.
++
++.SS ip maddress add - add a multicast address
++.SS ip maddress delete - delete a multicast address
++these commands attach/detach a static link layer multicast address
++to listen on the interface.
++Note that it is impossible to join protocol multicast groups
++statically. This command only manages link layer addresses.
++
++.TP
++.BI address " LLADDRESS " (default)
++the link layer multicast address.
++
++.TP
++.BI dev " NAME"
++the device to join/leave this multicast address.
++
++.SH ip mroute - multicast routing cache management
++.B mroute
++objects are multicast routing cache entries created by a user level
++mrouting daemon (f.e.
++.B pimd
++or
++.B mrouted
++).
++
++Due to the limitations of the current interface to the multicast routing
++engine, it is impossible to change
++.B mroute
++objects administratively, so we may only display them. This limitation
++will be removed in the future.
++
++.SS ip mroute show - list mroute cache entries
++
++.TP
++.BI to " PREFIX " (default)
++the prefix selecting the destination multicast addresses to list.
++
++.TP
++.BI iif " NAME"
++the interface on which multicast packets are received.
++
++.TP
++.BI from " PREFIX"
++the prefix selecting the IP source addresses of the multicast route.
++
++.SH ip tunnel - tunnel configuration
++.B tunnel
++objects are tunnels, encapsulating packets in IPv4 packets and then
++sending them over the IP infrastructure.
++
++.SS ip tunnel add - add a new tunnel
++.SS ip tunnel change - change an existing tunnel
++.SS ip tunnel delete - destroy a tunnel
++
++.TP
++.BI name " NAME " (default)
++select the tunnel device name.
++
++.TP
++.BI mode " MODE"
++set the tunnel mode. Three modes are currently available:
++.BR ipip ", " sit " and " gre "."
++
++.TP
++.BI remote " ADDRESS"
++set the remote endpoint of the tunnel.
++
++.TP
++.BI local " ADDRESS"
++set the fixed local address for tunneled packets.
++It must be an address on another interface of this host.
++
++.TP
++.BI ttl " N"
++set a fixed TTL
++.I N
++on tunneled packets.
++.I N
++is a number in the range 1--255. 0 is a special value
++meaning that packets inherit the TTL value.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI tos " T"
++.TP
++.BI dsfield " T"
++set a fixed TOS
++.I T
++on tunneled packets.
++The default value is:
++.BR "inherit" .
++
++.TP
++.BI dev " NAME"
++bind the tunnel to the device
++.I NAME
++so that tunneled packets will only be routed via this device and will
++not be able to escape to another device when the route to endpoint
++changes.
++
++.TP
++.B nopmtudisc
++disable Path MTU Discovery on this tunnel.
++It is enabled by default. Note that a fixed ttl is incompatible
++with this option: tunnelling with a fixed ttl always makes pmtu
++discovery.
++
++.TP
++.BI key " K"
++.TP
++.BI ikey " K"
++.TP
++.BI okey " K"
++.RB ( " only GRE tunnels " )
++use keyed GRE with key
++.IR K ". " K
++is either a number or an IP address-like dotted quad.
++The
++.B key
++parameter sets the key to use in both directions.
++The
++.BR ikey " and " okey
++parameters set different keys for input and output.
++
++.TP
++.BR csum ", " icsum ", " ocsum
++.RB ( " only GRE tunnels " )
++generate/require checksums for tunneled packets.
++The
++.B ocsum
++flag calculates checksums for outgoing packets.
++The
++.B icsum
++flag requires that all input packets have the correct
++checksum. The
++.B csum
++flag is equivalent to the combination
++.BR "icsum ocsum" .
++
++.TP
++.BR seq ", " iseq ", " oseq
++.RB ( " only GRE tunnels " )
++serialize packets.
++The
++.B oseq
++flag enables sequencing of outgoing packets.
++The
++.B iseq
++flag requires that all input packets are serialized.
++The
++.B seq
++flag is equivalent to the combination
++.BR "iseq oseq" .
++.B It isn't work. Don't use it.
++
++.SS ip tunnel show - list tunnels
++This command has no arguments.
++
++.SH ip monitor and rtmon - state monitoring
++
++The
++.B ip
++utility can monitor the state of devices, addresses
++and routes continuously. This option has a slightly different format.
++Namely, the
++.B monitor
++command is the first in the command line and then the object list follows:
++
++.BR "ip monitor" " [ " all " |"
++.IR LISTofOBJECTS " ]"
++
++.I OBJECT-LIST
++is the list of object types that we want to monitor.
++It may contain
++.BR link ", " address " and " route "."
++If no
++.B file
++argument is given,
++.B ip
++opens RTNETLINK, listens on it and dumps state changes in the format
++described in previous sections.
++
++.P
++If a file name is given, it does not listen on RTNETLINK,
++but opens the file containing RTNETLINK messages saved in binary format
++and dumps them. Such a history file can be generated with the
++.B rtmon
++utility. This utility has a command line syntax similar to
++.BR "ip monitor" .
++Ideally,
++.B rtmon
++should be started before the first network configuration command
++is issued. F.e. if you insert:
++.sp
++.in +8
++rtmon file /var/log/rtmon.log
++.in -8
++.sp
++in a startup script, you will be able to view the full history
++later.
++
++.P
++Certainly, it is possible to start
++.B rtmon
++at any time.
++It prepends the history with the state snapshot dumped at the moment
++of starting.
++
++.SH HISTORY
++
++.B ip
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc (8)
++.br
++.RB "IP Command reference " ip-cref.ps
++.br
++.RB "IP tunnels " ip-cref.ps
++
++.SH AUTHOR
++
++Manpage maintained by Michail Litvak <mci@owl.openwall.com>
+diff -Naur iproute2-orig/debian/manpages/old/tc-cbq-details.8 iproute2/debian/manpages/old/tc-cbq-details.8
+--- iproute2-orig/debian/manpages/old/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,425 @@
++.TH CBQ 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++Shaping is done using link idle time calculations, and actions taken if
++these calculations deviate from set limits.
++
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++From the kernel's perspective, this is hard to measure, so CBQ instead
++derives the idle time from the number of microseconds (in fact, jiffies)
++that elapse between requests from the device driver for more data. Combined
++with the knowledge of packet sizes, this is used to approximate how full or
++empty the link is.
++
++This is rather circumspect and doesn't always arrive at proper
++results. For example, what is the actual link speed of an interface
++that is not really able to transmit the full 100mbit/s of data,
++perhaps because of a badly implemented driver? A PCMCIA network card
++will also never achieve 100mbit/s because of the way the bus is
++designed - again, how do we calculate the idle time?
++
++The physical link bandwidth may be ill defined in case of not-quite-real
++network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
++bandwidth in that case is probably determined by the efficiency of pipes
++to userspace - which not defined.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data. If a verdict is reached, this
++process is repeated for the recipient class which might have further
++means of classifying traffic to its children, if any.
++
++CBQ has the following methods available to classify a packet to any child
++classes.
++.TP
++(i)
++.B skb->priority class encoding.
++Can be set from userspace by an application with the
++.B SO_PRIORITY
++setsockopt.
++The
++.B skb->priority class encoding
++only applies if the skb->priority holds a major:minor handle of an existing
++class within this qdisc.
++.TP
++(ii)
++tc filters attached to the class.
++.TP
++(iii)
++The defmap of a class, as set with the
++.B split & defmap
++parameters. The defmap may contain instructions for each possible Linux packet
++priority.
++
++.P
++Each class also has a
++.B level.
++Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
++.SH CLASSIFICATION ALGORITHM
++
++Classification is a loop, which terminates when a leaf class is found. At any
++point the loop may jump to the fallback algorithm.
++
++The loop consists of the following steps:
++.TP
++(i)
++If the packet is generated locally and has a valid classid encoded within its
++.B skb->priority,
++choose it and terminate.
++
++.TP
++(ii)
++Consult the tc filters, if any, attached to this child. If these return
++a class which is not a leaf class, restart loop from the class returned.
++If it is a leaf, choose it and terminate.
++.TP
++(iii)
++If the tc filters did not return a class, but did return a classid,
++try to find a class with that id within this qdisc.
++Check if the found class is of a lower
++.B level
++than the current class. If so, and the returned class is not a leaf node,
++restart the loop at the found class. If it is a leaf node, terminate.
++If we found an upward reference to a higher level, enter the fallback
++algorithm.
++.TP
++(iv)
++If the tc filters did not return a class, nor a valid reference to one,
++consider the minor number of the reference to be the priority. Retrieve
++a class from the defmap of this class for the priority. If this did not
++contain a class, consult the defmap of this class for the
++.B BEST_EFFORT
++class. If this is an upward reference, or no
++.B BEST_EFFORT
++class was defined,
++enter the fallback algorithm. If a valid class was found, and it is not a
++leaf node, restart the loop at this class. If it is a leaf, choose it and
++terminate. If
++neither the priority distilled from the classid, nor the
++.B BEST_EFFORT
++priority yielded a class, enter the fallback algorithm.
++.P
++The fallback algorithm resides outside of the loop and is as follows.
++.TP
++(i)
++Consult the defmap of the class at which the jump to fallback occured. If
++the defmap contains a class for the
++.B
++priority
++of the class (which is related to the TOS field), choose this class and
++terminate.
++.TP
++(ii)
++Consult the map for a class for the
++.B BEST_EFFORT
++priority. If found, choose it, and terminate.
++.TP
++(iii)
++Choose the class at which break out to the fallback algorithm occured. Terminate.
++.P
++The packet is enqueued to the class which was chosen when either algorithm
++terminated. It is therefore possible for a packet to be enqueued *not* at a
++leaf node, but in the middle of the hierarchy.
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++.B CERTAINTY ENDS HERE, ANK PLEASE HELP
++
++Each class is not allowed to send at length though - they can only dequeue a
++configurable amount of data during each round.
++
++If a class is about to go overlimit, and it is not
++.B bounded
++it will try to borrow avgidle from siblings that are not
++.B isolated.
++This process is repeated from the bottom upwards. If a class is unable
++to borrow enough avgidle to send a packet, it is throttled and not asked
++for a packet for enough time for the avgidle to increase above zero.
++
++.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
++.B AGAIN.
++
++.SH QDISC
++The root qdisc of a CBQ class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional.
++.TP
++avpkt bytes
++For calculations, the average packet size must be known. It is silently capped
++at a minimum of 2/3 of the interface MTU. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Defaults
++to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above.
++
++.TP
++priority priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc. Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guarantee Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-cbq.8 iproute2/debian/manpages/old/tc-cbq.8
+--- iproute2-orig/debian/manpages/old/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-htb.8 iproute2/debian/manpages/old/tc-htb.8
+--- iproute2-orig/debian/manpages/old/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,150 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a HTB qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the HTB instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the HTB can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-pbfifo.8 iproute2/debian/manpages/old/tc-pbfifo.8
+--- iproute2-orig/debian/manpages/old/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 iproute2/debian/manpages/old/tc-pfifo_fast.8
+--- iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-prio.8 iproute2/debian/manpages/old/tc-prio.8
+--- iproute2-orig/debian/manpages/old/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-red.8 iproute2/debian/manpages/old/tc-red.8
+--- iproute2-orig/debian/manpages/old/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on if ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-sfq.8 iproute2/debian/manpages/old/tc-sfq.8
+--- iproute2-orig/debian/manpages/old/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc-tbf.8 iproute2/debian/manpages/old/tc-tbf.8
+--- iproute2-orig/debian/manpages/old/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/old/tc.8 iproute2/debian/manpages/old/tc.8
+--- iproute2-orig/debian/manpages/old/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/old/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bytes per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/debian/manpages/tc-cbq-details.8 iproute2/debian/manpages/tc-cbq-details.8
+--- iproute2-orig/debian/manpages/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,425 @@
++.TH CBQ 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++Shaping is done using link idle time calculations, and actions taken if
++these calculations deviate from set limits.
++
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++From the kernel's perspective, this is hard to measure, so CBQ instead
++derives the idle time from the number of microseconds (in fact, jiffies)
++that elapse between requests from the device driver for more data. Combined
++with the knowledge of packet sizes, this is used to approximate how full or
++empty the link is.
++
++This is rather circumspect and doesn't always arrive at proper
++results. For example, what is the actual link speed of an interface
++that is not really able to transmit the full 100mbit/s of data,
++perhaps because of a badly implemented driver? A PCMCIA network card
++will also never achieve 100mbit/s because of the way the bus is
++designed - again, how do we calculate the idle time?
++
++The physical link bandwidth may be ill defined in case of not-quite-real
++network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
++bandwidth in that case is probably determined by the efficiency of pipes
++to userspace - which not defined.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data. If a verdict is reached, this
++process is repeated for the recipient class which might have further
++means of classifying traffic to its children, if any.
++
++CBQ has the following methods available to classify a packet to any child
++classes.
++.TP
++(i)
++.B skb->priority class encoding.
++Can be set from userspace by an application with the
++.B SO_PRIORITY
++setsockopt.
++The
++.B skb->priority class encoding
++only applies if the skb->priority holds a major:minor handle of an existing
++class within this qdisc.
++.TP
++(ii)
++tc filters attached to the class.
++.TP
++(iii)
++The defmap of a class, as set with the
++.B split & defmap
++parameters. The defmap may contain instructions for each possible Linux packet
++priority.
++
++.P
++Each class also has a
++.B level.
++Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
++.SH CLASSIFICATION ALGORITHM
++
++Classification is a loop, which terminates when a leaf class is found. At any
++point the loop may jump to the fallback algorithm.
++
++The loop consists of the following steps:
++.TP
++(i)
++If the packet is generated locally and has a valid classid encoded within its
++.B skb->priority,
++choose it and terminate.
++
++.TP
++(ii)
++Consult the tc filters, if any, attached to this child. If these return
++a class which is not a leaf class, restart loop from the class returned.
++If it is a leaf, choose it and terminate.
++.TP
++(iii)
++If the tc filters did not return a class, but did return a classid,
++try to find a class with that id within this qdisc.
++Check if the found class is of a lower
++.B level
++than the current class. If so, and the returned class is not a leaf node,
++restart the loop at the found class. If it is a leaf node, terminate.
++If we found an upward reference to a higher level, enter the fallback
++algorithm.
++.TP
++(iv)
++If the tc filters did not return a class, nor a valid reference to one,
++consider the minor number of the reference to be the priority. Retrieve
++a class from the defmap of this class for the priority. If this did not
++contain a class, consult the defmap of this class for the
++.B BEST_EFFORT
++class. If this is an upward reference, or no
++.B BEST_EFFORT
++class was defined,
++enter the fallback algorithm. If a valid class was found, and it is not a
++leaf node, restart the loop at this class. If it is a leaf, choose it and
++terminate. If
++neither the priority distilled from the classid, nor the
++.B BEST_EFFORT
++priority yielded a class, enter the fallback algorithm.
++.P
++The fallback algorithm resides outside of the loop and is as follows.
++.TP
++(i)
++Consult the defmap of the class at which the jump to fallback occured. If
++the defmap contains a class for the
++.B
++priority
++of the class (which is related to the TOS field), choose this class and
++terminate.
++.TP
++(ii)
++Consult the map for a class for the
++.B BEST_EFFORT
++priority. If found, choose it, and terminate.
++.TP
++(iii)
++Choose the class at which break out to the fallback algorithm occured. Terminate.
++.P
++The packet is enqueued to the class which was chosen when either algorithm
++terminated. It is therefore possible for a packet to be enqueued *not* at a
++leaf node, but in the middle of the hierarchy.
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++.B CERTAINTY ENDS HERE, ANK PLEASE HELP
++
++Each class is not allowed to send at length though - they can only dequeue a
++configurable amount of data during each round.
++
++If a class is about to go overlimit, and it is not
++.B bounded
++it will try to borrow avgidle from siblings that are not
++.B isolated.
++This process is repeated from the bottom upwards. If a class is unable
++to borrow enough avgidle to send a packet, it is throttled and not asked
++for a packet for enough time for the avgidle to increase above zero.
++
++.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
++.B AGAIN.
++
++.SH QDISC
++The root qdisc of a CBQ class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional.
++.TP
++avpkt bytes
++For calculations, the average packet size must be known. It is silently capped
++at a minimum of 2/3 of the interface MTU. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Defaults
++to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above.
++
++.TP
++priority priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc. Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guarantee Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-cbq.8 iproute2/debian/manpages/tc-cbq.8
+--- iproute2-orig/debian/manpages/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-htb.8 iproute2/debian/manpages/tc-htb.8
+--- iproute2-orig/debian/manpages/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,150 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a HTB qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the HTB instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the HTB can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-pbfifo.8 iproute2/debian/manpages/tc-pbfifo.8
+--- iproute2-orig/debian/manpages/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-pfifo_fast.8 iproute2/debian/manpages/tc-pfifo_fast.8
+--- iproute2-orig/debian/manpages/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-prio.8 iproute2/debian/manpages/tc-prio.8
+--- iproute2-orig/debian/manpages/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-red.8 iproute2/debian/manpages/tc-red.8
+--- iproute2-orig/debian/manpages/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on if ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-sfq.8 iproute2/debian/manpages/tc-sfq.8
+--- iproute2-orig/debian/manpages/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc-tbf.8 iproute2/debian/manpages/tc-tbf.8
+--- iproute2-orig/debian/manpages/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/manpages/tc.8 iproute2/debian/manpages/tc.8
+--- iproute2-orig/debian/manpages/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/manpages/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bytes per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/debian/postinst iproute2/debian/postinst
+--- iproute2-orig/debian/postinst 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/postinst 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,6 @@
++#!/bin/sh -e
++
++# FHS:
++if [ "$1" = "configure" -a -d /usr/doc -a ! -e /usr/doc/iproute ]; then
++ ln -sf ../share/doc/iproute /usr/doc/iproute
++fi
+diff -Naur iproute2-orig/debian/postrm iproute2/debian/postrm
+--- iproute2-orig/debian/postrm 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/postrm 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,6 @@
++#!/bin/sh
++
++if [ "$1" = "purge" ]
++then
++ rm -rf /etc/iproute2
++fi
+diff -Naur iproute2-orig/debian/prerm iproute2/debian/prerm
+--- iproute2-orig/debian/prerm 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/prerm 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,5 @@
++#!/bin/sh -e
++
++if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/iproute ]; then
++ rm -f /usr/doc/iproute
++fi
+diff -Naur iproute2-orig/debian/rules iproute2/debian/rules
+--- iproute2-orig/debian/rules 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/rules 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,85 @@
++#!/usr/bin/make -f
++#
++# Copyright (C) 1999 Roberto Lumbreras <rover@debian.org>
++# Copyright (C) 1999-2002 Juan Cespedes <cespedes@debian.org>
++# Copying: GPL
++
++SHELL = bash
++
++PACKAGE = $(shell perl -e 'print <> =~ /^(.*) \(.*\)/' debian/changelog)
++PKG_VER = $(shell perl -e 'print <> =~ /\((.*)\)/' debian/changelog)
++PKG_UPVER= $(shell perl -e 'print <> =~ /\((.*)-[^-]*\)/' debian/changelog)
++
++BINS = ip/ip
++SBINS = ip/rtmon ip/rtacct tc/tc
++SHBINS = ip/routef ip/routel # ip/ifcfg ip/rtpr
++DOCS = README* doc/Plan debian/README.Debian
++MAN8 = debian/manpages/*.8
++MANLINKS= rtmon rtacct routef routel
++TEXDOCS = ip-cref ip-tunnels api-ip6-flowlabels
++
++build: stamp-build
++
++stamp-build:
++ test -f include-glibc/netinet/in.h.orig || \
++ mv include-glibc/netinet/in.h \
++ include-glibc/netinet/in.h.orig
++ $(MAKE) KERNEL_INCLUDE=/usr/include
++ $(MAKE) -C doc
++ touch stamp-build
++
++binary: binary-indep binary-arch
++
++binary-indep:
++
++binary-arch: checkroot stamp-build
++ $(RM) -r debian/tmp
++ install -d -m0755 debian/tmp/{DEBIAN,bin,sbin,usr/{bin,share/doc/$(PACKAGE),share/man/man{7,8}}}
++ install -s -m0755 $(BINS) debian/tmp/bin/
++ install -s -m0755 $(SBINS) debian/tmp/sbin/
++ ln -s /bin/ip debian/tmp/sbin/ip
++ install -m0755 $(SHBINS) debian/tmp/usr/bin/
++ cp -p $(DOCS) debian/tmp/usr/share/doc/$(PACKAGE)/
++ cp -rp examples debian/tmp/usr/share/doc/$(PACKAGE)/
++ find debian/tmp/usr/share/doc/$(PACKAGE)/examples -type f -exec chmod -x {} \;
++ install -m0644 debian/changelog debian/tmp/usr/share/doc/$(PACKAGE)/changelog.Debian
++ cp -p RELNOTES debian/tmp/usr/share/doc/$(PACKAGE)/changelog
++ for i in $(TEXDOCS); do \
++ install -m0644 doc/$$i.tex debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ install -m0644 doc/$$i.dvi debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ install -m0644 doc/$$i.ps debian/tmp/usr/share/doc/$(PACKAGE)/; \
++ done
++ install -m0644 $(MAN8) debian/tmp/usr/share/man/man8/
++ gzip -9fr debian/tmp/usr/share || true
++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-pfifo.8.gz
++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-bfifo.8.gz
++ for i in $(MANLINKS); do \
++ ln -s ../man7/undocumented.7.gz debian/tmp/usr/share/man/man8/$$i.8.gz; \
++ done
++ cp -p debian/copyright debian/tmp/usr/share/doc/$(PACKAGE)/
++ cp -rp etc debian/tmp/
++ install -m0644 debian/conffiles debian/tmp/DEBIAN/
++
++ dpkg-shlibdeps $(BINS) $(SBINS)
++ dpkg-gencontrol -isp
++ chown -R root.root debian/tmp
++ chmod -R u=rwX,go=rX debian/tmp
++ dpkg --build debian/tmp ..
++
++checkdir:
++ @test -f debian/rules
++
++checkroot: checkdir
++ @test 0 = `id -u` || { echo "Error: not super-user"; exit 1; }
++
++clean: checkdir debian/control
++ $(RM) stamp-build debian/files debian/substvars
++ $(MAKE) clean
++ $(MAKE) -C doc clean
++ $(RM) `find . -name "*~" -o -name core`
++ $(RM) -r debian/tmp
++ test -f include-glibc/netinet/in.h.orig && \
++ mv include-glibc/netinet/in.h.orig \
++ include-glibc/netinet/in.h || true
++
++.PHONY: build binary binary-arch binary-indep checkdir checkroot clean
+diff -Naur iproute2-orig/debian/tc-cbq.8 iproute2/debian/tc-cbq.8
+--- iproute2-orig/debian/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,353 @@
++.TH CBQ 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++CBQ \- Class Based Queueing
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] cbq [ allot
++bytes
++.B ] avpkt
++bytes
++.B bandwidth
++rate
++.B [ cell
++bytes
++.B ] [ ewma
++log
++.B ] [ mpu
++bytes
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] cbq allot
++bytes
++.B [ bandwidth
++rate
++.B ] [ rate
++rate
++.B ] prio
++priority
++.B [ weight
++weight
++.B ] [ minburst
++packets
++.B ] [ maxburst
++packets
++.B ] [ ewma
++log
++.B ] [ cell
++bytes
++.B ] avpkt
++bytes
++.B [ mpu
++bytes
++.B ] [ bounded isolated ] [ split
++handle
++.B & defmap
++defmap
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++Class Based Queueing is a classful qdisc that implements a rich
++linksharing hierarchy of classes. It contains shaping elements as
++well as prioritizing capabilities. Shaping is performed using link
++idle time calculations based on the timing of dequeue events and
++underlying link bandwidth.
++
++.SH SHAPING ALGORITHM
++When shaping a 10mbit/s connection to 1mbit/s, the link will
++be idle 90% of the time. If it isn't, it needs to be throttled so that it
++IS idle 90% of the time.
++
++During operations, the effective idletime is measured using an
++exponential weighted moving average (EWMA), which considers recent
++packets to be exponentially more important than past ones. The Unix
++loadaverage is calculated in the same way.
++
++The calculated idle time is subtracted from the EWMA measured one,
++the resulting number is called 'avgidle'. A perfectly loaded link has
++an avgidle of zero: packets arrive exactly at the calculated
++interval.
++
++An overloaded link has a negative avgidle and if it gets too negative,
++CBQ throttles and is then 'overlimit'.
++
++Conversely, an idle link might amass a huge avgidle, which would then
++allow infinite bandwidths after a few hours of silence. To prevent
++this, avgidle is capped at
++.B maxidle.
++
++If overlimit, in theory, the CBQ could throttle itself for exactly the
++amount of time that was calculated to pass between packets, and then
++pass one packet, and throttle again. Due to timer resolution constraints,
++this may not be feasible, see the
++.B minburst
++parameter below.
++
++.SH CLASSIFICATION
++Within the one CBQ instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, CBQ starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++Consult the defmap for the priority assigned to this packet, which depends
++on the TOS bits. Check if the referral is leafless, otherwise restart.
++.TP
++(iii)
++Ask the defmap for instructions for the 'best effort' priority. Check the
++answer for leafness, otherwise restart.
++.TP
++(iv)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++For more details, see
++.BR tc-cbq-details(8).
++
++.SH LINK SHARING ALGORITHM
++When dequeuing for sending to the network device, CBQ decides which of its
++classes will be allowed to send. It does so with a Weighted Round Robin process
++in which each class with packets gets a chance to send in turn. The WRR process
++starts by asking the highest priority classes (lowest numerically -
++highest semantically) for packets, and will continue to do so until they
++have no more data to offer, in which case the process repeats for lower
++priorities.
++
++Classes by default borrow bandwidth from their siblings. A class can be
++prevented from doing so by declaring it 'bounded'. A class can also indicate
++its unwillingness to lend out bandwidth by being 'isolated'.
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++allot bytes
++This allotment is the 'chunkiness' of link sharing and is used for determining packet
++transmission time tables. The qdisc allot differs slightly from the class allot discussed
++below. Optional. Defaults to a reasonable value, related to avpkt.
++.TP
++avpkt bytes
++The average size of a packet is needed for calculating maxidle, and is also used
++for making sure 'allot' has a safe value. Mandatory.
++.TP
++bandwidth rate
++To determine the idle time, CBQ must know the bandwidth of your underlying
++physical interface, or parent qdisc. This is a vital parameter, more about it
++later. Mandatory.
++.TP
++cell
++The cell size determines he granularity of packet transmission time calculations. Has a sensible default.
++.TP
++mpu
++A zero sized packet may still take time to transmit. This value is the lower
++cap for packet transmission time calculations - packets smaller than this value
++are still deemed to have this size. Defaults to zero.
++.TP
++ewma log
++When CBQ needs to measure the average idle time, it does so using an
++Exponentially Weighted Moving Average which smoothes out measurements into
++a moving average. The EWMA LOG determines how much smoothing occurs. Lower
++values imply greater sensitivity. Must be between 0 and 31. Defaults
++to 5.
++.P
++A CBQ qdisc does not shape out of its own accord. It only needs to know certain
++parameters about the underlying link. Actual shaping is done in classes.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++weight weight
++When dequeuing to the interface, classes are tried for traffic in a
++round-robin fashion. Classes with a higher configured qdisc will generally
++have more traffic to offer during each round, so it makes sense to allow
++it to dequeue more traffic. All weights under a class are normalized, so
++only the ratios matter. Defaults to the configured rate, unless the priority
++of this class is maximal, in which case it is set to 1.
++.TP
++allot bytes
++Allot specifies how many bytes a qdisc can dequeue
++during each round of the process. This parameter is weighted using the
++renormalized class weight described above. Silently capped at a minimum of
++3/2 avpkt. Mandatory.
++
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++avpkt
++See the QDISC section.
++
++.TP
++rate rate
++Maximum rate this class and all its children combined can send at. Mandatory.
++
++.TP
++bandwidth rate
++This is different from the bandwidth specified when creating a CBQ disc! Only
++used to determine maxidle and offtime, which are only calculated when
++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst.
++
++.TP
++maxburst
++This number of packets is used to calculate maxidle so that when
++avgidle is at maxidle, this number of average packets can be burst
++before avgidle drops to 0. Set it higher to be more tolerant of
++bursts. You can't set maxidle directly, only via this parameter.
++
++.TP
++minburst
++As mentioned before, CBQ needs to throttle in case of
++overlimit. The ideal solution is to do so for exactly the calculated
++idle time, and pass 1 packet. However, Unix kernels generally have a
++hard time scheduling events shorter than 10ms, so it is better to
++throttle for a longer period, and then pass minburst packets in one
++go, and then sleep minburst times longer.
++
++The time to wait is called the offtime. Higher values of minburst lead
++to more accurate shaping in the long term, but to bigger bursts at
++millisecond timescales. Optional.
++
++.TP
++minidle
++If avgidle is below 0, we are overlimits and need to wait until
++avgidle will be big enough to send one packet. To prevent a sudden
++burst from shutting down the link for a prolonged period of time,
++avgidle is reset to minidle if it gets too low.
++
++Minidle is specified in negative microseconds, so 10 means that
++avgidle is capped at -10us. Optional.
++
++.TP
++bounded
++Signifies that this class will not borrow bandwidth from its siblings.
++.TP
++isolated
++Means that this class will not borrow bandwidth to its siblings
++
++.TP
++split major:minor & defmap bitmap[/bitmap]
++If consulting filters attached to a class did not give a verdict,
++CBQ can also classify based on the packet's priority. There are 16
++priorities available, numbered from 0 to 15.
++
++The defmap specifies which priorities this class wants to receive,
++specified as a bitmap. The Least Significant Bit corresponds to priority
++zero. The
++.B split
++parameter tells CBQ at which class the decision must be made, which should
++be a (grand)parent of the class you are adding.
++
++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
++configures class 10:0 to send packets with priorities 6 and 7 to 10:1.
++
++The complimentary configuration would then
++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1.
++.TP
++estimator interval timeconstant
++CBQ can measure how much bandwidth each class is using, which tc filters
++can use to classify packets with. In order to determine the bandwidth
++it uses a very simple estimator that measures once every
++.B interval
++microseconds how much traffic has passed. This again is a EWMA, for which
++the time constant can be specified, also in microseconds. The
++.B time constant
++corresponds to the sluggishness of the measurement or, conversely, to the
++sensitivity of the average to short bursts. Higher values mean less
++sensitivity.
++
++.SH BUGS
++The actual bandwidth of the underlying link may not be known, for example
++in the case of PPoE or PPTP connections which in fact may send over a
++pipe, instead of over a physical device. CBQ is quite resilient to major
++errors in the configured bandwidth, probably a the cost of coarser shaping.
++
++Default kernels rely on coarse timing information for making decisions. These
++may make shaping precise in the long term, but inaccurate on second long scales.
++
++See
++.BR tc-cbq-details(8)
++for hints on how to improve this.
++
++.SH SOURCES
++.TP
++o
++Sally Floyd and Van Jacobson, "Link-sharing and Resource
++Management Models for Packet Networks",
++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
++
++.TP
++o
++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
++
++.TP
++o
++Sally Floyd, "Notes on Class-Based Queueing: Setting
++Parameters", 1996
++
++.TP
++o
++Sally Floyd and Michael Speer, "Experimental Results
++for Class-Based Queueing", 1998, not published.
++
++
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-htb.8 iproute2/debian/tc-htb.8
+--- iproute2-orig/debian/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,153 @@
++.TH HTB 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++HTB \- Hierarchy Token Bucket
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] htb [ default
++minor-id
++.B ]
++
++.B tc class ... dev
++dev
++.B parent
++major:[minor]
++.B [ classid
++major:minor
++.B ] htb rate
++rate
++.B [ ceil
++rate
++.B ] burst
++bytes
++.B [ cburst
++bytes
++.B ] [ prio
++priority
++.B ]
++
++.SH DESCRIPTION
++HTB is meant as a more understandable and intuitive replacement for
++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use
++of the outbound bandwidth on a given link. Both allow you to use one
++physical link to simulate several slower links and to send different
++kinds of traffic on different simulated links. In both cases, you have
++to specify how to divide the physical link into simulated links and
++how to decide which simulated link to use for a given packet to be sent.
++
++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm
++which does not depend on interface characteristics and so does not need to
++know the underlying bandwidth of the outgoing interface.
++
++.SH SHAPING ALGORITHM
++Shaping works as documented in
++.B tc-tbf (8).
++
++.SH CLASSIFICATION
++Within the one HRB instance many classes may exist. Each of these classes
++contains another qdisc, by default
++.BR tc-pfifo (8).
++
++When enqueueing a packet, HTB starts at the root and uses various methods to
++determine which class should receive the data.
++
++In the absence of uncommon configuration options, the process is rather easy.
++At each node we look for an instruction, and then go to the class the
++instruction refers us to. If the class found is a barren leaf-node (without
++children), we enqueue the packet there. If it is not yet a leaf node, we do
++the whole thing over again starting from that node.
++
++The following actions are performed, in order at each node we visit, until one
++sends us to another node, or terminates the process.
++.TP
++(i)
++Consult filters attached to the class. If sent to a leafnode, we are done.
++Otherwise, restart.
++.TP
++(ii)
++If none of the above returned with an instruction, enqueue at this node.
++.P
++This algorithm makes sure that a packet always ends up somewhere, even while
++you are busy building your configuration.
++
++.SH LINK SHARING ALGORITHM
++FIXME
++
++.SH QDISC
++The root of a CBQ qdisc class tree has the following parameters:
++
++.TP
++parent major:minor | root
++This mandatory parameter determines the place of the CBQ instance, either at the
++.B root
++of an interface or within an existing class.
++.TP
++handle major:
++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only
++of a major number, followed by a colon. Optional, but very useful if classes
++will be generated within this qdisc.
++.TP
++default minor-id
++Unclassified traffic gets sent to the class with this minor-id.
++
++.SH CLASSES
++Classes have a host of parameters to configure their operation.
++
++.TP
++parent major:minor
++Place of this class within the hierarchy. If attached directly to a qdisc
++and not to another class, minor can be omitted. Mandatory.
++.TP
++classid major:minor
++Like qdiscs, classes can be named. The major number must be equal to the
++major number of the qdisc to which it belongs. Optional, but needed if this
++class is going to have children.
++.TP
++prio priority
++In the round-robin process, classes with the lowest priority field are tried
++for packets first. Mandatory.
++
++.TP
++rate rate
++Maximum rate this class and all its children are guaranteed. Mandatory.
++
++.TP
++ceil rate
++Maximum rate at which a class can send, if its parent has bandwidth to spare.
++Defaults to the configured rate, which implies no borrowing
++
++.TP
++burst bytes
++Amount of bytes that can be burst at
++.B ceil
++speed, in excess of the configured
++.B rate.
++Should be at least as high as the highest burst of all children.
++
++.TP
++cburst bytes
++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast
++as the interface can transmit them. For perfect evening out, should be equal to at most one average
++packet. Should be at least as high as the highest cburst of all children.
++
++.SH NOTES
++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel,
++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick.
++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte
++burst as 100*12kb*8 equals 10mbit.
++
++.SH BUGS
++Not in the stock kernel yet.
++
++.SH SEE ALSO
++.BR tc (8)
++.P
++HTB website: http://luxik.cdi.cz/~devik/qos/htb/
++.SH AUTHOR
++Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-pbfifo.8 iproute2/debian/tc-pbfifo.8
+--- iproute2-orig/debian/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,72 @@
++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo \- Packet limited First In, First Out queue
++.P
++bfifo \- Byte limited First In, First Out queue
++
++.SH SYNOPSIS
++.B tc qdisc ... add pfifo
++.B [ limit
++packets
++.B ]
++.P
++.B tc qdisc ... add bfifo
++.B [ limit
++bytes
++.B ]
++
++.SH DESCRIPTION
++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the
++simplest queues possible and therefore have no overhead.
++.B pfifo
++constrains the queue size as measured in packets.
++.B bfifo
++does so as measured in bytes.
++
++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer
++pfifo or bfifo over the default.
++
++.SH ALGORITHM
++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of
++a list. When a packet needs to be sent out to the network, it is taken from the head of the list.
++
++If the list is too long, no further packets are allowed on. This is called 'tail drop'.
++
++.SH PARAMETERS
++.TP
++limit
++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults
++to the interface txqueuelen, as specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU.
++
++.SH OUTPUT
++The output of
++.B tc -s qdisc ls
++contains the limit, either in packets or in bytes, and the number of bytes
++and packets actually sent. An unsent and dropped packet only appears between braces
++and is not counted as 'Sent'.
++
++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets.
++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no
++overlimits:
++.P
++.nf
++# tc -s qdisc ls dev eth0
++qdisc pfifo 8001: dev eth0 limit 100p
++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)
++.fi
++
++If a backlog occurs, this is displayed as well.
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-pfifo_fast.8 iproute2/debian/tc-pfifo_fast.8
+--- iproute2-orig/debian/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,59 @@
++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux"
++.SH NAME
++pfifo_fast \- three-band first in, first out queue
++
++.SH DESCRIPTION
++pfifo_fast is the default qdisc of each interface.
++
++Whenever an interface is created, the pfifo_fast qdisc is automatically used
++as a queue. If another qdisc is attached, it preempts the default
++pfifo_fast, which automatically returns to function when an existing qdisc
++is detached.
++
++In this sense this qdisc is magic, and unlike other qdiscs.
++
++.SH ALGORITHM
++The algorithm is very similar to that of the classful
++.BR tc-prio (8)
++qdisc.
++.B pfifo_fast
++is like three
++.BR tc-pfifo (8)
++queues side by side, where packets can be enqueued in any of the three bands
++based on their Type of Service bits or assigned priority.
++
++Not all three bands are dequeued simultaneously - as long as lower bands
++have traffic, higher bands are never dequeued. This can be used to
++prioritize interactive traffic or penalize 'lowest cost' traffic.
++
++Each band can be txqueuelen packets long, as configured with
++.BR ifconfig (8)
++or
++.BR ip (8).
++Additional packets coming in are not enqueued but are instead dropped.
++
++See
++.BR tc-prio (8)
++for complete details on how TOS bits are translated into bands.
++.SH PARAMETERS
++.TP
++txqueuelen
++The length of the three bands depends on the interface txqueuelen, as
++specified with
++.BR ifconfig (8)
++or
++.BR ip (8).
++
++.SH BUGS
++Does not maintain statistics and does not show up in tc qdisc ls. This is because
++it is the automatic default in the absence of a configured qdisc.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>
++
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-prio.8 iproute2/debian/tc-prio.8
+--- iproute2-orig/debian/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,187 @@
++.TH PRIO 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++PRIO \- Priority qdisc
++.SH SYNOPSIS
++.B tc qdisc ... dev
++dev
++.B ( parent
++classid
++.B | root) [ handle
++major:
++.B ] prio [ bands
++bands
++.B ] [ priomap
++band,band,band...
++.B ] [ estimator
++interval timeconstant
++.B ]
++
++.SH DESCRIPTION
++The PRIO qdisc is a simple classful queueing discipline that contains
++an arbitrary number of classes of differing priority. The classes are
++dequeued in numerical descending order of priority. PRIO is a scheduler
++and never delays packets - it is a work-conserving qdisc, though the qdiscs
++contained in the classes may not be.
++
++Very useful for lowering latency when there is no need for slowing down
++traffic.
++
++.SH ALGORITHM
++On creation with 'tc qdisc add', a fixed number of bands is created. Each
++band is a class, although is not possible to add classes with 'tc qdisc
++add', the number of bands to be created must instead be specified on the
++commandline attaching PRIO to its root.
++
++When dequeueing, band 0 is tried first and only if it did not deliver a
++packet does PRIO try band 1, and so onwards. Maximum reliability packets
++should therefore go to band 0, minimum delay to band 1 and the rest to band
++2.
++
++As the PRIO qdisc itself will have minor number 0, band 0 is actually
++major:1, band 1 is major:2, etc. For major, substitute the major number
++assigned to the qdisc on 'tc qdisc add' with the
++.B handle
++parameter.
++
++.SH CLASSIFICATION
++Three methods are available to PRIO to determine in which band a packet will
++be enqueued.
++.TP
++From userspace
++A process with sufficient privileges can encode the destination class
++directly with SO_PRIORITY, see
++.BR tc(7).
++.TP
++with a tc filter
++A tc filter attached to the root qdisc can point traffic directly to a class
++.TP
++with the priomap
++Based on the packet priority, which in turn is derived from the Type of
++Service assigned to the packet.
++.P
++Only the priomap is specific to this qdisc.
++.SH QDISC PARAMETERS
++.TP
++bands
++Number of bands. If changed from the default of 3,
++.B priomap
++must be updated as well.
++.TP
++priomap
++The priomap maps the priority of
++a packet to a class. The priority can either be set directly from userspace,
++or be derived from the Type of Service of the packet.
++
++Determines how packet priorities, as assigned by the kernel, map to
++bands. Mapping occurs based on the TOS octet of the packet, which looks like
++this:
++
++.nf
++0 1 2 3 4 5 6 7
+++---+---+---+---+---+---+---+---+
++| | | |
++|PRECEDENCE | TOS |MBZ|
++| | | |
+++---+---+---+---+---+---+---+---+
++.fi
++
++The four TOS bits (the 'TOS field') are defined as:
++
++.nf
++Binary Decimcal Meaning
++-----------------------------------------
++1000 8 Minimize delay (md)
++0100 4 Maximize throughput (mt)
++0010 2 Maximize reliability (mr)
++0001 1 Minimize monetary cost (mmc)
++0000 0 Normal Service
++.fi
++
++As there is 1 bit to the right of these four bits, the actual value of the
++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the
++value of the entire TOS field, not just the four bits. It is the value you
++see in the first column of this table:
++
++.nf
++TOS Bits Means Linux Priority Band
++------------------------------------------------------------
++0x0 0 Normal Service 0 Best Effort 1
++0x2 1 Minimize Monetary Cost 1 Filler 2
++0x4 2 Maximize Reliability 0 Best Effort 1
++0x6 3 mmc+mr 0 Best Effort 1
++0x8 4 Maximize Throughput 2 Bulk 2
++0xa 5 mmc+mt 2 Bulk 2
++0xc 6 mr+mt 2 Bulk 2
++0xe 7 mmc+mr+mt 2 Bulk 2
++0x10 8 Minimize Delay 6 Interactive 0
++0x12 9 mmc+md 6 Interactive 0
++0x14 10 mr+md 6 Interactive 0
++0x16 11 mmc+mr+md 6 Interactive 0
++0x18 12 mt+md 4 Int. Bulk 1
++0x1a 13 mmc+mt+md 4 Int. Bulk 1
++0x1c 14 mr+mt+md 4 Int. Bulk 1
++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
++.fi
++
++The second column contains the value of the relevant
++four TOS bits, followed by their translated meaning. For example, 15 stands
++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum
++Throughput AND Minimum Delay.
++
++The fourth column lists the way the Linux kernel interprets the TOS bits, by
++showing to which Priority they are mapped.
++
++The last column shows the result of the default priomap. On the commandline,
++the default priomap looks like this:
++
++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
++
++This means that priority 4, for example, gets mapped to band number 1.
++The priomap also allows you to list higher priorities (> 7) which do not
++correspond to TOS mappings, but which are set by other means.
++
++This table from RFC 1349 (read it for more details) explains how
++applications might very well set their TOS bits:
++
++.nf
++TELNET 1000 (minimize delay)
++FTP
++ Control 1000 (minimize delay)
++ Data 0100 (maximize throughput)
++
++TFTP 1000 (minimize delay)
++
++SMTP
++ Command phase 1000 (minimize delay)
++ DATA phase 0100 (maximize throughput)
++
++Domain Name Service
++ UDP Query 1000 (minimize delay)
++ TCP Query 0000
++ Zone Transfer 0100 (maximize throughput)
++
++NNTP 0001 (minimize monetary cost)
++
++ICMP
++ Errors 0000
++ Requests 0000 (mostly)
++ Responses <same as request> (mostly)
++.fi
++
++
++.SH CLASSES
++PRIO classes cannot be configured further - they are automatically created
++when the PRIO qdisc is attached. Each class however can contain yet a
++further qdisc.
++
++.SH BUGS
++Large amounts of traffic in the lower bands can cause starvation of higher
++bands. Can be prevented by attaching a shaper (for example,
++.BR tc-tbf(8)
++to these bands to make sure they cannot dominate the link.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim
++<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-red.8 iproute2/debian/tc-red.8
+--- iproute2-orig/debian/tc-red.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-red.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,131 @@
++.TH RED 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++red \- Random Early Detection
++.SH SYNOPSIS
++.B tc qdisc ... red
++.B limit
++bytes
++.B min
++bytes
++.B max
++bytes
++.B avpkt
++bytes
++.B burst
++packets
++.B [ ecn ] [ bandwidth
++rate
++.B ] probability
++chance
++
++.SH DESCRIPTION
++Random Early Detection is a classless qdisc which manages its queue size
++smartly. Regular queues simply drop packets from the tail when they are
++full, which may not be the optimal behaviour. RED also performs tail drop,
++but does so in a more gradual way.
++
++Once the queue hits a certain average length, packets enqueued have a
++configurable chance of being marked (which may mean dropped). This chance
++increases linearly up to a point called the
++.B max
++average queue length, although the queue might get bigger.
++
++This has a host of benefits over simple taildrop, while not being processor
++intensive. It prevents synchronous retransmits after a burst in traffic,
++which cause further retransmits, etc.
++
++The goal is the have a small queue size, which is good for interactivity
++while not disturbing TCP/IP traffic with too many sudden drops after a burst
++of traffic.
++
++Depending on 08 ECN is configured, marking either means dropping or
++purely marking a packet as overlimit.
++.SH ALGORITHM
++The average queue size is used for determining the marking
++probability. This is calculated using an Exponential Weighted Moving
++Average, which can be more or less sensitive to bursts.
++
++When the average queue size is below
++.B min
++bytes, no packet will ever be marked. When it exceeds
++.B min,
++the probability of doing so climbs linearly up
++to
++.B probability,
++until the average queue size hits
++.B max
++bytes. Because
++.B probability
++is normally not set to 100%, the queue size might
++conceivably rise above
++.B max
++bytes, so the
++.B limit
++parameter is provided to set a hard maximum for the size of the queue.
++
++.SH PARAMETERS
++.TP
++min
++Average queue size at which marking becomes a possibility.
++.TP
++max
++At this average queue size, the marking probability is maximal. Should be at
++least twice
++.B min
++to prevent synchronous retransmits, higher for low
++.B min.
++.TP
++probability
++Maximum probability for marking, specified as a floating point
++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%,
++respectively).
++.TP
++limit
++Hard limit on the real (not average) queue size in bytes. Further packets
++are dropped. Should be set higher than max+burst. It is advised to set this
++a few times higher than
++.B max.
++.TP
++burst
++Used for determining how fast the average queue size is influenced by the
++real queue size. Larger values make the calculation more sluggish, allowing
++longer bursts of traffic before marking starts. Real life experiments
++support the following guideline: (min+min+max)/(3*avpkt).
++.TP
++avpkt
++Specified in bytes. Used with burst to determine the time constant for
++average queue size calculations. 1000 is a good value.
++.TP
++bandwidth
++This rate is used for calculating the average queue size after some
++idle time. Should be set to the bandwidth of your interface. Does not mean
++that RED will shape for you! Optional.
++.TP
++ecn
++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion
++Notification allows RED to notify remote hosts that their rate exceeds the
++amount of bandwidth available. Non-ECN capable hosts can only be notified by
++dropping a packet. If this parameter is specified, packets which indicate
++that their hosts honor ECN will only be marked and not dropped, unless the
++queue size hits
++.B limit
++bytes. Needs a tc binary with RED support compiled in. Recommended.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH SOURCES
++.TP
++o
++Floyd, S., and Jacobson, V., Random Early Detection gateways for
++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html
++.TP
++o
++Some changes to the algorithm by Alexey N. Kuznetsov.
++
++.SH AUTHORS
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Alexey Makarenko
++<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
++This manpage maintained by bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-sfq.8 iproute2/debian/tc-sfq.8
+--- iproute2-orig/debian/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,107 @@
++.TH TC 8 "8 December 2001" "iproute2" "Linux"
++.SH NAME
++sfq \- Stochastic Fairness Queueing
++.SH SYNOPSIS
++.B tc qdisc ... perturb
++seconds
++.B quantum
++bytes
++
++.SH DESCRIPTION
++
++Stochastic Fairness Queueing is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'.
++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing
++any single flow from drowning out the rest.
++
++This may in fact have some effect in mitigating a Denial of Service attempt.
++
++SFQ is work-conserving and therefore always delivers a packet if it has one available.
++.SH ALGORITHM
++On enqueueing, each packet is assigned to a hash bucket, based on
++.TP
++(i)
++Source address
++.TP
++(ii)
++Destination address
++.TP
++(iii)
++Source port
++.P
++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP.
++Packets with other protocols are hashed based on the 32bits representation of their
++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP
++connection.
++
++Each of these buckets should represent a unique flow. Because multiple flows may
++get hashed to the same bucket, the hashing algorithm is perturbed at configurable
++intervals so that the unfairness lasts only for a short while. Perturbation may
++however cause some inadvertent packet reordering to occur.
++
++When dequeuing, each hashbucket with data is queried in a round robin fashion.
++
++The compile time maximum length of the SFQ is 128 packets, which can be spread over
++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed
++on the fullest bucket, thus maintaining fairness.
++
++.SH PARAMETERS
++.TP
++perturb
++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that
++no perturbation occurs. Do not set too low for each perturbation may cause some packet
++reordering. Advised value: 10
++.TP
++quantum
++Amount of bytes a flow is allowed to dequeue during a round of the round robin process.
++Defaults to the MTU of the interface which is also the advised value and the minimum value.
++
++.SH EXAMPLE & USAGE
++
++To attach to device ppp0:
++.P
++# tc qdisc add dev ppp0 root sfq perturb 10
++.P
++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful
++if it owns the queue.
++This is the case when the link speed equals the actually available bandwidth. This holds
++for regular phone modems, ISDN connections and direct non-switched ethernet links.
++.P
++Most often, cable modems and DSL devices do not fall into this category. The same holds
++for when connected to a switch and trying to send data to a congested segment also
++connected to the switch.
++.P
++In this case, the effective queue does not reside within Linux and is therefore not
++available for scheduling.
++.P
++Embed SFQ in a classful qdisc to make sure it owns the queue.
++
++.SH SOURCE
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
++
++.TP
++o
++Paul E. McKenney "Stochastic Fairness Queuing",
++"Interworking: Research and Experience", v.2, 1991, p.113-131.
++
++.TP
++o
++See also:
++M. Shreedhar and George Varghese "Efficient Fair
++Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc-tbf.8 iproute2/debian/tc-tbf.8
+--- iproute2-orig/debian/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,138 @@
++.TH TC 8 "13 December 2001" "iproute2" "Linux"
++.SH NAME
++tbf \- Token Bucket Filter
++.SH SYNOPSIS
++.B tc qdisc ... tbf rate
++rate
++.B burst
++bytes/cell
++.B ( latency
++ms
++.B | limit
++bytes
++.B ) [ mpu
++bytes
++.B [ peakrate
++rate
++.B mtu
++bytes/cell
++.B ] ]
++.P
++burst is also known as buffer and maxburst. mtu is also known as minburst.
++.SH DESCRIPTION
++
++The Token Bucket Filter is a classless queueing discipline available for
++traffic control with the
++.BR tc (8)
++command.
++
++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle
++itself, although packets are available, to ensure that the configured rate is not exceeded.
++On all platforms except for Alpha,
++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness,
++sending out data exactly at the configured rates.
++
++Much higher rates are possible but at the cost of losing the minimal burstiness. In that
++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond
++timescales. Because of further queues living in network adaptors, this is often not a problem.
++
++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten
++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on
++average 1000 bytes.
++
++.SH ALGORITHM
++As the name implies, traffic is filtered based on the expenditure of
++.B tokens.
++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes
++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies
++the link for some time.
++
++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst
++in one go. Tokens arrive at a steady rate, until the bucket is full.
++
++If no tokens are available, packets are queued, up to a configured limit. The TBF now
++calculates the token deficit, and throttles until the first packet in the queue can be sent.
++
++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured
++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF
++with a very small bucket, so that it doesn't burst.
++
++To achieve perfection, the second bucket may contain only a single packet, which leads to
++the earlier mentioned 1mbit/s limit.
++
++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends
++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100
++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s.
++
++.SH PARAMETERS
++See
++.BR tc (8)
++for how to specify the units of these values.
++.TP
++limit or latency
++Limit is the number of bytes that can be queued waiting for tokens to become
++available. You can also specify this the other way around by setting the
++latency parameter, which specifies the maximum amount of time a packet can
++sit in the TBF. The latter calculation takes into account the size of the
++bucket, the rate and possibly the peakrate (if set). These two parameters
++are mutually exclusive.
++.TP
++burst
++Also known as buffer or maxburst.
++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously.
++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer
++if you want to reach your configured rate!
++
++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket.
++The minimum buffer size can be calculated by dividing the rate by HZ.
++
++Token usage calculations are performed using a table which by default has a resolution of 8 packets.
++This resolution can be changed by specifying the
++.B cell
++size with the burst. For example, to specify a 6000 byte buffer with a 16
++byte cell size, set a burst of 6000/16. You will probably never have to set
++this. Must be an integral power of 2.
++.TP
++mpu
++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit
++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero.
++.TP
++rate
++The speed knob. See remarks above about limits! See
++.BR tc (8)
++for units.
++.PP
++Furthermore, if a peakrate is desired, the following parameters are available:
++
++.TP
++peakrate
++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does
++not need to be set, it is only necessary if perfect millisecond timescale shaping is required.
++
++.TP
++mtu/minburst
++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface.
++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst
++allows around 3mbit/s of peakrate, given 1000 byte packets.
++
++Like the regular burstsize you can also specify a
++.B cell
++size.
++.SH EXAMPLE & USAGE
++
++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s,
++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes
++at most 70ms of latency, with perfect peakrate behaviour, issue:
++.P
++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\
++ burst 5kb latency 70ms peakrate 1mbit \\
++ minburst 1540
++
++.SH SEE ALSO
++.BR tc (8)
++
++.SH AUTHOR
++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by
++bert hubert <ahu@ds9a.nl>
++
++
+diff -Naur iproute2-orig/debian/tc.8 iproute2/debian/tc.8
+--- iproute2-orig/debian/tc.8 1969-12-31 16:00:00.000000000 -0800
++++ iproute2/debian/tc.8 2004-05-21 00:09:38.000000000 -0700
+@@ -0,0 +1,348 @@
++.TH TC 8 "16 December 2001" "iproute2" "Linux"
++.SH NAME
++tc \- show / manipulate traffic control settings
++.SH SYNOPSIS
++.B tc qdisc [ add | change | replace | link ] dev
++DEV
++.B
++[ parent
++qdisc-id
++.B | root ]
++.B [ handle
++qdisc-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc class [ add | change | replace ] dev
++DEV
++.B parent
++qdisc-id
++.B [ classid
++class-id ] qdisc
++[ qdisc specific parameters ]
++.P
++
++.B tc filter [ add | change | replace ] dev
++DEV
++.B [ parent
++qdisc-id
++.B | root ] protocol
++protocol
++.B prio
++priority filtertype
++[ filtertype specific parameters ]
++.B flowid
++flow-id
++
++.B tc [-s | -d ] qdisc show [ dev
++DEV
++.B ]
++.P
++.B tc [-s | -d ] class show dev
++DEV
++.P
++.B tc filter show dev
++DEV
++
++.SH DESCRIPTION
++.B Tc
++is used to configure Traffic Control in the Linux kernel. Traffic Control consists
++of the following:
++
++.TP
++SHAPING
++When traffic is shaped, its rate of transmission is under control. Shaping may
++be more than lowering the available bandwidth - it is also used to smooth out
++bursts in traffic for better network behaviour. Shaping occurs on egress.
++
++.TP
++SCHEDULING
++By scheduling the transmission of packets it is possible to improve interactivity
++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering
++is also called prioritizing, and happens only on egress.
++
++.TP
++POLICING
++Where shaping deals with transmission of traffic, policing pertains to traffic
++arriving. Policing thus occurs on ingress.
++
++.TP
++DROPPING
++Traffic exceeding a set bandwidth may also be dropped forthwith, both on
++ingress and on egress.
++
++.P
++Processing of traffic is controlled by three kinds of objects: qdiscs,
++classes and filters.
++
++.SH QDISCS
++.B qdisc
++is short for 'queueing discipline' and it is elementary to
++understanding traffic control. Whenever the kernel needs to send a
++packet to an interface, it is
++.B enqueued
++to the qdisc configured for that interface. Immediately afterwards, the kernel
++tries to get as many packets as possible from the qdisc, for giving them
++to the network adaptor driver.
++
++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure
++First In, First Out queue. It does however store traffic when the network interface
++can't handle it momentarily.
++
++.SH CLASSES
++Some qdiscs can contain classes, which contain further qdiscs - traffic may
++then be enqueued in any of the inner qdiscs, which are within the
++.B classes.
++When the kernel tries to dequeue a packet from such a
++.B classful qdisc
++it can come from any of the classes. A qdisc may for example prioritize
++certain kinds of traffic by trying to dequeue from certain classes
++before others.
++
++.SH FILTERS
++A
++.B filter
++is used by a classful qdisc to determine in which class a packet will
++be enqueued. Whenever traffic arrives at a class with subclasses, it needs
++to be classified. Various methods may be employed to do so, one of these
++are the filters. All filters attached to the class are called, until one of
++them returns with a verdict. If no verdict was made, other criteria may be
++available. This differs per qdisc.
++
++It is important to notice that filters reside
++.B within
++qdiscs - they are not masters of what happens.
++
++.SH CLASSLESS QDISCS
++The classless qdiscs are:
++.TP
++[p|b]fifo
++Simplest usable qdisc, pure First In, First Out behaviour. Limited in
++packets or in bytes.
++.TP
++pfifo_fast
++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band
++queue which honors Type of Service flags, as well as the priority that may be
++assigned to a packet.
++.TP
++red
++Random Early Detection simulates physical congestion by randomly dropping
++packets when nearing configured bandwidth allocation. Well suited to very
++large bandwidth applications.
++.TP
++sfq
++Stochastic Fairness Queueing reorders queued traffic so each 'session'
++gets to send a packet in turn.
++.TP
++tbf
++The Token Bucket Filter is suited for slowing traffic down to a precisely
++configured rate. Scales well to large bandwidths.
++.SH CONFIGURING CLASSLESS QDISCS
++In the absence of classful qdiscs, classless qdiscs can only be attached at
++the root of a device. Full syntax:
++.P
++.B tc qdisc add dev
++DEV
++.B root
++QDISC QDISC-PARAMETERS
++
++To remove, issue
++.P
++.B tc qdisc del dev
++DEV
++.B root
++
++The
++.B pfifo_fast
++qdisc is the automatic default in the absence of a configured qdisc.
++
++.SH CLASSFUL QDISCS
++The classful qdiscs are:
++.TP
++CBQ
++Class Based Queueing implements a rich linksharing hierarchy of classes.
++It contains shaping elements as well as prioritizing capabilities. Shaping is
++performed using link idle time calculations based on average packet size and
++underlying link bandwidth. The latter may be ill-defined for some interfaces.
++.TP
++HTB
++The Hierarchy Token Bucket implements a rich linksharing hierarchy of
++classes with an emphasis on conforming to existing practices. HTB facilitates
++guaranteeing bandwidth to classes, while also allowing specification of upper
++limits to inter-class sharing. It contains shaping elements, based on TBF and
++can prioritize classes.
++.TP
++PRIO
++The PRIO qdisc is a non-shaping container for a configurable number of
++classes which are dequeued in order. This allows for easy prioritization
++of traffic, where lower classes are only able to send if higher ones have
++no packets available. To facilitate configuration, Type Of Service bits are
++honored by default.
++.SH THEORY OF OPERATION
++Classes form a tree, where each class has a single parent.
++A class may have multiple children. Some qdiscs allow for runtime addition
++of classes (CBQ, HTB) while others (PRIO) are created with a static number of
++children.
++
++Qdiscs which allow dynamic addition of classes can have zero or more
++subclasses to which traffic may be enqueued.
++
++Furthermore, each class contains a
++.B leaf qdisc
++which by default has
++.B pfifo
++behaviour though another qdisc can be attached in place. This qdisc may again
++contain classes, but each class can have only one leaf qdisc.
++
++When a packet enters a classful qdisc it can be
++.B classified
++to one of the classes within. Three criteria are available, although not all
++qdiscs will use all three:
++.TP
++tc filters
++If tc filters are attached to a class, they are consulted first
++for relevant instructions. Filters can match on all fields of a packet header,
++as well as on the firewall mark applied by ipchains or iptables. See
++.BR tc-filters (8).
++.TP
++Type of Service
++Some qdiscs have built in rules for classifying packets based on the TOS field.
++.TP
++skb->priority
++Userspace programs can encode a class-id in the 'skb->priority' field using
++the SO_PRIORITY option.
++.P
++Each node within the tree can have its own filters but higher level filters
++may also point directly to lower classes.
++
++If classification did not succeed, packets are enqueued to the leaf qdisc
++attached to that class. Check qdisc specific manpages for details, however.
++
++.SH NAMING
++All qdiscs, classes and filters have IDs, which can either be specified
++or be automatically assigned.
++
++IDs consist of a major number and a minor number, separated by a colon.
++
++.TP
++QDISCS
++A qdisc, which potentially can have children,
++gets assigned a major number, called a 'handle', leaving the minor
++number namespace available for classes. The handle is expressed as '10:'.
++It is customary to explicitly assign a handle to qdiscs expected to have
++children.
++
++.TP
++CLASSES
++Classes residing under a qdisc share their qdisc major number, but each have
++a separate minor number called a 'classid' that has no relation to their
++parent classes, only to their parent qdisc. The same naming custom as for
++qdiscs applies.
++
++.TP
++FILTERS
++Filters have a three part ID, which is only needed when using a hashed
++filter hierarchy, for which see
++.BR tc-filters (8).
++.SH UNITS
++All parameters accept a floating point number, possibly followed by a unit.
++.P
++Bandwidths or rates can be specified in:
++.TP
++kbps
++Kilobytes per second
++.TP
++mbps
++Megabytes per second
++.TP
++kbit
++Kilobits per second
++.TP
++mbit
++Megabits per second
++.TP
++bps or a bare number
++Bits per second
++.P
++Amounts of data can be specified in:
++.TP
++kb or k
++Kilobytes
++.TP
++mb or m
++Megabytes
++.TP
++mbit
++Megabits
++.TP
++kbit
++Kilobits
++.TP
++b or a bare number
++Bytes.
++.P
++Lengths of time can be specified in:
++.TP
++s, sec or secs
++Whole seconds
++.TP
++ms, msec or msecs
++Milliseconds
++.TP
++us, usec, usecs or a bare number
++Microseconds.
++
++.SH TC COMMANDS
++The following commands are available for qdiscs, classes and filter:
++.TP
++add
++Add a qdisc, class or filter to a node. For all entities, a
++.B parent
++must be passed, either by passing its ID or by attaching directly to the root of a device.
++When creating a qdisc or a filter, it can be named with the
++.B handle
++parameter. A class is named with the
++.B classid
++parameter.
++
++.TP
++remove
++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs
++are automatically deleted, as well as any filters attached to them.
++
++.TP
++change
++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception
++that the handle cannot be changed and neither can the parent. In other words,
++.B
++change
++cannot move a node.
++
++.TP
++replace
++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet
++it is created.
++
++.TP
++link
++Only available for qdiscs and performs a replace where the node
++must exist already.
++
++
++.SH HISTORY
++.B tc
++was written by Alexey N. Kuznetsov and added in Linux 2.2.
++.SH SEE ALSO
++.BR tc-cbq (8),
++.BR tc-htb (8),
++.BR tc-sfq (8),
++.BR tc-red (8),
++.BR tc-tbf (8),
++.BR tc-pfifo (8),
++.BR tc-bfifo (8),
++.BR tc-pfifo_fast (8),
++.BR tc-filters (8)
++
++.SH AUTHOR
++Manpage maintained by bert hubert (ahu@ds9a.nl)
++
+diff -Naur iproute2-orig/include/rt_names.h iproute2/include/rt_names.h
+--- iproute2-orig/include/rt_names.h 2000-04-16 10:42:50.000000000 -0700
++++ iproute2/include/rt_names.h 2004-05-21 00:16:36.000000000 -0700
+@@ -1,6 +1,8 @@
+ #ifndef RT_NAMES_H_
+ #define RT_NAMES_H_ 1
+
++#include <asm/byteorder.h>
++
+ const char* rtnl_rtprot_n2a(int id, char *buf, int len);
+ const char* rtnl_rtscope_n2a(int id, char *buf, int len);
+ const char* rtnl_rttable_n2a(int id, char *buf, int len);
+diff -Naur iproute2-orig/lib/rt_names.c iproute2/lib/rt_names.c
+--- iproute2-orig/lib/rt_names.c 2000-04-16 10:42:52.000000000 -0700
++++ iproute2/lib/rt_names.c 2004-05-21 00:16:36.000000000 -0700
+@@ -16,6 +16,7 @@
+ #include <fcntl.h>
+ #include <string.h>
+ #include <sys/time.h>
++#include <asm/byteorder.h>
+
+ static void rtnl_tab_initialize(char *file, char **tab, int size)
+ {
+diff -Naur iproute2-orig/misc/arpd.c iproute2/misc/arpd.c
+--- iproute2-orig/misc/arpd.c 2002-01-09 20:02:26.000000000 -0800
++++ iproute2/misc/arpd.c 2004-05-21 00:16:36.000000000 -0700
+@@ -16,7 +16,7 @@
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <netdb.h>
+-#include <db.h>
++#include <db_185.h>
+ #include <sys/ioctl.h>
+ #include <sys/poll.h>
+ #include <errno.h>
+@@ -28,6 +28,7 @@
+ #include <signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <linux/if_packet.h>
diff --git a/abs/core/iptables/PKGBUILD b/abs/core/iptables/PKGBUILD
new file mode 100644
index 0000000..c796285
--- /dev/null
+++ b/abs/core/iptables/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=iptables
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="A Linux kernel packet control tool"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.netfilter.org/"
+depends=('glibc')
+source=(http://www.iptables.org/projects/iptables/files/iptables-$pkgver.tar.bz2 \
+ iptables ip6tables empty.rules simple_firewall.rules iptables.conf.d)
+md5sums=('e628f033b95741266a315d54fe73db9c'
+ '89401d6f0cf1de46a455b7be6720a58b'
+ '6e0e88c2ed0c3715d1409ee3258a0046'
+ '14186bbafe21bb0638c0cb8e0903c829'
+ 'e53a83bb4d8ac8b7eadd7bd58294751d'
+ 'c7cf6e4455c228e50d20ce3edd75ee59')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m755 ../iptables $startdir/pkg/etc/rc.d/iptables
+ install -D -m755 ../ip6tables $startdir/pkg/etc/rc.d/ip6tables
+ install -D -m644 ../empty.rules $startdir/pkg/etc/iptables/empty.rules
+ install -D -m644 ../simple_firewall.rules $startdir/pkg/etc/iptables/simple_firewall.rules
+ install -D -m644 ../iptables.conf.d $startdir/pkg/etc/conf.d/iptables
+}
diff --git a/abs/core/iptables/PKGBUILD.orig b/abs/core/iptables/PKGBUILD.orig
new file mode 100644
index 0000000..b0182d8
--- /dev/null
+++ b/abs/core/iptables/PKGBUILD.orig
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=iptables
+pkgver=1.4.1
+pkgrel=1
+pkgdesc="A Linux kernel packet control tool"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.netfilter.org/"
+depends=('glibc')
+source=(http://www.iptables.org/projects/iptables/files/iptables-$pkgver.tar.bz2 \
+ iptables ip6tables empty.rules simple_firewall.rules iptables.conf.d)
+md5sums=('e628f033b95741266a315d54fe73db9c'
+ '89401d6f0cf1de46a455b7be6720a58b'
+ '6e0e88c2ed0c3715d1409ee3258a0046'
+ '14186bbafe21bb0638c0cb8e0903c829'
+ 'e53a83bb4d8ac8b7eadd7bd58294751d'
+ 'c7cf6e4455c228e50d20ce3edd75ee59')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i 's|/usr/local|/usr|' Makefile
+ sed -i 's|MANDIR:=$(PREFIX)/man|MANDIR:=$(PREFIX)/share/man|' Makefile
+ # this seems to cause more problems than help
+ # sed -i "s:/usr/src/linux:/usr/src/linux\*:" Makefile
+ make KERNEL_DIR=/usr/src/linux-$(uname -r) || return 1
+ make KERNEL_DIR=/usr/src/linux-$(uname -r) experimental || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install-devel || return 1
+ make PREFIX=$startdir/pkg/usr KERNEL_DIR=/usr/src/linux-$(uname -r) install-experimental || return 1
+ install -D -m755 ../iptables $startdir/pkg/etc/rc.d/iptables
+ install -D -m755 ../ip6tables $startdir/pkg/etc/rc.d/ip6tables
+ install -D -m644 ../empty.rules $startdir/pkg/etc/iptables/empty.rules
+ install -D -m644 ../simple_firewall.rules $startdir/pkg/etc/iptables/simple_firewall.rules
+ install -D -m644 ../iptables.conf.d $startdir/pkg/etc/conf.d/iptables
+}
diff --git a/abs/core/iptables/empty.rules b/abs/core/iptables/empty.rules
new file mode 100644
index 0000000..e24e1aa
--- /dev/null
+++ b/abs/core/iptables/empty.rules
@@ -0,0 +1,6 @@
+# Empty iptables rule file
+*filter
+:INPUT ACCEPT [0:0]
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [0:0]
+COMMIT
diff --git a/abs/core/iptables/ip6tables b/abs/core/iptables/ip6tables
new file mode 100755
index 0000000..1733db2
--- /dev/null
+++ b/abs/core/iptables/ip6tables
@@ -0,0 +1,97 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/iptables ] && . /etc/conf.d/iptables
+
+# Set defaults if settings are missing
+[ -z "$IP6TABLES" ] && IP6TABLES=/usr/sbin/ip6tables
+[ -z "$IP6TABLES_CONF" ] && IP6TABLES_CONF=/etc/iptables/ip6tables.rules
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ if [ ! -f $IP6TABLES_CONF ]; then
+ echo "Cannot load iptables rules: $IP6TABLES_CONF is missing!" >&2
+ exit 1
+ fi
+ stat_busy "Starting IP6 Tables"
+ if [ "$IPTABLES_FORWARD" = "1" ]; then
+ echo 1 >/proc/sys/net/ipv6/conf/default/forwarding
+ echo 1 >/proc/sys/net/ipv6/conf/all/forwarding
+ fi
+ if ck_daemon ip6tables; then
+ /usr/sbin/ip6tables-restore < $IP6TABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon ip6tables
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping IP6 Tables"
+ echo 0 >/proc/sys/net/ipv6/conf/all/forwarding
+ echo 0 >/proc/sys/net/ipv6/conf/default/forwarding
+ if ! ck_daemon ip6tables; then
+ fail=0
+ for table in $(cat /proc/net/ip6_tables_names); do
+ $IP6TABLES -t $table -F &>/dev/null && \
+ $IP6TABLES -t $table -X &>/dev/null && \
+ $IP6TABLES -t $table -Z &>/dev/null
+ [ $? -gt 0 ] && fail=1
+ done
+ if [ $fail -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ip6tables
+ # reset policies
+ for table in filter mangle raw; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P OUTPUT ACCEPT
+ fi
+ done
+ for table in filter mangle; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P INPUT ACCEPT
+ $IP6TABLES -t $table -P FORWARD ACCEPT
+ fi
+ done
+ for table in mangle raw; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P PREROUTING ACCEPT
+ fi
+ done
+ for table in mangle; do
+ if grep -qw $table /proc/net/ip6_tables_names; then
+ $IP6TABLES -t $table -P POSTROUTING ACCEPT
+ fi
+ done
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ save)
+ stat_busy "Saving IP6 Tables"
+ /usr/sbin/ip6tables-save >$IP6TABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|save}"
+esac
+exit 0
diff --git a/abs/core/iptables/iptables b/abs/core/iptables/iptables
new file mode 100755
index 0000000..50c13d5
--- /dev/null
+++ b/abs/core/iptables/iptables
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/iptables ] && . /etc/conf.d/iptables
+
+# Set defaults if settings are missing
+[ -z "$IPTABLES" ] && IPTABLES=/usr/sbin/iptables
+[ -z "$IPTABLES_CONF" ] && IPTABLES_CONF=/etc/iptables/iptables.rules
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ if [ ! -f $IPTABLES_CONF ]; then
+ echo "Cannot load iptables rules: $IPTABLES_CONF is missing!" >&2
+ exit 1
+ fi
+ stat_busy "Starting IP Tables"
+ if [ "$IPTABLES_FORWARD" = "1" ]; then
+ echo 1 >/proc/sys/net/ipv4/ip_forward
+ fi
+ if ck_daemon iptables; then
+ /usr/sbin/iptables-restore < $IPTABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon iptables
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping IP Tables"
+ echo 0 >/proc/sys/net/ipv4/ip_forward
+ if ! ck_daemon iptables; then
+ fail=0
+ for table in $(cat /proc/net/ip_tables_names); do
+ $IPTABLES -t $table -F &>/dev/null && \
+ $IPTABLES -t $table -X &>/dev/null && \
+ $IPTABLES -t $table -Z &>/dev/null
+ [ $? -gt 0 ] && fail=1
+ done
+ if [ $fail -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon iptables
+ # reset policies
+ for table in filter nat mangle raw; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P OUTPUT ACCEPT
+ fi
+ done
+ for table in filter mangle; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P INPUT ACCEPT
+ $IPTABLES -t $table -P FORWARD ACCEPT
+ fi
+ done
+ for table in nat mangle raw; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P PREROUTING ACCEPT
+ fi
+ done
+ for table in nat mangle; do
+ if grep -qw $table /proc/net/ip_tables_names; then
+ $IPTABLES -t $table -P POSTROUTING ACCEPT
+ fi
+ done
+ stat_done
+ fi
+ else
+ stat_fail
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ save)
+ stat_busy "Saving IP Tables"
+ /usr/sbin/iptables-save >$IPTABLES_CONF
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|save}"
+esac
+exit 0
diff --git a/abs/core/iptables/iptables.conf.d b/abs/core/iptables/iptables.conf.d
new file mode 100644
index 0000000..e9afea2
--- /dev/null
+++ b/abs/core/iptables/iptables.conf.d
@@ -0,0 +1,8 @@
+# Configuration for iptables rules
+
+IPTABLES=/usr/sbin/iptables
+IP6TABLES=/usr/sbin/ip6tables
+
+IPTABLES_CONF=/etc/iptables/iptables.rules
+IP6TABLES_CONF=/etc/iptables/ip6tables.rules
+IPTABLES_FORWARD=1 # enable IP forwarding?
diff --git a/abs/core/iptables/simple_firewall.rules b/abs/core/iptables/simple_firewall.rules
new file mode 100644
index 0000000..e1604cc
--- /dev/null
+++ b/abs/core/iptables/simple_firewall.rules
@@ -0,0 +1,11 @@
+*filter
+:INPUT DROP [0:0]
+:FORWARD DROP [0:0]
+:OUTPUT ACCEPT [0:0]
+-A INPUT -p icmp -j ACCEPT
+-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+-A INPUT -i lo -j ACCEPT
+-A INPUT -p tcp -j REJECT --reject-with tcp-reset
+-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
+-A INPUT -j REJECT --reject-with icmp-proto-unreachable
+COMMIT
diff --git a/abs/core/iputils/PKGBUILD b/abs/core/iputils/PKGBUILD
new file mode 100644
index 0000000..341158b
--- /dev/null
+++ b/abs/core/iputils/PKGBUILD
@@ -0,0 +1,72 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=iputils
+pkgver=20070202
+_traceroutever=1.4a12
+pkgrel=13
+pkgdesc="IP Configuration Utilities (and Ping)"
+arch=(i686 x86_64)
+license=('GPL')
+url="ftp://ftp.inr.ac.ru/ip-routing/"
+groups=('base')
+depends=('glibc')
+makedepends=('jade')
+conflicts=('netkit-base' 'arping' 'netkit-tftpd' 'traceroute')
+replaces=('netkit-base' 'traceroute')
+source=(http://www.skbuff.net/iputils/$pkgname-s$pkgver.tar.bz2
+ ftp://ftp.ee.lbl.gov/traceroute-$_traceroutever.tar.gz
+ iputils-20070202-no-open-max.patch)
+options=(!makeflags)
+md5sums=('1d38fb3cfc2b71496e43cf646bfc1d6e'
+ '964d599ef696efccdeebe7721cd4828d'
+ 'a2cbc0174dd883f68297aa7f3e7c4f5c')
+
+build()
+{
+ #build iptuils
+ cd $startdir/src/$pkgname-s$pkgver
+ patch -Np1 -i ../iputils-20070202-no-open-max.patch || return 1
+ make KERNEL_INCLUDE=/usr/include || return 1 # for i686
+ for i in arping clockdiff rarpd rdisc tftpd tracepath tracepath6; do
+ install -D -m755 $i $startdir/pkg/usr/sbin/$i
+ done
+ for i in ping ping6 traceroute6; do
+ install -D -m4755 $i $startdir/pkg/bin/$i
+ done
+
+ msg ":: building docs"
+ # good god, these docs are a pain
+ # special thanks to Michael(tm) Smith <mike@w3.org> - http://people.w3.org/mike/
+ # from #docbook on freenode.org for figuring this out
+ cd doc
+ for file in *.sgml; do
+ xf=${file/.sgml/.xml}
+ sx -xlower -xno-nl-in-tag $file > $xf
+ sed -i "s|<refname>\(.*\), \(.*\)</refname>|<refname>\1</refname>, <refname>\2</refname>|g" $xf
+ xsltproc /usr/share/xml/docbook/xsl-stylesheets-1.73.1/manpages/docbook.xsl $xf
+ done
+
+ mkdir -p $startdir/pkg/usr/man/man8
+ install -m644 arping.8 clockdiff.8 ping.8 ping6.8 rarpd.8 rdisc.8 \
+ tftpd.8 tracepath.8 tracepath6.8 traceroute6 \
+ $startdir/pkg/usr/man/man8/
+ #make man
+ #for i in arping clockdiff ping rarpd rdisc tftpd tracepath traceroute6; do
+ # install -D -m644 $i.8 $startdir/pkg/usr/man/man8/$i.8
+ #done
+
+ # build traceroute
+ # this is combined in this package because it's awkward as a separate package
+ cd ${startdir}/src/traceroute-$_traceroutever
+ ./configure --prefix=/usr --sbindir=/bin
+ #if [ "${CARCH}" = "x86_64" ]; then
+ make CFLAGS="${CFLAGS} -Ilinux-include/" || return 1
+ #else
+ # make || return 1
+ #fi
+ make DESTDIR=${startdir}/pkg install install-man
+
+ chmod 4775 ${startdir}/pkg/bin/traceroute
+}
+
diff --git a/abs/core/iputils/iputils-20070202-no-open-max.patch b/abs/core/iputils/iputils-20070202-no-open-max.patch
new file mode 100644
index 0000000..5013ba4
--- /dev/null
+++ b/abs/core/iputils/iputils-20070202-no-open-max.patch
@@ -0,0 +1,16 @@
+the OPEN_MAX define has been removed in newer kernel headers so use the
+proper method of getting the value dynamically
+
+http://bugs.gentoo.org/195861
+
+--- a/rdisc.c
++++ b/rdisc.c
+@@ -247,7 +247,7 @@ void do_fork(void)
+ if ((pid=fork()) != 0)
+ exit(0);
+
+- for (t = 0; t < OPEN_MAX; t++)
++ for (t = 0; t < sysconf(_SC_OPEN_MAX); t++)
+ if (t != s)
+ close(t);
+
diff --git a/abs/core/iputils/iputils-big-patches.patch b/abs/core/iputils/iputils-big-patches.patch
new file mode 100644
index 0000000..29bc310
--- /dev/null
+++ b/abs/core/iputils/iputils-big-patches.patch
@@ -0,0 +1,595 @@
+diff -Naur iputils.orig/Makefile iputils/Makefile
+--- iputils.orig/Makefile 2002-11-09 03:01:11.000000000 +0000
++++ iputils/Makefile 2005-06-09 16:15:32.000000000 +0000
+@@ -17,11 +17,6 @@
+ GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+ endif
+
+-ifeq ($(KERNEL_INCLUDE)/linux/pfkeyv2.h,$(wildcard $(KERNEL_INCLUDE)/linux/pfkeyv2.h))
+- SUBDIRS=libipsec setkey
+- LDLIBS+=-Llibipsec -lipsec
+- IPSECDEF=-DDO_IPSEC -Ilibipsec
+-endif
+
+
+ #options if you compile with libc5, and without a bind>=4.9.4 libresolv
+@@ -31,7 +26,7 @@
+ # What a pity, all new gccs are buggy and -Werror does not work. Sigh.
+ #CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g -Werror
+ CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS=$(CCOPT) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(IPSECDEF) $(DEFINES)
++CFLAGS=$(CCOPT) -I../include $(IPSECDEF) $(DEFINES)
+
+ IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd
+ IPV6_TARGETS=tracepath6 traceroute6 ping6
+@@ -42,7 +37,11 @@
+
+ tftpd: tftpd.o tftpsubs.o
+ ping: ping.o ping_common.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
+ ping6: ping6.o ping_common.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
++traceroute6: traceroute6.o
++ $(LINK.o) $^ $(LDLIBS) -o $@ -Wl,-z,now -Wl,-z,relro
+ ping.o ping6.o ping_common.o: ping_common.h
+ tftpd.o tftpsubs.o: tftp.h
+
+diff -Naur iputils.orig/arping.c iputils/arping.c
+--- iputils.orig/arping.c 2001-10-05 22:42:47.000000000 +0000
++++ iputils/arping.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdlib.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+@@ -19,6 +20,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
++#include <linux/if_packet.h>
+ #include <sys/uio.h>
+
+ #include <netdb.h>
+diff -Naur iputils.orig/clockdiff.c iputils/clockdiff.c
+--- iputils.orig/clockdiff.c 2002-02-23 00:10:59.000000000 +0000
++++ iputils/clockdiff.c 2005-06-09 16:15:24.000000000 +0000
+@@ -1,7 +1,9 @@
++#include <asm/byteorder.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
++#include <linux/types.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <math.h>
+diff -Naur iputils.orig/include-glibc/netinet/in.h iputils/include-glibc/netinet/in.h
+--- iputils.orig/include-glibc/netinet/in.h 2002-11-09 00:22:25.000000000 +0000
++++ iputils/include-glibc/netinet/in.h 2005-06-09 16:15:00.000000000 +0000
+@@ -65,4 +65,45 @@
+ && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3]))
+
+
+-#endif /* netinet/in.h */
++/* Functions to convert between host and network byte order.
++
++ Please note that these functions normally take `unsigned long int' or
++ `unsigned short int' values as arguments and also return them. But
++ this was a short-sighted decision since on different systems the types
++ may have different representations but the values are always the same. */
++
++extern u_int32_t ntohl (u_int32_t __netlong) __THROW __attribute__ ((__const__));
++extern u_int16_t ntohs (u_int16_t __netshort)
++ __THROW __attribute__ ((__const__));
++extern u_int32_t htonl (u_int32_t __hostlong)
++ __THROW __attribute__ ((__const__));
++extern u_int16_t htons (u_int16_t __hostshort)
++ __THROW __attribute__ ((__const__));
++
++#include <endian.h>
++
++/* Get machine dependent optimized versions of byte swapping functions. */
++#include <bits/byteswap.h>
++
++#ifdef __OPTIMIZE__
++/* We can optimize calls to the conversion functions. Either nothing has
++ to be done or we are using directly the byte-swapping functions which
++ often can be inlined. */
++# if __BYTE_ORDER == __BIG_ENDIAN
++/* The host byte order is the same as network byte order,
++ so these functions are all just identity. */
++# define ntohl(x) (x)
++# define ntohs(x) (x)
++# define htonl(x) (x)
++# define htons(x) (x)
++# else
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++# define ntohl(x) __bswap_32 (x)
++# define ntohs(x) __bswap_16 (x)
++# define htonl(x) __bswap_32 (x)
++# define htons(x) __bswap_16 (x)
++# endif
++# endif
++#endif
++
++#endif /* netinet/in.h */
+diff -Naur iputils.orig/ipg iputils/ipg
+--- iputils.orig/ipg 2001-08-02 22:37:32.000000000 +0000
++++ iputils/ipg 2005-06-09 16:14:49.000000000 +0000
+@@ -1,21 +1,31 @@
+-#! /bin/bash
++#!/bin/bash
+
+-modprobe pg3
++modprobe pg3 >& /dev/null
++modprobe pktgen >& /dev/null
++
++PGDEV=/proc/net/pg
++if [[ ! -e ${PGDEV} ]] ; then
++ PGDEV=/proc/net/pktgen/pg0
++ if [[ ! -e ${PGDEV} ]] ; then
++ echo "Couldn't not locate pg in /proc/net :("
++ exit 1
++ fi
++fi
+
+ function pgset() {
+ local result
+
+- echo $1 > /proc/net/pg
++ echo $1 > ${PGDEV}
+
+- result=`cat /proc/net/pg | fgrep "Result: OK:"`
++ result=`cat ${PGDEV} | fgrep "Result: OK:"`
+ if [ "$result" = "" ]; then
+- cat /proc/net/pg | fgrep Result:
++ cat ${PGDEV} | fgrep Result:
+ fi
+ }
+
+ function pg() {
+- echo inject > /proc/net/pg
+- cat /proc/net/pg
++ echo inject > ${PGDEV}
++ cat ${PGDEV}
+ }
+
+ pgset "odev eth0"
+diff -Naur iputils.orig/ping.c iputils/ping.c
+--- iputils.orig/ping.c 2002-11-07 22:53:21.000000000 +0000
++++ iputils/ping.c 2005-06-09 16:15:00.000000000 +0000
+@@ -60,8 +60,8 @@
+
+ #include "ping_common.h"
+
++#include <linux/icmp.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_icmp.h>
+ #ifdef DO_IPSEC
+ #include <libipsec.h>
+ #endif
+@@ -1213,7 +1213,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -Naur iputils.orig/ping6.c iputils/ping6.c
+--- iputils.orig/ping6.c 2002-09-20 15:08:11.000000000 +0000
++++ iputils/ping6.c 2005-06-09 16:15:00.000000000 +0000
+@@ -68,8 +68,44 @@
+ */
+ #include "ping_common.h"
+
+-#include <linux/in6.h>
+-#include <linux/ipv6.h>
++struct ipv6_rt_hdr {
++ __u8 nexthdr;
++ __u8 hdrlen;
++ __u8 type;
++ __u8 segments_left;
++
++ /*
++ * type specific data
++ * variable length field
++ */
++};
++
++struct rt0_hdr {
++ struct ipv6_rt_hdr rt_hdr;
++ __u32 bitmap; /* strict/loose bit map */
++ struct in6_addr addr[0];
++
++#define rt0_type rt_hdr.type;
++};
++#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
++
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
++
+ #include <linux/icmpv6.h>
+
+ #define BIT_CLEAR(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] &= ~(1U << ((nr) & 31)); } while(0)
+@@ -879,7 +915,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -Naur iputils.orig/ping_common.h iputils/ping_common.h
+--- iputils.orig/ping_common.h 2002-09-20 15:08:11.000000000 +0000
++++ iputils/ping_common.h 2005-06-09 16:15:24.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -19,6 +20,7 @@
+
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+
+ #include "SNAPSHOT.h"
+diff -Naur iputils.orig/rarpd.c iputils/rarpd.c
+--- iputils.orig/rarpd.c 2001-12-02 18:45:06.000000000 +0000
++++ iputils/rarpd.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <dirent.h>
+@@ -26,6 +27,7 @@
+ #include <sys/signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+@@ -42,7 +44,9 @@
+ char *ifname;
+ char *tftp_dir = "/etc/tftpboot";
+
++#ifndef __UCLIBC__
+ extern int ether_ntohost(char *name, unsigned char *ea);
++#endif
+ void usage(void) __attribute__((noreturn));
+
+ struct iflink
+@@ -52,12 +56,12 @@
+ int hatype;
+ unsigned char lladdr[16];
+ unsigned char name[IFNAMSIZ];
+- struct ifaddr *ifa_list;
++ struct l_ifaddr *ifa_list;
+ } *ifl_list;
+
+-struct ifaddr
++struct l_ifaddr
+ {
+- struct ifaddr *next;
++ struct l_ifaddr *next;
+ __u32 prefix;
+ __u32 mask;
+ __u32 local;
+@@ -89,7 +93,7 @@
+ int fd;
+ struct ifreq *ifrp, *ifend;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct ifconf ifc;
+ struct ifreq ibuf[256];
+
+@@ -180,7 +184,7 @@
+ if (ifa == NULL) {
+ if (mask == 0 || prefix == 0)
+ continue;
+- ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++ ifa = (struct l_ifaddr*)malloc(sizeof(*ifa));
+ memset(ifa, 0, sizeof(*ifa));
+ ifa->local = addr;
+ ifa->prefix = prefix;
+@@ -236,10 +240,10 @@
+ return dent != NULL;
+ }
+
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct l_ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ int retry = 0;
+ int i;
+
+@@ -295,7 +299,7 @@
+
+ if (r == NULL) {
+ if (hatype == ARPHRD_ETHER && halen == 6) {
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct hostent *hp;
+ char ename[256];
+ static struct rarp_map emap = {
+@@ -305,7 +309,11 @@
+ 6,
+ };
+
++#ifndef __UCLIBC__
+ if (ether_ntohost(ename, lladdr) != 0 ||
++#else
++ if (
++#endif
+ (hp = gethostbyname(ename)) == NULL) {
+ if (verbose)
+ syslog(LOG_INFO, "not found in /etc/ethers");
+@@ -364,7 +372,7 @@
+ {
+ __u32 laddr = 0;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+diff -Naur iputils.orig/rdisc.c iputils/rdisc.c
+--- iputils.orig/rdisc.c 2001-08-24 17:39:00.000000000 +0000
++++ iputils/rdisc.c 2005-06-09 16:15:24.000000000 +0000
+@@ -25,6 +25,7 @@
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <signal.h>
+@@ -1504,5 +1505,5 @@
+ if (logging)
+ syslog(LOG_ERR, "%s: %m", str);
+ else
+- (void) fprintf(stderr, "%s: %s\n", str, sys_errlist[errno]);
++ (void) fprintf(stderr, "%s: %s\n", str, strerror(errno));
+ }
+diff -Naur iputils.orig/tftpd.c iputils/tftpd.c
+--- iputils.orig/tftpd.c 2002-01-24 00:31:41.000000000 +0000
++++ iputils/tftpd.c 2005-06-09 16:15:24.000000000 +0000
+@@ -48,6 +48,7 @@
+ * This version includes many modifications by Jim Guyton <guyton@rand-unix>
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+@@ -57,7 +58,6 @@
+
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-#include <linux/in6.h>
+ #include <netdb.h>
+
+ #include <setjmp.h>
+diff -Naur iputils.orig/tracepath.c iputils/tracepath.c
+--- iputils.orig/tracepath.c 2002-11-09 04:54:46.000000000 +0000
++++ iputils/tracepath.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,10 +9,12 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -76,7 +78,7 @@
+ int progress = -1;
+ int broken_router;
+
+-restart:
++ while (1) {
+ memset(&rcvbuf, -1, sizeof(rcvbuf));
+ iov.iov_base = &rcvbuf;
+ iov.iov_len = sizeof(rcvbuf);
+@@ -93,7 +95,7 @@
+ if (res < 0) {
+ if (errno == EAGAIN)
+ return progress;
+- goto restart;
++ continue;
+ }
+
+ progress = mtu;
+@@ -216,7 +218,7 @@
+ perror("NET ERROR");
+ return 0;
+ }
+- goto restart;
++ }
+ }
+
+ int probe_ttl(int fd, int ttl)
+@@ -227,7 +229,6 @@
+
+ memset(sndbuf,0,mtu);
+
+-restart:
+ for (i=0; i<10; i++) {
+ int res;
+
+@@ -243,7 +244,8 @@
+ if (res==0)
+ return 0;
+ if (res > 0)
+- goto restart;
++ i = 0;
++ continue;
+ }
+ hisptr = (hisptr + 1)&63;
+
+diff -Naur iputils.orig/tracepath6.c iputils/tracepath6.c
+--- iputils.orig/tracepath6.c 2001-09-02 02:03:46.000000000 +0000
++++ iputils/tracepath6.c 2005-06-09 16:15:24.000000000 +0000
+@@ -9,13 +9,13 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-
+-#include <linux/in6.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -66,7 +66,7 @@
+ int progress = -1;
+ int broken_router;
+
+-restart:
++ while (1) {
+ memset(&rcvbuf, -1, sizeof(rcvbuf));
+ iov.iov_base = &rcvbuf;
+ iov.iov_len = sizeof(rcvbuf);
+@@ -83,7 +83,7 @@
+ if (res < 0) {
+ if (errno == EAGAIN)
+ return progress;
+- goto restart;
++ continue;
+ }
+
+ progress = 2;
+@@ -222,34 +222,29 @@
+ perror("NET ERROR");
+ return 0;
+ }
+- goto restart;
++ }
+ }
+
+ int probe_ttl(int fd, int ttl)
+ {
+- int i;
++ int i=0, res;
+ char sndbuf[mtu];
+ struct probehdr *hdr = (struct probehdr*)sndbuf;
+
+-restart:
+-
+- for (i=0; i<10; i++) {
+- int res;
+-
+- hdr->ttl = ttl;
+- gettimeofday(&hdr->tv, NULL);
+- if (send(fd, sndbuf, mtu-overhead, 0) > 0)
+- break;
+- res = recverr(fd, ttl);
+- if (res==0)
+- return 0;
+- if (res > 0)
+- goto restart;
+- }
+-
+- if (i<10) {
+- int res;
+-
++ while (i<10) {
++ for (i=0; i<10; i++) {
++ hdr->ttl = ttl;
++ gettimeofday(&hdr->tv, NULL);
++ if (send(fd, sndbuf, mtu-overhead, 0) > 0)
++ break;
++ res = recverr(fd, ttl);
++ if (res==0)
++ return 0;
++ if (res > 0) {
++ i = 0;
++ continue;
++ }
++ }
+ data_wait(fd);
+ if (recv(fd, sndbuf, sizeof(sndbuf), MSG_DONTWAIT) > 0) {
+ printf("%2d?: reply received 8)\n", ttl);
+@@ -257,7 +252,7 @@
+ }
+ res = recverr(fd, ttl);
+ if (res == 1)
+- goto restart;
++ continue;
+ return res;
+ }
+
+diff -Naur iputils.orig/traceroute6.c iputils/traceroute6.c
+--- iputils.orig/traceroute6.c 2002-10-03 03:29:23.000000000 +0000
++++ iputils/traceroute6.c 2005-06-09 16:14:49.000000000 +0000
+@@ -244,11 +244,30 @@
+ #include <netinet/in.h>
+ #include <netinet/ip.h>
+ #include <netinet/ip_icmp.h>
++#if __linux__
++#include <linux/udp.h>
++#else
+ #include <netinet/udp.h>
++#endif
++
++#include <linux/types.h>
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
+
+-#include <linux/ipv6.h>
+-#include <linux/in6.h>
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
+
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
+ #include <linux/icmpv6.h>
+
+ #include <arpa/inet.h>
diff --git a/abs/core/iputils/iputils-ss021109-try.patch b/abs/core/iputils/iputils-ss021109-try.patch
new file mode 100644
index 0000000..4d9a705
--- /dev/null
+++ b/abs/core/iputils/iputils-ss021109-try.patch
@@ -0,0 +1,239 @@
+diff -urN iputils.orig/Makefile iputils/Makefile
+--- iputils.orig/Makefile 2004-05-02 20:30:43.000000000 +0000
++++ iputils/Makefile 2004-05-02 20:30:48.000000000 +0000
+@@ -1,5 +1,4 @@
+ # Path to parent kernel include files directory
+-KERNEL_INCLUDE=/usr/src/linux/include
+ LIBC_INCLUDE=/usr/include
+
+ DEFINES=
+@@ -8,21 +7,6 @@
+ LDLIBS=-lresolv
+ ADDLIB=
+
+-ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
+- ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
+- GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+- endif
+-endif
+-ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
+- GLIBCFIX=-Iinclude-glibc -include include-glibc/glibc-bugs.h
+-endif
+-
+-ifeq ($(KERNEL_INCLUDE)/linux/pfkeyv2.h,$(wildcard $(KERNEL_INCLUDE)/linux/pfkeyv2.h))
+- SUBDIRS=libipsec setkey
+- LDLIBS+=-Llibipsec -lipsec
+- IPSECDEF=-DDO_IPSEC -Ilibipsec
+-endif
+-
+
+ #options if you compile with libc5, and without a bind>=4.9.4 libresolv
+ # NOT AVAILABLE. Please, use libresolv.
+@@ -31,13 +15,13 @@
+ # What a pity, all new gccs are buggy and -Werror does not work. Sigh.
+ #CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g -Werror
+ CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
+-CFLAGS=$(CCOPT) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(IPSECDEF) $(DEFINES)
++CFLAGS=$(CCOPT) -I../include $(IPSECDEF) $(DEFINES)
+
+ IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd
+ IPV6_TARGETS=tracepath6 traceroute6 ping6
+ TARGETS=$(IPV4_TARGETS) $(IPV6_TARGETS)
+
+-all: check-kernel subdirs $(TARGETS)
++all: subdirs $(TARGETS)
+
+
+ tftpd: tftpd.o tftpsubs.o
+@@ -51,15 +35,6 @@
+ rdisc_srv.o: rdisc.c
+ $(CC) $(CFLAGS) -DRDISC_SERVER -o rdisc_srv.o rdisc.c
+
+-check-kernel:
+-ifeq ($(KERNEL_INCLUDE),)
+- @echo "Please, set correct KERNEL_INCLUDE"; false
+-else
+- @set -e; \
+- if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
+- echo "Please, set correct KERNEL_INCLUDE"; false; fi
+-endif
+-
+ subdirs:
+ ifneq ($(SUBDIRS),)
+ @set -e; \
+diff -urN iputils.orig/arping.c iputils/arping.c
+--- iputils.orig/arping.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/arping.c 2004-05-02 20:32:38.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdlib.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+@@ -19,6 +20,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
++#include <linux/if_packet.h>
+ #include <sys/uio.h>
+
+ #include <netdb.h>
+diff -urN iputils.orig/clockdiff.c iputils/clockdiff.c
+--- iputils.orig/clockdiff.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/clockdiff.c 2004-05-02 20:30:48.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+diff -urN iputils.orig/ping.c iputils/ping.c
+--- iputils.orig/ping.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/ping.c 2004-05-02 20:31:03.000000000 +0000
+@@ -61,7 +61,7 @@
+ #include "ping_common.h"
+
+ #include <netinet/ip.h>
+-#include <netinet/ip_icmp.h>
++#include <linux/icmp.h>
+ #ifdef DO_IPSEC
+ #include <libipsec.h>
+ #endif
+diff -urN iputils.orig/ping_common.h iputils/ping_common.h
+--- iputils.orig/ping_common.h 2004-05-02 20:30:43.000000000 +0000
++++ iputils/ping_common.h 2004-05-02 20:30:48.000000000 +0000
+@@ -1,3 +1,4 @@
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+diff -urN iputils.orig/rarpd.c iputils/rarpd.c
+--- iputils.orig/rarpd.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/rarpd.c 2004-05-02 20:33:07.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <dirent.h>
+@@ -26,6 +27,7 @@
+ #include <sys/signal.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
++#include <linux/if_ether.h>
+ #include <netinet/in.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+@@ -52,12 +54,12 @@
+ int hatype;
+ unsigned char lladdr[16];
+ unsigned char name[IFNAMSIZ];
+- struct ifaddr *ifa_list;
++ struct l_ifaddr *ifa_list;
+ } *ifl_list;
+
+-struct ifaddr
++struct l_ifaddr
+ {
+- struct ifaddr *next;
++ struct l_ifaddr *next;
+ __u32 prefix;
+ __u32 mask;
+ __u32 local;
+@@ -89,7 +91,7 @@
+ int fd;
+ struct ifreq *ifrp, *ifend;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct ifconf ifc;
+ struct ifreq ibuf[256];
+
+@@ -180,7 +182,7 @@
+ if (ifa == NULL) {
+ if (mask == 0 || prefix == 0)
+ continue;
+- ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++ ifa = (struct l_ifaddr*)malloc(sizeof(*ifa));
+ memset(ifa, 0, sizeof(*ifa));
+ ifa->local = addr;
+ ifa->prefix = prefix;
+@@ -236,10 +238,10 @@
+ return dent != NULL;
+ }
+
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct l_ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ int retry = 0;
+ int i;
+
+@@ -295,7 +297,7 @@
+
+ if (r == NULL) {
+ if (hatype == ARPHRD_ETHER && halen == 6) {
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+ struct hostent *hp;
+ char ename[256];
+ static struct rarp_map emap = {
+@@ -364,7 +366,7 @@
+ {
+ __u32 laddr = 0;
+ struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct l_ifaddr *ifa;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+diff -urN iputils.orig/rdisc.c iputils/rdisc.c
+--- iputils.orig/rdisc.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/rdisc.c 2004-05-02 20:30:48.000000000 +0000
+@@ -25,6 +25,7 @@
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <signal.h>
+diff -urN iputils.orig/tftpd.c iputils/tftpd.c
+--- iputils.orig/tftpd.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/tftpd.c 2004-05-02 20:30:48.000000000 +0000
+@@ -48,6 +48,7 @@
+ * This version includes many modifications by Jim Guyton <guyton@rand-unix>
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+diff -urN iputils.orig/tracepath.c iputils/tracepath.c
+--- iputils.orig/tracepath.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/tracepath.c 2004-05-02 20:30:48.000000000 +0000
+@@ -9,6 +9,7 @@
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ */
+
++#include <asm/byteorder.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+diff -urN iputils.orig/traceroute6.c iputils/traceroute6.c
+--- iputils.orig/traceroute6.c 2004-05-02 20:30:43.000000000 +0000
++++ iputils/traceroute6.c 2004-05-02 20:30:48.000000000 +0000
+@@ -230,6 +230,7 @@
+ * Tue Dec 20 03:50:13 PST 1988
+ */
+
++#include <asm/byteorder.h>
+ #include <sys/param.h>
+ #include <sys/time.h>
+ #include <sys/socket.h>
diff --git a/abs/core/iputils/iputils.patch b/abs/core/iputils/iputils.patch
new file mode 100644
index 0000000..4e99b75
--- /dev/null
+++ b/abs/core/iputils/iputils.patch
@@ -0,0 +1,1170 @@
+--- iputils/ping_common.c.old Thu Mar 14 16:58:47 2002
++++ iputils/ping_common.c Thu Mar 14 17:10:54 2002
+@@ -775,10 +775,10 @@
+ tmdev = llsqrt(tsum2 - tsum * tsum);
+
+ printf("rtt min/avg/max/mdev = %ld.%03ld/%lu.%03ld/%ld.%03ld/%ld.%03ld ms",
+- tmin/1000, tmin%1000,
++ (long)tmin/1000, (long)tmin%1000,
+ (unsigned long)(tsum/1000), (long)(tsum%1000),
+- tmax/1000, tmax%1000,
+- tmdev/1000, tmdev%1000
++ (long)tmax/1000, (long)tmax%1000,
++ (long)tmdev/1000, (long)tmdev%1000
+ );
+ }
+ if (pipesize > 1)
+@@ -809,10 +809,10 @@
+ tavg = tsum / (nreceived + nrepeats);
+
+ fprintf(stderr, ", min/avg/ewma/max = %ld.%03ld/%lu.%03ld/%d.%03d/%ld.%03ld ms",
+- tmin/1000, tmin%1000,
++ (long)tmin/1000, (long)tmin%1000,
+ tavg/1000, tavg%1000,
+ rtt/8000, (rtt/8)%1000,
+- tmax/1000, tmax%1000
++ (long)tmax/1000, (long)tmax%1000
+ );
+ }
+ fprintf(stderr, "\n");
+--- iputils/rdisc.c-org Wed May 1 00:27:34 2002
++++ iputils/rdisc.c Wed May 1 00:32:40 2002
+@@ -63,6 +63,8 @@
+
+ #include "SNAPSHOT.h"
+
++#define RDISC_SERVER
++
+ struct interface
+ {
+ struct in_addr address; /* Used to identify the interface */
+@@ -163,11 +165,8 @@
+ int debugfile;
+
+ char usage[] =
+-"Usage: rdisc [-b] [-d] [-s] [-v] [-f] [-a] [-V] [send_address] [receive_address]\n"
+-#ifdef RDISC_SERVER
+-" rdisc -r [-b] [-d] [-s] [-v] [-f] [-a] [-V] [-p <preference>] [-T <secs>] \n"
+-" [send_address] [receive_address]\n"
+-#endif
++"Usage: rdisc -r [-b] [-d] [-s] [-v] [-f] [-a] [-V] [-p <preference>] [-T <secs>] \n"
++" [send_address] [receive_address]\n"
+ ;
+
+
+@@ -875,7 +874,9 @@
+ ((max_adv_int - min_adv_int)
+ * (random() % 1000)/1000);
+ } else {
+- if (!is_directly_connected(ip->saddr)) {
++ struct in_addr tmp;
++ tmp.s_addr = ip->saddr;
++ if (!is_directly_connected(tmp)) {
+ if (verbose)
+ logtrace("ICMP %s from %s: source not directly connected\n",
+ pr_type((int)icp->type),
+@@ -945,7 +946,6 @@
+ {
+ #ifdef RDISC_SERVER
+ if (responder) {
+- int i;
+
+ /* Send out a packet with a preference so that all
+ * hosts will know that we are dead.
+--- iputils/ping_common.c.countermeasures Tue May 21 10:06:05 2002
++++ iputils/ping_common.c Tue May 21 10:12:42 2002
+@@ -628,7 +628,8 @@
+ tvsub(tv, &tmp_tv);
+ triptime = tv->tv_sec * 1000000 + tv->tv_usec;
+ if (triptime < 0) {
+- fprintf(stderr, "Warning: time of day goes back (%ldus), taking countermeasures.\n", triptime);
++ if (options & F_VERBOSE)
++ fprintf(stderr, "Warning: time of day goes back (%ldus), taking countermeasures.\n", triptime);
+ triptime = 0;
+ if (!(options & F_LATENCY)) {
+ gettimeofday(tv, NULL);
+--- iputils/ping.c.addrcache 2002-09-20 17:08:11.000000000 +0200
++++ iputils/ping.c 2003-05-15 16:41:19.000000000 +0200
+@@ -1124,6 +1124,12 @@
+ {
+ struct hostent *hp;
+ static char buf[4096];
++ static __u32 addr_cache = 0;
++
++ if ( addr == addr_cache )
++ return buf;
++
++ addr_cache = addr;
+
+ if ((options & F_NUMERIC) ||
+ !(hp = gethostbyaddr((char *)&addr, 4, AF_INET)))
+--- iputils/ping6.c.addrcache 2002-09-20 17:08:11.000000000 +0200
++++ iputils/ping6.c 2003-05-15 16:41:19.000000000 +0200
+@@ -893,7 +893,14 @@
+ */
+ char * pr_addr(struct in6_addr *addr)
+ {
+- struct hostent *hp = NULL;
++ static struct hostent *hp = NULL;
++ static struct in6_addr addr_cache = {{{0,0,0,0}}};
++
++ if ( addr->s6_addr32[0] == addr_cache.s6_addr32[0] &&
++ addr->s6_addr32[1] == addr_cache.s6_addr32[1] &&
++ addr->s6_addr32[2] == addr_cache.s6_addr32[2] &&
++ addr->s6_addr32[3] == addr_cache.s6_addr32[3] )
++ return hp ? hp->h_name : pr_addr_n(addr);
+
+ if (!(options&F_NUMERIC))
+ hp = gethostbyaddr((__u8*)addr, sizeof(struct in6_addr), AF_INET6);
+--- iputils-ss021109-vanilla/ping.c Thu Nov 7 23:53:21 2002
++++ iputils/ping.c Sun Jan 12 03:39:24 2003
+@@ -285,6 +285,9 @@
+ perror("ping: IP_MULTICAST_IF");
+ exit(2);
+ }
++ } else if (icmp_sock >= 0) {
++ /* We possible tried to SO_BINDTODEVICE() a subinterface like 'eth0:1' */
++ perror("Warning: cannot bind to specified iface, falling back");
+ }
+ }
+ }
+--- iputils/ping.c.icmp_seq 2003-09-03 16:45:07.000000000 +0200
++++ iputils/ping.c 2003-09-03 16:45:41.000000000 +0200
+@@ -610,7 +610,7 @@
+ icp->type = ICMP_ECHO;
+ icp->code = 0;
+ icp->checksum = 0;
+- icp->un.echo.sequence = htons(ntransmitted+1);
++ icp->un.echo.sequence = htons(ntransmitted);
+ icp->un.echo.id = ident; /* ID */
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+--- iputils/ping6.c.icmp_seq 2003-09-03 16:45:20.000000000 +0200
++++ iputils/ping6.c 2003-09-03 16:45:34.000000000 +0200
+@@ -647,7 +647,7 @@
+ icmph->icmp6_type = ICMPV6_ECHO_REQUEST;
+ icmph->icmp6_code = 0;
+ icmph->icmp6_cksum = 0;
+- icmph->icmp6_sequence = htons(ntransmitted+1);
++ icmph->icmp6_sequence = htons(ntransmitted);
+ icmph->icmp6_identifier = ident;
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+diff -ru iputils/include-glibc/netinet/in.h iputils-clean/include-glibc/netinet/in.h
+--- iputils/include-glibc/netinet/in.h 2000-06-18 14:57:25.000000000 -0400
++++ iputils-clean/include-glibc/netinet/in.h 2003-09-03 11:21:55.000000000 -0400
+@@ -8,4 +8,45 @@
+
+ #define SOL_IP 0
+
+-#endif /* netinet/in.h */
++/* Functions to convert between host and network byte order.
++
++ Please note that these functions normally take `unsigned long int' or
++ `unsigned short int' values as arguments and also return them. But
++ this was a short-sighted decision since on different systems the types
++ may have different representations but the values are always the same. */
++
++extern u_int32_t ntohl (u_int32_t __netlong) __THROW __attribute__ ((__const__));
++extern u_int16_t ntohs (u_int16_t __netshort)
++ __THROW __attribute__ ((__const__));
++extern u_int32_t htonl (u_int32_t __hostlong)
++ __THROW __attribute__ ((__const__));
++extern u_int16_t htons (u_int16_t __hostshort)
++ __THROW __attribute__ ((__const__));
++
++#include <endian.h>
++
++/* Get machine dependent optimized versions of byte swapping functions. */
++#include <bits/byteswap.h>
++
++#ifdef __OPTIMIZE__
++/* We can optimize calls to the conversion functions. Either nothing has
++ to be done or we are using directly the byte-swapping functions which
++ often can be inlined. */
++# if __BYTE_ORDER == __BIG_ENDIAN
++/* The host byte order is the same as network byte order,
++ so these functions are all just identity. */
++# define ntohl(x) (x)
++# define ntohs(x) (x)
++# define htonl(x) (x)
++# define htons(x) (x)
++# else
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++# define ntohl(x) __bswap_32 (x)
++# define ntohs(x) __bswap_16 (x)
++# define htonl(x) __bswap_32 (x)
++# define htons(x) __bswap_16 (x)
++# endif
++# endif
++#endif
++
++#endif /* netinet/in.h */
+diff -ru iputils/ping6.c iputils-clean/ping6.c
+--- iputils/ping6.c 2003-09-03 11:22:46.000000000 -0400
++++ iputils-clean/ping6.c 2003-09-03 11:15:42.000000000 -0400
+@@ -879,7 +879,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[1] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -ru iputils/ping.c iputils-clean/ping.c
+--- iputils/ping.c 2003-09-03 11:22:46.000000000 -0400
++++ iputils-clean/ping.c 2003-09-03 11:15:26.000000000 -0400
+@@ -1196,7 +1196,7 @@
+ once = 1;
+
+ /* Patch bpflet for current identifier. */
+- insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __constant_htons(ident), 0, 1);
++ insns[2] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(ident), 0, 1);
+
+ if (setsockopt(icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+diff -urN iputils/clockdiff.c iputils.new/clockdiff.c
+--- iputils/clockdiff.c 2002-02-22 19:10:59.000000000 -0500
++++ iputils.new/clockdiff.c 2003-09-10 09:20:28.000000000 -0400
+@@ -2,6 +2,7 @@
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
++#include <linux/types.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <math.h>
+diff -urN iputils/ping6.c iputils.new/ping6.c
+--- iputils/ping6.c 2003-09-10 17:27:48.000000000 -0400
++++ iputils.new/ping6.c 2003-09-10 17:22:43.000000000 -0400
+@@ -68,8 +68,44 @@
+ */
+ #include "ping_common.h"
+
+-#include <linux/in6.h>
+-#include <linux/ipv6.h>
++struct ipv6_rt_hdr {
++ __u8 nexthdr;
++ __u8 hdrlen;
++ __u8 type;
++ __u8 segments_left;
++
++ /*
++ * type specific data
++ * variable length field
++ */
++};
++
++struct rt0_hdr {
++ struct ipv6_rt_hdr rt_hdr;
++ __u32 bitmap; /* strict/loose bit map */
++ struct in6_addr addr[0];
++
++#define rt0_type rt_hdr.type;
++};
++#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
++
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
++
+ #include <linux/icmpv6.h>
+
+ #define BIT_CLEAR(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] &= ~(1U << ((nr) & 31)); } while(0)
+diff -urN iputils/ping_common.h iputils.new/ping_common.h
+--- iputils/ping_common.h 2002-09-20 11:08:11.000000000 -0400
++++ iputils.new/ping_common.h 2003-09-10 17:16:16.000000000 -0400
+@@ -19,6 +19,7 @@
+
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+
+ #include "SNAPSHOT.h"
+diff -urN iputils/tftpd.c iputils.new/tftpd.c
+--- iputils/tftpd.c 2002-01-23 19:31:41.000000000 -0500
++++ iputils.new/tftpd.c 2003-09-10 09:39:45.000000000 -0400
+@@ -57,7 +57,6 @@
+
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-#include <linux/in6.h>
+ #include <netdb.h>
+
+ #include <setjmp.h>
+diff -urN iputils/tracepath6.c iputils.new/tracepath6.c
+--- iputils/tracepath6.c 2001-09-01 22:03:46.000000000 -0400
++++ iputils.new/tracepath6.c 2003-09-10 09:40:18.000000000 -0400
+@@ -14,8 +14,7 @@
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-
+-#include <linux/in6.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+diff -urN iputils/tracepath.c iputils.new/tracepath.c
+--- iputils/tracepath.c 2002-02-22 19:10:59.000000000 -0500
++++ iputils.new/tracepath.c 2003-09-10 06:14:35.000000000 -0400
+@@ -13,6 +13,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
+ #include <linux/errqueue.h>
+ #include <errno.h>
+ #include <string.h>
+diff -urN iputils/traceroute6.c iputils.new/traceroute6.c
+--- iputils/traceroute6.c 2002-09-20 11:44:22.000000000 -0400
++++ iputils.new/traceroute6.c 2003-09-10 10:12:47.000000000 -0400
+@@ -246,9 +246,24 @@
+ #include <netinet/ip_icmp.h>
+ #include <netinet/udp.h>
+
+-#include <linux/ipv6.h>
+-#include <linux/in6.h>
++#include <linux/types.h>
++struct ipv6hdr {
++#if defined(__LITTLE_ENDIAN)
++ __u8 priority:4,
++ version:4;
++#elif defined(__BIG_ENDIAN)
++ __u8 version:4,
++ priority:4;
++#endif
++ __u8 flow_lbl[3];
++
++ __u16 payload_len;
++ __u8 nexthdr;
++ __u8 hop_limit;
+
++ struct in6_addr saddr;
++ struct in6_addr daddr;
++};
+ #include <linux/icmpv6.h>
+
+ #include <arpa/inet.h>
+--- iputils/arping.c.unaligned 2001-10-06 00:42:47.000000000 +0200
++++ iputils/arping.c 2003-10-02 15:14:42.000000000 +0200
+@@ -332,7 +332,7 @@
+ timeout = atoi(optarg);
+ break;
+ case 'I':
+- device = optarg;
++ device = strdup(optarg);
+ break;
+ case 'f':
+ quit_on_reply=1;
+--- iputils/traceroute6.c.inet_pton 2004-04-22 15:06:28.268797480 +0200
++++ iputils/traceroute6.c 2004-04-22 15:06:35.727877941 +0200
+@@ -538,7 +538,7 @@
+ } else {
+ (void) bzero((char *)&saddr, sizeof(saddr));
+ saddr.sin6_family = AF_INET6;
+- if (inet_pton(AF_INET6, source, &saddr.sin6_addr) < 0)
++ if (inet_pton(AF_INET6, source, &saddr.sin6_addr) <= 0)
+ {
+ Printf("traceroute: unknown addr %s\n", source);
+ exit(1);
+--- iputils/traceroute6.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/traceroute6.c 2004-12-07 11:14:09.397575536 +0100
+@@ -352,8 +352,11 @@
+ icmp_sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+ socket_errno = errno;
+
+- setuid(getuid());
+-
++ if(setuid(getuid()) != 0)
++ {
++ perror("traceroute: setuid()");
++ exit(-1);
++ }
+ on = 1;
+ seq = tos = 0;
+ to = (struct sockaddr_in6 *)&whereto;
+--- iputils/ping6.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/ping6.c 2004-12-07 11:13:40.707937024 +0100
+@@ -223,7 +223,11 @@
+ socket_errno = errno;
+
+ uid = getuid();
+- setuid(uid);
++ if(setuid(uid) != 0)
++ {
++ perror("ping: setuid()");
++ exit(-1);
++ }
+
+ source.sin6_family = AF_INET6;
+ memset(&firsthop, 0, sizeof(firsthop));
+--- iputils/ping.c.old 2004-12-07 11:08:57.000000000 +0100
++++ iputils/ping.c 2004-12-07 11:13:27.523941296 +0100
+@@ -119,7 +119,11 @@
+ socket_errno = errno;
+
+ uid = getuid();
+- setuid(uid);
++ if(setuid(uid) != 0)
++ {
++ perror("ping: setuid()");
++ exit(-1);
++ }
+
+ source.sin_family = AF_INET;
+
+--- iputils/doc/ping.8.old 2002-09-27 19:12:47.000000000 +0200
++++ iputils/doc/ping.8 2004-12-07 11:09:42.434160144 +0100
+@@ -112,7 +112,7 @@
+ when finished.
+ .TP
+ \fB-R\fR
+-Record route.
++Record route. (IPv4 only)
+ Includes the RECORD_ROUTE option in the ECHO_REQUEST
+ packet and displays the route buffer on returned packets.
+ Note that the IP header is only large enough for nine such routes.
+--- iputils/doc/ping.sgml.old 2002-09-20 14:55:50.000000000 +0200
++++ iputils/doc/ping.sgml 2004-12-07 11:09:42.435159992 +0100
+@@ -190,7 +190,7 @@
+ <varlistentry>
+ <term><option/-R/</term>
+ <listitem><para>
+-Record route.
++Record route. (IPv4 only)
+ Includes the RECORD_ROUTE option in the ECHO_REQUEST
+ packet and displays the route buffer on returned packets.
+ Note that the IP header is only large enough for nine such routes.
+--- iputils/ping.c 2005-05-18 01:37:05.621810488 -0400
++++ iputils/ping.c.new 2005-05-18 01:41:27.113018222 -0400
+@@ -101,7 +101,7 @@ static struct {
+ int cmsg_len;
+
+ struct sockaddr_in source;
+-char *device;
++char *device=NULL;
+ int pmtudisc = -1;
+
+
+@@ -177,7 +177,7 @@ main(int argc, char **argv)
+ ptr[3] = i4;
+ options |= F_STRICTSOURCE;
+ } else {
+- device = optarg;
++ device = strdup(optarg);
+ }
+ break;
+ }
+--- iputils/ping6.c 2005-05-18 01:37:05.620833925 -0400
++++ iputils/ping6.c.new 2005-05-18 01:41:23.599346390 -0400
+@@ -155,7 +155,7 @@ static int pr_icmph(__u8 type, __u8 code
+ static void usage(void) __attribute((noreturn));
+
+ struct sockaddr_in6 source;
+-char *device;
++char *device=NULL;
+ int pmtudisc=-1;
+
+ static int icmp_sock;
+@@ -248,7 +248,7 @@ int main(int argc, char *argv[])
+ }
+ options |= F_STRICTSOURCE;
+ } else {
+- device = optarg;
++ device = strdup(optarg);
+ }
+ break;
+ case 'M':
+diff -ur iputils/arping.c iputils.tom/arping.c
+--- iputils/arping.c 2005-07-15 13:51:15.533632784 -0700
++++ iputils.tom/arping.c 2005-07-15 13:50:47.967823000 -0700
+@@ -59,6 +59,8 @@
+ #define MS_TDIFF(tv1,tv2) ( ((tv1).tv_sec-(tv2).tv_sec)*1000 + \
+ ((tv1).tv_usec-(tv2).tv_usec)/1000 )
+
++#define min(x,y) ((x)<(y) ? (x) : (y))
++
+ void usage(void)
+ {
+ fprintf(stderr,
+@@ -476,7 +478,7 @@
+ }
+
+ he = me;
+- memset(he.sll_addr, -1, he.sll_halen);
++ memset(he.sll_addr, -1, min(he.sll_halen, sizeof he.sll_addr));
+
+ if (!quiet) {
+ printf("ARPING %s ", inet_ntoa(dst));
+--- iputils/arping.c.orig 2001-10-05 18:42:47.000000000 -0400
++++ iputils/arping.c 2005-07-13 13:07:45.406217716 -0400
+@@ -166,10 +166,12 @@ void catcher(void)
+ if (start.tv_sec==0)
+ start = tv;
+
+- if (count-- == 0 || (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500))
++ if ((timeout && MS_TDIFF(tv,start) > timeout*1000 + 500) ||
++ ((count == 0) && (!timeout)))
+ finish();
+
+ if (last.tv_sec==0 || MS_TDIFF(tv,last) > 500) {
++ count--;
+ send_pack(s, src, dst, &me, &he);
+ if (count == 0 && unsolicited)
+ finish();
+@@ -510,6 +512,8 @@ main(int argc, char **argv)
+ sigaddset(&sset, SIGINT);
+ sigprocmask(SIG_BLOCK, &sset, &osset);
+ recv_pack(packet, cc, &from);
++ if(received == count)
++ exit(0);
+ sigprocmask(SIG_SETMASK, &osset, NULL);
+ }
+ }
+--- iputils/tracepath6.c.getaddrinfo 2005-09-08 10:31:47.000000000 +0200
++++ iputils/tracepath6.c 2005-09-08 10:31:47.000000000 +0200
+@@ -280,7 +280,7 @@
+ struct sockaddr_in6 sin;
+ int ttl;
+ char *p;
+- struct hostent *he;
++ struct addrinfo hints, *res;
+ int ch;
+
+ while ((ch = getopt(argc, argv, "nbh?")) != EOF) {
+@@ -308,20 +308,26 @@
+ perror("socket");
+ exit(1);
+ }
+- sin.sin6_family = AF_INET6;
+
+ p = strchr(argv[0], '/');
+ if (p) {
+ *p = 0;
++ }
++
++ memset(&hints, '\0', sizeof(hints));
++ hints.ai_family = AF_INET6;
++ if (getaddrinfo(argv[0], NULL, &hints, &res)) {
++ herror("getaddrinfo");
++ exit(1);
++ }
++
++ memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in6));
++ freeaddrinfo(res);
++
++ if (p) {
+ sin.sin6_port = htons(atoi(p+1));
+ } else
+ sin.sin6_port = htons(0x8000 | getpid());
+- he = gethostbyname2(argv[0], AF_INET6);
+- if (he == NULL) {
+- herror("gethostbyname2");
+- exit(1);
+- }
+- memcpy(&sin.sin6_addr, he->h_addr, 16);
+
+ if (connect(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0) {
+ perror("connect");
+--- iputils/tracepath.c.getaddrinfo 2005-09-08 10:31:47.000000000 +0200
++++ iputils/tracepath.c 2005-09-08 11:03:39.000000000 +0200
+@@ -272,12 +272,12 @@
+ int
+ main(int argc, char **argv)
+ {
+- struct hostent *he;
+ int fd;
+ int on;
+ int ttl;
+ char *p;
+ int ch;
++ struct addrinfo hints, *res;
+
+ while ((ch = getopt(argc, argv, "nh?")) != EOF) {
+ switch(ch) {
+@@ -300,20 +300,26 @@
+ perror("socket");
+ exit(1);
+ }
+- target.sin_family = AF_INET;
+
+ p = strchr(argv[0], '/');
+ if (p) {
+ *p = 0;
++ }
++
++ memset(&hints, '\0', sizeof(hints));
++ hints.ai_family = AF_INET;
++ if (getaddrinfo(argv[0], NULL, &hints, &res)) {
++ herror("getaddrinfo");
++ exit(1);
++ }
++
++ memcpy(&target, res->ai_addr, sizeof(struct sockaddr_in));
++ freeaddrinfo(res);
++
++ if (p)
+ base_port = atoi(p+1);
+- } else
++ else
+ base_port = 44444;
+- he = gethostbyname(argv[0]);
+- if (he == NULL) {
+- herror("gethostbyname");
+- exit(1);
+- }
+- memcpy(&target.sin_addr, he->h_addr, 4);
+
+ on = IP_PMTUDISC_DO;
+ if (setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &on, sizeof(on))) {
+--- iputils/ping.c.flood 2005-09-26 09:26:49.000000000 +0200
++++ iputils/ping.c 2005-09-26 13:07:39.000000000 +0200
+@@ -614,7 +608,7 @@
+ icp->type = ICMP_ECHO;
+ icp->code = 0;
+ icp->checksum = 0;
+- icp->un.echo.sequence = htons(ntransmitted);
++ icp->un.echo.sequence = htons(ntransmitted+1);
+ icp->un.echo.id = ident; /* ID */
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+diff -ru iputils/ping_common.c iputils-foo/ping_common.c
+--- iputils/ping_common.c 2005-09-22 15:22:57.000000000 -0400
++++ iputils-foo/ping_common.c 2005-09-22 15:24:42.000000000 -0400
+@@ -584,6 +584,7 @@
+ * destined to other running pings. */
+
+ iov.iov_len = packlen;
++ memset(&msg,'\0',sizeof(msg));
+ msg.msg_name = addrbuf;
+ msg.msg_namelen = sizeof(addrbuf);
+ msg.msg_iov = &iov;
+--- iputils/tracepath6.c.hoplimit 2005-12-13 13:32:56.000000000 +0100
++++ iputils/tracepath6.c 2005-12-13 13:35:01.000000000 +0100
+@@ -359,8 +359,8 @@
+ perror("IP_RECVERR");
+ exit(1);
+ }
+- if (setsockopt(fd, SOL_IPV6, IPV6_HOPLIMIT, &on, sizeof(on))) {
+- perror("IPV6_HOPLIMIT");
++ if (setsockopt(fd, SOL_IPV6, IPV6_RECVHOPLIMIT, &on, sizeof(on))) {
++ perror("IPV6_RECVHOPLIMIT");
+ exit(1);
+ }
+ if (mapped && setsockopt(fd, SOL_IP, IP_RECVTTL, &on, sizeof(on))) {
+--- iputils/ping6.c.hoplimit 2005-12-13 13:32:56.000000000 +0100
++++ iputils/ping6.c 2005-12-13 13:34:04.000000000 +0100
+@@ -521,13 +521,10 @@
+ }
+ }
+
+- if (1) {
+- int on = 1;
+- if (setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_HOPLIMIT,
+- &on, sizeof(on)) == -1) {
+- perror ("can't receive hop limit");
+- exit(2);
+- }
++ int on = 1;
++ if (setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on, sizeof(on))) {
++ perror("setsockopt(IPV6_RECVHOPLIMIT)");
++ exit(2);
+ }
+
+ if (options&F_FLOWINFO) {
+--- iputils/ping6.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping6.c 2006-01-25 16:21:47.000000000 +0100
+@@ -383,7 +383,7 @@
+ exit(2);
+ }
+ alen = sizeof(source);
+- if (getsockname(probe_fd, (struct sockaddr*)&source, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&source, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -599,6 +599,7 @@
+ int net_errors = 0;
+ int local_errors = 0;
+ int saved_errno = errno;
++ ssize_t wr_ret;
+
+ iov.iov_base = &icmph;
+ iov.iov_len = sizeof(icmph);
+@@ -629,7 +630,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else if (e->ee_errno != EMSGSIZE)
+ fprintf(stderr, "ping: local error: %s\n", strerror(e->ee_errno));
+ else
+@@ -652,7 +653,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ } else {
+ printf("From %s icmp_seq=%u ", pr_addr(&sin6->sin6_addr), ntohs(icmph.icmp6_sequence));
+ pr_icmph(e->ee_type, e->ee_code, e->ee_info);
+@@ -795,7 +796,8 @@
+ return 0;
+ nerrors++;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ ssize_t wr_ret;
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ return 0;
+ }
+ printf("From %s: icmp_seq=%u ", pr_addr(&from->sin6_addr), ntohs(icmph1->icmp6_sequence));
+--- iputils/arping.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/arping.c 2006-01-25 16:21:47.000000000 +0100
+@@ -449,7 +449,7 @@
+ perror("connect");
+ exit(2);
+ }
+- if (getsockname(probe_fd, (struct sockaddr*)&saddr, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&saddr, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -468,7 +468,7 @@
+
+ if (1) {
+ int alen = sizeof(me);
+- if (getsockname(s, (struct sockaddr*)&me, &alen) == -1) {
++ if (getsockname(s, (struct sockaddr*)&me, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -499,13 +499,13 @@
+
+ while(1) {
+ sigset_t sset, osset;
+- char packet[4096];
++ unsigned char packet[4096];
+ struct sockaddr_ll from;
+ int alen = sizeof(from);
+ int cc;
+
+ if ((cc = recvfrom(s, packet, sizeof(packet), 0,
+- (struct sockaddr *)&from, &alen)) < 0) {
++ (struct sockaddr *)&from, (socklen_t*)&alen)) < 0) {
+ perror("arping: recvfrom");
+ continue;
+ }
+--- iputils/traceroute6.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/traceroute6.c 2006-01-25 16:21:47.000000000 +0100
+@@ -529,7 +529,7 @@
+ exit(1);
+ }
+ alen = sizeof(saddr);
+- if (getsockname(probe_fd, (struct sockaddr*)&saddr, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&saddr, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(1);
+ }
+@@ -656,7 +656,7 @@
+
+ if (select(sock+1, &fds, (fd_set *)0, (fd_set *)0, &wait) > 0) {
+ cc=recvfrom(icmp_sock, (char *)packet, sizeof(packet), 0,
+- (struct sockaddr *)from, &fromlen);
++ (struct sockaddr *)from, (socklen_t*)&fromlen);
+ }
+
+ return(cc);
+--- iputils/tftpd.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/tftpd.c 2006-01-25 16:21:47.000000000 +0100
+@@ -126,7 +126,7 @@
+ }
+ fromlen = sizeof (from);
+ n = recvfrom(0, buf, sizeof (buf), 0,
+- (struct sockaddr *)&from, &fromlen);
++ (struct sockaddr *)&from, (socklen_t*)&fromlen);
+ if (n < 0) {
+ if (errno != EAGAIN)
+ syslog(LOG_ERR, "recvfrom: %m\n");
+@@ -164,9 +164,9 @@
+ * than one tftpd being started up to service
+ * a single request from a single client.
+ */
+- j = sizeof from;
++ j = sizeof (from);
+ i = recvfrom(0, buf, sizeof (buf), 0,
+- (struct sockaddr *)&from, &j);
++ (struct sockaddr *)&from, (socklen_t*)&j);
+ if (i > 0) {
+ n = i;
+ fromlen = j;
+--- iputils/clockdiff.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/clockdiff.c 2006-01-25 16:21:47.000000000 +0100
+@@ -148,7 +148,7 @@
+ if (select(FD_SETSIZE, &ready, (fd_set *)0, (fd_set *)0, &tout)) {
+ length = sizeof(struct sockaddr_in);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+ if (cc < 0)
+ return -1;
+ goto empty;
+@@ -214,7 +214,7 @@
+
+ (void)gettimeofday(&tv1, (struct timezone *)0);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+
+ if (cc < 0)
+ return(-1);
+@@ -326,7 +326,7 @@
+ if (select(FD_SETSIZE, &ready, (fd_set *)0, (fd_set *)0, &tout)) {
+ length = sizeof(struct sockaddr_in);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+ if (cc < 0)
+ return -1;
+ goto empty;
+@@ -396,7 +396,7 @@
+
+ (void)gettimeofday(&tv1, (struct timezone *)0);
+ cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
+- (struct sockaddr *)NULL, &length);
++ (struct sockaddr *)NULL, (socklen_t*)&length);
+
+ if (cc < 0)
+ return(-1);
+@@ -539,6 +539,7 @@
+ struct hostent * hp;
+ char hostname[MAXHOSTNAMELEN];
+ int s_errno = 0;
++ int nice_ret;
+
+ if (argc < 2) {
+ setuid(getuid());
+@@ -606,7 +607,7 @@
+ rspace[1] = ip_opt_len;
+ rspace[2] = 5;
+ rspace[3] = IPOPT_TS_PRESPEC;
+- if (getsockname(sock_raw, (struct sockaddr*)&myaddr, &addrlen) == -1) {
++ if (getsockname(sock_raw, (struct sockaddr*)&myaddr, (socklen_t*)&addrlen) == -1) {
+ perror("getsockname");
+ exit(1);
+ }
+@@ -623,8 +624,13 @@
+ ip_opt_len = 0;
+ }
+ }
+-
+- nice(-16);
++ nice_ret = nice(-16);
++ if (nice_ret < 0) {
++ if (errno)
++ perror("nice");
++ else
++ fprintf(stderr, "nice: unknown failure\n");
++ }
+
+ if ((measure_status = (ip_opt_len ? measure_opt : measure)(&server)) < 0) {
+ if (errno)
+--- iputils/rdisc.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/rdisc.c 2006-01-25 16:21:47.000000000 +0100
+@@ -454,7 +454,7 @@
+ int cc;
+
+ cc=recvfrom(s, (char *)packet, len, 0,
+- (struct sockaddr *)&from, &fromlen);
++ (struct sockaddr *)&from, (socklen_t*)&fromlen);
+ if (cc<0) {
+ if (errno == EINTR)
+ continue;
+--- iputils/rarpd.c.gcc41 2001-12-02 19:45:06.000000000 +0100
++++ iputils/rarpd.c 2006-01-25 16:21:47.000000000 +0100
+@@ -154,8 +154,8 @@
+ ifl->index = index;
+ ifl->hatype = ifrp->ifr_hwaddr.sa_family;
+ memcpy(ifl->lladdr, ifrp->ifr_hwaddr.sa_data, 14);
+- strncpy(ifl->name, ifrp->ifr_name, IFNAMSIZ);
+- p = strchr(ifl->name, ':');
++ strncpy((char*)ifl->name, ifrp->ifr_name, IFNAMSIZ);
++ p = strchr((char*)ifl->name, ':');
+ if (p)
+ *p = 0;
+ if (verbose)
+@@ -423,7 +423,7 @@
+ unsigned char *ptr;
+ int n;
+
+- n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, &sll_len);
++ n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, (socklen_t*)&sll_len);
+ if (n<0) {
+ if (errno != EINTR && errno != EAGAIN)
+ syslog(LOG_ERR, "recvfrom: %m");
+@@ -531,7 +531,7 @@
+ /* Update our ARP cache. Probably, this guy
+ will not able to make ARP (if it is broken)
+ */
+- arp_advise(sll.sll_ifindex, rmap->lladdr, rmap->lladdr_len, rmap->ipaddr);
++ arp_advise(sll.sll_ifindex,(unsigned char *)rmap->lladdr, rmap->lladdr_len, rmap->ipaddr);
+
+ /* Sendto is blocking, but with 5sec timeout */
+ alarm(5);
+@@ -673,8 +673,15 @@
+ perror("rarpd: fork");
+ exit(1);
+ }
++ int chdir_ret = chdir("/");
++ if (chdir_ret != 0) {
++ if (errno)
++ perror("chdir");
++ else
++ fprintf(stderr, "chdir: Uknown error\n");
++ }
+
+- chdir("/");
++
+ fd = open("/dev/null", O_RDWR);
+ if (fd >= 0) {
+ dup2(fd, 0);
+--- iputils/ping_common.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping_common.c 2006-01-25 16:21:47.000000000 +0100
+@@ -284,6 +284,7 @@
+ static int oom_count;
+ static int tokens;
+ int i;
++ ssize_t wr_ret;
+
+ /* Have we already sent enough? If we have, return an arbitrary positive value. */
+ if (exiting || (npackets && ntransmitted >= npackets && !deadline))
+@@ -327,7 +328,7 @@
+ * high preload or pipe size is very confusing. */
+ if ((preload < screen_width && pipesize < screen_width) ||
+ in_flight() < screen_width)
+- write(STDOUT_FILENO, ".", 1);
++ wr_ret = write(STDOUT_FILENO, ".", 1);
+ }
+ return interval - tokens;
+ }
+@@ -380,7 +381,7 @@
+
+ if (i == 0 && !(options & F_QUIET)) {
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else
+ perror("ping: sendmsg");
+ }
+@@ -402,8 +403,8 @@
+ rcvbuf = hold = alloc * preload;
+ if (hold < 65536)
+ hold = 65536;
+- setsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, sizeof(hold));
+- if (getsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, &tmplen) == 0) {
++ setsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, (socklen_t)sizeof(hold));
++ if (getsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *)&hold, (socklen_t*)&tmplen) == 0) {
+ if (hold < rcvbuf)
+ fprintf(stderr, "WARNING: probably, rcvbuf is not enough to hold preload.\n");
+ }
+@@ -650,7 +651,8 @@
+ {
+ int dupflag = 0;
+ long triptime = 0;
+-
++ ssize_t wr_ret;
++
+ ++nreceived;
+ if (!csfailed)
+ acknowledge(seq);
+@@ -706,9 +708,9 @@
+
+ if (options & F_FLOOD) {
+ if (!csfailed)
+- write(STDOUT_FILENO, "\b \b", 3);
++ wr_ret = write(STDOUT_FILENO, "\b \b", 3);
+ else
+- write(STDOUT_FILENO, "\bC", 1);
++ wr_ret = write(STDOUT_FILENO, "\bC", 1);
+ } else {
+ int i;
+ __u8 *cp, *dp;
+--- iputils/ping.c.gcc41 2006-01-25 16:21:47.000000000 +0100
++++ iputils/ping.c 2006-01-25 16:21:47.000000000 +0100
+@@ -314,7 +314,7 @@
+ }
+ }
+ alen = sizeof(source);
+- if (getsockname(probe_fd, (struct sockaddr*)&source, &alen) == -1) {
++ if (getsockname(probe_fd, (struct sockaddr*)&source, (socklen_t*)&alen) == -1) {
+ perror("getsockname");
+ exit(2);
+ }
+@@ -517,6 +517,7 @@
+ int net_errors = 0;
+ int local_errors = 0;
+ int saved_errno = errno;
++ ssize_t wr_ret;
+
+ iov.iov_base = &icmph;
+ iov.iov_len = sizeof(icmph);
+@@ -547,7 +548,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD)
+- write(STDOUT_FILENO, "E", 1);
++ wr_ret = write(STDOUT_FILENO, "E", 1);
+ else if (e->ee_errno != EMSGSIZE)
+ fprintf(stderr, "ping: local error: %s\n", strerror(e->ee_errno));
+ else
+@@ -583,7 +584,7 @@
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD) {
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ } else {
+ printf("From %s icmp_seq=%u ", pr_addr(sin->sin_addr.s_addr), ntohs(icmph.un.echo.sequence));
+ pr_icmph(e->ee_type, e->ee_code, e->ee_info, NULL);
+@@ -677,6 +678,7 @@
+ struct iphdr *ip;
+ int hlen;
+ int csfailed;
++ ssize_t wr_ret;
+
+ /* Check the IP header */
+ ip = (struct iphdr *)buf;
+@@ -748,7 +750,7 @@
+ return !error_pkt;
+ if (options & F_FLOOD) {
+ if (error_pkt)
+- write(STDOUT_FILENO, "\bE", 2);
++ wr_ret = write(STDOUT_FILENO, "\bE", 2);
+ return !error_pkt;
+ }
+ printf("From %s: icmp_seq=%u ",
+@@ -765,9 +767,9 @@
+ }
+ if ((options & F_FLOOD) && !(options & (F_VERBOSE|F_QUIET))) {
+ if (!csfailed)
+- write(STDOUT_FILENO, "!E", 2);
++ wr_ret = write(STDOUT_FILENO, "!E", 2);
+ else
+- write(STDOUT_FILENO, "!EC", 3);
++ wr_ret = write(STDOUT_FILENO, "!EC", 3);
+ return 0;
+ }
+ if (!(options & F_VERBOSE) || uid)
+--- iputils/ping6.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping6.c 2006-02-06 10:35:38.000000000 +0100
+@@ -353,7 +353,7 @@
+ hostname = target;
+
+ if (ipv6_addr_any(&source.sin6_addr)) {
+- int alen;
++ socklen_t alen;
+ int probe_fd = socket(AF_INET6, SOCK_DGRAM, 0);
+
+ if (probe_fd < 0) {
+--- iputils/ping.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping.c 2006-02-06 10:34:35.000000000 +0100
+@@ -253,7 +253,7 @@
+ }
+
+ if (source.sin_addr.s_addr == 0) {
+- int alen;
++ socklen_t alen;
+ struct sockaddr_in dst = whereto;
+ int probe_fd = socket(AF_INET, SOCK_DGRAM, 0);
+
+@@ -855,9 +855,36 @@
+ case ICMP_SR_FAILED:
+ printf("Source Route Failed\n");
+ break;
++ case ICMP_NET_UNKNOWN:
++ printf("Destination Net Unknown\n");
++ break;
++ case ICMP_HOST_UNKNOWN:
++ printf("Destination Host Unknown\n");
++ break;
++ case ICMP_HOST_ISOLATED:
++ printf("Source Host Isolated\n");
++ break;
++ case ICMP_NET_ANO:
++ printf("Destination Net Prohibited\n");
++ break;
++ case ICMP_HOST_ANO:
++ printf("Destination Host Prohibited\n");
++ break;
++ case ICMP_NET_UNR_TOS:
++ printf("Destination Net Unreachable for Type of Service\n");
++ break;
++ case ICMP_HOST_UNR_TOS:
++ printf("Destination Host Unreachable for Type of Service\n");
++ break;
+ case ICMP_PKT_FILTERED:
+ printf("Packet filtered\n");
+ break;
++ case ICMP_PREC_VIOLATION:
++ printf("Precedence Violation\n");
++ break;
++ case ICMP_PREC_CUTOFF:
++ printf("Precedence Cutoff\n");
++ break;
+ default:
+ printf("Dest Unreachable, Bad Code: %d\n", code);
+ break;
+--- iputils/ping_common.c.OLD 2006-02-06 10:34:35.000000000 +0100
++++ iputils/ping_common.c 2006-02-06 10:34:35.000000000 +0100
+@@ -67,7 +67,7 @@
+ int ii, jj, kk;
+ int pat[16];
+ char *cp;
+- char *bp = outpack+8;
++ unsigned char *bp = outpack+8;
+
+ for (cp = patp; *cp; cp++) {
+ if (!isxdigit(*cp)) {
+@@ -393,7 +393,7 @@
+ void sock_setbufs(int icmp_sock, int alloc)
+ {
+ int rcvbuf, hold;
+- int tmplen = sizeof(hold);
++ socklen_t tmplen = sizeof(hold);
+
+ if (!sndbuf)
+ sndbuf = alloc;
+@@ -464,7 +464,7 @@
+
+ if (!(options & F_PINGFILLED)) {
+ int i;
+- char *p = outpack+8;
++ unsigned char *p = outpack+8;
+
+ /* Do not forget about case of small datalen,
+ * fill timestamp area too!
+@@ -819,7 +819,7 @@
+ }
+ if (pipesize > 1)
+ printf(", pipe %d", pipesize);
+- if (ntransmitted > 1 && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
++ if (ntransmitted > 1 && nreceived && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
+ int ipg = (1000000*(long long)tv.tv_sec+tv.tv_usec)/(ntransmitted-1);
+ printf(", ipg/ewma %d.%03d/%d.%03d ms",
+ ipg/1000, ipg%1000, rtt/8000, (rtt/8)%1000); \ No newline at end of file
diff --git a/abs/core/iputils/protocols b/abs/core/iputils/protocols
new file mode 100644
index 0000000..e6463f1
--- /dev/null
+++ b/abs/core/iputils/protocols
@@ -0,0 +1,18 @@
+#
+# protocols This file describes the various protocols that are
+# available from the TCP/IP subsystem. It should be
+# consulted instead of using the numbers in the ARPA
+# include files, or, worse, just guessing them.
+#
+
+ip 0 IP # internet protocol, pseudo protocol number
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # internet group multicast protocol
+ggp 3 GGP # gateway-gateway protocol
+tcp 6 TCP # transmission control protocol
+pup 12 PUP # PARC universal packet protocol
+udp 17 UDP # user datagram protocol
+idp 22 IDP # WhatsThis?
+raw 255 RAW # RAW IP interface
+
+# End.
diff --git a/abs/core/iputils/services b/abs/core/iputils/services
new file mode 100644
index 0000000..9a31e69
--- /dev/null
+++ b/abs/core/iputils/services
@@ -0,0 +1,195 @@
+#
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, most entries here have two entries
+# even if the protocol doesn't support UDP operations.
+# Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports
+# are included, only the more common ones.
+#
+# from: @(#)services 5.8 (Berkeley) 5/9/91
+# $Id: services,v 1.8 2005/07/08 19:20:10 judd Exp $
+#
+tcpmux 1/tcp # TCP port service multiplexer
+echo 7/tcp
+echo 7/udp
+discard 9/tcp sink null
+discard 9/udp sink null
+systat 11/tcp users
+daytime 13/tcp
+daytime 13/udp
+netstat 15/tcp
+qotd 17/tcp quote
+msp 18/tcp # message send protocol
+msp 18/udp # message send protocol
+chargen 19/tcp ttytst source
+chargen 19/udp ttytst source
+ftp-data 20/tcp
+ftp 21/tcp
+ssh 22/tcp
+telnet 23/tcp
+# 24 - private
+smtp 25/tcp mail
+# 26 - unassigned
+time 37/tcp timserver
+time 37/udp timserver
+rlp 39/udp resource # resource location
+nameserver 42/tcp name # IEN 116
+whois 43/tcp nicname
+domain 53/tcp nameserver # name-domain server
+domain 53/udp nameserver
+mtp 57/tcp # deprecated
+bootps 67/tcp # BOOTP server
+bootps 67/udp
+bootpc 68/tcp # BOOTP client
+bootpc 68/udp
+tftp 69/udp
+gopher 70/tcp # Internet Gopher
+gopher 70/udp
+rje 77/tcp netrjs
+finger 79/tcp
+www 80/tcp http # WorldWideWeb HTTP
+www 80/udp # HyperText Transfer Protocol
+link 87/tcp ttylink
+kerberos 88/tcp krb5 # Kerberos v5
+kerberos 88/udp
+supdup 95/tcp
+# 100 - reserved
+hostnames 101/tcp hostname # usually from sri-nic
+iso-tsap 102/tcp tsap # part of ISODE.
+csnet-ns 105/tcp cso-ns # also used by CSO name server
+csnet-ns 105/udp cso-ns
+rtelnet 107/tcp # Remote Telnet
+rtelnet 107/udp
+pop2 109/tcp postoffice # POP version 2
+pop2 109/udp
+pop3 110/tcp # POP version 3
+pop3 110/udp
+sunrpc 111/tcp
+sunrpc 111/udp
+auth 113/tcp tap ident authentication
+sftp 115/tcp
+uucp-path 117/tcp
+nntp 119/tcp readnews untp # USENET News Transfer Protocol
+ntp 123/tcp
+ntp 123/udp # Network Time Protocol
+netbios-ns 137/tcp # NETBIOS Name Service
+netbios-ns 137/udp
+netbios-dgm 138/tcp # NETBIOS Datagram Service
+netbios-dgm 138/udp
+netbios-ssn 139/tcp # NETBIOS session service
+netbios-ssn 139/udp
+imap 143/tcp # An alias for imap2
+imap 143/udp
+imap2 143/tcp # Interim Mail Access Proto v2
+imap2 143/udp
+snmp 161/udp # Simple Net Mgmt Proto
+snmp-trap 162/udp snmptrap # Traps for SNMP
+cmip-man 163/tcp # ISO mgmt over IP (CMOT)
+cmip-man 163/udp
+cmip-agent 164/tcp
+cmip-agent 164/udp
+xdmcp 177/tcp # X Display Mgr. Control Proto
+xdmcp 177/udp
+nextstep 178/tcp NeXTStep NextStep # NeXTStep window
+nextstep 178/udp NeXTStep NextStep # server
+bgp 179/tcp # Border Gateway Proto.
+bgp 179/udp
+prospero 191/tcp # Cliff Neuman's Prospero
+prospero 191/udp
+irc 194/tcp # Internet Relay Chat
+irc 194/udp
+smux 199/tcp # SNMP Unix Multiplexer
+smux 199/udp
+at-rtmp 201/tcp # AppleTalk routing
+at-rtmp 201/udp
+at-nbp 202/tcp # AppleTalk name binding
+at-nbp 202/udp
+at-echo 204/tcp # AppleTalk echo
+at-echo 204/udp
+at-zis 206/tcp # AppleTalk zone information
+at-zis 206/udp
+z3950 210/tcp wais # NISO Z39.50 database
+z3950 210/udp wais
+ipx 213/tcp # IPX
+ipx 213/udp
+imap3 220/tcp # Interactive Mail Access
+imap3 220/udp # Protocol v3
+ulistserv 372/tcp # UNIX Listserv
+ulistserv 372/udp
+https 443/tcp
+#
+# UNIX specific services
+#
+exec 512/tcp
+biff 512/udp comsat
+login 513/tcp
+who 513/udp whod
+shell 514/tcp cmd # no passwords used
+syslog 514/udp
+printer 515/tcp spooler # line printer spooler
+talk 517/udp
+ntalk 518/udp
+route 520/udp router routed # RIP
+timed 525/udp timeserver
+tempo 526/tcp newdate
+courier 530/tcp rpc
+conference 531/tcp chat
+netnews 532/tcp readnews
+netwall 533/udp # -for emergency broadcasts
+uucp 540/tcp uucpd # uucp daemon
+remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
+klogin 543/tcp # Kerberized `rlogin' (v5)
+kshell 544/tcp # Kerberized `rsh' (v5)
+kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
+#
+webster 765/tcp # Network dictionary
+webster 765/udp
+rsync 873/tcp # RSYNC Server
+rsync 873/udp
+swat 901/tcp # SWAT
+imaps 993/tcp # SSL IMAP
+imaps 993/udp
+pop3s 995/tcp
+pop3s 995/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations. For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined. This list specifies the port used by the server process as its
+#> contact port. While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+ingreslock 1524/tcp
+ingreslock 1524/udp
+prospero-np 1525/tcp # Prospero non-privileged
+prospero-np 1525/udp
+rfe 5002/tcp # Radio Free Ethernet
+rfe 5002/udp # Actually uses UDP only
+#
+#
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial. Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+#kerberos 750/udp kdc # Kerberos (server) udp
+#kerberos 750/tcp kdc # Kerberos (server) tcp
+krbupdate 760/tcp kreg # Kerberos registration
+kpasswd 761/tcp kpwd # Kerberos "passwd"
+#klogin 543/tcp # Kerberos rlogin
+eklogin 2105/tcp # Kerberos encrypted rlogin
+#kshell 544/tcp krcmd # Kerberos remote shell
+svn 3690/tcp # Subversion Server
+svn 3690/udp # Subversion Server
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv 871/tcp # SUP server
+supfiledbg 1127/tcp # SUP debugging
diff --git a/abs/core/ipw2100-fw/PKGBUILD b/abs/core/ipw2100-fw/PKGBUILD
new file mode 100644
index 0000000..52cd9f5
--- /dev/null
+++ b/abs/core/ipw2100-fw/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ipw2100-fw
+pkgver=1.3
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW2100"
+arch=(i686 x86_64)
+url="http://ipw2100.sourceforge.net/"
+depends=('wireless_tools')
+#source=(ipw2100-fw-1.3.tgz http://switch.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tgz)
+source=(http://bughost.org/firmware/$pkgname-$pkgver.tgz)
+install=ipw2100-fw.install
+replaces=ipw2100
+
+build() {
+ #cd $startdir/src/$pkgname-$pkgver
+ #make
+ #Install kernel modules
+ #for i in *.ko
+ #do
+ #install -D -m 644 $i $startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/wireless/ipw2100/$i
+ #done
+
+ cd $startdir/src
+
+ # Install firmware
+ for i in *.fw
+ do
+ install -D -m 644 $i $startdir/pkg/lib/firmware/$i
+ done
+
+ # Install firmware license
+ install -D -m 644 LICENSE $startdir/pkg/lib/firmware/LICENSE.ipw2100-fw
+ }
+md5sums=('46aa75bcda1a00efa841f9707bbbd113')
diff --git a/abs/core/ipw2100-fw/ipw2100-fw.install b/abs/core/ipw2100-fw/ipw2100-fw.install
new file mode 100644
index 0000000..1a0ff6b
--- /dev/null
+++ b/abs/core/ipw2100-fw/ipw2100-fw.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use the firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw2100-fw else please remove this package
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/ipw2200-fw/PKGBUILD b/abs/core/ipw2200-fw/PKGBUILD
new file mode 100644
index 0000000..5ff080b
--- /dev/null
+++ b/abs/core/ipw2200-fw/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ipw2200-fw
+pkgver=3.0
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW2200"
+arch=(i686 x86_64)
+url="http://ipw2200.sourceforge.net/"
+depends=('wireless_tools')
+source=(http://bughost.org/firmware/$pkgname-$pkgver.tgz)
+install=ipw2200-fw.install
+replaces=ipw2200
+
+build() {
+ #cd $startdir/src/$pkgname-$pkgver
+ #make
+ #Install kernel modules
+ #for i in *.ko
+ #do
+ #install -D -m 644 $i $startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/wireless/ipw2200/$i
+ #done
+
+ cd $startdir/src/ipw2200-fw-3.0
+
+ # Install firmware
+ for i in *.fw
+ do
+ install -D -m 644 $i $startdir/pkg/lib/firmware/$i
+ done
+ # Install firmware license
+ install -D -m 644 LICENSE.ipw2200-fw $startdir/pkg/lib/firmware/LICENSE.ipw2200-fw
+ }
+md5sums=('34a5ed3702006f5470ebfd513e04d9eb')
diff --git a/abs/core/ipw2200-fw/ipw2200-fw.install b/abs/core/ipw2200-fw/ipw2200-fw.install
new file mode 100644
index 0000000..4720660
--- /dev/null
+++ b/abs/core/ipw2200-fw/ipw2200-fw.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use the firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw2200-fw else please remove this package.
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/ipw3945-ucode/PKGBUILD b/abs/core/ipw3945-ucode/PKGBUILD
new file mode 100644
index 0000000..dbc79ca
--- /dev/null
+++ b/abs/core/ipw3945-ucode/PKGBUILD
@@ -0,0 +1,22 @@
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=ipw3945-ucode
+pkgver=1.14.2
+pkgrel=2
+pkgdesc="Intel Centrino Drivers firmware for IPW3945"
+arch=(i686 x86_64)
+url="http://www.bughost.org/ipw3945"
+license=""
+depends=('udev')
+install=ipw3945-ucode.install
+source=(http://www.bughost.org/ipw3945/ucode/$pkgname-$pkgver.tgz)
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Install firmware
+ install -D -m 644 ipw3945.ucode $startdir/pkg/lib/firmware/ipw3945.ucode
+ # Install firmware license
+ install -D -m 644 LICENSE.ipw3945-ucode $startdir/pkg/lib/firmware/LICENSE.ipw3945-ucode
+}
+md5sums=('c1c4cc7f993f448e7c05768c012084aa')
diff --git a/abs/core/ipw3945-ucode/ipw3945-ucode.install b/abs/core/ipw3945-ucode/ipw3945-ucode.install
new file mode 100644
index 0000000..9296f8c
--- /dev/null
+++ b/abs/core/ipw3945-ucode/ipw3945-ucode.install
@@ -0,0 +1,18 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use this firmware you have to agree to Intel's license located in
+==> /lib/firmware/LICENSE.ipw3945-ucode else please remove this package.
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/ipw3945/2.6.18-compile.patch b/abs/core/ipw3945/2.6.18-compile.patch
new file mode 100644
index 0000000..ef0c920
--- /dev/null
+++ b/abs/core/ipw3945/2.6.18-compile.patch
@@ -0,0 +1,11 @@
+--- Makefile~ 2006-06-24 01:35:00.000000000 +0200
++++ Makefile 2006-08-28 13:29:15.000000000 +0200
+@@ -93,7 +93,7 @@
+ IEEE80211_API := $(shell [[ "$(IEEE80211_VER)" == 1.1.14* ]] && \
+ { echo "2" ; } || \
+ { ver=$(IEEE80211_VER); ver=$${ver\#*.} ; echo $${ver%.*} ; })
+- EXTRA_CFLAGS += -DIEEE80211_API_VERSION=$(IEEE80211_API)
++ EXTRA_CFLAGS += -DIEEE80211_API_VERSION=2
+ endif
+
+ ifeq ($(CONFIG_IPW3945_DEBUG),y)
diff --git a/abs/core/ipw3945/PKGBUILD b/abs/core/ipw3945/PKGBUILD
new file mode 100644
index 0000000..572b561
--- /dev/null
+++ b/abs/core/ipw3945/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5912 2008-07-21 20:12:27Z thomas $
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+# Maintainer: James Rayner <iphitus@gmail.com>
+_kernver=2.6.26-ARCH
+pkgname=ipw3945
+pkgver=1.2.2
+pkgrel=11
+pkgdesc="Driver for the Intel PRO/Wireless 3945ABG miniPCI express adapter"
+arch=(i686 x86_64)
+url="http://ipw3945.sourceforge.net"
+license=("GPL")
+depends=('wireless_tools' 'kernel26>=2.6.26-1' 'kernel26<2.6.27' 'ipw3945-ucode' 'ipw3945d')
+install=ipw3945.install
+source=(http://downloads.sourceforge.net/sourceforge/ipw3945/ipw3945-$pkgver.tgz
+ compile-2.6.24.patch)
+md5sums=('9e5ca2f3ffbb84270ede45d5572df4c9'
+ '12db6e8410ab38f1fbca15681cfa752a')
+
+build() {
+ cd $startdir/src/ipw3945-$pkgver
+ sed -i -e "s:^#\(CONFIG_IPW3945_QOS\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IPW3945_MONITOR\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IEEE80211_RADIOTAP\)=.*:\1=y:" \
+ -e "s:^# \(CONFIG_IPW3945_PROMISCUOUS\)=.*:\1=y:" \
+ Makefile
+ patch -Np1 -i ../compile-2.6.24.patch || return 1
+ make KVER=${_kernver} IEEE80211_INC=/usr/src/linux-${_kernver}/ IEEE80211_IGNORE_DUPLICATE=y || return 1
+ #Install kernel module
+ install -D -m 644 ipw3945.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless/ipw3945/ipw3945.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core/ipw3945/compile-2.6.24.patch b/abs/core/ipw3945/compile-2.6.24.patch
new file mode 100644
index 0000000..f6350fc
--- /dev/null
+++ b/abs/core/ipw3945/compile-2.6.24.patch
@@ -0,0 +1,43 @@
+Author: Samuel Tardieu <sam@rfc1149.net>
+Date: Tue Oct 16 12:31:58 2007 +0200
+
+ MAC_ARG is not defined by the kernel headers anymore
+
+diff --git a/ipw3945.c b/ipw3945.c
+index eec20b7..cc36b9c 100644
+--- a/ipw3945.c
++++ b/ipw3945.c
+@@ -102,6 +102,12 @@
+ #define VQ
+ #endif
+
++/* stolen from net/ieee80211.h */
++#ifndef MAC_ARG
++#define MAC_ARG(x) ((u8*)(x))[0], ((u8*)(x))[1], ((u8*)(x))[2], \
++ ((u8*)(x))[3], ((u8*)(x))[4], ((u8*)(x))[5]
++#endif
++
+ #define IPW3945_VERSION "1.2.2" VD VM VP VR VQ
+
+ #define DRV_DESCRIPTION "Intel(R) PRO/Wireless 3945 Network Connection driver for Linux"
+
+
+
+Author: Samuel Tardieu <sam@rfc1149.net>
+Date: Tue Oct 16 12:37:54 2007 +0200
+
+ Nuke SET_MODULE_OWNER() use
+
+diff --git a/ipw3945.c b/ipw3945.c
+index cc36b9c..0369876 100644
+--- a/ipw3945.c
++++ b/ipw3945.c
+@@ -16597,7 +16597,6 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ goto out_release_ucode;
+ }
+
+- SET_MODULE_OWNER(net_dev);
+ SET_NETDEV_DEV(net_dev, &pdev->dev);
+ mutex_lock(&priv->mutex);
+ priv->ieee->hard_start_xmit = ipw_net_hard_start_xmit;
+
diff --git a/abs/core/ipw3945/ipw3945.install b/abs/core/ipw3945/ipw3945.install
new file mode 100644
index 0000000..8101a44
--- /dev/null
+++ b/abs/core/ipw3945/ipw3945.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/ipw3945/kernel-2.6.19.patch b/abs/core/ipw3945/kernel-2.6.19.patch
new file mode 100644
index 0000000..ed28608
--- /dev/null
+++ b/abs/core/ipw3945/kernel-2.6.19.patch
@@ -0,0 +1,10 @@
+--- ipw3945.h~ 2006-06-26 23:29:30.000000000 +0200
++++ ipw3945.h 2006-10-17 17:12:06.000000000 +0200
+@@ -29,7 +29,6 @@
+
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+-#include <linux/config.h>
+ #include <linux/init.h>
+
+ #include <linux/version.h>
diff --git a/abs/core/ipw3945/lockup.patch b/abs/core/ipw3945/lockup.patch
new file mode 100644
index 0000000..993fbbc
--- /dev/null
+++ b/abs/core/ipw3945/lockup.patch
@@ -0,0 +1,31 @@
+
+Fix potential driver lockup problem
+
+Since we have already store the inta to priv->isr_inta in the
+interrupt handler we don't need to get it from the hardware again
+in the tasklet. Some people find ipw3945-1.2.1 still didn't
+resolve the boot lockup problem as reported in bugzilla #1096.
+
+If you still find the lockup problem in ipw3945-1.2.1, please try
+this patch and report if it resolves your problem or not to
+yi.zhu@intel.com.
+
+Thanks to Egon for providing this patch!
+
+Signed-off-by: Egon <anannatrak@yahoo.it>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+--
+
+--- a/ipw3945.c 2007-04-11 14:46:58.000000000 +0800
++++ b/ipw3945.c 2007-05-14 15:55:56.000000000 +0800
+@@ -2769,8 +2769,8 @@ static void ipw_irq_tasklet(struct ipw_p
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+- inta = ipw_read32(priv, CSR_INT);
+- inta_mask = ipw_read32(priv, CSR_INT_MASK);
++ inta = 0;
++ inta_mask = 0;
+ ipw_write32(priv, CSR_INT, inta);
+ inta &= (CSR_INI_SET_MASK & inta_mask);
+
diff --git a/abs/core/ipw3945d/PKGBUILD b/abs/core/ipw3945d/PKGBUILD
new file mode 100644
index 0000000..07e9043
--- /dev/null
+++ b/abs/core/ipw3945d/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: Giovanni Scafora <linuxmania@gmail.com>
+
+pkgname=ipw3945d
+pkgver=1.7.22
+pkgrel=4
+pkgdesc="Regulatory daemon for IPW3945"
+arch=(i686 x86_64)
+url="http://www.bughost.org/ipw3945"
+license=""
+depends=('glibc')
+install=ipw3945d.install
+source=(http://www.bughost.org/ipw3945/daemon/$pkgname-$pkgver.tgz ipw3945d.rc)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Install daemon w/ Arch specific fix
+ if [ "$CARCH" = "x86_64" ]; then
+ install -D -m 755 x86_64/ipw3945d $startdir/pkg/sbin/ipw3945d
+ else install -D -m 755 x86/ipw3945d $startdir/pkg/sbin/ipw3945d
+ fi
+ # Install license
+ install -D -m 644 LICENSE.ipw3945d $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+ install -m755 -D $startdir/src/ipw3945d.rc $startdir/pkg/etc/rc.d/ipw3945d || return
+}
+
+md5sums=('097888f5be05eb2b9b87dcdbeeb948ce' '72aafd7cba214592de6175974a48b4f9')
diff --git a/abs/core/ipw3945d/ipw3945d.install b/abs/core/ipw3945d/ipw3945d.install
new file mode 100644
index 0000000..3d35fc5
--- /dev/null
+++ b/abs/core/ipw3945d/ipw3945d.install
@@ -0,0 +1,35 @@
+# arg 1: the new package version
+post_install() {
+cat << EOF
+IMPORTANT
+==> In order to use this daemon you have to agree to Intel's license located
+==> in /usr/share/licenses/custom/ipw3945d/LICENSE.ipw3945d
+==> else please remove this package.
+==>
+==> To use this daemon, add 'ipw3945d' to your DAEMONS=() entry in /etc/rc.conf
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+cat << EOF
+IMPORTANT
+==> In order to use this daemon you have to agree to Intel's license located
+==> in /usr/share/licenses/custom/ipw3945d/LICENSE.ipw3945d
+==> else please remove this package.
+==>
+AUTOMATIC DAEMON LOADING VIA MODPROBE
+==> To do this, you typically place the following two lines into your
+==> /etc/modprobe.conf:
+==> echo install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; \
+==> sleep 0.5 ; /sbin/ipw3945d --quiet >> /etc/modprobe.conf
+==>
+==> echo remove ipw3945 /sbin/ipw3945d --kill ; \
+==> /sbin/modprobe -r --ignore-remove ipw3945 >> /etc/modprobe.conf
+EOF
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/ipw3945d/ipw3945d.rc b/abs/core/ipw3945d/ipw3945d.rc
new file mode 100644
index 0000000..b0e02bb
--- /dev/null
+++ b/abs/core/ipw3945d/ipw3945d.rc
@@ -0,0 +1,42 @@
+
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /sbin/ipw3945d`
+case "$1" in
+ start)
+ stat_busy "Starting IPW3945d"
+ [ -z "$PID" ] && /sbin/ipw3945d --quiet
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo `pidof -o %PPID /sbin/ipw3945d` > /var/run/ipw3945d.pid
+ add_daemon ipw3945d
+ sleep 1 # not good, but daemon needs time to upload to card, otherwise network fails.
+ stat_done
+ fi
+
+ sleep 0.5
+ ;;
+ stop)
+ stat_busy "Stopping IPW3945d"
+ [ ! -z "$PID" ] && /sbin/ipw3945d --kill
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ipw3945d
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
+
diff --git a/abs/core/ivtv-utils/PKGBUILD b/abs/core/ivtv-utils/PKGBUILD
new file mode 100644
index 0000000..d8e13c6
--- /dev/null
+++ b/abs/core/ivtv-utils/PKGBUILD
@@ -0,0 +1,46 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Sasha Zbrozek <kleptophobiac@gmail.com>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=ivtv-utils
+pkgver=1.0.3
+pkgrel=1
+_kernver=2.6.23-ARCH
+pkgdesc="Non-mainline kernel drivers and userspace utilities for Hauppauge PVR cards"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://ivtvdriver.org"
+source=("http://dl.ivtvdriver.org/ivtv/archive/1.0.x/ivtv-$pkgver.tar.gz" \
+ 'http://dl.ivtvdriver.org/ivtv/firmware/ivtv-firmware.tar.gz' )
+depends=('gcc-libs')
+md5sums=('2c0e04a861cb7409ea82a2935b1e0050' 'b9a871f1c569025be9c48a77b3515faf')
+
+build() {
+ # SET UP
+ cd $startdir/src/ivtv-$pkgver || return 1
+
+ # don't call depmod here
+ sed -i 's|/sbin/depmod -a||' driver/Makefile i2c-drivers/Makefile || return 1
+
+ # install the utils in /usr/bin, not /usr/local/bin
+ sed -i "s%PREFIX = /usr/local%PREFIX = /usr%g" utils/Makefile || return 1
+
+ #cd to utils as that is all we need since ivtv is now in the kernel
+ cd utils/
+
+ # build
+ make INSTALLDIR=/usr/bin || return 1
+
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # remove the kernel modules in the utils package
+ rm -rf $startdir/pkg/lib/modules || return 1
+
+ # install the firmware
+ cd $startdir/src || return 1
+ for file in v4l-cx2341x-dec.fw v4l-cx2341x-enc.fw v4l-cx2341x-init.mpg v4l-cx25840.fw v4l-pvrusb2-24xxx-01.fw v4l-pvrusb2-29xxx-01.fw
+ do
+ install -D -m 0644 $file $startdir/pkg/lib/firmware/$file || return 1
+ done
+}
diff --git a/abs/core/ivtv-utils/ivtv-utils.install b/abs/core/ivtv-utils/ivtv-utils.install
new file mode 100644
index 0000000..4966d4a
--- /dev/null
+++ b/abs/core/ivtv-utils/ivtv-utils.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.22-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/iwlwifi-3945-ucode/PKGBUILD b/abs/core/iwlwifi-3945-ucode/PKGBUILD
new file mode 100644
index 0000000..14de93b
--- /dev/null
+++ b/abs/core/iwlwifi-3945-ucode/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=iwlwifi-3945-ucode
+pkgver=2.14.1.5
+pkgrel=2
+pkgdesc="Intel wireless firmware for IPW3945 (iwlwifi driver)"
+arch=(i686 x86_64)
+url="http://intellinuxwireless.org/?p=iwlwifi"
+license=('custom')
+depends=()
+source=(http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-2.14.4.tgz
+ http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-$pkgver.tgz)
+md5sums=('7178aa3a6e08655b8ac9565095bbd441'
+ 'a8122d3e026561055f488dc654ccfcd1')
+force=y
+
+build() {
+ cd $startdir/src/$pkgname-2.14.4
+ # Install old firmware for compatibility
+ install -D -m 644 iwlwifi-3945.ucode $startdir/pkg/lib/firmware/iwlwifi-3945.ucode || return 1
+
+ cd $startdir/src/$pkgname-$pkgver
+ # Install firmware
+ install -D -m 644 iwlwifi-3945-1.ucode $startdir/pkg/lib/firmware/iwlwifi-3945-1.ucode || return 1
+ # Install license
+ install -D -m 644 LICENSE.iwlwifi-3945-ucode $startdir/pkg/usr/share/licenses/$pkgname/LICENSE || return 1
+}
diff --git a/abs/core/iwlwifi-4965-ucode/PKGBUILD b/abs/core/iwlwifi-4965-ucode/PKGBUILD
new file mode 100644
index 0000000..4ce295a
--- /dev/null
+++ b/abs/core/iwlwifi-4965-ucode/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 4446 2008-07-07 12:03:57Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=iwlwifi-4965-ucode
+pkgver=228.57.2.21
+pkgrel=1
+pkgdesc="Intel wireless firmware for IPW4965 (iwlwifi driver)"
+arch=(i686 x86_64)
+url="http://intellinuxwireless.org/?p=iwlwifi"
+license=('custom')
+depends=()
+source=(http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-$pkgver.tgz
+ http://intellinuxwireless.org/iwlwifi/downloads/$pkgname-228.57.1.21.tgz)
+md5sums=('83804fb4bfa991ffd4849c19a74bf38d'
+ 'bce5a13d681100aeee2ddac3beaff437')
+
+build() {
+ cd $startdir/src/$pkgname-228.57.1.21
+ # Install firmware (ABI version 1, for compatibility)
+ install -D -m 644 iwlwifi-4965-1.ucode $startdir/pkg/lib/firmware/iwlwifi-4965-1.ucode || return 1
+ cd $startdir/src/$pkgname-$pkgver
+ # Install firmware (ABI version 2, for future versions of iwl4965)
+ install -D -m 644 iwlwifi-4965-2.ucode $startdir/pkg/lib/firmware/iwlwifi-4965-2.ucode || return 1
+ # Install license
+ install -D -m 644 LICENSE.iwlwifi-4965-ucode $startdir/pkg/usr/share/licenses/$pkgname/LICENSE || return 1
+}
diff --git a/abs/core/jack-audio-connection-kit/PKGBUILD b/abs/core/jack-audio-connection-kit/PKGBUILD
new file mode 100644
index 0000000..f9d73eb
--- /dev/null
+++ b/abs/core/jack-audio-connection-kit/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: tobias <tobias@archlinux.net>
+# Contributor: Robert Emil Berge <robert@rebi.no>
+
+pkgname=jack-audio-connection-kit
+pkgver=0.109.2
+pkgrel=1
+pkgdesc="a low-latency audio server"
+arch=(i686 x86_64)
+license=(GPL2 LGPL2)
+depends=('libsndfile' 'bash' 'readline' 'flac>=1.1.4')
+makedepends=('doxygen')
+install=jack-audio-connection-kit.install
+url="http://jackit.sourceforge.net/"
+backup=(etc/conf.d/jack-audio-connection-kit)
+options=('!libtool')
+source=(http://dl.sourceforge.net/sourceforge/jackit/${pkgname}-${pkgver}.tar.gz \
+ ${pkgname}.rc.d ${pkgname}.conf.d)
+md5sums=('4d8f795a6c566b9753a86038367e7e32' '4dcba5381e45bd449def164927854e48' \
+ '0517b67ef912e2a84b6a15dea2dc2680')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --enable-optimization-by-compiler \
+ --enable-mmx --enable-timestamps --enable-posix-shm --libdir=/usr/lib
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m 755 ../${pkgname}.rc.d ${startdir}/pkg/etc/rc.d/${pkgname}
+ install -D -m 644 ../${pkgname}.conf.d ${startdir}/pkg/etc/conf.d/${pkgname}
+}
diff --git a/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.conf.d b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.conf.d
new file mode 100644
index 0000000..2ae7ca9
--- /dev/null
+++ b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.conf.d
@@ -0,0 +1,42 @@
+# Jack Audio Connection Kit options
+
+
+################################################ general server options
+# output form `jackd --help`
+# extend the switches in the OPTIONS variable
+# usage: jackd [ --realtime OR -R [ --realtime-priority OR -P priority ] ]
+# [ --no-mlock OR -m ]
+# [ --timeout OR -t client-timeout-in-msecs ]
+# [ --port-max OR -p maximum-number-of-ports]
+# [ --verbose OR -v ]
+# [ --silent OR -s ]
+# [ --version OR -V ]
+# -d driver [ ... driver args ... ]
+# driver can be `alsa', `dummy', `oss' or `portaudio'
+
+SERVER_PARAMS="-s -d alsa"
+
+
+################################################# options passed to the driver
+# currently only options for alsa are available
+
+
+# Parameters for driver 'alsa' (all parameters are optional):
+# -C, --capture Provide only capture ports. Optionally set device (default: none)
+# -P, --playback Provide only playback ports. Optionally set device (default: none)
+# -d, --device ALSA device name (default: hw:0)
+# -r, --rate Sample rate (default: 48000)
+# -p, --period Frames per period (default: 1024)
+# -n, --nperiods Number of periods in hardware buffer (default: 2)
+# -H, --hwmon Hardware monitoring, if available (default: false)
+# -M, --hwmeter Hardware metering, if available (default: false)
+# -D, --duplex Provide both capture and playback ports (default: true)
+# -s, --softmode Soft-mode, no xrun handling (default: false)
+# -m, --monitor Provide monitor ports for the output (default: false)
+# -z, --dither Dithering mode (default: n)
+# -i, --inchannels Number of capture channels (defaults to hardware max) (default: 0)
+# -o, --outchannels Number of playback channels (defaults to hardware max) (default: 0)
+# -S, --shorts Try 16-bit samples before 32-bit (default: false)
+
+DRIVER_PARAMS="-d hw:0 -p 1024"
+
diff --git a/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.install b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.install
new file mode 100644
index 0000000..cdbedb8
--- /dev/null
+++ b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.install
@@ -0,0 +1,34 @@
+
+post_install() {
+ cat << EOM
+
+ --> It is recommended to use qjackctl as a controlling frontend for the
+ --> audio server. The extended rights for realtime capabilities can be
+ --> granted based on groups or a per user base in
+ --> /etc/security/limits.conf
+
+ --> The audio server comes with a daemon script that runs it as root.
+ --> Configuration happens in /etc/conf.d/jack-audio-connection-kit and is
+ --> documented there.
+ --> NOTE: Running jack as root to enable realtime capabilities isn't
+ --> needed any longer.
+
+EOM
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ /bin/true
+}
+
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.rc.d b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.rc.d
new file mode 100644
index 0000000..b2f658e
--- /dev/null
+++ b/abs/core/jack-audio-connection-kit/jack-audio-connection-kit.rc.d
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+# source application-specific settings
+[ -f /etc/conf.d/jack-audio-connection-kit ] && . /etc/conf.d/jack-audio-connection-kit
+
+PID=`pidof -o %PPID /usr/bin/jackd`
+
+case "$1" in
+ start)
+ stat_busy "Starting Jack-audio-connection-kit Daemon"
+ [ -z "$PID" ] && /usr/bin/jackd $SERVER_PARAMS -d $DRIVER_PARAMS &> /dev/null &
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon jack-audio-connection-kit
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Jack-audio-connection-kit Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon jack-audio-connection-kit
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core/jasper/PKGBUILD b/abs/core/jasper/PKGBUILD
new file mode 100644
index 0000000..ee60693
--- /dev/null
+++ b/abs/core/jasper/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 9007 2008-08-17 02:42:41Z eric $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=jasper
+pkgver=1.900.1
+pkgrel=1
+pkgdesc="a software-based implementation of the codec specified in the emerging JPEG-2000 Part-1 standard"
+arch=(i686 x86_64)
+url="http://www.ece.uvic.ca/~mdadams/jasper/"
+depends=('libjpeg' 'glut' 'libxi' 'libxmu' 'mesa')
+makedepends=('unzip')
+options=('!libtool')
+source=(http://www.ece.uvic.ca/~mdadams/$pkgname/software/$pkgname-$pkgver.zip)
+md5sums=('a342b2b4495b3e1394e161eb5d85d754')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+}
diff --git a/abs/core/jfsutils/PKGBUILD b/abs/core/jfsutils/PKGBUILD
new file mode 100644
index 0000000..bd4a8bf
--- /dev/null
+++ b/abs/core/jfsutils/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=jfsutils
+pkgver=1.1.12
+pkgrel=11
+pkgdesc="JFS filesystem utilities"
+arch=(i686 x86_64)
+url="http://jfs.sourceforge.net"
+license=('GPL')
+groups=('base')
+depends=('e2fsprogs')
+source=(http://jfs.sourceforge.net/project/pub/jfsutils-$pkgver.tar.gz)
+md5sums=('10efa993a62113530645fc7b3fa542f4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/sbin $startdir/pkg
+}
diff --git a/abs/core/kakasi/PKGBUILD b/abs/core/kakasi/PKGBUILD
new file mode 100644
index 0000000..2a8c08a
--- /dev/null
+++ b/abs/core/kakasi/PKGBUILD
@@ -0,0 +1,20 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+
+pkgname=kakasi
+pkgver=2.3.4
+pkgrel=2
+pkgdesc="Convert Kanji characters to Hiragana, Katakana or Romaji"
+arch=('i686' 'x86_64')
+url="http://kakasi.namazu.org/"
+license=('GPL')
+source=(http://kakasi.namazu.org/stable/${pkgname}-${pkgver}.tar.gz)
+md5sums=(4eff51aafbd56c9635791a20c03efa8f)
+
+build() {
+ cd "$startdir/src/$pkgname-$pkgver"
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR="$startdir/pkg" install
+}
+
diff --git a/abs/core/kbd/PKGBUILD b/abs/core/kbd/PKGBUILD
new file mode 100644
index 0000000..bbc68f7
--- /dev/null
+++ b/abs/core/kbd/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=kbd
+pkgver=1.14.1.20080309
+pkgrel=11
+pkgdesc="Keytable files and keyboard utilities"
+arch=('i686' 'x86_64')
+url="ftp://ftp.altlinux.org/pub/people/legion/kbd/"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz
+ #ftp://ftp.altlinux.org/pub/people/legion/kbd/${pkgname}-${pkgver}.tar.gz
+ rename-duplicates.patch)
+md5sums=('76e817f11c6ec80d9fc9f3f7ace79b4a'
+ 'bd2d9f88141a8e78baaa4982f1d1f6c5')
+
+build() {
+ cd ${startdir}/src
+ #cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i rename-duplicates.patch || return 1
+
+ autoconf
+ ./configure --prefix=/usr --datadir=/usr/share/kbd --mandir=/usr/share/man
+ make KEYCODES_PROGS=yes RESIZECONS_PROGS=yes || return 1
+ make KEYCODES_PROGS=yes RESIZECONS_PROGS=yes DESTDIR=${startdir}/pkg install
+
+ # this is needed because initscripts call /bin/loadkeys
+ # remove this when next versions of kbd
+ # and initscripts with /usr/bin/loadkeys usage will be released
+ mkdir ${startdir}/pkg/bin
+ ln -s /usr/bin/loadkeys ${startdir}/pkg/bin/loadkeys
+}
diff --git a/abs/core/kbd/kbd-1.12-alias.patch b/abs/core/kbd/kbd-1.12-alias.patch
new file mode 100644
index 0000000..30be4fa
--- /dev/null
+++ b/abs/core/kbd/kbd-1.12-alias.patch
@@ -0,0 +1,47 @@
+diff -u kbd-1.12/src/psffontop.c kbd-1.12/src/psffontop.c
+--- kbd-1.12/src/psffontop.c 2005-03-12 00:48:30.075310872 +0100
++++ kbd-1.12/src/psffontop.c 2005-05-14 10:49:59.000000000 +0900
+@@ -59,7 +59,6 @@
+
+ static unsigned int
+ assemble_ucs2(char **inptr, int cnt) {
+- unsigned char **in = (unsigned char **) inptr;
+ unsigned int u1, u2;
+
+ if (cnt < 2) {
+@@ -68,8 +67,8 @@
+ exit(EX_DATAERR);
+ }
+
+- u1 = *(*in)++;
+- u2 = *(*in)++;
++ u1 = (unsigned char)*(*inptr)++;
++ u2 = (unsigned char)*(*inptr)++;
+ return (u1 | (u2 << 8));
+ }
+
+@@ -110,7 +109,6 @@
+ */
+ static void
+ get_uni_entry(char **inptr, char **endptr, struct unicode_list *up, int utf8) {
+- unsigned char **in = (unsigned char **) inptr;
+ unsigned char uc;
+ unicode unichar;
+ int inseq = 0;
+@@ -126,14 +124,14 @@
+ exit(EX_DATAERR);
+ }
+ if (utf8) {
+- uc = *(*in)++;
++ uc = *(*inptr)++;
+ if (uc == PSF2_SEPARATOR)
+ break;
+ if (uc == PSF2_STARTSEQ) {
+ inseq = 1;
+ continue;
+ }
+- --(*in);
++ --(*inptr);
+ unichar = assemble_utf8(inptr, *endptr - *inptr);
+ } else {
+ unichar = assemble_ucs2(inptr, *endptr - *inptr);
diff --git a/abs/core/kbd/kbd-1.12-find_map_fix.patch b/abs/core/kbd/kbd-1.12-find_map_fix.patch
new file mode 100644
index 0000000..ca24703
--- /dev/null
+++ b/abs/core/kbd/kbd-1.12-find_map_fix.patch
@@ -0,0 +1,37 @@
+Oh, but I fixed it already. Patch below.
+
+Andries
+
+--- kbd-1.12.orig/src/findfile.c Fri Jan 16 20:45:31 2004
++++ kbd-1.12/src/findfile.c Wed Jan 28 23:29:35 2004
+@@ -70,6 +70,7 @@
+ FILE *fp = NULL;
+ DIR *d;
+ struct dirent *de;
++ struct stat statbuf;
+ char *ff, *fdir, *p, *q, **sp;
+ struct decompressor *dc;
+ int secondpass = 0;
+@@ -104,7 +105,6 @@
+ okdir = (ff && strcmp(de->d_name, fdir) == 0);
+
+ if ((secondpass && recdepth) || okdir) {
+- struct stat statbuf;
+ char *a;
+
+ a = xmalloc(strlen(dir) + strlen(de->d_name) + 2);
+@@ -137,6 +137,11 @@
+
+ sprintf(pathname, "%s/%s", dir, de->d_name);
+
++ /* Is this a regular file? */
++ if (stat(pathname, &statbuf) != 0 ||
++ !S_ISREG(statbuf.st_mode))
++ continue;
++
+ /* Does tail consist of a known suffix and possibly
+ a compression suffix? */
+ for(sp = suf; *sp; sp++) {
+
+
+[pasted and cut from another window, so with whitespace damage]
diff --git a/abs/core/kbd/kbd-1.12-no-user-map.patch b/abs/core/kbd/kbd-1.12-no-user-map.patch
new file mode 100644
index 0000000..f246228
--- /dev/null
+++ b/abs/core/kbd/kbd-1.12-no-user-map.patch
@@ -0,0 +1,19 @@
+Non-root users are allowed to change the unicode mode of their console, but
+not the global keymap. root will have to load the keymap in unicode mode
+explicitly.
+
+--- kbd-1.12/src/unicode_start.no-user-map 2005-12-01 19:33:19.000000000 +0100
++++ kbd-1.12/src/unicode_start 2005-12-01 19:33:28.000000000 +0100
+@@ -14,12 +14,6 @@
+
+ kbd_mode -u
+
+-# Change the keyboard mapping in such a way that the non-ASCII keys
+-# produce UTF-8 encoded multibyte sequences, instead of single bytes
+-# >= 0x80 in a legacy 8-bit encoding.
+-
+-dumpkeys | loadkeys --unicode
+-
+ # 2. The output side: the console screen.
+
+ # Tell the console output driver that the bytes arriving are UTF-8
diff --git a/abs/core/kbd/keymap_hook b/abs/core/kbd/keymap_hook
new file mode 100644
index 0000000..414338b
--- /dev/null
+++ b/abs/core/kbd/keymap_hook
@@ -0,0 +1,21 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading keymap..."
+ . /keymap
+ if [ "$KEYMAP" != "" ]; then
+ /bin/loadkeys -q $KEYMAP
+ fi
+ # If locale is *.utf set console to Unicode mode
+ if [ "$UTF8" = "yes" ]; then
+ /bin/kbd_mode -u
+ /bin/dumpkeys | /bin/loadkeys --unicode
+ echo -ne "\e%G" >> /dev/console
+ fi
+ if [ "$CONSOLEMAP" != "" ]; then
+ /bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/console
+ else
+ /bin/setfont $CONSOLEFONT -C /dev/console
+ fi
+ msg "done."
+}
diff --git a/abs/core/kbd/keymap_install b/abs/core/kbd/keymap_install
new file mode 100644
index 0000000..0518802
--- /dev/null
+++ b/abs/core/kbd/keymap_install
@@ -0,0 +1,44 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=""
+ SCRIPT="keymap"
+ KEYMAP_FILE="$(mktemp /tmp/keymap.XXXXXX)"
+ add_file /bin/loadkeys.static /bin/loadkeys
+ add_file /usr/bin/dumpkeys.static /bin/dumpkeys
+ add_file /usr/bin/kbd_mode.static /bin/kdb_mode
+ add_file /usr/bin/setfont.static /bin/setfont
+ grep "KEYMAP=" /etc/rc.conf >> ${KEYMAP_FILE}
+ grep "CONSOLEFONT=" /etc/rc.conf >> ${KEYMAP_FILE}
+ grep "CONSOLEMAP=" /etc/rc.conf >> ${KEYMAP_FILE}
+ if [ "$(echo $LOCALE | /bin/grep -i utf)" != "" ]; then
+ echo UTF8="yes" >> ${KEYMAP_FILE}
+ fi
+ . ${KEYMAP_FILE}
+ add_file ${KEYMAP_FILE} /keymap
+ [ "$CONSOLEFONT" != "" ] && add_file /usr/share/kbd/consolefonts/$(grep "CONSOLEFONT=" /etc/rc.conf | awk -FCONSOLEFONT= '{print $2}' | sed -e "s@[\"']*@@g")*
+ [ "$CONSOLEMAP" != "" ] && add_file /usr/share/kbd/unimaps/$(grep "CONSOLEMAP=" /etc/rc.conf | awk -FCONSOLEMAP= '{print $2}' | sed -e "s@[\"']*@@g")*
+ if [ "$KEYMAP" != "" ]; then
+ for i in $(find /usr/share/kbd/ -name "$(grep "KEYMAP=" /etc/rc.conf |\
+ awk -FKEYMAP= '{print $2}' | awk -F- '{print $1}' | sed -e "s@[\"']*@@g")*.map.gz"); do
+ add_file $i
+ done
+ for i in $(echo /usr/share/kbd/keymaps/include/*); do
+ add_file $i
+ done
+ for i in $(echo /usr/share/kbd/keymaps/*/include/*); do
+ add_file $i
+ done
+ fi
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the specified keymap and consolefont from rc.conf,
+ during early userspace.
+HELPEOF
+}
diff --git a/abs/core/kbd/rename-duplicates.patch b/abs/core/kbd/rename-duplicates.patch
new file mode 100644
index 0000000..a8b70fe
--- /dev/null
+++ b/abs/core/kbd/rename-duplicates.patch
@@ -0,0 +1,830 @@
+From 22cc5a37e41a8937747f3416a45e923e853fc452 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 20:38:42 +0200
+Subject: [PATCH] Rename keymaps with same filenames
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ data/keymaps/i386/dvorak/no-dvorak.map | 104 +++++++++++++++++++++++++
+ data/keymaps/i386/dvorak/no.map | 104 -------------------------
+ data/keymaps/i386/fgGIod/trf-fgGIod.map | 125 +++++++++++++++++++++++++++++++
+ data/keymaps/i386/fgGIod/trf.map | 125 -------------------------------
+ data/keymaps/i386/olpc/es-olpc.map | 80 ++++++++++++++++++++
+ data/keymaps/i386/olpc/es.map | 80 --------------------
+ data/keymaps/i386/olpc/pt-olpc.map | 68 +++++++++++++++++
+ data/keymaps/i386/olpc/pt.map | 68 -----------------
+ 8 files changed, 377 insertions(+), 377 deletions(-)
+ create mode 100644 data/keymaps/i386/dvorak/no-dvorak.map
+ delete mode 100644 data/keymaps/i386/dvorak/no.map
+ create mode 100644 data/keymaps/i386/fgGIod/trf-fgGIod.map
+ delete mode 100644 data/keymaps/i386/fgGIod/trf.map
+ create mode 100644 data/keymaps/i386/olpc/es-olpc.map
+ delete mode 100644 data/keymaps/i386/olpc/es.map
+ create mode 100644 data/keymaps/i386/olpc/pt-olpc.map
+ delete mode 100644 data/keymaps/i386/olpc/pt.map
+
+diff --git a/data/keymaps/i386/dvorak/no-dvorak.map b/data/keymaps/i386/dvorak/no-dvorak.map
+new file mode 100644
+index 0000000..2f15c57
+--- /dev/null
++++ b/data/keymaps/i386/dvorak/no-dvorak.map
+@@ -0,0 +1,104 @@
++# Date: Sun, 10 Feb 2008 10:56:47 +0100
++# From: "Thomas Geirhovd" <thomas@tg90nor.net>
++# Subject: Norwegian dvorak keymap
++#
++# Hi,
++#
++# I made a norwegian dvorak keymap for the console.
++# It can be found on http://www.tg90nor.net/no-dvorak.map.gz
++# Feel free to include it in kbd if you want to.
++#
++# --
++# Regards,
++# Thomas Geirhovd
++#
++keymaps 0-2,4-6,8-9,12
++alt_is_meta
++include "linux-with-alt-and-altgr.inc"
++strings as usual
++
++ keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++ keycode 2 = one exclam
++ alt keycode 2 = Meta_one
++ keycode 3 = two quotedbl at
++ control keycode 3 = nul
++ alt keycode 3 = Meta_two
++ keycode 4 = three numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_three
++ keycode 5 = four dollar dollar
++ control keycode 5 = Control_backslash
++ alt keycode 5 = Meta_four
++ keycode 6 = five percent
++ control keycode 6 = Control_bracketright
++ alt keycode 6 = Meta_five
++ keycode 7 = six ampersand
++ control keycode 7 = Control_asciicircum
++ alt keycode 7 = Meta_six
++ keycode 8 = seven slash braceleft
++ control keycode 8 = Control_underscore
++ alt keycode 8 =Meta_seven
++ keycode 9 = eight parenleft bracketleft
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++ keycode 10 = nine parenright bracketright
++ alt keycode 10 = Meta_nine
++ keycode 11 = zero equal braceright
++ alt keycode 11 = Meta_zero
++ keycode 12 = plus question
++ control keycode 12 = Control_underscore
++ alt keycode 12 = Meta_minus
++ keycode 13 = backslash grave apostrophe
++ alt keycode 13 = Meta_equal
++ keycode 14 = Delete
++ alt keycode 14 = Meta_Delete
++ keycode 15 = Tab
++ shift keycode 15 = Meta_Tab
++ keycode 16 = +aring +Aring
++ keycode 17 = comma semicolon
++ keycode 18 = period colon
++ keycode 19 = p
++ keycode 20 = y
++ keycode 21 = f
++ keycode 22 = g
++ keycode 23 = c
++ keycode 24 = r
++ keycode 25 = l
++ keycode 26 = apostrophe asterisk
++ keycode 27 = asciitilde asciicircum
++ keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++ keycode 29 = Control
++ keycode 30 = a
++ keycode 31 = o
++ keycode 32 = e
++ keycode 33 = u
++ keycode 34 = i
++ keycode 35 = d
++ keycode 36 = h
++ keycode 37 = t
++ keycode 38 = n
++ keycode 39 = s
++ keycode 40 = minus underscore
++ keycode 41 = bar section
++ control keycode 41 = nul
++keycode 42 = Shift
++keycode 43 = less greater
++keycode 44 = +ae +AE
++keycode 45 = q
++keycode 46 = j
++keycode 47 = k
++keycode 48 = x
++keycode 49 = b
++keycode 50 = m
++keycode 51 = w
++keycode 52 = v
++keycode 53 = z
++keycode 54 = Shift
++keycode 56 = Alt
++ keycode 57 = space
++ control keycode 57 = nul
++ keycode 58 = Caps_Lock
++ keycode 86 = +oslash +Ooblique
++keycode 97 = Control
+diff --git a/data/keymaps/i386/dvorak/no.map b/data/keymaps/i386/dvorak/no.map
+deleted file mode 100644
+index 2f15c57..0000000
+--- a/data/keymaps/i386/dvorak/no.map
++++ /dev/null
+@@ -1,104 +0,0 @@
+-# Date: Sun, 10 Feb 2008 10:56:47 +0100
+-# From: "Thomas Geirhovd" <thomas@tg90nor.net>
+-# Subject: Norwegian dvorak keymap
+-#
+-# Hi,
+-#
+-# I made a norwegian dvorak keymap for the console.
+-# It can be found on http://www.tg90nor.net/no-dvorak.map.gz
+-# Feel free to include it in kbd if you want to.
+-#
+-# --
+-# Regards,
+-# Thomas Geirhovd
+-#
+-keymaps 0-2,4-6,8-9,12
+-alt_is_meta
+-include "linux-with-alt-and-altgr.inc"
+-strings as usual
+-
+- keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+- keycode 2 = one exclam
+- alt keycode 2 = Meta_one
+- keycode 3 = two quotedbl at
+- control keycode 3 = nul
+- alt keycode 3 = Meta_two
+- keycode 4 = three numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_three
+- keycode 5 = four dollar dollar
+- control keycode 5 = Control_backslash
+- alt keycode 5 = Meta_four
+- keycode 6 = five percent
+- control keycode 6 = Control_bracketright
+- alt keycode 6 = Meta_five
+- keycode 7 = six ampersand
+- control keycode 7 = Control_asciicircum
+- alt keycode 7 = Meta_six
+- keycode 8 = seven slash braceleft
+- control keycode 8 = Control_underscore
+- alt keycode 8 =Meta_seven
+- keycode 9 = eight parenleft bracketleft
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+- keycode 10 = nine parenright bracketright
+- alt keycode 10 = Meta_nine
+- keycode 11 = zero equal braceright
+- alt keycode 11 = Meta_zero
+- keycode 12 = plus question
+- control keycode 12 = Control_underscore
+- alt keycode 12 = Meta_minus
+- keycode 13 = backslash grave apostrophe
+- alt keycode 13 = Meta_equal
+- keycode 14 = Delete
+- alt keycode 14 = Meta_Delete
+- keycode 15 = Tab
+- shift keycode 15 = Meta_Tab
+- keycode 16 = +aring +Aring
+- keycode 17 = comma semicolon
+- keycode 18 = period colon
+- keycode 19 = p
+- keycode 20 = y
+- keycode 21 = f
+- keycode 22 = g
+- keycode 23 = c
+- keycode 24 = r
+- keycode 25 = l
+- keycode 26 = apostrophe asterisk
+- keycode 27 = asciitilde asciicircum
+- keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+- keycode 29 = Control
+- keycode 30 = a
+- keycode 31 = o
+- keycode 32 = e
+- keycode 33 = u
+- keycode 34 = i
+- keycode 35 = d
+- keycode 36 = h
+- keycode 37 = t
+- keycode 38 = n
+- keycode 39 = s
+- keycode 40 = minus underscore
+- keycode 41 = bar section
+- control keycode 41 = nul
+-keycode 42 = Shift
+-keycode 43 = less greater
+-keycode 44 = +ae +AE
+-keycode 45 = q
+-keycode 46 = j
+-keycode 47 = k
+-keycode 48 = x
+-keycode 49 = b
+-keycode 50 = m
+-keycode 51 = w
+-keycode 52 = v
+-keycode 53 = z
+-keycode 54 = Shift
+-keycode 56 = Alt
+- keycode 57 = space
+- control keycode 57 = nul
+- keycode 58 = Caps_Lock
+- keycode 86 = +oslash +Ooblique
+-keycode 97 = Control
+diff --git a/data/keymaps/i386/fgGIod/trf-fgGIod.map b/data/keymaps/i386/fgGIod/trf-fgGIod.map
+new file mode 100644
+index 0000000..1061d11
+--- /dev/null
++++ b/data/keymaps/i386/fgGIod/trf-fgGIod.map
+@@ -0,0 +1,125 @@
++charset "iso-8859-9"
++keymaps 0-6,8-9,12
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam asciitilde
++ alt keycode 2 = Meta_one
++ alt shift keycode 2 = Meta_exclam
++keycode 3 = two at ampersand
++ control keycode 3 = nul
++ control shift keycode 3 = nul
++ alt keycode 3 = Meta_two
++ alt shift keycode 3 = Meta_at
++keycode 4 = three quotedbl numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_three
++ alt shift keycode 4 = Meta_quotedbl
++keycode 5 = four apostrophe dollar
++ control keycode 5 = Control_backslash
++ alt keycode 5 = Meta_four
++ alt shift keycode 5 = Meta_apostrophe
++keycode 6 = five parenleft less
++ control keycode 6 = Control_bracketright
++ alt keycode 6 = Meta_five
++ alt shift keycode 6 = Meta_parenleft
++keycode 7 = six slash greater
++ control keycode 7 = Control_asciicircum
++ alt keycode 7 = Meta_six
++ alt shift keycode 7 = Meta_slash
++keycode 8 = seven parenright braceleft
++ control keycode 8 = Control_underscore
++ alt keycode 8 = Meta_seven
++ alt shift keycode 8 = Meta_parenright
++keycode 9 = eight underscore braceright
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++ alt shift keycode 9 = Meta_underscore
++keycode 10 = nine percent bracketleft
++ alt keycode 10 = Meta_nine
++ alt shift keycode 10 = Meta_percent
++keycode 11 = zero colon bracketright
++ alt keycode 11 = Meta_zero
++ alt shift keycode 11 = Meta_colon
++keycode 12 = x
++keycode 13 = q
++keycode 14 = Delete Delete
++ alt keycode 14 = Meta_Delete
++keycode 15 = Tab
++ shift keycode 15 = Meta_Tab
++ alt keycode 15 = Meta_Tab
++keycode 16 = f
++keycode 17 = g
++keycode 18 = +0360 +0320
++keycode 19 = +0375 +I
++ altgr keycode 19 = +0356
++ altgr shift keycode 19 = +0316
++keycode 20 = o
++ altgr keycode 20 = +0364
++ altgr shift keycode 20 = +0324
++keycode 21 = d
++keycode 22 = r
++keycode 23 = n
++keycode 24 = h
++keycode 25 = p
++keycode 26 = semicolon asterisk
++ control keycode 26 = Escape
++ alt keycode 26 = Meta_semicolon
++ alt shift keycode 26 = Meta_asterisk
++keycode 27 = asciicircum grave
++ control keycode 27 = Control_bracketright
++ alt keycode 27 = Meta_asciicircum
++ alt shift keycode 27 = Meta_grave
++keycode 28 = Return
++ alt keycode 28 = 0x080d
++keycode 29 = Control
++keycode 30 = u
++ altgr keycode 30 = +0373
++ altgr shift keycode 30 = +0333
++keycode 31 = +i +0335
++keycode 32 = e
++keycode 33 = a
++ altgr keycode 33 = +0342
++ altgr shift keycode 33 = +0302
++keycode 34 = +0374 +0334
++keycode 35 = t
++keycode 36 = k
++keycode 37 = m
++keycode 38 = l
++keycode 39 = y
++keycode 40 = +0376 +0336
++ control keycode 40 = Control_g
++keycode 41 = w
++ control keycode 41 = nul
++keycode 42 = Shift
++keycode 43 = equal plus
++ control keycode 43 = Control_backslash
++ alt keycode 43 = Meta_equal
++ alt shift keycode 43 = Meta_plus
++keycode 44 = j
++keycode 45 = +0366 +0326
++keycode 46 = v
++keycode 47 = c
++keycode 48 = +0347 +0307
++keycode 49 = z
++keycode 50 = s
++keycode 51 = b
++keycode 52 = period question
++ control keycode 52 = Delete
++ alt keycode 52 = Meta_period
++ alt shift keycode 52 = Meta_question
++keycode 53 = comma minus slash
++ alt keycode 53 = Meta_comma
++ alt shift keycode 53 = Meta_minus
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++ alt keycode 57 = Meta_space
++keycode 58 = Caps_Lock
++keycode 86 = backslash bar
++ alt keycode 86 = Meta_backslash
++ alt shift keycode 86 = Meta_bar
++keycode 97 = Control
+diff --git a/data/keymaps/i386/fgGIod/trf.map b/data/keymaps/i386/fgGIod/trf.map
+deleted file mode 100644
+index 1061d11..0000000
+--- a/data/keymaps/i386/fgGIod/trf.map
++++ /dev/null
+@@ -1,125 +0,0 @@
+-charset "iso-8859-9"
+-keymaps 0-6,8-9,12
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam asciitilde
+- alt keycode 2 = Meta_one
+- alt shift keycode 2 = Meta_exclam
+-keycode 3 = two at ampersand
+- control keycode 3 = nul
+- control shift keycode 3 = nul
+- alt keycode 3 = Meta_two
+- alt shift keycode 3 = Meta_at
+-keycode 4 = three quotedbl numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_three
+- alt shift keycode 4 = Meta_quotedbl
+-keycode 5 = four apostrophe dollar
+- control keycode 5 = Control_backslash
+- alt keycode 5 = Meta_four
+- alt shift keycode 5 = Meta_apostrophe
+-keycode 6 = five parenleft less
+- control keycode 6 = Control_bracketright
+- alt keycode 6 = Meta_five
+- alt shift keycode 6 = Meta_parenleft
+-keycode 7 = six slash greater
+- control keycode 7 = Control_asciicircum
+- alt keycode 7 = Meta_six
+- alt shift keycode 7 = Meta_slash
+-keycode 8 = seven parenright braceleft
+- control keycode 8 = Control_underscore
+- alt keycode 8 = Meta_seven
+- alt shift keycode 8 = Meta_parenright
+-keycode 9 = eight underscore braceright
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+- alt shift keycode 9 = Meta_underscore
+-keycode 10 = nine percent bracketleft
+- alt keycode 10 = Meta_nine
+- alt shift keycode 10 = Meta_percent
+-keycode 11 = zero colon bracketright
+- alt keycode 11 = Meta_zero
+- alt shift keycode 11 = Meta_colon
+-keycode 12 = x
+-keycode 13 = q
+-keycode 14 = Delete Delete
+- alt keycode 14 = Meta_Delete
+-keycode 15 = Tab
+- shift keycode 15 = Meta_Tab
+- alt keycode 15 = Meta_Tab
+-keycode 16 = f
+-keycode 17 = g
+-keycode 18 = +0360 +0320
+-keycode 19 = +0375 +I
+- altgr keycode 19 = +0356
+- altgr shift keycode 19 = +0316
+-keycode 20 = o
+- altgr keycode 20 = +0364
+- altgr shift keycode 20 = +0324
+-keycode 21 = d
+-keycode 22 = r
+-keycode 23 = n
+-keycode 24 = h
+-keycode 25 = p
+-keycode 26 = semicolon asterisk
+- control keycode 26 = Escape
+- alt keycode 26 = Meta_semicolon
+- alt shift keycode 26 = Meta_asterisk
+-keycode 27 = asciicircum grave
+- control keycode 27 = Control_bracketright
+- alt keycode 27 = Meta_asciicircum
+- alt shift keycode 27 = Meta_grave
+-keycode 28 = Return
+- alt keycode 28 = 0x080d
+-keycode 29 = Control
+-keycode 30 = u
+- altgr keycode 30 = +0373
+- altgr shift keycode 30 = +0333
+-keycode 31 = +i +0335
+-keycode 32 = e
+-keycode 33 = a
+- altgr keycode 33 = +0342
+- altgr shift keycode 33 = +0302
+-keycode 34 = +0374 +0334
+-keycode 35 = t
+-keycode 36 = k
+-keycode 37 = m
+-keycode 38 = l
+-keycode 39 = y
+-keycode 40 = +0376 +0336
+- control keycode 40 = Control_g
+-keycode 41 = w
+- control keycode 41 = nul
+-keycode 42 = Shift
+-keycode 43 = equal plus
+- control keycode 43 = Control_backslash
+- alt keycode 43 = Meta_equal
+- alt shift keycode 43 = Meta_plus
+-keycode 44 = j
+-keycode 45 = +0366 +0326
+-keycode 46 = v
+-keycode 47 = c
+-keycode 48 = +0347 +0307
+-keycode 49 = z
+-keycode 50 = s
+-keycode 51 = b
+-keycode 52 = period question
+- control keycode 52 = Delete
+- alt keycode 52 = Meta_period
+- alt shift keycode 52 = Meta_question
+-keycode 53 = comma minus slash
+- alt keycode 53 = Meta_comma
+- alt shift keycode 53 = Meta_minus
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+- alt keycode 57 = Meta_space
+-keycode 58 = Caps_Lock
+-keycode 86 = backslash bar
+- alt keycode 86 = Meta_backslash
+- alt shift keycode 86 = Meta_bar
+-keycode 97 = Control
+diff --git a/data/keymaps/i386/olpc/es-olpc.map b/data/keymaps/i386/olpc/es-olpc.map
+new file mode 100644
+index 0000000..e97caeb
+--- /dev/null
++++ b/data/keymaps/i386/olpc/es-olpc.map
+@@ -0,0 +1,80 @@
++! Spanish keymap for OLPC; based upon es.map
++! Walter Bender (3 January 2008)
++!
++charset "iso-8859-15"
++keymaps 0-2,4,6,8-9,12
++include "qwerty-layout"
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam bar
++ alt keycode 2 = Meta_one
++keycode 3 = two quotedbl at
++ control keycode 3 = nul
++ alt keycode 3 = Meta_two
++keycode 4 = three grave numbersign
++ control keycode 4 = Escape
++ alt keycode 4 = Meta_grave
++keycode 5 = four dollar
++ alt keycode 5 = Meta_four
++keycode 6 = five percent asciicircum
++ control keycode 6 = Control_asciicircum
++ alt keycode 6 = Meta_five
++keycode 7 = six ampersand notsign
++ alt keycode 7 = Meta_six
++keycode 8 = seven slash backslash
++ control keycode 8 = Control_backslash
++ alt keycode 8 = Meta_seven
++keycode 9 = eight parenleft
++ control keycode 9 = Delete
++ alt keycode 9 = Meta_eight
++keycode 10 = nine parenright
++ alt keycode 10 = Meta_nine
++keycode 11 = zero equal
++ alt keycode 11 = Meta_equal
++keycode 12 = apostrophe question
++ alt keycode 12 = Meta_apostrophe
++keycode 13 = exclamdown questiondown
++keycode 14 = Delete
++ control keycode 14 = Control_underscore
++ alt keycode 14 = Meta_Delete
++keycode 15 = Tab
++ alt keycode 15 = Meta_Tab
++keycode 18 = e E euro
++keycode 26 = apostrophe diaeresis degree
++keycode 27 = bracketleft braceleft
++ control keycode 27 = Escape
++ alt keycode 27 = Meta_bracketleft
++keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++keycode 29 = Control
++keycode 39 = +ntilde +Ntilde
++keycode 40 = plus asterisk asciitilde
++ control keycode 40 = Control_g
++ alt keycode 40 = Meta_asciitilde
++keycode 41 = masculine ordfeminine backslash
++ control keycode 41 = Control_backslash
++ alt keycode 41 = Meta_backslash
++keycode 42 = Shift
++keycode 43 = bracketright braceright
++ control keycode 43 = Control_bracketright
++ alt keycode 43 = Meta_bracketright
++keycode 51 = comma semicolon
++ alt keycode 51 = Meta_comma
++ shift alt keycode 51 = Meta_semicolon
++keycode 52 = period colon
++ alt keycode 52 = Meta_period
++keycode 53 = minus underscore
++ control keycode 53 = Control_underscore
++ alt keycode 53 = Meta_minus
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++ alt keycode 57 = Meta_space
++keycode 211 = less greater
++ alt keycode 211 = Meta_less
++ shift alt keycode 211 = Meta_greater
++
+diff --git a/data/keymaps/i386/olpc/es.map b/data/keymaps/i386/olpc/es.map
+deleted file mode 100644
+index e97caeb..0000000
+--- a/data/keymaps/i386/olpc/es.map
++++ /dev/null
+@@ -1,80 +0,0 @@
+-! Spanish keymap for OLPC; based upon es.map
+-! Walter Bender (3 January 2008)
+-!
+-charset "iso-8859-15"
+-keymaps 0-2,4,6,8-9,12
+-include "qwerty-layout"
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam bar
+- alt keycode 2 = Meta_one
+-keycode 3 = two quotedbl at
+- control keycode 3 = nul
+- alt keycode 3 = Meta_two
+-keycode 4 = three grave numbersign
+- control keycode 4 = Escape
+- alt keycode 4 = Meta_grave
+-keycode 5 = four dollar
+- alt keycode 5 = Meta_four
+-keycode 6 = five percent asciicircum
+- control keycode 6 = Control_asciicircum
+- alt keycode 6 = Meta_five
+-keycode 7 = six ampersand notsign
+- alt keycode 7 = Meta_six
+-keycode 8 = seven slash backslash
+- control keycode 8 = Control_backslash
+- alt keycode 8 = Meta_seven
+-keycode 9 = eight parenleft
+- control keycode 9 = Delete
+- alt keycode 9 = Meta_eight
+-keycode 10 = nine parenright
+- alt keycode 10 = Meta_nine
+-keycode 11 = zero equal
+- alt keycode 11 = Meta_equal
+-keycode 12 = apostrophe question
+- alt keycode 12 = Meta_apostrophe
+-keycode 13 = exclamdown questiondown
+-keycode 14 = Delete
+- control keycode 14 = Control_underscore
+- alt keycode 14 = Meta_Delete
+-keycode 15 = Tab
+- alt keycode 15 = Meta_Tab
+-keycode 18 = e E euro
+-keycode 26 = apostrophe diaeresis degree
+-keycode 27 = bracketleft braceleft
+- control keycode 27 = Escape
+- alt keycode 27 = Meta_bracketleft
+-keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+-keycode 29 = Control
+-keycode 39 = +ntilde +Ntilde
+-keycode 40 = plus asterisk asciitilde
+- control keycode 40 = Control_g
+- alt keycode 40 = Meta_asciitilde
+-keycode 41 = masculine ordfeminine backslash
+- control keycode 41 = Control_backslash
+- alt keycode 41 = Meta_backslash
+-keycode 42 = Shift
+-keycode 43 = bracketright braceright
+- control keycode 43 = Control_bracketright
+- alt keycode 43 = Meta_bracketright
+-keycode 51 = comma semicolon
+- alt keycode 51 = Meta_comma
+- shift alt keycode 51 = Meta_semicolon
+-keycode 52 = period colon
+- alt keycode 52 = Meta_period
+-keycode 53 = minus underscore
+- control keycode 53 = Control_underscore
+- alt keycode 53 = Meta_minus
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+- alt keycode 57 = Meta_space
+-keycode 211 = less greater
+- alt keycode 211 = Meta_less
+- shift alt keycode 211 = Meta_greater
+-
+diff --git a/data/keymaps/i386/olpc/pt-olpc.map b/data/keymaps/i386/olpc/pt-olpc.map
+new file mode 100644
+index 0000000..173970a
+--- /dev/null
++++ b/data/keymaps/i386/olpc/pt-olpc.map
+@@ -0,0 +1,68 @@
++! Portuguese keymap for OLPC; based upon pt.map
++! Walter Bender (8 January 2008)
++!
++charset "iso-8859-15"
++keymaps 0-2,4,6,8,12
++alt_is_meta
++include "qwerty-layout"
++include "linux-with-alt-and-altgr"
++strings as usual
++
++keycode 1 = Escape
++ alt keycode 1 = Meta_Escape
++keycode 2 = one exclam onesuperior
++keycode 3 = two at twosuperior
++keycode 4 = three numbersign threesuperior
++keycode 5 = four dollar
++keycode 6 = five percent cent
++keycode 7 = six dead_diaeresis notsign
++keycode 8 = seven ampersand
++keycode 9 = eight asterisk
++keycode 10 = nine parenleft
++keycode 11 = zero parenright
++keycode 12 = minus underscore
++ control keycode 12 = Control_underscore
++ alt keycode 12 = Meta_minus
++keycode 13 = equal plus section
++ alt keycode 13 = Meta_equal
++keycode 14 = Delete
++keycode 15 = Tab
++keycode 18 = e E euro
++keycode 26 = apostrophe grave dead_acute dead_grave
++ alt keycode 26 = Meta_apostrophe
++keycode 27 = bracketleft braceleft ordfeminine
++ control keycode 27 = Escape
++ alt keycode 27 = Meta_bracketleft
++keycode 28 = Return
++ alt keycode 28 = Meta_Control_m
++keycode 29 = Control
++ shift keycode 29 = Compose
++keycode 39 = +ccedilla Ccedilla
++keycode 40 = asciitilde asciicircum dead_tilde dead_circumflex
++ control keycode 40 = Control_asciicircum
++ alt keycode 40 = Meta_asciitilde
++keycode 41 = apostrophe quotedbl
++ alt keycode 41 = Meta_grave
++keycode 42 = Shift
++keycode 43 = bracketright braceright masculine
++ control keycode 43 = Control_bracketright
++ alt keycode 43 = Meta_bracketright
++keycode 44 = z Z bar
++keycode 51 = comma less
++ alt keycode 51 = Meta_comma
++keycode 52 = period greater backslash
++ control keycode 52 = Control_backslash
++ alt keycode 52 = Meta_period
++keycode 53 = semicolon colon
++ alt keycode 53 = Meta_semicolon
++keycode 54 = Shift
++keycode 56 = Alt
++keycode 57 = space
++ control keycode 57 = nul
++keycode 211 = slash question
++ alt keycode 211 = Meta_slash
++compose 'e' '=' to '¤'
++compose '-' 'e' to '¤'
++compose '-' 'E' to '¤'
++compose '=' 'E' to '¤'
++
+diff --git a/data/keymaps/i386/olpc/pt.map b/data/keymaps/i386/olpc/pt.map
+deleted file mode 100644
+index 173970a..0000000
+--- a/data/keymaps/i386/olpc/pt.map
++++ /dev/null
+@@ -1,68 +0,0 @@
+-! Portuguese keymap for OLPC; based upon pt.map
+-! Walter Bender (8 January 2008)
+-!
+-charset "iso-8859-15"
+-keymaps 0-2,4,6,8,12
+-alt_is_meta
+-include "qwerty-layout"
+-include "linux-with-alt-and-altgr"
+-strings as usual
+-
+-keycode 1 = Escape
+- alt keycode 1 = Meta_Escape
+-keycode 2 = one exclam onesuperior
+-keycode 3 = two at twosuperior
+-keycode 4 = three numbersign threesuperior
+-keycode 5 = four dollar
+-keycode 6 = five percent cent
+-keycode 7 = six dead_diaeresis notsign
+-keycode 8 = seven ampersand
+-keycode 9 = eight asterisk
+-keycode 10 = nine parenleft
+-keycode 11 = zero parenright
+-keycode 12 = minus underscore
+- control keycode 12 = Control_underscore
+- alt keycode 12 = Meta_minus
+-keycode 13 = equal plus section
+- alt keycode 13 = Meta_equal
+-keycode 14 = Delete
+-keycode 15 = Tab
+-keycode 18 = e E euro
+-keycode 26 = apostrophe grave dead_acute dead_grave
+- alt keycode 26 = Meta_apostrophe
+-keycode 27 = bracketleft braceleft ordfeminine
+- control keycode 27 = Escape
+- alt keycode 27 = Meta_bracketleft
+-keycode 28 = Return
+- alt keycode 28 = Meta_Control_m
+-keycode 29 = Control
+- shift keycode 29 = Compose
+-keycode 39 = +ccedilla Ccedilla
+-keycode 40 = asciitilde asciicircum dead_tilde dead_circumflex
+- control keycode 40 = Control_asciicircum
+- alt keycode 40 = Meta_asciitilde
+-keycode 41 = apostrophe quotedbl
+- alt keycode 41 = Meta_grave
+-keycode 42 = Shift
+-keycode 43 = bracketright braceright masculine
+- control keycode 43 = Control_bracketright
+- alt keycode 43 = Meta_bracketright
+-keycode 44 = z Z bar
+-keycode 51 = comma less
+- alt keycode 51 = Meta_comma
+-keycode 52 = period greater backslash
+- control keycode 52 = Control_backslash
+- alt keycode 52 = Meta_period
+-keycode 53 = semicolon colon
+- alt keycode 53 = Meta_semicolon
+-keycode 54 = Shift
+-keycode 56 = Alt
+-keycode 57 = space
+- control keycode 57 = nul
+-keycode 211 = slash question
+- alt keycode 211 = Meta_slash
+-compose 'e' '=' to '¤'
+-compose '-' 'e' to '¤'
+-compose '-' 'E' to '¤'
+-compose '=' 'E' to '¤'
+-
+--
+1.5.3.7
+
diff --git a/abs/core/kbproto/PKGBUILD b/abs/core/kbproto/PKGBUILD
new file mode 100644
index 0000000..f902e44
--- /dev/null
+++ b/abs/core/kbproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=kbproto
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 XKB extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('6092cdb0a1225f95356ddbe6c2abaad5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/kdelibs3/PKGBUILD b/abs/core/kdelibs3/PKGBUILD
new file mode 100644
index 0000000..f4ed7a0
--- /dev/null
+++ b/abs/core/kdelibs3/PKGBUILD
@@ -0,0 +1,55 @@
+# $ Id: $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=kdelibs3
+pkgver=3.5.10
+pkgrel=1
+pkgdesc="KDE3 Core Libraries"
+arch=('i686' 'x86_64')
+url="http://www.kde.org"
+license=('GPL' 'LGPL')
+depends=('libxslt' 'pcre' 'libart-lgpl' 'alsa-lib' 'libcups'
+ 'jasper' 'bzip2' 'openssl' 'libidn' 'libxrender'
+ 'aspell' 'heimdal' 'acl' 'libtiff' 'qt3' 'ca-certificates')
+makedepends=('pkgconfig' 'cups')
+options=('libtool')
+install='kdelibs3.install'
+source=("ftp://carroll.aset.psu.edu/pub/kde/stable/${pkgver}/src/kdelibs-${pkgver}.tar.bz2"
+ 'kde3.profile')
+md5sums=('43cd55ed15f63b5738d620ef9f9fd568'
+ '3c49828eb8985cfb25af8e1495f7800a')
+
+build() {
+ cd $srcdir/kdelibs-$pkgver
+
+ . /etc/profile.d/qt3.sh
+ . $srcdir/kde3.profile
+
+ # install KDE3 profile
+ install -D -m755 $srcdir/kde3.profile $pkgdir/etc/profile.d/kde3.sh
+
+ ./configure --prefix=/opt/kde \
+ --with-distribution='Arch Linux' \
+ --with-alsa \
+ --disable-dependency-tracking \
+ --disable-debug \
+ --disable-dnssd \
+ --disable-dnotify \
+ --enable-inotify \
+ --enable-sendfile \
+ --without-lua \
+ --without-hspell \
+ --enable-gcc-hidden-visibility \
+ --enable-final \
+ --enable-new-ldflags LDFLAGS="${LDFLAGS} -L/opt/qt/lib" \
+ --without-arts \
+ --disable-libfam || return 1
+ make || return 1
+ make DESTDIR=$pkgdir install || return 1
+
+ # cert bundle seems to be hardcoded
+ # link it to the one from ca-certificates
+ rm -f $pkgdir/opt/kde/share/apps/kssl/ca-bundle.crt
+ ln -sf /etc/ssl/certs/ca-certificates.crt $pkgdir/opt/kde/share/apps/kssl/ca-bundle.crt
+}
diff --git a/abs/core/kdelibs3/kde3.profile b/abs/core/kdelibs3/kde3.profile
new file mode 100755
index 0000000..d7c7e9d
--- /dev/null
+++ b/abs/core/kdelibs3/kde3.profile
@@ -0,0 +1,15 @@
+export KDE3DIR=/opt/kde
+export KDEDIRS=/usr:$KDE3DIR
+export PATH=$PATH:$KDE3DIR/bin
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$KDE3DIR/lib/pkgconfig
+if [ ! -z $XDG_DATA_DIRS ]; then
+ export XDG_DATA_DIRS=$XDG_DATA_DIRS:$KDE3DIR/share
+else
+ export XDG_DATA_DIRS=$KDE3DIR/share
+fi
+if [ ! -z $XDG_CONFIG_DIRS ]; then
+ export XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS:$KDE3DIR/etc/xdg
+else
+ export XDG_CONFIG_DIRS=$KDE3DIR/etc/xdg
+fi
+unset KDE3DIR \ No newline at end of file
diff --git a/abs/core/kdelibs3/kdelibs3.install b/abs/core/kdelibs3/kdelibs3.install
new file mode 100644
index 0000000..060ba21
--- /dev/null
+++ b/abs/core/kdelibs3/kdelibs3.install
@@ -0,0 +1,11 @@
+post_install() {
+ grep -q '/opt/kde/lib' etc/ld.so.conf || echo '/opt/kde/lib' >> etc/ld.so.conf
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ sed -ie '/\/opt\/kde\/lib/d' etc/ld.so.conf
+}
diff --git a/abs/core/kernel-headers/PKGBUILD b/abs/core/kernel-headers/PKGBUILD
new file mode 100644
index 0000000..485a918
--- /dev/null
+++ b/abs/core/kernel-headers/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 3465 2008-06-22 20:06:08Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=kernel-headers
+pkgver=2.6.25.8
+_basever=2.6.25
+pkgrel=10
+pkgdesc="Kernel headers sanitized for use in userspace"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/libc"
+groups=('base')
+source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${_basever}.tar.bz2
+ http://www.kernel.org/pub/linux/kernel/v2.6/patch-${pkgver}.bz2
+ netfilter-includes.patch)
+md5sums=('db95a49a656a3247d4995a797d333153'
+ '007e6aca33604bc09687790361026d3c'
+ '671fa5d449e145199a871d1a41514122')
+
+build() {
+ cd ${startdir}/src/linux-${_basever}
+ patch -Np1 -i ${startdir}/src/patch-${pkgver} || return 1
+ patch -Np1 -i ${startdir}/src/netfilter-includes.patch || return 1
+
+ make mrproper
+ make headers_check || return 1
+ make INSTALL_HDR_PATH=${startdir}/pkg/usr headers_install
+}
diff --git a/abs/core/kernel-headers/netfilter-includes.patch b/abs/core/kernel-headers/netfilter-includes.patch
new file mode 100644
index 0000000..b39a4dd
--- /dev/null
+++ b/abs/core/kernel-headers/netfilter-includes.patch
@@ -0,0 +1,91 @@
+From: Patrick McHardy <kaber@trash.net>
+Date: Wed, 21 May 2008 21:08:38 +0000 (-0700)
+Subject: netfilter: Move linux/types.h inclusions outside of #ifdef __KERNEL__
+X-Git-Tag: v2.6.26-rc4~7^2~9
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c8942f1f0a7e2160ebf2e51ba89e50ee5895a1e7
+
+netfilter: Move linux/types.h inclusions outside of #ifdef __KERNEL__
+
+Greg Steuck <greg@nest.cx> points out that some of the netfilter
+headers can't be used in userspace without including linux/types.h
+first. The headers include their own linux/types.h include statements,
+these are stripped by make headers-install because they are inside
+#ifdef __KERNEL__ however. Move them out to fix this.
+
+Reported and Tested by Greg Steuck.
+
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+
+diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
+index e4c6659..0c5eb7e 100644
+--- a/include/linux/netfilter.h
++++ b/include/linux/netfilter.h
+@@ -3,7 +3,6 @@
+
+ #ifdef __KERNEL__
+ #include <linux/init.h>
+-#include <linux/types.h>
+ #include <linux/skbuff.h>
+ #include <linux/net.h>
+ #include <linux/netdevice.h>
+@@ -14,6 +13,7 @@
+ #include <linux/list.h>
+ #include <net/net_namespace.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+
+ /* Responses from hook functions. */
+diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h
+index dd9c97f..590ac3d 100644
+--- a/include/linux/netfilter_arp/arp_tables.h
++++ b/include/linux/netfilter_arp/arp_tables.h
+@@ -11,11 +11,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in.h>
+ #include <linux/if_arp.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_arp.h>
+
+diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
+index bfc889f..092bd50 100644
+--- a/include/linux/netfilter_ipv4/ip_tables.h
++++ b/include/linux/netfilter_ipv4/ip_tables.h
+@@ -17,11 +17,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in.h>
+ #include <linux/ip.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_ipv4.h>
+
+diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
+index f2507dc..1089e33 100644
+--- a/include/linux/netfilter_ipv6/ip6_tables.h
++++ b/include/linux/netfilter_ipv6/ip6_tables.h
+@@ -17,11 +17,11 @@
+
+ #ifdef __KERNEL__
+ #include <linux/if.h>
+-#include <linux/types.h>
+ #include <linux/in6.h>
+ #include <linux/ipv6.h>
+ #include <linux/skbuff.h>
+ #endif
++#include <linux/types.h>
+ #include <linux/compiler.h>
+ #include <linux/netfilter_ipv6.h>
+
diff --git a/abs/core/kernel26/PKGBUILD b/abs/core/kernel26/PKGBUILD
new file mode 100644
index 0000000..b96120c
--- /dev/null
+++ b/abs/core/kernel26/PKGBUILD
@@ -0,0 +1,159 @@
+# $Id: PKGBUILD 10337 2008-08-26 21:10:56Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=kernel26
+_basekernel=2.6.26
+pkgver=2.6.26.3
+pkgrel=10
+#_patchname="patch-${pkgver}-${pkgrel}-ARCH"
+_patchname="patch-${pkgver}-1-ARCH"
+pkgdesc="The Linux Kernel and modules"
+arch=(i686 x86_64)
+license=('GPL2')
+groups=('base')
+url="http://www.kernel.org"
+backup=(etc/mkinitcpio.d/${pkgname}.preset)
+depends=('coreutils' 'module-init-tools' 'mkinitcpio>=0.5.18')
+# pwc, ieee80211 and hostap-driver26 modules are included in kernel26 now
+# nforce package support was abandoned by nvidia, kernel modules should cover everything now.
+# kernel24 support is dropped since glibc24
+replaces=('kernel24' 'kernel24-scsi' 'kernel26-scsi'
+ 'alsa-driver' 'ieee80211' 'hostap-driver26'
+ 'pwc' 'nforce' 'squashfs' 'unionfs' 'ivtv'
+ 'zd1211' 'kvm-modules' 'iwlwifi' 'rt2x00-cvs')
+install=kernel26.install
+source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
+ ftp://ftp.archlinux.org/other/kernel26/${_patchname}.bz2
+ # the main kernel config files
+ config config.x86_64
+ # standard config files for mkinitcpio ramdisk
+ kernel26.preset
+ logo_linux_clut224.ppm
+ logo_linux_mono.pbm
+ logo_linux_vga16.ppm)
+md5sums=('5169d01c405bc3f866c59338e217968c'
+ '003e89dd71b32ae9b93cd1601da3b1b0'
+ '4fd1071a8dc2ea993aed81d5920de18d'
+ 'd5ad1f296356d159a2616a49d98b3434'
+ '25584700a0a679542929c4bed31433b6'
+ '7bdfe2e1daedb324fdfdfa95ba4e2430'
+ 'a88d90384e50bd061a81fcc6573fc3bb'
+ 'f536292192a69d590b2ffd4700c14185')
+
+build() {
+ KARCH=x86
+
+ cd $startdir/src/linux-$_basekernel
+ # Add -ARCH patches
+ # See http://projects.archlinux.org/git/?p=linux-2.6-ARCH.git;a=summary
+ patch -Np1 -i $startdir/src/${_patchname} || return 1
+
+ if [ "$CARCH" = "x86_64" ]; then
+ cat ../config.x86_64 >./.config
+ else
+ cat ../config >./.config
+ fi
+ cp ../logo_linux_clut224.ppm drivers/video/logo/
+ cp ../logo_linux_mono.ppm drivers/video/logo/
+ cp ../logo_linux_vga16.ppm drivers/video/logo/
+ # build the full kernel version to use in pathnames
+ . ./.config
+ ### next line is only needed for rc kernels
+ #_kernver="2.6.25${CONFIG_LOCALVERSION}"
+ _kernver="${_basekernel}${CONFIG_LOCALVERSION}"
+ # load configuration
+ yes "" | make config
+ # build!
+ ####################
+ # stop here
+ # this is useful to configure the kernel
+ #msg "Stopping build"
+ #return 1
+ ####################
+ make bzImage modules || return 1
+ mkdir -p $startdir/pkg/{lib/modules,boot}
+ make INSTALL_MOD_PATH=$startdir/pkg modules_install || return 1
+ cp System.map $startdir/pkg/boot/System.map26
+ cp arch/$KARCH/boot/bzImage $startdir/pkg/boot/vmlinuz26
+ install -D -m644 Makefile \
+ $startdir/pkg/usr/src/linux-${_kernver}/Makefile
+ install -D -m644 kernel/Makefile \
+ $startdir/pkg/usr/src/linux-${_kernver}/kernel/Makefile
+ install -D -m644 .config \
+ $startdir/pkg/usr/src/linux-${_kernver}/.config
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include
+
+ for i in acpi asm-{generic,x86} config linux math-emu media net pcmcia scsi sound video; do
+ cp -a include/$i $startdir/pkg/usr/src/linux-${_kernver}/include/
+ done
+
+ # copy files necessary for later builds, like nvidia and vmware
+ cp Module.symvers $startdir/pkg/usr/src/linux-${_kernver}
+ cp -a scripts $startdir/pkg/usr/src/linux-${_kernver}
+ # fix permissions on scripts dir
+ chmod og-w -R $startdir/pkg/usr/src/linux-${_kernver}/scripts
+ #mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/.tmp_versions
+
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/kernel
+
+ cp arch/$KARCH/Makefile $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/
+ if [ "$CARCH" = "i686" ]; then
+ cp arch/$KARCH/Makefile_32.cpu $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/
+ fi
+ cp arch/$KARCH/kernel/asm-offsets.s $startdir/pkg/usr/src/linux-${_kernver}/arch/$KARCH/kernel/
+
+ # add headers for lirc package
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video
+ cp drivers/media/video/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/
+ for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102 usbvideo zc0301; do
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/$i
+ cp -a drivers/media/video/$i/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/video/$i
+ done
+ # add dm headers
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/md
+ cp drivers/md/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/md
+ # add inotify.h
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include/linux
+ cp include/linux/inotify.h $startdir/pkg/usr/src/linux-${_kernver}/include/linux/
+ # add CLUSTERIP file for iptables
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/net/ipv4/netfilter/
+ # add wireless headers
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/net/mac80211/
+ cp net/mac80211/*.h $startdir/pkg/usr/src/linux-${_kernver}/net/mac80211/
+ # add dvb headers for external modules
+ # in reference to:
+ # http://bugs.archlinux.org/task/9912
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core
+ cp drivers/media/dvb/dvb-core/*.h $startdir/pkg/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/
+ # add dvb headers for external modules
+ # in reference to:
+ # http://bugs.archlinux.org/task/11194
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/include/config/dvb/
+ cp include/config/dvb/*.h $startdir/pkg/usr/src/linux-${_kernver}/include/config/dvb/
+ # add xfs and shmem for aufs building
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/fs/xfs
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/mm
+ cp fs/xfs/xfs_sb.h $startdir/pkg/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h
+ # add vmlinux
+ cp vmlinux $startdir/pkg/usr/src/linux-${_kernver}
+ # copy in Kconfig files
+ for i in `find . -name "Kconfig*"`; do
+ mkdir -p $startdir/pkg/usr/src/linux-${_kernver}/`echo $i | sed 's|/Kconfig.*||'`
+ cp $i $startdir/pkg/usr/src/linux-${_kernver}/$i
+ done
+
+ cd $startdir/pkg/usr/src/linux-${_kernver}/include && ln -s asm-$KARCH asm
+
+ chown -R root.root $startdir/pkg/usr/src/linux-${_kernver}
+ find $startdir/pkg/usr/src/linux-${_kernver} -type d -exec chmod 755 {} \;
+ cd $startdir/pkg/lib/modules/${_kernver} && \
+ (rm -f source build; ln -sf ../../../usr/src/linux-${_kernver} build)
+ # install fallback mkinitcpio.conf file and preset file for kernel
+ install -m644 -D $startdir/src/${pkgname}.preset $startdir/pkg/etc/mkinitcpio.d/${pkgname}.preset || return 1
+ # set correct depmod command for install
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" $startdir/kernel26.install
+ echo -e "# DO NOT EDIT THIS FILE\nALL_kver='${_kernver}'" > ${startdir}/pkg/etc/mkinitcpio.d/${pkgname}.kver
+ # remove unneeded architectures
+ rm -rf $startdir/pkg/usr/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,xtensa}
+}
+
diff --git a/abs/core/kernel26/config b/abs/core/kernel26/config
new file mode 100644
index 0000000..e885de7
--- /dev/null
+++ b/abs/core/kernel26/config
@@ -0,0 +1,3897 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.26
+# Mon Jul 21 19:06:23 2008
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+# CONFIG_GENERIC_LOCKBREAK is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_FAST_CMPXCHG_LOCAL=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_32_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ARCH"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=19
+# CONFIG_CGROUPS is not set
+# CONFIG_CGROUP_DEBUG is not set
+# CONFIG_CGROUP_NS is not set
+# CONFIG_CGROUP_DEVICE is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_HAVE_UNSTABLE_SCHED_CLOCK is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+# CONFIG_USER_SCHED is not set
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUP_CPUACCT is not set
+# CONFIG_RESOURCE_COUNTERS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+CONFIG_BLK_DEV_BSG=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_PREEMPT_NOTIFIERS=y
+CONFIG_CLASSIC_RCU=y
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_RDC321X is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_PARAVIRT_GUEST=y
+CONFIG_VMI=y
+# CONFIG_KVM_CLOCK is not set
+# CONFIG_KVM_GUEST is not set
+CONFIG_LGUEST_GUEST=y
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_CLOCK is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+CONFIG_M686=y
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CPU=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_XADD=y
+# CONFIG_X86_PPRO_FENCE is not set
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+# CONFIG_IOMMU_HELPER is not set
+CONFIG_NR_CPUS=16
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=m
+CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
+CONFIG_TOSHIBA=m
+CONFIG_I8K=m
+CONFIG_X86_REBOOTFIXUPS=y
+CONFIG_MICROCODE=m
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_HIGHPTE is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+CONFIG_X86_PAT=y
+CONFIG_EFI=y
+# CONFIG_IRQBALANCE is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+CONFIG_SCHED_HRTICK=y
+CONFIG_KEXEC=y
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=m
+CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=m
+CONFIG_ACPI_BAY=m
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=m
+CONFIG_ACPI_WMI=m
+CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_TOSHIBA=m
+# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+CONFIG_X86_APM_BOOT=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_DO_ENABLE=y
+# CONFIG_APM_CPU_IDLE is not set
+# CONFIG_APM_DISPLAY_BLANK is not set
+# CONFIG_APM_ALLOW_INTS is not set
+CONFIG_APM_REAL_MODE_POWER_OFF=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_POWERNOW_K6=m
+CONFIG_X86_POWERNOW_K7=m
+CONFIG_X86_POWERNOW_K7_ACPI=y
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_POWERNOW_K8_ACPI=y
+CONFIG_X86_GX_SUSPMOD=m
+# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+CONFIG_X86_SPEEDSTEP_ICH=m
+CONFIG_X86_SPEEDSTEP_SMI=m
+CONFIG_X86_P4_CLOCKMOD=m
+CONFIG_X86_CPUFREQ_NFORCE2=m
+CONFIG_X86_LONGRUN=m
+CONFIG_X86_LONGHAUL=m
+CONFIG_X86_E_POWERSAVER=m
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+CONFIG_X86_SPEEDSTEP_LIB=m
+CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+# CONFIG_PCI_GOOLPC is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_OLPC=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=m
+CONFIG_PCIEAER=y
+# CONFIG_PCIEASPM is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_OLPC=y
+CONFIG_K8_NB=y
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+CONFIG_TCIC=m
+CONFIG_PCMCIA_PROBE=y
+CONFIG_PCCARD_NONSTATIC=m
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_COMPAQ=m
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+CONFIG_HOTPLUG_PCI_IBM=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+CONFIG_HOTPLUG_PCI_SHPC=m
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_IPV6_MROUTE is not set
+CONFIG_NETLABEL=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+CONFIG_SCTP_HMAC_SHA1=y
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+# CONFIG_NET_EMATCH is not set
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_TOSHIBA_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=m
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
+
+#
+# Selecting 'y' for an algorithm will
+#
+
+#
+# build the algorithm into mac80211.
+#
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_NET_9P=m
+CONFIG_NET_9P_VIRTIO=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+CONFIG_PARPORT_PC_FIFO=y
+CONFIG_PARPORT_PC_SUPERIO=y
+CONFIG_PARPORT_PC_PCMCIA=m
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_ISAPNP=y
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_VIRTIO_BLK=m
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+CONFIG_PHANTOM=m
+CONFIG_EEPROM_93CX6=m
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ACER_WMI=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_TC1100_WMI=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+# CONFIG_SONYPI_COMPAT is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_INTEL_MENLOW=m
+CONFIG_EEEPC_LAPTOP=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_DELKIN=m
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+CONFIG_BLK_DEV_IDEACPI=y
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_PLATFORM=m
+CONFIG_BLK_DEV_CMD640=m
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+CONFIG_BLK_DEV_IDEPNP=m
+CONFIG_BLK_DEV_IDEDMA_SFF=y
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=m
+CONFIG_BLK_DEV_OPTI621=m
+CONFIG_BLK_DEV_RZ1000=m
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_ATIIXP=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_CS5535=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_JMICRON=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_IT8213=m
+CONFIG_BLK_DEV_IT821X=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SIS5513=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+CONFIG_BLK_DEV_TC86C001=m
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+CONFIG_BLK_DEV_4DRIVES=m
+CONFIG_BLK_DEV_ALI14XX=m
+CONFIG_BLK_DEV_DTC2278=m
+CONFIG_BLK_DEV_HT6560B=m
+CONFIG_BLK_DEV_QD65XX=m
+CONFIG_BLK_DEV_UMC8672=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_ENCLOSURE=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_FC_TGT_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_7000FASST=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AHA152X=m
+CONFIG_SCSI_AHA1542=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_IN2000=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+# CONFIG_SCSI_FLASHPOINT is not set
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_DTC3280=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_GENERIC_NCR5380=m
+CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
+CONFIG_SCSI_GENERIC_NCR53C400=y
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_MVSAS=m
+CONFIG_SCSI_NCR53C406A=m
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_PAS16=m
+CONFIG_SCSI_QLOGIC_FAS=m
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_SYM53C416=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_T128=m
+CONFIG_SCSI_U14_34F=m
+# CONFIG_SCSI_U14_34F_TAGGED_QUEUE is not set
+# CONFIG_SCSI_U14_34F_LINKED_COMMANDS is not set
+CONFIG_SCSI_U14_34F_MAX_TAGS=8
+CONFIG_SCSI_ULTRASTOR=m
+CONFIG_SCSI_NSP32=m
+# CONFIG_SCSI_DEBUG is not set
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=m
+CONFIG_SATA_SIL24=m
+CONFIG_ATA_SFF=y
+CONFIG_SATA_SVW=m
+CONFIG_ATA_PIIX=m
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_PDC_ADMA=m
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_SX4=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+CONFIG_SATA_INIC162X=m
+CONFIG_PATA_ACPI=m
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CS5535=m
+CONFIG_PATA_CS5536=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_ATA_GENERIC=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+CONFIG_PATA_ISAPNP=m
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_LEGACY=m
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_MARVELL=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PCMCIA=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_QDI=m
+CONFIG_PATA_RADISYS=m
+CONFIG_PATA_RZ1000=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_WINBOND_VLB=m
+CONFIG_PATA_SCH=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_MULTIPATH_HP=m
+CONFIG_DM_DELAY=m
+CONFIG_DM_UEVENT=y
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=m
+CONFIG_FUSION_FC=m
+CONFIG_FUSION_SAS=m
+CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_CTL=m
+# CONFIG_FUSION_LOGGING is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+CONFIG_IEEE1394=m
+CONFIG_IEEE1394_OHCI1394=m
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_RAWIO=m
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_DV1394=m
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+CONFIG_I2O=m
+CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+CONFIG_I2O_EXT_ADAPTEC=y
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_CONFIG_OLD_IOCTL=y
+CONFIG_I2O_BUS=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEVICES_MULTIQUEUE=y
+CONFIG_IFB=m
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_NET_SB1000=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+CONFIG_3C515=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_LANCE=m
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_SMC9194=m
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+CONFIG_NET_VENDOR_RACAL=y
+CONFIG_NI52=m
+CONFIG_NI65=m
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R6040=m
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_SC92031=m
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_E1000E=m
+CONFIG_E1000E_ENABLED=y
+CONFIG_IP1000=m
+CONFIG_IGB=m
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T1_NAPI=y
+CONFIG_CHELSIO_T3=m
+CONFIG_IXGBE=m
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+CONFIG_MYRI10GE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+# CONFIG_MLX4_CORE is not set
+CONFIG_TEHUTI=m
+CONFIG_BNX2X=m
+CONFIG_SFC=m
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_ADM8211=m
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_ATH5K=m
+# CONFIG_ATH5K_DEBUG is not set
+CONFIG_IWLWIFI=m
+CONFIG_IWLCORE=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWL4965=m
+CONFIG_IWL4965_HT=y
+CONFIG_IWL4965_LEDS=y
+CONFIG_IWL4965_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL4965_SENSITIVITY=y
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWL3945=m
+CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL3945_LEDS=y
+# CONFIG_IWL3945_DEBUG is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_HOSTAP_CS=m
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_B43_PCMCIA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_RFKILL=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_LEDS=y
+CONFIG_B43LEGACY_RFKILL=y
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_RFKILL=y
+CONFIG_RT2X00_LIB_LEDS=y
+CONFIG_RT2400PCI=m
+CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
+CONFIG_RT2500PCI=m
+CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
+CONFIG_RT61PCI=m
+CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
+CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
+CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_TCP=m
+CONFIG_ATM_LANAI=m
+CONFIG_ATM_ENI=m
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+CONFIG_ATM_FIRESTREAM=m
+CONFIG_ATM_ZATM=m
+# CONFIG_ATM_ZATM_DEBUG is not set
+CONFIG_ATM_NICSTAR=m
+# CONFIG_ATM_NICSTAR_USE_SUNI is not set
+# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
+CONFIG_ATM_IDT77252=m
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+CONFIG_ATM_IDT77252_USE_SUNI=y
+CONFIG_ATM_AMBASSADOR=m
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+CONFIG_ATM_HORIZON=m
+# CONFIG_ATM_HORIZON_DEBUG is not set
+CONFIG_ATM_IA=m
+# CONFIG_ATM_IA_DEBUG is not set
+CONFIG_ATM_FORE200E_MAYBE=m
+# CONFIG_ATM_FORE200E_PCA is not set
+CONFIG_ATM_HE=m
+# CONFIG_ATM_HE_USE_SUNI is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+CONFIG_PPPOL2TP=m
+CONFIG_SLIP=m
+# CONFIG_SLIP_COMPRESSED is not set
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_VIRTIO_NET=m
+CONFIG_ISDN=m
+CONFIG_ISDN_I4L=m
+CONFIG_ISDN_PPP=y
+CONFIG_ISDN_PPP_VJ=y
+CONFIG_ISDN_MPP=y
+CONFIG_IPPP_FILTER=y
+CONFIG_ISDN_PPP_BSDCOMP=m
+CONFIG_ISDN_AUDIO=y
+CONFIG_ISDN_TTY_FAX=y
+
+#
+# ISDN feature submodules
+#
+CONFIG_ISDN_DIVERSION=m
+
+#
+# ISDN4Linux hardware drivers
+#
+
+#
+# Passive cards
+#
+CONFIG_ISDN_DRV_HISAX=m
+
+#
+# D-channel protocol features
+#
+CONFIG_HISAX_EURO=y
+CONFIG_DE_AOC=y
+# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+# CONFIG_HISAX_NO_LLC is not set
+# CONFIG_HISAX_NO_KEYPAD is not set
+CONFIG_HISAX_1TR6=y
+CONFIG_HISAX_NI1=y
+CONFIG_HISAX_MAX_CARDS=8
+
+#
+# HiSax supported cards
+#
+CONFIG_HISAX_16_0=y
+CONFIG_HISAX_16_3=y
+CONFIG_HISAX_TELESPCI=y
+CONFIG_HISAX_S0BOX=y
+CONFIG_HISAX_AVM_A1=y
+CONFIG_HISAX_FRITZPCI=y
+CONFIG_HISAX_AVM_A1_PCMCIA=y
+CONFIG_HISAX_ELSA=y
+CONFIG_HISAX_IX1MICROR2=y
+CONFIG_HISAX_DIEHLDIVA=y
+CONFIG_HISAX_ASUSCOM=y
+CONFIG_HISAX_TELEINT=y
+CONFIG_HISAX_HFCS=y
+CONFIG_HISAX_SEDLBAUER=y
+CONFIG_HISAX_SPORTSTER=y
+CONFIG_HISAX_MIC=y
+CONFIG_HISAX_NETJET=y
+CONFIG_HISAX_NETJET_U=y
+CONFIG_HISAX_NICCY=y
+CONFIG_HISAX_ISURF=y
+CONFIG_HISAX_HSTSAPHIR=y
+CONFIG_HISAX_BKM_A4T=y
+CONFIG_HISAX_SCT_QUADRO=y
+CONFIG_HISAX_GAZEL=y
+CONFIG_HISAX_HFC_PCI=y
+CONFIG_HISAX_W6692=y
+CONFIG_HISAX_HFC_SX=y
+CONFIG_HISAX_ENTERNOW_PCI=y
+# CONFIG_HISAX_DEBUG is not set
+
+#
+# HiSax PCMCIA card service modules
+#
+CONFIG_HISAX_SEDLBAUER_CS=m
+CONFIG_HISAX_ELSA_CS=m
+CONFIG_HISAX_AVM_A1_CS=m
+CONFIG_HISAX_TELES_CS=m
+
+#
+# HiSax sub driver modules
+#
+CONFIG_HISAX_ST5481=m
+CONFIG_HISAX_HFCUSB=m
+CONFIG_HISAX_HFC4S8S=m
+CONFIG_HISAX_FRITZ_PCIPNP=m
+CONFIG_HISAX_HDLC=y
+
+#
+# Active cards
+#
+CONFIG_ISDN_DRV_ICN=m
+CONFIG_ISDN_DRV_PCBIT=m
+CONFIG_ISDN_DRV_SC=m
+CONFIG_ISDN_DRV_ACT2000=m
+CONFIG_HYSDN=m
+CONFIG_HYSDN_CAPI=y
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+CONFIG_GIGASET_M101=m
+# CONFIG_GIGASET_DEBUG is not set
+CONFIG_GIGASET_UNDOCREQ=y
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+# CONFIG_CAPI_TRACE is not set
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+CONFIG_ISDN_CAPI_CAPIDRV=m
+
+#
+# CAPI hardware drivers
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1ISA=m
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_T1ISA=m
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+CONFIG_ISDN_DIVAS_BRIPCI=y
+CONFIG_ISDN_DIVAS_PRIPCI=y
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=y
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_INPORT=m
+# CONFIG_MOUSE_ATIXL is not set
+CONFIG_MOUSE_LOGIBM=m
+CONFIG_MOUSE_PC110PAD=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_WISTRON_BTNS=m
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PARKBD=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+CONFIG_ROCKETPORT=m
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_ESPSERIAL is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+CONFIG_NOZOMI=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+CONFIG_HVC_DRIVER=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_HW_RANDOM_GEODE=m
+CONFIG_HW_RANDOM_VIA=m
+# CONFIG_HW_RANDOM_VIRTIO is not set
+CONFIG_NVRAM=m
+CONFIG_DTLK=m
+CONFIG_R3964=m
+CONFIG_APPLICOM=m
+CONFIG_SONYPI=m
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+CONFIG_IPWIRELESS=m
+CONFIG_MWAVE=m
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TELCLOCK=m
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIMTEC=m
+CONFIG_SCx200_ACB=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_TAOS_EVM=m
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
+CONFIG_I2C_PCA_PLATFORM=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_PCF8575=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_TSL2550=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+CONFIG_SPI_LM70_LLP=m
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_TLE62X0=m
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+CONFIG_W1_SLAVE_DS2760=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+CONFIG_BATTERY_DS2760=m
+CONFIG_BATTERY_OLPC=m
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+CONFIG_SENSORS_APPLESMC=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_SM501=m
+# CONFIG_HTC_PASIC3 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS5345=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_TLV320AIC23B=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_BT866=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_TCM825X=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_SAA7191=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+
+#
+# Video improvement chips
+#
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+CONFIG_VIDEO_BT848_DVB=y
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_PMS=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_W9966=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_PP=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_MEYE=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CAFE_CCIC=m
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_CADET=m
+CONFIG_RADIO_RTRACK=m
+CONFIG_RADIO_RTRACK2=m
+CONFIG_RADIO_AZTECH=m
+CONFIG_RADIO_GEMTEK=m
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_RADIO_SF16FMI=m
+CONFIG_RADIO_SF16FMR2=m
+CONFIG_RADIO_TERRATEC=m
+CONFIG_RADIO_TRUST=m
+CONFIG_RADIO_TYPHOON=m
+# CONFIG_RADIO_TYPHOON_PROC_FS is not set
+CONFIG_RADIO_ZOLTRIX=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_SI470X=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_TTPCI_EEPROM=m
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_CORE=m
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+CONFIG_DVB_CINERGYT2_TUNING=y
+CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
+CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
+CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
+CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
+CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=20
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_S5H1411=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_AGP=m
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+CONFIG_VGASTATE=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_SVGALIB=m
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+CONFIG_FB_VESA=y
+CONFIG_FB_EFI=y
+# CONFIG_FB_IMAC is not set
+# CONFIG_FB_N411 is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_I810=m
+# CONFIG_FB_I810_GTF is not set
+CONFIG_FB_LE80578=m
+CONFIG_FB_CARILLO_RANCH=m
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_CYBLA=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_SM501 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=m
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_BACKLIGHT_CARILLO_RANCH=m
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+
+#
+# Generic devices
+#
+# CONFIG_SND_PCSP is not set
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_OPL4_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_AD1848_LIB=m
+CONFIG_SND_CS4231_LIB=m
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_SB8_DSP=m
+CONFIG_SND_SB16_DSP=m
+
+#
+# ISA devices
+#
+CONFIG_SND_ADLIB=m
+CONFIG_SND_AD1816A=m
+CONFIG_SND_AD1848=m
+CONFIG_SND_ALS100=m
+CONFIG_SND_AZT2320=m
+CONFIG_SND_CMI8330=m
+CONFIG_SND_CS4231=m
+CONFIG_SND_CS4232=m
+CONFIG_SND_CS4236=m
+CONFIG_SND_DT019X=m
+CONFIG_SND_ES968=m
+CONFIG_SND_ES1688=m
+CONFIG_SND_ES18XX=m
+CONFIG_SND_SC6000=m
+CONFIG_SND_GUS_SYNTH=m
+CONFIG_SND_GUSCLASSIC=m
+CONFIG_SND_GUSEXTREME=m
+CONFIG_SND_GUSMAX=m
+CONFIG_SND_INTERWAVE=m
+CONFIG_SND_INTERWAVE_STB=m
+CONFIG_SND_OPL3SA2=m
+CONFIG_SND_OPTI92X_AD1848=m
+CONFIG_SND_OPTI92X_CS4231=m
+CONFIG_SND_OPTI93X=m
+CONFIG_SND_MIRO=m
+CONFIG_SND_SB8=m
+CONFIG_SND_SB16=m
+CONFIG_SND_SBAWE=m
+CONFIG_SND_SB16_CSP=y
+CONFIG_SND_SB16_CSP_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_SGALAXY=m
+CONFIG_SND_SSCAPE=m
+CONFIG_SND_WAVEFRONT=m
+CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL=y
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_OXYGEN_LIB=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5530=m
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_FM801_TEA575X=m
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_ANALOG=y
+CONFIG_SND_HDA_CODEC_SIGMATEL=y
+CONFIG_SND_HDA_CODEC_VIA=y
+CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CONEXANT=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_POWER_SAVE=y
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SIS7019=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_ISP1760_HCD=m
+# CONFIG_USB_ISP1760_PCI is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_HCD_SSB is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+CONFIG_USB_R8A66597_HCD=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MEMSTICK=m
+# CONFIG_MEMSTICK_DEBUG is not set
+
+#
+# MemoryStick drivers
+#
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+
+#
+# MemoryStick Host Controller Drivers
+#
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CLEVO_MAIL=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_AMD76X=m
+CONFIG_EDAC_E7XXX=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82875P=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I82860=m
+CONFIG_EDAC_R82600=m
+CONFIG_EDAC_I5000=m
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_TEST=m
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+
+#
+# SPI RTC drivers
+#
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RS5C348=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+CONFIG_DCA=m
+CONFIG_AUXDISPLAY=y
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+CONFIG_CFAG12864B=m
+CONFIG_CFAG12864B_RATE=20
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
+
+#
+# Firmware Drivers
+#
+CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
+CONFIG_EFI_VARS=m
+CONFIG_DELL_RBU=m
+CONFIG_DCDBAS=m
+CONFIG_DMIID=y
+# CONFIG_ISCSI_IBFT_FIND is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4DEV_FS=m
+CONFIG_EXT4DEV_FS_XATTR=y
+CONFIG_EXT4DEV_FS_POSIX_ACL=y
+CONFIG_EXT4DEV_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_NOLOCK=m
+CONFIG_GFS2_FS_LOCKING_DLM=m
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+# CONFIG_OCFS2_DEBUG_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Layered filesystems
+#
+CONFIG_ECRYPT_FS=m
+CONFIG_UNION_FS=m
+CONFIG_UNION_FS_XATTR=y
+# CONFIG_UNION_FS_DEBUG is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+CONFIG_NCPFS_SMALLDOS=y
+CONFIG_NCPFS_NLS=y
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_NONPROMISC_DEVMEM is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_DEBUG_NX_TEST is not set
+# CONFIG_4KSTACKS is not set
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+# CONFIG_CPA_DEBUG is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+# CONFIG_SECURITY_SMACK is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_586=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_HAVE_KVM=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+CONFIG_LGUEST=m
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_RING=y
+# CONFIG_VIRTIO_PCI is not set
+# CONFIG_VIRTIO_BALLOON is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CHECK_SIGNATURE=y
diff --git a/abs/core/kernel26/config.x86_64 b/abs/core/kernel26/config.x86_64
new file mode 100644
index 0000000..9c7a16a
--- /dev/null
+++ b/abs/core/kernel26/config.x86_64
@@ -0,0 +1,3649 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.26
+# Sun Aug 10 13:51:28 2008
+#
+CONFIG_64BIT=y
+# CONFIG_X86_32 is not set
+CONFIG_X86_64=y
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+# CONFIG_GENERIC_LOCKBREAK is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_FAST_CMPXCHG_LOCAL=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ZONE_DMA32=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_64_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+# CONFIG_KTIME_SCALAR is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ARCH"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=19
+# CONFIG_CGROUPS is not set
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_PREEMPT_NOTIFIERS=y
+CONFIG_CLASSIC_RCU=y
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_RDC321X is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_PARAVIRT_GUEST=y
+# CONFIG_KVM_CLOCK is not set
+# CONFIG_KVM_GUEST is not set
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_CLOCK is not set
+CONFIG_MEMTEST_BOOTPARAM=y
+CONFIG_MEMTEST_BOOTPARAM_VALUE=0
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+CONFIG_GENERIC_CPU=y
+CONFIG_X86_CPU=y
+CONFIG_X86_L1_CACHE_BYTES=128
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=64
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+CONFIG_GART_IOMMU=y
+CONFIG_CALGARY_IOMMU=y
+CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_NR_CPUS=16
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_AMD=y
+CONFIG_I8K=m
+CONFIG_MICROCODE=m
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+# CONFIG_NUMA is not set
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+
+#
+# Memory hotplug is currently incompatible with Software Suspend
+#
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_MTRR=y
+CONFIG_X86_PAT=y
+CONFIG_EFI=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+CONFIG_SCHED_HRTICK=y
+CONFIG_KEXEC=y
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x200000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x200000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options
+#
+CONFIG_ARCH_HIBERNATION_HEADER=y
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=m
+CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=m
+CONFIG_ACPI_BAY=m
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=m
+CONFIG_ACPI_WMI=m
+CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_TOSHIBA=m
+# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_POWERNOW_K8_ACPI=y
+# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+CONFIG_X86_P4_CLOCKMOD=m
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+CONFIG_X86_SPEEDSTEP_LIB=m
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=m
+CONFIG_PCIEAER=y
+# CONFIG_PCIEASPM is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_K8_NB=y
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=m
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+CONFIG_HOTPLUG_PCI_SHPC=m
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+CONFIG_IA32_EMULATION=y
+CONFIG_IA32_AOUT=m
+CONFIG_COMPAT=y
+CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+CONFIG_SYSVIPC_COMPAT=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_IPV6_MROUTE is not set
+CONFIG_NETLABEL=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+CONFIG_SCTP_HMAC_SHA1=y
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+# CONFIG_NET_EMATCH is not set
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=m
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
+
+#
+# Selecting 'y' for an algorithm will
+#
+
+#
+# build the algorithm into mac80211.
+#
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_NET_9P=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+CONFIG_PARPORT_PC_FIFO=y
+CONFIG_PARPORT_PC_SUPERIO=y
+CONFIG_PARPORT_PC_PCMCIA=m
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_PARIDE is not set
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+CONFIG_PHANTOM=m
+CONFIG_EEPROM_93CX6=m
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ACER_WMI=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+# CONFIG_SONYPI_COMPAT is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_INTEL_MENLOW=m
+CONFIG_EEEPC_LAPTOP=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_DELKIN=m
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+CONFIG_BLK_DEV_IDEACPI=y
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_PLATFORM=m
+CONFIG_BLK_DEV_CMD640=m
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+CONFIG_BLK_DEV_IDEPNP=m
+CONFIG_BLK_DEV_IDEDMA_SFF=y
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=m
+CONFIG_BLK_DEV_OPTI621=m
+CONFIG_BLK_DEV_RZ1000=m
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_ATIIXP=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_JMICRON=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_IT8213=m
+CONFIG_BLK_DEV_IT821X=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SIS5513=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+CONFIG_BLK_DEV_TC86C001=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_ENCLOSURE=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_FC_TGT_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_MVSAS=m
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+# CONFIG_SCSI_DEBUG is not set
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=m
+CONFIG_SATA_SIL24=m
+CONFIG_ATA_SFF=y
+CONFIG_SATA_SVW=m
+CONFIG_ATA_PIIX=m
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_PDC_ADMA=m
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_SX4=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+CONFIG_SATA_INIC162X=m
+CONFIG_PATA_ACPI=m
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_ATA_GENERIC=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_MARVELL=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PCMCIA=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_RADISYS=m
+CONFIG_PATA_RZ1000=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_SCH=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_MULTIPATH_HP=m
+CONFIG_DM_DELAY=m
+CONFIG_DM_UEVENT=y
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=m
+CONFIG_FUSION_FC=m
+CONFIG_FUSION_SAS=m
+CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_CTL=m
+# CONFIG_FUSION_LOGGING is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+CONFIG_IEEE1394=m
+CONFIG_IEEE1394_OHCI1394=m
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_RAWIO=m
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_DV1394=m
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+CONFIG_I2O=m
+CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+CONFIG_I2O_EXT_ADAPTEC=y
+CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_CONFIG_OLD_IOCTL=y
+CONFIG_I2O_BUS=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEVICES_MULTIQUEUE=y
+CONFIG_IFB=m
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_NET_SB1000=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_HP100=m
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R6040=m
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_SC92031=m
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_E1000E=m
+CONFIG_E1000E_ENABLED=y
+CONFIG_IP1000=m
+CONFIG_IGB=m
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T1_NAPI=y
+CONFIG_CHELSIO_T3=m
+CONFIG_IXGBE=m
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+CONFIG_MYRI10GE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+# CONFIG_MLX4_CORE is not set
+CONFIG_TEHUTI=m
+CONFIG_BNX2X=m
+CONFIG_SFC=m
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_ADM8211=m
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_ATH5K=m
+# CONFIG_ATH5K_DEBUG is not set
+CONFIG_IWLWIFI=m
+CONFIG_IWLCORE=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWL4965=m
+CONFIG_IWL4965_HT=y
+CONFIG_IWL4965_LEDS=y
+CONFIG_IWL4965_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL4965_SENSITIVITY=y
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWL3945=m
+CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL3945_LEDS=y
+# CONFIG_IWL3945_DEBUG is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_HOSTAP_CS=m
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_B43_PCMCIA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_RFKILL=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_LEDS=y
+CONFIG_B43LEGACY_RFKILL=y
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_RFKILL=y
+CONFIG_RT2X00_LIB_LEDS=y
+CONFIG_RT2400PCI=m
+CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
+CONFIG_RT2500PCI=m
+CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
+CONFIG_RT61PCI=m
+CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
+CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
+CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_TCP=m
+CONFIG_ATM_LANAI=m
+CONFIG_ATM_ENI=m
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+CONFIG_ATM_FIRESTREAM=m
+CONFIG_ATM_ZATM=m
+# CONFIG_ATM_ZATM_DEBUG is not set
+CONFIG_ATM_IDT77252=m
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+CONFIG_ATM_IDT77252_USE_SUNI=y
+CONFIG_ATM_AMBASSADOR=m
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+CONFIG_ATM_HORIZON=m
+# CONFIG_ATM_HORIZON_DEBUG is not set
+CONFIG_ATM_FORE200E_MAYBE=m
+# CONFIG_ATM_FORE200E_PCA is not set
+CONFIG_ATM_HE=m
+# CONFIG_ATM_HE_USE_SUNI is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+CONFIG_PPPOL2TP=m
+CONFIG_SLIP=m
+# CONFIG_SLIP_COMPRESSED is not set
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_ISDN=m
+CONFIG_ISDN_I4L=m
+CONFIG_ISDN_PPP=y
+CONFIG_ISDN_PPP_VJ=y
+CONFIG_ISDN_MPP=y
+CONFIG_IPPP_FILTER=y
+CONFIG_ISDN_PPP_BSDCOMP=m
+CONFIG_ISDN_AUDIO=y
+CONFIG_ISDN_TTY_FAX=y
+
+#
+# ISDN feature submodules
+#
+CONFIG_ISDN_DIVERSION=m
+
+#
+# ISDN4Linux hardware drivers
+#
+
+#
+# Passive cards
+#
+CONFIG_ISDN_DRV_HISAX=m
+
+#
+# D-channel protocol features
+#
+CONFIG_HISAX_EURO=y
+CONFIG_DE_AOC=y
+# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+# CONFIG_HISAX_NO_LLC is not set
+# CONFIG_HISAX_NO_KEYPAD is not set
+CONFIG_HISAX_1TR6=y
+CONFIG_HISAX_NI1=y
+CONFIG_HISAX_MAX_CARDS=8
+
+#
+# HiSax supported cards
+#
+CONFIG_HISAX_16_3=y
+CONFIG_HISAX_TELESPCI=y
+CONFIG_HISAX_S0BOX=y
+CONFIG_HISAX_FRITZPCI=y
+CONFIG_HISAX_AVM_A1_PCMCIA=y
+CONFIG_HISAX_ELSA=y
+CONFIG_HISAX_DIEHLDIVA=y
+CONFIG_HISAX_SEDLBAUER=y
+CONFIG_HISAX_NETJET=y
+CONFIG_HISAX_NETJET_U=y
+CONFIG_HISAX_NICCY=y
+CONFIG_HISAX_BKM_A4T=y
+CONFIG_HISAX_SCT_QUADRO=y
+CONFIG_HISAX_GAZEL=y
+CONFIG_HISAX_HFC_PCI=y
+CONFIG_HISAX_W6692=y
+CONFIG_HISAX_HFC_SX=y
+CONFIG_HISAX_ENTERNOW_PCI=y
+# CONFIG_HISAX_DEBUG is not set
+
+#
+# HiSax PCMCIA card service modules
+#
+CONFIG_HISAX_SEDLBAUER_CS=m
+CONFIG_HISAX_ELSA_CS=m
+CONFIG_HISAX_AVM_A1_CS=m
+CONFIG_HISAX_TELES_CS=m
+
+#
+# HiSax sub driver modules
+#
+CONFIG_HISAX_ST5481=m
+CONFIG_HISAX_HFCUSB=m
+CONFIG_HISAX_HFC4S8S=m
+CONFIG_HISAX_FRITZ_PCIPNP=m
+CONFIG_HISAX_HDLC=y
+
+#
+# Active cards
+#
+CONFIG_HYSDN=m
+CONFIG_HYSDN_CAPI=y
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+CONFIG_GIGASET_M101=m
+# CONFIG_GIGASET_DEBUG is not set
+CONFIG_GIGASET_UNDOCREQ=y
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+# CONFIG_CAPI_TRACE is not set
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+CONFIG_ISDN_CAPI_CAPIDRV=m
+
+#
+# CAPI hardware drivers
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+CONFIG_ISDN_DIVAS_BRIPCI=y
+CONFIG_ISDN_DIVAS_PRIPCI=y
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=y
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PARKBD=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+CONFIG_ROCKETPORT=m
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+CONFIG_NOZOMI=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_NVRAM=m
+CONFIG_R3964=m
+CONFIG_APPLICOM=m
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+CONFIG_IPWIRELESS=m
+CONFIG_MWAVE=m
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TELCLOCK=m
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIMTEC=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_TAOS_EVM=m
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_PLATFORM=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_PCF8575=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_TSL2550=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+CONFIG_SPI_LM70_LLP=m
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_TLE62X0=m
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+CONFIG_W1_SLAVE_DS2760=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+CONFIG_BATTERY_DS2760=m
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+CONFIG_SENSORS_APPLESMC=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_SM501=m
+# CONFIG_HTC_PASIC3 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS5345=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_TLV320AIC23B=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_BT866=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_TCM825X=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_SAA7191=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+
+#
+# Video improvement chips
+#
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+CONFIG_VIDEO_BT848_DVB=y
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_W9966=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_PP=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_MEYE=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CAFE_CCIC=m
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_SI470X=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_TTPCI_EEPROM=m
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_CORE=m
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+CONFIG_DVB_CINERGYT2_TUNING=y
+CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
+CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
+CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
+CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
+CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=20
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_S5H1411=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_AGP=y
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+CONFIG_VGASTATE=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_SVGALIB=m
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+CONFIG_FB_VESA=y
+CONFIG_FB_EFI=y
+# CONFIG_FB_IMAC is not set
+# CONFIG_FB_N411 is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_LE80578=m
+CONFIG_FB_CARILLO_RANCH=m
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_SM501 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=m
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_BACKLIGHT_CARILLO_RANCH=m
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+
+#
+# Generic devices
+#
+# CONFIG_SND_PCSP is not set
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_SB16_DSP=m
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_OXYGEN_LIB=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5530=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_FM801_TEA575X=m
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_ANALOG=y
+CONFIG_SND_HDA_CODEC_SIGMATEL=y
+CONFIG_SND_HDA_CODEC_VIA=y
+CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CONEXANT=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_POWER_SAVE=y
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_ISP1760_HCD=m
+# CONFIG_USB_ISP1760_PCI is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_HCD_SSB is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+CONFIG_USB_R8A66597_HCD=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MMC_SPI=m
+CONFIG_MEMSTICK=m
+# CONFIG_MEMSTICK_DEBUG is not set
+
+#
+# MemoryStick drivers
+#
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+
+#
+# MemoryStick Host Controller Drivers
+#
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CLEVO_MAIL=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I5000=m
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_TEST=m
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+
+#
+# SPI RTC drivers
+#
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RS5C348=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+CONFIG_DCA=m
+CONFIG_AUXDISPLAY=y
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+CONFIG_CFAG12864B=m
+CONFIG_CFAG12864B_RATE=20
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
+
+#
+# Firmware Drivers
+#
+CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
+CONFIG_EFI_VARS=m
+CONFIG_DELL_RBU=m
+CONFIG_DCDBAS=m
+CONFIG_DMIID=y
+# CONFIG_ISCSI_IBFT_FIND is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4DEV_FS=m
+CONFIG_EXT4DEV_FS_XATTR=y
+CONFIG_EXT4DEV_FS_POSIX_ACL=y
+CONFIG_EXT4DEV_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_NOLOCK=m
+CONFIG_GFS2_FS_LOCKING_DLM=m
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+# CONFIG_OCFS2_DEBUG_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Layered filesystems
+#
+CONFIG_ECRYPT_FS=m
+CONFIG_UNION_FS=m
+CONFIG_UNION_FS_XATTR=y
+# CONFIG_UNION_FS_DEBUG is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+CONFIG_NCPFS_SMALLDOS=y
+CONFIG_NCPFS_NLS=y
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_NONPROMISC_DEVMEM is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_DIRECT_GBPAGES is not set
+# CONFIG_DEBUG_NX_TEST is not set
+CONFIG_X86_MPPARSE=y
+# CONFIG_IOMMU_DEBUG is not set
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+# CONFIG_CPA_DEBUG is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+# CONFIG_SECURITY_SMACK is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_X86_64=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_X86_64=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_X86_64=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_HAVE_KVM=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+# CONFIG_VIRTIO_PCI is not set
+# CONFIG_VIRTIO_BALLOON is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CHECK_SIGNATURE=y
diff --git a/abs/core/kernel26/kernel26.install b/abs/core/kernel26/kernel26.install
new file mode 100644
index 0000000..514bcb7
--- /dev/null
+++ b/abs/core/kernel26/kernel26.install
@@ -0,0 +1,144 @@
+# arg 1: the new package version
+# arg 2: the old package version
+
+KERNEL_VERSION=2.6.26-ARCH
+
+post_install () {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ # generate init ramdisks
+ echo ">>> MKINITCPIO SETUP"
+ echo ">>> ----------------"
+ echo ">>> If you use LVM2, Encrypted root or software RAID,"
+ echo ">>> Ensure you enable support in /etc/mkinitcpio.conf ."
+ echo ">>> More information about mkinitcpio setup can be found here:"
+ echo ">>> http://wiki.archlinux.org/index.php/Mkinitcpio"
+ echo ""
+ echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..."
+ /sbin/mkinitcpio -p kernel26
+}
+
+post_upgrade() {
+ pacman -Q grub &>/dev/null
+ hasgrub=$?
+ pacman -Q lilo &>/dev/null
+ haslilo=$?
+ # reminder notices
+ if [ $haslilo -eq 0 ]; then
+ echo ">>>"
+ if [ $hasgrub -eq 0 ]; then
+ echo ">>> If you use the LILO bootloader, you should run 'lilo' before rebooting."
+ else
+ echo ">>> You appear to be using the LILO bootloader. You should run"
+ echo ">>> 'lilo' before rebooting."
+ fi
+ echo ">>>"
+ fi
+
+ if grep "/boot" /etc/fstab 2>&1 >/dev/null; then
+ if ! grep "/boot" /etc/mtab 2>&1 >/dev/null; then
+ echo "WARNING: /boot appears to be a seperate partition but is not mounted"
+ echo " This is most likely not what you want. Please mount your /boot"
+ echo " partition and reinstall the kernel unless you are sure this is OK"
+ fi
+ fi
+
+ if [ "`vercmp $2 2.6.13`" -lt 0 ]; then
+ # important upgrade notice
+ echo ">>>"
+ echo ">>> IMPORTANT KERNEL UPGRADE NOTICE"
+ echo ">>> -------------------------------"
+ echo ">>> As of kernel 2.6.13, DevFS is NO LONGER AVAILABLE!"
+ echo ">>> If you still use DevFS, please make the transition to uDev before"
+ echo ">>> rebooting. If you really need to stay with DevFS for some reason,"
+ echo ">>> then you can manually downgrade to an older version:"
+ echo ">>>"
+ echo ">>> # pacman -U http://archlinux.org/~judd/kernel/kernel26-scsi-2.6.12.2-1.pkg.tar.gz"
+ echo ">>>"
+ echo ">>> If you choose to downgrade, don't forget to add kernel26-scsi to your"
+ echo ">>> IgnorePkg list in /etc/pacman.conf"
+ echo ">>>"
+ echo ">>> (NOTE: The following portion applies to uDev users as well!)"
+ echo ">>>"
+ echo ">>> If you use any DevFS paths in your GRUB menu.lst, then you will not"
+ echo ">>> be able to boot! Change your root= parameter to use the classic"
+ echo ">>> naming scheme."
+ echo ">>>"
+ echo ">>> EXAMPLES:"
+ echo ">>> - change root=/dev/discs/disc0/part3 to root=/dev/sda3"
+ echo ">>> - change root=/dev/md/0 to root=/dev/md0"
+ echo ">>>"
+ fi
+ # generate new init ramdisk
+ if [ "`vercmp $2 2.6.18`" -lt 0 ]; then
+ echo ">>> --------------------------------------------------------------"
+ echo ">>> | WARNING: |"
+ echo ">>> |mkinitrd is not supported anymore in kernel >=2.6.18 series!|"
+ echo ">>> | Please change to Mkinitcpio setup. |"
+ echo ">>> --------------------------------------------------------------"
+ echo ">>>"
+ fi
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ echo ">>> MKINITCPIO SETUP"
+ echo ">>> ----------------"
+ if [ "`vercmp $2 2.6.18`" -lt 0 ]; then
+ echo ">>> Please change your bootloader config files:"
+ echo ">>> Grub: /boot/grub/menu.lst | Lilo: /etc/lilo.conf"
+ echo "------------------------------------------------"
+ echo "| - initrd26.img to kernel26.img |"
+ echo "| - initrd26-full.img to kernel26-fallback.img |"
+ echo "------------------------------------------------"
+ fi
+ if [ "`vercmp $2 2.6.19`" -lt 0 ]; then
+ echo ""
+ echo ">>> New PATA/IDE subsystem - EXPERIMENTAL"
+ echo ">>> ----------"
+ echo ">>> To use the new pata drivers, change the 'ide' hook "
+ echo ">>> to 'pata' in /etc/mkinicpio.conf HOOKS="
+ echo ">>> The new system changes: /dev/hd? to /dev/sd?"
+ echo ">>> Don't forget to modify GRUB, LILO and fstab to the"
+ echo ">>> new naming system. "
+ echo ">>> eg: hda3 --> sda3, hdc8 --> sdc8"
+ echo ""
+ echo ">>> piix/ata_piix (Intel chipsets) - IMPORTANT"
+ echo "----------"
+ echo ">>> If you have enabled ide/pata/sata HOOKs in /etc/mkinitcpio.conf"
+ echo ">>> the 'ata_piix' module will be used."
+ echo ">>> This may cause your devices to shift names, eg:"
+ echo ">>> - IDE: devices from hd? to sd?"
+ echo ">>> - SATA: sda might shift to sdc if you have 2 other disks on a PIIX IDE port."
+ echo ">>> To check if this will affect you, check 'mkinitcpio -M' for piix/ata_piix"
+ echo ""
+ fi
+
+ echo ">>> If you use LVM2, Encrypted root or software RAID,"
+ echo ">>> Ensure you enable support in /etc/mkinitcpio.conf ."
+ echo ">>> More information about mkinitcpio setup can be found here:"
+ echo ">>> http://wiki.archlinux.org/index.php/Mkinitcpio"
+ echo ""
+ echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..."
+if [ "`vercmp $2 2.6.19`" -lt 0 ]; then
+ /sbin/mkinitcpio -p kernel26 -m "ATTENTION:\nIf you get a kernel panic below
+and are using an Intel chipset, append 'earlymodules=piix' to the
+kernel commandline"
+else
+ /sbin/mkinitcpio -p kernel26
+fi
+if [ "`vercmp $2 2.6.21`" -lt 0 ]; then
+ echo ""
+ echo "Important ACPI Information:"
+ echo ">>> Since 2.6.20.7 all possible ACPI parts are modularized."
+ echo ">>> The modules are located at:"
+ echo ">>> /lib/modules/$(uname -r)/kernel/drivers/acpi"
+ echo ">>> For more information about ACPI modules check this wiki page:"
+ echo ">>> 'http://wiki.archlinux.org/index.php/ACPI_modules'"
+fi
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/kernel26/kernel26.preset b/abs/core/kernel26/kernel26.preset
new file mode 100644
index 0000000..742a442
--- /dev/null
+++ b/abs/core/kernel26/kernel26.preset
@@ -0,0 +1,17 @@
+# mkinitcpio preset file for kernel26
+
+########################################
+# DO NOT EDIT THIS LINE:
+source /etc/mkinitcpio.d/kernel26.kver
+########################################
+ALL_config="/etc/mkinitcpio.conf"
+
+PRESETS=('default' 'fallback')
+
+#default_config="/etc/mkinitcpio.conf"
+default_image="/boot/kernel26.img"
+#default_options=""
+
+#fallback_config="/etc/mkinitcpio.conf"
+fallback_image="/boot/kernel26-fallback.img"
+fallback_options="-S autodetect" \ No newline at end of file
diff --git a/abs/core/kernel26/logo_linux_clut224.ppm b/abs/core/kernel26/logo_linux_clut224.ppm
new file mode 100644
index 0000000..c539d32
--- /dev/null
+++ b/abs/core/kernel26/logo_linux_clut224.ppm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 24 24 24 95 95 95 143 148 147 219 219 219 224 224 224 224 224 224 221 221 221
+231 231 230 232 232 232 217 218 217 194 194 194 143 148 147 61 61 61 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 65 65 65
+179 180 180 224 224 224 141 142 141 85 85 85 25 25 26 2 2 2 0 0 0 0 0 0
+0 0 0 0 0 0 11 11 11 35 37 37 95 95 95 179 180 180 221 221 221 136 141 140
+28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 24 24 191 191 191 194 194 194
+73 73 73 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 109 109 110
+224 223 222 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 73 73 73 234 234 234 104 104 104 1 1 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0
+20 20 20 204 204 204 119 120 120 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 35 35 36 228 228 227 56 56 56 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 28 28 28 69 69 69 45 47 47 7 7 7
+0 0 0 16 16 16 159 159 159 197 197 197 8 8 8 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 208 207 206 88 88 88 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 51 51 51 111 114 112 109 109 110 51 51 51
+2 2 2 0 0 0 1 1 1 146 149 148 167 167 166 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 81 79 75 197 202 202 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 61 61 61 104 104 104 81 79 75 43 43 43
+8 8 8 0 0 0 0 0 0 7 7 7 213 213 213 65 65 65 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 191 191 191 88 88 88 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 28 28 28 28 28 28 7 7 7 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 228 228 227 20 20 20 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 246 246 246 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 159 160 131 131 131 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 8 8 8 246 246 246 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 197 197 197 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 12 12 12 241 241 241 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 22 22 22 5 5 5 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 225 224 224 56 56 56
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 7 7 7 246 246 246 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0
+20 20 20 43 43 43 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 4 4 4 25 25 26 31 31 31 20 20 20 65 65 65 20 20 20
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 149 148 124 129 126
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 3 3 3 254 254 254 4 4 4 0 0 0 0 0 0 31 31 31 104 104 104
+119 120 120 51 51 51 28 28 28 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0
+7 7 7 73 73 73 131 131 131 153 159 160 159 159 159 153 159 160 35 35 36 24 24 24
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 95 95 175 172 168
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 4 4 4 254 254 254 4 4 4 0 0 0 25 25 26 141 142 141 187 186 186
+197 197 197 167 167 166 65 65 65 4 4 4 0 0 0 0 0 0 0 0 0 9 9 9
+109 109 110 179 180 180 197 197 197 208 207 206 213 213 213 191 191 191 123 123 123 7 7 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 187 186 186
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 241 241 241 5 5 5 0 0 0 85 85 85 208 207 206 226 227 227
+235 235 235 246 246 246 221 221 221 22 22 22 0 0 0 0 0 0 0 0 0 85 85 85
+217 218 217 246 246 246 226 227 227 167 167 166 202 202 202 239 239 239 197 197 197 73 73 73
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 40 40 217 218 217
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 235 235 235 7 7 7 0 0 0 131 136 135 159 159 159 11 11 11
+69 69 69 131 136 135 246 246 246 104 104 104 0 0 0 0 0 0 0 0 0 123 123 123
+236 237 236 203 203 203 20 20 20 20 20 20 88 88 88 124 129 126 246 246 246 194 194 194
+7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 26 226 227 227
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 234 234 234 28 28 28 0 0 0 146 149 148 65 65 65 0 0 0
+109 109 110 51 51 51 234 234 234 131 136 135 0 0 0 35 35 36 22 22 22 123 123 123
+239 239 239 95 95 95 0 0 0 0 0 0 43 43 43 16 16 16 225 224 224 244 244 244
+45 47 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 241 241 241
+1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 217 218 217 51 51 51 1 1 1 131 131 131 85 85 85 0 0 0
+22 22 22 28 28 28 208 207 206 127 128 122 58 43 7 58 43 7 30 20 1 73 73 73
+231 230 229 65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 202 202 202 246 246 246
+43 43 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 246 246 246
+24 24 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 172 176 175 85 85 85 0 0 0 73 73 73 187 186 186 5 5 5
+0 0 0 30 20 1 190 146 50 224 170 17 221 175 7 221 175 7 201 165 9 191 150 3
+220 185 82 91 70 38 8 6 3 1 1 0 0 0 0 43 43 43 239 239 239 228 228 227
+11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 232 232 232
+35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 172 176 175 95 95 95 0 0 0 9 9 9 204 204 204 131 136 135
+91 61 1 204 146 9 217 163 7 232 191 11 232 191 11 226 196 19 219 193 11 197 162 19
+226 196 19 219 193 11 201 165 9 130 96 8 107 93 64 228 228 227 248 248 248 112 118 114
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235 235 235
+16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 143 148 147 109 109 110 0 0 0 0 0 0 81 79 75 227 180 59
+204 146 9 234 184 12 239 191 15 237 191 8 238 196 12 238 196 12 226 196 19 231 199 39
+231 199 39 231 199 39 219 193 11 219 193 11 219 193 11 227 180 59 192 156 83 8 6 3
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 239 239 239
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 131 131 131 111 114 112 0 0 0 30 20 1 155 102 4 198 139 9
+230 172 11 238 184 11 237 191 8 238 196 12 238 196 12 226 196 19 231 199 39 220 185 82
+231 199 39 231 199 39 226 196 19 219 193 11 219 193 11 219 193 11 226 196 19 159 120 9
+4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232 232 232
+20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 131 131 131 123 123 123 0 0 0 120 77 2 187 136 3 217 155 7
+229 171 7 238 184 8 238 184 8 238 196 12 238 196 12 231 199 39 231 199 39 231 199 39
+231 199 39 219 193 11 219 193 11 219 193 11 219 193 11 191 150 3 197 162 19 201 165 9
+30 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202 202 202
+56 56 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 119 120 120 141 142 141 1 1 0 104 68 5 175 125 4 217 155 7
+229 171 7 238 184 8 238 196 12 238 196 12 226 196 19 231 199 39 231 199 39 226 196 19
+219 193 11 219 193 11 219 193 11 191 150 3 191 150 3 201 165 9 217 155 7 183 127 3
+4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 186 186
+73 73 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 51 51
+143 148 147 224 223 222 225 224 224 146 149 148 4 4 4 8 6 3 130 96 8 175 125 4
+217 163 7 238 184 8 238 196 12 231 199 39 231 199 39 226 196 19 226 196 19 219 193 11
+201 165 9 191 150 3 175 125 4 191 150 3 216 159 5 206 148 3 198 139 9 91 70 38
+0 0 0 0 0 0 5 5 5 45 47 47 12 12 12 0 0 0 0 0 0 167 167 166
+88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 20 20 159 159 159 226 227 227
+172 176 175 136 141 140 123 135 137 124 131 129 112 118 114 45 47 47 141 122 119 130 96 8
+155 102 4 191 150 3 219 193 11 219 193 11 201 165 9 191 150 3 191 150 3 175 125 4
+191 150 3 191 150 3 191 150 3 187 136 3 188 133 20 190 146 50 175 172 168 175 172 168
+25 25 26 0 0 0 1 1 1 56 56 56 94 100 97 56 56 56 2 2 2 95 95 95
+172 176 175 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 159 160 217 218 217 144 156 160
+144 156 160 144 156 160 138 149 149 123 135 137 94 103 103 104 116 120 183 181 175 162 157 129
+148 102 14 155 102 4 175 125 4 191 150 3 191 150 3 191 150 3 191 150 3 191 150 3
+200 140 3 199 131 5 188 133 20 192 156 83 175 172 168 197 197 197 194 194 194 187 186 186
+109 109 110 0 0 0 0 0 0 8 8 8 95 95 95 111 114 112 31 31 31 18 18 18
+241 241 241 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 248 248 159 166 168 86 124 118
+144 156 160 138 149 149 123 135 137 144 156 160 94 103 103 124 131 129 159 159 159 191 191 191
+162 157 129 148 102 14 155 102 4 182 124 9 198 139 9 187 136 3 199 131 5 170 114 5
+170 114 5 190 146 50 163 157 151 187 186 186 197 197 197 231 230 229 241 240 237 221 221 221
+191 191 191 34 34 34 0 0 0 0 0 0 9 9 9 39 40 40 4 4 4 1 1 1
+228 228 227 25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 248 248 138 149 149 123 135 137
+123 135 137 138 149 149 104 116 120 146 149 148 119 128 123 131 136 135 123 135 137 204 204 204
+192 192 192 175 172 168 145 135 65 148 102 14 148 102 14 148 102 14 148 102 14 145 135 65
+162 157 129 183 181 175 191 191 191 208 207 206 241 240 237 255 255 254 254 254 254 254 254 254
+236 237 236 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+146 149 148 131 131 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 204 204 204 159 166 168 144 156 160
+113 134 127 144 156 160 94 103 103 136 141 140 119 128 123 119 128 123 112 118 114 221 221 221
+194 194 194 187 186 186 187 186 186 172 176 175 175 172 168 179 180 180 187 186 186 187 186 186
+194 194 194 197 197 197 224 223 222 251 251 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 232 232 232 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+69 69 69 225 224 224 35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 35 35 36 226 227 227 123 135 137 159 166 168
+86 124 118 138 149 149 113 134 127 112 118 114 131 136 135 104 104 104 124 131 129 204 204 204
+224 224 224 191 191 191 187 186 186 187 186 186 179 180 180 187 186 186 187 186 186 194 194 194
+213 213 213 241 240 237 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 146 149 148 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 81 79 75 226 227 227 81 79 75 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 39 40 40 231 230 229 73 73 73 25 25 26 153 159 160
+104 116 120 123 135 137 123 135 137 104 116 120 141 142 141 94 103 103 136 141 140 153 159 160
+253 252 251 225 224 224 197 197 197 189 189 189 189 189 189 191 191 191 208 207 206 233 231 230
+253 252 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 246 246 246 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 34 34 34 197 197 197 167 167 166 9 9 9 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 25 25 26 221 221 221 69 69 69 0 0 0 2 2 2 123 135 137
+123 135 137 104 116 120 136 141 140 119 128 123 131 136 135 113 134 127 113 134 127 113 134 127
+254 254 254 254 254 254 244 244 244 228 228 227 228 228 227 239 239 239 251 251 251 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 131 136 135 1 1 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 2 2 167 167 166 146 149 148 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 3 3 3 202 202 202 104 104 104 0 0 0 0 0 0 0 0 0 77 85 86
+153 159 160 141 122 119 123 135 137 94 103 103 94 103 103 113 134 127 145 140 129 112 118 114
+231 233 233 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 239 239 239 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 31 31 31 219 219 219 81 79 75 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 143 148 147 179 180 180 1 1 1 0 0 0 0 0 0 0 0 0 35 37 37
+159 166 168 143 148 147 94 103 103 109 109 110 86 124 118 119 128 123 94 100 97 127 128 122
+179 180 180 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 95 95 95 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 43 43 236 237 236 20 20 20
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+3 3 3 235 235 235 25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8
+138 149 149 123 135 137 77 85 86 112 118 114 94 103 103 104 116 120 111 114 112 145 140 129
+143 148 147 254 254 254 254 254 254 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+251 251 251 241 241 241 246 246 246 254 254 254 179 180 180 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141 167 167 166
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+111 114 112 172 176 175 16 16 16 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0
+94 100 97 159 166 168 113 134 127 104 104 104 94 103 103 104 116 120 113 134 127 113 134 127
+119 128 123 251 251 251 236 237 236 226 227 227 231 230 229 244 244 244 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 246 246 246 232 232 232 224 224 224 217 218 217 213 213 213
+203 203 203 204 204 204 203 203 203 221 221 221 251 251 251 56 56 56 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 236 237 236
+22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
+217 218 217 65 65 65 104 104 104 45 47 47 1 1 1 0 0 0 0 0 0 1 1 0
+43 43 43 153 159 160 162 157 129 136 141 140 113 134 127 119 128 123 124 131 129 104 116 120
+109 109 110 236 237 236 248 248 248 232 232 232 251 251 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 251 251 251 239 239 239 224 223 222 213 213 213 167 167 166
+123 123 123 94 100 97 192 192 192 194 194 194 224 223 222 189 189 189 3 3 3 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 35 37 37 11 11 11 131 131 131
+159 159 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 47 47
+213 213 213 9 9 9 119 120 120 123 123 123 43 43 43 3 3 3 0 0 0 0 0 0
+35 37 37 138 149 149 113 134 127 111 114 112 119 128 123 94 103 103 124 129 126 94 103 103
+124 131 129 197 202 202 251 251 251 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 246 246 246 153 159 160
+73 73 73 4 4 4 189 189 189 197 197 197 197 197 197 235 235 235 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 12 12 12 65 65 65 81 79 75 11 11 11 12 12 12
+251 251 251 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 123 123
+136 141 140 0 0 0 39 40 40 109 109 110 123 123 123 104 104 104 56 56 56 24 24 24
+131 136 135 167 167 166 131 136 135 112 118 114 124 131 129 112 118 114 124 131 129 112 118 114
+119 128 123 159 166 168 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 219 219 219 109 109 110
+16 16 16 1 1 0 172 176 175 231 231 230 208 207 206 203 203 203 213 213 213 18 18 18
+3 3 3 35 37 37 85 85 85 104 104 104 65 65 65 9 9 9 0 0 0 0 0 0
+240 240 239 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 186 186
+73 73 73 0 0 0 1 1 1 18 18 18 61 61 61 109 109 110 123 123 123 124 129 126
+136 141 140 153 159 160 153 159 160 138 149 149 146 149 148 138 149 149 146 149 148 138 149 149
+138 149 149 159 166 168 253 252 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 192 192 192 88 88 88
+4 4 4 0 0 0 141 142 141 254 254 254 239 239 239 202 202 202 187 186 186 136 141 140
+112 118 114 95 95 95 61 61 61 22 22 22 2 2 2 0 0 0 0 0 0 0 0 0
+204 204 204 51 51 51 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 219 219 219
+39 40 40 0 0 0 0 0 0 0 0 0 1 1 1 16 16 16 56 56 56 95 95 95
+112 118 114 123 123 123 127 128 122 127 128 122 124 129 126 124 131 129 131 136 135 136 141 140
+136 141 140 141 142 141 159 159 159 159 159 159 112 118 114 104 104 104 232 232 232 254 254 254
+254 254 254 254 254 254 219 219 219 175 172 168 153 159 160 131 131 131 131 131 131 61 61 61
+2 2 2 0 0 0 51 51 51 131 131 131 123 123 123 111 114 112 95 95 95 56 56 56
+28 28 28 5 5 5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+146 149 148 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 224 224
+35 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 11 11 11
+25 25 26 51 51 51 73 73 73 88 88 88 94 100 97 104 104 104 104 104 104 94 100 97
+104 104 104 95 95 95 88 88 88 65 65 65 12 12 12 1 1 1 69 69 69 254 254 254
+254 254 254 221 221 221 31 31 31 61 61 61 73 73 73 81 79 75 56 56 56 11 11 11
+0 0 0 0 0 0 5 5 5 24 24 24 24 24 24 12 12 12 4 4 4 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+141 142 141 104 104 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 227 227
+34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 2 2 2 9 9 9 12 12 12 12 12 12 16 16 16 18 18 18
+12 12 12 7 7 7 4 4 4 1 1 1 0 0 0 0 0 0 1 1 1 234 234 234
+254 254 254 136 141 140 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
+131 131 131 124 129 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 213 213 213
+51 51 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 217 218 217
+254 254 254 112 118 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+153 159 160 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+131 131 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 12 12 248 248 248
+255 255 255 146 149 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34
+233 231 230 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 37 37
+239 239 239 31 31 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 104 104 254 254 254
+254 254 254 235 235 235 12 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111 114 112
+159 159 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+159 159 159 141 142 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 40 40 236 237 236 254 254 254
+254 254 254 254 254 254 159 159 159 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241 241 241
+61 61 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+197 197 197 65 65 65 0 0 0 8 8 8 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 73 73 73 232 232 232 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 159 159 159 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 228 227
+35 37 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5
+244 244 244 7 7 7 0 0 0 73 73 73 236 237 236 131 136 135 43 43 43 1 1 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 24 24 24 94 100 97 194 194 194 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 235 235 235 131 131 131 45 47 47 2 2 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 197 197
+65 65 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 47 47
+204 204 204 0 0 0 0 0 0 111 114 112 255 255 255 255 255 255 255 255 255 225 224 224
+167 167 166 131 131 131 104 104 104 88 88 88 88 88 88 104 104 104 131 131 131 167 167 166
+203 203 203 225 224 224 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 231 231 230
+172 176 175 131 131 131 94 100 97 81 79 75 69 69 69 73 73 73 95 95 95 123 123 123
+175 172 168 191 191 191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 176 175
+88 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+175 172 168 0 0 0 1 1 0 131 136 135 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 255 255 255 255 255 255 254 254 254 254 254 254 254 254 254
+240 240 239 228 228 227 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 219 219 219 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 131 136 135
+124 129 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+179 180 180 0 0 0 0 0 0 141 142 141 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+240 240 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 219 219 219 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+111 114 112 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 26 159 159 159 224 223 222
+167 167 166 0 0 0 1 1 1 141 142 141 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+240 240 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254
+255 255 255 204 204 204 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 141 142 141
+119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 2 2 131 131 131 240 235 222 231 198 127 231 199 39
+190 146 50 58 43 7 1 1 0 131 131 131 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254
+254 254 254 153 159 160 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 141 142 141
+111 114 112 2 2 2 16 16 16 34 34 34 35 35 36 16 16 16 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 0 163 157 151 218 210 190 233 177 11 239 191 15 239 191 15
+239 194 10 230 173 7 104 68 5 127 128 122 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 231 231 230 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 255 255 255 253 252 251 253 252 251
+237 229 207 141 122 119 5 4 2 0 0 0 0 0 0 0 0 0 0 0 0 141 142 141
+244 244 244 240 235 222 240 235 222 237 229 207 237 229 207 237 229 207 208 207 206 51 51 51
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 95 95 95 237 229 207 224 170 17 233 177 11 237 185 13 239 191 15
+239 191 15 239 191 15 233 179 8 192 156 83 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+239 239 239 232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 255 254 254 254 240 235 222 222 169 38
+215 152 18 219 157 11 204 146 9 188 133 20 148 102 14 130 96 8 148 102 14 188 133 20
+190 146 50 215 152 18 215 152 18 221 159 7 217 155 7 215 152 18 220 185 82 236 237 236
+25 25 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 28 28 28 233 231 230 227 180 59 215 152 18 223 162 13 233 177 11 238 184 11
+239 191 15 238 184 11 239 191 15 238 196 12 214 199 171 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+241 241 241 226 227 227 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 255 255 254 253 252 251 203 181 131 198 139 9
+204 146 9 219 157 11 219 157 11 215 152 18 219 157 11 215 152 18 215 152 18 215 152 18
+223 162 13 224 170 17 230 172 11 233 177 11 231 175 8 223 162 13 215 152 18 231 198 127
+141 142 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11
+85 85 85 230 228 223 220 185 82 204 146 9 219 157 11 230 172 11 234 181 11 236 184 12
+237 185 13 237 185 13 238 184 11 239 194 10 239 191 15 249 244 230 253 252 251 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 251 251 251 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 255 255 255 254 254 254 240 235 222 182 124 9 199 131 5
+217 155 7 221 159 7 227 169 7 233 176 9 230 172 11 230 172 11 230 172 11 233 177 11
+233 177 11 235 179 10 235 179 10 236 183 11 234 181 11 230 172 11 224 170 17 227 180 59
+231 233 233 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 61 61 61 88 88 88 146 149 148 191 191 191 230 228 223
+237 229 207 190 146 50 215 152 18 219 157 11 230 172 11 233 177 11 234 182 11 236 185 13
+237 185 13 237 185 13 237 185 13 238 184 11 239 194 10 227 180 59 249 244 230 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 235 235 235 202 202 202 203 181 131 170 114 5 198 139 9
+216 159 5 227 169 7 234 178 8 236 182 10 234 181 11 234 181 11 234 181 11 234 182 11
+236 183 11 234 181 11 236 182 10 236 183 11 236 182 10 231 175 8 224 170 17 215 152 18
+244 244 244 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 131 131 131 240 235 222 231 198 127 231 198 127 227 180 59 188 133 20
+204 146 9 217 144 7 219 157 11 227 166 7 233 177 11 236 182 10 237 185 11 237 185 13
+237 185 13 237 185 13 239 191 15 238 184 11 238 184 8 232 191 11 220 185 82 255 255 255
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 192 192 192 192 156 83 170 114 5 204 146 9
+221 159 7 229 171 7 234 180 8 236 184 10 237 185 11 237 185 11 236 183 11 235 183 10
+235 183 10 236 184 11 237 185 11 237 183 10 237 181 9 235 179 10 227 169 7 198 139 9
+218 210 190 119 120 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+1 1 0 111 114 112 237 229 207 222 169 38 223 162 13 227 166 7 224 170 17 230 172 11
+230 172 11 230 172 11 230 172 11 233 176 9 236 180 8 237 183 10 237 185 11 237 185 12
+237 185 13 237 185 13 237 185 13 236 186 12 238 184 8 236 186 12 232 191 11 214 199 171
+255 255 255 255 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 187 186 186 192 156 83 182 124 9 198 139 9
+217 163 7 233 176 6 236 182 9 237 183 10 236 184 10 237 183 10 236 182 9 235 182 10
+235 183 10 235 184 12 236 186 12 235 183 9 237 181 9 235 179 10 227 169 7 217 155 7
+192 156 83 238 236 230 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 203 203 203 227 180 59 215 152 18 224 170 17 233 177 11 235 179 10 236 180 8
+236 180 8 236 180 8 234 180 8 235 179 10 235 181 9 236 183 11 236 184 11 236 185 13
+237 185 13 237 185 13 237 185 13 237 185 13 238 184 11 238 184 8 237 191 8 226 196 19
+240 235 222 255 255 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 248 248 248 197 197 197 192 192 192 192 156 83 175 125 4 204 146 9
+221 159 7 233 176 6 235 181 9 235 181 9 235 183 9 235 182 10 235 183 10 235 183 10
+235 183 10 235 184 11 236 184 12 235 183 9 236 180 8 234 178 8 230 172 11 217 155 7
+198 139 9 203 181 131 240 235 222 56 56 56 0 0 0 0 0 0 0 0 0 0 0 0
+
+1 1 1 217 218 217 227 180 59 227 169 7 235 179 10 236 182 10 237 183 10 237 183 10
+236 182 9 236 182 9 235 183 9 235 183 9 235 183 10 236 184 11 236 184 11 236 184 11
+236 185 13 237 185 13 237 185 13 237 185 13 237 185 13 237 185 11 236 182 9 232 191 11
+227 180 59 248 248 248 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 208 207 206 189 189 189 192 156 83 183 127 3 217 155 7
+227 169 7 236 182 10 233 179 8 234 178 8 235 181 9 235 182 10 235 182 10 235 183 10
+235 183 10 235 183 10 236 184 10 235 183 9 234 180 8 234 180 8 229 171 7 223 162 13
+217 155 7 199 131 5 220 185 82 238 236 230 167 167 166 39 40 40 0 0 0 0 0 0
+
+0 0 0 217 218 217 220 185 82 215 152 18 233 177 11 236 182 10 236 183 11 237 185 11
+236 185 13 236 184 12 236 184 10 236 184 10 236 183 11 236 184 11 236 183 11 236 184 11
+236 184 12 237 185 12 237 185 13 237 185 13 237 185 13 237 185 11 238 184 8 237 191 8
+222 189 8 231 198 127 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 219 219 219 179 180 180 107 93 64 198 139 9 206 148 3
+227 169 7 234 178 7 234 180 8 234 178 7 235 181 9 235 182 10 235 182 10 235 183 10
+235 183 10 235 183 10 236 184 10 235 183 9 234 180 8 234 178 8 233 176 9 229 171 7
+223 162 13 219 157 11 217 144 7 215 152 18 220 185 82 249 244 230 124 129 126 0 0 0
+
+1 1 1 194 194 194 220 185 82 219 157 11 230 172 11 234 181 11 235 184 11 235 184 11
+235 184 11 235 183 10 235 183 10 235 183 10 235 182 10 236 183 11 236 183 11 236 184 12
+236 184 12 236 184 12 236 185 13 236 185 13 237 184 12 235 184 12 236 184 11 237 183 10
+238 196 12 221 175 7 237 229 207 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 197 197 197 39 40 40 104 68 5 187 136 3 206 148 3
+227 169 7 234 178 7 235 181 9 234 180 8 235 181 9 235 182 10 235 182 10 236 183 11
+235 182 10 235 183 10 235 183 10 235 183 10 235 183 9 235 181 9 235 181 9 235 179 10
+231 175 8 227 166 7 219 157 11 215 152 18 215 152 18 222 169 38 225 224 224 1 1 1
+
+0 0 0 179 180 180 231 198 127 204 146 9 230 172 11 234 181 11 234 181 11 235 183 10
+235 183 10 235 183 10 235 183 10 235 183 10 235 183 10 236 183 11 236 183 11 236 183 11
+236 183 11 236 184 11 236 184 11 235 184 11 234 184 12 234 184 12 235 184 11 237 185 11
+238 184 8 237 191 8 222 169 38 249 244 230 253 252 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 194 194 194 25 25 26 1 1 0 104 68 5 187 136 3 217 155 7
+227 169 7 234 178 7 235 181 9 235 182 10 235 182 10 235 183 10 235 183 10 236 183 11
+236 183 11 236 183 11 236 183 11 236 184 11 236 184 11 236 184 10 236 184 10 237 183 10
+235 181 9 233 177 11 227 169 7 219 157 11 217 144 7 231 198 127 197 197 197 2 2 2
+
+1 1 1 153 159 160 231 198 127 215 152 18 224 170 17 233 177 11 235 184 11 236 182 10
+236 182 10 235 182 10 235 182 10 235 182 10 235 184 11 236 183 11 236 183 11 236 183 11
+236 183 11 236 183 11 235 184 11 235 184 11 235 184 11 234 184 12 234 182 11 236 184 11
+238 184 8 234 187 8 232 191 11 220 185 82 253 252 251 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+241 241 241 119 120 120 4 4 4 0 0 0 0 0 0 130 96 8 187 136 3 216 159 5
+230 173 7 234 178 7 234 180 8 235 183 9 236 184 11 236 184 12 236 184 11 237 185 11
+237 185 11 236 183 11 236 183 11 236 184 11 236 184 11 236 184 11 236 185 13 237 185 12
+236 184 12 235 179 10 223 162 13 199 131 5 220 185 82 219 219 219 11 11 11 0 0 0
+
+0 0 0 136 141 140 231 198 127 215 152 18 223 162 13 233 177 11 237 184 12 238 184 11
+236 182 10 235 182 10 235 182 10 235 182 10 235 182 10 236 183 11 236 183 11 236 184 11
+237 185 11 236 184 12 235 184 11 235 184 11 235 184 12 234 182 11 235 184 11 235 183 10
+236 182 9 233 181 8 222 189 8 221 175 7 231 198 127 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 251 251 251 159 159 159
+28 28 28 0 0 0 0 0 0 0 0 0 8 6 3 130 96 8 200 140 3 221 159 7
+229 171 7 233 176 6 234 178 7 234 187 8 237 185 13 237 185 13 237 185 13 237 185 12
+237 185 11 236 184 11 235 184 11 235 184 11 236 184 11 237 185 12 237 185 12 237 185 13
+237 185 13 230 172 11 199 131 5 215 152 18 246 246 246 31 31 31 2 2 2 1 1 1
+
+0 0 0 159 159 159 231 198 127 215 152 18 227 166 7 235 179 10 236 183 11 237 185 11
+236 183 11 235 181 9 233 179 8 234 180 8 235 181 9 236 183 11 236 183 11 236 184 11
+236 184 11 236 185 13 236 185 13 236 185 13 236 185 13 234 184 12 234 182 11 235 183 9
+234 178 7 233 181 8 221 175 7 221 175 7 198 139 9 214 199 171 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
+254 254 254 254 254 254 254 254 254 254 254 254 244 244 244 167 167 166 45 47 47 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 30 20 1 155 102 4 200 140 3 216 159 5
+229 171 7 233 176 6 235 183 9 234 184 12 235 184 12 237 185 13 236 186 12 236 186 12
+237 185 11 235 184 11 235 184 11 235 184 11 235 184 12 236 185 13 237 185 13 238 184 11
+233 177 11 217 144 7 222 169 38 246 246 246 109 109 110 2 2 2 0 0 0 0 0 0
+
+0 0 0 213 213 213 227 180 59 217 144 7 227 166 7 233 176 9 234 180 8 236 182 10
+236 182 10 233 176 6 231 175 8 231 175 8 233 179 8 236 182 10 236 183 11 236 184 12
+236 184 12 236 185 13 236 185 13 236 185 13 235 184 12 234 184 12 235 184 11 235 183 9
+236 180 8 234 178 7 227 169 7 217 163 7 204 146 9 130 96 8 81 79 75 167 167 166
+232 232 232 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 253 252 251
+239 239 239 204 204 204 146 149 148 85 85 85 16 16 16 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 30 20 1 155 102 4 206 148 3 217 163 7
+229 171 7 233 176 6 233 181 8 234 184 12 236 185 13 237 185 13 237 185 12 236 185 13
+235 184 11 235 184 11 235 184 11 234 182 11 234 182 11 233 176 9 230 172 11 229 171 7
+215 152 18 231 198 127 233 231 230 69 69 69 5 4 2 0 0 0 0 0 0 0 0 0
+
+18 18 18 244 244 244 215 152 18 217 155 7 221 159 7 223 165 7 227 169 7 230 173 7
+231 175 8 230 173 7 231 175 8 231 175 8 233 176 6 234 180 8 236 182 10 237 184 12
+237 184 12 237 185 12 237 185 13 237 185 13 237 185 13 236 185 13 235 184 12 236 184 11
+236 182 9 237 183 8 229 171 7 217 163 7 204 146 9 170 114 5 91 61 1 1 1 0
+2 2 2 31 31 31 39 40 40 43 43 43 43 43 43 39 40 40 35 37 37 20 20 20
+3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 1 1 0 58 43 7 170 114 5 200 140 3 216 159 5
+229 171 7 233 176 6 234 178 7 235 183 9 235 184 11 237 185 12 237 185 12 235 181 9
+235 179 10 234 181 11 235 179 10 233 176 9 231 175 8 230 172 11 215 152 18 215 152 18
+240 235 222 141 142 141 16 16 16 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+43 43 43 249 244 230 215 152 18 204 146 9 204 146 9 204 146 9 217 155 7 217 155 7
+216 159 5 216 159 5 223 165 7 223 165 7 227 169 7 229 171 7 231 175 8 233 176 9
+235 179 10 235 179 10 236 183 11 237 185 11 236 183 11 236 183 11 236 183 11 236 183 11
+236 183 11 234 180 8 227 169 7 216 159 5 187 136 3 170 114 5 104 68 5 15 12 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 91 61 1 155 102 4 200 140 3 217 155 7
+223 165 7 230 173 7 233 176 6 234 178 7 233 179 8 236 180 8 235 179 10 233 176 9
+233 176 9 230 173 7 227 166 7 223 165 7 215 152 18 190 146 50 231 198 127 241 240 237
+85 85 85 5 4 2 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+4 4 4 202 202 202 237 229 207 192 156 83 188 133 20 182 124 9 182 124 9 183 127 3
+199 131 5 198 139 9 204 146 9 204 146 9 204 146 9 206 148 3 217 155 7 217 163 7
+223 165 7 223 165 7 230 173 7 233 179 8 234 178 8 234 178 8 234 178 8 233 176 9
+231 175 8 229 171 7 216 159 5 198 139 9 175 125 4 155 102 4 104 68 5 30 20 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 58 43 7 155 102 4 183 127 3 200 140 3
+216 159 5 223 165 7 229 171 7 233 176 6 231 175 8 231 175 8 229 171 7 227 166 7
+223 165 7 217 155 7 204 146 9 188 133 20 231 198 127 224 223 222 119 120 120 22 22 22
+1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 3 3 3 95 95 95 179 180 180 234 234 234 237 229 207 203 181 131 192 156 83
+188 133 20 159 120 9 170 114 5 182 124 9 182 124 9 182 124 9 183 127 3 187 136 3
+198 139 9 198 139 9 217 155 7 217 163 7 223 165 7 223 165 7 223 165 7 223 165 7
+216 159 5 204 146 9 198 139 9 175 125 4 155 102 4 120 77 2 91 61 1 15 12 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 58 43 7 120 77 2 170 114 5 183 127 3
+200 140 3 206 148 3 216 159 5 216 159 5 221 159 7 216 159 5 217 155 7 204 146 9
+198 139 9 182 124 9 190 146 50 218 210 190 146 149 148 7 7 7 0 0 0 1 1 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 45 47 47 109 109 110 159 166 168
+226 227 227 248 248 248 218 210 190 203 181 131 192 156 83 148 102 14 148 102 14 148 102 14
+155 102 4 170 114 5 182 124 9 183 127 3 187 136 3 198 139 9 198 139 9 198 139 9
+187 136 3 182 124 9 170 114 5 155 102 4 130 96 8 104 68 5 58 43 7 8 6 3
+73 73 73 141 142 141 179 180 180 203 203 203 208 207 206 213 213 213 213 213 213 219 219 219
+234 234 234 235 235 235 236 237 236 235 235 235 236 237 236 239 239 239 234 234 234 240 240 239
+224 224 224 225 224 224 217 218 217 131 131 131 58 43 7 120 77 2 155 102 4 170 114 5
+182 124 9 183 127 3 198 139 9 200 140 3 200 140 3 200 140 3 187 136 3 175 125 4
+155 102 4 192 156 83 230 228 223 85 85 85 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
+1 1 1 35 35 36 81 79 75 104 104 104 146 149 148 208 207 206 233 231 230 214 199 171
+162 157 129 148 102 14 130 96 8 148 102 14 155 102 4 170 114 5 170 114 5 155 102 4
+155 102 4 155 102 4 130 96 8 120 77 2 104 68 5 91 61 1 167 167 166 233 231 230
+172 176 175 88 88 88 43 43 43 12 12 12 8 8 8 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 20 20 20 179 180 180 162 157 129 91 61 1 120 77 2 155 102 4
+170 114 5 170 114 5 175 125 4 182 124 9 182 124 9 170 114 5 155 102 4 130 96 8
+203 181 131 197 197 197 35 35 36 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 2 2 2 1 1 1 1 1 1 22 22 22 73 73 73
+131 136 135 192 192 192 230 228 223 162 157 129 107 93 64 104 68 5 120 77 2 130 96 8
+130 96 8 120 77 2 104 68 5 91 61 1 91 70 38 224 223 222 123 123 123 7 7 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 1 43 43 43 228 228 227 91 70 38 91 61 1 104 68 5
+120 77 2 130 96 8 155 102 4 155 102 4 155 102 4 120 77 2 107 93 64 214 199 171
+172 176 175 7 7 7 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1 1 1 1 1 1 24 24 24 111 114 112 218 210 190 218 210 190 141 122 119 107 93 64
+107 93 64 91 70 38 107 93 64 175 172 168 249 244 230 109 109 110 1 1 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 1 1 1 88 88 88 246 246 246 175 172 168 145 135 65
+91 70 38 91 61 1 58 43 7 91 61 1 107 93 64 163 157 151 237 229 207 109 109 110
+4 4 4 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 65 65 65 145 140 129 163 157 151
+175 172 168 218 210 190 197 197 197 141 122 119 18 18 18 1 1 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 35 35 36 95 95 95 146 149 148
+197 197 197 221 221 221 231 230 229 235 235 235 187 186 186 123 123 123 12 12 12 1 1 1
+1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core/kernel26/logo_linux_mono.pbm b/abs/core/kernel26/logo_linux_mono.pbm
new file mode 100644
index 0000000..6a5e007
--- /dev/null
+++ b/abs/core/kernel26/logo_linux_mono.pbm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 0 0 0
+128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127
+0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127
+0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127 0 0 0 128 128 127
+0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 0 0 0 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 128 128 127 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127
+128 128 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 128 127 128 128 127 128 128 127
+128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 128 128 127 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core/kernel26/logo_linux_vga16.ppm b/abs/core/kernel26/logo_linux_vga16.ppm
new file mode 100644
index 0000000..51ffad6
--- /dev/null
+++ b/abs/core/kernel26/logo_linux_vga16.ppm
@@ -0,0 +1,883 @@
+P3
+80 80
+255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0
+85 85 85 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 170 170 170 0 0 0 0 0 0 85 85 85 85 85 85 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0
+85 85 85 85 85 85 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 255 255 255 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 85 85 85 170 170 170 0 0 0
+0 0 0 0 0 0 255 85 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+255 255 85 255 255 85 170 85 0 170 85 0 85 85 85 255 255 255 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 255 85 85
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 170 170 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85
+0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 170 170 170 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 85 85 170 170 170 170 170 170
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 170 170 170
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 85 85 85
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 170 170 170 170 170 170
+170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 170 170 170
+170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170
+85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 255 255 255
+170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 170 170 170 170 170 170
+85 85 85 170 170 170 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170
+255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 170 170 170
+85 85 85 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170
+255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0 0 0 0 170 170 170
+170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170 85 85 85 85 85 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85
+85 85 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85
+85 85 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
+85 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
+85 85 85 0 0 0 170 170 170 170 170 170 170 170 170 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
+170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85
+85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 85 85 85
+0 0 0 0 0 0 170 170 170 255 255 255 170 170 170 170 170 170 255 255 255 0 0 0
+0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
+170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170
+85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170
+170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85
+0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 255 255 255
+255 255 255 255 255 255 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+255 255 255 0 0 0 0 0 0 85 85 85 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 85 85 85 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
+170 170 170 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255 255 255 85 255 255 85
+170 85 0 0 0 0 0 0 0 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 255 255 85 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 85 85 85 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 255 255 255 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 85 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 255 255 255 255 85 85 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 170 85 0 170 85 0 170 85 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+85 85 85 255 255 255 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 255 255 85
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 255 255 255
+170 170 170 255 85 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 170 170 170 255 255 255 170 170 170 255 255 85 255 255 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 85 85 85 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+255 85 85 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 85 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 85 0 255 85 85 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 255 170 170 170 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 170 170 170 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 85 85 255 255 255 0 0 0
+
+0 0 0 170 170 170 170 170 170 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 170 170 170 0 0 0
+
+0 0 0 170 170 170 170 170 170 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 255 255 85 255 255 255 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 85 0 170 170 170 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 255 85 85 255 255 255 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 85 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 255 85 85 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85
+255 255 85 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85 170 170 170
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 255 255 255 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 255 255 85
+255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+255 255 85 255 255 85 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255
+85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 170 170 170 255 255 255 170 170 170 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 170 170 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 85 85 85 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170
+255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 0 0 0 0 0 0
+85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 85 85 85 85 85 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170
+170 170 170 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 85 85 85 170 170 170 255 255 255
+170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 85 85 85 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0
+170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
+170 170 170 170 170 170 255 255 255 170 170 170 85 85 85 170 85 0 170 85 0 170 85 0
+170 85 0 170 85 0 170 85 0 85 85 85 85 85 85 255 255 255 85 85 85 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 85 85 85 85 85 85 170 85 0
+170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 85 0 170 170 170
+170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 85 85 85
+85 85 85 85 85 85 85 85 85 170 170 170 255 255 255 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255 170 170 170 85 85 85
+85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 255 255 255 85 85 85
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170
+170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
+170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/abs/core/klibc-extras/PKGBUILD b/abs/core/klibc-extras/PKGBUILD
new file mode 100644
index 0000000..155d959
--- /dev/null
+++ b/abs/core/klibc-extras/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1644 2008-05-14 12:09:30Z thomas $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=klibc-extras
+pkgver=2.4
+pkgrel=11
+pkgdesc="Extra apps for klibc early-userspace"
+arch=(i686 x86_64)
+url="http://phraktured.net/initramfs/klibc-extras/"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so))
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f7887993f4a3d4fbb04aa1ddf730568e')
+
+build()
+{
+ cd $startdir/src/${pkgname}-${pkgver}
+
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/klibc-kbd/PKGBUILD b/abs/core/klibc-kbd/PKGBUILD
new file mode 100644
index 0000000..8c4e0db
--- /dev/null
+++ b/abs/core/klibc-kbd/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 1645 2008-05-14 12:09:34Z thomas $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=klibc-kbd
+pkgver=1.15.20080312
+pkgrel=15
+pkgdesc="Keytable files and keyboard utilities"
+arch=('i686' 'x86_64')
+url="ftp://ftp.altlinux.org/pub/people/legion/kbd/"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so) 'kbd')
+source=(ftp://ftp.archlinux.org/other/kbd/kbd-$pkgver.tar.gz
+ #ftp://ftp.altlinux.org/pub/people/legion/kbd/kbd-${pkgver}.tar.gz
+ no-isatty.patch
+ no-exit.patch
+ keymap_install
+ keymap_hook)
+md5sums=('709b087bb9d6c073bade70eda2da7770'
+ '53e9612ac5fc1b23601f793410742ed3'
+ '8c1bec330e8c98355502ac861561667d'
+ '735d7268f567deee4db3bed951a8303a'
+ '85457e44dfd7046224e87f0add8da4b2')
+
+build() {
+ cd ${startdir}/src
+ #cd ${startdir}/src/kbd-${pkgver}
+ patch -Np1 -i ../no-isatty.patch
+ patch -Np1 -i ../no-exit.patch
+
+ aclocal
+ autoconf
+ automake --add-missing
+ ./configure --datadir=/share/kbd --enable-klibc
+
+ cd src/
+ make kbd_mode loadkeys setfont || return 1
+
+ install -D loadkeys ${startdir}/pkg/lib/initcpio/kbd/loadkeys
+ install -D kbd_mode ${startdir}/pkg/lib/initcpio/kbd/kbd_mode
+ install -D setfont ${startdir}/pkg/lib/initcpio/kbd/setfont
+ # install hook
+ install -Dm644 ${startdir}/src/keymap_hook ${startdir}/pkg/lib/initcpio/hooks/keymap
+ install -Dm644 ${startdir}/src/keymap_install ${startdir}/pkg/lib/initcpio/install/keymap
+}
diff --git a/abs/core/klibc-kbd/keymap_hook b/abs/core/klibc-kbd/keymap_hook
new file mode 100644
index 0000000..913b247
--- /dev/null
+++ b/abs/core/klibc-kbd/keymap_hook
@@ -0,0 +1,27 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading keymap..."
+ . /keymap
+ if [ "${UTF8}" = "yes" ]; then
+ /bin/kbd_mode -u
+ printf "\033%%G" >> /dev/console
+ [ -n "${KEYMAP}" ] && /bin/loadkeys -q -u ${KEYMAP}
+ else
+ /bin/kbd_mode -a
+ printf "\033%%@" >> /dev/console
+ [ -n "${KEYMAP}" ] && /bin/loadkeys -q ${KEYMAP}
+ fi
+ if [ -n "${CONSOLEFONT}" ]; then
+ if [ "${UTF8}" = "yes" ]; then
+ CONSOLEMAP=""
+ fi
+ if [ -n "${CONSOLEMAP}" ]; then
+ /bin/setfont -m ${CONSOLEMAP} ${CONSOLEFONT} -C /dev/console
+ else
+ /bin/setfont ${CONSOLEFONT} -C /dev/console
+ fi
+ printf "\033(K" >> /dev/console
+ fi
+ msg "done."
+}
diff --git a/abs/core/klibc-kbd/keymap_install b/abs/core/klibc-kbd/keymap_install
new file mode 100644
index 0000000..e61577e
--- /dev/null
+++ b/abs/core/klibc-kbd/keymap_install
@@ -0,0 +1,76 @@
+# vim: set ft=sh:
+
+# this is needed because kbd utilities compiled with klibc cannot use gunzip
+add_ucfile ()
+{
+ temp=$(mktemp ${TMPDIR}/kbd.XXXX)
+ dest=$(echo "${1}" | sed 's|/usr||' | sed 's|.gz||')
+ name=$(echo "${1}" | sed 's|.*/||')
+
+ if [ $(echo "${1}" | grep '.gz$') ]; then
+ gunzip -c ${1} > ${temp}
+ add_file ${temp} ${dest}
+ else
+ add_file ${1} ${dest}
+ fi
+}
+
+add_includes()
+{
+ for i in $(zgrep -e '^include ".*"' ${1} | cut -d '"' -f 2); do
+ for j in $(find /usr/share/kbd/keymaps -name "${i}" -o -name "${i}.*"); do
+ add_ucfile ${j}
+ add_includes ${j}
+ done
+ done
+}
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=""
+ SCRIPT="keymap"
+ KEYMAP_FILE="$(mktemp ${TMPDIR}/keymap.XXXXXX)"
+ add_file /lib/initcpio/kbd/loadkeys /bin/loadkeys
+ add_file /lib/initcpio/kbd/kbd_mode /bin/kbd_mode
+ add_file /lib/initcpio/kbd/setfont /bin/setfont
+ eval "$(grep -e "^LOCALE=" -e "^KEYMAP=" -e "^CONSOLEFONT=" -e "^CONSOLEMAP=" /etc/rc.conf)"
+ echo "KEYMAP='${KEYMAP}'" >> ${KEYMAP_FILE}
+ echo "CONSOLEFONT='${CONSOLEFONT}'" >> ${KEYMAP_FILE}
+ echo "CONSOLEMAP='${CONSOLEMAP}'" >> ${KEYMAP_FILE}
+ if [ -n "$(echo ${LOCALE} | grep -i utf)" ]; then
+ echo "UTF8='yes'" >> ${KEYMAP_FILE}
+ fi
+ . ${KEYMAP_FILE}
+ add_file ${KEYMAP_FILE} /keymap
+ if [ -n "${KEYMAP}" ]; then
+ for i in $(echo ${KEYMAP}); do
+ for j in $(find /usr/share/kbd/keymaps -name "${i}.map.gz"); do
+ add_ucfile ${j}
+ add_includes ${j}
+ done
+ done
+ fi
+ if [ -n "${CONSOLEFONT}" ]; then
+ for i in $(find /usr/share/kbd/consolefonts -name "${CONSOLEFONT}.*gz"); do
+ add_ucfile ${i}
+ done
+ fi
+ if [ -n "${CONSOLEMAP}" ]; then
+ for i in $(find /usr/share/kbd/unimaps -name "${CONSOLEMAP}.uni"); do
+ add_ucfile ${i}
+ done
+ for i in $(find /usr/share/kbd/consoletrans -name "${CONSOLEMAP}.trans" -o -name "${CONSOLEMAP}"); do
+ add_ucfile ${i}
+ done
+ fi
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads keymap(s) and consolefont specified in rc.conf
+ during early userspace.
+HELPEOF
+}
diff --git a/abs/core/klibc-kbd/no-exit.patch b/abs/core/klibc-kbd/no-exit.patch
new file mode 100644
index 0000000..2f207dc
--- /dev/null
+++ b/abs/core/klibc-kbd/no-exit.patch
@@ -0,0 +1,31 @@
+From 96dc0b9e56da64d2c063d1e74c81034b6b404bc2 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 21:46:35 +0200
+Subject: [PATCH] Do not exit on ferror during psf font loading when built with klibc
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ src/psffontop.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/src/psffontop.c b/src/psffontop.c
+index 1b99e9b..75a6048 100644
+--- a/src/psffontop.c
++++ b/src/psffontop.c
+@@ -203,9 +203,13 @@ readpsffont(FILE *fontf, char **allbufp, int *allszp,
+ }
+ n += fread(inputbuf+n, 1, inputbuflth-n, fontf);
+ if (ferror(fontf)) {
++ #ifndef __klibc__
+ char *u = _("%s: Error reading input font");
+ fprintf(stderr, u, progname);
+ exit(EX_DATAERR);
++ #else
++ break;
++ #endif
+ }
+ if (feof(fontf))
+ break;
+--
+1.5.3.7
+
diff --git a/abs/core/klibc-kbd/no-isatty.patch b/abs/core/klibc-kbd/no-isatty.patch
new file mode 100644
index 0000000..ce02a7a
--- /dev/null
+++ b/abs/core/klibc-kbd/no-isatty.patch
@@ -0,0 +1,58 @@
+From 92dc27dd57c83e9e2c798bda41ec111d26e1e3e2 Mon Sep 17 00:00:00 2001
+From: Roman Kyrylych <roman@archlinux.org>
+Date: Sat, 15 Mar 2008 18:57:04 +0200
+Subject: [PATCH] Do not use isatty() when built with klibc
+
+Signed-off-by: Roman Kyrylych <roman@archlinux.org>
+---
+ src/getfd.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/src/getfd.c b/src/getfd.c
+index 7f6d70e..3cef522 100644
+--- a/src/getfd.c
++++ b/src/getfd.c
+@@ -16,6 +16,7 @@
+ * if someone else used X (which does a chown on /dev/console).
+ */
+
++#ifndef __klibc__
+ static int
+ is_a_console(int fd) {
+ char arg;
+@@ -25,6 +26,7 @@ is_a_console(int fd) {
+ && ioctl(fd, KDGKBTYPE, &arg) == 0
+ && ((arg == KB_101) || (arg == KB_84)));
+ }
++#endif
+
+ static int
+ open_a_console(const char *fnam) {
+@@ -41,10 +43,12 @@ open_a_console(const char *fnam) {
+ fd = open(fnam, O_RDONLY);
+ if (fd < 0)
+ return -1;
++ #ifndef __klibc__
+ if (!is_a_console(fd)) {
+ close(fd);
+ return -1;
+ }
++ #endif
+ return fd;
+ }
+
+@@ -80,9 +84,11 @@ int getfd(const char *fnam) {
+ if (fd >= 0)
+ return fd;
+
++ #ifndef __klibc__
+ for (fd = 0; fd < 3; fd++)
+ if (is_a_console(fd))
+ return fd;
++ #endif
+
+ fprintf(stderr,
+ _("Couldnt get a file descriptor referring to the console\n"));
+--
+1.5.3.7
+
diff --git a/abs/core/klibc-module-init-tools/PKGBUILD b/abs/core/klibc-module-init-tools/PKGBUILD
new file mode 100644
index 0000000..80a1ede
--- /dev/null
+++ b/abs/core/klibc-module-init-tools/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5989 2008-07-22 12:58:46Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=klibc-module-init-tools
+pkgver=3.4
+pkgrel=10
+pkgdesc="Utilities for inserting and removing modules from the Linux kernel"
+arch=(i686 x86_64)
+url="http://www.kernel.org"
+license=('GPL')
+groups=('base')
+depends=('klibc' $(basename /lib/klibc-*.so .so))
+source=(http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-$pkgver.tar.bz2 \
+ makefile.patch
+ fix-modprobe-ignore-path.patch)
+md5sums=('db6ac059e80e8dd4389dbe81ee61f3c6'
+ 'c48553c2b61fd8d9784aa86e559b9d7b'
+ '335c3f8317f257ddd70b09271b4360bd')
+
+build() {
+ cd $startdir/src/module-init-tools-$pkgver
+ patch -p1 -i ../makefile.patch || return 1
+ autoreconf || return 1
+ patch -p0 -i ../fix-modprobe-ignore-path.patch || return 1
+ sed -i 's|/usr/bin/install|/bin/install|g' install-with-care
+ CFLAGS="${CFLAGS} -DCONFIG_NO_BACKWARDS_COMPAT" CC=klcc LD=klcc ./configure --prefix=/usr/lib/klibc
+ make || return 1
+ INSTALL=/bin/install make DESTDIR=$startdir/pkg install || return 1
+ rm -f $startdir/pkg/usr/lib/klibc/sbin/{generate-modprobe.conf,insmod.static}
+ rm -rf $startdir/pkg/usr/lib/klibc/{share,man}
+}
diff --git a/abs/core/klibc-module-init-tools/fix-modprobe-ignore-path.patch b/abs/core/klibc-module-init-tools/fix-modprobe-ignore-path.patch
new file mode 100644
index 0000000..c562b3f
--- /dev/null
+++ b/abs/core/klibc-module-init-tools/fix-modprobe-ignore-path.patch
@@ -0,0 +1,14 @@
+--- modprobe.c~ 2005-12-02 00:42:09.000000000 +0100
++++ modprobe.c 2008-03-12 09:39:14.000000000 +0100
+@@ -1236,9 +1236,8 @@
+
+ /* Try defaults. */
+ for (i = 0; i < ARRAY_SIZE(default_configs); i++) {
+- if (read_config(default_configs[i], name, dump_only, removing,
+- options, commands, aliases, blacklist))
+- return;
++ read_config(default_configs[i], name, dump_only, removing,
++ options, commands, aliases, blacklist);
+ }
+ }
+
diff --git a/abs/core/klibc-module-init-tools/makefile.patch b/abs/core/klibc-module-init-tools/makefile.patch
new file mode 100644
index 0000000..df0836f
--- /dev/null
+++ b/abs/core/klibc-module-init-tools/makefile.patch
@@ -0,0 +1,54 @@
+diff -Nur module-init-tools-3.4.orig/Makefile.am module-init-tools-3.4/Makefile.am
+--- module-init-tools-3.4.orig/Makefile.am 2007-10-07 23:51:46.000000000 +0200
++++ module-init-tools-3.4/Makefile.am 2008-07-22 14:49:09.000000000 +0200
+@@ -18,16 +18,9 @@
+ EXTRA_depmod_SOURCES = moduleops_core.c
+ EXTRA_modinfo_SOURCES = backwards_compat.c
+
+-MAN5 = modprobe.conf.5 modules.dep.5 depmod.conf.5
+-MAN8 = depmod.8 insmod.8 lsmod.8 rmmod.8 modprobe.8 modinfo.8
+-SGML = $(addprefix doc/, $(MAN5:%.5=%.sgml) $(MAN8:%.8=%.sgml))
+-man_MANS = $(MAN5) $(MAN8)
+-# If they haven't overridden mandir, fix it (never /man!)
+-mandir =$(shell if [ @mandir@ = $(prefix)/man ]; then if [ $(prefix) = / ]; then echo /usr/share/man; else echo $(prefix)/share/man; fi; else echo @mandir@; fi)
+-
+ TESTSUITE := $(shell find tests -type f ! -name '*~') tests/vg-suppressions
+
+-EXTRA_DIST = generate-modprobe.conf modprobe.devfs FAQ CODING stress_modules.sh install-with-care $(SGML) $(man_MANS) $(TESTSUITE)
++EXTRA_DIST = generate-modprobe.conf modprobe.devfs FAQ CODING stress_modules.sh install-with-care $(TESTSUITE)
+
+ sbin_PROGRAMS = insmod modprobe rmmod depmod modinfo insmod.static
+ bin_PROGRAMS = lsmod
+@@ -38,32 +31,6 @@
+
+ DIST_DIR := /home/rusty/devel/kernel/www/modules/
+
+-MAINTAINERCLEANFILES := $(man_MANS)
+-
+-# According to Warren Togami, RH has docbook2man in the docbook-utils rpm.
+-DOCBOOKTOMAN := $(shell if command -v docbook-to-man >/dev/null 2>&1; then echo docbook-to-man; else echo docbook2man; fi)
+-
+-# docbook2man writes file itself, doesn't do stdout.
+-%.8: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+-
+-%.5: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+-
+-# docbook2man creates extra crap files which need cleaning.
+-distclean: killbuildmanpages
+-
+-killbuildmanpages:
+- rm -f doc/*.tmp manpage.refs manpage.links
+-
+ tarball: $(DIST_DIR)/module-init-tools-$(VERSION).tar.gz
+
+ $(DIST_DIR)/module-init-tools-$(VERSION).tar.gz: dist
diff --git a/abs/core/klibc-udev/PKGBUILD b/abs/core/klibc-udev/PKGBUILD
new file mode 100644
index 0000000..baad6d4
--- /dev/null
+++ b/abs/core/klibc-udev/PKGBUILD
@@ -0,0 +1,58 @@
+# $Id: PKGBUILD 5858 2008-07-21 18:47:23Z thomas $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=klibc-udev
+pkgver=116
+pkgrel=13
+pkgdesc="udevd compiled under klibc"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
+groups=('base')
+depends=('coreutils' 'klibc' $(basename /lib/klibc-*.so .so))
+license=('GPL')
+source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-$pkgver.tar.bz2 \
+ udev_hook udev_install start_udev udev.rules load-modules.sh \
+ vol_id-suspend2.patch)
+md5sums=('02c49d93ffda4a104c853c082138b835'
+ 'bcfed63882660e7d33f367d722e0a5c9'
+ '92b62124dd43d61a2e610c305bf95d15'
+ '22741baf8f5d7d8bc88022b39bca74d8'
+ 'f50bd6b378a5e75b2475bc67b32cb692'
+ '1ecfeec15e88485e88f2e37f46861f2e'
+ '80f75fc9a8fc32c7b8ff146d53bf579f')
+
+build()
+{
+ cd $startdir/src/udev-$pkgver
+ patch -p1 -i ${startdir}/src/vol_id-suspend2.patch || return 1
+ sed -i "s|USE_LOG = .*|USE_LOG = false|g" Makefile
+
+ #I need to look at this... it appears the __CTYPE_NO_INLINE may be a klibc issue - aaron
+ make VOLUME_ID_STATIC=true CC=klcc LD=klcc PROGRAMS="udevd udevsettle udevtrigger" \
+ CFLAGS="$CFLAGS -U__CTYPE_NO_INLINE" \
+ EXTRAS="extras/firmware extras/cdrom_id extras/ata_id \
+ extras/edd_id extras/usb_id extras/volume_id" \
+ || return 1
+
+ mkdir -p $startdir/pkg/lib/initcpio/udev
+ install -m755 udevd $startdir/pkg/lib/initcpio/udev
+ install -m755 udevtrigger $startdir/pkg/lib/initcpio/udev
+ install -m755 udevsettle $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/firmware/firmware.sh $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/cdrom_id/cdrom_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/ata_id/ata_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/edd_id/edd_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/scsi_id/scsi_id $startdir/pkg/lib/initcpio/udev
+ install -m755 extras/usb_id/usb_id $startdir/pkg/lib/initcpio/udev
+ # broken atm
+ install -m755 extras/volume_id/vol_id $startdir/pkg/lib/initcpio/udev
+ #install -m755 extras/path_id/path_id $startdir/pkg/lib/initcpio/udev
+ install -m755 $startdir/src/start_udev $startdir/pkg/lib/initcpio/udev
+ install -m644 $startdir/src/udev.rules $startdir/pkg/lib/initcpio/udev
+ install -m755 $startdir/src/load-modules.sh $startdir/pkg/lib/initcpio/udev
+
+ mkdir -p $startdir/pkg/lib/initcpio/install
+ install -m644 $startdir/src/udev_install $startdir/pkg/lib/initcpio/install/udev
+ mkdir -p $startdir/pkg/lib/initcpio/hooks/
+ install -m644 $startdir/src/udev_hook $startdir/pkg/lib/initcpio/hooks/udev
+}
diff --git a/abs/core/klibc-udev/klibc-remove-revert.patch b/abs/core/klibc-udev/klibc-remove-revert.patch
new file mode 100644
index 0000000..8d9484f
--- /dev/null
+++ b/abs/core/klibc-udev/klibc-remove-revert.patch
@@ -0,0 +1,111 @@
+### Archlinux revert
+### revert this patch, crazy udev devs
+From: Kay Sievers <kay.sievers@suse.de>
+Date: Fri, 4 Aug 2006 22:02:58 +0000 (+0200)
+Subject: libvolume_id: read ufs2 label
+X-Git-Tag: 097
+X-Git-Url: http://www.kernel.org/git/?p=linux/hotplug/udev.git;a=commitdiff;h=eb82b76dedc1482b6434c46fee84d3ef13cb9648
+
+libvolume_id: read ufs2 label
+
+Taken from the FreeBSD HAL repository.
+---
+
+--- a/Makefile
++++ b/Makefile
+@@ -33,6 +33,9 @@ USE_GCOV = false
+ # include Security-Enhanced Linux support
+ USE_SELINUX = false
+
++# comile with klibc instead of glibc
++USE_KLIBC = false
++
+ # set this to create statically linked binaries
+ USE_STATIC = false
+
+@@ -139,6 +142,12 @@ ifeq ($(strip $(USE_GCOV)),true)
+ LDFLAGS += -fprofile-arcs
+ endif
+
++ifeq ($(strip $(USE_KLIBC)),true)
++ KLCC = /usr/bin/$(CROSS_COMPILE)klcc
++ CC = $(KLCC)
++ LD = $(KLCC)
++endif
++
+ ifeq ($(strip $(USE_SELINUX)),true)
+ UDEV_OBJS += udev_selinux.o
+ LIB_OBJS += -lselinux -lsepol
+--- a/README
++++ b/README
+@@ -69,6 +69,10 @@ Compile Options:
+ USE_SELINUX
+ If set to 'true', udev will be built with SELinux support
+ enabled. This is disabled by default.
++ USE_KLIBC
++ If set to 'true', udev is built and linked against klibc.
++ Default value is 'false'. KLCC specifies the klibc compiler
++ wrapper, usually located at /usr/bin/klcc.
+ EXTRAS
+ list of helper programs in extras/ to build.
+ make EXTRAS="extras/cdrom_id extras/scsi_id extras/volume_id"
+--- a/extras/scsi_id/scsi_id.c
++++ b/extras/scsi_id/scsi_id.c
+@@ -402,7 +402,8 @@ static int set_options(int argc, char **
+ /*
+ * optind is a global extern used by getopt. Since we can call
+ * set_options twice (once for command line, and once for config
+- * file) we have to reset this back to 1.
++ * file) we have to reset this back to 1. [Note glibc handles
++ * setting this to 0, but klibc does not.]
+ */
+ optind = 1;
+ while (1) {
+--- a/test/simple-build-check.sh
++++ b/test/simple-build-check.sh
+@@ -23,6 +23,14 @@ make clean EXTRAS="$EXTRAS" >/dev/null
+ make all $MAKEOPTS USE_LOG=false EXTRAS="$EXTRAS" || exit
+ echo -e "\n\n"
+
++# klibc build
++if [ -n "$KLCC" -a -e "$KLCC" ]; then
++ echo KLCC: "$KLCC"
++ make clean EXTRAS="$EXTRAS" >/dev/null
++ make all -j4 $MAKEOPTS USE_KLIBC=true DEBUG=true EXTRAS="$EXTRAS" KLCC="$KLCC" || exit
++ echo -e "\n\n"
++fi
++
+ # install in temporary dir and show it
+ TEMPDIR="`pwd`/.tmp"
+ rm -rf $TEMPDIR
+--- a/udev_libc_wrapper.c
++++ b/udev_libc_wrapper.c
+@@ -30,7 +30,7 @@
+
+ #include "udev.h"
+
+-#ifndef __GLIBC__
++#ifdef __KLIBC__
+ #define __OWN_USERDB_PARSER__
+ #endif
+
+--- a/udev_libc_wrapper.h
++++ b/udev_libc_wrapper.h
+@@ -105,7 +105,7 @@ static inline int inotify_add_watch(int
+ }
+ #else
+ /* needed until /usr/include/sys/inotify.h is working */
+-#ifndef __GLIBC__
++#ifdef __KLIBC__
+ #include <sys/inotify.h>
+ #else
+ static inline int inotify_init(void)
+@@ -117,7 +117,7 @@ static inline int inotify_add_watch(int
+ {
+ return syscall(__NR_inotify_add_watch, fd, name, mask);
+ }
+-#endif /* __GLIBC__ */
++#endif /* __KLIBC__ */
+ #endif /* __NR_inotify_init */
+
+ #ifndef IN_CREATE
diff --git a/abs/core/klibc-udev/load-modules.sh b/abs/core/klibc-udev/load-modules.sh
new file mode 100755
index 0000000..f0961a7
--- /dev/null
+++ b/abs/core/klibc-udev/load-modules.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Implement blacklisting for udev-loaded modules
+# Includes module checking
+# - Aaron Griffin & Tobias Powalowski for Archlinux
+[ $# -ne 1 ] && exit 1
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+fi
+
+# get the real names from modaliases
+i="$(/bin/moddeps $1)"
+# add disablemodules= from commandline to blacklist
+k="$(/bin/replace "${disablemodules}" ',')"
+j="$(/bin/replace "${k}" '-' '_')"
+
+if [ "${j}" != "" ] ; then
+ for n in ${i}; do
+ for o in ${j}; do
+ if [ "$n" = "$o" ]; then
+ exit 1
+ fi
+ done
+ done
+fi
+/sbin/modprobe $1
+
+# vim: set et ts=4:
diff --git a/abs/core/klibc-udev/post-107.patch b/abs/core/klibc-udev/post-107.patch
new file mode 100644
index 0000000..cb6e618
--- /dev/null
+++ b/abs/core/klibc-udev/post-107.patch
@@ -0,0 +1,176 @@
+From: Matthias Schwarzott <zzam@gentoo.org>
+Date: Thu, 22 Mar 2007 20:05:56 +0000 (+0100)
+Subject: write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=491a6a71ff685373422621f4b67f550806072d17
+
+write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices
+---
+
+diff --git a/extras/rule_generator/write_cd_rules b/extras/rule_generator/write_cd_rules
+index 1dbe6b7..bd951c5 100644
+--- a/extras/rule_generator/write_cd_rules
++++ b/extras/rule_generator/write_cd_rules
+@@ -53,7 +53,15 @@ fi
+ if [ "$1" ]; then
+ METHOD="$1"
+ else
+- METHOD='by-path'
++ case "$ID_BUS" in
++ usb|ieee1394)
++ METHOD='by-id'
++ ;;
++
++ *)
++ METHOD='by-path'
++ ;;
++ esac
+ fi
+
+ case "$METHOD" in
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 23 Mar 2007 16:17:18 +0000 (+0100)
+Subject: udevinfo: relax check for the correct device if looked up by name
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=be8594ab14f15203fcea4b2aa0115171472f3e43
+
+udevinfo: relax check for the correct device if looked up by name
+---
+
+diff --git a/udev_db.c b/udev_db.c
+index 00d68d6..7b8d02b 100644
+--- a/udev_db.c
++++ b/udev_db.c
+@@ -186,7 +186,7 @@ int udev_db_get_device(struct udevice *udev, const char *devpath)
+ size_t cur;
+ size_t count;
+
+- strlcpy(udev->dev->devpath, devpath, sizeof(udev->dev->devpath));
++ sysfs_device_set_values(udev->dev, devpath, NULL, NULL);
+ devpath_to_db_path(devpath, filename, sizeof(filename));
+
+ if (lstat(filename, &stats) != 0) {
+diff --git a/udevinfo.c b/udevinfo.c
+index 3f25be0..4b4876c 100644
+--- a/udevinfo.c
++++ b/udevinfo.c
+@@ -173,13 +173,17 @@ static void export_db(void) {
+ static int lookup_device_by_name(struct udevice *udev, const char *name)
+ {
+ LIST_HEAD(name_list);
++ int count;
+ struct name_entry *device;
+ int rc = -1;
+
+- if (udev_db_get_devices_by_name(name, &name_list) <= 0)
++ count = udev_db_get_devices_by_name(name, &name_list);
++ if (count <= 0)
+ goto out;
+
+- /* select the device that matches the dev_t of name */
++ info("found %i devices for '%s'", count, name);
++
++ /* select the device that seems to match */
+ list_for_each_entry(device, &name_list, node) {
+ char filename[PATH_SIZE];
+ struct stat statbuf;
+@@ -189,16 +193,18 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
+ continue;
+ info("found db entry '%s'", device->name);
+
++ /* make sure, we don't get a link of a differnt device */
+ strlcpy(filename, udev_root, sizeof(filename));
+ strlcat(filename, "/", sizeof(filename));
+ strlcat(filename, name, sizeof(filename));
+ if (stat(filename, &statbuf) != 0)
+ continue;
+- if (statbuf.st_rdev == udev->devt) {
+- info("found '%s', dev_t matches", udev->name);
+- rc = 0;
+- break;
++ if (major(udev->devt) > 0 && udev->devt != statbuf.st_rdev) {
++ info("skip '%s', dev_t doesn't match", udev->name);
++ continue;
+ }
++ rc = 0;
++ break;
+ }
+ out:
+ name_list_cleanup(&name_list);
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 23 Mar 2007 16:18:03 +0000 (+0100)
+Subject: don't write to sysfs files during test run
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=d2c9a56e0e624ed448aed8ad18460deed63973e1
+
+don't write to sysfs files during test run
+---
+
+diff --git a/udev_rules.c b/udev_rules.c
+index f8844a8..5078f2d 100644
+--- a/udev_rules.c
++++ b/udev_rules.c
+@@ -861,8 +861,9 @@ try_parent:
+ info("writing '%s' to sysfs file '%s'", value, attr);
+ f = fopen(attr, "w");
+ if (f != NULL) {
+- if (fprintf(f, "%s", value) <= 0)
+- err("error writing ATTR{%s}: %s", attr, strerror(errno));
++ if (!udev->test_run)
++ if (fprintf(f, "%s", value) <= 0)
++ err("error writing ATTR{%s}: %s", attr, strerror(errno));
+ fclose(f);
+ } else
+ err("error opening ATTR{%s} for writing: %s", attr, strerror(errno));
+From: Pozsar Balazs <pozsy@uhulinux.hu>
+Date: Fri, 23 Mar 2007 16:21:46 +0000 (+0100)
+Subject: udevsettle: read udev not kernel seqnum first
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=4e2b290821d083361260f8cdbe7c54886463673e
+
+udevsettle: read udev not kernel seqnum first
+---
+
+diff --git a/udevsettle.c b/udevsettle.c
+index 9e3e03b..f76ad71 100644
+--- a/udevsettle.c
++++ b/udevsettle.c
+@@ -110,9 +110,9 @@ int main(int argc, char *argv[], char *envp[])
+ goto exit;
+ }
+
+- /* read current kernel seqnum */
+- strlcpy(filename, sysfs_path, sizeof(filename));
+- strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename));
++ /* read current udev seqnum */
++ strlcpy(filename, udev_root, sizeof(filename));
++ strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ goto exit;
+@@ -121,12 +121,12 @@ int main(int argc, char *argv[], char *envp[])
+ if (len <= 0)
+ goto exit;
+ seqnum[len] = '\0';
+- seq_kernel = strtoull(seqnum, NULL, 10);
+- info("kernel seqnum = %llu", seq_kernel);
++ seq_udev = strtoull(seqnum, NULL, 10);
++ info("udev seqnum = %llu", seq_udev);
+
+- /* read current udev seqnum */
+- strlcpy(filename, udev_root, sizeof(filename));
+- strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
++ /* read current kernel seqnum */
++ strlcpy(filename, sysfs_path, sizeof(filename));
++ strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename));
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ goto exit;
+@@ -135,8 +135,8 @@ int main(int argc, char *argv[], char *envp[])
+ if (len <= 0)
+ goto exit;
+ seqnum[len] = '\0';
+- seq_udev = strtoull(seqnum, NULL, 10);
+- info("udev seqnum = %llu", seq_udev);
++ seq_kernel = strtoull(seqnum, NULL, 10);
++ info("kernel seqnum = %llu", seq_kernel);
+
+ /* make sure all kernel events have arrived in the queue */
+ if (seq_udev >= seq_kernel) {
+
diff --git a/abs/core/klibc-udev/start_udev b/abs/core/klibc-udev/start_udev
new file mode 100755
index 0000000..8503bb9
--- /dev/null
+++ b/abs/core/klibc-udev/start_udev
@@ -0,0 +1,115 @@
+#! /bin/sh
+#
+# start_udev
+# script to initialize /dev by using udev.
+#
+# Modified for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# Inspired by:
+#
+# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+#
+# Released under the GPL v2 only.
+#
+# This needs to be run at the earliest possible point in the boot
+# process.
+#
+# Based on the udev init.d script
+#
+# Thanks go out to the Gentoo developers for proving
+# that this is possible to do.
+#
+# Yes, it's very verbose, feel free to turn off all of the echo calls,
+# they were there to make me feel better that everything was working
+# properly during development...
+
+prog=udev
+sysfs_dir=/sys
+bin=/sbin/udev
+udevd=/sbin/udevd
+udev_root="/dev"
+
+trigger_device_events ()
+{
+ /sbin/udevtrigger
+}
+
+wait_for_queue ()
+{
+ # disabled because it hangs network boot
+ #loop=20
+ #while ! [ "$loop" -gt 0 -a -d /dev/.udev/queue ]; do
+ # sleep 0.1;
+ # loop=$(($loop - 1))
+ #done
+ /sbin/udevsettle
+}
+
+make_extra_nodes ()
+{
+ # there are a few things that sysfs does not export for us.
+ # these things go here (and remember to remove them in
+ # remove_extra_nodes()
+ #
+ # Thanks to Gentoo for the initial list of these.
+ ln -sf /proc/self/fd $udev_root/fd
+ ln -sf /proc/self/fd/0 $udev_root/stdin
+ ln -sf /proc/self/fd/1 $udev_root/stdout
+ ln -sf /proc/self/fd/2 $udev_root/stderr
+ ln -sf /proc/kcore $udev_root/core
+}
+
+udev_init ()
+{
+# don't use udev if sysfs is not mounted.
+if [ ! -d $sysfs_dir/block ]; then
+ exit 1
+fi
+
+# Do not mount ramfs, we are already in ramfs
+#mount -t ramfs none $udev_root
+
+# propogate /udev from /sys
+#echo "Creating initial udev device nodes:"
+
+#echo "making extra nodes"
+make_extra_nodes
+
+# check if udevd is already running
+#echo "start udev daemon"
+/sbin/udevd --daemon
+
+case "$(uname -r)" in
+ 2.6.[0-9]|2.6.[0-9][!0-9]*) ;;
+ *) if [ -f "/sys/class/tty/console/uevent" ]; then
+ #echo "Kernel >= 2.6.15 and supports uevents"
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ # catch events that are real fast
+ mkdir -p /dev/.udev/queue
+ else
+ # for older kernels without uevents will be removed when udevstart dies in udev
+ echo "Kernel does not support uevents, you need a kernel >= 2.6.15!"
+ exit 1
+ fi
+ ;;
+esac
+}
+
+udev_uevents ()
+{
+# configure all devices
+trigger_device_events
+# until we know how to do better, just wait for _all_ events to finish
+wait_for_queue
+}
+
+if [ $# -eq 0 ]; then
+udev_init
+udev_uevents
+fi
+
+[ "$1" = "init" ] && udev_init
+[ "$1" = "uevents" ] && udev_uevents
+
+exit 0
diff --git a/abs/core/klibc-udev/udev.rules b/abs/core/klibc-udev/udev.rules
new file mode 100644
index 0000000..22f422a
--- /dev/null
+++ b/abs/core/klibc-udev/udev.rules
@@ -0,0 +1,187 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+# Early rules - begin
+#####################################
+# wait for sysfs
+ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
+# Setting timeout for tape-devices (type 1) to 900 seconds
+# and 60 seconds for device types 0, 7 and 14
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+#####################################
+# Early rules -end
+#####################################
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+
+# Modaliases to load
+ACTION=="add", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+# SCSI addon modules
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[23689]", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg"
+ACTION=="add", SUBSYSTEM=="mmc", RUN+="/lib/udev/load-modules.sh mmc_block"
+
+LABEL="hotplug_driver_loaded"
+
+# FIRMWARE
+ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", RUN+="/lib/udev/firmware.sh"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+#####################################
+##### PCMCIA rules - begin
+#####################################
+# PCMCIA devices:
+#
+
+# Very few CIS firmware entries (which we use for matching)
+# are so broken that we need to read out random bytes of it
+# instead of the manufactor, card or product ID. Then the
+# matching is done in userspace.
+ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/sbin/pcmcia-check-broken-cis.static"
+
+# However, the "weak" matching by func_id is only allowed _after_ modprobe
+# returns, so that "strong" matches have a higher priority.
+ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/allow_func_id_match'"
+
+# PCMCIA sockets:
+#
+# modprobe the pcmcia bus module so that 16-bit PCMCIA devices work
+ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/lib/udev/load-modules.sh pcmcia"
+
+# if this is a PCMCIA socket which needs a resource database,
+# pcmcia-socket-startup sets it up
+ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/sbin/pcmcia-socket-startup.static"
+#####################################
+##### PCMCIA rules - end
+#####################################
+
+#######################################
+# Persistant block device stuff - begin
+#######################################
+# persistent storage links: /dev/{disk,tape}/{by-id,by-uuid,by-label,by-path,by-name}
+# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+# needed like this!!!
+ACTION!="add|change", GOTO="persistent_storage_end"
+#KERNEL=="nst[0-9]", SUBSYSTEMS=="scsi", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
+
+# type 8 devices are "Medium Changers"
+#KERNEL=="sg*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+# skip rules for inappropriate block devices
+# don't add dm-*!!!
+KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+# never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_storage_end"
+
+# ignore partitions that span the entire disk
+ATTR{whole_disk}=="*", GOTO="persistent_storage_end"
+
+# /sys/class/block will export this
+ENV{DEVTYPE}!="?*", ATTR{range}=="?*", ENV{DEVTYPE}="disk"
+ENV{DEVTYPE}!="?*", ATTR{start}=="?*", ENV{DEVTYPE}="partition"
+
+# for partitions import parent information
+ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
+
+# by-id (hardware serial number)
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}"
+KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n"
+
+KERNEL=="sd*[!0-9]|sr*|st*", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_SUBSYSTEMS}="ieee1394"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export %p"
+#KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode"
+#KERNEL=="cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --ignore-sysfs -s %p -d $tempnode", ENV{ID_BUS}="cciss"
+KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
+KERNEL=="st*", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+
+# libata compat (links like hd*)
+KERNEL=="sd*[!0-9]|sr*", ENV{ID_VENDOR}=="ATA", PROGRAM="/lib/udev/ata_id $tempnode", RESULT=="?*", ENV{ID_ATA_COMPAT}="$result", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}"
+KERNEL=="sd*[0-9]", ENV{ID_ATA_COMPAT}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}-part%n"
+
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n"
+
+# by-path (shortest physical path) broken atm
+#ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/path_id %p"
+#ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
+#ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
+#KERNEL=="st*", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}"
+
+KERNEL=="sr*|st*", GOTO="persistent_storage_end"
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
+
+# by-label/by-uuid (filesystem properties)
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+# BIOS Enhanced Disk Device
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/edd_id --export $tempnode"
+ENV{DEVTYPE}=="disk", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}"
+ENV{DEVTYPE}=="partition", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n"
+LABEL="persistent_storage_end"
+
+# md links hook into "change" events, when the array becomes available
+KERNEL!="md[0-9]*", GOTO="md_end"
+ACTION!="add|change", GOTO="md_end"
+
+ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+OPTIONS="link_priority=100"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}""
+
+LABEL="md_end"
+#####################################
+# Persistant block device stuff - end
+#####################################
diff --git a/abs/core/klibc-udev/udev_hook b/abs/core/klibc-udev/udev_hook
new file mode 100644
index 0000000..fc4c814
--- /dev/null
+++ b/abs/core/klibc-udev/udev_hook
@@ -0,0 +1,7 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ msg -n ":: Loading udev..."
+ /etc/start_udev
+ msg "done."
+}
diff --git a/abs/core/klibc-udev/udev_install b/abs/core/klibc-udev/udev_install
new file mode 100644
index 0000000..62d5b00
--- /dev/null
+++ b/abs/core/klibc-udev/udev_install
@@ -0,0 +1,31 @@
+# vim:set ft=sh:
+
+install ()
+{
+ MODULES=""
+ BINARIES=""
+ FILES=" /etc/udev/udev.conf"
+ SCRIPT="udev"
+ add_file /lib/initcpio/udev/udevd /sbin/udevd
+ add_file /lib/initcpio/udev/udevtrigger /sbin/udevtrigger
+ add_file /lib/initcpio/udev/udevsettle /sbin/udevsettle
+ add_file /lib/initcpio/udev/udev.rules /etc/udev/rules.d/udev.rules
+ add_file /lib/initcpio/udev/start_udev /etc/start_udev
+ add_file /lib/initcpio/udev/firmware.sh /lib/udev/firmware.sh
+ add_file /lib/initcpio/udev/cdrom_id /lib/udev/cdrom_id
+ add_file /lib/initcpio/udev/ata_id /lib/udev/ata_id
+ add_file /lib/initcpio/udev/usb_id /lib/udev/usb_id
+ add_file /lib/initcpio/udev/edd_id /lib/udev/edd_id
+ #add_file /lib/initcpio/udev/scsi_id /lib/udev/scsi_id
+ add_file /lib/initcpio/udev/vol_id /lib/udev/vol_id
+ add_file /lib/initcpio/udev/load-modules.sh /lib/udev/load-modules.sh
+}
+
+help ()
+{
+cat <<HELPEOF
+ This hook will use udev to create your root device node
+ and detect the needed modules for your root device.
+ It is recommended to use this hook instead of modload.
+HELPEOF
+}
diff --git a/abs/core/klibc-udev/vol_id-suspend2.patch b/abs/core/klibc-udev/vol_id-suspend2.patch
new file mode 100644
index 0000000..525e17e
--- /dev/null
+++ b/abs/core/klibc-udev/vol_id-suspend2.patch
@@ -0,0 +1,15 @@
+diff -Nur udev-103.orig/extras/volume_id/lib/linux_swap.c udev-103/extras/volume_id/lib/linux_swap.c
+--- udev-103.orig/extras/volume_id/lib/linux_swap.c 2006-10-20 14:43:35.000000000 +0200
++++ udev-103/extras/volume_id/lib/linux_swap.c 2006-10-29 17:15:19.000000000 +0100
+@@ -73,6 +73,11 @@
+ strcpy(id->type_version, "ulsuspend");
+ goto found_label;
+ }
++ if (memcmp(buf, "z", 1) == 0 || memcmp(buf, "Z", 1) == 0) {
++ id->type = "suspend";
++ strcpy(id->type_version, "suspend2");
++ goto found_label;
++ }
+ }
+ return -1;
+
diff --git a/abs/core/klibc/PKGBUILD b/abs/core/klibc/PKGBUILD
new file mode 100644
index 0000000..a65d119
--- /dev/null
+++ b/abs/core/klibc/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 5849 2008-07-21 18:46:34Z thomas $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+###
+### NOTE: Do not build this package with anything except gcc - using ccache
+### forces others to use it as well as it becomes hardcoded in the klibc
+### script.
+###
+
+pkgname=klibc
+pkgver=1.5
+_klibcbranch=Stable #Stable/Testing
+_kver=2.6.26-ARCH
+pkgrel=15
+pkgdesc="A minimal libc made for early-userspace"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/libs/klibc/"
+license=('BSD')
+groups=('base')
+options=(!ccache !strip)
+source=(http://www.kernel.org/pub/linux/libs/klibc/$_klibcbranch/$pkgname-$pkgver.tar.gz
+ multiple_raid_assembly_fix.patch
+ klibc-compile-shared-by-default.patch
+ klibc-module-init-tools.patch
+ klibc-2.6.24.patch
+ klibc-Kbuild.patch)
+md5sums=('d55ce89c0656a7d6896ec0b2af07b5dc'
+ '8d257d50a4554d57b8f461c6a87a2877'
+ 'c263a7c3fd290fcc84a4e230d456d022'
+ '4d78311ebce63f2fbb711f8518e71839'
+ 'a98b3e96aff53339572ed0bdccc8aed2'
+ 'c928be0153585a487b72a7eb5dfa8b13')
+
+build()
+{
+ cd $startdir/src/$pkgname-$pkgver
+ #INI_DEBUG causes ipconfig to fail within kinit
+ sed -i "/#define INI_DEBUG/d" usr/kinit/kinit.h || return 1
+ ln -sf /usr/src/linux-${_kver} linux
+
+ patch -p1 -i ../multiple_raid_assembly_fix.patch || return 1
+ # make klibc-module-init-tools compile
+ # don't build insmod
+ patch -p1 -i ../klibc-module-init-tools.patch || return 1
+ # compile binaries shared by default
+ patch -p1 -i ../klibc-compile-shared-by-default.patch || return 1
+ # fix compilation on 2.6.24
+ patch -p1 -i ../klibc-2.6.24.patch || return 1
+ # don't build kill, gzip and cpio
+ patch -p1 -i ../klibc-Kbuild.patch || return 1
+
+ make EXTRA_KLIBCFLAGS='' || return 1
+ make INSTALLROOT=$startdir/pkg install || return 1
+ #simplify
+ mv $startdir/pkg/usr/lib/klibc/bin/sh.shared $startdir/pkg/usr/lib/klibc/bin/sh
+ mv $startdir/pkg/usr/lib/klibc/bin/kinit.shared $startdir/pkg/usr/lib/klibc/bin/kinit
+ ln -sf asm-x86 $startdir/pkg/usr/lib/klibc/include/asm
+
+ provides[${#provides[@]}]="$(basename $startdir/pkg/lib/klibc-*.so .so)"
+ export provides
+}
diff --git a/abs/core/klibc/klibc-2.6.24.patch b/abs/core/klibc/klibc-2.6.24.patch
new file mode 100644
index 0000000..2527699
--- /dev/null
+++ b/abs/core/klibc/klibc-2.6.24.patch
@@ -0,0 +1,44 @@
+unchanged:
+--- klibc-1.5.orig/usr/klibc/arch/i386/MCONFIG 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/klibc/arch/i386/MCONFIG 2008-01-27 16:06:08.000000000 +0100
+@@ -31,3 +31,4 @@
+ # calls, and work on the memory models for this architecture
+ # 96 MB - normal binaries start at 128 MB
+ KLIBCSHAREDFLAGS = -Ttext 0x06000200
++KLIBCASMARCH = x86
+unchanged:
+--- klibc-1.5.orig/usr/klibc/arch/x86_64/MCONFIG 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/klibc/arch/x86_64/MCONFIG 2008-01-27 16:05:43.000000000 +0100
+@@ -36,4 +36,4 @@
+ KLIBCSHAREDFLAGS = -Ttext 0x00200200 -z max-page-size=0x100000
+
+ # Additional asm- directories needed during installation
+-ASMARCH = asm-i386
++KLIBCASMARCH = x86
+only in patch2:
+unchanged:
+--- a/scripts/Kbuild.install 2007-03-04 02:52:10.000000000 +0100
++++ b/scripts/Kbuild.install 2007-11-04 15:43:28.000000000 +0100
+@@ -84,6 +84,13 @@
+ # 1) Create directories, install headers and man pages
+ # 2) Tell that we now install binaries
+ # 3) Install binaries by descending
++
++# Arch specific definitions for klibc
++include $(KLIBCSRC)/arch/$(KLIBCARCHDIR)/MCONFIG
++
++# include/asm-* architecture
++KLIBCASMARCH ?= $(KLIBCARCH)
++
+ .PHONY: header footer descend
+ header:
+ $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)"
+@@ -95,7 +102,7 @@
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+- $(Q)set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \
++ $(Q)set -e ; for d in linux scsi asm-$(KLIBCASMARCH) asm-generic $(ASMKLIBCARCH); do \
+ mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)include/$$d ; \
+ for r in $(KLIBCKERNELSRC)/include $(KLIBCKERNELOBJ)/include \
+ $(KLIBCKERNELOBJ)/include2 ; do \
diff --git a/abs/core/klibc/klibc-Kbuild.patch b/abs/core/klibc/klibc-Kbuild.patch
new file mode 100644
index 0000000..93a95da
--- /dev/null
+++ b/abs/core/klibc/klibc-Kbuild.patch
@@ -0,0 +1,41 @@
+diff -Nur klibc-1.5.orig/Kbuild klibc-1.5/Kbuild
+--- klibc-1.5.orig/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/Kbuild 2008-05-14 12:45:02.000000000 +0200
+@@ -10,9 +10,8 @@
+ $(Q)$(MAKE) $(klibc)=usr/kinit
+ $(Q)$(MAKE) $(klibc)=usr/dash
+ $(Q)$(MAKE) $(klibc)=usr/utils
+- $(Q)$(MAKE) $(klibc)=usr/gzip
+
+
+ # Directories to visit during clean and install
+-subdir- := scripts/basic klcc usr/klibc usr/dash usr/utils usr/gzip \
++subdir- := scripts/basic klcc usr/klibc usr/dash usr/utils \
+ usr/kinit usr/klibc/tests
+diff -Nur klibc-1.5.orig/usr/Kbuild klibc-1.5/usr/Kbuild
+--- klibc-1.5.orig/usr/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/Kbuild 2008-05-14 12:45:02.000000000 +0200
+@@ -6,7 +6,7 @@
+
+ include-subdir := include
+ klibc-subdir := klibc
+-usr-subdirs := kinit utils dash gzip
++usr-subdirs := kinit utils dash
+ subdir- := $(include-subdir) $(klibc-subdir) $(usr-subdirs)
+
+ usr-subdirs := $(addprefix _usr_,$(usr-subdirs))
+diff -Nur klibc-1.5.orig/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild
+--- klibc-1.5.orig/usr/utils/Kbuild 2008-05-14 12:44:47.000000000 +0200
++++ klibc-1.5/usr/utils/Kbuild 2008-05-14 12:45:20.000000000 +0200
+@@ -2,9 +2,9 @@
+ # Kbuild file for klib utils
+ #
+
+-progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
++progs := chroot dd mkdir mkfifo mount pivot_root umount
+ progs += true false sleep ln nuke minips cat
+-progs += uname halt kill readlink cpio
++progs += uname halt readlink
+
+ static-y := $(addprefix static/, $(progs))
+ shared-y := $(addprefix shared/, $(progs))
diff --git a/abs/core/klibc/klibc-compile-shared-by-default.patch b/abs/core/klibc/klibc-compile-shared-by-default.patch
new file mode 100644
index 0000000..e144c3e
--- /dev/null
+++ b/abs/core/klibc/klibc-compile-shared-by-default.patch
@@ -0,0 +1,12 @@
+diff -Nur klibc-1.5.orig/klcc/klcc.in klibc-1.5/klcc/klcc.in
+--- klibc-1.5.orig/klcc/klcc.in 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/klcc/klcc.in 2007-10-31 09:20:34.000000000 +0100
+@@ -113,7 +113,7 @@
+
+ $save_temps = 0; # The -save-temps option
+ $verbose = 0; # The -v option
+-$shared = 0; # Are we compiling shared?
++$shared = 1; # Are we compiling shared?
+ $debugging = 0; # -g or -p option present?
+ $strip = 0; # -s option present?
+ undef $output; # -o option present?
diff --git a/abs/core/klibc/klibc-module-init-tools.patch b/abs/core/klibc/klibc-module-init-tools.patch
new file mode 100644
index 0000000..a5e4532
--- /dev/null
+++ b/abs/core/klibc/klibc-module-init-tools.patch
@@ -0,0 +1,63 @@
+diff -Nur klibc-1.5.orig/usr/include/sys/elf32.h klibc-1.5/usr/include/sys/elf32.h
+--- klibc-1.5.orig/usr/include/sys/elf32.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elf32.h 2007-10-31 09:18:09.000000000 +0100
+@@ -110,4 +110,8 @@
+ Elf32_Word n_type; /* Content type */
+ } Elf32_Nhdr;
+
++/* How to extract and insert information held in the st_info field. */
++#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
++#define ELF32_ST_TYPE(val) ((val) & 0xf)
++
+ #endif /* _SYS_ELF32_H */
+diff -Nur klibc-1.5.orig/usr/include/sys/elf64.h klibc-1.5/usr/include/sys/elf64.h
+--- klibc-1.5.orig/usr/include/sys/elf64.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elf64.h 2007-10-31 09:18:09.000000000 +0100
+@@ -110,4 +110,8 @@
+ Elf64_Word n_type; /* Content type */
+ } Elf64_Nhdr;
+
++/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
++#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
++#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
++
+ #endif /* _SYS_ELF64_H */
+diff -Nur klibc-1.5.orig/usr/include/sys/elfcommon.h klibc-1.5/usr/include/sys/elfcommon.h
+--- klibc-1.5.orig/usr/include/sys/elfcommon.h 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/include/sys/elfcommon.h 2007-10-31 09:18:09.000000000 +0100
+@@ -184,4 +184,14 @@
+ #define ELFOSABI_NONE 0
+ #define ELFOSABI_LINUX 3
+
++/* Legal values for ST_BIND subfield of st_info (symbol binding). */
++#define STB_LOCAL 0 /* Local symbol */
++#define STB_GLOBAL 1 /* Global symbol */
++#define STB_WEAK 2 /* Weak symbol */
++#define STB_NUM 3 /* Number of defined types. */
++#define STB_LOOS 10 /* Start of OS-specific */
++#define STB_HIOS 12 /* End of OS-specific */
++#define STB_LOPROC 13 /* Start of processor-specific */
++#define STB_HIPROC 15 /* End of processor-specific */
++
+ #endif /* _SYS_ELFCOMMON_H */
+diff -Nur klibc-1.5.orig/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild
+--- klibc-1.5.orig/usr/utils/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/utils/Kbuild 2007-10-31 09:18:28.000000000 +0100
+@@ -4,7 +4,7 @@
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+ progs += true false sleep ln nuke minips cat
+-progs += insmod uname halt kill readlink cpio
++progs += uname halt kill readlink cpio
+
+ static-y := $(addprefix static/, $(progs))
+ shared-y := $(addprefix shared/, $(progs))
+@@ -40,8 +40,6 @@
+ shared/minips-y := minips.o
+ static/cat-y := cat.o
+ shared/cat-y := cat.o
+-static/insmod-y := insmod.o
+-shared/insmod-y := insmod.o
+ static/uname-y := uname.o
+ shared/uname-y := uname.o
+ static/halt-y := halt.o
diff --git a/abs/core/klibc/multiple_raid_assembly_fix.patch b/abs/core/klibc/multiple_raid_assembly_fix.patch
new file mode 100644
index 0000000..237a1db
--- /dev/null
+++ b/abs/core/klibc/multiple_raid_assembly_fix.patch
@@ -0,0 +1,20 @@
+--- a/usr/kinit/do_mounts_md.c 2006-07-31 21:16:01.000000000 -0500
++++ b/usr/kinit/do_mounts_md.c 2006-07-31 21:18:46.000000000 -0500
+@@ -228,6 +228,7 @@
+ char *devname;
+ mdu_disk_info_t dinfo;
+ char name[16];
++ struct stat st_chk;
+
+ dev_minor = md_setup_args[ent].minor;
+ partitioned = md_setup_args[ent].partitioned;
+@@ -236,6 +237,9 @@
+ snprintf(name, sizeof name,
+ "/dev/md%s%d", partitioned ? "_d" : "", dev_minor);
+
++ if (stat(name, &st_chk) == 0)
++ continue;
++
+ if (partitioned)
+ dev = makedev(mdp_major(), dev_minor << MdpMinorShift);
+ else
diff --git a/abs/core/lame/PKGBUILD b/abs/core/lame/PKGBUILD
new file mode 100644
index 0000000..7be3e87
--- /dev/null
+++ b/abs/core/lame/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4167 2008-07-04 18:00:32Z hugo $
+# Maintainer: Hugo Doria <hugo@archlinux.org>
+# Contributor: Hugo Doria <hugo@archlinux.org>
+pkgname=lame
+pkgver=3.98
+pkgrel=1
+pkgdesc="An MP3 encoder and graphical frame analyzer"
+arch=('i686' 'x86_64')
+url="http://lame.sourceforge.net/"
+depends=('ncurses')
+makedepends=('nasm')
+license=('LGPL')
+source=(http://downloads.sourceforge.net/sourceforge/lame/lame-398.tar.gz \
+ shared-frontend.patch)
+md5sums=('f44b9f8e1b5d8835d0a77f9cc9cedd1c' 'e7fc0e6d82dd35a01411be96fc8effab')
+
+build() {
+ cd $startdir/src/$pkgname-398
+ ./configure --prefix=/usr --enable-nasm --enable-shared
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/lame/shared-frontend.patch b/abs/core/lame/shared-frontend.patch
new file mode 100644
index 0000000..e5ae0a9
--- /dev/null
+++ b/abs/core/lame/shared-frontend.patch
@@ -0,0 +1,23 @@
+--- lame-3.96.1.orig/frontend/Makefile.am 2004-01-21 01:41:36.000000000 -0800
++++ lame-3.96.1/frontend/Makefile.am 2004-10-03 16:39:12.415901779 -0700
+@@ -50,7 +50,7 @@
+ endif
+
+ CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@
+-LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ -static
++LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@
+
+ INCLUDES = -I$(top_srcdir)/libmp3lame -I$(top_srcdir)/include -I$(top_builddir)
+
+diff -Naur lame-3.96.1.orig/frontend/Makefile.in lame-3.96.1/frontend/Makefile.in
+--- lame-3.96.1.orig/frontend/Makefile.in 2004-01-21 05:50:29.000000000 -0800
++++ lame-3.96.1/frontend/Makefile.in 2004-10-03 16:39:19.711701553 -0700
+@@ -91,7 +91,7 @@
+ $(top_builddir)/libmp3lame/libmp3lame.la \
+ @FRONTEND_LDADD@
+
+-LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ -static
++LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
diff --git a/abs/core/lcms/PKGBUILD b/abs/core/lcms/PKGBUILD
new file mode 100644
index 0000000..7e40429
--- /dev/null
+++ b/abs/core/lcms/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 9147 2008-08-17 04:15:31Z eric $
+# Maintainer: Tobias Kieslich <neri@archlinux.org>
+# Contributor: Ben <contrasutra@myrealbox.com>
+
+pkgname=lcms
+pkgver=1.17
+pkgrel=2
+pkgdesc="Lightweight color management development library/engine"
+arch=(i686 x86_64)
+license=('CUSTOM')
+depends=('libtiff')
+url="http://www.littlecms.com"
+options=('!libtool')
+source=(http://littlecms.com/${pkgname}-${pkgver}.tar.gz)
+md5sums=('07bdbb4cfb05d21caa58fe3d1c84ddc1')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -Dm 644 COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/less/PKGBUILD b/abs/core/less/PKGBUILD
new file mode 100644
index 0000000..b703def
--- /dev/null
+++ b/abs/core/less/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=less
+pkgver=418
+pkgrel=10
+pkgdesc="A terminal based program for viewing text files"
+license=('GPL3')
+arch=('i686' 'x86_64')
+url="http://www.greenwoodsoftware.com/less"
+groups=('base')
+depends=('ncurses' 'file')
+source=(http://www.greenwoodsoftware.com/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('b5864d76c54ddf4627fd57ab333c88b4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+ cd $startdir/pkg/usr/bin/
+ mkdir -p ../../bin
+ mv $pkgname ../../bin/
+}
diff --git a/abs/core/less/zless b/abs/core/less/zless
new file mode 100644
index 0000000..93d560b
--- /dev/null
+++ b/abs/core/less/zless
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+: ${PAGER=less}
+export PAGER
+
+PATH="/usr/bin:$PATH"
+export PATH
+
+exec zmore ${1+"$@"}
diff --git a/abs/core/libao/ChangeLog b/abs/core/libao/ChangeLog
new file mode 100644
index 0000000..37e4a78
--- /dev/null
+++ b/abs/core/libao/ChangeLog
@@ -0,0 +1,5 @@
+2008-01-27 Travis Willard <travis@archlinux.org>
+
+ * 0.8.8-2
+ Added ChangeLog
+ Added sane default config file
diff --git a/abs/core/libao/PKGBUILD b/abs/core/libao/PKGBUILD
new file mode 100644
index 0000000..af18def
--- /dev/null
+++ b/abs/core/libao/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 8727 2008-08-16 04:47:00Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libao
+pkgver=0.8.8
+pkgrel=2
+pkgdesc="Cross-platform audio output library and plugins"
+url="http://www.xiph.org/ao"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc' 'alsa-lib')
+makedepends=('esd')
+backup=('etc/libao.conf')
+options=('!libtool')
+source=(http://downloads.xiph.org/releases/ao/${pkgname}-${pkgver}.tar.gz libao.conf)
+md5sums=('b92cba3cbcf1ee9bc221118a85d23dcd' '821a019116f928c582d2bbf537ffd9a7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --enable-alsa09 --disable-arts
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ # Add conf file
+ install -Dm0644 $startdir/src/libao.conf $startdir/pkg/etc/libao.conf
+}
diff --git a/abs/core/libao/libao.conf b/abs/core/libao/libao.conf
new file mode 100644
index 0000000..ce0bfe4
--- /dev/null
+++ b/abs/core/libao/libao.conf
@@ -0,0 +1,2 @@
+default_driver=alsa
+
diff --git a/abs/core/libarchive/PKGBUILD b/abs/core/libarchive/PKGBUILD
new file mode 100644
index 0000000..b70f376
--- /dev/null
+++ b/abs/core/libarchive/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 5444 2008-07-16 01:29:27Z dan $
+# Maintainer: Dan McGee <dan@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+pkgname=libarchive
+pkgver=2.5.5
+pkgrel=10
+pkgdesc="library that can create and read several streaming archive formats"
+arch=(i686 x86_64)
+url="http://people.freebsd.org/~kientzle/libarchive/"
+license=('BSD')
+groups=('base')
+depends=('zlib' 'bzip2' 'acl')
+source=(http://people.freebsd.org/~kientzle/libarchive/src/libarchive-$pkgver.tar.gz)
+md5sums=('ff6387de3a3830785b229d1e1f11f523')
+
+# 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)
+options=(libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ # install license
+ mkdir -p $startdir/pkg/usr/share/licenses/libarchive
+ install -m644 COPYING $startdir/pkg/usr/share/licenses/libarchive/
+}
+
diff --git a/abs/core/libart-lgpl/PKGBUILD b/abs/core/libart-lgpl/PKGBUILD
new file mode 100644
index 0000000..f56c0b3
--- /dev/null
+++ b/abs/core/libart-lgpl/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=libart-lgpl
+pkgver=2.3.20
+pkgrel=1
+pkgdesc="A library for high-performance 2D graphics"
+url="http://www.levien.com/libart/"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glibc')
+source=(http://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/libart_lgpl-${pkgver}.tar.bz2)
+md5sums=('d0ce67f2ebcef1e51a83136c69242a73')
+options=('!libtool')
+
+build() {
+ cd ${startdir}/src/libart_lgpl-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libart-lgpl/art_misc.h-cplusplus.patch b/abs/core/libart-lgpl/art_misc.h-cplusplus.patch
new file mode 100644
index 0000000..dea8eb0
--- /dev/null
+++ b/abs/core/libart-lgpl/art_misc.h-cplusplus.patch
@@ -0,0 +1,35 @@
+Index: art_misc.h
+===================================================================
+--- art_misc.h (revision 277)
++++ art_misc.h (working copy)
+@@ -34,9 +34,15 @@
+ #include <libart_lgpl/art_config.h>
+ #endif
+
++#ifdef __cplusplus
++extern "C" {
++#endif
+ void *art_alloc(size_t size);
+ void art_free(void *ptr);
+ void *art_realloc(void *ptr, size_t size);
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
+
+ /* These aren't, strictly speaking, configuration macros, but they're
+ damn handy to have around, and may be worth playing with for
+Index: ChangeLog
+===================================================================
+--- ChangeLog (revision 277)
++++ ChangeLog (working copy)
+@@ -1,3 +1,10 @@
++2007-03-01 Frederic Crozat <fcrozat@mandriva.com>
++
++ reviewed by: Dom Lachowicz <cinamod@hotmail.com>
++
++ * art_misc.h: Fix header when included in C++.
++ Patch from Goetz Waschk and Laurent Montel.
++
+ 2007-02-28 Kjartan Maraas <kmaraas@gnome.org>
+
+ configure.in: Release 2.3.19
diff --git a/abs/core/libcap/PKGBUILD b/abs/core/libcap/PKGBUILD
new file mode 100644
index 0000000..8d09b19
--- /dev/null
+++ b/abs/core/libcap/PKGBUILD
@@ -0,0 +1,20 @@
+#$Id: PKGBUILD 8870 2008-08-16 22:39:56Z eric $
+# Maintainer: Arjan Timmerman <arjan@archlinux.org>
+pkgname=libcap
+pkgver=1.10
+pkgrel=2
+pkgdesc="POSIX 1003.1e capabilities"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/libs/security/linux-privs/"
+license="GPL"
+depends=('glibc')
+source=(http://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/${pkgname}-${pkgver}.tar.gz
+ libcap-1.10-debian.patch)
+md5sums=('2c09eea823f67cfdde96177a959bc39b' 'ba642c86c4072917fcff77ec31411194')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/libcap-1.10-debian.patch || return 1
+ make prefix=/usr DESTDIR=${startdir}/pkg install
+ rmdir ${startdir}/pkg/usr/share/man/man2
+}
diff --git a/abs/core/libcap/libcap-1.10-debian.patch b/abs/core/libcap/libcap-1.10-debian.patch
new file mode 100644
index 0000000..26d57ec
--- /dev/null
+++ b/abs/core/libcap/libcap-1.10-debian.patch
@@ -0,0 +1,766 @@
+--- libcap-1.10.orig/doc/old/cap_set_fd.3
++++ libcap-1.10/doc/old/cap_set_fd.3
+@@ -0,0 +1 @@
++.so man3/cap_get_file.3
+--- libcap-1.10.orig/doc/old/cap_set_file.3
++++ libcap-1.10/doc/old/cap_set_file.3
+@@ -0,0 +1 @@
++.so man3/cap_get_file.3
+--- libcap-1.10.orig/doc/capset.2
++++ libcap-1.10/doc/capset.2
+@@ -1 +1 @@
+-.so man2/capget.2
++#.so man2/capget.2
+--- libcap-1.10.orig/doc/Makefile
++++ libcap-1.10/doc/Makefile
+@@ -7,7 +7,7 @@
+ topdir=$(shell pwd)/..
+ include $(topdir)/Make.Rules
+
+-MAN2S = capget.2 capset.2
++#MAN2S = capget.2
+ MAN3S = cap_init.3 cap_free.3 cap_dup.3 \
+ cap_clear.3 cap_get_flag.3 cap_set_flag.3 \
+ cap_get_proc.3 cap_set_proc.3 \
+--- libcap-1.10.orig/Make.Rules
++++ libcap-1.10/Make.Rules
+@@ -8,7 +8,7 @@
+
+ # common 'packaging' directoty
+
+-FAKEROOT=
++FAKEROOT=$(DESTDIR)
+
+ # Autoconf-style prefixes are activated when $(prefix) is defined.
+ # Otherwise binaries and libraraies are installed in /{lib,sbin}/,
+@@ -18,13 +18,13 @@
+ exec_prefix=$(prefix)
+ lib_prefix=$(exec_prefix)
+ inc_prefix=$(lib_prefix)
+-man_prefix=$(prefix)
++man_prefix=$(prefix)/share
+ else
+ prefix=/usr
+ exec_prefix=
+ lib_prefix=$(exec_prefix)
+ inc_prefix=$(prefix)
+-man_prefix=$(prefix)
++man_prefix=$(prefix)/share
+ endif
+
+ # Target directories
+@@ -42,7 +42,7 @@
+ # Compilation specifics
+
+ CC=gcc
+-COPTFLAGS=-O2
++COPTFLAGS=-O2
+ DEBUG=-g #-DDEBUG
+ WARNINGS=-ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
+ -Wpointer-arith -Wcast-qual -Wcast-align \
+--- libcap-1.10.orig/Makefile
++++ libcap-1.10/Makefile
+@@ -3,17 +3,20 @@
+ #
+ # Makefile for libcap
+
++ifndef topdir
+ topdir=$(shell pwd)
+-include Make.Rules
++endif
++include $(topdir)/Make.Rules
++DESTDIR=
+
+ #
+ # flags
+ #
+
+ all install clean: %: %-here
+- make -C libcap $(MAKE_DEFS) $@
+- make -C progs $(MAKE_DEFS) $@
+- make -C doc $(MAKE_DEFS) $@
++ make -C $(topdir)/libcap $(MAKE_DEFS) $@
++ make -C $(topdir)/progs $(MAKE_DEFS) $@
++ make -C $(topdir)/doc $(MAKE_DEFS) $@
+
+ all-here:
+
+--- libcap-1.10.orig/libcap/include/sys/capability.h
++++ libcap-1.10/libcap/include/sys/capability.h
+@@ -21,7 +21,288 @@
+ */
+
+ #include <sys/types.h>
+-#include <linux/capability.h>
++/*
++ * This is <linux/capability.h>
++ *
++ * Andrew G. Morgan <morgan@transmeta.com>
++ * Alexander Kjeldaas <astor@guardian.no>
++ * with help from Aleph1, Roland Buresund and Andrew Main.
++ *
++ * See here for the libcap library ("POSIX draft" compliance):
++ *
++ * ftp://linux.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.2/
++ */
++
++#ifndef _LINUX_CAPABILITY_H
++#define _LINUX_CAPABILITY_H
++
++#include <linux/types.h>
++/*#include <linux/fs.h>*/
++
++/* User-level do most of the mapping between kernel and user
++ capabilities based on the version tag given by the kernel. The
++ kernel might be somewhat backwards compatible, but don't bet on
++ it. */
++
++/* XXX - Note, cap_t, is defined by POSIX to be an "opaque" pointer to
++ a set of three capability sets. The transposition of 3*the
++ following structure to such a composite is better handled in a user
++ library since the draft standard requires the use of malloc/free
++ etc.. */
++
++#define _LINUX_CAPABILITY_VERSION 0x19980330
++
++typedef struct __user_cap_header_struct {
++ __u32 version;
++ int pid;
++} *cap_user_header_t;
++
++typedef struct __user_cap_data_struct {
++ __u32 effective;
++ __u32 permitted;
++ __u32 inheritable;
++} *cap_user_data_t;
++
++#ifdef __KERNEL__
++
++/* #define STRICT_CAP_T_TYPECHECKS */
++
++#ifdef STRICT_CAP_T_TYPECHECKS
++
++typedef struct kernel_cap_struct {
++ __u32 cap;
++} kernel_cap_t;
++
++#else
++
++typedef __u32 kernel_cap_t;
++
++#endif
++
++#define _USER_CAP_HEADER_SIZE (2*sizeof(__u32))
++#define _KERNEL_CAP_T_SIZE (sizeof(kernel_cap_t))
++
++#endif
++
++
++/**
++ ** POSIX-draft defined capabilities.
++ **/
++
++/* In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
++ overrides the restriction of changing file ownership and group
++ ownership. */
++
++#define CAP_CHOWN 0
++
++/* Override all DAC access, including ACL execute access if
++ [_POSIX_ACL] is defined. Excluding DAC access covered by
++ CAP_LINUX_IMMUTABLE. */
++
++#define CAP_DAC_OVERRIDE 1
++
++/* Overrides all DAC restrictions regarding read and search on files
++ and directories, including ACL restrictions if [_POSIX_ACL] is
++ defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE. */
++
++#define CAP_DAC_READ_SEARCH 2
++
++/* Overrides all restrictions about allowed operations on files, where
++ file owner ID must be equal to the user ID, except where CAP_FSETID
++ is applicable. It doesn't override MAC and DAC restrictions. */
++
++#define CAP_FOWNER 3
++
++/* Overrides the following restrictions that the effective user ID
++ shall match the file owner ID when setting the S_ISUID and S_ISGID
++ bits on that file; that the effective group ID (or one of the
++ supplementary group IDs) shall match the file owner ID when setting
++ the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are
++ cleared on successful return from chown(2) (not implemented). */
++
++#define CAP_FSETID 4
++
++/* Used to decide between falling back on the old suser() or fsuser(). */
++
++#define CAP_FS_MASK 0x1f
++
++/* Overrides the restriction that the real or effective user ID of a
++ process sending a signal must match the real or effective user ID
++ of the process receiving the signal. */
++
++#define CAP_KILL 5
++
++/* Allows setgid(2) manipulation */
++/* Allows setgroups(2) */
++/* Allows forged gids on socket credentials passing. */
++
++#define CAP_SETGID 6
++
++/* Allows set*uid(2) manipulation (including fsuid). */
++/* Allows forged pids on socket credentials passing. */
++
++#define CAP_SETUID 7
++
++
++/**
++ ** Linux-specific capabilities
++ **/
++
++/* Transfer any capability in your permitted set to any pid,
++ remove any capability in your permitted set from any pid */
++
++#define CAP_SETPCAP 8
++
++/* Allow modification of S_IMMUTABLE and S_APPEND file attributes */
++
++#define CAP_LINUX_IMMUTABLE 9
++
++/* Allows binding to TCP/UDP sockets below 1024 */
++/* Allows binding to ATM VCIs below 32 */
++
++#define CAP_NET_BIND_SERVICE 10
++
++/* Allow broadcasting, listen to multicast */
++
++#define CAP_NET_BROADCAST 11
++
++/* Allow interface configuration */
++/* Allow administration of IP firewall, masquerading and accounting */
++/* Allow setting debug option on sockets */
++/* Allow modification of routing tables */
++/* Allow setting arbitrary process / process group ownership on
++ sockets */
++/* Allow binding to any address for transparent proxying */
++/* Allow setting TOS (type of service) */
++/* Allow setting promiscuous mode */
++/* Allow clearing driver statistics */
++/* Allow multicasting */
++/* Allow read/write of device-specific registers */
++/* Allow activation of ATM control sockets */
++
++#define CAP_NET_ADMIN 12
++
++/* Allow use of RAW sockets */
++/* Allow use of PACKET sockets */
++
++#define CAP_NET_RAW 13
++
++/* Allow locking of shared memory segments */
++/* Allow mlock and mlockall (which doesn't really have anything to do
++ with IPC) */
++
++#define CAP_IPC_LOCK 14
++
++/* Override IPC ownership checks */
++
++#define CAP_IPC_OWNER 15
++
++/* Insert and remove kernel modules - modify kernel without limit */
++/* Modify cap_bset */
++#define CAP_SYS_MODULE 16
++
++/* Allow ioperm/iopl access */
++/* Allow sending USB messages to any device via /proc/bus/usb */
++
++#define CAP_SYS_RAWIO 17
++
++/* Allow use of chroot() */
++
++#define CAP_SYS_CHROOT 18
++
++/* Allow ptrace() of any process */
++
++#define CAP_SYS_PTRACE 19
++
++/* Allow configuration of process accounting */
++
++#define CAP_SYS_PACCT 20
++
++/* Allow configuration of the secure attention key */
++/* Allow administration of the random device */
++/* Allow examination and configuration of disk quotas */
++/* Allow configuring the kernel's syslog (printk behaviour) */
++/* Allow setting the domainname */
++/* Allow setting the hostname */
++/* Allow calling bdflush() */
++/* Allow mount() and umount(), setting up new smb connection */
++/* Allow some autofs root ioctls */
++/* Allow nfsservctl */
++/* Allow VM86_REQUEST_IRQ */
++/* Allow to read/write pci config on alpha */
++/* Allow irix_prctl on mips (setstacksize) */
++/* Allow flushing all cache on m68k (sys_cacheflush) */
++/* Allow removing semaphores */
++/* Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores
++ and shared memory */
++/* Allow locking/unlocking of shared memory segment */
++/* Allow turning swap on/off */
++/* Allow forged pids on socket credentials passing */
++/* Allow setting readahead and flushing buffers on block devices */
++/* Allow setting geometry in floppy driver */
++/* Allow turning DMA on/off in xd driver */
++/* Allow administration of md devices (mostly the above, but some
++ extra ioctls) */
++/* Allow tuning the ide driver */
++/* Allow access to the nvram device */
++/* Allow administration of apm_bios, serial and bttv (TV) device */
++/* Allow manufacturer commands in isdn CAPI support driver */
++/* Allow reading non-standardized portions of pci configuration space */
++/* Allow DDI debug ioctl on sbpcd driver */
++/* Allow setting up serial ports */
++/* Allow sending raw qic-117 commands */
++/* Allow enabling/disabling tagged queuing on SCSI controllers and sending
++ arbitrary SCSI commands */
++/* Allow setting encryption key on loopback filesystem */
++
++#define CAP_SYS_ADMIN 21
++
++/* Allow use of reboot() */
++
++#define CAP_SYS_BOOT 22
++
++/* Allow raising priority and setting priority on other (different
++ UID) processes */
++/* Allow use of FIFO and round-robin (realtime) scheduling on own
++ processes and setting the scheduling algorithm used by another
++ process. */
++
++#define CAP_SYS_NICE 23
++
++/* Override resource limits. Set resource limits. */
++/* Override quota limits. */
++/* Override reserved space on ext2 filesystem */
++/* NOTE: ext2 honors fsuid when checking for resource overrides, so
++ you can override using fsuid too */
++/* Override size restrictions on IPC message queues */
++/* Allow more than 64hz interrupts from the real-time clock */
++/* Override max number of consoles on console allocation */
++/* Override max number of keymaps */
++
++#define CAP_SYS_RESOURCE 24
++
++/* Allow manipulation of system clock */
++/* Allow irix_stime on mips */
++/* Allow setting the real-time clock */
++
++#define CAP_SYS_TIME 25
++
++/* Allow configuration of tty devices */
++/* Allow vhangup() of tty */
++
++#define CAP_SYS_TTY_CONFIG 26
++
++/* Allow the privileged aspects of mknod() */
++
++#define CAP_MKNOD 27
++
++/* Allow taking of leases on files */
++
++#define CAP_LEASE 28
++
++#endif /* !_LINUX_CAPABILITY_H */
++
++
+
+ /*
+ * POSIX capability types
+--- libcap-1.10.orig/libcap/Makefile
++++ libcap-1.10/libcap/Makefile
+@@ -24,12 +24,15 @@
+ #
+ # defines
+ #
++ifndef $(topdir)
+ topdir=$(shell pwd)/..
+-include ../Make.Rules
++endif
++include $(topdir)/Make.Rules
++
+ #
+ # Library version
+ #
+-LIBNAME=libcap.so
++LIBNAME=libcap
+ #
+
+ FILES=cap_alloc cap_proc cap_extint cap_flag cap_text cap_sys
+@@ -39,10 +42,11 @@
+
+ INCLS=libcap.h cap_names.h $(INCS)
+ OBJS=$(addsuffix .o, $(FILES))
+-MAJLIBNAME=$(LIBNAME).$(VERSION)
++LOBJS=$(addsuffix .lo, $(FILES))
++MAJLIBNAME=$(LIBNAME).so.$(VERSION)
+ MINLIBNAME=$(MAJLIBNAME).$(MINOR)
+
+-all: $(MINLIBNAME)
++all: $(MINLIBNAME) $(LIBNAME).a
+
+ _makenames: _makenames.c cap_names.sed
+ $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
+@@ -50,31 +54,38 @@
+ cap_names.h: _makenames
+ ./_makenames > cap_names.h
+
+-cap_names.sed: Makefile /usr/include/linux/capability.h
+- @echo "=> making cap_names.c from <linux/capability.h>"
+- @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define \([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
+-# @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
++cap_names.sed: Makefile include/sys/capability.h
++ @echo "=> making cap_names.c from <sys/capability.h>"
++ @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define \([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < include/sys/capability.h | fgrep -v 0x > cap_names.sed # @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
++
++$(LIBNAME).a: $(OBJS)
++ ar cruv $(LIBNAME).a $(OBJS)
+
+-$(MINLIBNAME): $(OBJS)
+- $(LD) -soname $(MAJLIBNAME) -x -shared -o $@ $(OBJS)
++$(MINLIBNAME): $(LOBJS)
++ $(CC) -shared -fPIC -Wl,-soname,$(MAJLIBNAME) -o $@ $(LOBJS)
+ ln -sf $(MINLIBNAME) $(MAJLIBNAME)
+- ln -sf $(MAJLIBNAME) $(LIBNAME)
++ ln -sf $(MAJLIBNAME) $(LIBNAME).so
+
+ %.o: %.c $(INCLS)
+ $(CC) $(CFLAGS) -c $< -o $@
+
++%.lo: %.c $(INCLS)
++ $(CC) $(CFLAGS) -fPIC -c $< -o $@
++
++
+ install: all
+ mkdir -p -m 0755 $(INCDIR)/sys
+ install -m 0644 include/sys/capability.h $(INCDIR)/sys
+ mkdir -p -m 0755 $(LIBDIR)
++ install -m 0644 $(LIBNAME).a $(LIBDIR)
+ install -m 0644 $(MINLIBNAME) $(LIBDIR)/$(MINLIBNAME)
+ ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME)
+- ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME)
++ ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME).so
+ -/sbin/ldconfig
+
+ clean:
+ $(LOCALCLEAN)
+- rm -f $(OBJS) $(LIBNAME)*
++ rm -f $(OBJS) $(LOBJS) $(LIBNAME).a $(LIBNAME).so*
+ rm -f cap_names.h cap_names.sed _makenames
+ cd include/sys && $(LOCALCLEAN)
+
+--- libcap-1.10.orig/libcap/_makenames.c
++++ libcap-1.10/libcap/_makenames.c
+@@ -9,7 +9,7 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <linux/capability.h>
++#include <sys/capability.h>
+
+ /*
+ * #include 'sed' generated array
+--- libcap-1.10.orig/libcap/cap_sys.c
++++ libcap-1.10/libcap/cap_sys.c
+@@ -10,7 +10,8 @@
+ #include "libcap.h"
+ #define __LIBRARY__
+ #include <linux/unistd.h>
+-
++/* glic >= 2.1 knows capset/capget. no need to define it here */
++/*
+ _syscall2(int, capget,
+ cap_user_header_t, header,
+ cap_user_data_t, data)
+@@ -18,7 +19,7 @@
+ _syscall2(int, capset,
+ cap_user_header_t, header,
+ const cap_user_data_t, data)
+-
++*/
+ /*
+ * $Log: libcap-1.10-debian.patch,v $
+ * Revision 1.1 2006/10/29 23:14:00 jgc
+ * upgpkg: libcap 1.10-2
+ * Remove amd64 patches that messed things up
+ * Apply debian patch to make it build again
+ * Remove empty man2 directory the right way
+ *
+ * Revision 1.1.1.1 1999/04/17 22:16:31 morgan
+--- libcap-1.10.orig/capfaq-0.2.txt
++++ libcap-1.10/capfaq-0.2.txt
+@@ -0,0 +1,264 @@
++This is the Linux kernel capabilities FAQ
++
++Its history, to the extent that I am able to reconstruct it is that
++v2.0 was posted to the Linux kernel list on 1999/04/02 by Boris
++Tobotras. Thanks to Denis Ducamp for forwarding me a copy.
++
++Cheers
++
++Andrew
++
++Linux Capabilities FAQ 0.2
++==========================
++
++1) What is a capability?
++
++The name "capabilities" as used in the Linux kernel can be confusing.
++First there are Capabilities as defined in computer science. A
++capability is a token used by a process to prove that it is allowed to
++do an operation on an object. The capability identifies the object
++and the operations allowed on that object. A file descriptor is a
++capability. You create the file descriptor with the "open" call and
++request read or write permissions. Later, when doing a read or write
++operation, the kernel uses the file descriptor as an index into a
++data structure that indicates what operations are allowed. This is an
++efficient way to check permissions. The necessary data structures are
++created once during the "open" call. Later read and write calls only
++have to do a table lookup. Operations on capabilities include copying
++capabilities, transferring capabilities between processes, modifying a
++capability, and revoking a capability. Modifying a capability can be
++something like taking a read-write filedescriptor and making it
++read-only. A capability often has a notion of an "owner" which is
++able to invalidate all copies and derived versions of a capability.
++Entire OSes are based on this "capability" model, with varying degrees
++of purity. There are other ways of implementing capabilities than the
++file descriptor model - traditionally special hardware has been used,
++but modern systems also use the memory management unit of the CPU.
++
++Then there is something quite different called "POSIX capabilities"
++which is what Linux uses. These capabilities are a partitioning of
++the all powerful root privilege into a set of distinct privileges (but
++look at securelevel emulation to find out that this isn't necessary
++the whole truth). Users familiar with VMS or "Trusted" versions of
++other UNIX variants will know this under the name "privileges". The
++name "capabilities" comes from the now defunct POSIX draft 1003.1e
++which used this name.
++
++2) So what is a "POSIX capability"?
++
++A process has three sets of bitmaps called the inheritable(I),
++permitted(P), and effective(E) capabilities. Each capability is
++implemented as a bit in each of these bitmaps which is either set or
++unset. When a process tries to do a privileged operation, the
++operating system will check the appropriate bit in the effective set
++of the process (instead of checking whether the effective uid of the
++process i 0 as is normally done). For example, when a process tries
++to set the clock, the Linux kernel will check that the process has the
++CAP_SYS_TIME bit (which is currently bit 25) set in its effective set.
++
++The permitted set of the process indicates the capabilities the
++process can use. The process can have capabilities set in the
++permitted set that are not in the effective set. This indicates that
++the process has temporarily disabled this capability. A process is
++allowed to set a bit in its effective set only if it is available in
++the permitted set. The distinction between effective and permitted
++exists so that processes can "bracket" operations that need privilege.
++
++The inheritable capabilities are the capabilities of the current
++process that should be inherited by a program executed by the current
++process. The permitted set of a process is masked against the
++inheritable set during exec(). Nothing special happens during fork()
++or clone(). Child processes and threads are given an exact copy of
++the capabilities of the parent process.
++
++3) What about other entities in the system? Users, Groups, Files?
++
++Files have capabilities. Conceptually they have the same three
++bitmaps that processes have, but to avoid confusion we call them by
++other names. Only executable files have capabilities, libraries don't
++have capabilities (yet). The three sets are called the allowed set,
++the forced set, and the effective set.
++
++The allowed set indicates what capabilities the executable is allowed
++to receive from an execing process. This means that during exec(),
++the capabilities of the old process are first masked against a set
++which indicates what the process gives away (the inheritable set of
++the process), and then they are masked against a set which indicates
++what capabilities the new process image is allowed to receive (the
++allowed set of the executable).
++
++The forced set is a set of capabilities created out of thin air and
++given to the process after execing the executable. The forced set is
++similar in nature to the setuid feature. In fact, the setuid bit from
++the filesystem is "read" as a full forced set by the kernel.
++
++The effective set indicates which bits in the permitted set of the new
++process should be transferred to the effective set of the new process.
++The effective set is best thought of as a "capability aware" set. It
++should consist of only 1s if the executable is capability-dumb, or
++only 0s if the executable is capability-smart. Since the effective
++set consists of only 0s or only 1s, the filesystem can implement this
++set using a single bit.
++
++NOTE: Filesystem support for capabilities is not part of Linux 2.2.
++
++Users and Groups don't have associated capabilities from the kernel's
++point of view, but it is entirely reasonable to associate users or
++groups with capabilities. By letting the "login" program set some
++capabilities it is possible to make role users such as a backup user
++that will have the CAP_DAC_READ_SEARCH capability and be able to do
++backups. This could also be implemented as a PAM module, but nobody
++has implemented one yet.
++
++4) What capabilities exist?
++
++The capabilities available in Linux are listed and documented in the
++file /usr/src/linux/include/linux/capability.h.
++
++5) Are Linux capabilities hierarchical?
++
++No, you cannot make a "subcapability" out of a Linux capability as in
++capability-based OSes.
++
++6) How can I use capabilities to make sure Mr. Evil Luser (eluser)
++can't exploit my "suid" programs?
++
++This is the general outline of how this works given filesystem
++capability support exists. First, you have a PAM module that sets the
++inheritable capabilities of the login-shell of eluser. Then for all
++"suid" programs on the system, you decide what capabilities they need
++and set the _allowed_ set of the executable to that set of
++capabilities. The capability rules
++
++ new permitted = forced | (allowed & inheritable)
++
++means that you should be careful about setting forced capabilities on
++executables. In a few cases, this can be useful though. For example
++the login program needs to set the inheritable set of the new user and
++therefore needs an almost full permitted set. So if you want eluser
++to be able to run login and log in as a different user, you will have
++to set some forced bits on that executable.
++
++7) What about passing capabilities between processes?
++
++Currently this is done by the system call "setcap" which can set the
++capabilities of another process. This requires the CAP_SETPCAP
++capability which you really only want to grant a _few_ processes.
++CAP_SETPCAP was originally intended as a workaround to be able to
++implement filesystem support for capabilities using a daemon outside
++the kernel.
++
++There has been discussions about implementing socket-level capability
++passing. This means that you can pass a capability over a socket. No
++support for this exists in the official kernel yet.
++
++8) I see securelevel has been removed from 2.2 and are superceeded by
++capabilities. How do I emulate securelevel using capabilities?
++
++The setcap system call can remove a capability from _all_ processes on
++the system in one atomic operation. The setcap utility from the
++libcap distribution will do this for you. The utility requires the
++CAP_SETPCAP privilege to do this. The CAP_SETPCAP capability is not
++enabled by default.
++
++libcap is available from
++ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.2/
++
++9) I noticed that the capability.h file lacks some capabilities that
++are needed to fully emulate 2.0 securelevel. Is there a patch for
++this?
++
++Actually yes - funny you should ask :-). The problem with 2.0
++securelevel is that they for example stop root from accessing block
++devices. At the same time they restrict the use of iopl. These two
++changes are fundamentally different. Blocking access to block devices
++means restricting something that usually isn't restricted.
++Restricting access to the use of iopl on the other hand means
++restricting (blocking) access to something that is already blocked.
++Emulating the parts of 2.0 securelevel that restricts things that are
++normally not restricted means that the capabilites in the kernel has
++to have a set of capabilities that are usually _on_ for a normal
++process (note that this breaks the explanation that capabilities are a
++partitioning of the root privileges). There is an experimental patch at
++
++ftp://ftp.guardian.no/pub/free/linux/capabilities/patch-cap-exp-1
++
++which implements a set of capabilities with the "CAP_USER" prefix:
++
++cap_user_sock - allowed to use socket()
++cap_user_dev - allowed to open char/block devices
++cap_user_fifo - allowed to use pipes
++
++These should be enough to emulate 2.0 securelevel (tell me if we need
++something more).
++
++10) Seems I need a CAP_SETPCAP capability that I don't have to make use
++of capabilities. How do I enable this capability?
++
++Change the definition of CAP_INIT_EFF_SET and CAP_INIT_INH_SET to the
++following in include/linux/capability.h:
++
++#define CAP_INIT_EFF_SET { ~0 }
++#define CAP_INIT_INH_SET { ~0 }
++
++This will start init with a full capability set and not with
++CAP_SETPCAP removed.
++
++11) How do I start a process with a limited set of capabilities?
++
++Get the libcap library and use the execcap utility. The following
++example starts the update daemon with only the CAP_SYS_ADMIN
++capability.
++
++execcap 'cap_sys_admin=eip' update
++
++12) How do I start a process with a limited set of capabilities under
++another uid?
++
++Use the sucap utility which changes uid from root without loosing any
++capabilities. Normally all capabilities are cleared when changing uid
++from root. The sucap utility requires the CAP_SETPCAP capability.
++The following example starts updated under uid updated and gid updated
++with CAP_SYS_ADMIN raised in the Effective set.
++
++sucap updated updated execcap 'cap_sys_admin=eip' update
++
++[ Sucap is currently available from
++ftp://ftp.guardian.no/pub/free/linux/capabilities/sucap.c. Put it in
++the progs directory of libcap to compile.]
++
++13) What are the "capability rules"
++
++The capability rules are the rules used to set the capabilities of the
++new process image after an exec. They work like this:
++
++ pI' = pI
++ (***) pP' = fP | (fI & pI)
++ pE' = pP' & fE [NB. fE is 0 or ~0]
++
++ I=Inheritable, P=Permitted, E=Effective // p=process, f=file
++ ' indicates post-exec().
++
++Now to make sense of the equations think of fP as the Forced set of
++the executable, and fI as the Allowed set of the executable. Notice
++how the Inheritable set isn't touched at all during exec().
++
++14) What are the laws for setting capability bits in the Inheritable,
++Permitted, and Effective sets?
++
++Bits can be transferred from Permitted to either Effective or
++Inheritable set.
++
++Bits can be removed from all sets.
++
++15) Where is the standard on which the Linux capabilities are based?
++
++There used to be a POSIX draft called POSIX.6 and later POSIX 1003.1e.
++However after the committee had spent over 10 years, POSIX decided
++that enough is enough and dropped the draft. There will therefore not
++be a POSIX standard covering security anytime soon. This may lead to
++that the POSIX draft is available for free, however.
++
++--
++ Best regards, -- Boris.
++
diff --git a/abs/core/libcap/libcap-1.10-fixcflags.patch b/abs/core/libcap/libcap-1.10-fixcflags.patch
new file mode 100644
index 0000000..3566d95
--- /dev/null
+++ b/abs/core/libcap/libcap-1.10-fixcflags.patch
@@ -0,0 +1,22 @@
+diff -Naur libcap-1.10.orig/Make.Rules libcap-1.10/Make.Rules
+--- libcap-1.10.orig/Make.Rules 2005-05-30 16:10:07.000000000 +0000
++++ libcap-1.10/Make.Rules 2005-05-30 16:11:18.000000000 +0000
+@@ -42,8 +42,8 @@
+ # Compilation specifics
+
+ CC=gcc
+-COPTFLAGS=-O2
+-DEBUG=-g #-DDEBUG
++COPTFLAGS=-O2 -fPIC
++DEBUG=
+ WARNINGS=-ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
+ -Wpointer-arith -Wcast-qual -Wcast-align \
+ -Wtraditional -Wstrict-prototypes -Wmissing-prototypes \
+@@ -54,7 +54,7 @@
+ IPATH=-I$(topdir)/libcap/include
+ INCS=$(topdir)/libcap/include/sys/capability.h
+ LIBS=-L$(topdir)/libcap -lcap
+-CFLAGS=-Dlinux $(WARNINGS) $(DEBUG) $(COPTFLAG) $(IPATH)
++CFLAGS+=-Dlinux $(WARNINGS) $(DEBUG) $(COPTFLAG) $(IPATH)
+
+ # Global cleanup stuff \ No newline at end of file
diff --git a/abs/core/libcap/libcap-1.10-shared.patch b/abs/core/libcap/libcap-1.10-shared.patch
new file mode 100644
index 0000000..54e5496
--- /dev/null
+++ b/abs/core/libcap/libcap-1.10-shared.patch
@@ -0,0 +1,17 @@
+--- libcap-1.11/libcap/Makefile.shared 1999-04-17 18:16:31.000000000 -0400
++++ libcap-1.11/libcap/Makefile 2002-07-19 06:24:23.000000000 -0400
+@@ -56,12 +56,12 @@ cap_names.sed: Makefile /usr/include/lin
+ # @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/ \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
+
+ $(MINLIBNAME): $(OBJS)
+- $(LD) -soname $(MAJLIBNAME) -x -shared -o $@ $(OBJS)
++ $(CC) -Wl,-soname,$(MAJLIBNAME) -Wl,-x -shared -o $@ $(OBJS)
+ ln -sf $(MINLIBNAME) $(MAJLIBNAME)
+ ln -sf $(MAJLIBNAME) $(LIBNAME)
+
+ %.o: %.c $(INCLS)
+- $(CC) $(CFLAGS) -c $< -o $@
++ $(CC) $(CFLAGS) -fpic -c $< -o $@
+
+ install: all
+ mkdir -p -m 0755 $(INCDIR)/sys
diff --git a/abs/core/libcdaudio/PKGBUILD b/abs/core/libcdaudio/PKGBUILD
new file mode 100644
index 0000000..0494dbd
--- /dev/null
+++ b/abs/core/libcdaudio/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+#contributor Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=libcdaudio
+pkgver=0.99.12
+pkgrel=3
+pkgdesc="A portable library for controlling Audio CDs and managing the transfers of information with the CDDB system."
+arch=(i686 x86_64)
+url="http://libcdaudio.sourceforge.net/"
+license=('GPL')
+depends=(glibc)
+source=(http://dl.sourceforge.net/sourceforge/libcdaudio/$pkgname-${pkgver}p2.tar.gz)
+md5sums=('15de3830b751818a54a42899bd3ae72c')
+options=('!libtool')
+
+build() {
+ cd $startdir/src/$pkgname-${pkgver}p2
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
diff --git a/abs/core/libcroco/PKGBUILD b/abs/core/libcroco/PKGBUILD
new file mode 100644
index 0000000..549277e
--- /dev/null
+++ b/abs/core/libcroco/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libcroco
+pkgver=0.6.1
+pkgrel=1
+pkgdesc="GNOME CSS2 parsing and manipulation toolkit"
+depends=('glib2>=2.10.1' 'libxml2')
+makedepends=(intltool pkgconfig)
+arch=('i686' 'x86_64')
+source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/0.6/$pkgname-$pkgver.tar.bz2)
+url="http://www.gnome.org"
+md5sums=(b0975bd01eb11964f1b3f254f267a43d)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ rm -rf $startdir/pkg/usr/share/gtk-doc
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/libcups/PKGBUILD b/abs/core/libcups/PKGBUILD
new file mode 100644
index 0000000..363a46a
--- /dev/null
+++ b/abs/core/libcups/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7638 2008-08-03 15:54:53Z jgc $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+pkgname=libcups
+pkgver=1.3.8
+pkgrel=2
+pkgdesc="The CUPS Printing System"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.cups.org/"
+depends=('gnutls>=2.4.1' 'libtiff' 'libpng' 'heimdal>=1.2')
+source=(http://ftp.funet.fi/pub/mirrors/ftp.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.bz2)
+md5sums=('84e09577d673b212f605dd09caee456c')
+
+build() {
+ cd ${srcdir}/cups-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --with-logdir=/var/log/cups -with-docdir=/usr/share/cups/doc \
+ --with-cups-user=daemon --with-cups-group=lp --enable-ssl=yes \
+ --disable-ldap --disable-dbus --libdir=/usr/lib
+
+ for dir in cups filter; do
+ pushd ${dir}
+ make
+ make BUILDROOT=${pkgdir} install
+ popd
+ done
+
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 cups-config ${startdir}/pkg/usr/bin/cups-config
+ #Remove filters
+ rm -rf ${startdir}/pkg/usr/lib/cups
+}
diff --git a/abs/core/libdatrie/PKGBUILD b/abs/core/libdatrie/PKGBUILD
new file mode 100644
index 0000000..9a199e3
--- /dev/null
+++ b/abs/core/libdatrie/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Chaiwat Suttipongsakul <cwt114@gmail.com>
+
+pkgname=libdatrie
+pkgver=0.1.2
+pkgrel=1
+pkgdesc="Libdatrie is an implementation of double-array structure for representing trie, as proposed by Junichi Aoe."
+url="http://linux.thai.net/~thep/datrie/datrie.html"
+license=('LGPL')
+arch=('i686' 'x86_64')
+depends=('glibc')
+options=('!libtool' '!emptydirs')
+source=(http://linux.thai.net/pub/thailinux/software/libthai/${pkgname}-${pkgver}.tar.gz)
+md5sums=('3eaedd5452149e11547a0dc74ee3fcfd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libdmx/PKGBUILD b/abs/core/libdmx/PKGBUILD
new file mode 100644
index 0000000..335d4a1
--- /dev/null
+++ b/abs/core/libdmx/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libdmx
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Distributed Multihead extension library"
+url="http://xorg.freedesktop.org/"
+depends=(dmxproto libxext)
+makedepends=(pkgconfig)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(4d866967210d06098fc9f302ed4c79b1)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/libdownload/PKGBUILD b/abs/core/libdownload/PKGBUILD
new file mode 100644
index 0000000..7685097
--- /dev/null
+++ b/abs/core/libdownload/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 2480 2008-06-03 15:53:46Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=libdownload
+pkgver=1.3
+pkgrel=10
+pkgdesc="URL based download library, forked from libfetch"
+arch=('i686' 'x86_64')
+license=('BSD')
+groups=('base')
+depends=('glibc')
+url="http://code.phraktured.net/?p=libdownload.git"
+source=(http://code.phraktured.net/source/$pkgname-$pkgver.tar.gz)
+md5sums=('77e10293fd4262745110eb423a10490c')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ [ "$CARCH" = "x86_64" ] && sed -i -e "s/-O2\ -pipe/-O2\ -pipe\ \-fPIC/g" Makefile
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libdownload/largefiles.patch b/abs/core/libdownload/largefiles.patch
new file mode 100644
index 0000000..7b10a4c
--- /dev/null
+++ b/abs/core/libdownload/largefiles.patch
@@ -0,0 +1,12 @@
+diff -u libdownload-1.1/Makefile libdownload-1.1-new/Makefile
+--- libdownload-1.1/Makefile 2006-11-17 10:19:53.000000000 -0500
++++ libdownload-1.1-new/Makefile 2007-08-17 19:53:21.000000000 -0400
+@@ -3,7 +3,7 @@
+ DEBUG = true
+ ENABLE_HTTPS = true
+
+-CFLAGS = -O2 -pipe -I. -DINET6 -D_GNU_SOURCE
++CFLAGS = -O2 -pipe -I. -DINET6 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
+ WARNINGS = -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+ -Wpointer-arith -Wcast-align -Wsign-compare
+ CFLAGS += $(WARNINGS)
diff --git a/abs/core/libdrm/PKGBUILD b/abs/core/libdrm/PKGBUILD
new file mode 100644
index 0000000..19a4db2
--- /dev/null
+++ b/abs/core/libdrm/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libdrm
+pkgver=2.3.0
+pkgrel=1
+pkgdesc="Userspace interface to kernel DRM services"
+arch=(i686 x86_64)
+depends=('glibc')
+options=('!libtool')
+url="http://dri.freedesktop.org/"
+source=(http://dri.freedesktop.org/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('01a1e1ee0268a2403db42fa630036ab2')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libdvdread/PKGBUILD b/abs/core/libdvdread/PKGBUILD
new file mode 100644
index 0000000..e39e586
--- /dev/null
+++ b/abs/core/libdvdread/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=libdvdread
+pkgver=0.9.7
+pkgrel=1
+arch=(i686 x86_64)
+pkgdesc="libdvdread provides a simple foundation for reading DVD video disks"
+depends=('glibc')
+makedepends=('libdvdcss')
+install=$pkgname.install
+options=('!libtool')
+source=(http://www.dtek.chalmers.se/groups/dvd/dist/$pkgname-$pkgver.tar.gz)
+url="http://www.dtek.chalmers.se/groups/dvd/downloads.shtml"
+md5sums=('078788c9241ae16763529e1235502337')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libdvdread/libdvdread.install b/abs/core/libdvdread/libdvdread.install
new file mode 100644
index 0000000..913bc56
--- /dev/null
+++ b/abs/core/libdvdread/libdvdread.install
@@ -0,0 +1,11 @@
+post_install() {
+ echo "==> If you want to decode encrypted DVDs, you also need the libdvdcss package."
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/libexif/PKGBUILD b/abs/core/libexif/PKGBUILD
new file mode 100644
index 0000000..74989c8
--- /dev/null
+++ b/abs/core/libexif/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Tobias Kieslich <tobias@justdreams.de>
+
+pkgname=libexif
+pkgver=0.6.16
+pkgrel=1
+pkgdesc="A library to parse an EXIF file and read the data from those tags"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://sourceforge.net/projects/libexif"
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sf.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('deee153b1ded5a944ea05d041d959eca')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libfontenc/PKGBUILD b/abs/core/libfontenc/PKGBUILD
new file mode 100644
index 0000000..8e79264
--- /dev/null
+++ b/abs/core/libfontenc/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libfontenc
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 font encoding library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('zlib')
+makedepends=('pkgconfig' 'xproto')
+options=('libtool')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('5cd16a2e51ca7b96a3081c7486ff98b9')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --disable-static \
+ --with-encodingsdir=/usr/share/fonts/encodings
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libgcrypt/PKGBUILD b/abs/core/libgcrypt/PKGBUILD
new file mode 100644
index 0000000..f4ebfea
--- /dev/null
+++ b/abs/core/libgcrypt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 3545 2008-06-24 17:33:25Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=libgcrypt
+pkgver=1.4.1
+pkgrel=10
+pkgdesc="a general purpose crypto library based on the code used"
+arch=(i686 x86_64)
+url="http://www.gnupg.org"
+license=('LGPL')
+groups=('base')
+depends=('libgpg-error>=1.6')
+options=(!libtool)
+source=(#ftp://ftp.gnupg.org/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2
+ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/libgcrypt/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('26703ecef4bbe113b8e6a87572b80b32')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-padlock-support
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libgl/PKGBUILD b/abs/core/libgl/PKGBUILD
new file mode 100644
index 0000000..43e7c58
--- /dev/null
+++ b/abs/core/libgl/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 1895 2008-05-22 17:55:59Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libgl
+pkgver=7.0.3
+pkgrel=2
+pkgdesc="Mesa DRI OpenGL library and drivers"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://www.mesa3d.org"
+depends=('libxxf86vm' 'libdrm>=2.3' 'libxdamage')
+makedepends=('imake' 'glproto>=1.4.9' 'fixesproto' 'damageproto' 'pkgconfig')
+provides=('libgl-dri')
+replaces=('libgl-dri' 'libgl-mesa')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}
+
+ CONFIG="linux-dri-x86"
+ if [ "${CARCH}" = "x86_64" ]; then
+ CONFIG="linux-dri-x86-64"
+ sed -i -e "s/lib64/lib/g" configs/${CONFIG}
+ fi
+
+ echo "EXTRA_LIB_PATH =" >> configs/${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> configs/${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> configs/${CONFIG}
+ rm -f include/GL/glut*h
+ echo "USING_EGL = 0" >> configs/${CONFIG}
+ echo "PROGRAM_DIRS =" >> configs/${CONFIG}
+ echo "MKDEP = makedepend" >> configs/${CONFIG}
+ echo "DRI_DIRS =" >> configs/${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> configs/${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> configs/${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> configs/${CONFIG}
+
+ make ${CONFIG} || return 1
+ install -m755 -d ${startdir}/pkg/usr
+ make INSTALL_DIR=${startdir}/pkg/usr install || return 1
+
+ rm -rf ${startdir}/pkg/usr/include
+
+ install -m755 -d ${startdir}/pkg/usr/lib/xorg/modules/extensions || return 1
+ cd ${startdir}/pkg/usr/lib/xorg/modules/extensions || return 1
+ ln -sf libGLcore.xorg libGLcore.so
+ ln -sf libglx.xorg libglx.so
+}
diff --git a/abs/core/libglade/PKGBUILD b/abs/core/libglade/PKGBUILD
new file mode 100644
index 0000000..fc10160
--- /dev/null
+++ b/abs/core/libglade/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libglade
+pkgver=2.6.2
+pkgrel=1
+pkgdesc="Allows you to load glade interface files in a program at runtime"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gtk2' 'libxml2')
+makedepends=('python' 'pkgconfig')
+options=('!libtool')
+install=glade.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.6/${pkgname}-${pkgver}.tar.bz2
+ libglade-2.0.1-nowarning.patch)
+url="http://www.gnome.org"
+md5sums=('da4f9d1c6cd1337f6ef5e2db768d8557' '4f879c0ce550004905aa0fb24f25c353')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/libglade-2.0.1-nowarning.patch || return 1
+ ./configure --sysconfdir=/etc --prefix=/usr --localstatedir=/var
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m755 libglade-convert ${startdir}/pkg/usr/bin/libglade-convert
+}
diff --git a/abs/core/libglade/glade.install b/abs/core/libglade/glade.install
new file mode 100644
index 0000000..c98d2ed
--- /dev/null
+++ b/abs/core/libglade/glade.install
@@ -0,0 +1,30 @@
+post_install() {
+ if [ ! -d etc/xml ]; then
+ mkdir -p etc/xml
+ fi
+ if [ ! -e etc/xml/catalog ]; then
+ xmlcatalog --noout --create etc/xml/catalog
+ fi
+ xmlcatalog --noout --add "system" \
+ "http://glade.gnome.org/glade-2.0.dtd" \
+ /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog
+}
+
+pre_upgrade() {
+ post_remove
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+post_remove() {
+ xmlcatalog --noout --del \
+ /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/libglade/libglade-2.0.1-nowarning.patch b/abs/core/libglade/libglade-2.0.1-nowarning.patch
new file mode 100644
index 0000000..fd07121
--- /dev/null
+++ b/abs/core/libglade/libglade-2.0.1-nowarning.patch
@@ -0,0 +1,39 @@
+--- libglade-2.0.1/glade/glade-gtk.c.nowarning 2003-08-29 14:50:10.000000000 -0400
++++ libglade-2.0.1/glade/glade-gtk.c 2003-08-29 14:58:41.000000000 -0400
+@@ -639,9 +639,8 @@
+ if (!strcmp (childinfo->properties[j].name, "label")) {
+ label = childinfo->properties[j].value;
+ break;
+- } else {
+- g_warning ("Unknown CList child property: %s", childinfo->properties[j].name);
+ }
++ /* Ignore all other properties */
+ }
+
+ if (label) {
+@@ -683,6 +682,7 @@
+ char *icon = NULL;
+ gboolean use_stock = FALSE, active = FALSE, new_group = FALSE;
+ gboolean use_underline = FALSE;
++ gboolean sensitive = TRUE;
+ GtkWidget *iconw = NULL;
+ int j;
+
+@@ -708,6 +708,8 @@
+ group_name = value;
+ } else if (!strcmp (name, "new_group")) {
+ new_group = BOOL (value);
++ } else if (!strcmp (name, "sensitive")) {
++ sensitive = BOOL (value);
+ } else if (!strcmp (name, "visible")) {
+ /* ignore for now */
+ } else if (!strcmp (name, "tooltip")) {
+@@ -785,6 +787,8 @@
+ gtk_label_set_use_underline (GTK_LABEL (toolbar_child->label),
+ TRUE);
+ }
++
++ gtk_widget_set_sensitive (child, sensitive);
+
+ glade_xml_set_common_params (xml, child, childinfo->child);
+ } else {
diff --git a/abs/core/libgpg-error/PKGBUILD b/abs/core/libgpg-error/PKGBUILD
new file mode 100644
index 0000000..834b39c
--- /dev/null
+++ b/abs/core/libgpg-error/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=libgpg-error
+pkgver=1.6
+pkgrel=10
+pkgdesc="Support library for libgcrypt"
+arch=(i686 x86_64)
+url="http://www.gnupg.org"
+license=('LGPL')
+groups=('base')
+depends=('glibc')
+options=(!libtool)
+source=(#ftp://ftp.gnupg.org/gcrypt/libgpg-error/${pkgname}-${pkgver}.tar.bz2
+ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/libgpg-error/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f3e9870e213518b407a959f8d29cd554')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libgsf/PKGBUILD b/abs/core/libgsf/PKGBUILD
new file mode 100644
index 0000000..84f5edb
--- /dev/null
+++ b/abs/core/libgsf/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=libgsf
+pkgver=1.14.8
+pkgrel=1
+pkgdesc="The GNOME Structured File Library is a utility library for reading and writing structured file formats."
+arch=(i686 x86_64)
+url="http://www.gnome.org/"
+license=('GPL' 'LGPL')
+depends=('libxml2' 'glib2>=2.16.1' 'bzip2')
+makedepends=('perlxml' 'pkgconfig' 'python')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/GNOME/sources/${pkgname}/1.14/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('09e4b6639be79fa888cabc751f73674f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/gsf-gnome gsf-win32//' -e 's/thumbnailer//' Makefile.*
+ ./configure --prefix=/usr --disable-gtk-doc --without-gnome --without-bonobo
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/usr{,/share}/man/man1/gsf-office-thumbnailer.1
+}
diff --git a/abs/core/libice/PKGBUILD b/abs/core/libice/PKGBUILD
new file mode 100644
index 0000000..64378a3
--- /dev/null
+++ b/abs/core/libice/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libice
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Inter-Client Exchange library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc' 'xproto')
+makedepends=('pkgconfig' 'xtrans')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libICE-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libICE-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4ab4e67e0b8845aa201e984153087f4a')
diff --git a/abs/core/libid3tag/PKGBUILD b/abs/core/libid3tag/PKGBUILD
new file mode 100644
index 0000000..aad7fb2
--- /dev/null
+++ b/abs/core/libid3tag/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=libid3tag
+pkgver=0.15.1b
+pkgrel=2
+pkgdesc="library for id3 tagging"
+url="http://www.underbit.com/products/mad/"
+depends=('zlib')
+arch=('i686' 'x86_64')
+source=(ftp://ftp.mars.org/pub/mpeg/$pkgname-$pkgver.tar.gz id3tag.pc)
+url="http://www.underbit.com/products/mad/"
+md5sums=('e5808ad997ba32c498803822078748c3' 'cd5ea001dc24505040b781ad1de9ddf2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 $startdir/src/id3tag.pc $startdir/pkg/usr/lib/pkgconfig/id3tag.pc
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/libid3tag/id3tag.pc b/abs/core/libid3tag/id3tag.pc
new file mode 100644
index 0000000..07a8fae
--- /dev/null
+++ b/abs/core/libid3tag/id3tag.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr/bin
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: ID3TAG
+Description: libid3tag - ID3 tag manipulation library
+Version: 0.15.0b
+Libs: -L${libdir} -lid3tag -zf
+Cflags:
diff --git a/abs/core/libidn/PKGBUILD b/abs/core/libidn/PKGBUILD
new file mode 100644
index 0000000..6fb7d24
--- /dev/null
+++ b/abs/core/libidn/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Eric Johnson <eric@archlinux.org>
+pkgname=libidn
+pkgver=1.0
+pkgrel=1
+pkgdesc="Implementation of the Stringprep, Punycode and IDNA specifications"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/libidn/"
+license=('GPL' 'LGPL')
+depends=('glibc')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(ftp://alpha.gnu.org/pub/gnu/libidn/${pkgname}-${pkgver}.tar.gz)
+md5sums=('8a6a15dc061c0e17a97cb6b77d850e86')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libjpeg/PKGBUILD b/abs/core/libjpeg/PKGBUILD
new file mode 100644
index 0000000..807f7f5
--- /dev/null
+++ b/abs/core/libjpeg/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libjpeg
+pkgver=6b
+pkgrel=4
+pkgdesc="Library of JPEG support functions"
+arch=('i686' 'x86_64')
+depends=('glibc')
+source=(ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v$pkgver.tar.gz)
+md5sums=('dbd5f3b47ed13132f04c685d608a7547')
+
+build() {
+ cd $startdir/src/jpeg-$pkgver
+ ./configure --prefix=/usr --enable-shared --enable-static
+ make || return 1
+ mkdir -p $startdir/pkg/usr/{bin,lib,include,man/man1}
+ make prefix=$startdir/pkg/usr install
+
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
diff --git a/abs/core/liblbxutil/PKGBUILD b/abs/core/liblbxutil/PKGBUILD
new file mode 100644
index 0000000..ca531db
--- /dev/null
+++ b/abs/core/liblbxutil/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=liblbxutil
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="Low Bandwidth X11 Utility Library"
+arch=(i686)
+url="http://xorg.freedesktop.org/"
+depends=('zlib')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(b73cbd5bc3cd268722a624a5f1318fde)
+
+build() {
+ cd ${startdir}/src/${pkgname}-$pkgver
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/libldap/PKGBUILD b/abs/core/libldap/PKGBUILD
new file mode 100644
index 0000000..616e6a3
--- /dev/null
+++ b/abs/core/libldap/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 1627 2008-05-14 03:02:30Z eric $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libldap
+pkgver=2.4.11
+pkgrel=1
+pkgdesc="LDAP client libraries"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.openldap.org/"
+backup=(etc/openldap/ldap.conf)
+depends=('libsasl' 'openssl>=0.9.8f')
+options=('!libtool' '!makeflags')
+makedepends=('tcp_wrappers')
+source=(ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-${pkgver}.tgz
+ ntlm.patch
+ peercred.patch)
+
+build() {
+ cd ${startdir}/src/openldap-${pkgver}
+# patch -Np0 -i ${startdir}/src/ntlm.patch || return 1
+ patch -Np0 -i ${startdir}/src/peercred.patch || return 1
+
+ ./configure --prefix=/usr \
+ --libexecdir=/usr/sbin \
+ --sysconfdir=/etc \
+ --localstatedir=/var/lib/openldap \
+ --enable-crypt --enable-dynamic \
+ --with-threads --enable-wrappers \
+ --enable-spasswd --with-cyrus-sasl \
+ --disable-bdb --disable-hdb
+ cd include
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../libraries
+ make depend
+ make || return 1
+
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../doc/man/man3
+ make
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../man5
+ make
+ mkdir -p ${startdir}/pkg/usr/man/man5
+ install -m644 ldap.conf.5.tmp ${startdir}/pkg/usr/man/man5/ldap.conf.5
+
+ # get rid of duplicate default conf files
+ rm ${startdir}/pkg/etc/openldap/*.default
+
+ ln -sf liblber.so ${startdir}/pkg/usr/lib/liblber.so.2
+ ln -sf libldap.so ${startdir}/pkg/usr/lib/libldap.so.2
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/openldap
+ install -m644 ${startdir}/src/openldap-${pkgver}/LICENSE \
+ ${startdir}/pkg/usr/share/licenses/openldap/
+}
+md5sums=('920fedbbb5bc61c2ca52c56edeef770a'
+ '64c539d5f01f46f329b9d5c1324be4e9'
+ 'acc4112845522a6a1a517064c216f781')
diff --git a/abs/core/libldap/ntlm.patch b/abs/core/libldap/ntlm.patch
new file mode 100644
index 0000000..fca806b
--- /dev/null
+++ b/abs/core/libldap/ntlm.patch
@@ -0,0 +1,189 @@
+--- libraries/libldap/Makefile.in.orig 2004-01-01 13:16:29.000000000 -0500
++++ libraries/libldap/Makefile.in 2004-07-14 13:37:23.000000000 -0400
+@@ -20,7 +20,7 @@
+ SRCS = bind.c open.c result.c error.c compare.c search.c \
+ controls.c messages.c references.c extended.c cyrus.c \
+ modify.c add.c modrdn.c delete.c abandon.c \
+- sasl.c sbind.c kbind.c unbind.c cancel.c \
++ sasl.c ntlm.c sbind.c kbind.c unbind.c cancel.c \
+ filter.c free.c sort.c passwd.c whoami.c \
+ getdn.c getentry.c getattr.c getvalues.c addentry.c \
+ request.c os-ip.c url.c sortctrl.c vlvctrl.c \
+@@ -29,7 +29,7 @@
+ OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
+ controls.lo messages.lo references.lo extended.lo cyrus.lo \
+ modify.lo add.lo modrdn.lo delete.lo abandon.lo \
+- sasl.lo sbind.lo kbind.lo unbind.lo cancel.lo \
++ sasl.lo ntlm.lo sbind.lo kbind.lo unbind.lo cancel.lo \
+ filter.lo free.lo sort.lo passwd.lo whoami.lo \
+ getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
+ request.lo os-ip.lo url.lo sortctrl.lo vlvctrl.lo \
+--- /dev/null 1970-01-01 01:00:00.000000000 +0100
++++ libraries/libldap/ntlm.c 2005-12-02 09:47:08.226364500 +0100
+@@ -0,0 +1,138 @@
++/* $OpenLDAP: pkg/ldap/libraries/libldap/ntlm.c,v 1.1.4.10 2002/01/04 20:38:21 kurt Exp $ */
++/*
++ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
++ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
++ */
++
++/* Mostly copied from sasl.c */
++
++#include "portable.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++
++#include <ac/socket.h>
++#include <ac/string.h>
++#include <ac/time.h>
++#include <ac/errno.h>
++
++#include "ldap-int.h"
++
++int
++ldap_ntlm_bind(
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp )
++{
++ BerElement *ber;
++ int rc;
++ ber_int_t id;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_ntlm_bind\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( msgidp != NULL );
++
++ if( msgidp == NULL ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ /* create a message to send */
++ if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ assert( LBER_VALID( ber ) );
++
++ LDAP_NEXT_MSGID( ld, id );
++ rc = ber_printf( ber, "{it{istON}" /*}*/,
++ id, LDAP_REQ_BIND,
++ ld->ld_version, dn, tag,
++ cred );
++
++ /* Put Server Controls */
++ if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
++ ld->ld_errno = LDAP_ENCODING_ERROR;
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ /* send the message */
++ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber, id );
++
++ if(*msgidp < 0)
++ return ld->ld_errno;
++
++ return LDAP_SUCCESS;
++}
++
++int
++ldap_parse_ntlm_bind_result(
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge)
++{
++ ber_int_t errcode;
++ ber_tag_t tag;
++ BerElement *ber;
++ ber_len_t len;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_parse_ntlm_bind_result\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( res != NULL );
++
++ if ( ld == NULL || res == NULL ) {
++ return LDAP_PARAM_ERROR;
++ }
++
++ if( res->lm_msgtype != LDAP_RES_BIND ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ if ( ld->ld_error ) {
++ LDAP_FREE( ld->ld_error );
++ ld->ld_error = NULL;
++ }
++ if ( ld->ld_matched ) {
++ LDAP_FREE( ld->ld_matched );
++ ld->ld_matched = NULL;
++ }
++
++ /* parse results */
++
++ ber = ber_dup( res->lm_ber );
++
++ if( ber == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ tag = ber_scanf( ber, "{ioa" /*}*/,
++ &errcode, challenge, &ld->ld_error );
++ ber_free( ber, 0 );
++
++ if( tag == LBER_ERROR ) {
++ ld->ld_errno = LDAP_DECODING_ERROR;
++ return ld->ld_errno;
++ }
++
++ ld->ld_errno = errcode;
++
++ return( ld->ld_errno );
++}
++
+--- include/ldap.h.orig
++++ include/ldap.h
+@@ -2115,5 +2115,25 @@
+ ldap_passwordpolicy_err2txt LDAP_P(( LDAPPasswordPolicyError ));
+ #endif /* LDAP_CONTROL_PASSWORDPOLICYREQUEST */
+
++/*
++ * hacks for NTLM
++ */
++#define LDAP_AUTH_NTLM_REQUEST ((ber_tag_t) 0x8aU)
++#define LDAP_AUTH_NTLM_RESPONSE ((ber_tag_t) 0x8bU)
++LDAP_F( int )
++ldap_ntlm_bind LDAP_P((
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp ));
++LDAP_F( int )
++ldap_parse_ntlm_bind_result LDAP_P((
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge));
++
+ LDAP_END_DECL
+ #endif /* _LDAP_H */
diff --git a/abs/core/libldap/peercred.patch b/abs/core/libldap/peercred.patch
new file mode 100644
index 0000000..7d159b7
--- /dev/null
+++ b/abs/core/libldap/peercred.patch
@@ -0,0 +1,11 @@
+--- ./libraries/liblutil/getpeereid.c 2008-02-12 00:24:13.000000000 +0100
++++ ./libraries/liblutil/getpeereid.c 2008-06-12 12:55:34.000000000 +0200
+@@ -14,6 +14,8 @@
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+
++#define _GNU_SOURCE
++
+ #include "portable.h"
+
+ #ifndef HAVE_GETPEEREID
diff --git a/abs/core/libmad/PKGBUILD b/abs/core/libmad/PKGBUILD
new file mode 100644
index 0000000..c4c0939
--- /dev/null
+++ b/abs/core/libmad/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Travis Willard <travis@archlinux.org>
+pkgname=libmad
+pkgver=0.15.1b
+pkgrel=2
+pkgdesc="A high-quality MPEG audio decoder"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc')
+replaces=('mad')
+conflicts=('mad')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mad/$pkgname-$pkgver.tar.gz
+ libmad.patch
+ libmad_gcc43.patch)
+url="http://www.underbit.com/products/mad/"
+md5sums=('1be543bc30c56fb6bea1d7bf6a64e66c' 'fbcca0267a423bae45389666f4cb04d5'\
+ 'a5eede0478bee6f7adfd2c001901f1b8')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i $startdir/src/libmad.patch || return 1
+ patch -Np1 -i $startdir/src/libmad_gcc43.patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libmad/libmad.patch b/abs/core/libmad/libmad.patch
new file mode 100644
index 0000000..0ac88ac
--- /dev/null
+++ b/abs/core/libmad/libmad.patch
@@ -0,0 +1,117 @@
+diff -ruN libmad-0.15.1b.orig/Makefile.am libmad-0.15.1b/Makefile.am
+--- libmad-0.15.1b.orig/Makefile.am 2004-02-17 02:02:03.000000000 +0000
++++ libmad-0.15.1b/Makefile.am 2005-08-25 12:08:04.000000000 +0000
+@@ -33,9 +33,12 @@
+ minimad_INCLUDES =
+ minimad_LDADD = libmad.la
+
+-EXTRA_DIST = mad.h.sed \
++EXTRA_DIST = mad.h.sed mad.pc.in \
+ CHANGES COPYRIGHT CREDITS README TODO VERSION
+
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA= mad.pc
++
+ exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \
+ synth.h decoder.h
+
+diff -ruN libmad-0.15.1b.orig/Makefile.in libmad-0.15.1b/Makefile.in
+--- libmad-0.15.1b.orig/Makefile.in 2004-02-17 02:33:23.000000000 +0000
++++ libmad-0.15.1b/Makefile.in 2005-08-25 12:09:34.000000000 +0000
+@@ -14,6 +14,8 @@
+
+ @SET_MAKE@
+
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = mad.pc
+
+ SOURCES = $(libmad_la_SOURCES) $(EXTRA_libmad_la_SOURCES) $(minimad_SOURCES)
+
+@@ -43,7 +45,7 @@
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in $(srcdir)/libmad.list.in \
+ $(top_srcdir)/configure COPYING INSTALL TODO config.guess \
+- config.sub depcomp install-sh ltmain.sh missing mkinstalldirs
++ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs mad.pc.in
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+@@ -53,7 +55,7 @@
+ configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = config.h
+-CONFIG_CLEAN_FILES = libmad.list
++CONFIG_CLEAN_FILES = libmad.list mad.pc
+ am__installdirs = $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
+ libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+@@ -218,7 +220,7 @@
+ minimad_SOURCES = minimad.c
+ minimad_INCLUDES =
+ minimad_LDADD = libmad.la
+-EXTRA_DIST = mad.h.sed \
++EXTRA_DIST = mad.h.sed mad.pc.in \
+ CHANGES COPYRIGHT CREDITS README TODO VERSION
+
+ exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \
+@@ -298,6 +300,28 @@
+ rm -f stamp-h1
+ touch $@
+
++mad.pc: $(top_builddir)/config.status mad.pc.in
++ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
++ @list='$(pkgconfig_DATA)'; for p in $$list; do \
++ if test -f $(srcdir)/$$p; then \
++ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
++ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \
++ else if test -f $$p; then \
++ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
++ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \
++ fi; fi; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ list='$(pkgconfig_DATA)'; for p in $$list; do \
++ rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \
++ done
++
+ distclean-hdr:
+ -rm -f config.h stamp-h1
+ libmad.list: $(top_builddir)/config.status $(srcdir)/libmad.list.in
+@@ -726,7 +750,7 @@
+
+ info-am:
+
+-install-data-am: install-includeHEADERS
++install-data-am: install-includeHEADERS install-pkgconfigDATA
+
+ install-exec-am: install-libLTLIBRARIES
+
+@@ -757,7 +781,7 @@
+ ps-am:
+
+ uninstall-am: uninstall-includeHEADERS uninstall-info-am \
+- uninstall-libLTLIBRARIES
++ uninstall-libLTLIBRARIES install-pkgconfigDATA
+
+ uninstall-info: uninstall-info-recursive
+
+diff -ruN libmad-0.15.1b.orig/mad.pc.in libmad-0.15.1b/mad.pc.in
+--- libmad-0.15.1b.orig/mad.pc.in 1970-01-01 00:00:00.000000000 +0000
++++ libmad-0.15.1b/mad.pc.in 2005-08-25 12:08:04.000000000 +0000
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: MAD
++Description: libmad - MPEG audio decoder library
++Version: @VERSION@
++Libs: -L${libdir} -lmad
++Cflags:
diff --git a/abs/core/libmad/libmad_gcc43.patch b/abs/core/libmad/libmad_gcc43.patch
new file mode 100644
index 0000000..6a9af79
--- /dev/null
+++ b/abs/core/libmad/libmad_gcc43.patch
@@ -0,0 +1,10 @@
+--- libmad-0.15.1b/configure.vanilla 2008-04-09 07:41:14.000000000 +0000
++++ libmad-0.15.1b/configure 2008-04-09 07:43:12.000000000 +0000
+@@ -19099,7 +19099,6 @@
+ case "$optimize" in
+ -O|"-O "*)
+ optimize="-O"
+- optimize="$optimize -fforce-mem"
+ optimize="$optimize -fforce-addr"
+ : #x optimize="$optimize -finline-functions"
+ : #- optimize="$optimize -fstrength-reduce"
diff --git a/abs/core/libmp4v2/PKGBUILD b/abs/core/libmp4v2/PKGBUILD
new file mode 100644
index 0000000..7c0557c
--- /dev/null
+++ b/abs/core/libmp4v2/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 3482 2008-06-22 21:06:58Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libmp4v2
+pkgver=1.6
+pkgrel=1
+pkgdesc="MPEG-4 library and tools from mpeg4ip"
+arch=('i686')
+license=('custom')
+url="http://mpeg4ip.sourceforge.net/"
+depends=('gcc-libs')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mpeg4ip/mpeg4ip-${pkgver}.tar.gz)
+md5sums=('004b481542e5aa9fdb455d9a1b640eff')
+
+build() {
+ cd ${startdir}/src/mpeg4ip-${pkgver}
+ touch bootstrapped
+ echo "" > lib/rtp/configure
+ echo "" > lib/SDLAudio/configure
+
+ ./configure --prefix=/usr || return 1
+ for dir in lib/gnu lib/mp4av lib/mp4v2; do
+ cd ${startdir}/src/mpeg4ip-${pkgver}/${dir}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ done
+ install -m644 ${startdir}/src/mpeg4ip-${pkgver}/include/mpeg4ip{,_version}.h ${startdir}/pkg/usr/include/ || return 1
+ install -m644 $startdir/src/mpeg4ip-$pkgver/mpeg4ip_config.h $startdir/pkg/usr/include/ || return 1
+
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/mpeg4ip-${pkgver}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libmysqlclient/PKGBUILD b/abs/core/libmysqlclient/PKGBUILD
new file mode 100644
index 0000000..b8e84d1
--- /dev/null
+++ b/abs/core/libmysqlclient/PKGBUILD
@@ -0,0 +1,55 @@
+# $Id: PKGBUILD 2463 2008-06-02 11:37:21Z alexander $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=libmysqlclient
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="MySQL client libraries"
+arch=(i686 x86_64)
+depends=('openssl' 'zlib')
+makedepends=('gcc' 'readline' 'tcp_wrappers' 'libtool')
+options=('!libtool')
+license=('GPL')
+url=('http://www.mysql.com/')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz)
+
+build() {
+ # PIC
+ export CFLAGS="-fPIC ${CFLAGS}"
+ cd $startdir/src/mysql-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --localstatedir=/var --sysconfdir=/etc \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db
+
+ for dir in include strings regex mysys dbug extra; do
+ pushd ${dir} || return 1
+ make || return 1
+ popd
+ done
+ for dir in libmysql libmysql_r; do
+ pushd ${dir} || return 1
+ make link_sources
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ popd
+ done
+ cd include
+ make DESTDIR=${startdir}/pkg install
+
+ cd ../scripts
+ make mysql_config
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 mysql_config ${startdir}/pkg/usr/bin
+
+ # create library symlinks in /usr/lib
+ ln -sf mysql/libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so.15
+ ln -sf libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so
+ ln -sf libmysqlclient.so.15 $startdir/pkg/usr/lib/libmysqlclient.so.1
+ ln -sf mysql/libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so.15
+ ln -sf libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so
+ ln -sf libmysqlclient_r.so.15 $startdir/pkg/usr/lib/libmysqlclient_r.so.1
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431')
diff --git a/abs/core/libogg/PKGBUILD b/abs/core/libogg/PKGBUILD
new file mode 100644
index 0000000..b317c8b
--- /dev/null
+++ b/abs/core/libogg/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libogg
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="Ogg bitstream and framing library"
+pkgurl="http://www.xiph.org/ogg/vorbis/download"
+depends=('glibc')
+arch=('i686' 'x86_64')
+source=(http://downloads.xiph.org/releases/ogg/$pkgname-$pkgver.tar.gz)
+md5sums=('eaf7dc6ebbff30975de7527a80831585')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
+
diff --git a/abs/core/libpcap/PKGBUILD b/abs/core/libpcap/PKGBUILD
new file mode 100644
index 0000000..0a586db
--- /dev/null
+++ b/abs/core/libpcap/PKGBUILD
@@ -0,0 +1,44 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=libpcap
+pkgver=0.9.8
+pkgrel=11
+pkgdesc="A system-independent interface for user-level packet capture"
+arch=(i686 x86_64)
+url="http://www.tcpdump.org/"
+license=('BSD')
+groups=('base')
+depends=('glibc')
+makedepends=('flex')
+source=(http://www.sfr-fresh.com/unix/misc/libpcap-${pkgver}.tar.gz
+ libpcap-shared.patch)
+md5sums=('5208f24d0328ee7c20b52c43eaa9aa0e'
+ 'b8a9c5e5cea0b89a8a7456c6c4d59db4')
+
+# This package has a strict SONAME that changes in EVERY MINOR
+# release. Whenever you feel like updating this package, DON'T,
+# it will break a number of essential system tools.
+# Again, for dummies: IF YOU UPDATE THIS PACKAGE DIRECTLY TO CORE,
+# I WILL PERSONALLY CHOP YOUR HEAD OFF!
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/libpcap-shared.patch || return 1
+ sed -i -e "s/@MAJOR@/`awk -F '.' '{ print $1 }' VERSION`/" \
+ -e "s/@MINOR@/`awk -F '.' '{ print $2 }' VERSION`/" \
+ -e "s/@SUBMINOR@/`awk -F '.' '{ print $3 }' VERSION`/" \
+ -e "s/@VERSION@/`cat VERSION`/" Makefile.in
+
+ ./configure --prefix=/usr --enable-ipv6
+ DEFS="-g -D_U_=\"\" -fPIC -DHAVE_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
+ make -j1 DEFS="${DEFS}" || return 1
+ make DESTDIR=${startdir}/pkg install
+# # backwards compatibility, programs often look for net/bpf.h
+ mkdir -p ${startdir}/pkg/usr/include/net
+ cd ${startdir}/pkg/usr/include/net
+ ln -s ../pcap-bpf.h bpf.h
+
+ #install the license
+ install -D -m644 $startdir/src/$pkgname-$pkgver/LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core/libpcap/libpcap-shared.patch b/abs/core/libpcap/libpcap-shared.patch
new file mode 100644
index 0000000..a200836
--- /dev/null
+++ b/abs/core/libpcap/libpcap-shared.patch
@@ -0,0 +1,51 @@
+diff -u -r libpcap-0.6.2/Makefile.in libpcap-shared/Makefile.in
+--- libpcap-0.6.2/Makefile.in Thu Jan 18 05:06:24 2001
++++ libpcap-shared/Makefile.in Fri Jul 20 16:26:05 2001
+@@ -22,6 +22,10 @@
+ #
+ # Various configurable paths (remember to edit Makefile.in, not Makefile)
+ #
++MAJOR = @MAJOR@
++MINOR = @MINOR@
++SUBMINOR = @SUBMINOR@
++VERSION = @VERSION@
+
+ # Top level hierarchy
+ prefix = @prefix@
+@@ -47,7 +51,7 @@
+ DEFS = @DEFS@
+
+ # Standard CFLAGS
+-CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
++CFLAGS = $(CCOPT) $(INCLS) $(DEFS) -fPIC -DPIC
+
+ INSTALL = @INSTALL@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+@@ -91,9 +95,14 @@
+ TAGFILES = \
+ $(SRC) $(HDR) $(TAGHDR)
+
+-CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
+
+-all: libpcap.a
++
++CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so.$(VERSION)
++
++all: libpcap.a libpcap.so.$(VERSION)
++
++libpcap.so.$(VERSION):
++ gcc -shared -Wl,-soname -Wl,libpcap.so.$(VERSION) -o libpcap.so.$(VERSION) $(OBJ) -lc
+
+ libpcap.a: $(OBJ)
+ @rm -f $@
+@@ -139,6 +148,10 @@
+ [ -d $(DESTDIR)$(libdir) ] || \
+ (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
+ $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
++ $(INSTALL_DATA) libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(VERSION)
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR)
++ ln -s libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR).$(MINOR)
+ $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
+ [ -d $(DESTDIR)$(includedir) ] || \
+ (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
diff --git a/abs/core/libpng/ChangeLog b/abs/core/libpng/ChangeLog
new file mode 100644
index 0000000..9612756
--- /dev/null
+++ b/abs/core/libpng/ChangeLog
@@ -0,0 +1,51 @@
+
+2008-08-23 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686: 1.2.31
+ * Thanks to Hussam Al-Tayeb
+
+2008-08-17 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Had to return to 1.2.29 because xul depends on
+ png with apng patch
+
+2008-08-17 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686: 1.2.30
+ * Fixes some security issues
+ * Remove the apng patch as there was no compatible version
+ for this version
+
+2008-07-04 Douglas Soares de Andrade <douglas@archlinux.org>
+
+ * Updated for i686 - 1.2.29-1
+ * Updated the apng patch for 1.2.29
+
+2008-05-06 Travis Willard <travis@archlinux.org>
+
+ * 1.2.28-1
+ Upstream update
+ Uses same APNG patchset as 1.2.27
+
+2008-05-01 Jan de Groot <jgc@archlinux.org>
+
+ * 1.2.27-1
+ Upstream update (security update!)
+ Fix APNG patchset to apply to 1.2.27
+ Fix build with newer libtool versions
+
+2008-03-12 Travis Willard <travis@archlinux.org>
+
+ * 1.2.25-1
+ Upstream update
+
+2008-02-18 Travis Willard <travis@archlinux.org>
+
+ * 1.2.24-3
+ Corrected ChangeLog
+
+2008-02-18 Travis Willard <travis@archlinux.org>
+
+ * 1.2.24-2
+ Added ChangeLog
+ Added APNG patchset from <http://littlesvr.ca/apng/>
diff --git a/abs/core/libpng/PKGBUILD b/abs/core/libpng/PKGBUILD
new file mode 100644
index 0000000..a67b300
--- /dev/null
+++ b/abs/core/libpng/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 10073 2008-08-23 15:51:29Z douglas $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Maintainer: Travis Willard <travis@archlinux.org>
+# Maintainer: Douglas Soares de Andrade <douglas@archlinux.org>
+
+pkgname=libpng
+pkgver=1.2.31
+pkgrel=1
+pkgdesc="A collection of routines used to create PNG format graphics files"
+arch=('i686' 'x86_64')
+url="http://www.libpng.org/pub/png/libpng.html"
+license=('custom')
+depends=('zlib')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2
+ # http://littlesvr.ca/apng/diff/${pkgname}-${pkgver}-apng.patch
+ ${pkgname}-${pkgver}-apng.patch )
+options=('!libtool')
+
+md5sums=('78d2f8c4e0d64f8948819563587302d3'
+ 'fab42a4ad4de6fcb87dcca6a7a19aefb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+
+ # Add animated PNG (apng) support
+ patch -Np0 -i $startdir/src/${pkgname}-${pkgver}-apng.patch || return 1
+
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+
+ ./configure --prefix=/usr || return 1
+ make ECHO=echo || return 1
+ make ECHO=echo DESTDIR=${startdir}/pkg install || return 1
+
+ cd contrib/pngminus
+ make ECHO=echo PNGLIB="-L${startdir}/pkg/usr/lib -lpng" -f makefile.std png2pnm pnm2png
+ install -m755 png2pnm pnm2png ${startdir}/pkg/usr/bin/
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ../../LICENSE ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libpng/libpng-1.2.29-apng.patch b/abs/core/libpng/libpng-1.2.29-apng.patch
new file mode 100644
index 0000000..cc27ca3
--- /dev/null
+++ b/abs/core/libpng/libpng-1.2.29-apng.patch
@@ -0,0 +1,1671 @@
+Submitted By: Jens Ornot <oj_webstar@t-online.de>
+Resubmitted by: Jens Ornot <oj_webstar@t-online.de> - Fix APNG patchset to apply to 1.2.27
+Date: 2008-05-24
+Initial Package Version: 1.2.10
+Upstream Status: Unknown
+Origin: Andrew Smith
+Description: APNG is an extension of the [PNG][pngspec] format, adding support for animated images.
+ It is intended to be a replacement for simple animated images
+ that have traditionally used the [GIF][gifspec] format,
+ while adding support for 24-bit images and 8-bit transparency.
+ APNG is a simpler alternative to MNG,
+ providing a spec suitable for the most common usage of animated images on the Internet.
+
+ APNG is backwards-compatible with PNG;
+ any PNG decoder should be able to ignore the APNG-specific chunks and display a single image.
+
+diff -ruN libpng-1.2.27/png.c libpng-1.2.27.apng/png.c
+--- libpng-1.2.27/png.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/png.c 2008-05-01 09:49:58.000000000 +0000
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+diff -ruN libpng-1.2.27/png.h libpng-1.2.27.apng/png.h
+--- libpng-1.2.27/png.h 2008-04-30 10:23:11.000000000 +0000
++++ libpng-1.2.27.apng/png.h 2008-05-01 09:49:58.000000000 +0000
+@@ -958,6 +958,19 @@
+ png_fixed_point int_y_blue;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
++#endif
++
+ } png_info;
+
+ typedef png_info FAR * png_infop;
+@@ -1059,6 +1072,8 @@
+ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -1099,6 +1114,10 @@
+ typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+ typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+ png_uint_32, int));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp,
++ png_uint_32));
++#endif
+ #endif
+
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+@@ -1430,6 +1449,39 @@
+ png_uint_32 user_height_max;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
++#endif
++#endif
++
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
++
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
++
+ /* New member added in libpng-1.0.25 and 1.2.17 */
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* storage for unknown chunk that the library doesn't recognize. */
+@@ -1759,6 +1811,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+ png_bytepp image));
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr,
++ png_infop png_info, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++
++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr,
++ png_infop png_info));
++#endif
++
+ /* writes the end of the PNG file. */
+ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+@@ -2007,6 +2071,11 @@
+ png_voidp progressive_ptr,
+ png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+ png_progressive_end_ptr end_fn));
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif
+
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2444,6 +2513,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_num_plays)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid)
++ PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++#endif /* PNG_APNG_SUPPORTED */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* provide a list of chunks and how they are to be handled, if the built-in
+ handling or default unknown chunk handling is not desired. Any chunks not
+@@ -2750,6 +2872,8 @@
+ #define PNG_BACKGROUND_IS_GRAY 0x800
+ #define PNG_HAVE_PNG_SIGNATURE 0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
++#define PNG_HAVE_acTL 0x4000
++#define PNG_HAVE_fcTL 0x8000L
+
+ /* flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -2890,6 +3014,9 @@
+ #define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
+ #define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
+ #define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
++#define PNG_acTL png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'}
++#define PNG_fcTL png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'}
++#define PNG_fdAT png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'}
+
+ #ifdef PNG_USE_GLOBAL_ARRAYS
+ PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
+@@ -2913,6 +3040,9 @@
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_acTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fcTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fdAT[5];
+ #endif /* PNG_USE_GLOBAL_ARRAYS */
+
+ #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
+@@ -3187,6 +3317,17 @@
+ #endif
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays));
++
++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++#endif
++
+ /* Called when finished processing a row of data */
+ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
+
+@@ -3238,6 +3379,20 @@
+ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* private, reset some things to become ready for reading next frame */
++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr));
++#endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++/* private, reset some things to become ready for writing next frame */
++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 width, png_uint_32 height));
++#endif
++
+ /* these are the functions that do the transformations */
+ #if defined(PNG_READ_FILLER_SUPPORTED)
+ PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
+@@ -3453,6 +3608,18 @@
+ png_uint_32 length));
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr));
++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr,
++ png_uint_32 length));
++#endif
++
+ PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 length));
+
+diff -ruN libpng-1.2.27/pngconf.h libpng-1.2.27.apng/pngconf.h
+--- libpng-1.2.27/pngconf.h 2008-04-30 10:23:11.000000000 +0000
++++ libpng-1.2.27.apng/pngconf.h 2008-05-01 09:49:58.000000000 +0000
+@@ -925,6 +925,10 @@
+ # define PNG_READ_zTXt_SUPPORTED
+ # define PNG_zTXt_SUPPORTED
+ #endif
++#ifndef PNG_NO_READ_APNG
++# define PNG_READ_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++#endif
+ #ifndef PNG_NO_READ_UNKNOWN_CHUNKS
+ # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+@@ -1067,6 +1071,12 @@
+ # define PNG_zTXt_SUPPORTED
+ # endif
+ #endif
++#ifndef PNG_NO_WRITE_APNG
++# define PNG_WRITE_APNG_SUPPORTED
++# ifndef PNG_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++# endif
++#endif
+ #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
+ # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+diff -ruN libpng-1.2.27/pngget.c libpng-1.2.27.apng/pngget.c
+--- libpng-1.2.27/pngget.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngget.c 2008-05-01 09:49:58.000000000 +0000
+@@ -797,6 +797,167 @@
+ }
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_get_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *num_frames, png_uint_32 *num_plays)
++{
++ png_debug1(1, "in %s retrieval function\n", "acTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_acTL) &&
++ num_frames != NULL && num_plays != NULL)
++ {
++ *num_frames = info_ptr->num_frames;
++ *num_plays = info_ptr->num_plays;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_frames(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_frames()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_frames);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_plays(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_plays()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_plays);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *width, png_uint_32 *height,
++ png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den,
++ png_byte *dispose_op, png_byte *blend_op)
++{
++ png_debug1(1, "in %s retrieval function\n", "fcTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_fcTL) &&
++ width != NULL && height != NULL &&
++ x_offset != NULL && x_offset != NULL &&
++ delay_num != NULL && delay_den != NULL &&
++ dispose_op != NULL && blend_op != NULL)
++ {
++ *width = info_ptr->next_frame_width;
++ *height = info_ptr->next_frame_height;
++ *x_offset = info_ptr->next_frame_x_offset;
++ *y_offset = info_ptr->next_frame_y_offset;
++ *delay_num = info_ptr->next_frame_delay_num;
++ *delay_den = info_ptr->next_frame_delay_den;
++ *dispose_op = info_ptr->next_frame_dispose_op;
++ *blend_op = info_ptr->next_frame_blend_op;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_width()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_width);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_height()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_height);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_x_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_x_offset);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_y_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_y_offset);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_num()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_num);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_den()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_den);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_dispose_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_dispose_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_blend_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_blend_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr != NULL)
++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++
++ return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+diff -ruN libpng-1.2.27/pngpread.c libpng-1.2.27.apng/pngpread.c
+--- libpng-1.2.27/pngpread.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngpread.c 2008-05-01 09:49:58.000000000 +0000
+@@ -192,6 +192,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ /* First we make sure we have enough data for the 4 byte chunk name
+ * and the 4 byte chunk length before proceeding with decoding the
+@@ -215,7 +220,104 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ }
+-
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->buffer_size < 4)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_ensure_sequence_number(png_ptr, 4);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ {
++ /* discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++
++ return;
++ }
++ }
++ else if(!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++
++ return;
++ }
++ else
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++
++ return;
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ if(png_ptr->mode & PNG_AFTER_IDAT)
+ png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
+@@ -297,6 +399,9 @@
+ png_error(png_ptr, "Too many IDAT's found");
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+@@ -492,6 +597,35 @@
+ png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
+ }
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fdAT(png_ptr, info_ptr, png_ptr->push_length);
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
+ else
+ {
+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
+@@ -662,13 +796,17 @@
+ png_push_read_IDAT(png_structp png_ptr)
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+- PNG_CONST PNG_IDAT;
++ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
++#endif
+ #endif
+ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
+ {
+ png_byte chunk_length[4];
+
+- if (png_ptr->buffer_size < 8)
++ if (png_ptr->buffer_size < 12)
+ {
+ png_push_save_buffer(png_ptr);
+ return;
+@@ -680,15 +818,59 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4)
++ && png_ptr->num_frames_read > 0)
++ {
++ if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++ if ( png_memcmp(png_ptr->chunk_name, png_IDAT, 4)
++ && (png_ptr->num_frames_read == 0) )
+ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
+ if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
+ png_error(png_ptr, "Not enough compressed data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++#endif
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if(png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ if (png_ptr->idat_size && png_ptr->save_buffer_size)
+ {
+@@ -1589,6 +1771,17 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
++{
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++}
++#endif
++
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_structp png_ptr)
+ {
+diff -ruN libpng-1.2.27/pngread.c libpng-1.2.27.apng/pngread.c
+--- libpng-1.2.27/pngread.c 2008-04-30 10:23:12.000000000 +0000
++++ libpng-1.2.27.apng/pngread.c 2008-05-01 09:49:58.000000000 +0000
+@@ -405,6 +405,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_byte chunk_length[4];
+ png_uint_32 length;
+@@ -458,6 +463,9 @@
+ !(png_ptr->mode & PNG_HAVE_PLTE))
+ png_error(png_ptr, "Missing PLTE before IDAT");
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ break;
+@@ -530,12 +538,97 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
++
++ png_debug(0, "Reading frame head\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_acTL))
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
++
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
++
++ png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_IDAT;
++ PNG_fdAT;
++ PNG_fcTL;
++#endif
++ png_byte chunk_length[4];
++ png_uint_32 length;
++
++ png_read_data(png_ptr, chunk_length, 4);
++ length = png_get_uint_31(png_ptr, chunk_length);
++
++ png_reset_crc(png_ptr);
++ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
++
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* discard trailing fdATs for frames other than the first */
++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -572,6 +665,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_CONST PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_fdAT;
++ PNG_CONST PNG_IEND;
++#endif
+ PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
+ 0xff};
+ PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+@@ -701,19 +798,46 @@
+ {
+ if (!(png_ptr->zstream.avail_in))
+ {
+- while (!png_ptr->idat_size)
++ png_uint_32 bytes_to_skip = 0;
++
++ while (!png_ptr->idat_size || bytes_to_skip != 0)
+ {
+ png_byte chunk_length[4];
+
+- png_crc_finish(png_ptr, 0);
+-
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
++
+ png_read_data(png_ptr, chunk_length, 4);
+ png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length);
+-
++
+ png_reset_crc(png_ptr);
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+- png_error(png_ptr, "Not enough image data");
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read == 0)
++ {
++#endif
++ if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
++ }
++
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
++
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
+ png_ptr->zstream.next_in = png_ptr->zbuf;
+@@ -731,6 +855,9 @@
+ png_error(png_ptr, "Extra compressed data");
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->num_frames_read++;
++#endif
+ break;
+ }
+ if (ret != Z_OK)
+@@ -985,6 +1112,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+
+ png_read_data(png_ptr, chunk_length, 4);
+@@ -1091,6 +1223,14 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ } while (!(png_ptr->mode & PNG_HAVE_IEND));
+diff -ruN libpng-1.2.27/pngrtran.c libpng-1.2.27.apng/pngrtran.c
+--- libpng-1.2.27/pngrtran.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngrtran.c 2008-05-01 09:49:58.000000000 +0000
+@@ -1286,7 +1286,7 @@
+ * or png_read_update_info() after setting transforms that expand
+ * pixels. This check added to libpng-1.2.19 */
+ #if (PNG_WARN_UNINITIALIZED_ROW==1)
+- png_error(png_ptr, "Uninitialized row");
++ png_warning(png_ptr, "Uninitialized row");
+ #else
+ png_warning(png_ptr, "Uninitialized row");
+ #endif
+diff -ruN libpng-1.2.27/pngrutil.c libpng-1.2.27.apng/pngrutil.c
+--- libpng-1.2.27/pngrutil.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngrutil.c 2008-05-01 09:49:58.000000000 +0000
+@@ -374,6 +374,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2169,6 +2174,168 @@
+ }
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_acTL)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if(didSet)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "fcTL for the first frame must have zero offset");
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ png_error(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++
++ /* the set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++}
++
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
++{
++ png_byte data[4];
++ png_uint_32 sequence_number;
++
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
++
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* This function is called when we haven't found a handler for a
+ chunk. If there isn't a problem with the chunk itself (ie bad
+ chunk name, CRC, or a critical chunk), the chunk is silently ignored
+@@ -3180,4 +3347,82 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
++{
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++}
++
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++}
++
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ /* start of interlace block */
++ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
++
++ /* offset to next interlace block */
++ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
++
++ /* start of interlace block in the y direction */
++ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
++
++ /* offset to next interlace block in the y direction */
++ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
++#endif
++ png_uint_32 row_bytes;
++
++ if (png_ptr->interlaced)
++ {
++ if (!(png_ptr->transformations & PNG_INTERLACE))
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
++
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++
++ row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
++
++ png_ptr->irowbytes = (png_size_t)row_bytes;
++ if((png_uint_32)png_ptr->irowbytes != row_bytes)
++ png_error(png_ptr, "png_progressive_read_reset(): Rowbytes "
++ "overflow");
++ }
++ else
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ png_ptr->irowbytes = png_ptr->rowbytes + 1;
++ }
++
++ png_ptr->flags &= ~PNG_FLAG_ZLIB_FINISHED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
+ #endif /* PNG_READ_SUPPORTED */
+diff -ruN libpng-1.2.27/pngset.c libpng-1.2.27.apng/pngset.c
+--- libpng-1.2.27/pngset.c 2008-04-30 10:23:13.000000000 +0000
++++ libpng-1.2.27.apng/pngset.c 2008-05-01 09:49:58.000000000 +0000
+@@ -364,6 +364,11 @@
+ info_ptr->rowbytes = (png_size_t)0;
+ else
+ info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width);
++
++#if defined(PNG_APNG_SUPPORTED)
++ /* for non-animated png. this may be overritten from an acTL chunk later */
++ info_ptr->num_frames = 1;
++#endif
+ }
+
+ #if defined(PNG_oFFs_SUPPORTED)
+@@ -1025,6 +1030,141 @@
+ }
+ #endif /* PNG_sPLT_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_set_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++ png_debug1(1, "in %s storage function\n", "acTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_acTL() with NULL png_ptr "
++ "or info_ptr ignored");
++ return (0);
++ }
++ if (num_frames == 0)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames zero");
++ return (0);
++ }
++ if (num_frames > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames > 2^31-1");
++ return (0);
++ }
++ if (num_plays > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_plays "
++ "> 2^31-1");
++ return (0);
++ }
++
++ info_ptr->num_frames = num_frames;
++ info_ptr->num_plays = num_plays;
++
++ info_ptr->valid |= PNG_INFO_acTL;
++
++ return (1);
++}
++
++/* delay_num and delay_den can hold any 16-bit values including zero */
++png_uint_32 PNGAPI
++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ png_debug1(1, "in %s storage function\n", "fcTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr "
++ "ignored");
++ return (0);
++ }
++
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ info_ptr->next_frame_width = width;
++ info_ptr->next_frame_height = height;
++ info_ptr->next_frame_x_offset = x_offset;
++ info_ptr->next_frame_y_offset = y_offset;
++ info_ptr->next_frame_delay_num = delay_num;
++ info_ptr->next_frame_delay_den = delay_den;
++ info_ptr->next_frame_dispose_op = dispose_op;
++ info_ptr->next_frame_blend_op = blend_op;
++
++ info_ptr->valid |= PNG_INFO_fcTL;
++
++ return (1);
++}
++
++void /* PRIVATE */
++png_ensure_fcTL_is_valid(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ if (width + x_offset > png_ptr->first_frame_width ||
++ height + y_offset > png_ptr->first_frame_height)
++ png_error(png_ptr, "dimensions of a frame are greater than"
++ "the ones in IHDR");
++ if (width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
++ if (height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (x_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
++ if (y_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
++
++ if (dispose_op != PNG_DISPOSE_OP_NONE &&
++ dispose_op != PNG_DISPOSE_OP_BACKGROUND &&
++ dispose_op != PNG_DISPOSE_OP_PREVIOUS)
++ png_error(png_ptr, "invalid dispose_op in fcTL");
++
++ if (blend_op != PNG_BLEND_OP_SOURCE &&
++ blend_op != PNG_BLEND_OP_OVER)
++ png_error(png_ptr, "invalid blend_op in fcTL");
++
++ if (blend_op == PNG_BLEND_OP_OVER) {
++ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'greyscale without alpha'");
++ else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) &&
++ !(png_ptr->color_type & PNG_COLOR_MASK_ALPHA))
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'truecolor without alpha'");
++ }
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if(is_hidden)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ return 1;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ void PNGAPI
+ png_set_unknown_chunks(png_structp png_ptr,
+diff -ruN libpng-1.2.27/pngtrans.c libpng-1.2.27.apng/pngtrans.c
+--- libpng-1.2.27/pngtrans.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngtrans.c 2008-05-01 09:49:58.000000000 +0000
+@@ -652,11 +652,10 @@
+ png_voidp PNGAPI
+ png_get_user_transform_ptr(png_structp png_ptr)
+ {
+-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
+ if (png_ptr == NULL) return (NULL);
++#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
+ return ((png_voidp)png_ptr->user_transform_ptr);
+-#else
+- return (NULL);
+ #endif
++ return (NULL);
+ }
+ #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
+diff -ruN libpng-1.2.27/pngwrite.c libpng-1.2.27.apng/pngwrite.c
+--- libpng-1.2.27/pngwrite.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngwrite.c 2008-05-01 09:49:58.000000000 +0000
+@@ -263,6 +263,10 @@
+ }
+ }
+ #endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (info_ptr->valid & PNG_INFO_acTL)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+ if (info_ptr->unknown_chunks_num)
+ {
+@@ -301,6 +305,10 @@
+ return;
+ if (!(png_ptr->mode & PNG_HAVE_IDAT))
+ png_error(png_ptr, "No IDATs written into file");
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
++#endif
+
+ /* see if user wants us to write information chunks */
+ if (info_ptr != NULL)
+@@ -1529,4 +1537,39 @@
+ params = params;
+ }
+ #endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head\n");
++
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if (!(info_ptr->valid & PNG_INFO_acTL))
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++
++ png_write_reset(png_ptr);
++
++ png_write_reinit(png_ptr, info_ptr, width, height);
++
++ if ( !(png_ptr->num_frames_written == 0 &&
++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++}
++
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop png_info)
++{
++ png_debug(1, "in png_write_frame_tail\n");
++
++ png_ptr->num_frames_written++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ #endif /* PNG_WRITE_SUPPORTED */
+diff -ruN libpng-1.2.27/pngwutil.c libpng-1.2.27.apng/pngwutil.c
+--- libpng-1.2.27/pngwutil.c 2008-04-30 10:23:14.000000000 +0000
++++ libpng-1.2.27.apng/pngwutil.c 2008-05-01 09:49:58.000000000 +0000
+@@ -498,6 +498,11 @@
+ /* write the chunk */
+ png_write_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* initialize zlib with PNG info */
+ png_ptr->zstream.zalloc = png_zalloc;
+ png_ptr->zstream.zfree = png_zfree;
+@@ -619,6 +624,9 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ PNG_fdAT;
++#endif
+ #endif
+ png_debug(1, "in png_write_IDAT\n");
+
+@@ -661,7 +669,28 @@
+ "Invalid zlib compression method or flags in IDAT");
+ }
+
+- png_write_chunk(png_ptr, png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if(png_ptr->num_frames_written == 0)
++#endif
++ png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ else
++ {
++ png_byte buf[4];
++
++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length);
++
++ png_save_uint_32(buf, png_ptr->next_seq_num);
++ png_write_chunk_data(png_ptr, buf, 4);
++
++ png_write_chunk_data(png_ptr, data, length);
++
++ png_write_chunk_end(png_ptr);
++
++ png_ptr->next_seq_num++;
++ }
++#endif
++
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ }
+
+@@ -673,7 +702,7 @@
+ PNG_IEND;
+ #endif
+ png_debug(1, "in png_write_IEND\n");
+- png_write_chunk(png_ptr, png_IEND, png_bytep_NULL,
++ png_write_chunk(png_ptr, (png_bytep)png_IEND, png_bytep_NULL,
+ (png_size_t)0);
+ png_ptr->mode |= PNG_HAVE_IEND;
+ }
+@@ -1732,6 +1761,70 @@
+ }
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_acTL(png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_acTL;
++#endif
++ png_byte data[16];
++
++ png_debug(1, "in png_write_acTL\n");
++
++ png_ptr->num_frames_to_write = num_frames;
++
++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ num_frames--;
++
++ png_save_uint_32(data, num_frames);
++ png_save_uint_32(data + 4, num_plays);
++
++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8);
++}
++
++void /* PRIVATE */
++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_fcTL;
++#endif
++ png_byte data[26];
++
++ png_debug(1, "in png_write_fcTL\n");
++
++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0\n");
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++
++ /* more error checking */
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ png_save_uint_32(data, png_ptr->next_seq_num);
++ png_save_uint_32(data + 4, width);
++ png_save_uint_32(data + 8, height);
++ png_save_uint_32(data + 12, x_offset);
++ png_save_uint_32(data + 16, y_offset);
++ png_save_uint_16(data + 20, delay_num);
++ png_save_uint_16(data + 22, delay_den);
++ data[24] = dispose_op;
++ data[25] = blend_op;
++
++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26);
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ /* initializes the row writing capability of libpng */
+ void /* PRIVATE */
+ png_write_start_row(png_structp png_ptr)
+@@ -2799,4 +2892,39 @@
+ }
+ #endif
+ }
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_reset(png_structp png_ptr)
++{
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++}
++
++void /* PRIVATE */
++png_write_reinit(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height)
++{
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++
++ png_set_IHDR(png_ptr, info_ptr, width, height,
++ info_ptr->bit_depth, info_ptr->color_type,
++ info_ptr->interlace_type, info_ptr->compression_type,
++ info_ptr->filter_type);
++
++ png_ptr->width = width;
++ png_ptr->height = height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
++ png_ptr->usr_width = png_ptr->width;
++}
++#endif
+ #endif /* PNG_WRITE_SUPPORTED */
diff --git a/abs/core/libpng/libpng-1.2.31-apng.patch b/abs/core/libpng/libpng-1.2.31-apng.patch
new file mode 100644
index 0000000..92bd20a
--- /dev/null
+++ b/abs/core/libpng/libpng-1.2.31-apng.patch
@@ -0,0 +1,1644 @@
+Index: pngread.c
+===================================================================
+--- pngread.c (révision 149)
++++ pngread.c (copie de travail)
+@@ -407,6 +407,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_uint_32 length = png_read_chunk_header(png_ptr);
+ PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
+@@ -451,6 +456,9 @@
+ !(png_ptr->mode & PNG_HAVE_PLTE))
+ png_error(png_ptr, "Missing PLTE before IDAT");
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ break;
+@@ -523,12 +531,97 @@
+ else if (!png_memcmp(chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
++
++ png_debug(0, "Reading frame head\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_acTL))
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
++
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
++
++ png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_IDAT;
++ PNG_fdAT;
++ PNG_fcTL;
++#endif
++ png_byte chunk_length[4];
++ png_uint_32 length;
++
++ png_read_data(png_ptr, chunk_length, 4);
++ length = png_get_uint_31(png_ptr, chunk_length);
++
++ png_reset_crc(png_ptr);
++ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
++
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* discard trailing fdATs for frames other than the first */
++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -565,6 +658,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_CONST PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_fdAT;
++ PNG_CONST PNG_IEND;
++#endif
+ PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
+ 0xff};
+ PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+@@ -694,13 +791,40 @@
+ {
+ if (!(png_ptr->zstream.avail_in))
+ {
+- while (!png_ptr->idat_size)
++ png_uint_32 bytes_to_skip = 0;
++
++ while (!png_ptr->idat_size || bytes_to_skip != 0)
+ {
+- png_crc_finish(png_ptr, 0);
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
+
+ png_ptr->idat_size = png_read_chunk_header(png_ptr);
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read == 0)
++ {
++#endif
+ if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
++ }
++
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
++
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
+ png_ptr->zstream.next_in = png_ptr->zbuf;
+@@ -718,6 +842,9 @@
+ png_error(png_ptr, "Extra compressed data");
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->num_frames_read++;
++#endif
+ break;
+ }
+ if (ret != Z_OK)
+@@ -969,6 +1096,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_uint_32 length = png_read_chunk_header(png_ptr);
+ PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
+@@ -1069,6 +1201,14 @@
+ else if (!png_memcmp(chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ } while (!(png_ptr->mode & PNG_HAVE_IEND));
+Index: pngget.c
+===================================================================
+--- pngget.c (révision 149)
++++ pngget.c (copie de travail)
+@@ -797,6 +797,167 @@
+ }
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_get_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *num_frames, png_uint_32 *num_plays)
++{
++ png_debug1(1, "in %s retrieval function\n", "acTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_acTL) &&
++ num_frames != NULL && num_plays != NULL)
++ {
++ *num_frames = info_ptr->num_frames;
++ *num_plays = info_ptr->num_plays;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_frames(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_frames()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_frames);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_plays(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_plays()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_plays);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *width, png_uint_32 *height,
++ png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den,
++ png_byte *dispose_op, png_byte *blend_op)
++{
++ png_debug1(1, "in %s retrieval function\n", "fcTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_fcTL) &&
++ width != NULL && height != NULL &&
++ x_offset != NULL && x_offset != NULL &&
++ delay_num != NULL && delay_den != NULL &&
++ dispose_op != NULL && blend_op != NULL)
++ {
++ *width = info_ptr->next_frame_width;
++ *height = info_ptr->next_frame_height;
++ *x_offset = info_ptr->next_frame_x_offset;
++ *y_offset = info_ptr->next_frame_y_offset;
++ *delay_num = info_ptr->next_frame_delay_num;
++ *delay_den = info_ptr->next_frame_delay_den;
++ *dispose_op = info_ptr->next_frame_dispose_op;
++ *blend_op = info_ptr->next_frame_blend_op;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_width()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_width);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_height()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_height);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_x_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_x_offset);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_y_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_y_offset);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_num()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_num);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_den()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_den);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_dispose_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_dispose_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_blend_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_blend_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr != NULL)
++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++
++ return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+Index: png.c
+===================================================================
+--- png.c (révision 149)
++++ png.c (copie de travail)
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+Index: png.h
+===================================================================
+--- png.h (révision 149)
++++ png.h (copie de travail)
+@@ -949,6 +949,19 @@
+ png_fixed_point int_y_blue;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
++#endif
++
+ } png_info;
+
+ typedef png_info FAR * png_infop;
+@@ -1050,6 +1063,8 @@
+ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -1090,7 +1105,11 @@
+ typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+ typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+ png_uint_32, int));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp,
++ png_uint_32));
+ #endif
++#endif
+
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+@@ -1421,6 +1440,39 @@
+ png_uint_32 user_height_max;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
++#endif
++#endif
++
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
++
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
++
+ /* New member added in libpng-1.0.25 and 1.2.17 */
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* storage for unknown chunk that the library doesn't recognize. */
+@@ -1747,6 +1799,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+ png_bytepp image));
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr,
++ png_infop png_info, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++
++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr,
++ png_infop png_info));
++#endif
++
+ /* writes the end of the PNG file. */
+ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+@@ -1995,6 +2059,11 @@
+ png_voidp progressive_ptr,
+ png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+ png_progressive_end_ptr end_fn));
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif
+
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2432,6 +2501,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_num_plays)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid)
++ PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++#endif /* PNG_APNG_SUPPORTED */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* provide a list of chunks and how they are to be handled, if the built-in
+ handling or default unknown chunk handling is not desired. Any chunks not
+@@ -2738,6 +2860,8 @@
+ #define PNG_BACKGROUND_IS_GRAY 0x800
+ #define PNG_HAVE_PNG_SIGNATURE 0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
++#define PNG_HAVE_acTL 0x4000
++#define PNG_HAVE_fcTL 0x8000L
+
+ /* flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -2878,6 +3002,9 @@
+ #define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
+ #define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
+ #define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
++#define PNG_acTL png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'}
++#define PNG_fcTL png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'}
++#define PNG_fdAT png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'}
+
+ #ifdef PNG_USE_GLOBAL_ARRAYS
+ PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
+@@ -2901,6 +3028,9 @@
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
+ PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_acTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fcTL[5];
++PNG_EXPORT_VAR (png_byte FARDATA) png_fdAT[5];
+ #endif /* PNG_USE_GLOBAL_ARRAYS */
+
+ #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
+@@ -3175,6 +3305,17 @@
+ #endif
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays));
++
++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++#endif
++
+ /* Called when finished processing a row of data */
+ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
+
+@@ -3226,6 +3367,20 @@
+ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* private, reset some things to become ready for reading next frame */
++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr));
++#endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++/* private, reset some things to become ready for writing next frame */
++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 width, png_uint_32 height));
++#endif
++
+ /* these are the functions that do the transformations */
+ #if defined(PNG_READ_FILLER_SUPPORTED)
+ PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
+@@ -3441,6 +3596,18 @@
+ png_uint_32 length));
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr));
++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr,
++ png_uint_32 length));
++#endif
++
+ PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 length));
+
+Index: pngwrite.c
+===================================================================
+--- pngwrite.c (révision 149)
++++ pngwrite.c (copie de travail)
+@@ -261,6 +261,10 @@
+ }
+ }
+ #endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (info_ptr->valid & PNG_INFO_acTL)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+ if (info_ptr->unknown_chunks_num)
+ {
+@@ -299,6 +303,10 @@
+ return;
+ if (!(png_ptr->mode & PNG_HAVE_IDAT))
+ png_error(png_ptr, "No IDATs written into file");
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
++#endif
+
+ /* see if user wants us to write information chunks */
+ if (info_ptr != NULL)
+@@ -1527,4 +1535,39 @@
+ params = params;
+ }
+ #endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head\n");
++
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if (!(info_ptr->valid & PNG_INFO_acTL))
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++
++ png_write_reset(png_ptr);
++
++ png_write_reinit(png_ptr, info_ptr, width, height);
++
++ if ( !(png_ptr->num_frames_written == 0 &&
++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++}
++
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop png_info)
++{
++ png_debug(1, "in png_write_frame_tail\n");
++
++ png_ptr->num_frames_written++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ #endif /* PNG_WRITE_SUPPORTED */
+Index: pngconf.h
+===================================================================
+--- pngconf.h (révision 149)
++++ pngconf.h (copie de travail)
+@@ -925,6 +925,10 @@
+ # define PNG_READ_zTXt_SUPPORTED
+ # define PNG_zTXt_SUPPORTED
+ #endif
++#ifndef PNG_NO_READ_APNG
++# define PNG_READ_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++#endif
+ #ifndef PNG_NO_READ_UNKNOWN_CHUNKS
+ # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+@@ -1067,6 +1071,12 @@
+ # define PNG_zTXt_SUPPORTED
+ # endif
+ #endif
++#ifndef PNG_NO_WRITE_APNG
++# define PNG_WRITE_APNG_SUPPORTED
++# ifndef PNG_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++# endif
++#endif
+ #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
+ # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+Index: pngpread.c
+===================================================================
+--- pngpread.c (révision 149)
++++ pngpread.c (copie de travail)
+@@ -192,6 +192,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_CONST PNG_acTL;
++ PNG_CONST PNG_fcTL;
++ PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ /* First we make sure we have enough data for the 4 byte chunk name
+ * and the 4 byte chunk length before proceeding with decoding the
+@@ -215,7 +220,104 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ }
+-
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->buffer_size < 4)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_ensure_sequence_number(png_ptr, 4);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ {
++ /* discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++
++ return;
++ }
++ }
++ else if(!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++
++ return;
++ }
++ else
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++
++ return;
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+ if(png_ptr->mode & PNG_AFTER_IDAT)
+ png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
+@@ -295,6 +397,9 @@
+ png_error(png_ptr, "Too many IDAT's found");
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+@@ -490,6 +595,35 @@
+ png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
+ }
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fdAT(png_ptr, info_ptr, png_ptr->push_length);
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
+ else
+ {
+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
+@@ -660,13 +794,17 @@
+ png_push_read_IDAT(png_structp png_ptr)
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+- PNG_CONST PNG_IDAT;
++ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
+ #endif
++#endif
+ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
+ {
+ png_byte chunk_length[4];
+
+- if (png_ptr->buffer_size < 8)
++ if (png_ptr->buffer_size < 12)
+ {
+ png_push_save_buffer(png_ptr);
+ return;
+@@ -678,15 +816,59 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4)
++ && png_ptr->num_frames_read > 0)
+ {
++ if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++ if ( png_memcmp(png_ptr->chunk_name, png_IDAT, 4)
++ && (png_ptr->num_frames_read == 0) )
++ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
+ if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
+ png_error(png_ptr, "Not enough compressed data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++#endif
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if(png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ if (png_ptr->idat_size && png_ptr->save_buffer_size)
+ {
+@@ -1582,6 +1764,17 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
++{
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++}
++#endif
++
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_structp png_ptr)
+ {
+Index: pngset.c
+===================================================================
+--- pngset.c (révision 149)
++++ pngset.c (copie de travail)
+@@ -363,6 +363,11 @@
+ info_ptr->rowbytes = (png_size_t)0;
+ else
+ info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
++
++#if defined(PNG_APNG_SUPPORTED)
++ /* for non-animated png. this may be overritten from an acTL chunk later */
++ info_ptr->num_frames = 1;
++#endif
+ }
+
+ #if defined(PNG_oFFs_SUPPORTED)
+@@ -1043,6 +1048,141 @@
+ }
+ #endif /* PNG_sPLT_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_set_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++ png_debug1(1, "in %s storage function\n", "acTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_acTL() with NULL png_ptr "
++ "or info_ptr ignored");
++ return (0);
++ }
++ if (num_frames == 0)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames zero");
++ return (0);
++ }
++ if (num_frames > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames > 2^31-1");
++ return (0);
++ }
++ if (num_plays > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_plays "
++ "> 2^31-1");
++ return (0);
++ }
++
++ info_ptr->num_frames = num_frames;
++ info_ptr->num_plays = num_plays;
++
++ info_ptr->valid |= PNG_INFO_acTL;
++
++ return (1);
++}
++
++/* delay_num and delay_den can hold any 16-bit values including zero */
++png_uint_32 PNGAPI
++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ png_debug1(1, "in %s storage function\n", "fcTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr "
++ "ignored");
++ return (0);
++ }
++
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ info_ptr->next_frame_width = width;
++ info_ptr->next_frame_height = height;
++ info_ptr->next_frame_x_offset = x_offset;
++ info_ptr->next_frame_y_offset = y_offset;
++ info_ptr->next_frame_delay_num = delay_num;
++ info_ptr->next_frame_delay_den = delay_den;
++ info_ptr->next_frame_dispose_op = dispose_op;
++ info_ptr->next_frame_blend_op = blend_op;
++
++ info_ptr->valid |= PNG_INFO_fcTL;
++
++ return (1);
++}
++
++void /* PRIVATE */
++png_ensure_fcTL_is_valid(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ if (width + x_offset > png_ptr->first_frame_width ||
++ height + y_offset > png_ptr->first_frame_height)
++ png_error(png_ptr, "dimensions of a frame are greater than"
++ "the ones in IHDR");
++ if (width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
++ if (height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (x_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
++ if (y_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
++
++ if (dispose_op != PNG_DISPOSE_OP_NONE &&
++ dispose_op != PNG_DISPOSE_OP_BACKGROUND &&
++ dispose_op != PNG_DISPOSE_OP_PREVIOUS)
++ png_error(png_ptr, "invalid dispose_op in fcTL");
++
++ if (blend_op != PNG_BLEND_OP_SOURCE &&
++ blend_op != PNG_BLEND_OP_OVER)
++ png_error(png_ptr, "invalid blend_op in fcTL");
++
++ if (blend_op == PNG_BLEND_OP_OVER) {
++ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'greyscale without alpha'");
++ else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) &&
++ !(png_ptr->color_type & PNG_COLOR_MASK_ALPHA))
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'truecolor without alpha'");
++ }
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if(is_hidden)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ return 1;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ void PNGAPI
+ png_set_unknown_chunks(png_structp png_ptr,
+Index: pngrutil.c
+===================================================================
+--- pngrutil.c (révision 149)
++++ pngrutil.c (copie de travail)
+@@ -414,6 +414,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2220,6 +2225,168 @@
+ }
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_acTL)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if(didSet)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "fcTL for the first frame must have zero offset");
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ png_error(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++
++ /* the set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++}
++
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
++{
++ png_byte data[4];
++ png_uint_32 sequence_number;
++
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
++
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* This function is called when we haven't found a handler for a
+ chunk. If there isn't a problem with the chunk itself (ie bad
+ chunk name, CRC, or a critical chunk), the chunk is silently ignored
+@@ -3195,8 +3362,10 @@
+ if (row_bytes + 64 > png_ptr->old_big_row_buf_size)
+ {
+ png_free(png_ptr, png_ptr->big_row_buf);
+- png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
+- png_ptr->row_buf = png_ptr->big_row_buf+32;
++ if (png_ptr->big_row_buf == NULL)
++ png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
++ if (png_ptr->row_buf == NULL)
++ png_ptr->row_buf = png_ptr->big_row_buf+32;
+ png_ptr->old_big_row_buf_size = row_bytes+64;
+ }
+
+@@ -3226,4 +3395,82 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
++{
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++}
++
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++}
++
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ /* start of interlace block */
++ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
++
++ /* offset to next interlace block */
++ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
++
++ /* start of interlace block in the y direction */
++ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
++
++ /* offset to next interlace block in the y direction */
++ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
++#endif
++ png_uint_32 row_bytes;
++
++ if (png_ptr->interlaced)
++ {
++ if (!(png_ptr->transformations & PNG_INTERLACE))
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
++
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++
++ row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
++
++ png_ptr->irowbytes = (png_size_t)row_bytes;
++ if((png_uint_32)png_ptr->irowbytes != row_bytes)
++ png_error(png_ptr, "png_progressive_read_reset(): Rowbytes "
++ "overflow");
++ }
++ else
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ png_ptr->irowbytes = png_ptr->rowbytes + 1;
++ }
++
++ png_ptr->flags &= ~PNG_FLAG_ZLIB_FINISHED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
+ #endif /* PNG_READ_SUPPORTED */
+Index: pngwutil.c
+===================================================================
+--- pngwutil.c (révision 149)
++++ pngwutil.c (copie de travail)
+@@ -506,6 +506,11 @@
+ /* write the chunk */
+ png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13);
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* initialize zlib with PNG info */
+ png_ptr->zstream.zalloc = png_zalloc;
+ png_ptr->zstream.zfree = png_zfree;
+@@ -628,6 +633,9 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ PNG_fdAT;
++#endif
+ #endif
+ png_debug(1, "in png_write_IDAT\n");
+
+@@ -670,7 +678,28 @@
+ "Invalid zlib compression method or flags in IDAT");
+ }
+
+- png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if(png_ptr->num_frames_written == 0)
++#endif
++ png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ else
++ {
++ png_byte buf[4];
++
++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length);
++
++ png_save_uint_32(buf, png_ptr->next_seq_num);
++ png_write_chunk_data(png_ptr, buf, 4);
++
++ png_write_chunk_data(png_ptr, data, length);
++
++ png_write_chunk_end(png_ptr);
++
++ png_ptr->next_seq_num++;
++ }
++#endif
++
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ }
+
+@@ -1755,6 +1784,70 @@
+ }
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_acTL(png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_acTL;
++#endif
++ png_byte data[16];
++
++ png_debug(1, "in png_write_acTL\n");
++
++ png_ptr->num_frames_to_write = num_frames;
++
++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ num_frames--;
++
++ png_save_uint_32(data, num_frames);
++ png_save_uint_32(data + 4, num_plays);
++
++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8);
++}
++
++void /* PRIVATE */
++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_fcTL;
++#endif
++ png_byte data[26];
++
++ png_debug(1, "in png_write_fcTL\n");
++
++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0\n");
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++
++ /* more error checking */
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ png_save_uint_32(data, png_ptr->next_seq_num);
++ png_save_uint_32(data + 4, width);
++ png_save_uint_32(data + 8, height);
++ png_save_uint_32(data + 12, x_offset);
++ png_save_uint_32(data + 16, y_offset);
++ png_save_uint_16(data + 20, delay_num);
++ png_save_uint_16(data + 22, delay_den);
++ data[24] = dispose_op;
++ data[25] = blend_op;
++
++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26);
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ /* initializes the row writing capability of libpng */
+ void /* PRIVATE */
+ png_write_start_row(png_structp png_ptr)
+@@ -2824,4 +2917,39 @@
+ }
+ #endif
+ }
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_reset(png_structp png_ptr)
++{
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++}
++
++void /* PRIVATE */
++png_write_reinit(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height)
++{
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++
++ png_set_IHDR(png_ptr, info_ptr, width, height,
++ info_ptr->bit_depth, info_ptr->color_type,
++ info_ptr->interlace_type, info_ptr->compression_type,
++ info_ptr->filter_type);
++
++ png_ptr->width = width;
++ png_ptr->height = height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
++ png_ptr->usr_width = png_ptr->width;
++}
++#endif
+ #endif /* PNG_WRITE_SUPPORTED */
+Index: pngrtran.c
+===================================================================
+--- pngrtran.c (révision 149)
++++ pngrtran.c (copie de travail)
+@@ -1293,7 +1293,7 @@
+ * or png_read_update_info() after setting transforms that expand
+ * pixels. This check added to libpng-1.2.19 */
+ #if (PNG_WARN_UNINITIALIZED_ROW==1)
+- png_error(png_ptr, "Uninitialized row");
++ png_warning(png_ptr, "Uninitialized row");
+ #else
+ png_warning(png_ptr, "Uninitialized row");
+ #endif
diff --git a/abs/core/librsvg/PKGBUILD b/abs/core/librsvg/PKGBUILD
new file mode 100644
index 0000000..c4f4a11
--- /dev/null
+++ b/abs/core/librsvg/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=librsvg
+pkgver=2.22.2
+pkgrel=1
+pkgdesc="SAX-based renderer for SVG files into a GdkPixbuf"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('gtk2>=2.12.9' 'libcroco>=0.6.1' 'libgsf>=1.14.8')
+makedepends=('perlxml' 'pkgconfig')
+options=('!libtool')
+url="http://librsvg.sourceforge.net/"
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.22/${pkgname}-${pkgver}.tar.bz2)
+install=librsvg.install
+md5sums=('aae602677ce201b1a0ed6a0c18c207f2')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --with-croco \
+ --disable-mozilla-plugin --with-svgz
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -rf ${startdir}/pkg/usr/share/gtk-doc
+ rm -rf ${startdir}/pkg/usr/lib/mozilla
+ rm ${startdir}/pkg/usr/lib/gtk-2.0/*/{engines,loaders}/*.a
+}
diff --git a/abs/core/librsvg/librsvg.install b/abs/core/librsvg/librsvg.install
new file mode 100644
index 0000000..8a6dd5a
--- /dev/null
+++ b/abs/core/librsvg/librsvg.install
@@ -0,0 +1,14 @@
+# arg 1: the new package version
+post_install() {
+ #We need to update the pixbuf loaders to let GTK support SVG images
+ usr/bin/gtk-query-immodules-2.0 > etc/gtk-2.0/gtk.immodules
+ usr/bin/gdk-pixbuf-query-loaders > etc/gtk-2.0/gdk-pixbuf.loaders
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
diff --git a/abs/core/libsasl/PKGBUILD b/abs/core/libsasl/PKGBUILD
new file mode 100644
index 0000000..d9b49b8
--- /dev/null
+++ b/abs/core/libsasl/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 5269 2008-07-14 11:33:26Z pierre $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libsasl
+pkgver=2.1.22
+pkgrel=7
+pkgdesc="Cyrus Simple Authentication Service Layer (SASL) library"
+arch=(i686 x86_64)
+url="http://asg.web.cmu.edu/cyrus/download/"
+license=('custom')
+depends=('db>=4.7')
+install=libsasl.install
+source=(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-${pkgver}.tar.gz
+ cyrus-sasl-2.1.19-checkpw.c.patch db-4.7.patch)
+md5sums=('45dde9d19193ae9dd388eb68b2027bc9'
+ 'e27ddff076342e7a3041c4759817d04b'
+ '71a3b7454f4d7cc2966b347bdf03f2fc')
+options=('!makeflags')
+
+build() {
+ cd ${srcdir}/cyrus-sasl-${pkgver}
+ patch -Np0 -i ${srcdir}/cyrus-sasl-2.1.19-checkpw.c.patch || return 1
+ patch -Np0 -i ${srcdir}/db-4.7.patch || return 1
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --disable-anon \
+ --disable-cram \
+ --disable-digest \
+ --disable-gssapi \
+ --enable-login \
+ --disable-otp \
+ --enable-plain
+ for dir in include lib sasldb plugins utils; do
+ pushd ${dir} || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ popd
+ done
+
+ # install license
+ install -D -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING || return 1
+}
diff --git a/abs/core/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch b/abs/core/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch
new file mode 100644
index 0000000..f7bf44b
--- /dev/null
+++ b/abs/core/libsasl/cyrus-sasl-2.1.19-checkpw.c.patch
@@ -0,0 +1,170 @@
+diff -ur ../cyrus-sasl-2.1.19.orig/lib/Makefile.in ./lib/Makefile.in
+--- ../cyrus-sasl-2.1.19.orig/lib/Makefile.in 2004-07-02 21:40:15.000000000 +0200
++++ ./lib/Makefile.in 2004-09-07 13:21:22.746680576 +0200
+@@ -120,7 +120,7 @@
+ JAVA_TRUE = @JAVA_TRUE@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+-LIBS = @LIBS@
++LIBS = -lcrypt @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIB_CRYPT = @LIB_CRYPT@
+ LIB_DES = @LIB_DES@
+diff -ur ../cyrus-sasl-2.1.19.orig/lib/checkpw.c ./lib/checkpw.c
+--- ../cyrus-sasl-2.1.19.orig/lib/checkpw.c 2004-03-17 14:58:13.000000000 +0100
++++ ./lib/checkpw.c 2004-09-07 13:21:12.645916147 +0200
+@@ -94,6 +94,23 @@
+ # endif
+ #endif
+
++/******************************
++ * crypt(3) patch start *
++ ******************************/
++char *crypt(const char *key, const char *salt);
++
++/* cleartext password formats */
++#define PASSWORD_FORMAT_CLEARTEXT 1
++#define PASSWORD_FORMAT_CRYPT 2
++#define PASSWORD_FORMAT_CRYPTTRAD 3
++#define PASSWORD_SALT_BUF_LEN 22
++
++/* weeds out crypt(3) password's salt */
++int _sasl_get_salt (char *dest, char *src, int format);
++
++/******************************
++ * crypt(3) patch stop *
++ ******************************/
+
+ /* we store the following secret to check plaintext passwords:
+ *
+@@ -143,7 +160,51 @@
+ "*cmusaslsecretPLAIN",
+ NULL };
+ struct propval auxprop_values[3];
+-
++
++ /******************************
++ * crypt(3) patch start *
++ * for password format check *
++ ******************************/
++ sasl_getopt_t *getopt;
++ void *context;
++ const char *p = NULL;
++ /**
++ * MD5: 12 char salt
++ * BLOWFISH: 16 char salt
++ */
++ char salt[PASSWORD_SALT_BUF_LEN];
++ int password_format;
++
++ /* get password format from auxprop configuration */
++ if (_sasl_getcallback(conn, SASL_CB_GETOPT, &getopt, &context) == SASL_OK) {
++ getopt(context, NULL, "password_format", &p, NULL);
++ }
++
++ /* set password format */
++ if (p) {
++ /*
++ memset(pass_format_str, '\0', PASSWORD_FORMAT_STR_LEN);
++ strncpy(pass_format_str, p, (PASSWORD_FORMAT_STR_LEN - 1));
++ */
++ /* modern, modular crypt(3) */
++ if (strncmp(p, "crypt", 11) == 0)
++ password_format = PASSWORD_FORMAT_CRYPT;
++ /* traditional crypt(3) */
++ else if (strncmp(p, "crypt_trad", 11) == 0)
++ password_format = PASSWORD_FORMAT_CRYPTTRAD;
++ /* cleartext password */
++ else
++ password_format = PASSWORD_FORMAT_CLEARTEXT;
++ } else {
++ /* cleartext password */
++ password_format = PASSWORD_FORMAT_CLEARTEXT;
++ }
++
++ /******************************
++ * crypt(3) patch stop *
++ * for password format check *
++ ******************************/
++
+ if (!conn || !userstr)
+ return SASL_BADPARAM;
+
+@@ -180,14 +241,31 @@
+ goto done;
+ }
+
+- /* At the point this has been called, the username has been canonified
+- * and we've done the auxprop lookup. This should be easy. */
+- if(auxprop_values[0].name
+- && auxprop_values[0].values
+- && auxprop_values[0].values[0]
+- && !strcmp(auxprop_values[0].values[0], passwd)) {
+- /* We have a plaintext version and it matched! */
+- return SASL_OK;
++
++ /******************************
++ * crypt(3) patch start *
++ ******************************/
++
++ /* get salt */
++ _sasl_get_salt(salt, (char *) auxprop_values[0].values[0], password_format);
++
++ /* crypt(3)-ed password? */
++ if (password_format != PASSWORD_FORMAT_CLEARTEXT) {
++ /* compare password */
++ if (auxprop_values[0].name && auxprop_values[0].values && auxprop_values[0].values[0] && strcmp(crypt(passwd, salt), auxprop_values[0].values[0]) == 0)
++ return SASL_OK;
++ else
++ ret = SASL_BADAUTH;
++ }
++ else if (password_format == PASSWORD_FORMAT_CLEARTEXT) {
++ /* compare passwords */
++ if (auxprop_values[0].name && auxprop_values[0].values && auxprop_values[0].values[0] && strcmp(auxprop_values[0].values[0], passwd) == 0)
++ return SASL_OK;
++ else
++ ret = SASL_BADAUTH;
++ /******************************
++ * crypt(3) patch stop *
++ ******************************/
+ } else if(auxprop_values[1].name
+ && auxprop_values[1].values
+ && auxprop_values[1].values[0]) {
+@@ -975,3 +1053,37 @@
+ #endif
+ { NULL, NULL }
+ };
++
++/* weeds out crypt(3) password's salt */
++int _sasl_get_salt (char *dest, char *src, int format) {
++ int num; /* how many characters is salt long? */
++ switch (format) {
++ case PASSWORD_FORMAT_CRYPT:
++ /* md5 crypt */
++ if (src[1] == '1')
++ num = 12;
++ /* blowfish crypt */
++ else if (src[1] == '2')
++ num = (src[1] == '2' && src[2] == 'a') ? 17 : 16;
++ /* traditional crypt */
++ else
++ num = 2;
++ break;
++
++ case PASSWORD_FORMAT_CRYPTTRAD:
++ num = 2;
++ break;
++
++ default:
++ return 1;
++ }
++
++ /* destroy destination */
++ memset(dest, '\0', (num + 1));
++
++ /* copy salt to destination */
++ strncpy(dest, src, num);
++
++ return 1;
++}
++
diff --git a/abs/core/libsasl/db-4.7.patch b/abs/core/libsasl/db-4.7.patch
new file mode 100644
index 0000000..8937d76
--- /dev/null
+++ b/abs/core/libsasl/db-4.7.patch
@@ -0,0 +1,20 @@
+--- configure 2006-05-18 21:30:13.000000000 +0200
++++ configure.new 2007-09-29 00:22:42.000000000 +0200
+@@ -5125,7 +5125,7 @@
+ fi
+
+ saved_LIBS=$LIBS
+- for dbname in db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
++ for dbname in db-4.7 db4.7 db47 db-4.54 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
+ do
+ LIBS="$saved_LIBS -l$dbname"
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -5882,7 +5882,7 @@
+ fi
+
+ saved_LIBS=$LIBS
+- for dbname in db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
++ for dbname in db-4.7 db4.7 db47 db-4.54 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
+ do
+ LIBS="$saved_LIBS -l$dbname"
+ cat >conftest.$ac_ext <<_ACEOF
diff --git a/abs/core/libsasl/libsasl.install b/abs/core/libsasl/libsasl.install
new file mode 100644
index 0000000..57d4e3f
--- /dev/null
+++ b/abs/core/libsasl/libsasl.install
@@ -0,0 +1,18 @@
+post_install() {
+cat << _EOF
+==>
+==> cyrus-sasl has been split up into several standalone packages.
+==>
+==> - If you use saslauthd, make sure you have cyrus-sasl installed
+==>
+==> - If you use authentication modules other than sasldb,
+==> install cyrus-sasl-plugins
+==>
+_EOF
+
+}
+
+op=$1
+shift
+$op $*
+
diff --git a/abs/core/libsm/PKGBUILD b/abs/core/libsm/PKGBUILD
new file mode 100644
index 0000000..60fb07d
--- /dev/null
+++ b/abs/core/libsm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4411 2008-07-06 20:50:38Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libsm
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X11 Session Management library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libice' 'xproto' 'e2fsprogs')
+makedepends=('pkgconfig' 'xtrans')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libSM-${pkgver}.tar.bz2)
+md5sums=('05a04c2b6382fb0054f6c70494e22733')
+
+build() {
+ cd ${startdir}/src/libSM-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/libsmbios/PKGBUILD b/abs/core/libsmbios/PKGBUILD
new file mode 100644
index 0000000..1c1ba7b
--- /dev/null
+++ b/abs/core/libsmbios/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 511 2008-04-20 12:39:44Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Alessio 'mOLOk' Bolognino <themolok@gmail.com>
+# Contributor: daniel g. siegel <dgsiegel@gmail.com>
+
+pkgname=libsmbios
+pkgver=2.0.2
+pkgrel=1
+pkgdesc="A library for providing access to as much BIOS information as possible"
+arch=(i686 x86_64)
+url="http://linux.dell.com/libsmbios/main/index.html"
+license=('GPL' 'custom')
+depends=('gcc-libs>=4.3.0')
+source=(http://linux.dell.com/libsmbios/download/${pkgname}/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz)
+options=('!libtool')
+md5sums=('3d079038c08495c2a46ec20544168bb4')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --disable-static || return 1
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg/ install || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/include
+
+ cp -r include/smbios ${startdir}/pkg/usr/include/smbios || return 1
+ find ${startdir}/pkg/usr/include/smbios -type d -exec chmod 0755 {} \; || return 1
+ find ${startdir}/pkg/usr/include/smbios -type f -exec chmod 0644 {} \; || return 1
+ chown -R root:root ${startdir}/pkg/usr/include/smbios || return 1
+
+ rm -f ${startdir}/pkg/usr/include/smbios/version.h.in
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING-OSL ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libsndfile/PKGBUILD b/abs/core/libsndfile/PKGBUILD
new file mode 100644
index 0000000..79cda51
--- /dev/null
+++ b/abs/core/libsndfile/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Arjan Timmerman <arjan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=libsndfile
+pkgver=1.0.17
+pkgrel=2
+options=(!libtool)
+pkgdesc="a C library for reading and writing files containing sampled sound"
+arch=(i686 x86_64)
+url="http://www.mega-nerd.com/libsndfile"
+depends=('alsa-lib' 'flac>=1.1.4')
+source=(http://www.mega-nerd.com/libsndfile/$pkgname-$pkgver.tar.gz flac-1.1.4.dpatch lossy_comp_test-overflow.dpatch overflow.dpatch)
+
+md5sums=('2d126c35448503f6dbe33934d9581f6b'
+ '839e5132d9d379779b0d3132cad65017'
+ '2241d8b0a0961a956e36ca0fb0fead51'
+ '1731b62a80257de069a72435f39ece00')
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../flac-1.1.4.dpatch || return 1
+ patch -Np1 -i ../lossy_comp_test-overflow.dpatch || return 1
+ patch -Np1 -i ../overflow.dpatch || return 1
+ aclocal
+ automake
+ ./configure --prefix=/usr --disable-sqlite
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libsndfile/flac-1.1.4.dpatch b/abs/core/libsndfile/flac-1.1.4.dpatch
new file mode 100644
index 0000000..a0b68b5
--- /dev/null
+++ b/abs/core/libsndfile/flac-1.1.4.dpatch
@@ -0,0 +1,486 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## flac-1.1.4.dpatch by Samuel Mimram <smimram@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Adapt to FLAC 1.1.4 API.
+## DP: Patch stolen from http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/lib/libsndfile/flac-1.1.4.patch.
+
+@DPATCH@
+diff -ruN libsndfile-1.0.17/configure libsndfile-1.0.17-new/configure
+--- libsndfile-1.0.17/configure 2006-08-31 12:55:50.000000000 +0200
++++ libsndfile-1.0.17-new/configure 2008-04-18 18:56:48.000000000 +0200
+@@ -31226,7 +31226,8 @@
+ _ACEOF
+
+ fi
+- FLAC_LIBS="-lFLAC"
++ # in FLAC 1.1.3 libOggFLAC was merged into libFLAC, hence we need -logg
++ FLAC_LIBS="-lFLAC -logg"
+ fi
+ fi
+
+diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c
+--- libsndfile-1.0.17~/src/flac.c 2006-08-31 11:22:19.000000000 +0200
++++ libsndfile-1.0.17/src/flac.c 2007-06-15 12:38:53.000000000 +0200
+@@ -46,6 +46,13 @@
+ #include "sfendian.h"
+ #include "float_cast.h"
+
++/* FLAC 1.1.3 has FLAC_API_VERSION_CURRENT == 8 */
++#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
++#define LEGACY_FLAC
++#else
++#undef LEGACY_FLAC
++#endif
++
+ /*------------------------------------------------------------------------------
+ ** Private static functions.
+ */
+@@ -60,8 +67,14 @@
+ } PFLAC_PCM ;
+
+ typedef struct
+-{ FLAC__SeekableStreamDecoder *fsd ;
++{
++#ifdef LEGACY_FLAC
++ FLAC__SeekableStreamDecoder *fsd ;
+ FLAC__SeekableStreamEncoder *fse ;
++#else
++ FLAC__StreamDecoder *fsd ;
++ FLAC__StreamEncoder *fse ;
++#endif
+ PFLAC_PCM pcmtype ;
+ void* ptr ;
+ unsigned pos, len, remain ;
+@@ -108,6 +121,7 @@
+ static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
+
+ /* Decoder Callbacks */
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderReadStatus sf_flac_read_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ;
+ static FLAC__SeekableStreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
+ static FLAC__SeekableStreamDecoderTellStatus sf_flac_tell_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
+@@ -116,13 +130,29 @@
+ static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
+ static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
+ static void sf_flac_error_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
++#else
++static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], size_t *bytes, void *client_data) ;
++static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
++static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
++static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ;
++static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ;
++static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
++static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
++static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
++#endif
+
+ /* Encoder Callbacks */
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
+ #ifdef HAVE_FLAC_1_1_1
+ static FLAC__SeekableStreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
+ #endif
+ static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ;
++#else
++static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
++static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
++static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) ;
++#endif
+
+ static const int legal_sample_rates [] =
+ { 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000
+@@ -283,51 +313,99 @@
+ } /* flac_buffer_copy */
+
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderReadStatus
+ sf_flac_read_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data)
++#else
++static FLAC__StreamDecoderReadStatus
++sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], size_t *bytes, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ *bytes = psf_fread (buffer, 1, *bytes, psf) ;
+ if (*bytes > 0 && psf->error == 0)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR ;
++#else
++ return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ;
++
++ return FLAC__STREAM_DECODER_READ_STATUS_ABORT ;
++#endif
+ } /* sf_flac_read_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderSeekStatus
+ sf_flac_seek_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamDecoderSeekStatus
++sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_SEEK_STATUS_OK ;
++#endif
+ } /* sf_flac_seek_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderTellStatus
+ sf_flac_tell_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamDecoderTellStatus
++sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ *absolute_byte_offset = psf_ftell (psf) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_TELL_STATUS_OK ;
++#endif
+ } /* sf_flac_tell_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamDecoderLengthStatus
+ sf_flac_length_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
++#else
++static FLAC__StreamDecoderLengthStatus
++sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if ((*stream_length = psf->filelength) == 0)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK ;
++#else
++ return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ;
++
++ return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ;
++#endif
+ } /* sf_flac_length_callback */
+
+ static FLAC__bool
++#ifdef LEGACY_FLAC
+ sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *UNUSED (decoder), void *client_data)
++#else
++sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if (psf_ftell (psf) == psf->filelength)
+@@ -337,7 +415,11 @@
+ } /* sf_flac_eof_callback */
+
+ static FLAC__StreamDecoderWriteStatus
++#ifdef LEGACY_FLAC
+ sf_flac_write_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
++#else
++sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+
+@@ -353,7 +435,11 @@
+ } /* sf_flac_write_callback */
+
+ static void
++#ifdef LEGACY_FLAC
+ sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
++#else
++sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ switch (metadata->type)
+@@ -387,7 +473,11 @@
+ } /* sf_flac_meta_callback */
+
+ static void
++#ifdef LEGACY_FLAC
+ sf_flac_error_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
++#else
++sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ;
+@@ -407,17 +497,29 @@
+ return ;
+ } /* sf_flac_error_callback */
+
++#ifdef LEGACY_FLAC
+ static FLAC__SeekableStreamEncoderSeekStatus
+ sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#else
++static FLAC__StreamEncoderSeekStatus
++sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
+ if (psf->error)
++#ifdef LEGACY_FLAC
+ return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR ;
+
+ return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK ;
++#else
++ return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ;
++
++ return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ;
++#endif
+ } /* sf_flac_enc_seek_callback */
+
++#ifdef LEGACY_FLAC
+ #ifdef HAVE_FLAC_1_1_1
+ static FLAC__SeekableStreamEncoderTellStatus
+ sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
+@@ -430,9 +532,25 @@
+ return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK ;
+ } /* sf_flac_enc_tell_callback */
+ #endif
++#else
++static FLAC__StreamEncoderTellStatus
++sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
++{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
++
++ *absolute_byte_offset = psf_ftell (psf) ;
++ if (psf->error)
++ return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ;
++
++ return FLAC__STREAM_ENCODER_TELL_STATUS_OK ;
++} /* sf_flac_enc_tell_callback */
++#endif
+
+ static FLAC__StreamEncoderWriteStatus
++#ifdef LEGACY_FLAC
+ sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
++#else
++sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], size_t bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
++#endif
+ { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+
+ if (psf_fwrite (buffer, 1, bytes, psf) == bytes && psf->error == 0)
+@@ -509,15 +627,27 @@
+ return 0 ;
+
+ if (psf->mode == SFM_WRITE)
+- { FLAC__seekable_stream_encoder_finish (pflac->fse) ;
++ {
++#ifdef LEGACY_FLAC
++ FLAC__seekable_stream_encoder_finish (pflac->fse) ;
+ FLAC__seekable_stream_encoder_delete (pflac->fse) ;
++#else
++ FLAC__stream_encoder_finish (pflac->fse) ;
++ FLAC__stream_encoder_delete (pflac->fse) ;
++#endif
+ if (pflac->encbuffer)
+ free (pflac->encbuffer) ;
+ } ;
+
+ if (psf->mode == SFM_READ)
+- { FLAC__seekable_stream_decoder_finish (pflac->fsd) ;
++ {
++#ifdef LEGACY_FLAC
++ FLAC__seekable_stream_decoder_finish (pflac->fsd) ;
+ FLAC__seekable_stream_decoder_delete (pflac->fsd) ;
++#else
++ FLAC__stream_decoder_finish (pflac->fsd) ;
++ FLAC__stream_decoder_delete (pflac->fsd) ;
++#endif
+ } ;
+
+ for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++)
+@@ -546,17 +676,6 @@
+ return SFE_FLAC_BAD_SAMPLE_RATE ;
+
+ psf_fseek (psf, 0, SEEK_SET) ;
+- if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL)
+- return SFE_FLAC_NEW_DECODER ;
+- FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ;
+- FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ;
+-
+-#ifdef HAVE_FLAC_1_1_1
+- FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ;
+-#endif
+- FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ;
+- FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
+- FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
+
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_S8 :
+@@ -574,12 +693,36 @@
+ break ;
+ } ;
+
++#ifdef LEGACY_FLAC
++ if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++ FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ;
++ FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ;
++
++#ifdef HAVE_FLAC_1_1_1
++ FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ;
++#endif
++ FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ;
++ FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
++ FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
+ FLAC__seekable_stream_encoder_set_bits_per_sample (pflac->fse, bps) ;
+
+ if ((bps = FLAC__seekable_stream_encoder_init (pflac->fse)) != FLAC__SEEKABLE_STREAM_DECODER_OK)
+ { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__seekable_stream_encoder_get_resolved_state_string (pflac->fse)) ;
+ return SFE_FLAC_INIT_DECODER ;
+ } ;
++#else
++ if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++ FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels) ;
++ FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ;
++ FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps) ;
++
++ if ((bps = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
++ { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString[bps]) ;
++ return SFE_FLAC_INIT_DECODER ;
++ } ;
++#endif
+
+ if (psf->error == 0)
+ psf->dataoffset = psf_ftell (psf) ;
+@@ -593,6 +736,7 @@
+ { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+
+ psf_fseek (psf, 0, SEEK_SET) ;
++#ifdef LEGACY_FLAC
+ if ((pflac->fsd = FLAC__seekable_stream_decoder_new ()) == NULL)
+ return SFE_FLAC_NEW_DECODER ;
+
+@@ -610,9 +754,22 @@
+ return SFE_FLAC_INIT_DECODER ;
+
+ FLAC__seekable_stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
++#else
++ if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL)
++ return SFE_FLAC_NEW_DECODER ;
++
++ if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
++ return SFE_FLAC_INIT_DECODER ;
++
++ FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
++#endif
+ if (psf->error == 0)
+ { FLAC__uint64 position ;
++#ifdef LEGACY_FLAC
+ FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ;
++#else
++ FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
++#endif
+ psf->dataoffset = position ;
+ } ;
+
+@@ -676,10 +833,18 @@
+ flac_buffer_copy (psf) ;
+
+ while (pflac->pos < pflac->len)
+- { if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0)
++ {
++#ifdef LEGACY_FLAC
++ if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0)
+ break ;
+ if (FLAC__seekable_stream_decoder_get_state (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK)
+ break ;
++#else
++ if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
++ break ;
++ if (FLAC__stream_decoder_get_state (pflac->fsd) >= FLAC__STREAM_DECODER_END_OF_STREAM)
++ break ;
++#endif
+ } ;
+
+ pflac->ptr = NULL ;
+@@ -795,7 +960,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -837,7 +1006,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -879,7 +1052,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount, psf->norm_float) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -1011,7 +1188,11 @@
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : (int) len ;
+ convert (ptr + total, buffer, writecount, psf->norm_double) ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#else
++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels))
++#endif
+ thiswrite = writecount ;
+ else
+ break ;
+@@ -1131,10 +1312,17 @@
+
+ if (psf->mode == SFM_READ)
+ { FLAC__uint64 position ;
++#ifdef LEGACY_FLAC
+ if (FLAC__seekable_stream_decoder_seek_absolute (pflac->fsd, offset))
+ { FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ;
+ return offset ;
+ } ;
++#else
++ if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset))
++ { FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
++ return offset ;
++ } ;
++#endif
+
+ return ((sf_count_t) -1) ;
+ } ;
diff --git a/abs/core/libsndfile/lossy_comp_test-overflow.dpatch b/abs/core/libsndfile/lossy_comp_test-overflow.dpatch
new file mode 100644
index 0000000..bf5c829
--- /dev/null
+++ b/abs/core/libsndfile/lossy_comp_test-overflow.dpatch
@@ -0,0 +1,21 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## lossy_comp_test-overflow.dpatch by Martin Michlmayr <tbm@cyrius.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Avoid a possible overflow in sum_abs.
+## DP: See #362414.
+
+@DPATCH@
+diff -urNad libsndfile-1.0.17~/tests/lossy_comp_test.c libsndfile-1.0.17/tests/lossy_comp_test.c
+--- libsndfile-1.0.17~/tests/lossy_comp_test.c 2006-08-31 11:22:07.000000000 +0200
++++ libsndfile-1.0.17/tests/lossy_comp_test.c 2007-04-07 10:33:05.000000000 +0200
+@@ -691,7 +691,8 @@
+ lcomp_test_int (const char *filename, int filetype, int channels, double margin)
+ { SNDFILE *file ;
+ SF_INFO sfinfo ;
+- int k, m, *orig, *data, sum_abs ;
++ int k, m, *orig, *data ;
++ long long sum_abs ;
+ long datalen, seekpos ;
+ double scale ;
+
diff --git a/abs/core/libsndfile/overflow.dpatch b/abs/core/libsndfile/overflow.dpatch
new file mode 100644
index 0000000..108b68c
--- /dev/null
+++ b/abs/core/libsndfile/overflow.dpatch
@@ -0,0 +1,46 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## overflow.dpatch by Samuel Mimram <smimram@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix a buffer overflow (CVE-2007-4974). See #443386.
+
+@DPATCH@
+diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c
+--- libsndfile-1.0.17~/src/flac.c 2007-09-20 23:38:16.000000000 +0000
++++ libsndfile-1.0.17/src/flac.c 2007-09-20 23:38:16.000000000 +0000
+@@ -57,7 +57,7 @@
+ ** Private static functions.
+ */
+
+-#define ENC_BUFFER_SIZE 4096
++#define ENC_BUFFER_SIZE 8192
+
+ typedef enum
+ { PFLAC_PCM_SHORT = 0,
+@@ -202,6 +202,17 @@
+ const FLAC__int32* const *buffer = pflac->wbuffer ;
+ unsigned i = 0, j, offset ;
+
++ /*
++ ** frame->header.blocksize is variable and we're using a constant blocksize
++ ** of FLAC__MAX_BLOCK_SIZE.
++ ** Check our assumptions here.
++ */
++ if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE)
++ { psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ;
++ psf->error = SFE_INTERNAL ;
++ return 0 ;
++ } ;
++
+ if (pflac->ptr == NULL)
+ { /*
+ ** Not sure why this code is here and not elsewhere.
+@@ -210,7 +221,7 @@
+ pflac->bufferbackup = SF_TRUE ;
+ for (i = 0 ; i < frame->header.channels ; i++)
+ { if (pflac->rbuffer [i] == NULL)
+- pflac->rbuffer [i] = calloc (frame->header.blocksize, sizeof (FLAC__int32)) ;
++ pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ;
+ memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ;
+ } ;
+ pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ;
diff --git a/abs/core/libstatgrab/PKGBUILD b/abs/core/libstatgrab/PKGBUILD
new file mode 100644
index 0000000..ae38a47
--- /dev/null
+++ b/abs/core/libstatgrab/PKGBUILD
@@ -0,0 +1,30 @@
+# Contributor: Hugo Ideler <hugoideler@dse.nl>
+
+pkgname=libstatgrab
+pkgver=0.14
+pkgrel=1
+pkgdesc="A library that provides cross platform access to statistics about the system on which it's run"
+url="http://www.i-scream.org/libstatgrab"
+license=""
+depends=()
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+arch=('i686')
+install=
+source=(ftp://ftp.uk.i-scream.org/pub/i-scream/libstatgrab/$pkgname-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+
+#What you get when people make broken Makefiles...
+sed -i -e 's:chown root ${exec_prefix}/bin/statgrab::' ./src/statgrab/Makefile
+sed -i -e 's:chmod u+s ${exec_prefix}/bin/statgrab::' ./src/statgrab/Makefile
+sed -i -e 's:chown root ${exec_prefix}/bin/saidar::' ./src/saidar/Makefile
+sed -i -e 's:chmod u+s ${exec_prefix}/bin/saidar::' ./src/saidar/Makefile
+ make DESTDIR=$startdir/pkg install
+#MAKE="make DESTDIR=$startdir/pkg prefix=$startdir/pkg"
+}
diff --git a/abs/core/libtasn1/PKGBUILD b/abs/core/libtasn1/PKGBUILD
new file mode 100644
index 0000000..9d0f14a
--- /dev/null
+++ b/abs/core/libtasn1/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 3687 2008-06-29 10:44:27Z jgc $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=libtasn1
+pkgver=1.4
+pkgrel=1
+pkgdesc="The ASN.1 library used in GNUTLS"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://www.gnu.org/software/gnutls/"
+depends=('glibc')
+options=('!libtool')
+source=(ftp://ftp.gnutls.org/pub/gnutls/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('a733ecdfed3517910e627d24e050979f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libthai/PKGBUILD b/abs/core/libthai/PKGBUILD
new file mode 100644
index 0000000..68f426e
--- /dev/null
+++ b/abs/core/libthai/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Chaiwat Suttipongsakul <cwt114@gmail.com>
+pkgname=libthai
+pkgver=0.1.9
+pkgrel=1
+pkgdesc="Thai language support routines"
+url="http://linux.thai.net/projects/libthai"
+arch=('i686' 'x86_64')
+license=('LGPL')
+depends=('libdatrie>=0.1.2')
+makedepends=('pkgconfig')
+options=('!libtool' '!emptydirs')
+source=(http://linux.thai.net/pub/thailinux/software/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('7002d111b293f202d20b28aa2b4ed68f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libtheora/PKGBUILD b/abs/core/libtheora/PKGBUILD
new file mode 100644
index 0000000..b0ee1ac
--- /dev/null
+++ b/abs/core/libtheora/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+# Committer: dorphell <dorphell@archlinux.org>
+
+pkgname=libtheora
+pkgver=1.0beta1
+pkgrel=1
+pkgdesc="An open video codec developed by the Xiph.org"
+arch=('i686' 'x86_64')
+depends=('libogg')
+makedepends=('libvorbis')
+url=http://www.xiph.org
+license=('custom')
+source=(http://downloads.xiph.org/releases/theora/libtheora-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libtheora-${pkgver}
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ for file in LICENSE COPYING ; do
+ install -D $file $startdir/pkg/usr/share/licenses/libtheora/$file
+ done
+}
+md5sums=('e2ff1996c5a9fadd0df1025aa10bc35e')
diff --git a/abs/core/libtiff/CVE-2006-3459-3465.patch b/abs/core/libtiff/CVE-2006-3459-3465.patch
new file mode 100644
index 0000000..cb55b03
--- /dev/null
+++ b/abs/core/libtiff/CVE-2006-3459-3465.patch
@@ -0,0 +1,669 @@
+diff -ru tiff-3.8.2/libtiff/tif_dir.c tiff-3.8.2-goo/libtiff/tif_dir.c
+--- tiff-3.8.2/libtiff/tif_dir.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dir.c 2006-07-14 13:52:01.027562000 +0100
+@@ -122,6 +122,7 @@
+ {
+ static const char module[] = "_TIFFVSetField";
+
++ const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
+ TIFFDirectory* td = &tif->tif_dir;
+ int status = 1;
+ uint32 v32, i, v;
+@@ -195,10 +196,12 @@
+ break;
+ case TIFFTAG_ORIENTATION:
+ v = va_arg(ap, uint32);
++ const TIFFFieldInfo* fip;
+ if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v) {
++ fip = _TIFFFieldWithTag(tif, tag);
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "Bad value %lu for \"%s\" tag ignored",
+- v, _TIFFFieldWithTag(tif, tag)->field_name);
++ v, fip ? fip->field_name : "Unknown");
+ } else
+ td->td_orientation = (uint16) v;
+ break;
+@@ -387,11 +390,15 @@
+ * happens, for example, when tiffcp is used to convert between
+ * compression schemes and codec-specific tags are blindly copied.
+ */
++ /*
++ * better not dereference fip if it is NULL.
++ * -- taviso@google.com 15 Jun 2006
++ */
+ if(fip == NULL || fip->field_bit != FIELD_CUSTOM) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "%s: Invalid %stag \"%s\" (not supported by codec)",
+ tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
+- _TIFFFieldWithTag(tif, tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ status = 0;
+ break;
+ }
+@@ -468,7 +475,7 @@
+ if (fip->field_type == TIFF_ASCII)
+ _TIFFsetString((char **)&tv->value, va_arg(ap, char *));
+ else {
+- tv->value = _TIFFmalloc(tv_size * tv->count);
++ tv->value = _TIFFCheckMalloc(tif, tv_size, tv->count, "Tag Value");
+ if (!tv->value) {
+ status = 0;
+ goto end;
+@@ -563,7 +570,7 @@
+ }
+ }
+ if (status) {
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++ TIFFSetFieldBit(tif, fip->field_bit);
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ }
+
+@@ -572,12 +579,12 @@
+ return (status);
+ badvalue:
+ TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad value %d for \"%s\"",
+- tif->tif_name, v, _TIFFFieldWithTag(tif, tag)->field_name);
++ tif->tif_name, v, fip ? fip->field_name : "Unknown");
+ va_end(ap);
+ return (0);
+ badvalue32:
+ TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad value %ld for \"%s\"",
+- tif->tif_name, v32, _TIFFFieldWithTag(tif, tag)->field_name);
++ tif->tif_name, v32, fip ? fip->field_name : "Unknown");
+ va_end(ap);
+ return (0);
+ }
+@@ -813,12 +820,16 @@
+ * If the client tries to get a tag that is not valid
+ * for the image's codec then we'll arrive here.
+ */
++ /*
++ * dont dereference fip if it's NULL.
++ * -- taviso@google.com 15 Jun 2006
++ */
+ if( fip == NULL || fip->field_bit != FIELD_CUSTOM )
+ {
+ TIFFErrorExt(tif->tif_clientdata, "_TIFFVGetField",
+ "%s: Invalid %stag \"%s\" (not supported by codec)",
+ tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
+- _TIFFFieldWithTag(tif, tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ ret_val = 0;
+ break;
+ }
+diff -ru tiff-3.8.2/libtiff/tif_dirinfo.c tiff-3.8.2-goo/libtiff/tif_dirinfo.c
+--- tiff-3.8.2/libtiff/tif_dirinfo.c 2006-02-07 13:51:03.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dirinfo.c 2006-07-14 13:52:00.953558000 +0100
+@@ -775,7 +775,8 @@
+ TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithTag",
+ "Internal error, unknown tag 0x%x",
+ (unsigned int) tag);
+- assert(fip != NULL);
++ /* assert(fip != NULL); */
++
+ /*NOTREACHED*/
+ }
+ return (fip);
+@@ -789,7 +790,8 @@
+ if (!fip) {
+ TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithName",
+ "Internal error, unknown tag %s", field_name);
+- assert(fip != NULL);
++ /* assert(fip != NULL); */
++
+ /*NOTREACHED*/
+ }
+ return (fip);
+diff -ru tiff-3.8.2/libtiff/tif_dirread.c tiff-3.8.2-goo/libtiff/tif_dirread.c
+--- tiff-3.8.2/libtiff/tif_dirread.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_dirread.c 2006-07-14 13:52:00.842557000 +0100
+@@ -29,6 +29,9 @@
+ *
+ * Directory Read Support Routines.
+ */
++
++#include <limits.h>
++
+ #include "tiffiop.h"
+
+ #define IGNORE 0 /* tag placeholder used below */
+@@ -81,6 +84,7 @@
+ uint16 dircount;
+ toff_t nextdiroff;
+ int diroutoforderwarning = 0;
++ int compressionknown = 0;
+ toff_t* new_dirlist;
+
+ tif->tif_diroff = tif->tif_nextdiroff;
+@@ -147,13 +151,20 @@
+ } else {
+ toff_t off = tif->tif_diroff;
+
+- if (off + sizeof (uint16) > tif->tif_size) {
+- TIFFErrorExt(tif->tif_clientdata, module,
+- "%s: Can not read TIFF directory count",
+- tif->tif_name);
+- return (0);
++ /*
++ * Check for integer overflow when validating the dir_off, otherwise
++ * a very high offset may cause an OOB read and crash the client.
++ * -- taviso@google.com, 14 Jun 2006.
++ */
++ if (off + sizeof (uint16) > tif->tif_size ||
++ off > (UINT_MAX - sizeof(uint16))) {
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "%s: Can not read TIFF directory count",
++ tif->tif_name);
++ return (0);
+ } else
+- _TIFFmemcpy(&dircount, tif->tif_base + off, sizeof (uint16));
++ _TIFFmemcpy(&dircount, tif->tif_base + off,
++ sizeof (uint16));
+ off += sizeof (uint16);
+ if (tif->tif_flags & TIFF_SWAB)
+ TIFFSwabShort(&dircount);
+@@ -254,6 +265,7 @@
+ while (fix < tif->tif_nfields &&
+ tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
+ fix++;
++
+ if (fix >= tif->tif_nfields ||
+ tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) {
+
+@@ -264,17 +276,23 @@
+ dp->tdir_tag,
+ dp->tdir_tag,
+ dp->tdir_type);
+-
+- TIFFMergeFieldInfo(tif,
+- _TIFFCreateAnonFieldInfo(tif,
+- dp->tdir_tag,
+- (TIFFDataType) dp->tdir_type),
+- 1 );
++ /*
++ * creating anonymous fields prior to knowing the compression
++ * algorithm (ie, when the field info has been merged) could cause
++ * crashes with pathological directories.
++ * -- taviso@google.com 15 Jun 2006
++ */
++ if (compressionknown)
++ TIFFMergeFieldInfo(tif, _TIFFCreateAnonFieldInfo(tif, dp->tdir_tag,
++ (TIFFDataType) dp->tdir_type), 1 );
++ else goto ignore;
++
+ fix = 0;
+ while (fix < tif->tif_nfields &&
+ tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
+ fix++;
+ }
++
+ /*
+ * Null out old tags that we ignore.
+ */
+@@ -326,6 +344,7 @@
+ dp->tdir_type, dp->tdir_offset);
+ if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v))
+ goto bad;
++ else compressionknown++;
+ break;
+ /* XXX: workaround for broken TIFFs */
+ } else if (dp->tdir_type == TIFF_LONG) {
+@@ -540,6 +559,7 @@
+ * Attempt to deal with a missing StripByteCounts tag.
+ */
+ if (!TIFFFieldSet(tif, FIELD_STRIPBYTECOUNTS)) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * Some manufacturers violate the spec by not giving
+ * the size of the strips. In this case, assume there
+@@ -556,7 +576,7 @@
+ "%s: TIFF directory is missing required "
+ "\"%s\" field, calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if (EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ /*
+@@ -580,6 +600,7 @@
+ } else if (td->td_nstrips == 1
+ && td->td_stripoffset[0] != 0
+ && BYTECOUNTLOOKSBAD) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * XXX: Plexus (and others) sometimes give a value of zero for
+ * a tag when they don't know what the correct value is! Try
+@@ -589,13 +610,14 @@
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "%s: Bogus \"%s\" field, ignoring and calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if(EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ } else if (td->td_planarconfig == PLANARCONFIG_CONTIG
+ && td->td_nstrips > 2
+ && td->td_compression == COMPRESSION_NONE
+ && td->td_stripbytecount[0] != td->td_stripbytecount[1]) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, TIFFTAG_STRIPBYTECOUNTS);
+ /*
+ * XXX: Some vendors fill StripByteCount array with absolutely
+ * wrong values (it can be equal to StripOffset array, for
+@@ -604,7 +626,7 @@
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "%s: Wrong \"%s\" field, ignoring and calculating from imagelength",
+ tif->tif_name,
+- _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
++ fip ? fip->field_name : "Unknown");
+ if (EstimateStripByteCounts(tif, dir, dircount) < 0)
+ goto bad;
+ }
+@@ -870,7 +892,13 @@
+
+ register TIFFDirEntry *dp;
+ register TIFFDirectory *td = &tif->tif_dir;
+- uint16 i;
++
++ /* i is used to iterate over td->td_nstrips, so must be
++ * at least the same width.
++ * -- taviso@google.com 15 Jun 2006
++ */
++
++ uint32 i;
+
+ if (td->td_stripbytecount)
+ _TIFFfree(td->td_stripbytecount);
+@@ -947,16 +975,18 @@
+ static int
+ CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count)
+ {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
++
+ if (count > dir->tdir_count) {
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "incorrect count for field \"%s\" (%lu, expecting %lu); tag ignored",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
++ fip ? fip->field_name : "Unknown",
+ dir->tdir_count, count);
+ return (0);
+ } else if (count < dir->tdir_count) {
+ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
+ "incorrect count for field \"%s\" (%lu, expecting %lu); tag trimmed",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
++ fip ? fip->field_name : "Unknown",
+ dir->tdir_count, count);
+ return (1);
+ }
+@@ -970,6 +1000,7 @@
+ TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp)
+ {
+ int w = TIFFDataWidth((TIFFDataType) dir->tdir_type);
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ tsize_t cc = dir->tdir_count * w;
+
+ /* Check for overflow. */
+@@ -1013,7 +1044,7 @@
+ bad:
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Error fetching data for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ return (tsize_t) 0;
+ }
+
+@@ -1039,10 +1070,12 @@
+ static int
+ cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv)
+ {
++ const TIFFFieldInfo* fip;
+ if (denom == 0) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "%s: Rational with zero denominator (num = %lu)",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num);
++ fip ? fip->field_name : "Unknown", num);
+ return (0);
+ } else {
+ if (dir->tdir_type == TIFF_RATIONAL)
+@@ -1159,6 +1192,20 @@
+ static int
+ TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir)
+ {
++ /*
++ * Prevent overflowing the v stack arrays below by performing a sanity
++ * check on tdir_count, this should never be greater than two.
++ * -- taviso@google.com 14 Jun 2006.
++ */
++ if (dir->tdir_count > 2) {
++ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
++ TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
++ "unexpected count for field \"%s\", %lu, expected 2; ignored.",
++ fip ? fip->field_name : "Unknown",
++ dir->tdir_count);
++ return 0;
++ }
++
+ switch (dir->tdir_type) {
+ case TIFF_BYTE:
+ case TIFF_SBYTE:
+@@ -1329,14 +1376,15 @@
+ case TIFF_DOUBLE:
+ return (TIFFFetchDoubleArray(tif, dir, (double*) v));
+ default:
++ { const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ /* TIFF_NOTYPE */
+ /* TIFF_ASCII */
+ /* TIFF_UNDEFINED */
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "cannot read TIFF_ANY type %d for field \"%s\"",
+ dir->tdir_type,
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
+- return (0);
++ fip ? fip->field_name : "Unknown");
++ return (0); }
+ }
+ return (1);
+ }
+@@ -1351,6 +1399,9 @@
+ int ok = 0;
+ const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag);
+
++ if (fip == NULL) {
++ return (0);
++ }
+ if (dp->tdir_count > 1) { /* array of values */
+ char* cp = NULL;
+
+@@ -1493,6 +1544,7 @@
+ TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, uint16* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1510,9 +1562,10 @@
+
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+@@ -1534,6 +1587,7 @@
+ TIFFFetchPerSampleLongs(TIFF* tif, TIFFDirEntry* dir, uint32* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1551,9 +1605,10 @@
+ check_count = samples;
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+@@ -1574,6 +1629,7 @@
+ TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl)
+ {
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
++ const TIFFFieldInfo* fip;
+ int status = 0;
+
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
+@@ -1591,9 +1647,10 @@
+
+ for (i = 1; i < check_count; i++)
+ if (v[i] != v[0]) {
++ fip = _TIFFFieldWithTag(tif, dir->tdir_tag);
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "Cannot handle different per-sample values for field \"%s\"",
+- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
++ fip ? fip->field_name : "Unknown");
+ goto bad;
+ }
+ *pl = v[0];
+diff -ru tiff-3.8.2/libtiff/tif_fax3.c tiff-3.8.2-goo/libtiff/tif_fax3.c
+--- tiff-3.8.2/libtiff/tif_fax3.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_fax3.c 2006-07-14 13:52:00.669557000 +0100
+@@ -1136,6 +1136,7 @@
+ Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap)
+ {
+ Fax3BaseState* sp = Fax3State(tif);
++ const TIFFFieldInfo* fip;
+
+ assert(sp != 0);
+ assert(sp->vsetparent != 0);
+@@ -1181,7 +1182,13 @@
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++
++ if ((fip = _TIFFFieldWithTag(tif, tag))) {
++ TIFFSetFieldBit(tif, fip->field_bit);
++ } else {
++ return (0);
++ }
++
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ return (1);
+ }
+diff -ru tiff-3.8.2/libtiff/tif_jpeg.c tiff-3.8.2-goo/libtiff/tif_jpeg.c
+--- tiff-3.8.2/libtiff/tif_jpeg.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_jpeg.c 2006-07-14 13:52:00.655560000 +0100
+@@ -722,15 +722,31 @@
+ segment_width = TIFFhowmany(segment_width, sp->h_sampling);
+ segment_height = TIFFhowmany(segment_height, sp->v_sampling);
+ }
+- if (sp->cinfo.d.image_width != segment_width ||
+- sp->cinfo.d.image_height != segment_height) {
++ if (sp->cinfo.d.image_width < segment_width ||
++ sp->cinfo.d.image_height < segment_height) {
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "Improper JPEG strip/tile size, expected %dx%d, got %dx%d",
+ segment_width,
+ segment_height,
+ sp->cinfo.d.image_width,
+ sp->cinfo.d.image_height);
++ }
++
++ if (sp->cinfo.d.image_width > segment_width ||
++ sp->cinfo.d.image_height > segment_height) {
++ /*
++ * This case could be dangerous, if the strip or tile size has been
++ * reported as less than the amount of data jpeg will return, some
++ * potential security issues arise. Catch this case and error out.
++ * -- taviso@google.com 14 Jun 2006
++ */
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "JPEG strip/tile size exceeds expected dimensions,"
++ "expected %dx%d, got %dx%d", segment_width, segment_height,
++ sp->cinfo.d.image_width, sp->cinfo.d.image_height);
++ return (0);
+ }
++
+ if (sp->cinfo.d.num_components !=
+ (td->td_planarconfig == PLANARCONFIG_CONTIG ?
+ td->td_samplesperpixel : 1)) {
+@@ -761,6 +777,22 @@
+ sp->cinfo.d.comp_info[0].v_samp_factor,
+ sp->h_sampling, sp->v_sampling);
+
++ /*
++ * There are potential security issues here for decoders that
++ * have already allocated buffers based on the expected sampling
++ * factors. Lets check the sampling factors dont exceed what
++ * we were expecting.
++ * -- taviso@google.com 14 June 2006
++ */
++ if (sp->cinfo.d.comp_info[0].h_samp_factor > sp->h_sampling ||
++ sp->cinfo.d.comp_info[0].v_samp_factor > sp->v_sampling) {
++ TIFFErrorExt(tif->tif_clientdata, module,
++ "Cannot honour JPEG sampling factors that"
++ " exceed those specified.");
++ return (0);
++ }
++
++
+ /*
+ * XXX: Files written by the Intergraph software
+ * has different sampling factors stored in the
+@@ -1521,15 +1553,18 @@
+ {
+ JPEGState *sp = JState(tif);
+
+- assert(sp != 0);
++ /* assert(sp != 0); */
+
+ tif->tif_tagmethods.vgetfield = sp->vgetparent;
+ tif->tif_tagmethods.vsetfield = sp->vsetparent;
+
+- if( sp->cinfo_initialized )
+- TIFFjpeg_destroy(sp); /* release libjpeg resources */
+- if (sp->jpegtables) /* tag value */
+- _TIFFfree(sp->jpegtables);
++ if (sp != NULL) {
++ if( sp->cinfo_initialized )
++ TIFFjpeg_destroy(sp); /* release libjpeg resources */
++ if (sp->jpegtables) /* tag value */
++ _TIFFfree(sp->jpegtables);
++ }
++
+ _TIFFfree(tif->tif_data); /* release local state */
+ tif->tif_data = NULL;
+
+@@ -1541,6 +1576,7 @@
+ {
+ JPEGState* sp = JState(tif);
+ TIFFDirectory* td = &tif->tif_dir;
++ const TIFFFieldInfo* fip;
+ uint32 v32;
+
+ assert(sp != NULL);
+@@ -1606,7 +1642,13 @@
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+- TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
++
++ if ((fip = _TIFFFieldWithTag(tif, tag))) {
++ TIFFSetFieldBit(tif, fip->field_bit);
++ } else {
++ return (0);
++ }
++
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
+ return (1);
+ }
+@@ -1726,7 +1768,11 @@
+ {
+ JPEGState* sp = JState(tif);
+
+- assert(sp != NULL);
++ /* assert(sp != NULL); */
++ if (sp == NULL) {
++ TIFFWarningExt(tif->tif_clientdata, "JPEGPrintDir", "Unknown JPEGState");
++ return;
++ }
+
+ (void) flags;
+ if (TIFFFieldSet(tif,FIELD_JPEGTABLES))
+diff -ru tiff-3.8.2/libtiff/tif_next.c tiff-3.8.2-goo/libtiff/tif_next.c
+--- tiff-3.8.2/libtiff/tif_next.c 2005-12-21 12:33:56.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_next.c 2006-07-14 13:52:00.556567000 +0100
+@@ -105,11 +105,16 @@
+ * as codes of the form <color><npixels>
+ * until we've filled the scanline.
+ */
++ /*
++ * Ensure the run does not exceed the scanline
++ * bounds, potentially resulting in a security issue.
++ * -- taviso@google.com 14 Jun 2006.
++ */
+ op = row;
+ for (;;) {
+ grey = (n>>6) & 0x3;
+ n &= 0x3f;
+- while (n-- > 0)
++ while (n-- > 0 && npixels < imagewidth)
+ SETPIXEL(op, grey);
+ if (npixels >= (int) imagewidth)
+ break;
+diff -ru tiff-3.8.2/libtiff/tif_pixarlog.c tiff-3.8.2-goo/libtiff/tif_pixarlog.c
+--- tiff-3.8.2/libtiff/tif_pixarlog.c 2006-03-21 16:42:50.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_pixarlog.c 2006-07-14 13:52:00.483557000 +0100
+@@ -768,7 +768,19 @@
+ if (tif->tif_flags & TIFF_SWAB)
+ TIFFSwabArrayOfShort(up, nsamples);
+
+- for (i = 0; i < nsamples; i += llen, up += llen) {
++ /*
++ * if llen is not an exact multiple of nsamples, the decode operation
++ * may overflow the output buffer, so truncate it enough to prevent that
++ * but still salvage as much data as possible.
++ * -- taviso@google.com 14th June 2006
++ */
++ if (nsamples % llen)
++ TIFFWarningExt(tif->tif_clientdata, module,
++ "%s: stride %lu is not a multiple of sample count, "
++ "%lu, data truncated.", tif->tif_name, llen, nsamples);
++
++
++ for (i = 0; i < nsamples - (nsamples % llen); i += llen, up += llen) {
+ switch (sp->user_datafmt) {
+ case PIXARLOGDATAFMT_FLOAT:
+ horizontalAccumulateF(up, llen, sp->stride,
+diff -ru tiff-3.8.2/libtiff/tif_read.c tiff-3.8.2-goo/libtiff/tif_read.c
+--- tiff-3.8.2/libtiff/tif_read.c 2005-12-21 12:33:56.000000000 +0000
++++ tiff-3.8.2-goo/libtiff/tif_read.c 2006-07-14 13:52:00.467568000 +0100
+@@ -31,6 +31,8 @@
+ #include "tiffiop.h"
+ #include <stdio.h>
+
++#include <limits.h>
++
+ int TIFFFillStrip(TIFF*, tstrip_t);
+ int TIFFFillTile(TIFF*, ttile_t);
+ static int TIFFStartStrip(TIFF*, tstrip_t);
+@@ -272,7 +274,13 @@
+ if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
+ _TIFFfree(tif->tif_rawdata);
+ tif->tif_flags &= ~TIFF_MYBUFFER;
+- if ( td->td_stripoffset[strip] + bytecount > tif->tif_size) {
++ /*
++ * This sanity check could potentially overflow, causing an OOB read.
++ * verify that offset + bytecount is > offset.
++ * -- taviso@google.com 14 Jun 2006
++ */
++ if ( td->td_stripoffset[strip] + bytecount > tif->tif_size ||
++ bytecount > (UINT_MAX - td->td_stripoffset[strip])) {
+ /*
+ * This error message might seem strange, but it's
+ * what would happen if a read were done instead.
+@@ -470,7 +478,13 @@
+ if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
+ _TIFFfree(tif->tif_rawdata);
+ tif->tif_flags &= ~TIFF_MYBUFFER;
+- if ( td->td_stripoffset[tile] + bytecount > tif->tif_size) {
++ /*
++ * We must check this calculation doesnt overflow, potentially
++ * causing an OOB read.
++ * -- taviso@google.com 15 Jun 2006
++ */
++ if (td->td_stripoffset[tile] + bytecount > tif->tif_size ||
++ bytecount > (UINT_MAX - td->td_stripoffset[tile])) {
+ tif->tif_curtile = NOTILE;
+ return (0);
+ }
diff --git a/abs/core/libtiff/PKGBUILD b/abs/core/libtiff/PKGBUILD
new file mode 100644
index 0000000..67cb689
--- /dev/null
+++ b/abs/core/libtiff/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=libtiff
+pkgver=3.8.2
+pkgrel=3
+pkgdesc="Library for manipulation of TIFF images"
+arch=(i686 x86_64)
+depends=(libjpeg zlib)
+makedepends=(libgl freeglut libxmu libxi)
+options=(!libtool)
+url="http://www.libtiff.org/"
+source=(ftp://ftp.remotesensing.org/pub/libtiff/tiff-${pkgver}.tar.gz
+ tiff2pdf-octal-printf.patch
+ tiffsplit-fname-overflow.patch
+ CVE-2006-3459-3465.patch
+ tiff2pdf-compression.patch)
+md5sums=('fbb6f446ea4ed18955e2714934e5b698' 'd54368687d2645ffbbe6c2df384b11bf'\
+ '323352fd60a7bd3ffac8724c3c031669' '624d3067e6a4c0680767eb62253ea980'\
+ 'b443ffca9d498bb3a88c17da0200025b')
+
+build() {
+ cd ${startdir}/src/tiff-${pkgver}
+ patch -Np1 -i ${startdir}/src/tiff2pdf-octal-printf.patch || return 1
+ patch -Np1 -i ${startdir}/src/tiffsplit-fname-overflow.patch || return 1
+ patch -Np1 -i ${startdir}/src/CVE-2006-3459-3465.patch || return 1
+ patch -Np1 -i ${startdir}/src/tiff2pdf-compression.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libtiff/tiff2pdf-compression.patch b/abs/core/libtiff/tiff2pdf-compression.patch
new file mode 100644
index 0000000..2dae2dc
--- /dev/null
+++ b/abs/core/libtiff/tiff2pdf-compression.patch
@@ -0,0 +1,44 @@
+--- tiff-3.8.2/tools/tiff2pdf.c 8 Jun 2006 11:27:11 -0000 1.35
++++ tiff-3.8.2/tools/tiff2pdf.c 19 Jun 2006 20:12:08 -0000 1.36
+@@ -937,7 +937,7 @@
+
+ #ifdef JPEG_SUPPORT
+ if(t2p->pdf_defaultcompression==T2P_COMPRESS_JPEG){
+- if(t2p->pdf_defaultcompressionquality<100 ||
++ if(t2p->pdf_defaultcompressionquality>100 ||
+ t2p->pdf_defaultcompressionquality<1){
+ t2p->pdf_defaultcompressionquality=0;
+ }
+@@ -945,25 +945,17 @@
+ #endif
+ #ifdef ZIP_SUPPORT
+ if(t2p->pdf_defaultcompression==T2P_COMPRESS_ZIP){
+- switch (t2p->pdf_defaultcompressionquality){
+- case 1: case 10: case 11: case 12: case 13: case 14: case 15:
+- case 101: case 110: case 111: case 112: case 113: case 114: case 115:
+- case 201: case 210: case 211: case 212: case 213: case 214: case 215:
+- case 301: case 310: case 311: case 312: case 313: case 314: case 315:
+- case 401: case 410: case 411: case 412: case 413: case 414: case 415:
+- case 501: case 510: case 511: case 512: case 513: case 514: case 515:
+- case 601: case 610: case 611: case 612: case 613: case 614: case 615:
+- case 701: case 710: case 711: case 712: case 713: case 714: case 715:
+- case 801: case 810: case 811: case 812: case 813: case 814: case 815:
+- case 901: case 910: case 911: case 912: case 913: case 914: case 915:
+- break;
+- default:
+- t2p->pdf_defaultcompressionquality=0;
++ uint16 m=t2p->pdf_defaultcompressionquality%100;
++ if(t2p->pdf_defaultcompressionquality/100 > 9 ||
++ (m>1 && m<10) || m>15){
++ t2p->pdf_defaultcompressionquality=0;
+ }
+ if(t2p->pdf_defaultcompressionquality%100 !=0){
++ t2p->pdf_defaultcompressionquality/=100;
++ t2p->pdf_defaultcompressionquality*=100;
+ TIFFError(
+ TIFF2PDF_MODULE,
+- "PNG Group predictor differencing not implemented, assuming compresion quality %u",
++ "PNG Group predictor differencing not implemented, assuming compression quality %u",
+ t2p->pdf_defaultcompressionquality);
+ }
+ t2p->pdf_defaultcompressionquality%=100;
diff --git a/abs/core/libtiff/tiff2pdf-octal-printf.patch b/abs/core/libtiff/tiff2pdf-octal-printf.patch
new file mode 100644
index 0000000..f35b072
--- /dev/null
+++ b/abs/core/libtiff/tiff2pdf-octal-printf.patch
@@ -0,0 +1,11 @@
+--- tiff-3.8.2/tools/tiff2pdf.c.orig 2006-03-21 11:42:51.000000000 -0500
++++ tiff-3.8.2/tools/tiff2pdf.c 2006-06-07 17:54:01.027637232 -0400
+@@ -3668,7 +3668,7 @@
+ written += TIFFWriteFile(output, (tdata_t) "(", 1);
+ for (i=0;i<len;i++){
+ if((pdfstr[i]&0x80) || (pdfstr[i]==127) || (pdfstr[i]<32)){
+- sprintf(buffer, "\\%.3o", pdfstr[i]);
++ sprintf(buffer, "\\%.3hho", pdfstr[i]);
+ written += TIFFWriteFile(output, (tdata_t) buffer, 4);
+ } else {
+ switch (pdfstr[i]){
diff --git a/abs/core/libtiff/tiffsplit-fname-overflow.patch b/abs/core/libtiff/tiffsplit-fname-overflow.patch
new file mode 100644
index 0000000..cc22589
--- /dev/null
+++ b/abs/core/libtiff/tiffsplit-fname-overflow.patch
@@ -0,0 +1,19 @@
+--- tiff-3.8.2/tools/tiffsplit.c.orig 2005-12-07 04:48:33.000000000 -0500
++++ tiff-3.8.2/tools/tiffsplit.c 2006-06-01 21:20:25.039944864 -0400
+@@ -61,14 +61,13 @@
+ return (-3);
+ }
+ if (argc > 2)
+- strcpy(fname, argv[2]);
++ snprintf(fname, sizeof(fname), "%s", argv[2]);
+ in = TIFFOpen(argv[1], "r");
+ if (in != NULL) {
+ do {
+ char path[1024+1];
+ newfilename();
+- strcpy(path, fname);
+- strcat(path, ".tif");
++ snprintf(path, sizeof(path), "%s.tif", fname);
+ out = TIFFOpen(path, TIFFIsBigEndian(in)?"wb":"wl");
+ if (out == NULL)
+ return (-2);
diff --git a/abs/core/libtool/PKGBUILD b/abs/core/libtool/PKGBUILD
new file mode 100644
index 0000000..965a282
--- /dev/null
+++ b/abs/core/libtool/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1505 2008-05-12 10:28:03Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=libtool
+pkgver=2.2.4
+pkgrel=1
+pkgdesc="A generic library support script"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/libtool"
+groups=('base-devel')
+depends=('sh')
+source=(ftp://ftp.gnu.org/pub/gnu/libtool/${pkgname}-${pkgver}.tar.gz)
+md5sums=('0b87e84c7aad3b5e979bbe35312fd4c1')
+options=('!libtool')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/libusb/PKGBUILD b/abs/core/libusb/PKGBUILD
new file mode 100644
index 0000000..2c6b879
--- /dev/null
+++ b/abs/core/libusb/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 8698 2008-08-16 03:34:22Z eric $
+# Maintainer: arjan <arjan@archlinux.org>
+pkgname=libusb
+pkgver=0.1.12
+pkgrel=12
+depends=('gcc-libs')
+pkgdesc="Library to enable user space application programs to communicate with USB devices"
+arch=(i686 x86_64)
+url="http://libusb.sourceforge.net/"
+license=('LGPL')
+groups=('base')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('caf182cbc7565dac0fd72155919672e6')
+options=(!libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-build-docs
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/libvorbis/PKGBUILD b/abs/core/libvorbis/PKGBUILD
new file mode 100644
index 0000000..c655b95
--- /dev/null
+++ b/abs/core/libvorbis/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libvorbis
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="Vorbis codec library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.xiph.org/ogg/vorbis/"
+depends=('glibc' 'libogg')
+source=(http://downloads.xiph.org/releases/vorbis/$pkgname-$pkgver.tar.gz)
+md5sums=('478646358c49f34aedcce58948793619')
+
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+ #-march=i686 optimizes too much, strip it out
+ CFLAGS=${CFLAGS/-march=$CARCH} ./configure --prefix=/usr --disable-static
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -Dm644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core/libwmf/PKGBUILD b/abs/core/libwmf/PKGBUILD
new file mode 100644
index 0000000..f1c3d17
--- /dev/null
+++ b/abs/core/libwmf/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: FJ <joostef@gmail.com>
+pkgname=libwmf
+pkgver=0.2.8.4
+pkgrel=4
+pkgdesc="A library for reading vector images in Microsoft's native Windows Metafile Format (WMF)."
+arch=(i686 x86_64)
+url="http://wvware.sourceforge.net/libwmf.html"
+license=("LGPL")
+depends=('libpng' 'libx11' 'freetype2' 'libjpeg' 'gsfonts' 'expat>=2.0')
+makedepends=('gtk2>=2.10.0' 'pkgconfig')
+options=(!libtool)
+install=libwmf.install
+source=(http://heanet.dl.sf.net/sourceforge/wvware/${pkgname}-${pkgver}.tar.gz)
+md5sums=(d1177739bf1ceb07f57421f0cee191e0)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/src include fonts doc/src include fonts/g' Makefile.in
+ ./configure --prefix=/usr \
+ --with-gsfontdir=/usr/share/fonts/Type1 \
+ --with-fontdir=/usr/share/fonts/Type1 \
+ --with-gsfontmap=/usr/share/ghostscript/8.15/lib/Fontmap.GS
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ #Remove fonts, these are in gsfonts
+ rm -rf ${startdir}/pkg/usr/share/fonts
+ #Remove static GTK loader, can't use it anyways
+ rm -f ${startdir}/pkg/usr/lib/gtk-2.0/*/loaders/*.a
+}
diff --git a/abs/core/libwmf/libwmf.install b/abs/core/libwmf/libwmf.install
new file mode 100644
index 0000000..17fa278
--- /dev/null
+++ b/abs/core/libwmf/libwmf.install
@@ -0,0 +1,18 @@
+post_install() {
+ if [ -x /usr/bin/gdk-pixbuf-query-loaders ]; then
+ /usr/bin/gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff b/abs/core/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff
new file mode 100644
index 0000000..218c906
--- /dev/null
+++ b/abs/core/libx11/012_ru_RU_UTF-8_XLC_LOCALE.diff
@@ -0,0 +1,237 @@
+Index: libx11/nls/locale.dir.pre
+===================================================================
+--- libx11.orig/nls/locale.dir.pre 2006-08-02 22:04:01.000000000 +0000
++++ libx11/nls/locale.dir.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -436,7 +436,7 @@
+ pt_BR.UTF-8/XLC_LOCALE: pt_BR.UTF-8
+ en_US.UTF-8/XLC_LOCALE: pt_PT.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ro_RO.UTF-8
+-en_US.UTF-8/XLC_LOCALE: ru_RU.UTF-8
++ru_RU.UTF-8/XLC_LOCALE: ru_RU.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ru_UA.UTF-8
+ en_US.UTF-8/XLC_LOCALE: rw_RW.UTF-8
+ en_US.UTF-8/XLC_LOCALE: se_NO.UTF-8
+Index: libx11/nls/ru_RU.UTF-8/XLC_LOCALE.pre
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/XLC_LOCALE.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,169 @@
++XCOMM
++XCOMM XLocale Database Sample for ru_RU.UTF-8
++XCOMM Derived from en_US.UTF-8
++XCOMM
++
++XCOMM
++XCOMM XLC_FONTSET category
++XCOMM
++XLC_FONTSET
++
++on_demand_loading True
++
++object_name generic
++
++XCOMM fs0 class (7 bit ASCII)
++fs0 {
++ charset {
++ name ISO8859-1:GL
++ }
++ font {
++ primary ISO8859-1:GL
++ vertical_rotate all
++ }
++}
++XCOMM fs1 class (ISO8859 families)
++fs1 {
++ charset {
++ name ISO8859-1:GR
++ }
++ font {
++ primary ISO8859-1:GR
++ }
++}
++XCOMM fs2 class (KOI8-R)
++fs2 {
++ charset {
++ name KOI8-R:GR
++ }
++ font {
++ primary KOI8-R:GR
++ }
++}
++XCOMM fs3 class (MICROSOFT-CP1251)
++fs3 {
++ charset {
++ name MICROSOFT-CP1251:GR
++ }
++ font {
++ primary MICROSOFT-CP1251:GR
++ }
++}
++XCOMM fs4 class (ISO8859-5)
++fs4 {
++ charset {
++ name ISO8859-5:GR
++ }
++ font {
++ primary ISO8859-5:GR
++ }
++}
++XCOMM fs5 class (Kanji)
++fs5 {
++ charset {
++ name JISX0208.1983-0:GL
++ }
++ font {
++ primary JISX0208.1983-0:GL
++ }
++}
++XCOMM fs6 class (Korean Character)
++fs6 {
++ charset {
++ name KSC5601.1987-0:GL
++ }
++ font {
++ primary KSC5601.1987-0:GL
++ }
++}
++XCOMM fs7 class (Chinese Han Character)
++fs7 {
++ charset {
++ name GB2312.1980-0:GL
++ }
++ font {
++ primary GB2312.1980-0:GL
++ }
++}
++XCOMM fs8 class (Half Kana)
++fs8 {
++ charset {
++ name JISX0201.1976-0:GR
++ }
++ font {
++ primary JISX0201.1976-0:GR
++ vertical_rotate all
++ }
++}
++XCOMM ISO10646 should come last so the fonts above will actually be used
++XCOMM fs9 class
++fs9 {
++ charset {
++ name ISO10646-1
++ }
++ font {
++ primary ISO10646-1
++ }
++}
++END XLC_FONTSET
++
++XCOMM
++XCOMM XLC_XLOCALE category
++XCOMM
++XLC_XLOCALE
++
++encoding_name UTF-8
++mb_cur_max 6
++state_depend_encoding False
++
++XCOMM cs0 class
++cs0 {
++ side GL:Default
++ length 1
++ ct_encoding ISO8859-1:GL
++}
++
++XCOMM cs1 class
++cs1 {
++ side GR:Default
++ length 1
++ ct_encoding ISO8859-1:GR
++}
++
++XCOMM cs2 class
++cs2 {
++ side GR
++ length 2
++ ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR; JISX0208.1983-1:GL; JISX0208.1983-1:GR
++
++}
++
++XCOMM cs3 class
++cs3 {
++ side GL
++ length 2
++ ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR; KSC5601.1987-1:GL; KSC5601.1987-1:GR
++
++}
++
++XCOMM cs4 class
++cs4 {
++ side GR
++ length 2
++ ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR
++}
++
++XCOMM cs5 class
++cs5 {
++ side GR
++ length 1
++ ct_encoding JISX0201.1976-0:GR
++}
++
++XCOMM cs6 class
++cs6 {
++ side none
++ ct_encoding ISO10646-1
++}
++
++END XLC_XLOCALE
+Index: libx11/nls/ru_RU.UTF-8/XI18N_OBJS
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/XI18N_OBJS 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,7 @@
++# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME
++#
++# XI18N objects table for en_US.UTF-8 locale
++#
++XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open
++XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister
++XOM common/xomGeneric _XomGenericOpenOM # XOM_open
+Index: libx11/configure.ac
+===================================================================
+--- libx11.orig/configure.ac 2006-08-02 20:31:39.000000000 +0000
++++ libx11/configure.ac 2006-08-02 22:04:04.000000000 +0000
+@@ -400,6 +400,7 @@
+ nls/mulelao-1/Makefile
+ nls/nokhchi-1/Makefile
+ nls/pt_BR.UTF-8/Makefile
++ nls/ru_RU.UTF-8/Makefile
+ nls/tatar-cyr/Makefile
+ nls/th_TH/Makefile
+ nls/th_TH.UTF-8/Makefile
+Index: libx11/nls/Makefile.am
+===================================================================
+--- libx11.orig/nls/Makefile.am 2006-08-02 20:31:30.000000000 +0000
++++ libx11/nls/Makefile.am 2006-08-02 22:04:04.000000000 +0000
+@@ -52,6 +52,7 @@
+ mulelao-1 \
+ nokhchi-1 \
+ pt_BR.UTF-8 \
++ ru_RU.UTF-8 \
+ tatar-cyr \
+ th_TH \
+ th_TH.UTF-8 \
+Index: libx11/nls/ru_RU.UTF-8/Compose.pre
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/Compose.pre 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1 @@
++include "/usr/share/X11/locale/en_US.UTF-8/Compose"
+Index: libx11/nls/ru_RU.UTF-8/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libx11/nls/ru_RU.UTF-8/Makefile.am 2006-08-02 22:04:04.000000000 +0000
+@@ -0,0 +1,3 @@
++x11thislocaledir = $(X11_LOCALEDATADIR)/ru_RU.UTF-8
++
++include $(top_srcdir)/nls/localerules.in
diff --git a/abs/core/libx11/PKGBUILD b/abs/core/libx11/PKGBUILD
new file mode 100644
index 0000000..e69ed0a
--- /dev/null
+++ b/abs/core/libx11/PKGBUILD
@@ -0,0 +1,44 @@
+# $Id: PKGBUILD 1882 2008-05-22 17:44:17Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor Jan de Groot <jgc@archlinux.org>
+pkgname=libx11
+pkgver=1.1.4
+pkgrel=2
+pkgdesc="X11 client-side library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxau' 'libxdmcp' 'libxcb>=1.1' 'kbproto' 'inputproto' 'bigreqsproto')
+makedepends=('pkgconfig' 'xcmiscproto' 'xextproto' 'xf86bigfontproto' 'xtrans' \
+ 'bigreqsproto' 'xorg-util-macros' 'autoconf' 'automake' 'libtool')
+options=('!libtool')
+license=('custom:XFREE86')
+source=(${url}/releases/individual/lib/libX11-${pkgver}.tar.bz2
+ 012_ru_RU_UTF-8_XLC_LOCALE.diff
+ xorg.sh)
+md5sums=('1469a5a8aa8d288dce6f4c45d2f68dc3'
+ 'c7e38a68b932ed557bc71979eed2a8a1'
+ 'ea3f14c529072c8be061493763479800')
+
+build() {
+ cd ${startdir}/src/libX11-${pkgver}
+ patch -Np1 -i ${startdir}/src/012_ru_RU_UTF-8_XLC_LOCALE.diff || return 1
+
+
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+
+ ./configure --prefix=/usr \
+ --with-xcb || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -d -m755 ${startdir}/pkg/etc/profile.d
+ install -m755 ${startdir}/src/xorg.sh \
+ ${startdir}/pkg/etc/profile.d/ || return 1
+
+ install -d -m755 ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 -D ${startdir}/src/libX11-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libx11/xorg.sh b/abs/core/libx11/xorg.sh
new file mode 100644
index 0000000..d3ade91
--- /dev/null
+++ b/abs/core/libx11/xorg.sh
@@ -0,0 +1,19 @@
+export XDG_DATA_HOME=$HOME/.local/share
+export XDG_CONFIG_HOME=$HOME/.config
+export XDG_CACHE_HOME=$HOME/.cache
+
+if [ -z $XDG_DATA_DIRS ]; then
+ export XDG_DATA_DIRS=/usr/share:/usr/local/share
+else
+ export XDG_DATA_DIRS=/usr/share:/usr/local/share:$XDG_DATA_DIRS
+fi
+
+if [ -z $XDG_CONFIG_DIRS ]; then
+ export XDG_CONFIG_DIRS=/etc/xdg
+else
+ export XDG_CONFIG_DIRS=/etc/xdg:$XDG_CONFIG_DIRS
+fi
+
+# temporarily loosen restrictions in libxcb to get java
+# application involving X to work.
+export LIBXCB_ALLOW_SLOPPY_LOCK=true
diff --git a/abs/core/libx86/PKGBUILD b/abs/core/libx86/PKGBUILD
new file mode 100644
index 0000000..5cf3488
--- /dev/null
+++ b/abs/core/libx86/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: tardo <tardo@nagi-fanboi.net>
+
+pkgname=libx86
+pkgver=0.99
+pkgrel=1
+pkgdesc="Provides an lrmi interface that works on x86, am64 and alpha"
+arch=('i686' 'x86_64')
+url="http://www.codon.org.uk/~mjg59/libx86/"
+license=('custom')
+depends=('glibc')
+source=(http://www.codon.org.uk/~mjg59/libx86/downloads/libx86-$pkgver.tar.gz lrmi.patch)
+md5sums=('c426d4f29fdf3499158cf49d4f374315')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -p1 < ../lrmi.patch
+ if [ "$CARCH" = "x86_64" ]; then
+ make BACKEND=x86emu || return 1
+ else
+ make || return 1
+ fi
+
+ make DESTDIR=$startdir/pkg install
+ install -D -m 644 COPYRIGHT $startdir/pkg/usr/share/licenses/$pkgname/COPYRIGHT
+}
diff --git a/abs/core/libx86/lrmi.patch b/abs/core/libx86/lrmi.patch
new file mode 100644
index 0000000..10530f9
--- /dev/null
+++ b/abs/core/libx86/lrmi.patch
@@ -0,0 +1,16 @@
+--- old/lrmi.c 2006-10-30 21:10:16.000000000 +0100
++++ new/lrmi.c 2008-08-27 11:32:40.000000000 +0200
+@@ -64,6 +64,13 @@
+ #define DEFAULT_STACK_SIZE 0x1000
+ #define RETURN_TO_32_INT 255
+
++#ifndef IF_MASK
++#define IF_MASK X86_EFLAGS_VIF
++#define IOPL_MASK X86_EFLAGS_IOPL
++#define VIF_MASK X86_EFLAGS_VIF
++#define TF_MASK X86_EFLAGS_TF
++#endif
++
+ #if defined(__linux__)
+ #define CONTEXT_REGS context.vm.regs
+ #define REG(x) x
diff --git a/abs/core/libxau/PKGBUILD b/abs/core/libxau/PKGBUILD
new file mode 100644
index 0000000..7b2116b
--- /dev/null
+++ b/abs/core/libxau/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxau
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 authorisation library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xproto')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXau-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXau-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('75a9f2b85cd1617b5ca98c9095323853')
diff --git a/abs/core/libxaw/PKGBUILD b/abs/core/libxaw/PKGBUILD
new file mode 100644
index 0000000..3b447d1
--- /dev/null
+++ b/abs/core/libxaw/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxaw
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Athena Widget library"
+arch=(i686 x86_64)
+license=('custom:')
+url="http://xorg.freedesktop.org/"
+depends=('libxmu' 'libxpm' 'libxp')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXaw-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXaw-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/libXaw-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/license.txt
+}
+md5sums=('73671d8f1cf36fdd81395328cc3539c9')
diff --git a/abs/core/libxcb/PKGBUILD b/abs/core/libxcb/PKGBUILD
new file mode 100644
index 0000000..b1eadee
--- /dev/null
+++ b/abs/core/libxcb/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcb
+pkgver=1.1
+pkgrel=1
+pkgdesc="X11 client-side library"
+arch=(i686 x86_64)
+url="http://xcb.freedesktop.org/"
+depends=('xcb-proto>=1.1' 'libxdmcp' 'libxau')
+makedepends=('pkgconfig' 'libxslt' 'libpthread-stubs')
+options=('!libtool')
+license=('custom')
+source=(${url}/dist/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ # Remove pthread-stubs dependency from pc files,
+ # the stubs package doesn't provide any libs since our libc is complete.
+ sed -i -e 's/pthread-stubs//' ${startdir}/pkg/usr/lib/pkgconfig/*.pc
+
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('9310b02433273d75d42f10da3c7455aa')
diff --git a/abs/core/libxcb/xcb_xlib-no-assert-on-lock.patch b/abs/core/libxcb/xcb_xlib-no-assert-on-lock.patch
new file mode 100644
index 0000000..a29361b
--- /dev/null
+++ b/abs/core/libxcb/xcb_xlib-no-assert-on-lock.patch
@@ -0,0 +1,30 @@
+--- src/xcb_xlib.c.orig 2006-11-25 22:03:30.000000000 +0000
++++ src/xcb_xlib.c 2006-11-25 22:19:28.000000000 +0000
+@@ -38,18 +38,20 @@
+ void xcb_xlib_lock(xcb_connection_t *c)
+ {
+ _xcb_lock_io(c);
+- assert(!c->xlib.lock);
+- c->xlib.lock = 1;
+- c->xlib.thread = pthread_self();
++ if (!c->xlib.lock) {
++ c->xlib.lock = 1;
++ c->xlib.thread = pthread_self();
++ }
+ _xcb_unlock_io(c);
+ }
+
+ void xcb_xlib_unlock(xcb_connection_t *c)
+ {
+ _xcb_lock_io(c);
+- assert(c->xlib.lock);
+- assert(pthread_equal(c->xlib.thread, pthread_self()));
+- c->xlib.lock = 0;
+- pthread_cond_broadcast(&c->xlib.cond);
++ if (c->xlib.lock) {
++ assert(pthread_equal(c->xlib.thread, pthread_self()));
++ c->xlib.lock = 0;
++ pthread_cond_broadcast(&c->xlib.cond);
++ }
+ _xcb_unlock_io(c);
+ }
diff --git a/abs/core/libxcomposite/PKGBUILD b/abs/core/libxcomposite/PKGBUILD
new file mode 100644
index 0000000..abde1d4
--- /dev/null
+++ b/abs/core/libxcomposite/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcomposite
+pkgver=0.4.0
+pkgrel=1
+pkgdesc="X11 Composite extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes' 'libxext' 'compositeproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXcomposite-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXcomposite-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('7e95395dea89be21bae929b9b7f16641')
diff --git a/abs/core/libxcursor/PKGBUILD b/abs/core/libxcursor/PKGBUILD
new file mode 100644
index 0000000..673585e
--- /dev/null
+++ b/abs/core/libxcursor/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxcursor
+pkgver=1.1.9
+pkgrel=1
+pkgdesc="X cursor management library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes' 'libxrender')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXcursor-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXcursor-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('99b7554037a92b260891091e81815a0a')
diff --git a/abs/core/libxdamage/PKGBUILD b/abs/core/libxdamage/PKGBUILD
new file mode 100644
index 0000000..f174581
--- /dev/null
+++ b/abs/core/libxdamage/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxdamage
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X11 damaged region extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfixes>=4.0.3' 'damageproto>=1.1')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXdamage-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXdamage-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ac0ce6b0063a9858c8f24ddb4c60487d')
diff --git a/abs/core/libxdmcp/PKGBUILD b/abs/core/libxdmcp/PKGBUILD
new file mode 100644
index 0000000..bc16a60
--- /dev/null
+++ b/abs/core/libxdmcp/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxdmcp
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Display Manager Control Protocol library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xproto' 'glibc')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXdmcp-${pkgver}.tar.bz2)
+md5sums=('10facf2bc7cbd5e5c1a698b8a210a582')
+
+build() {
+ cd ${startdir}/src/libXdmcp-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libxext/PKGBUILD b/abs/core/libxext/PKGBUILD
new file mode 100644
index 0000000..63bc23d
--- /dev/null
+++ b/abs/core/libxext/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxext
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 miscellaneous extensions library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'xextproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXext-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXext-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('a91f1f722ac80c597cf0b75dcb8b48c0')
diff --git a/abs/core/libxfixes/PKGBUILD b/abs/core/libxfixes/PKGBUILD
new file mode 100644
index 0000000..e088300
--- /dev/null
+++ b/abs/core/libxfixes/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxfixes
+pkgver=4.0.3
+pkgrel=1
+pkgdesc="X11 miscellaneous 'fixes' extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'fixesproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXfixes-${pkgver}.tar.bz2)
+md5sums=('1990d19725a3c7f32290037f02d3737f')
+
+build() {
+ cd ${startdir}/src/libXfixes-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libxfixes/xfixes_coverity576.patch b/abs/core/libxfixes/xfixes_coverity576.patch
new file mode 100644
index 0000000..f759ecc
--- /dev/null
+++ b/abs/core/libxfixes/xfixes_coverity576.patch
@@ -0,0 +1,16 @@
+===================================================================
+RCS file: /srv/anoncvs.freedesktop.org/cvs/xorg/lib/Xfixes/src/Xfixes.c,v
+rcsdiff: /srv/anoncvs.freedesktop.org/cvs/xorg/lib/Xfixes/src/Xfixes.c,v: warning: Unknown phrases like `commitid ...;' are present.
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- src/Xfixes.c 2005/05/17 17:02:24 1.3
++++ src/Xfixes.c 2006/04/03 00:58:13 1.4
+@@ -86,6 +86,7 @@
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
++ Xfree(info);
+ return 0;
+ }
+ info->major_version = rep.majorVersion;
diff --git a/abs/core/libxfont/PKGBUILD b/abs/core/libxfont/PKGBUILD
new file mode 100644
index 0000000..3055554
--- /dev/null
+++ b/abs/core/libxfont/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4410 2008-07-06 20:50:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxfont
+pkgver=1.3.3
+pkgrel=1
+pkgdesc="X11 font rasterisation library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+license=('custom')
+depends=('libfontenc' 'freetype2>=2.3.7' 'fontsproto')
+makedepends=('pkgconfig' 'xtrans' 'fontcacheproto' 'xproto')
+options=('!libtool')
+source=(${url}/archive/individual/lib/libXfont-${pkgver}.tar.bz2)
+md5sums=('4f174b9613f87cf00d731da428a1b194')
+
+build() {
+ cd ${startdir}/src/libXfont-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libxfontcache/PKGBUILD b/abs/core/libxfontcache/PKGBUILD
new file mode 100644
index 0000000..4557c80
--- /dev/null
+++ b/abs/core/libxfontcache/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxfontcache
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 font cache library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'fontcacheproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXfontcache-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXfontcache-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('1adca018aa7bf2d215f20a69c10828ad')
diff --git a/abs/core/libxft/PKGBUILD b/abs/core/libxft/PKGBUILD
new file mode 100644
index 0000000..c4a8b4f
--- /dev/null
+++ b/abs/core/libxft/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4363 2008-07-06 19:22:55Z jgc $
+# Maintainer: Alexander Baldeck<alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxft
+pkgver=2.1.13
+pkgrel=1
+pkgdesc="FreeType-based font drawing library for X"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('fontconfig>=2.6.0' 'libxrender')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXft-${pkgver}.tar.bz2)
+md5sums=('bc8881851f3bd8dcc625fac37350a1c6')
+
+build() {
+ cd ${startdir}/src/libXft-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/libxi/PKGBUILD b/abs/core/libxi/PKGBUILD
new file mode 100644
index 0000000..66414d3
--- /dev/null
+++ b/abs/core/libxi/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxi
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="X11 Input extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org"
+depends=('libxext')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXi-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXi-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('7c510abb0cad8dc20493fb27ff7859d8')
diff --git a/abs/core/libxinerama/PKGBUILD b/abs/core/libxinerama/PKGBUILD
new file mode 100644
index 0000000..f841525
--- /dev/null
+++ b/abs/core/libxinerama/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1902 2008-05-22 18:17:12Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxinerama
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 Xinerama extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xineramaproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXinerama-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXinerama-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('cd9f7c46439ac40e0517a302d2434d2c')
diff --git a/abs/core/libxkbfile/PKGBUILD b/abs/core/libxkbfile/PKGBUILD
new file mode 100644
index 0000000..ee582ce
--- /dev/null
+++ b/abs/core/libxkbfile/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 575 2008-04-21 09:49:55Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxkbfile
+pkgver=1.0.5
+pkgrel=1
+pkgdesc="X11 keyboard file manipulation library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libx11')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('0726a845fe5a56551de2718c9f6b0e35')
diff --git a/abs/core/libxkbui/PKGBUILD b/abs/core/libxkbui/PKGBUILD
new file mode 100644
index 0000000..52c20a0
--- /dev/null
+++ b/abs/core/libxkbui/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxkbui
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 keyboard UI presentation library"
+url="http://xorg.freedesktop.org/"
+depends=(libxt libxkbfile)
+makedepends=(pkgconfig)
+options=(!libtool)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=(1143e456f7429e18e88f2eadb2f2b6b1)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/libxml2/PKGBUILD b/abs/core/libxml2/PKGBUILD
new file mode 100644
index 0000000..be9b8bc
--- /dev/null
+++ b/abs/core/libxml2/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 1153 2008-05-01 14:49:04Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libxml2
+pkgver=2.6.32
+pkgrel=1
+pkgdesc="XML parsing library, version 2"
+arch=(i686 x86_64)
+license=('custom')
+depends=('zlib' 'readline')
+makedepends=('python>=2.5')
+options=('!libtool')
+source=(ftp://ftp.xmlsoft.org/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+url="http://www.xmlsoft.org/"
+md5sums=('2621d322c16f0257e30f0ff2b13384de')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --with-threads --with-history || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libxmu/PKGBUILD b/abs/core/libxmu/PKGBUILD
new file mode 100644
index 0000000..2f01b71
--- /dev/null
+++ b/abs/core/libxmu/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxmu
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 miscellaneous micro-utility library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'libxt')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXmu-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXmu-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('fb372a5f3ab42b5ba16d7af4d833a0cb')
+md5sums=('fb372a5f3ab42b5ba16d7af4d833a0cb')
diff --git a/abs/core/libxp/PKGBUILD b/abs/core/libxp/PKGBUILD
new file mode 100644
index 0000000..1812082
--- /dev/null
+++ b/abs/core/libxp/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4458 2008-07-07 16:34:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxp
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="X11 X Print Library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'printproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXp-${pkgver}.tar.bz2)
+md5sums=('0f4ac39108c1ae8c443cdfac259b58fa')
+
+build() {
+ cd ${srcdir}/libXp-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libxpm/PKGBUILD b/abs/core/libxpm/PKGBUILD
new file mode 100644
index 0000000..7f05283
--- /dev/null
+++ b/abs/core/libxpm/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxpm
+pkgver=3.5.7
+pkgrel=1
+pkgdesc="X11 pixmap library"
+arch=(i686 x86_64)
+license=('custom:BELL')
+url="http://xorg.freedesktop.org/"
+depends=('libxt' 'libxext')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXpm-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXpm-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --host=${CHOST} --build=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXpm-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/license.txt
+}
+md5sums=('cd15ee542d9f515538b4462a6f79d977')
diff --git a/abs/core/libxrandr/PKGBUILD b/abs/core/libxrandr/PKGBUILD
new file mode 100644
index 0000000..2ab366a
--- /dev/null
+++ b/abs/core/libxrandr/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4333 2008-07-06 17:39:17Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxrandr
+pkgver=1.2.3
+pkgrel=1
+pkgdesc="X11 RandR extension library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext>=1.0.4' 'libxrender' 'randrproto>=1.2.2')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXrandr-${pkgver}.tar.bz2)
+md5sums=('5cd67cc02a50c9644ba0a1846ea3b08e')
+
+build() {
+ cd ${startdir}/src/libXrandr-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/libxrender/PKGBUILD b/abs/core/libxrender/PKGBUILD
new file mode 100644
index 0000000..0e9f913
--- /dev/null
+++ b/abs/core/libxrender/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxrender
+pkgver=0.9.4
+pkgrel=1
+pkgdesc="X Rendering Extension client library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'renderproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXrender-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXrender-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('dc266e850c51368f964e0d67bf5fb5e6')
diff --git a/abs/core/libxslt/ChangeLog b/abs/core/libxslt/ChangeLog
new file mode 100644
index 0000000..ccd5848
--- /dev/null
+++ b/abs/core/libxslt/ChangeLog
@@ -0,0 +1,9 @@
+2008-05-31 Eric Belanger <eric@archlinux.org>
+
+ * libxslt 1.1.24-1
+ * Upstream update
+
+2008-05-01 Eric Belanger <eric@archlinux.org>
+
+ * libxslt 1.1.23-1
+ * Upstream update
diff --git a/abs/core/libxslt/PKGBUILD b/abs/core/libxslt/PKGBUILD
new file mode 100644
index 0000000..9a598b0
--- /dev/null
+++ b/abs/core/libxslt/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 2322 2008-05-31 21:12:21Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=libxslt
+pkgver=1.1.24
+pkgrel=1
+pkgdesc="XML stylesheet transformation library"
+arch=('i686' 'x86_64')
+url="http://xmlsoft.org/XSLT/"
+license=('custom')
+depends=('libxml2>=2.6.30' 'libgcrypt')
+makedepends=('python>=2.5')
+options=('!libtool')
+source=(ftp://xmlsoft.org/libxslt/${pkgname}-${pkgver}.tar.gz)
+md5sums=('e83ec5d27fc4c10c6f612879bea9a153')
+sha1sums=('b5402e24abff5545ed76f6a55049cbebc664bd58')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || 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
+}
diff --git a/abs/core/libxss/PKGBUILD b/abs/core/libxss/PKGBUILD
new file mode 100644
index 0000000..2226df7
--- /dev/null
+++ b/abs/core/libxss/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 1905 2008-05-22 18:21:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxss
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="X11 Screen Saver extension library"
+arch=(i686 x86_64)
+license=('custom:XFREE86')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'scrnsaverproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXScrnSaver-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXScrnSaver-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXScrnSaver-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('93f84b6797f2f29cae1ce23b0355d00d')
diff --git a/abs/core/libxt/PKGBUILD b/abs/core/libxt/PKGBUILD
new file mode 100644
index 0000000..1d1ab51
--- /dev/null
+++ b/abs/core/libxt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxt
+pkgver=1.0.5
+pkgrel=1
+pkgdesc="X11 toolkit intrinsics library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libsm' 'libx11')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXt-${pkgver}.tar.bz2)
+md5sums=('f3bdd67785ace8cd0b23249e9d8c9975')
+
+build() {
+ cd ${startdir}/src/libXt-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST} \
+ --disable-install-makestrs
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/libxtrap/PKGBUILD b/abs/core/libxtrap/PKGBUILD
new file mode 100644
index 0000000..27d84ee
--- /dev/null
+++ b/abs/core/libxtrap/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4456 2008-07-07 16:29:51Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxtrap
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="X11 event trapping extension library"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'libxt' 'trapproto')
+makedepends=('pkgconfig')
+options=(!libtool)
+source=(${url}/releases/individual/lib/libXTrap-${pkgver}.tar.bz2)
+md5sums=('1e2d966b5b2b89910e418bb0f78e10de')
+
+build() {
+ cd ${srcdir}/libXTrap-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/libxtst/PKGBUILD b/abs/core/libxtst/PKGBUILD
new file mode 100644
index 0000000..6144308
--- /dev/null
+++ b/abs/core/libxtst/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxtst
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X11 Testing -- Resource extension library"
+arch=(i686 x86_64)
+options=('!libtool')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'recordproto')
+makedepends=('pkgconfig')
+source=(${url}/releases/individual/lib/libXtst-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXtst-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('090c1ad04e34982eada5cf3b1a0792fd')
diff --git a/abs/core/libxv/PKGBUILD b/abs/core/libxv/PKGBUILD
new file mode 100644
index 0000000..fa03f4c
--- /dev/null
+++ b/abs/core/libxv/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 577 2008-04-21 09:50:50Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org.
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxv
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Video extension library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'videoproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXv-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXv-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/libXv-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('723a0275227165383e967a1ca8899b52')
diff --git a/abs/core/libxvmc/PKGBUILD b/abs/core/libxvmc/PKGBUILD
new file mode 100644
index 0000000..49c76b7
--- /dev/null
+++ b/abs/core/libxvmc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxvmc
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 Video Motion Compensation extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxv>=1.0.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXvMC-${pkgver}.tar.bz2)
+md5sums=('b54600573daf9d1a29b952e8d35b389e')
+
+build() {
+ cd ${startdir}/src/libXvMC-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/libxxf86dga/PKGBUILD b/abs/core/libxxf86dga/PKGBUILD
new file mode 100644
index 0000000..5adc89f
--- /dev/null
+++ b/abs/core/libxxf86dga/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=libxxf86dga
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 Direct Graphics Access extension library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xf86dgaproto>=2.0.3')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXxf86dga-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/libXxf86dga-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
+md5sums=('6f5f621804ee652b6cc6f2025c517c78')
diff --git a/abs/core/libxxf86misc/PKGBUILD b/abs/core/libxxf86misc/PKGBUILD
new file mode 100644
index 0000000..6899377
--- /dev/null
+++ b/abs/core/libxxf86misc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxxf86misc
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X11 XFree86 miscellaneous extension library"
+url="http://xorg.freedesktop.org/"
+depends=(libxext xf86miscproto)
+makedepends=(pkgconfig)
+options=(!libtool)
+arch=('i686' 'x86_64')
+source=(${url}/releases/individual/lib/libXxf86misc-${pkgver}.tar.bz2)
+md5sums=(7cee0df63903cef7f7a3fb68cdd99eef)
+
+build() {
+ cd ${startdir}/src/libXxf86misc-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/libxxf86vm/PKGBUILD b/abs/core/libxxf86vm/PKGBUILD
new file mode 100644
index 0000000..58a2803
--- /dev/null
+++ b/abs/core/libxxf86vm/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4409 2008-07-06 20:49:15Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libxxf86vm
+pkgver=1.0.2
+pkgrel=1
+pkgdesc="X11 XFree86 video mode extension library"
+arch=('x86_64' 'i686')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxext' 'xf86vidmodeproto')
+makedepends=('pkgconfig')
+options=('!libtool')
+source=(${url}/releases/individual/lib/libXxf86vm-${pkgver}.tar.bz2)
+md5sums=('304d37bd0a10d9b58aa9b64469ad73e5')
+
+build() {
+ cd ${startdir}/src/libXxf86vm-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/licenses/LICENSE.ralink-firmware.txt b/abs/core/licenses/LICENSE.ralink-firmware.txt
new file mode 100644
index 0000000..39e3c52
--- /dev/null
+++ b/abs/core/licenses/LICENSE.ralink-firmware.txt
@@ -0,0 +1,39 @@
+Copyright (c) 2007, Ralink Technology Corporation
+All rights reserved.
+
+Redistribution. Redistribution and use in binary form, without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions must reproduce the above copyright notice and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+* Neither the name of Ralink Technology Corporation nor the names of its
+ suppliers may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+* No reverse engineering, decompilation, or disassembly of this software
+ is permitted.
+
+Limited patent license. Ralink Technology Corporation grants a world-wide,
+royalty-free, non-exclusive license under patents it now or hereafter
+owns or controls to make, have made, use, import, offer to sell and
+sell ("Utilize") this software, but solely to the extent that any
+such patent is necessary to Utilize the software alone, or in
+combination with an operating system licensed under an approved Open
+Source license as listed by the Open Source Initiative at
+http://opensource.org/licenses. The patent license shall not apply to
+any other combinations which include this software. No hardware per
+se is licensed hereunder.
+
+DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/abs/core/licenses/PKGBUILD b/abs/core/licenses/PKGBUILD
new file mode 100644
index 0000000..bfd74db
--- /dev/null
+++ b/abs/core/licenses/PKGBUILD
@@ -0,0 +1,123 @@
+# $Id: PKGBUILD 1848 2008-05-22 00:45:32Z eric $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=licenses
+pkgver=2.4
+pkgrel=10
+pkgdesc="The standard licenses distribution package"
+arch=('i686' 'x86_64')
+license=('custom:none')
+url="http://archlinux.org"
+groups=('base')
+source=(http://www.apache.org/licenses/LICENSE-2.0.txt
+ cc-by-3.0.txt
+ cc-by-nc-3.0.txt
+ cc-by-nc-nd-3.0.txt
+ cc-by-nc-sa-3.0.txt
+ cc-by-nd-3.0.txt
+ cc-by-sa-3.0.txt
+ cc-readme.txt
+ cddl-1.0.txt
+ eclipse-1.0.txt
+ http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ http://www.gnu.org/licenses/gpl-3.0.txt
+ http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
+ http://www.gnu.org/licenses/lgpl.txt
+ http://www.gnu.org/licenses/fdl.txt
+ http://www.latex-project.org/lppl.txt
+ http://www.mozilla.org/MPL/MPL-1.1.txt
+ perlartistic.txt
+ http://www.php.net/license/3_0.txt
+ http://www.ruby-lang.org/en/LICENSE.txt
+ cpl-1.0.txt
+ python-2.txt
+ LICENSE.ralink-firmware.txt
+ ZopePublicLicense.txt)
+md5sums=('3b83ef96387f14655fc854ddc3c6bd57'
+ 'ffb24d1bbf8b83d373f0b8edc3feb0c6'
+ '682a5e3b03510ba46c4f566478c871bc'
+ '166b65b71e44630b436bfe937c4c0b73'
+ '89bca4a2dde8b7d39c27a1dc24078932'
+ '2502517d13d8136fffaf248489ad0870'
+ '5367190077e12a7f55403d531ef3998e'
+ '019bc72509b18a804f0ea8fd2bab1932'
+ '6cb35f3976cd093011967fa1abbce386'
+ 'f300afd598546add034364cd0a533261'
+ '751419260aa954499f7abaabaa882bbe'
+ 'd32239bcb673463ab874e80d47fae504'
+ 'fbc093901857fcd118f065f900982c24'
+ '6a6a8e020838b23406c81b19c1d46df6'
+ 'ad1419ecc56e060eccf8184a87c4285f'
+ '9f4337828d782bdea41f03dd2ad1b808'
+ 'bfe1f75d606912a4111c90743d6c7325'
+ 'd09c120ca7db95ef2aeecec0cb08293b'
+ 'a45bb1bbeed9e26b26c5763df1d3913d'
+ '68d59ff8306e3a9f5f1c01462c77a317'
+ 'f083e41c43db25e18f36c91e57750b64'
+ '614f4f550910d90428a567cfaafe62a9'
+ '682eac07428a4e8f138bc082f090ecac'
+ 'dc8502850eab9e1ff330a12d7ca18a19')
+
+build() {
+ cd $startdir/pkg
+ mkdir -p usr/share/licenses/common
+ cd usr/share/licenses/common
+
+ mkdir APACHE
+ cp $startdir/src/LICENSE-2.0.txt APACHE/license.txt
+
+ mkdir CCPL
+ cp $startdir/src/cc-by-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-nd-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nc-sa-3.0.txt CCPL/
+ cp $startdir/src/cc-by-nd-3.0.txt CCPL/
+ cp $startdir/src/cc-by-sa-3.0.txt CCPL/
+ cp $startdir/src/cc-readme.txt CCPL/
+
+ mkdir CDDL
+ cp $startdir/src/cddl-1.0.txt CDDL/license.txt
+
+ mkdir CPL
+ cp $startdir/src/cpl-1.0.txt CPL/license.txt
+
+ mkdir EPL
+ cp $startdir/src/eclipse-1.0.txt EPL/license.txt
+
+ mkdir {GPL,GPL3}
+ cp $startdir/src/gpl-2.0.txt GPL/license.txt
+ cp $startdir/src/gpl-3.0.txt GPL3/license.txt
+ ln -s GPL GPL2
+
+ mkdir FDL
+ cp $startdir/src/fdl.txt FDL/license.txt
+
+ mkdir {LGPL,LGPL3}
+ cp $startdir/src/lgpl-2.1.txt LGPL/license.txt
+ cp $startdir/src/lgpl.txt LGPL3/license.txt
+ ln -s LGPL LGPL2
+
+ mkdir LPPL
+ cp $startdir/src/lppl.txt LPPL/license.txt
+
+ mkdir MPL
+ cp $startdir/src/MPL-1.1.txt MPL/license.txt
+
+ mkdir PerlArtistic
+ cp $startdir/src/perlartistic.txt PerlArtistic/license.txt
+
+ mkdir PHP
+ cp $startdir/src/3_0.txt PHP/license.txt
+
+ mkdir PSF
+ cp $startdir/src/python-2.txt PSF/license.txt
+
+ mkdir RALINK
+ cp $startdir/src/LICENSE.ralink-firmware.txt RALINK/license.txt
+
+ mkdir RUBY
+ cp $startdir/src/LICENSE.txt RUBY/license.txt
+
+ mkdir ZPL
+ cp $startdir/src/ZopePublicLicense.txt ZPL/license.txt
+}
diff --git a/abs/core/licenses/ZopePublicLicense.txt b/abs/core/licenses/ZopePublicLicense.txt
new file mode 100644
index 0000000..0f06d96
--- /dev/null
+++ b/abs/core/licenses/ZopePublicLicense.txt
@@ -0,0 +1,54 @@
+Zope Public License (ZPL) Version 2.1
+-------------------------------------
+
+A copyright notice accompanies this license document that
+identifies the copyright holders.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the
+ accompanying copyright notice, this list of conditions,
+ and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+ copyright notice, this list of conditions, and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+3. Names of the copyright holders must not be used to
+ endorse or promote products derived from this software
+ without prior written permission from the copyright
+ holders.
+
+4. The right to distribute this software or to use it for
+ any purpose does not give you the right to use
+ Servicemarks (sm) or Trademarks (tm) of the copyright
+ holders. Use of them is covered by separate agreement
+ with the copyright holders.
+
+5. If any files are modified, you must cause the modified
+ files to carry prominent notices stating that you changed
+ the files and the date of any change.
+
+Disclaimer
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
+ AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
diff --git a/abs/core/licenses/cc-by-3.0.txt b/abs/core/licenses/cc-by-3.0.txt
new file mode 100644
index 0000000..4c79aa8
--- /dev/null
+++ b/abs/core/licenses/cc-by-3.0.txt
@@ -0,0 +1,60 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested.
+ 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-by-nc-3.0.txt b/abs/core/licenses/cc-by-nc-3.0.txt
new file mode 100644
index 0000000..5727b7f
--- /dev/null
+++ b/abs/core/licenses/cc-by-nc-3.0.txt
@@ -0,0 +1,61 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
+ 2. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+ 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
+ 5. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-by-nc-nd-3.0.txt b/abs/core/licenses/cc-by-nc-nd-3.0.txt
new file mode 100644
index 0000000..26ed016
--- /dev/null
+++ b/abs/core/licenses/cc-by-nc-nd-3.0.txt
@@ -0,0 +1,58 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+ 2. to Distribute and Publicly Perform the Work including as incorporated in Collections.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
+ 2. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+ 3. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
+ 5. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 4. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 5. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-by-nc-sa-3.0.txt b/abs/core/licenses/cc-by-nc-sa-3.0.txt
new file mode 100644
index 0000000..7d1af0e
--- /dev/null
+++ b/abs/core/licenses/cc-by-nc-sa-3.0.txt
@@ -0,0 +1,63 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 4. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
+ 5. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 6. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 7. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 8. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 9. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 10. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.
+ 2. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
+ 3. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.
+ 4. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+ 3. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
+ 6. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-by-nd-3.0.txt b/abs/core/licenses/cc-by-nd-3.0.txt
new file mode 100644
index 0000000..118019e
--- /dev/null
+++ b/abs/core/licenses/cc-by-nd-3.0.txt
@@ -0,0 +1,57 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+ 3. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+ 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+ 2. to Distribute and Publicly Perform the Work including as incorporated in Collections.
+ 3.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested.
+ 2. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(b) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 4. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 5. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-by-sa-3.0.txt b/abs/core/licenses/cc-by-sa-3.0.txt
new file mode 100644
index 0000000..7252d9c
--- /dev/null
+++ b/abs/core/licenses/cc-by-sa-3.0.txt
@@ -0,0 +1,63 @@
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+ 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
+ 3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
+ 4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+ 5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
+ 6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+ 7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+ 8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+ 9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+ 10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+ 11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+ 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+ 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+ 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+ 4. to Distribute and Publicly Perform Adaptations.
+ 5.
+
+ For the avoidance of doubt:
+ 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+ 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+ 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+ 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
+ 2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
+ 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+ 4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+ 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+ 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+ 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+ 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+ 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/abs/core/licenses/cc-readme.txt b/abs/core/licenses/cc-readme.txt
new file mode 100644
index 0000000..38ed7c8
--- /dev/null
+++ b/abs/core/licenses/cc-readme.txt
@@ -0,0 +1,12 @@
+There are 6 different Creative Commons Licenses, all of which are included
+in this licenses directory:
+
+cc-by-3.0.txt - Attribution
+cc-by-nc-3.0.txt - Attribution-NonCommercial
+cc-by-nc-nd-3.0.txt - Attribution-NonCommercial-NoDerivs
+cc-by-nc-sa-3.0.txt - Attribution-NonCommercial-ShareAlike
+cc-by-nd-3.0.txt - Attribution-NoDerivs
+cc-by-sa-3.0.txt - Attribution-ShareAlike
+
+If a package uses one of these licenses, it should be referenced as follows:
+license=('CCPL:by-nc-sa')
diff --git a/abs/core/licenses/cddl-1.0.txt b/abs/core/licenses/cddl-1.0.txt
new file mode 100644
index 0000000..d838932
--- /dev/null
+++ b/abs/core/licenses/cddl-1.0.txt
@@ -0,0 +1,377 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0
+
+1. Definitions.
+
+ 1.1. "Contributor" means each individual or entity that creates
+ or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Software, prior Modifications used by a Contributor (if any),
+ and the Modifications made by that particular Contributor.
+
+ 1.3. "Covered Software" means (a) the Original Software, or (b)
+ Modifications, or (c) the combination of files containing
+ Original Software with files containing Modifications, in
+ each case including portions thereof.
+
+ 1.4. "Executable" means the Covered Software in any form other
+ than Source Code.
+
+ 1.5. "Initial Developer" means the individual or entity that first
+ makes Original Software available under this License.
+
+ 1.6. "Larger Work" means a work which combines Covered Software or
+ portions thereof with code not governed by the terms of this
+ License.
+
+ 1.7. "License" means this document.
+
+ 1.8. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed
+ herein.
+
+ 1.9. "Modifications" means the Source Code and Executable form of
+ any of the following:
+
+ A. Any file that results from an addition to, deletion from or
+ modification of the contents of a file containing Original
+ Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original
+ Software or previous Modifications; or
+
+ C. Any new file that is contributed or otherwise made
+ available under the terms of this License.
+
+ 1.10. "Original Software" means the Source Code and Executable
+ form of computer software code that is originally released
+ under this License.
+
+ 1.11. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by
+ grantor.
+
+ 1.12. "Source Code" means (a) the common form of computer software
+ code in which modifications are made and (b) associated
+ documentation included in or with such code.
+
+ 1.13. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms
+ of, this License. For legal entities, "You" includes any
+ entity which controls, is controlled by, or is under common
+ control with You. For purposes of this definition,
+ "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty
+ percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants.
+
+ 2.1. The Initial Developer Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, the Initial
+ Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer, to use,
+ reproduce, modify, display, perform, sublicense and
+ distribute the Original Software (or portions thereof),
+ with or without Modifications, and/or as part of a Larger
+ Work; and
+
+ (b) under Patent Claims infringed by the making, using or
+ selling of Original Software, to make, have made, use,
+ practice, sell, and offer for sale, and/or otherwise
+ dispose of the Original Software (or portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ or otherwise makes the Original Software available to a
+ third party under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: (1) for code that You delete from the Original
+ Software, or (2) for infringements caused by: (i) the
+ modification of the Original Software, or (ii) the
+ combination of the Original Software with other software
+ or devices.
+
+ 2.2. Contributor Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, each
+ Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor to use, reproduce,
+ modify, display, perform, sublicense and distribute the
+ Modifications created by such Contributor (or portions
+ thereof), either on an unmodified basis, with other
+ Modifications, as Covered Software and/or as part of a
+ Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either
+ alone and/or in combination with its Contributor Version
+ (or portions of such combination), to make, use, sell,
+ offer for sale, have made, and/or otherwise dispose of:
+ (1) Modifications made by that Contributor (or portions
+ thereof); and (2) the combination of Modifications made by
+ that Contributor with its Contributor Version (or portions
+ of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first distributes or
+ otherwise makes the Modifications available to a third
+ party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: (1) for any code that Contributor has deleted
+ from the Contributor Version; (2) for infringements caused
+ by: (i) third party modifications of Contributor Version,
+ or (ii) the combination of Modifications made by that
+ Contributor with other software (except as part of the
+ Contributor Version) or other devices; or (3) under Patent
+ Claims infringed by Covered Software in the absence of
+ Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Availability of Source Code.
+
+ Any Covered Software that You distribute or otherwise make
+ available in Executable form must also be made available in Source
+ Code form and that Source Code form must be distributed only under
+ the terms of this License. You must include a copy of this
+ License with every copy of the Source Code form of the Covered
+ Software You distribute or otherwise make available. You must
+ inform recipients of any such Covered Software in Executable form
+ as to how they can obtain such Covered Software in Source Code
+ form in a reasonable manner on or through a medium customarily
+ used for software exchange.
+
+ 3.2. Modifications.
+
+ The Modifications that You create or to which You contribute are
+ governed by the terms of this License. You represent that You
+ believe Your Modifications are Your original creation(s) and/or
+ You have sufficient rights to grant the rights conveyed by this
+ License.
+
+ 3.3. Required Notices.
+
+ You must include a notice in each of Your Modifications that
+ identifies You as the Contributor of the Modification. You may
+ not remove or alter any copyright, patent or trademark notices
+ contained within the Covered Software, or any notices of licensing
+ or any descriptive text giving attribution to any Contributor or
+ the Initial Developer.
+
+ 3.4. Application of Additional Terms.
+
+ You may not offer or impose any terms on any Covered Software in
+ Source Code form that alters or restricts the applicable version
+ of this License or the recipients' rights hereunder. You may
+ choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of
+ Covered Software. However, you may do so only on Your own behalf,
+ and not on behalf of the Initial Developer or any Contributor.
+ You must make it absolutely clear that any such warranty, support,
+ indemnity or liability obligation is offered by You alone, and You
+ hereby agree to indemnify the Initial Developer and every
+ Contributor for any liability incurred by the Initial Developer or
+ such Contributor as a result of warranty, support, indemnity or
+ liability terms You offer.
+
+ 3.5. Distribution of Executable Versions.
+
+ You may distribute the Executable form of the Covered Software
+ under the terms of this License or under the terms of a license of
+ Your choice, which may contain terms different from this License,
+ provided that You are in compliance with the terms of this License
+ and that the license for the Executable form does not attempt to
+ limit or alter the recipient's rights in the Source Code form from
+ the rights set forth in this License. If You distribute the
+ Covered Software in Executable form under a different license, You
+ must make it absolutely clear that any terms which differ from
+ this License are offered by You alone, not by the Initial
+ Developer or Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred
+ by the Initial Developer or such Contributor as a result of any
+ such terms You offer.
+
+ 3.6. Larger Works.
+
+ You may create a Larger Work by combining Covered Software with
+ other code not governed by the terms of this License and
+ distribute the Larger Work as a single product. In such a case,
+ You must make sure the requirements of this License are fulfilled
+ for the Covered Software.
+
+4. Versions of the License.
+
+ 4.1. New Versions.
+
+ Sun Microsystems, Inc. is the initial license steward and may
+ publish revised and/or new versions of this License from time to
+ time. Each version will be given a distinguishing version number.
+ Except as provided in Section 4.3, no one other than the license
+ steward has the right to modify this License.
+
+ 4.2. Effect of New Versions.
+
+ You may always continue to use, distribute or otherwise make the
+ Covered Software available under the terms of the version of the
+ License under which You originally received the Covered Software.
+ If the Initial Developer includes a notice in the Original
+ Software prohibiting it from being distributed or otherwise made
+ available under any subsequent version of the License, You must
+ distribute and make the Covered Software available under the terms
+ of the version of the License under which You originally received
+ the Covered Software. Otherwise, You may also choose to use,
+ distribute or otherwise make the Covered Software available under
+ the terms of any subsequent version of the License published by
+ the license steward.
+
+ 4.3. Modified Versions.
+
+ When You are an Initial Developer and You want to create a new
+ license for Your Original Software, You may create and use a
+ modified version of this License if You: (a) rename the license
+ and remove any references to the name of the license steward
+ (except to note that the license differs from this License); and
+ (b) otherwise make it clear that the license contains terms which
+ differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
+ BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
+ SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+ PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
+ COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+ INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
+ NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
+ WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.
+
+6. TERMINATION.
+
+ 6.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to
+ cure such breach within 30 days of becoming aware of the breach.
+ Provisions which, by their nature, must remain in effect beyond
+ the termination of this License shall survive.
+
+ 6.2. If You assert a patent infringement claim (excluding
+ declaratory judgment actions) against Initial Developer or a
+ Contributor (the Initial Developer or Contributor against whom You
+ assert such claim is referred to as "Participant") alleging that
+ the Participant Software (meaning the Contributor Version where
+ the Participant is a Contributor or the Original Software where
+ the Participant is the Initial Developer) directly or indirectly
+ infringes any patent, then any and all rights granted directly or
+ indirectly to You by such Participant, the Initial Developer (if
+ the Initial Developer is not the Participant) and all Contributors
+ under Sections 2.1 and/or 2.2 of this License shall, upon 60 days
+ notice from Participant terminate prospectively and automatically
+ at the expiration of such 60 day notice period, unless if within
+ such 60 day period You withdraw Your claim with respect to the
+ Participant Software against such Participant either unilaterally
+ or pursuant to a written agreement with Participant.
+
+ 6.3. In the event of termination under Sections 6.1 or 6.2 above,
+ all end user licenses that have been validly granted by You or any
+ distributor hereunder prior to termination (excluding licenses
+ granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+ INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+ COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
+ LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+ LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
+ STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
+ INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+ APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+ NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
+ APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+ The Covered Software is a "commercial item," as that term is
+ defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
+ computer software" (as that term is defined at 48
+ C.F.R. 252.227-7014(a)(1)) and "commercial computer software
+ documentation" as such terms are used in 48 C.F.R. 12.212
+ (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48
+ C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
+ U.S. Government End Users acquire Covered Software with only those
+ rights set forth herein. This U.S. Government Rights clause is in
+ lieu of, and supersedes, any other FAR, DFAR, or other clause or
+ provision that addresses Government rights in computer software
+ under this License.
+
+9. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed
+ by the law of the jurisdiction specified in a notice contained
+ within the Original Software (except to the extent applicable law,
+ if any, provides otherwise), excluding such jurisdiction's
+ conflict-of-law provisions. Any litigation relating to this
+ License shall be subject to the jurisdiction of the courts located
+ in the jurisdiction and venue specified in a notice contained
+ within the Original Software, with the losing party responsible
+ for costs, including, without limitation, court costs and
+ reasonable attorneys' fees and expenses. The application of the
+ United Nations Convention on Contracts for the International Sale
+ of Goods is expressly excluded. Any law or regulation which
+ provides that the language of a contract shall be construed
+ against the drafter shall not apply to this License. You agree
+ that You alone are responsible for compliance with the United
+ States export administration regulations (and the export control
+ laws and regulation of any other countries) when You use,
+ distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or
+ indirectly, out of its utilization of rights under this License
+ and You agree to work with Initial Developer and Contributors to
+ distribute such responsibility on an equitable basis. Nothing
+ herein is intended or shall be deemed to constitute any admission
+ of liability.
+
+--------------------------------------------------------------------
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND
+DISTRIBUTION LICENSE (CDDL)
+
+For Covered Software in this distribution, this License shall
+be governed by the laws of the State of California (excluding
+conflict-of-law provisions).
+
+Any litigation relating to this License shall be subject to the
+jurisdiction of the Federal Courts of the Northern District of
+California and the state courts of the State of California, with
+venue lying in Santa Clara County, California.
diff --git a/abs/core/licenses/cpl-1.0.txt b/abs/core/licenses/cpl-1.0.txt
new file mode 100644
index 0000000..c48081b
--- /dev/null
+++ b/abs/core/licenses/cpl-1.0.txt
@@ -0,0 +1,217 @@
+Common Public License Version 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from a
+ Contributor if it was added to the Program by such Contributor itself or anyone
+ acting on such Contributor's behalf. Contributions do not include additions to
+ the Program which: (i) are separate modules of software distributed in
+ conjunction with the Program under their own license agreement, and (ii) are
+ not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly perform,
+ distribute and sublicense the Contribution of such Contributor, if any, and
+ such derivative works, in source code and object code form.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code and
+ object code form. This patent license shall apply to the combination of the
+ Contribution and the Program if, at the time the Contribution is added by the
+ Contributor, such addition of the Contribution causes such combination to be
+ covered by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other intellectual
+ property rights of any other entity. Each Contributor disclaims any liability
+ to Recipient for claims brought by any other entity based on infringement of
+ intellectual property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed, if any.
+ For example, if a third party patent license is required to allow Recipient to
+ distribute the Program, it is Recipient's responsibility to acquire that
+ license before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright license
+ set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+
+ b) its license agreement:
+
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of title
+ and non-infringement, and implied warranties or conditions of merchantability
+ and fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and consequential
+ damages, such as lost profits;
+
+ iii) states that any provisions which differ from this Agreement are offered
+ by that Contributor alone and not by any other party; and
+
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable manner on
+ or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+
+ b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its exercise
+of rights under this Agreement, including but not limited to the risks and
+costs of program errors, compliance with applicable laws, damage to or loss of
+data, programs or equipment, and unavailability or interruption of operations.
+
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect
+to a patent applicable to software (including a cross-claim or counterclaim in
+a lawsuit), then any patent licenses granted by that Contributor to such
+Recipient under this Agreement shall terminate as of the date such litigation
+is filed. In addition, if Recipient institutes patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software or
+hardware) infringes such Recipient's patent(s), then such Recipient's rights
+granted under Section 2(b) shall terminate as of the date such litigation is
+filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+IBM is the initial Agreement Steward. IBM may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial
+in any resulting litigation.
diff --git a/abs/core/licenses/eclipse-1.0.txt b/abs/core/licenses/eclipse-1.0.txt
new file mode 100644
index 0000000..f61d34d
--- /dev/null
+++ b/abs/core/licenses/eclipse-1.0.txt
@@ -0,0 +1,88 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
+
diff --git a/abs/core/licenses/perlartistic.txt b/abs/core/licenses/perlartistic.txt
new file mode 100644
index 0000000..aaf7c88
--- /dev/null
+++ b/abs/core/licenses/perlartistic.txt
@@ -0,0 +1,151 @@
+NAME
+ perlartistic - the Perl Artistic License
+
+SYNOPSIS
+ You can refer to this document in Pod via "L<perlartistic>"
+ Or you can see this document by entering "perldoc perlartistic"
+
+DESCRIPTION
+ This is "The Artistic License". It's here so that modules, programs,
+ etc., that want to declare this as their distribution license, can link
+ to it.
+
+ It is also one of the two licenses Perl allows itself to be
+ redistributed and/or modified; for the other one, the GNU General Public
+ License, see the perlgpl.
+
+The "Artistic License"
+ Preamble
+ The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package, while
+ giving the users of the package the right to use and distribute the
+ Package in a more-or-less customary fashion, plus the right to make
+ reasonable modifications.
+
+ Definitions
+ "Package"
+ refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+
+ "Standard Version"
+ refers to such a Package if it has not been modified, or has been
+ modified in accordance with the wishes of the Copyright Holder as
+ specified below.
+
+ "Copyright Holder"
+ is whoever is named in the copyright or copyrights for the package.
+
+ "You"
+ is you, if you're thinking about copying or distributing this
+ Package.
+
+ "Reasonable copying fee"
+ is whatever you can justify on the basis of media cost, duplication
+ charges, time of people involved, and so on. (You will not be
+ required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+
+ "Freely Available"
+ means that no fee is charged for the item itself, though there may
+ be fees involved in handling the item. It also means that recipients
+ of the item may redistribute it under the same conditions they
+ received it.
+
+ Conditions
+ 1. You may make and give away verbatim copies of the source form of the
+ Standard Version of this Package without restriction, provided that
+ you duplicate all of the original copyright notices and associated
+ disclaimers.
+
+ 2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+
+ 3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you do
+ at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on
+ a major archive site such as uunet.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+
+ b) use the modified Package only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and
+ provide a separate manual page for each non-standard executable
+ that clearly documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+ 4. You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent),
+ together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+ 5. You may charge a reasonable copying fee for any distribution of this
+ Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this
+ Package as a product of your own. You may embed this Package's
+ interpreter within an executable of yours (by linking); this shall
+ be construed as a mere form of aggregation, provided that the
+ complete Standard Version of the interpreter is so embedded.
+
+ 6. The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whoever generated
+ them, and may be sold commercially, and may be aggregated with this
+ Package. If such scripts or library files are aggregated with this
+ Package via the so-called "undump" or "unexec" methods of producing
+ a binary executable image, then distribution of such an image shall
+ neither be construed as a distribution of this Package nor shall it
+ fall under the restrictions of Paragraphs 3 and 4, provided that you
+ do not represent such an executable image as a Standard Version of
+ this Package.
+
+ 7. C subroutines (or comparably compiled subroutines in other
+ languages) supplied by you and linked into this Package in order to
+ emulate subroutines and variables of the language defined by this
+ Package shall not be considered part of this Package, but are the
+ equivalent of input as in Paragraph 6, provided these subroutines do
+ not change the language in any way that would cause it to fail the
+ regression tests for the language.
+
+ 8. Aggregation of this Package with a commercial distribution is always
+ permitted provided that the use of this Package is embedded; that
+ is, when no overt attempt is made to make this Package's interfaces
+ visible to the end user of the commercial distribution. Such use
+ shall not be construed as a distribution of this Package.
+
+ 9. The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+ 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
+
diff --git a/abs/core/licenses/python-2.txt b/abs/core/licenses/python-2.txt
new file mode 100644
index 0000000..d8e1f80
--- /dev/null
+++ b/abs/core/licenses/python-2.txt
@@ -0,0 +1,270 @@
+A. HISTORY OF THE SOFTWARE
+==========================
+
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC. Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team. In October of the same
+year, the PythonLabs team moved to Digital Creations (now Zope
+Corporation, see http://www.zope.com). In 2001, the Python Software
+Foundation (PSF, see http://www.python.org/psf/) was formed, a
+non-profit organization created specifically to own Python-related
+Intellectual Property. Zope Corporation is a sponsoring member of
+the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition). Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+ Release Derived Year Owner GPL-
+ from compatible? (1)
+
+ 0.9.0 thru 1.2 1991-1995 CWI yes
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
+ 1.6 1.5.2 2000 CNRI no
+ 2.0 1.6 2000 BeOpen.com no
+ 1.6.1 1.6 2001 CNRI yes (2)
+ 2.1 2.0+1.6.1 2001 PSF no
+ 2.0.1 2.0+1.6.1 2001 PSF yes
+ 2.1.1 2.1+2.0.1 2001 PSF yes
+ 2.2 2.1.1 2001 PSF yes
+ 2.1.2 2.1.1 2002 PSF yes
+ 2.1.3 2.1.2 2002 PSF yes
+ 2.2.1 2.2 2002 PSF yes
+ 2.2.2 2.2.1 2002 PSF yes
+ 2.2.3 2.2.2 2003 PSF yes
+ 2.3 2.2.2 2002-2003 PSF yes
+ 2.3.1 2.3 2002-2003 PSF yes
+ 2.3.2 2.3.1 2002-2003 PSF yes
+ 2.3.3 2.3.2 2002-2003 PSF yes
+ 2.3.4 2.3.3 2004 PSF yes
+ 2.3.5 2.3.4 2005 PSF yes
+ 2.4 2.3 2004 PSF yes
+ 2.4.1 2.4 2005 PSF yes
+ 2.4.2 2.4.1 2005 PSF yes
+ 2.4.3 2.4.2 2006 PSF yes
+ 2.5 2.4 2006 PSF yes
+ 2.5.1 2.5 2007 PSF yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+ the GPL. All Python licenses, unlike the GPL, let you distribute
+ a modified version without making your changes open source. The
+ GPL-compatible licenses make it possible to combine Python with
+ other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+ because its license has a choice of law clause. According to
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+ is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python
+alone or in any derivative version, provided, however, that PSF's
+License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
+2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
+All Rights Reserved" are retained in Python alone or in any derivative
+version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee. This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions. Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee. This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party. As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee. Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement. This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013. This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee. This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+ ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands. All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/abs/core/linhes-live/PKGBUILD b/abs/core/linhes-live/PKGBUILD
new file mode 100644
index 0000000..d497fcf
--- /dev/null
+++ b/abs/core/linhes-live/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: R. Dale Thomas <rdt[at]KnoppMyth[dot]net>
+# 2008.09.25
+pkgname=linhes-live
+pkgver=5.3.3
+pkgrel=4
+
+pkgdesc="LinHes compulsory components for the Live System."
+url="http://KnoppMyth.net"
+depends=()
+arch=( i586 i686 x86_64 )
+license=('GPL')
+
+build() {
+ # setup the local environment:
+ local rDir=bin eDir=etc lDir=lib sDir=session-save oDir=opt/$pkgname
+ local srcDir=${startdir}/src pkgDir=${startdir}/pkg
+ local insDir=${pkgDir}/$oDir proDir=${pkgDir}/${eDir}/profile.d
+
+ mkdir -p $pkgDir $insDir $proDir
+ cp -dr ${startdir}/$eDir $pkgDir
+ local pthDir=
+ echo 'export PATH=${PATH}:'"/$oDir/$rDir" > ${proDir}/${pkgname}.sh
+ cp -dr ${startdir}/$lDir $pkgDir
+ cp -dr ${startdir}/$rDir $insDir
+ [ -d ${startdir}/$sDir ] && cp -dr ${startdir}/$sDir $insDir
+ chown -R root.root $pkgDir
+ return 0
+}
+
+# End
diff --git a/abs/core/linhes-live/bin/gen_fstab b/abs/core/linhes-live/bin/gen_fstab
new file mode 100755
index 0000000..db36546
--- /dev/null
+++ b/abs/core/linhes-live/bin/gen_fstab
@@ -0,0 +1,122 @@
+#! /bin/sh
+#
+# gen_fstab - make new fstab for larch live system based on detected devices
+#
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2007.12.17
+
+# Note that the results are, by default, not copied into place
+# They end up here:
+DEST="/tmp/fstab"
+MNT="/tmp/mnt"
+
+# However, passing '-l' as command-line option will install them.
+# The old fstab will then be backed up to fstab~.
+LOAD=""
+if [ "$1" = "-l" ]; then LOAD="-l"; fi
+
+if [ -n "$( df | grep " ${MNT}" )" ]; then
+ echo "ERROR: Mounted filesystem at/within ${MNT}"
+ exit 1
+fi
+mkdir -p ${MNT}
+rm -rf ${MNT}/*
+
+tmpfile="/tmp/fstab2"
+: >${tmpfile}
+
+echo "# fstab generated by gen_fstab" >${DEST}
+echo "#<file system> <dir> <type> <options> <dump> <pass>" >>${DEST}
+echo >>${DEST}
+
+echo "none /dev/pts devpts defaults 0 0" >>${DEST}
+echo "none /dev/shm tmpfs defaults 0 0" >>${DEST}
+echo >>${DEST}
+
+# Get all other partitions
+sfdisk -d | grep "^/dev/" | sed "s|\(.*\):.*Id=\(..\).*|\1 \2|" | \
+ while read dev id; do
+ # Ignore if id is "Extended" or "LVM", these are not usable partitions
+ if [ "${id}" = "5" -o "${id}" = "8e" ]; then continue; fi
+ # See if swap
+ if [ "${id}" = "82" ]; then
+ printf "%-12s %-12s %-8s defaults,noatime 0 0\n" \
+ ${dev} swap swap >>${DEST}
+ continue
+ fi
+ removable=""
+ part=$( basename ${dev} )
+ if [ $( cat /sys/block/${part:0:3}/removable 2>/dev/null ) -ne 0 ]; then
+ removable="_rmv"
+ fi
+ mountdir=${part}${removable}
+ printf "%-12s %-12s %-8s user,noauto,noatime 0 0\n" \
+ ${dev} /mnt/${mountdir} auto >>${tmpfile}
+ mkdir -p ${MNT}/${mountdir}
+ done
+
+# LVM
+for lvmd in $( ls /dev/mapper 2>/dev/null | grep -v control ); do
+ printf "%-30s %-22s %-8s user,noauto,noatime 0 0\n" \
+ /dev/mapper/${lvmd} /mnt/${lvmd} auto >>${tmpfile}
+ mkdir -p ${MNT}/${lvmd}
+done
+
+echo >>${DEST}
+cat ${tmpfile} >>${DEST}
+rm ${tmpfile}
+echo >>${DEST}
+
+# CD devices
+for dev in $( cat /proc/sys/dev/cdrom/info 2>/dev/null | head -n 3 | \
+ tail -n 1 | cut -d ":" -f 2 ); do
+ mountdir="${dev}_cd"
+ mkdir ${MNT}/${mountdir}
+ printf "%-12s %-12s %-8s user,noauto,exec,unhide 0 0\n" \
+ /dev/${dev} /mnt/${mountdir} auto >>${DEST}
+done
+
+echo >>${DEST}
+echo "# This would do for a floppy" >>${DEST}
+echo "#/dev/fd0 /mnt/floppy vfat,ext2 rw,user,noauto 0 0" >>${DEST}
+echo "# + mkdir /mnt/floppy" >>${DEST}
+echo >>${DEST}
+echo "# E.g. for USB storage:" >>${DEST}
+echo "#/dev/sdb1 /mnt/usb auto rw,user,noauto 0 0" >>${DEST}
+echo "# + mkdir /mnt/usb" >>${DEST}
+
+if [ -n "${LOAD}" ]; then
+ # test if the script is started by root user. If not, exit
+ if [ $UID -ne 0 ]; then
+ echo "Only root can run ${APP}"; exit 1
+ fi
+
+ cp -b ${DEST} /etc/fstab
+ # Delete removeable mount points which are not currently mounted
+ for m in $( ls /mnt | grep ^[hs]d ); do
+ if [ -z "$( df | grep " /mnt/${m}$" )" ]; then
+ rmdir /mnt/${m}
+ fi
+ done
+ for m in $( ls ${MNT} ); do
+ mkdir -p /mnt/${m}
+ done
+fi
diff --git a/abs/core/linhes-live/bin/km b/abs/core/linhes-live/bin/km
new file mode 100755
index 0000000..386d966
--- /dev/null
+++ b/abs/core/linhes-live/bin/km
@@ -0,0 +1,76 @@
+#!/bin/sh
+# $Id: km,v 1.2 2005/12/13 04:14:53 judd Exp $
+# Modified by gradgrind to deal only with i386 keymaps
+# and BASEDIR changed
+# - also saves results to /etc/rc.conf
+
+# test if the script is started by root user. If not, exit
+if [ $UID -ne 0 ]; then
+ echo "This should be run as root"; exit 1
+fi
+
+ANSWER="/tmp/.km"
+BASEDIR="/usr/share/kbd"
+
+domenu()
+{
+ menutype=$1 ; shift
+ text=$1 ; shift
+ height=$1 ; shift
+ width=$1 ; shift
+ mheight=$1 ; shift
+
+ dialog --cancel-label "Skip" --$menutype "$text" $height $width $mheight $*
+}
+
+if [ ! -d $BASEDIR/keymaps ]; then
+ echo "Cannot load keymaps, as none were found in $BASEDIR/keymaps" >&2
+ exit 1
+else
+ echo "Scanning for keymaps..."
+ KEYMAPS=
+ for t in qwerty qwertz azerty dvorak; do
+ for i in `find $BASEDIR/keymaps/i386/$t -follow -name "*.gz"`; do
+ fn=`echo $i | sed "s|$BASEDIR/keymaps/i386/||"`
+ KEYMAPS="$KEYMAPS $fn -"
+ done
+ done
+ domenu menu "Select A Keymap" 22 60 16 $KEYMAPS 2>$ANSWER
+ keymap=`cat $ANSWER`
+fi
+
+if [ ! -d $BASEDIR/consolefonts ]; then
+ echo "Cannot load consolefonts, as none were found in $BASEDIR/consolefonts" >&2
+else
+ echo "Scanning for fonts..."
+ FONTS=
+ for i in `find $BASEDIR/consolefonts -follow -name "*.gz"`; do
+ fn=`echo $i | sed "s|$BASEDIR/consolefonts/||"`
+ FONTS="$FONTS $fn -"
+ done
+ domenu menu "Select A Console Font" 22 60 16 $FONTS 2>$ANSWER
+ font=`cat $ANSWER`
+fi
+
+if [ "$keymap" ]; then
+ echo "Loading keymap: $keymap"
+ loadkeys -q $BASEDIR/keymaps/i386/$keymap
+ sed -i "s|^KEYMAP=.*|KEYMAP=\"$( echo $keymap | \
+ cut -d'.' -f1 )\"|" /etc/rc.conf
+fi
+
+if [ "$font" ]; then
+ echo "Loading font: $font"
+ for i in `seq 1 4`; do
+ if [ -d /dev/vc ]; then
+ setfont $BASEDIR/consolefonts/$font -C /dev/vc/${i}
+ else
+ setfont $BASEDIR/consolefonts/$font -C /dev/tty${i}
+ fi
+ done
+ sed -i "s|^CONSOLEFONT=.*|CONSOLEFONT=\"$( echo $font | \
+ cut -d'.' -f1 )\"|" /etc/rc.conf
+fi
+
+exit 0
+
diff --git a/abs/core/linhes-live/etc/live-shutdown b/abs/core/linhes-live/etc/live-shutdown
new file mode 100644
index 0000000..807ec47
--- /dev/null
+++ b/abs/core/linhes-live/etc/live-shutdown
@@ -0,0 +1,50 @@
+# Functions used by rc.shutdown
+# Modified versions for linhes live systems
+
+f_saveclock ()
+{
+ :
+}
+
+f_swapoff ()
+{
+ ############################# Include session saving functions
+ . /opt/linhes-live/session-save/shutdown2
+ if [ -f /tmp/checkse ]; then
+ . /tmp/checkse
+ else
+ checkse
+ fi
+
+ if [ -n "${saving}" ] && ! session_save; then
+ echo
+ echo "If you know what you are doing, you may be able to recover"
+ echo "something from this unpleasant situation."
+ echo
+ echo "You may use the command line to investigate further ..."
+ echo
+ echo "When finished please enter 'exit', the shutdown process will"
+ echo "then continue."
+ sh -i
+ fi
+
+ #############################
+
+ stat_busy "Deactivating Swap"
+ /sbin/swapoff -a
+ stat_done
+}
+
+f_remountro ()
+{
+ if [ -n "${ejectdev}" ]; then
+ echo "Ejecting live CD"
+ eject ${ejectdev}
+ echo "========================================"
+ echo "It's safe to switch the computer off now"
+ echo -ne "Press Enter to continue"
+ read junk
+ fi
+}
+
+# End
diff --git a/abs/core/linhes-live/etc/live-sysinit b/abs/core/linhes-live/etc/live-sysinit
new file mode 100644
index 0000000..abab4a8
--- /dev/null
+++ b/abs/core/linhes-live/etc/live-sysinit
@@ -0,0 +1,54 @@
+# Functions used by rc.sysinit
+# Modified versions for linhes live systems
+
+f_header ()
+{
+ cR='\e[31m' cY='\e[1;33m' cN='\e[0m' cW='\e[1;37m'
+ echo " "
+ printsep
+ printf " ${cR}LinHes ${cY}Installation${cN}/${cY}Live${cW} CDROM${cN}. "
+ printsep
+ echo " "
+}
+
+f_fscheck ()
+{
+ stat_busy "Initializing /etc/mtab"
+ #/bin/mount -n -o remount,rw /
+
+ /bin/rm -f /etc/mtab*
+
+ # Make entries for aufs/unionfs, tmpfs and live medium in /etc/mtab
+ grep "^aufs */ " /proc/mounts >>/etc/mtab
+ grep "^unionfs */ " /proc/mounts >>/etc/mtab
+ grep "^tmpfs */.livesys " /proc/mounts >>/etc/mtab
+ if [ -d /.livesys/medium/live ]; then
+ grep " /.livesys/medium " /proc/mounts >>/etc/mtab
+ fi
+
+ f_mountlocal
+ stat_done
+
+ if [ -z "$( cat /etc/fstab | grep "^#KEEP" )" ]; then
+ stat_busy "Generating fresh /etc/fstab"
+ /opt/linhes-live/bin/gen_fstab -l
+ stat_done
+ fi
+
+ # now mount all the local filesystems
+ stat_busy "Mounting Local Filesystems"
+ /bin/mount -a -t $NETFS
+ stat_done
+}
+
+f_swapon ()
+{
+ #+*** Copy session-save flag-file (if it exists)
+ [ -f /live/nosave ] && cp /live/nosave /.livesys
+ #-***
+
+ #*** Conditional swap activation
+ if [ -e /.livesys/swapon ]; then
+ status "Activating Swap" /sbin/swapon -a
+ fi
+}
diff --git a/abs/core/linhes-live/etc/loginroot b/abs/core/linhes-live/etc/loginroot
new file mode 100755
index 0000000..e3153c6
--- /dev/null
+++ b/abs/core/linhes-live/etc/loginroot
@@ -0,0 +1,3 @@
+#! /bin/sh
+login -f root
+# End
diff --git a/abs/core/linhes-live/etc/rc.shutdown-live b/abs/core/linhes-live/etc/rc.shutdown-live
new file mode 100755
index 0000000..7fa97e6
--- /dev/null
+++ b/abs/core/linhes-live/etc/rc.shutdown-live
@@ -0,0 +1,167 @@
+#!/bin/bash
+#
+# /etc/rc.shutdown
+#
+
+###
+# Based on initscripts 2008.05-1
+###
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+###############################################################
+### These functions have been separated out, so that they can be
+### replaced in linhes live systems.
+
+f_saveclock ()
+{
+ stat_busy "Saving System Clock"
+ if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
+ /bin/rm -f /etc/localtime
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+ fi
+
+ HWCLOCK_PARAMS="--systohc"
+ if [ "$HARDWARECLOCK" = "UTC" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
+ else
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
+ fi
+ if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa"
+ fi
+ /sbin/hwclock $HWCLOCK_PARAMS
+ stat_done
+}
+
+f_swapoff ()
+{
+ stat_busy "Deactivating Swap"
+ /sbin/swapoff -a
+ stat_done
+}
+
+f_remountro ()
+{
+ stat_busy "Remounting Root Filesystem Read-only"
+ /bin/mount -n -o remount,ro /
+ stat_done
+}
+
+###############################################################
+
+### Override above functions if running linhes live system
+[ -f /etc/live-shutdown ] && . /etc/live-shutdown
+
+# avoid staircase effect
+/bin/stty onlcr
+
+echo " "
+printhl "Initiating Shutdown..."
+echo " "
+
+# avoid NIS hanging syslog-ng on shutdown by unsetting the domainname
+if [ -x /bin/domainname ]; then
+ /bin/domainname ""
+fi
+
+if [ -x /etc/rc.local.shutdown ]; then
+ /etc/rc.local.shutdown
+fi
+
+if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then
+ # Shutdown daemons
+ let i=${#DAEMONS[@]}
+ while [ $i -ge 0 ]; do
+ if [ "${DAEMONS[$i]:0:1}" != '!' ]; then
+ ck_daemon ${DAEMONS[$i]#@} || /etc/rc.d/${DAEMONS[$i]#@} stop
+ fi
+ let i=i-1
+ done
+ # find any leftover daemons and shut them down in reverse order
+ if [ -d /var/run/daemons ]; then
+ for daemon in $(/bin/ls -1t /var/run/daemons); do
+ /etc/rc.d/$daemon stop
+ done
+ fi
+fi
+
+# Terminate all processes
+stat_busy "Sending SIGTERM To Processes"
+/sbin/killall5 -15 &> /dev/null
+/bin/sleep 5
+stat_done
+
+stat_busy "Sending SIGKILL To Processes"
+/sbin/killall5 -9 &> /dev/null
+/bin/sleep 1
+stat_done
+
+stat_busy "Saving Random Seed"
+/bin/dd if=/dev/urandom of=/var/run/random-seed count=1 bs=512 2> /dev/null
+stat_done
+
+#F Save system time
+f_saveclock
+
+# removing psmouse module to fix some reboot issues on newer laptops
+/sbin/modprobe -r psmouse >/dev/null 2>&1
+
+# Write to wtmp file before unmounting
+/sbin/halt -w
+
+#F Deactivate swaps
+f_swapoff
+
+stat_busy "Unmounting Filesystems"
+/bin/umount -a -t noramfs,notmpfs,nosysfs,noproc
+stat_done
+
+# Kill non-root encrypted partition mappings
+if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then
+ stat_busy "Deactivating encrypted volumes:"
+ CS=/sbin/cryptsetup.static
+ do_uncrypt() {
+ if [ $# -ge 3 ]; then
+ stat_append "${1}.."
+ $CS remove $1 >/dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ stat_append "failed "
+ else
+ stat_append "ok "
+ fi
+ fi
+ }
+ while read line; do
+ eval do_uncrypt "$line"
+ done </etc/crypttab
+ stat_done
+fi
+
+if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ stat_busy "Deactivating LVM2 groups"
+ /sbin/lvm vgchange --ignorelockingfailure -an >/dev/null 2>&1
+ stat_done
+ fi
+fi
+
+#F Remount / ro
+f_remountro
+
+# Power off or reboot
+if [ "$RUNLEVEL" = "0" ]; then
+ printsep
+ printhl "${C_H2}POWER OFF"
+ /sbin/poweroff -d -f -h -i
+else
+ printsep
+ printhl "${C_H2}REBOOTING"
+ # if kexec is installed and a kernel is loaded, use it
+ [ -x /sbin/kexec ] && /sbin/kexec -e > /dev/null 2>&1
+ /sbin/reboot -d -f -i
+fi
+
+# vim: set ts=2 sw=2 noet:
+# End
diff --git a/abs/core/linhes-live/etc/rc.sysinit-live b/abs/core/linhes-live/etc/rc.sysinit-live
new file mode 100755
index 0000000..3f72a50
--- /dev/null
+++ b/abs/core/linhes-live/etc/rc.sysinit-live
@@ -0,0 +1,466 @@
+#!/bin/bash
+#
+# /etc/rc.sysinit
+#
+
+###
+# Based on initscripts 2008.05-1
+###
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+###############################################################
+### These functions have been separated out, so that they can be
+### replaced in linhes live systems.
+
+f_header ()
+{
+ echo " "
+ printhl "Arch Linux $C_OTHER(${C_H2}Core Dump$C_OTHER)\n"
+ printhl "${C_H2}http://www.archlinux.org"
+ printhl "Copyright 2002-2007 Judd Vinet"
+ printhl "Copyright 2007-2008 Aaron Griffin"
+ printhl "Distributed under the GNU General Public License (GPL)"
+ printsep
+}
+
+f_fscheck ()
+{
+ status "Mounting Root Read-only" /bin/mount -n -o remount,ro /
+
+ if [ -x /sbin/fsck ]; then
+ stat_busy "Checking Filesystems"
+ if /bin/grep -qw quiet /proc/cmdline; then
+ /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK >/dev/null 2>&1
+ else
+ /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK 2>/dev/null
+ fi
+ fsckret=$?
+ if [ ${fsckret} -gt 1 ]; then
+ stat_fail
+ if [ $((${fsckret}&2)) -eq 2 ]; then
+ echo
+ echo "********************** REBOOT REQUIRED *********************"
+ echo "* *"
+ echo "* The system will be rebooted automatically in 15 seconds. *"
+ echo "* *"
+ echo "************************************************************"
+ echo
+ /bin/sleep 15
+ else
+ echo
+ echo "***************** FILESYSTEM CHECK FAILED ****************"
+ echo "* *"
+ echo "* Please repair manually and reboot. Note that the root *"
+ echo "* file system is currently mounted read-only. To remount *"
+ echo "* it read-write type: mount -n -o remount,rw / *"
+ echo "* When you exit the maintenance shell the system will *"
+ echo "* reboot automatically. *"
+ echo "* *"
+ echo "************************************************************"
+ echo
+ /sbin/sulogin -p
+ fi
+ echo "Automatic reboot in progress..."
+ /bin/umount -a
+ /bin/mount -n -o remount,ro /
+ /sbin/reboot -f
+ exit 0
+ fi
+ stat_done
+ fi
+
+ stat_busy "Mounting Local Filesystems"
+ /bin/mount -n -o remount,rw /
+ /bin/rm -f /etc/mtab*
+ # make sure / gets written to /etc/mtab
+ /bin/mount -o remount,rw /
+
+ f_mountlocal
+ stat_done
+}
+
+f_mountlocal ()
+{
+ # Write /proc, /sys and /dev to /etc/mtab
+ if [ -e /proc/mounts ]; then
+ /bin/grep -e "/proc " -e "/sys " -e "/dev " /proc/mounts >> /etc/mtab
+ fi
+ # now mount all the local filesystems
+ /bin/mount -a -t $NETFS
+}
+
+f_swapon ()
+{
+ status "Activating Swap" /sbin/swapon -a
+}
+
+###############################################################
+
+### Override above functions if running linhes live system
+[ -f /etc/live-sysinit ] && . /etc/live-sysinit
+
+#F Print header
+f_header
+
+# mount /proc, /sys and our RAM /dev
+/bin/mount -n -t ramfs none /dev
+/bin/mount -n -t proc none /proc
+/bin/mount -n -t sysfs none /sys
+
+# Create our default nodes that minilogd may need
+/bin/mknod /dev/null c 1 3
+/bin/mknod /dev/zero c 1 5
+/bin/mknod /dev/console c 5 1
+
+# More initial /dev setup that udev doesn't do
+/bin/ln -snf /proc/self/fd /dev/fd
+/bin/ln -snf /proc/self/fd/0 /dev/stdin
+/bin/ln -snf /proc/self/fd/1 /dev/stdout
+/bin/ln -snf /proc/self/fd/2 /dev/stderr
+/bin/ln -snf /proc/kcore /dev/core
+/bin/mkdir /dev/pts
+/bin/mkdir /dev/shm
+
+# start up our mini logger until syslog takes over
+/sbin/minilogd
+
+# anything more serious than KERN_WARNING goes to the console
+# 'verbose' cmdline parameter enables more messages
+if /bin/grep -q " verbose" /proc/cmdline; then
+ /bin/dmesg -n 8
+else
+ /bin/dmesg -n 3
+fi
+
+# enable rtc access
+/sbin/modprobe rtc-cmos >/dev/null 2>&1
+RTC_MAJOR=$(/bin/grep -w rtc /proc/devices 2>/dev/null); RTC_MAJOR="${RTC_MAJOR%% *}"
+if [ -n "$RTC_MAJOR" ]; then
+ /bin/mkdir /dev/misc/
+ /bin/mknod /dev/misc/rtc0 c $RTC_MAJOR 0
+ /bin/ln -s /dev/misc/rtc0 /dev/rtc
+fi
+
+HWCLOCK_PARAMS="--hctosys"
+if [ "$HARDWARECLOCK" = "UTC" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
+else
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
+fi
+if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then
+ HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa"
+fi
+
+# Set clock early to fix some bugs with filesystem checks
+# Clock is set again later to match rc.conf
+if [ -f /etc/localtime ]; then
+ /sbin/hwclock $HWCLOCK_PARAMS --noadjfile
+fi
+
+echo > /proc/sys/kernel/hotplug
+
+if [ -x /sbin/udevadm -a -d /sys/block ]; then
+ # We have udev and /sys appears to be mounted, use UDev
+ #status "Starting UDev Daemon" /etc/start_udev init
+
+ stat_busy "Starting UDev Daemon"
+ /sbin/udevd --daemon
+ stat_done
+else
+ # Static /dev, our last resort
+ status "Using static /dev filesystem" true
+fi
+
+# Load modules from the MODULES array defined in rc.conf
+if ! [ "$load_modules" = "off" ]; then
+ if [ -f /proc/modules ]; then
+ stat_busy "Loading Modules"
+ for mod in "${MODULES[@]}"; do
+ if [ "$mod" = "${mod#!}" ]; then
+ /sbin/modprobe $mod
+ fi
+ done
+ stat_done
+ fi
+ if [ -d /proc/acpi ]; then
+ stat_busy "Loading standard ACPI modules"
+ ACPI_MODULES="ac battery button fan processor thermal"
+ k="$(echo $BLACKLIST ${MOD_BLACKLIST[@]} | /bin/sed 's|-|_|g')"
+ j="$(echo ${MODULES[@]} | /bin/sed 's|-|_|g')"
+ #add disabled MODULES (!) to blacklist - much requested feature
+ for m in ${j}; do
+ [ "$m" != "${m#!}" ] && k="${k} ${m#!}"
+ done
+ # add disablemodules= from commandline to blacklist
+ k="${k} $(echo ${disablemodules} | /bin/sed 's|-|_|g' | /bin/sed 's|,| |g')"
+ for n in ${ACPI_MODULES}; do
+ if ! echo ${k} | /bin/grep "\<$n\>" 2>&1 >/dev/null; then
+ /sbin/modprobe $n > /dev/null 2>&1
+ fi
+ done
+ stat_done
+ fi
+fi
+
+# run udev uevents
+if /bin/pidof -o %PPID /sbin/udevd >/dev/null; then
+ #status "Loading UDev uevents" /etc/start_udev uevents
+ stat_busy "Loading UDev uevents"
+ udevstart="$(/bin/date +%s%0N)"
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+ stat_done
+ udevend="$(/bin/date +%s%0N)"
+ printhl " UDev uevent processing time: $((($udevend-$udevstart)/1000000))ms"
+fi
+
+# bring up the loopback interface
+if [ -d /sys/class/net/lo ]; then
+ stat_busy "Bringing up loopback interface"
+ /sbin/ifconfig lo 127.0.0.1 up
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+fi
+
+# If necessary, find md devices and manually assemble RAID arrays
+if [ -f /etc/mdadm.conf -a "$(/bin/grep ^ARRAY /etc/mdadm.conf 2>/dev/null)" ]; then
+ # udev won't create these md nodes, so we do it ourselves
+ for dev in $(/bin/grep ^ARRAY /etc/mdadm.conf | /bin/awk '{print $2}'); do
+ path=$(echo $dev | /bin/sed 's|/[^/]*$||')
+ node=$(echo $dev | /bin/sed "s|^$path/||")
+ minor=$(echo $node | /bin/sed 's|^[^0-9]*||')
+ [ ! -e $path/$node ] && /bin/mknod $path/$node b 9 $minor
+ done
+ status "Activating RAID arrays" /sbin/mdadm --assemble --scan
+fi
+
+if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ # Kernel 2.6.x, LVM2 groups
+ /sbin/modprobe -q dm-mod 2>/dev/null
+ stat_busy "Activating LVM2 groups"
+ /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null
+ /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ fi
+fi
+
+# Set up non-root encrypted partition mappings
+if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then
+ /sbin/modprobe -q dm-mod 2>/dev/null
+ stat_busy "Unlocking encrypted volumes:"
+ csfailed=0
+ CS=/sbin/cryptsetup.static
+ do_crypt() {
+ if [ $# -ge 3 ]; then
+ cname="$1"
+ csrc="$2"
+ cpass="$3"
+ shift 3
+ copts="$*"
+ stat_append "${cname}.."
+ # For some fun reason, the parameter ordering varies for
+ # LUKS and non-LUKS devices. Joy.
+ if [ "${cpass}" = "SWAP" ]; then
+ # This is DANGEROUS! The only possible safety check
+ # is to not proceed in case we find a LUKS device
+ # This may cause dataloss if it is not used carefully
+ if $CS isLuks $csrc 2>/dev/null; then
+ false
+ else
+ $CS -d /dev/urandom $copts create $cname $csrc >/dev/null
+ if [ $? -eq 0 ]; then
+ stat_append "creating swapspace.."
+ /sbin/mkswap -L $cname /dev/mapper/$cname >/dev/null
+ fi
+ fi
+ elif [ "${cpass}" = "ASK" ]; then
+ printf "\nOpening '${cname}' volume:\n"
+
+ if $CS isLuks $csrc 2>/dev/null; then
+ $CS $copts luksOpen $csrc $cname < /dev/console
+ else
+ $CS $copts create $cname $csrc < /dev/console
+ fi
+ elif [ "${cpass:0:1}" != "/" ]; then
+ if $CS isLuks $csrc 2>/dev/null; then
+ echo "$cpass" | $CS $copts luksOpen $csrc $cname >/dev/null
+ else
+ echo "$cpass" | $CS $copts create $cname $csrc >/dev/null
+ fi
+ else
+ if $CS isLuks $csrc 2>/dev/null; then
+ $CS -d $cpass $copts luksOpen $csrc $cname >/dev/null
+ else
+ $CS -d $cpass $copts create $cname $csrc >/dev/null
+ fi
+ fi
+ if [ $? -ne 0 ]; then
+ csfailed=1
+ stat_append "failed "
+ else
+ stat_append "ok "
+ fi
+ fi
+ }
+ while read line; do
+ eval do_crypt "$line"
+ done </etc/crypttab
+ if [ $csfailed -eq 0 ]; then
+ stat_done
+ else
+ stat_fail
+ fi
+ # Maybe someone has LVM on an encrypted block device
+ if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
+ if [ -x /sbin/lvm -a -d /sys/block ]; then
+ /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null
+ /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null
+ fi
+ fi
+fi
+
+FORCEFSCK=
+[ -f /forcefsck ] && FORCEFSCK="-- -f"
+NETFS="nonfs,nonfs4,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,noshfs,nofuse,nofuseblk"
+
+#F Check filesystems
+f_fscheck
+
+#F Activate swaps
+f_swapon
+
+stat_busy "Configuring System Clock"
+if [ ! -f /var/lib/hwclock/adjtime ]; then
+ echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
+fi
+if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
+ /bin/rm -f /etc/localtime
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+fi
+
+/sbin/hwclock $HWCLOCK_PARAMS
+stat_done
+
+if [ -f /var/run/random-seed ]; then
+ stat_busy "Initializing Random Seed"
+ /bin/cat /var/run/random-seed >/dev/urandom
+ stat_done
+fi
+
+stat_busy "Removing Leftover Files"
+/bin/rm -f /etc/nologin &>/dev/null
+/bin/rm -f /etc/shutdownpid &>/dev/null
+/bin/rm -f /var/lock/* &>/dev/null
+/bin/rm -rf /tmp/* /tmp/.* &>/dev/null
+/bin/rm -f /forcefsck &>/dev/null
+(cd /var/run && /usr/bin/find . ! -type d -exec /bin/rm -f -- {} \; )
+: > /var/run/utmp
+# Keep {x,k,g}dm happy with xorg
+/bin/mkdir /tmp/.ICE-unix && /bin/chmod 1777 /tmp/.ICE-unix
+/bin/mkdir /tmp/.X11-unix && /bin/chmod 1777 /tmp/.X11-unix
+stat_done
+
+#status "Updating Shared Library Links" /sbin/ldconfig
+
+if [ "$HOSTNAME" != "" ]; then
+ status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME
+fi
+
+# Set the NIS domain name, if necessary
+[ -f /etc/conf.d/nisdomainname ] && . /etc/conf.d/nisdomainname
+if [ "$NISDOMAINNAME" != "" ]; then
+ status "Setting NIS Domain Name: $NISDOMAINNAME" /bin/nisdomainname $NISDOMAINNAME
+fi
+
+status "Updating Module Dependencies" /sbin/depmod -A
+
+# Flush old locale settings
+: >/etc/profile.d/locale.sh
+/bin/chmod 755 /etc/profile.d/locale.sh
+# Set user defined locale
+[ -z "$LOCALE" ] && LOCALE="en_US"
+stat_busy "Setting Locale: $LOCALE"
+echo "export LANG=$LOCALE" >>/etc/profile.d/locale.sh
+stat_done
+
+if echo "$LOCALE" | /bin/grep -qi utf ; then
+ stat_busy "Setting Consoles to UTF-8 mode"
+ # UTF-8 consoles are default since 2.6.24 kernel
+ # this code is needed not only for older kernels,
+ # but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8.
+ /usr/bin/kbd_mode -u
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e%%G" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%G"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q -u $KEYMAP
+else
+ stat_busy "Setting Consoles to legacy mode"
+ # make non-UTF-8 consoles work on 2.6.24 and newer kernels
+ /usr/bin/kbd_mode -a
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e%%@" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%@"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q $KEYMAP
+fi
+
+if [ -n "$CONSOLEFONT" ]; then
+ stat_busy "Loading Console Font: $CONSOLEFONT"
+ #CONSOLEMAP in UTF-8 shouldn't be used
+ if [ -n "$CONSOLEMAP" ] && echo "$LOCALE" | /bin/grep -qi utf ; then
+ CONSOLEMAP=""
+ fi
+ for i in $(/usr/bin/seq 0 63); do
+ if [ -n "$CONSOLEMAP" ]; then
+ /usr/bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1
+ else
+ /usr/bin/setfont $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1
+ fi
+ done
+ if [ $? -ne 0 ]; then
+ stat_fail
+ else
+ for i in $(/usr/bin/seq 0 63); do
+ printf "\e(K" > /dev/vc/${i}
+ done
+ # the $CONSOLE check helps us avoid this when running scripts from cron
+ echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e(K"; fi' >>/etc/profile.d/locale.sh
+ stat_done
+ fi
+fi
+
+# Adding persistent network/cdrom generated rules
+if [ -f "/dev/.udev/tmp-rules--70-persistent-cd.rules" ]; then
+ stat_busy "Adding persistent cdrom udev rules"
+ /bin/cat /dev/.udev/tmp-rules--70-persistent-cd.rules >> /etc/udev/rules.d/70-persistent-cd.rules
+ stat_done
+fi
+if [ -f "/dev/.udev/tmp-rules--70-persistent-net.rules" ]; then
+ stat_busy "Adding persistent network udev rules"
+ /bin/cat /dev/.udev/tmp-rules--70-persistent-net.rules >> /etc/udev/rules.d/70-persistent-net.rules
+ stat_done
+fi
+
+# Save our dmesg output from this boot
+if [ -f /var/log/dmesg.log ]; then
+ /bin/rm /var/log/dmesg.log
+fi
+/bin/dmesg > /var/log/dmesg.log
+
+# vim: set ts=2 noet:
+# End
diff --git a/abs/core/linhes-live/etc/ulogin b/abs/core/linhes-live/etc/ulogin
new file mode 100755
index 0000000..085c431
--- /dev/null
+++ b/abs/core/linhes-live/etc/ulogin
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# ulogin - A script for autologin of a selected user (and more)
+#-----------------------------------------------------------------
+# 2008.04.06
+
+user=$( cat /tmp/newuser 2>/dev/null )
+
+rm -f /tmp/newuser
+rm -f /tmp/xlogout
+
+if [ -n "${user}" ]; then
+ login -f ${user}
+else
+ # offer choice of user
+ ulist="$( cat /etc/passwd | grep ':/home/.*sh$' )"
+ echo -e "\nLogin a user or quit:"
+ echo " 0 : root"
+ echo " 1 : REBOOT"
+ echo " 2 : HALT"
+
+ i=2
+ for entry in ${ulist}; do
+ i=$(( ${i} + 1 ))
+ user="$( echo ${entry} | cut -d':' -f1 )"
+ users[${i}]=${user}
+ printf "%4d : %s\n" ${i} ${user}
+ done
+ while true; do
+ read -p "Enter a number from 0 to ${i} : " n
+ if [ "${n}" = 0 ]; then
+ login -f root
+ elif [ "${n}" = 1 ]; then
+ exec reboot
+ elif [ "${n}" = 2 ]; then
+ exec halt
+ elif [ -n "$( echo "${n}" | grep "^[0-9]\+$" )" ] && \
+ [ -n "${users[${n}]}" ]; then
+ login -f ${users[${n}]}
+ else
+ echo " *** Invalid choice ..."
+ continue
+ fi
+ break
+ done
+fi
+
+if grep "r" /tmp/xlogout &>/dev/null; then
+ reboot
+elif grep "h" /tmp/xlogout &>/dev/null; then
+ halt
+fi
+
+# This file is only needed for shutting down
+rm -f /tmp/checkse
+
+# End
diff --git a/abs/core/linhes-live/lib/initcpio/gen_larch_init b/abs/core/linhes-live/lib/initcpio/gen_larch_init
new file mode 100755
index 0000000..d834e8f
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/gen_larch_init
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+# gen_larch_init
+#
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+
+# Create an initramfs for a larch live system
+# $1 - kernel version
+
+# The cpio.gz image is generated in larch.img
+
+/sbin/mkinitcpio -c /lib/initcpio/mkinitcpio.conf -k $1 -g larch.img
diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch1 b/abs/core/linhes-live/lib/initcpio/hooks/larch1
new file mode 100644
index 0000000..e1a3753
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/hooks/larch1
@@ -0,0 +1,120 @@
+# vim: set ft=sh:
+
+# larch1 - live 'hook' for mkinitcpio: set up tmpfs and find boot device
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+#2008.02.11
+
+# Replacement for msg which includes leading and trailing spaces
+msg_ () { [ "${quiet}" != "y" ] && echo "$@"; }
+
+# Try to mount a disk, partition or cdrom and look for the file
+# 'larchboot' in the /larch directory.
+# If LiveCD system found in the device, return 0, else return 1
+# and leave the device mounted.
+# $1 = device name (e.g. "/dev/hda2")
+# $2 = directory where devices will be mounted
+#
+test_live_data_dir ()
+{
+ /bin/mount -r -t iso9660 "$1" $2 >/dev/null 2>/dev/null || \
+ /bin/mount -r -t vfat -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null || \
+ /bin/mount -r -t ext2 -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null
+ if [ $? -eq 0 ]; then
+ if [ -f "$2/larch/larchboot" ]; then
+ LDEV="$1"
+ msg_ " ... found at $1"
+ return 0
+ else
+ /bin/umount $2 2>/dev/null
+ msg_ " ... $1 mounted, but no 'larch/larchboot' found"
+ fi
+ else
+ msg_ " ... not $1"
+ fi
+ return 1
+}
+
+run_hook ()
+{
+ msg_ ":: Creating writeable filesystem (tmpfs)"
+ /bin/mkdir "/tfs"
+ # Boot option copy-to-ram (c2r)
+ if [ "${c2r}" = "y" ]; then
+ TFSSIZE="90%"
+ else
+ TFSSIZE="60%"
+ fi
+ /bin/mount -t tmpfs -o "size=${TFSSIZE}" tmpfs "/tfs"
+
+ # Directory for test mounts (and then for live CD)
+ cdmount="/livecd"
+ /bin/mkdir "${cdmount}"
+
+ # look for livecd data directory, first try ${root}
+ LDEV="${root}"
+ if [ "x${LDEV}" != "x" ]; then
+ /bin/mount -r -t iso9660 "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \
+ /bin/mount -r -t vfat -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \
+ /bin/mount -r -t ext2 -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null
+ if [ $? -eq 0 ]; then
+ if [ -d "${cdmount}/larch" ]; then
+ msg_ ":: larch system at ${LDEV}"
+ else
+ /bin/umount "${cdmount}" 2>/dev/null
+ echo "!! No larch system at ${LDEV}"
+ LDEV=""
+ fi
+ else
+ echo "!! Couldn't mount ${LDEV}"
+ LDEV=""
+ fi
+ fi
+
+ # then try cdroms
+ if [ "x${LDEV}" = "x" ]; then
+ msg_ ":: Looking for boot device"
+ cdroms=$( /bin/cat /proc/sys/dev/cdrom/info | { while read a b c; do
+ if [ "${a}" = "drive" -a "${b}" = "name:" ]; then
+ echo "${c}"
+ break
+ fi
+ done
+ } )
+ for i in ${cdroms}; do
+ test_live_data_dir "/dev/${i}" "${cdmount}"
+ if [ $? -eq 0 ]; then break; fi
+ done
+ fi
+
+ # test USB devices (and disks) repeatedly until timed out
+ if [ "x${LDEV}" = "x" ]; then
+ msg_ ":: Searching for usb (and disk) devices .."
+ for i in 1 2 3 4 5; do
+ msg_ " :wait ${i} :::"
+ /bin/sleep ${i}
+ for d in /dev/sd[a-z][0-9]*; do
+ test_live_data_dir "${d}" "${cdmount}"
+ if [ $? -eq 0 ]; then break 2; fi
+ done
+ done
+ fi
+}
diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch2 b/abs/core/linhes-live/lib/initcpio/hooks/larch2
new file mode 100644
index 0000000..74b4e64
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/hooks/larch2
@@ -0,0 +1,33 @@
+# larch2 - live 'hook' for mkinitcpio: unionfs specific
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+#2007.12.13
+
+run_hook ()
+{
+ #!!! --- unionfs specific
+ # Need unionfs module
+ /bin/modprobe unionfs
+ ovlmnt="ro"
+ bropt="dirs="
+ sqfmnt="ro"
+ utype="unionfs"
+}
diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs b/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs
new file mode 100644
index 0000000..ac8e40b
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs
@@ -0,0 +1,33 @@
+# larch2_aufs - live 'hook' for mkinitcpio: aufs specific
+
+# Author: Michael Towers (gradgrind) <mt.42@web.de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2008.02.29
+
+run_hook ()
+{
+ #!!! --- aufs specific
+ # Need aufs module
+ /bin/modprobe aufs
+ ovlmnt="rr+wh"
+ sqfmnt="rr"
+ bropt="br:"
+ utype="aufs"
+}
diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch3 b/abs/core/linhes-live/lib/initcpio/hooks/larch3
new file mode 100644
index 0000000..47be81a
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/hooks/larch3
@@ -0,0 +1,192 @@
+# larch3 - live 'hook' for mkinitcpio:
+# deal with c2r,
+# mount base system,
+# load overlay,
+# set up unioned root filesystem.
+# Also manages overlay merging.
+
+# Author: Michael Towers <gradgrind[at]online[dot]de>
+#
+# This file is part of the larch project.
+#
+# larch 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.
+#
+# larch 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 larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2008.04.04
+
+run_hook ()
+{
+ if [ "x${LDEV}" = "x" ]; then
+ err "Sorry, couldn't find boot medium ..."
+ break="y"
+ return
+ fi
+
+ /sbin/modprobe loop
+
+ # Path to compressed base system
+ sysSqf=${cdmount}/system.sqf
+
+ ovlpath=${cdmount}
+
+ # A possibility to use alternative files:
+ if [ -f ${cdmount}/larch/boot-init ]; then
+ . ${cdmount}/larch/boot-init
+ fi
+
+ # Path to compressed 'modifications' archive
+ modsSqf=${ovlpath}/mods.sqf
+ # Default overlay file and directory
+ overlay=${ovlpath}/overlay.ovl
+
+ # Make union root
+ /bin/mkdir /union
+
+ # Deal with new archives
+ if [ -f ${overlay}_ ]; then
+ /bin/mount -o remount,rw ${LDEV} ${cdmount}
+ /bin/mv ${overlay} ${overlay}~
+ /bin/mv ${overlay}_ ${overlay}
+
+ if [ -f ${modsSqf}_ ]; then
+ /bin/mv ${modsSqf} ${modsSqf}~
+ /bin/mv ${modsSqf}_ ${modsSqf}
+ fi
+ /bin/mount -o remount,ro ${LDEV} ${cdmount}
+ fi
+
+ # Boot option copy-to-ram (c2r)
+ if [ "${c2r}" = "y" ]; then
+ msg_ ":: Copying base system to RAM, this will take a while ..."
+ /bin/cat ${sysSqf} > /tfs/system.sqf
+ if [ $? -ne 0 ]; then
+ err "Sorry, not enough RAM"
+ break="y"
+ return
+ fi
+ sysSqf=/tfs/system.sqf
+
+ msg_ ":: Copying mods archive to RAM, this might take a while ..."
+ /bin/cat ${modsSqf} > /tfs/mods.sqf
+ if [ $? -ne 0 ]; then
+ err "Sorry, not enough RAM"
+ break="y"
+ return
+ fi
+ modsSqf=/tfs/mods.sqf
+
+ # force use of swap (if available)
+ :> /tfs/swapon
+
+ elif [ "${swap}" = "y" ]; then
+ :> /tfs/swapon
+ fi
+
+ msg_ ":: Mounting squashed images"
+ /bin/mkdir /tfs/system
+ # The klibc mount command doesn't support '-o loop'
+ /bin/losetup /dev/loop0 ${sysSqf}
+ /bin/mount -r -t squashfs /dev/loop0 /tfs/system
+
+ # Make stuff in 'system' available by providing the loader and
+ # library path
+ ldli=$( cd /tfs/system; echo lib/ld-linux*.so.2 )
+ /bin/ln -s /tfs/system/${ldli} /${ldli}
+ export LD_LIBRARY_PATH=/tfs/system/lib:/tfs/system/usr/lib
+
+ /bin/mkdir /tfs/mods
+ # The klibc mount command doesn't support '-o loop'
+ /bin/losetup /dev/loop1 ${modsSqf}
+ /bin/mount -r -t squashfs /dev/loop1 /tfs/mods
+
+ # Unpack the overlay
+ msg_ ":: Initializing writable layer for union (overlay)"
+ /tfs/system/usr/bin/lzop -d < ${overlay} | \
+ /tfs/system/bin/tar -C /tfs -xf -
+
+ # Copy the installation tidy-up script (for removing custom live-only stuff),
+ # and any other files in 'larch/copy' directory
+ if [ -d ${ovlpath}/larch/copy ]; then
+ cd ${ovlpath}/larch/copy
+ for f in *; do
+ cat ${f} >/tfs/${f}
+ done
+ fi
+
+ msg_ ":: Setting up union file system"
+
+ layers="/tfs/overlay=rw:/tfs/mods=${ovlmnt}:/tfs/system=${sqfmnt}"
+ /bin/mount -t ${utype} -o ${bropt}${layers} ${utype} /union
+
+ echo "${utype}" > /tfs/utype
+
+ # Minimal device nodes needed before udev does its work
+ /bin/mkdir /union/dev
+ /bin/mknod /union/dev/console c 5 1
+ /bin/mknod /union/dev/null c 1 3
+ /bin/mknod /union/dev/zero c 1 5
+
+ # Make special directories
+ /bin/mkdir -m 1777 /union/tmp
+ /bin/mkdir /union/media
+ /bin/mkdir /union/sys
+ /bin/mkdir /union/proc
+
+ # Make the tmpfs stuff accessible within the union
+ /bin/mkdir /union/.livesys
+ /bin/mount -o bind /tfs /union/.livesys
+
+ /bin/mkdir /union/.livesys/medium
+
+ /bin/mount -o bind /tfs/system /union/.livesys/system
+ /bin/mount -o bind /tfs/overlay /union/.livesys/overlay
+ /bin/mount -o bind ${cdmount} /union/.livesys/medium
+
+ if [ "x${modsSqf}" != "x" ]; then
+ /bin/mount -o move /tfs/mods /union/.livesys/mods
+ fi
+
+ # Remember the boot device
+ echo "${LDEV}" > /tfs/bootdevice
+
+ if [ "${c2r}" = "y" ]; then
+ # Set flag to inform system of copy-to-ram
+ :> /tfs/c2r
+
+ # Unmount boot device
+ /bin/umount ${cdmount}
+ fi
+
+ msg_ ":: End of live system set-up"
+
+ # Now some tweaks to alter 'init' actions from non-larch hooks, etc.
+ # Override rootdelay from usb hook
+ if [ "x${larchdelay}" = "x" ]; then
+ # To avoid spurious udevd pid numbers
+ export rootdelay=1
+ else
+ # Allow adjustment via boot option
+ export rootdelay=${larchdelay}
+ fi
+ # root must be set to something or other, even though larch doesn't
+ # need it ...
+ export root="/dev/loop0"
+}
+
+#######
+# The actual root switch occurs later, when 'init' execs 'kinit'.
+# I handle this by overwriting the 'kinit' binary with my own script.
+# This will unmount dev, sys and proc and then exec run-init.
+#######
diff --git a/abs/core/linhes-live/lib/initcpio/install/larch1 b/abs/core/linhes-live/lib/initcpio/install/larch1
new file mode 100644
index 0000000..56baf48
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/install/larch1
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="vfat isofs ext2 ext3 nls_cp437"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch1"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It is the first larch hook,
+creating a tmpfs and seeking the boot medium.
+HELPEOF
+}
diff --git a/abs/core/linhes-live/lib/initcpio/install/larch2 b/abs/core/linhes-live/lib/initcpio/install/larch2
new file mode 100644
index 0000000..a906227
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/install/larch2
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="unionfs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch2"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It handles selection of the
+desired unioning file system, here unionfs.
+HELPEOF
+}
diff --git a/abs/core/linhes-live/lib/initcpio/install/larch2_aufs b/abs/core/linhes-live/lib/initcpio/install/larch2_aufs
new file mode 100644
index 0000000..0e19de9
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/install/larch2_aufs
@@ -0,0 +1,15 @@
+install ()
+{
+ MODULES="aufs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch2_aufs"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It handles selection of the
+desired unioning file system, here aufs.
+HELPEOF
+}
diff --git a/abs/core/linhes-live/lib/initcpio/install/larch3 b/abs/core/linhes-live/lib/initcpio/install/larch3
new file mode 100644
index 0000000..7dad03c
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/install/larch3
@@ -0,0 +1,18 @@
+install ()
+{
+ MODULES="squashfs loop reiserfs"
+ BINARIES=""
+ FILES=""
+ SCRIPT="larch3"
+# add_file "/lib/initcpio/kinit" "/bin/kinit" ##### This doesn't work, so:
+ sed -i 's|.*/usr/lib/klibc/bin/kinit\.shared.*||' "${FILELIST}"
+ sed -i 's|/usr/lib/klibc/bin/kinit|/lib/initcpio/kinit|' "${FILELIST}"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook deals with booting a larch live CD. It is the last larch hook,
+setting up the tmpfs root file system.
+HELPEOF
+}
diff --git a/abs/core/linhes-live/lib/initcpio/kinit b/abs/core/linhes-live/lib/initcpio/kinit
new file mode 100755
index 0000000..7c86f4b
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/kinit
@@ -0,0 +1,6 @@
+#! /bin/sh
+
+umount /sys
+umount /proc
+umount /dev
+exec run-init -c /dev/console /union /sbin/init ${CMDLINE}
diff --git a/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf b/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf
new file mode 100644
index 0000000..79cca21
--- /dev/null
+++ b/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf
@@ -0,0 +1,54 @@
+# vim:set ft=sh
+# MODULES
+# The following modules are loaded before any boot hooks are
+# run. Advanced users may wish to specify all system modules
+# in this array. For instance:
+# MODULES="piix ide_disk reiserfs"
+MODULES=""
+
+# BINARIES
+# This setting includes, into the CPIO image, and additional
+# binaries a given user may wish. This is run first, so may
+# be used to override the actual binaries used in a given hook.
+# (Existing files are NOT overwritten is already added)
+# BINARIES are dependancy parsed, so you may safely ignore libraries
+#BINARIES=""
+
+# FILES
+# This setting is similar to BINARIES above, however, files are added
+# as-is and are not parsed in anyway. This is useful for config files.
+# Some users may wish to include modprobe.conf for custom module options,
+# like so:
+# FILES="/etc/modprobe.conf"
+FILES=""
+
+# HOOKS
+# This is the most important setting in this file. The HOOKS control the
+# modules and scripts added to the image, and what happens at boot time.
+# Order is important, and it is recommended that you do not change the
+# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
+# help on a given hook.
+# 'base' is _required_ unless you know precisely what you are doing.
+# 'udev' is _required_ in order to automatically load modules
+# 'modload' may be used in place of 'udev', but is not recommended
+# 'filesystems' is _required_ unless you specify your fs modules in MODULES
+# Examples:
+# This setup specifies all modules in the MODULES setting above.
+# No raid, lvm, or encrypted root is needed.
+# HOOKS="base"
+#
+# This setup will autodetect all modules for your system and should
+# work as a sane default
+# HOOKS="base udev autodetect ide scsi sata filesystems"
+#
+# This setup will generate a 'full' image which supports most systems.
+# No autodetection is done.
+# HOOKS="base udev ide scsi sata usb filesystems"
+#
+# This setup assembles an ide raid array with an encrypted root FS.
+# Note: See 'mkinitcpio -H raid' for more information on raid devices.
+# HOOKS="base udev ide filesystems raid encrypt"
+#
+# This setup loads an LVM volume group on a usb device.
+# HOOKS="base udev usb filesystems lvm"
+HOOKS="base udev pata scsi sata usb larch1 larch2___aufs___ larch3"
diff --git a/abs/core/linuxtv-dvb-apps/ChangeLog b/abs/core/linuxtv-dvb-apps/ChangeLog
new file mode 100644
index 0000000..7fd5bbf
--- /dev/null
+++ b/abs/core/linuxtv-dvb-apps/ChangeLog
@@ -0,0 +1,2 @@
+2007-06-26 tardo <tardo@nagi-fanboi.net>
+* Built for x86_64
diff --git a/abs/core/linuxtv-dvb-apps/PKGBUILD b/abs/core/linuxtv-dvb-apps/PKGBUILD
new file mode 100644
index 0000000..05b719b
--- /dev/null
+++ b/abs/core/linuxtv-dvb-apps/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD,v 1.2 2007/06/27 02:00:07 tardo Exp $
+# Contributor: Jaroslaw Swierczynski <swiergot@juvepoland.com>
+# Contributor: Camille Moncelier <pix@devlife.org>
+
+pkgname=linuxtv-dvb-apps
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="Viewer programs for DVB cards"
+arch=('i686' 'x86_64')
+url="http://www.linuxtv.org/"
+license=('GPL')
+depends=(glibc)
+install=linuxtv-dvb-apps.install
+source=(http://www.linuxtv.org/download/dvb/$pkgname-$pkgver.tar.bz2)
+md5sums=('de958cdb8d00e74792dd69f3c945b037')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ rm -rf include
+ make || return 1
+ install -m 755 -d $startdir/pkg/usr/{bin,share/dvb-utils/{scan/{atsc,dvb-{c,s,t}},av7110_loadkeys}}
+ install -m 755 util/av7110_loadkeys/av7110_loadkeys $startdir/pkg/usr/bin
+ install -m 755 util/av7110_loadkeys/evtest $startdir/pkg/usr/bin
+ install -m 644 util/av7110_loadkeys/*.rc* $startdir/pkg/usr/share/dvb-utils/av7110_loadkeys
+ install -m 755 util/dvbdate/dvbdate $startdir/pkg/usr/bin
+ install -m 755 util/dvbnet/dvbnet $startdir/pkg/usr/bin
+ install -m 755 util/dvbtraffic/dvbtraffic $startdir/pkg/usr/bin
+ install -m 755 util/scan/scan $startdir/pkg/usr/bin
+ install -m 644 util/scan/atsc/* $startdir/pkg/usr/share/dvb-utils/scan/atsc
+ install -m 644 util/scan/dvb-c/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-c
+ install -m 644 util/scan/dvb-s/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-s
+ install -m 644 util/scan/dvb-t/* $startdir/pkg/usr/share/dvb-utils/scan/dvb-t
+ install -m 755 util/szap/azap $startdir/pkg/usr/bin
+ install -m 755 util/szap/czap $startdir/pkg/usr/bin
+ install -m 755 util/szap/femon $startdir/pkg/usr/bin
+ install -m 755 util/szap/szap $startdir/pkg/usr/bin
+ install -m 755 util/szap/tzap $startdir/pkg/usr/bin
+}
diff --git a/abs/core/linuxtv-dvb-apps/linuxtv-dvb-apps.install b/abs/core/linuxtv-dvb-apps/linuxtv-dvb-apps.install
new file mode 100644
index 0000000..f735122
--- /dev/null
+++ b/abs/core/linuxtv-dvb-apps/linuxtv-dvb-apps.install
@@ -0,0 +1,12 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">>> Some initial-tuning-data files have been installed under"
+ echo ">>> /usr/share/dvb-utils/scan/"
+ echo ">>> you can use them to generate your channel.conf file"
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/lirc-utils/PKGBUILD b/abs/core/lirc-utils/PKGBUILD
new file mode 100644
index 0000000..b1f1f9a
--- /dev/null
+++ b/abs/core/lirc-utils/PKGBUILD
@@ -0,0 +1,66 @@
+# $Id: PKGBUILD 6058 2008-07-23 02:50:00Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=lirc-utils
+pkgver=0.8.3
+pkgrel=1
+pkgdesc="Linux Infrared Remote Control utils"
+arch=(i686 x86_64)
+url="http://www.lirc.org/"
+license=('GPL')
+_kernver=2.6.26-ARCH
+depends=('alsa-lib' 'libusb' 'libx11' 'libsm')
+makedepends=('help2man')
+replaces=('lirc+pctv')
+backup=('etc/lircd.conf' 'etc/lircmd.conf'\
+ 'etc/conf.d/lircd')
+options=('!libtool' '!makeflags')
+source=(http://umn.dl.sf.net/sourceforge/lirc/lirc-$pkgver.tar.bz2 \
+ lircd lircmd lirc.logrotate lircd.conf.d kernel-2.6.26.patch)
+md5sums=('8e78eeded7b31e5ad02e328970437c0f' '909ad968afa10e4511e1da277bb23c3b'\
+ '85f7fdac55e5256967241864049bf5e9' '3deb02604b37811d41816e9b4385fcc3'\
+ '5b1f8c9cd788a39a6283f93302ce5c6e' '1753acd774f50b638e6173d364de53fd')
+
+build() {
+ # configure
+ cd $startdir/src/lirc-$pkgver || return 1
+ patch -Np1 -i ../kernel-2.6.26.patch || return 1
+
+ # Disabling lirc_gpio driver as it does no longer work Kernel 2.6.22+
+ sed -i -e "s:lirc_gpio\.o::" drivers/lirc_gpio/Makefile.am || return 1
+
+ autoreconf || return 1
+ libtoolize || return 1
+
+ ./configure --enable-sandboxed --prefix=/usr \
+ --with-driver=all --with-kerneldir=/usr/src/linux-${_kernver} \
+ --with-moduledir=/lib/modules/${_kernver}/kernel/drivers/misc \
+ --with-transmitter \
+ || return 1
+ # disable parallel and bt829
+ # because of incompatibility with smp systems
+ sed -i -e "s:lirc_parallel::" -e "s:lirc_bt829::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+
+ # build
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ mkdir -p $startdir/pkg/usr/share/lirc $startdir/pkg/etc/rc.d \
+ || return 1
+ cp $startdir/src/{lircd,lircmd} $startdir/pkg/etc/rc.d/ \
+ || return 1
+ cp -rp remotes $startdir/pkg/usr/share/lirc || return 1
+ chmod -R go-w $startdir/pkg/usr/share/lirc/ || return 1
+
+ # install the logrotate config
+ install -D -m644 $startdir/src/lirc.logrotate \
+ $startdir/pkg/etc/logrotate.d/lirc || return 1
+
+ # install conf.d file
+ install -D -m644 $startdir/src/lircd.conf.d \
+ $startdir/pkg/etc/conf.d/lircd || return 1
+
+ # remove built modules
+ rm -r $startdir/pkg/lib/
+}
diff --git a/abs/core/lirc-utils/kernel-2.6.26.patch b/abs/core/lirc-utils/kernel-2.6.26.patch
new file mode 100644
index 0000000..74bb986
--- /dev/null
+++ b/abs/core/lirc-utils/kernel-2.6.26.patch
@@ -0,0 +1,122 @@
+--- a/drivers/kcompat.h 2008-01-13 11:26:28.000000000 +0100
++++ b/drivers/kcompat.h 2008-05-14 18:37:49.000000000 +0200
+@@ -1,4 +1,4 @@
+-/* $Id: kcompat.h,v 5.34 2008/01/13 10:26:28 lirc Exp $ */
++/* $Id: kcompat.h,v 5.36 2008/05/14 16:37:49 lirc Exp $ */
+
+ #ifndef _KCOMPAT_H
+ #define _KCOMPAT_H
+@@ -36,10 +36,10 @@
+ class_simple_destroy(cls);
+ }
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_simple_device_add(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_simple_device_add(cs, dev, parent, fmt, ## args)
+
+-static inline void class_device_destroy(lirc_class_t *cls, dev_t devt)
++static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt)
+ {
+ class_simple_device_remove(devt);
+ }
+@@ -48,20 +48,40 @@
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15)
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_device_create(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, dev, parent, fmt, ## args)
+
+ #else /* >= 2.6.15 */
+
+-#define lirc_class_device_create class_device_create
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, NULL, dev, parent, fmt, ## args)
++
++#else /* >= 2.6.26 */
++
++#define lirc_device_create device_create
++
++#endif /* >= 2.6.26 */
++
+ #define LIRC_DEVFS_PREFIX
+
+-#endif
++#endif /* >= 2.6.15 */
+
+ typedef struct class lirc_class_t;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_destroy class_device_destroy
++
++#else
++
++#define lirc_device_destroy device_destroy
++
+ #endif
+
++#endif /* >= 2.6.13 */
++
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+ #define LIRC_HAVE_DEVFS
+ #define LIRC_HAVE_DEVFS_24
+@@ -133,8 +153,8 @@
+ #ifndef LIRC_HAVE_SYSFS
+ #define class_destroy(x) do { } while (0)
+ #define class_create(x, y) NULL
+-#define class_device_destroy(x, y) do { } while (0)
+-#define lirc_class_device_create(x, y, z, xx, yy, zz) 0
++#define lirc_class_destroy(x, y) do { } while (0)
++#define lirc_class_create(x, y, z, xx, yy, zz) 0
+ #define IS_ERR(x) 0
+ typedef struct class_simple
+ {
+--- a/drivers/lirc_dev/lirc_dev.c 2008-01-13 11:45:02.000000000 +0100
++++ b/drivers/lirc_dev/lirc_dev.c 2008-05-14 18:37:49.000000000 +0200
+@@ -17,7 +17,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+- * $Id: lirc_dev.c,v 1.56 2008/01/13 10:45:02 lirc Exp $
++ * $Id: lirc_dev.c,v 1.58 2008/05/14 16:37:49 lirc Exp $
+ *
+ */
+
+@@ -145,7 +145,8 @@
+ #ifdef LIRC_HAVE_DEVFS_26
+ devfs_remove(DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+
+ if (ir->buf != ir->p.rbuf) {
+ lirc_buffer_free(ir->buf);
+@@ -400,9 +401,9 @@
+ S_IFCHR|S_IRUSR|S_IWUSR,
+ DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- (void) lirc_class_device_create(lirc_class, NULL,
+- MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
+- ir->p.dev, "lirc%u", ir->p.minor);
++ (void) lirc_device_create(lirc_class, ir->p.dev,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
++ "lirc%u", ir->p.minor);
+
+ if (p->sample_rate || p->get_queue) {
+ /* try to fire up polling thread */
+@@ -441,7 +442,8 @@
+ return minor;
+
+ out_sysfs:
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+ #ifdef LIRC_HAVE_DEVFS_24
+ devfs_unregister(ir->devfs_handle);
+ #endif
diff --git a/abs/core/lirc-utils/lirc.logrotate b/abs/core/lirc-utils/lirc.logrotate
new file mode 100644
index 0000000..623c4f3
--- /dev/null
+++ b/abs/core/lirc-utils/lirc.logrotate
@@ -0,0 +1,5 @@
+/var/log/lircd {
+ missingok
+ notifempty
+ delaycompress
+}
diff --git a/abs/core/lirc-utils/lircd b/abs/core/lirc-utils/lircd
new file mode 100755
index 0000000..f4686d7
--- /dev/null
+++ b/abs/core/lirc-utils/lircd
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/lircd
+
+PID=$(pidof -o %PPID /usr/sbin/lircd)
+case "$1" in
+ start)
+ stat_busy "Starting LIRC Daemon"
+ [ -n "$LIRC_DRIVER" ] && LIRC_EXTRAOPTS="-H $LIRC_DRIVER $LIRC_EXTRAOPTS"
+ [ -z "$PID" ] &&
+ if [ -n "$LIRC_DEVICE" ] ; then
+ /usr/sbin/lircd -d "$LIRC_DEVICE" $LIRC_EXTRAOPTS $LIRC_CONFIGFILE
+ else
+ /usr/sbin/lircd $LIRC_EXTRAOPTS $LIRC_CONFIGFILE
+ fi
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon lircd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping LIRC Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon lircd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/lirc-utils/lircd.conf.d b/abs/core/lirc-utils/lircd.conf.d
new file mode 100644
index 0000000..760dab0
--- /dev/null
+++ b/abs/core/lirc-utils/lircd.conf.d
@@ -0,0 +1,8 @@
+#
+# Parameters for lirc daemon
+#
+
+LIRC_DEVICE="/dev/lirc0"
+LIRC_DRIVER=""
+LIRC_EXTRAOPTS=""
+LIRC_CONFIGFILE=""
diff --git a/abs/core/lirc-utils/lircmd b/abs/core/lirc-utils/lircmd
new file mode 100755
index 0000000..220c47c
--- /dev/null
+++ b/abs/core/lirc-utils/lircmd
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/lircmd`
+case "$1" in
+ start)
+ stat_busy "Starting lircmd Daemon"
+ [ -z "$PID" ] && /usr/sbin/lircmd
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon lircmd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping lircmd Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon lircmd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/lirc/PKGBUILD b/abs/core/lirc/PKGBUILD
new file mode 100644
index 0000000..d7fc488
--- /dev/null
+++ b/abs/core/lirc/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 6055 2008-07-23 02:44:55Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=lirc
+pkgver=0.8.3
+pkgrel=1
+_kernver=2.6.26-ARCH
+pkgdesc="Linux Infrared Remote Control kernel modules for stock arch kernel"
+arch=(i686 x86_64)
+url="http://www.lirc.org/"
+license=('GPL')
+depends=('lirc-utils=0.8.3' 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+makedepends=('help2man')
+replaces=('lirc+pctv')
+options=('!makeflags')
+install=$pkgname.install
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2 \
+ kernel-2.6.26.patch)
+md5sums=('8e78eeded7b31e5ad02e328970437c0f' '1753acd774f50b638e6173d364de53fd')
+
+build() {
+ # configure
+ cd $startdir/src/lirc-$pkgver || return 1
+ patch -Np1 -i ../kernel-2.6.26.patch || return 1
+
+ ./configure --enable-sandboxed --prefix=/usr \
+ --with-driver=all --with-kerneldir=/usr/src/linux-${_kernver}/ \
+ --with-moduledir=/lib/modules/${_kernver}/kernel/drivers/misc \
+ --with-transmitter \
+ || return 1
+
+ # disable parallel and bt829
+ # because of incompatibility with smp systems
+ sed -i -e "s:lirc_parallel::" -e "s:lirc_bt829::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+ # disable lirc_gpio due to brokeness of kernel 2.6.23
+ sed -i -e "s:lirc_gpio::" \
+ Makefile drivers/Makefile drivers/*/Makefile tools/Makefile \
+ || return 1
+
+ # build
+ cd drivers || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # set the kernel we've built for inside the install script
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
+ $startdir/lirc.install || return 1
+}
diff --git a/abs/core/lirc/kernel-2.6.26.patch b/abs/core/lirc/kernel-2.6.26.patch
new file mode 100644
index 0000000..74bb986
--- /dev/null
+++ b/abs/core/lirc/kernel-2.6.26.patch
@@ -0,0 +1,122 @@
+--- a/drivers/kcompat.h 2008-01-13 11:26:28.000000000 +0100
++++ b/drivers/kcompat.h 2008-05-14 18:37:49.000000000 +0200
+@@ -1,4 +1,4 @@
+-/* $Id: kcompat.h,v 5.34 2008/01/13 10:26:28 lirc Exp $ */
++/* $Id: kcompat.h,v 5.36 2008/05/14 16:37:49 lirc Exp $ */
+
+ #ifndef _KCOMPAT_H
+ #define _KCOMPAT_H
+@@ -36,10 +36,10 @@
+ class_simple_destroy(cls);
+ }
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_simple_device_add(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_simple_device_add(cs, dev, parent, fmt, ## args)
+
+-static inline void class_device_destroy(lirc_class_t *cls, dev_t devt)
++static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt)
+ {
+ class_simple_device_remove(devt);
+ }
+@@ -48,20 +48,40 @@
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15)
+
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+- class_device_create(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, dev, parent, fmt, ## args)
+
+ #else /* >= 2.6.15 */
+
+-#define lirc_class_device_create class_device_create
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++ class_device_create(cs, NULL, dev, parent, fmt, ## args)
++
++#else /* >= 2.6.26 */
++
++#define lirc_device_create device_create
++
++#endif /* >= 2.6.26 */
++
+ #define LIRC_DEVFS_PREFIX
+
+-#endif
++#endif /* >= 2.6.15 */
+
+ typedef struct class lirc_class_t;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_destroy class_device_destroy
++
++#else
++
++#define lirc_device_destroy device_destroy
++
+ #endif
+
++#endif /* >= 2.6.13 */
++
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+ #define LIRC_HAVE_DEVFS
+ #define LIRC_HAVE_DEVFS_24
+@@ -133,8 +153,8 @@
+ #ifndef LIRC_HAVE_SYSFS
+ #define class_destroy(x) do { } while (0)
+ #define class_create(x, y) NULL
+-#define class_device_destroy(x, y) do { } while (0)
+-#define lirc_class_device_create(x, y, z, xx, yy, zz) 0
++#define lirc_class_destroy(x, y) do { } while (0)
++#define lirc_class_create(x, y, z, xx, yy, zz) 0
+ #define IS_ERR(x) 0
+ typedef struct class_simple
+ {
+--- a/drivers/lirc_dev/lirc_dev.c 2008-01-13 11:45:02.000000000 +0100
++++ b/drivers/lirc_dev/lirc_dev.c 2008-05-14 18:37:49.000000000 +0200
+@@ -17,7 +17,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+- * $Id: lirc_dev.c,v 1.56 2008/01/13 10:45:02 lirc Exp $
++ * $Id: lirc_dev.c,v 1.58 2008/05/14 16:37:49 lirc Exp $
+ *
+ */
+
+@@ -145,7 +145,8 @@
+ #ifdef LIRC_HAVE_DEVFS_26
+ devfs_remove(DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+
+ if (ir->buf != ir->p.rbuf) {
+ lirc_buffer_free(ir->buf);
+@@ -400,9 +401,9 @@
+ S_IFCHR|S_IRUSR|S_IWUSR,
+ DEV_LIRC "/%u", ir->p.minor);
+ #endif
+- (void) lirc_class_device_create(lirc_class, NULL,
+- MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
+- ir->p.dev, "lirc%u", ir->p.minor);
++ (void) lirc_device_create(lirc_class, ir->p.dev,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
++ "lirc%u", ir->p.minor);
+
+ if (p->sample_rate || p->get_queue) {
+ /* try to fire up polling thread */
+@@ -441,7 +442,8 @@
+ return minor;
+
+ out_sysfs:
+- class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++ lirc_device_destroy(lirc_class,
++ MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+ #ifdef LIRC_HAVE_DEVFS_24
+ devfs_unregister(ir->devfs_handle);
+ #endif
diff --git a/abs/core/lirc/lirc.install b/abs/core/lirc/lirc.install
new file mode 100644
index 0000000..704c341
--- /dev/null
+++ b/abs/core/lirc/lirc.install
@@ -0,0 +1,50 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ /bin/true
+}
+
+# arg 1: the new package version
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/live-installer/LinHES-release b/abs/core/live-installer/LinHES-release
new file mode 100644
index 0000000..a4de764
--- /dev/null
+++ b/abs/core/live-installer/LinHES-release
@@ -0,0 +1 @@
+LinHES R6.00.02
diff --git a/abs/core/live-installer/MythVantage.sh b/abs/core/live-installer/MythVantage.sh
new file mode 100755
index 0000000..286c908
--- /dev/null
+++ b/abs/core/live-installer/MythVantage.sh
@@ -0,0 +1,3 @@
+export MV_ROOT=/usr/MythVantage
+export PATH=$PATH:$MV_ROOT/bin
+export TEMPLATES=$MV_ROOT/templates
diff --git a/abs/core/live-installer/PKGBUILD b/abs/core/live-installer/PKGBUILD
new file mode 100755
index 0000000..5b41dcd
--- /dev/null
+++ b/abs/core/live-installer/PKGBUILD
@@ -0,0 +1,66 @@
+pkgname=live-installer
+pkgver=1.0
+pkgrel=26
+pkgdesc="Install and configure your system"
+#depends=(bc mysql-python expect curl dnsutils)
+depends=(bc libstatgrab mysql-python expect curl dnsutils parted sg3_utils)
+arch=('i686')
+#source=(mythinstall.bin install-ui.xml bpopup-ui.xml mythbeselect.bin install_proxy.sh install_functions.sh startx systemconfig.sh install_db_chroot.sh restore_default_settings.sh live-install.sh xconfig.sh timezip.py soundconfig.sh mythvantage-release issue autocard.py MythVantage.sh create_master.sh build_diskless.sh networkconfig.sh )
+
+
+source=(mythinstall.bin 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 )
+
+
+install=live.install
+build() {
+
+
+ mkdir -p $startdir/pkg/etc
+ mkdir -p $startdir/pkg/usr/share/mythtv/themes/default
+
+# new stuff
+ MVDIR=$startdir/pkg/usr/MythVantage
+ mkdir $startdir/pkg/etc/profile.d
+ install -m 0755 MythVantage.sh $startdir/pkg/etc/profile.d/MythVantage.sh
+ mkdir -p $MVDIR/bin
+ mkdir -p $MVDIR/templates
+ mkdir -p $MVDIR/etc
+
+#copy in all the installer specific stuff
+ #cp -rp ../templates $MVDIR/
+ rsync -r --exclude=.svn ../templates $MVDIR/
+ install -m 0755 install_proxy.sh $MVDIR/bin/install_proxy.sh
+ install -m 0755 install_functions.sh $MVDIR/bin/install_functions.sh
+ install -m 0755 systemconfig.sh $MVDIR/bin/systemconfig.sh
+ install -m 0755 xconfig.sh $MVDIR/bin/xconfig.sh
+# install -m 0755 live-install.sh $MVDIR/bin/live-install.sh
+ install -m 0755 install_db_chroot.sh $MVDIR/bin/install_db_chroot.sh
+ install -m 0755 restore_default_settings.sh $MVDIR/bin/restore_default_settings.sh
+ install -m 0755 soundconfig.sh $MVDIR/bin/soundconfig.sh
+ install -m 0755 networkconfig.sh $MVDIR/bin/networkconfig.sh
+ install -m 0755 create_master.sh $MVDIR/bin/create_master.sh
+ install -m 0755 build_diskless.sh $MVDIR/bin/build_diskless.sh
+ install -m 0755 timezip.py $MVDIR/bin/timezip.py
+ mkdir -p $startdir/pkg/usr/bin
+ install -m 0755 file_time_offset.py $startdir/pkg/usr/bin/file_time_offset.py
+ #copy in the branding stuff
+ 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/
+# install -m 0755 bpopup-ui.xml $startdir/pkg/usr/local/share/mythtv/themes/default/
+
+#copy in the binaries
+ #install -g mythtv -m 4750 mythinstall.bin $MVDIR/bin/MythVantage
+ install -m 4755 mythinstall.bin $MVDIR/bin/MythVantage
+ cd $MVDIR/bin
+ ln -s MythVantage mythvantage
+ ln -s MythVantage mythinstall
+ cd -
+# install -g mythtv -m 4750 mythbeselect.bin $MVDIR/bin/mythbeselect
+
+# install -m 0755 startx $startdir/pkg/root/startx
+# install -m 0755 live-install.sh $startdir/pkg/root/live-install.sh
+}
+
diff --git a/abs/core/live-installer/add_service.sh b/abs/core/live-installer/add_service.sh
new file mode 100755
index 0000000..190d604
--- /dev/null
+++ b/abs/core/live-installer/add_service.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -d $SCRIPT_DIR/$1 ]
+then
+ if [ -d $SERVICE_DIR/$1 ]
+ then
+ echo "$1 already there"
+ else
+ ln -s $SCRIPT_DIR/$1 $SERVICE_DIR/$1
+ echo "adding $1"
+ fi
+else
+ echo "couldn't find $SCRIPT_DIR/$1"
+fi
diff --git a/abs/core/live-installer/autocard.py b/abs/core/live-installer/autocard.py
new file mode 100755
index 0000000..b59b8d6
--- /dev/null
+++ b/abs/core/live-installer/autocard.py
@@ -0,0 +1,302 @@
+#!/usr/bin/python
+# import MySQL module
+#jm
+import MySQLdb
+import sys
+import getopt
+import socket
+import os
+import time
+import string
+import glob
+from string import letters
+from string import digits
+
+def INSERTCARD_INTOMYTH(Device,Driver,Cardvendor):
+ global currenthostname
+ print Device
+ print Driver,
+ print Cardvendor
+ cursor = db.cursor()
+ insert = "false"
+ if Driver == "ivtv" :
+ cardtype="MPEG"
+ defaultinput="Tuner 1"
+ insert="true"
+ if Cardvendor == "pcHDTV HD3000 HDTV":
+ insert="false"
+ cardtype ="whocares"
+
+ #print insert
+ if insert == "true" :
+ cursor.execute("INSERT INTO capturecard (videodevice,cardtype,defaultinput,hostname) VALUES(%s,%s,%s,%s);",(Device,cardtype,defaultinput,currenthostname))
+
+def INSERTHDR_INTOMYTH(deviceid,tuner_number):
+ cardtype='HDHOMERUN'
+ defaultinput='MPEG2TS'
+ global currenthostname
+ print deviceid
+ print cardtype
+ print defaultinput
+ print tuner_number
+ cursor = db.cursor()
+ #print insert
+ cursor.execute("INSERT INTO capturecard (videodevice,cardtype,defaultinput,dbox2_port ,hostname) VALUES(%s,%s,%s,%s,%s);",(deviceid,cardtype,defaultinput,tuner_number,currenthostname))
+
+def INSERTAUTOCARD():
+ global cardlist
+ global currenthostname
+ # create a cursor
+ cursor = db.cursor()
+
+
+ for i in range( 1 , len(cardlist)):
+ insert = "false"
+# print cardlist[i]
+ Device=cardlist[i][0]
+ Driver=cardlist[i][1]
+ Cardvendor=cardlist[i][2]
+ Businfo=cardlist[i][3]
+ if Driver == "ivtv" :
+ insert="true"
+ devicestatus="unused"
+ if Cardvendor == "pcHDTV HD3000 HDTV":
+ insert="false"
+ cardtype ="whocares"
+ if Driver == "hdr":
+ insert="true"
+ devicestatus="unused"
+
+ if insert == "true" :
+ cursor.execute("delete from autocard where uniqid=%s;",(Businfo))
+ if Driver=="hdr":
+ Cardvendor="HDHOMERUN Tuner 1"
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+ Cardvendor="HDHOMERUN Tuner 2"
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+
+ else:
+ cursor.execute("INSERT INTO autocard (dev,driver,description,uniqid,devicestatus,hostname) VALUES(%s,%s,%s,%s,%s,%s);",(Device,Driver,Cardvendor,Businfo,devicestatus,currenthostname))
+
+
+
+def PRINTINFO():
+ global cardlist
+
+ for list in cardlist:
+ if list != "_placeholder_":
+ print list
+ #print "-------------"
+
+def GATHER_HDR():
+ global cardlist
+ command="/usr/bin/hdhomerun_config --discover"
+ results=os.popen(command,'r')
+ line=results.readline()
+ if line.strip().split()[0] == "no":
+ print "HDHOMERUN not detected"
+ else:
+ print line
+ hdrdevice=line.strip().split()[2]
+ print hdrdevice
+ Driver="hdr"
+ Device=hdrdevice
+ Cardtype="HDHOMERUN"
+ Businfo=hdrdevice
+ cardprops = [Device,Driver , Cardtype , Businfo]
+ cardlist.append(cardprops)
+
+
+def GATHER_v4l_CARDS():
+ global cardlist
+ cardlist=["_placeholder_"]
+ # print "Looking for v4l cards"
+ try:
+ filelist = os.listdir('/dev/v4l/')
+ except OSError:
+ filelist=" "
+ #fakelist=['/dev/v4l/video3', 'ivtv', 'WinTV PVR 500 (unit #2)', '0000:04:09.0']
+ #cardlist.append(fakelist)
+ try:
+ filelist = glob.glob("/dev/v4l/video?")
+ Driver=""
+ Cardtype=""
+ Businfo=""
+ numcards = 0
+ for Device in filelist:
+ #print card
+ numcards = numcards+1
+ cmd = 'v4l2-ctl -D -d' + Device
+ for line in os.popen(cmd).readlines():
+ #print line
+ pos = string.find(line,"Driver name")
+ if pos >=0:
+ splitline= line.split(':')
+ Driver=splitline[1].strip()
+ pos = string.find(line,"Card type")
+ if pos >=0:
+ splitline= line.split(':')
+ Cardtype=splitline[1].strip()
+
+ pos = string.find(line,"Bus info")
+ if pos >=0:
+ splitline= line.split(':',1)
+ Businfo=splitline[1].strip()
+
+ #print Device,Driver , Cardtype , Businfo,numcards
+ cardprops = [Device,Driver , Cardtype , Businfo]
+ cardlist.append(cardprops)
+ except IOError:
+ print "no v4l cards found"
+ sys.exit(2)
+
+
+def WRITEUDEV_IVTV():
+ global insertmyth
+ cursor = db.cursor()
+ #add ivtv,cid lookup loop through until empty.
+ cursor.execute("select distinct(uniqid) from autocard where driver='ivtv' and devicestatus='will-add'")
+ cidrows = cursor.fetchall()
+ for row in cidrows:
+ cid=row[0]
+ cursor.execute("select dev,driver,description,devicestatus,hostname from autocard where uniqid=%s limit 1;",(cid))
+ result = cursor.fetchone()
+ description=result[2]
+ driver='DRIVERS==\"ivtv\"'
+ ATTRNAME='ATTR{name}=="ivtv? encoder MPG"'
+ KERNELS='KERNELS==\"'
+ KERNELS+=cid
+ KERNELS+="\""
+ #filter out non digit or chars
+ keep=letters.join(digits)
+ description=filter(lambda c: c in keep, description)
+ devnode="ivtv/"
+ #devnode+=description + "_"
+ udevcid=cid.partition(":")
+ devnode+=udevcid[2]
+ devnode+="_video"
+ UDEV_RULE=driver +', '+ATTRNAME+', '+ KERNELS +', ' + 'NAME=\"' + devnode + '"'
+ print "Here is the udev rule"
+ print UDEV_RULE
+ filename='/etc/udev/rules.d/11-ivtv-'+cid+'.rules'
+ file = open(filename,'w')
+ file.write(UDEV_RULE)
+ if ( insertmyth == "true"):
+ devnode="/dev/"+devnode
+ INSERTCARD_INTOMYTH(devnode,"ivtv",description)
+ cursor.execute("update autocard set devicestatus='done' where uniqid=%s;",(cid))
+#now insert HDR
+ cursor.execute("select distinct(uniqid),description from autocard where driver='hdr' and devicestatus='will-add'")
+ cidrows = cursor.fetchall()
+ for row in cidrows:
+ if ( insertmyth == "true"):
+ deviceid=row[0]
+ #cardtype="HDHOMRUN"
+ #defaultinput="MPEG2TS"
+ dbox2_port=row[1]
+ tuner_number=dbox2_port.rpartition(' ')[2]
+ INSERTHDR_INTOMYTH(deviceid,tuner_number)
+ cursor.execute("update autocard set devicestatus='done' where uniqid=%s and description=%s;",(deviceid,dbox2_port))
+
+
+
+def CLEARAUTOCARD():
+ cursor = db.cursor()
+ cursor.execute("delete from autocard")
+
+def RELOADUDEV():
+ print "relaoding udev rules"
+ os.system('udevcontrol reload_rules')
+ os.system('rmmod ivtv')
+ os.system('udevtrigger')
+
+
+def usage():
+ print " -h help"
+ print " -g gather and print out the found cards"
+ print " -w write out the udev rules"
+ print " -i insert cards into myth that are marked will-add(only used with -w)"
+ print " -r reload udev rules"
+ print " -c clear the autocard db"
+
+def main(argv):
+ global db
+ global cardlist
+ global currenthostname
+ currenthostname=""
+ writeudev="false"
+ global insertmyth
+ insertmyth ="false"
+
+ db = MySQLdb.connect(host="localhost", user="mythtv", passwd="mythtv", db="mythconverg")
+ try:
+ cursor = db.cursor()
+ cursor.execute("describe autocard;")
+ except MySQLdb.Error, e:
+ cursor.execute("create table autocard(dev varchar(50),driver varchar(50),description varchar(50),uniqid varchar(50), devicestatus varchar(50),hostname varchar(50));")
+ print "table created"
+
+ if ( currenthostname == "" ):
+ currenthostname = socket.gethostname()
+
+
+ try:
+ opts, args = getopt.getopt(argv, "hgwirc", ["help", "gathercards", "writeudev" ,"insert" , "reloadudev" , "clearautocard"] )
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage()
+ sys.exit()
+ elif opt in ( "-g" , "--gathercards"):
+ GATHER_v4l_CARDS()
+ GATHER_HDR()
+ INSERTAUTOCARD()
+ PRINTINFO()
+ elif opt in ("-w", "--writeudev"):
+ writeudev="true"
+ elif opt in ("-i", "--insert"):
+ insertmyth="true"
+ elif opt in ( "-r" , "--reloadudev"):
+ RELOADUDEV()
+ elif opt in ( "-c" , "--clearautocard"):
+ CLEARAUTOCARD()
+
+
+ if ( writeudev == "true"):
+ WRITEUDEV_IVTV()
+
+
+
+
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
+
+
+
+
+#mysql> create table autocard(dev varchar(50),driver varchar(50),description varchar(50),uniqid varchar(50), devicestatus varchar(50),hostname varchar(50));
+#Query OK, 0 rows affected (0.14 sec)
+
+#mysql> describe autocard;
+#+--------------+-------------+------+-----+---------+-------+
+#| Field | Type | Null | Key | Default | Extra |
+#+--------------+-------------+------+-----+---------+-------+
+#| dev | varchar(50) | YES | | NULL | |
+#| driver | varchar(50) | YES | | NULL | |
+#| description | varchar(50) | YES | | NULL | |
+#| uniqid | varchar(50) | YES | | NULL | |
+#| devicestatus | varchar(50) | YES | | NULL | |
+#| hostname | varchar(50) | YES | | NULL | |
+#+--------------+-------------+------+-----+---------+-------+
+
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/bpopup-ui.xml b/abs/core/live-installer/bpopup-ui.xml
new file mode 100755
index 0000000..df0598b
--- /dev/null
+++ b/abs/core/live-installer/bpopup-ui.xml
@@ -0,0 +1,164 @@
+<!--
+
+ This is a myth style theme file for mythwelcome
+
+ (c) 2005 by a whole bunch of people associated with MythTV
+
+-->
+<mythuitheme>
+
+ <window name="welcome_screen">
+
+ <!--
+
+ First, define all the fonts we need on this screen
+
+ -->
+ <font name="title" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>24</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="time" face="Arial">
+ <color>#9999cc</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="label" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>18</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="info" face="Arial">
+ <color>#ffffff</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="biginfo" face="Arial">
+ <color>#ffffff</color>
+ <size>50</size>
+ <bold>yes</bold>
+ </font>
+ <font name="warning" face="Arial">
+ <color>#ff0000</color>
+ <dropcolor>#000000</dropcolor>
+ <size>16</size>
+ <shadow>2,2</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="buttons" face="Arial">
+ <color>#ffff00</color>
+ <size>14</size>
+ <bold>yes</bold>
+ </font>
+
+ <container name="main_display">
+ <area>0,0,800,600</area>
+
+ <textarea name="title" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>title</font>
+ <area>50,40,700,40</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ time
+ -->
+ <textarea name="time_text" draworder="0" align="right">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>660,520,110,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="date_text" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>0,60,800,70</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ current myth status
+ -->
+
+ <textarea name="status_text" draworder="1" align="center">
+ <multiline>yes</multiline>
+ <font>info</font>
+ <area>20,70,760,60</area>
+ <value>MythTV is idle and will shutdown shortly.</value>
+ </textarea>
+
+ <!--
+ current recordings status
+ -->
+
+ <textarea name="recording_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,110,760,30</area>
+ <!--<value>Percent Complete </value>-->
+ <value></value>
+ </textarea>
+
+ <textarea name="recording_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,110,760,150</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ next scheduled recording status
+ -->
+
+ <textarea name="scheduled_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,320,760,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="scheduled_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,400,760,120</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ scheduled recordings conflict warning
+ -->
+
+ <textarea name="conflicts_text" draworder="1" align="center">
+ <font>warning</font>
+ <area>20,490,760,30</area>
+ <value>WARNING: There are conflicting scheduled recordings!</value>
+ </textarea>
+
+ <!--
+ start frontend button
+
+ <textbutton name="startfrontend_button" draworder="1">
+ <position>81,535</position>
+ <font>buttons</font>
+ <image function="on" filename="mw_text_button_on.png"></image>
+ <image function="off" filename="mw_text_button_off.png"></image>
+ <image function="pushed" filename="mw_text_button_pushed.png"></image>
+ </textbutton>
+
+ -->
+
+ </container>
+
+ </window>
+
+</mythuitheme>
diff --git a/abs/core/live-installer/build_diskless.sh b/abs/core/live-installer/build_diskless.sh
new file mode 100755
index 0000000..4dfd5fc
--- /dev/null
+++ b/abs/core/live-installer/build_diskless.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+#CD=/mnt/cd
+. /etc/profile
+. /etc/systemconfig
+
+TFTP=/data/srv/tftp
+CD=/data/srv/tftp/live
+DESTCD=/data/srv/tftp/CD
+BASE=/data/srv/tftp/masterbuild
+
+MODULES=$DESTCD/MythVantage/base/
+myip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+SRCFILES=$BASE/mnt/live/mnt/MythVantage/base/
+
+function log () {
+echo $1
+}
+
+function check_xvfb () {
+export DISPLAY=127.0.0.1:25
+ Xvfb -ac :25 &
+
+}
+
+
+function create_base_image() {
+echo $SRCFILES
+if [ -f $SRCFILES/data.lzm ]
+then
+ mkdir $HOST_IMG_DIR
+ cd $SRCFILES
+ echo "Creating image.." > $BASE/tmp/.install_state
+ LIST=`ls *.lzm`
+ for i in $LIST
+ do
+ echo $i
+ echo $i > $BASE/tmp/.install_percent
+ lzm2dir $i \/$HOST_IMG_DIR
+ done
+
+ for i in sys proc dev tmp
+ do
+ mkdir /$HOST_IMG_DIR/$i
+ done
+
+ chmod 777 /$HOST_IMG_DIR/tmp
+ mknod /$HOST_IMG_DIR/dev/null c 1 3
+ mknod /$HOST_IMG_DIR/dev/null c 1 5
+ mknod /$HOST_IMG_DIR/dev/console c 5 1
+ chmod +s /$HOST_IMG_DIR/usr/bin/Xorg
+ chmod +s /$HOST_IMG_DIR/usr/bin/crontab
+ chmod +s /$HOST_IMG_DIR/usr/bin/sudo
+ chmod +s /$HOST_IMG_DIR/bin/mount
+ #copy fstab from masterbuild
+ cp -f $BASE/etc/fstab /$HOST_IMG_DIR/etc/fstab
+ echo "Done: installing data" > $BASE/tmp/.install_state
+ return 0
+else
+ echo "Error: no modules" > $BASE/tmp/.install_state
+ log "couldn't find modules to install"
+ return 1
+fi
+}
+
+function configure_image () {
+ echo "Configuring system" > $BASE/tmp/.install_state
+ cp -f $BASE/etc/systemconfig $HOST_IMG_DIR/etc/systemconfig
+ chown root:mythtv $HOST_IMG_DIR/etc/systemconfig
+ chmod 775 "$HOST_IMG_DIR" /etc/systemconfig
+ cp /etc/mtab $HOST_IMG_DIR/etc/mtab
+ mount --bind /dev $HOST_IMG_DIR/dev
+
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,this_is_install
+#copy syssettings template to here.
+ SE=$BASE$TEMPLATES/settings/syssettings
+ mkdir -p $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+ cp -rp $SE/* ${HOST_IMG_DIR}/$TEMPLATES/settings/syssettings
+ chown root:mythtv $HOST_IMG_DIR/etc/systemconfig
+ chown -R mythtv:mythtv $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+ chmod -R 775 $HOST_IMG_DIR/$TEMPLATES/settings/syssettings
+#update remotedb with this host settings
+ OLDDISPLAY=$DISPLAY
+ check_xvfb
+ chroot $HOST_IMG_DIR $MV_ROOT/bin/MythVantage -t restore,default_1
+ chroot $HOST_IMG_DIR $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ if [ ! $? = 0 ]
+ then
+ touch $mountpoint/tmp/.dbsysfailed
+ chmod 777 $mountpoint/tmp/.dbsysfailed
+ else
+ #Run second time
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,this_is_install
+ chroot "$HOST_IMG_DIR" $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ fi
+chroot "$HOST_IMG_DIR" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install
+cp -f $BASE/etc/X11/xorg.conf $HOST_IMG_DIR/etc/X11/xorg.conf
+echo "Done" > $BASE/tmp/.install_state
+DISPLAY=$OLDDISPLAY
+
+#cp /tmp/mythvantage_install.log $HOST_IMG_DIR/var/log/
+}
+
+function create_tftp_boot () {
+
+ CFGFILE=$TFTP/pxelinux.cfg/01-$2
+ echo "DEFAULT mythfe" > $CFGFILE
+ echo "LABEL mythfe" >> $CFGFILE
+ echo "kernel masterbuild/boot/vmlinuz26STB" >> $CFGFILE
+ echo "append vga=normal root=/dev/nfs rw netboot nfsroot=$myip:/data/srv/tftp/$1 ip=dhcp init=/sbin/runit" >> $CFGFILE
+ echo "TIMEOUT 2" >> $CFGFILE
+}
+
+function create_nfs_export () {
+echo "/data/srv/tftp/$1 *(rw,no_root_squash,anonuid=1000,anongid=1000) " >> /etc/exports
+exportfs -arv
+}
+
+#-------------------------------------------------------------------------------MAIN PROGRAM ---------------------------------------------------------------------
+if [ x$1 = x -o x$2 = x ]
+then
+ echo "usage: hostname macaddress"
+ exit 1
+fi
+
+image_name=$1
+mac_address=`echo $2| tr "[:upper:]" "[:lower:]"`
+
+echo "using image_name of $image_name"
+echo "using mac_address of $mac_address"
+
+HOST_IMG_DIR=$TFTP/$1
+
+create_base_image $image_name
+configure_image
+umount $HOST_IMG_DIR/dev
+create_tftp_boot $image_name $mac_address
+create_nfs_export $image_name
+
+
+
+
+#create_dhcp_entry $mac_address
+
diff --git a/abs/core/live-installer/copy-to-mythbase.sh b/abs/core/live-installer/copy-to-mythbase.sh
new file mode 100755
index 0000000..af89f52
--- /dev/null
+++ b/abs/core/live-installer/copy-to-mythbase.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+DATADIR="../mythtv/stable/mythtv/src/mythtv-0.21/programs"
+mkdir $DATADIR/mythinstall
+mkdir $DATADIR/mythbeselect
+rm mythinstall.bin
+rm mythbeselect.bin
+ln -n `pwd`/mythinstall/* $DATADIR/mythinstall
+ln -n `pwd`/mythbeselect/* $DATADIR/mythbeselect
+
+ln -s $DATADIR/mythbeselect/mythbeselect ./mythbeselect.bin
+ln -s $DATADIR/mythinstall/mythinstall ./mythinstall.bin
diff --git a/abs/core/live-installer/create_master.sh b/abs/core/live-installer/create_master.sh
new file mode 100755
index 0000000..1e641b4
--- /dev/null
+++ b/abs/core/live-installer/create_master.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#CD=/mnt/cd
+CD=/data/srv/tftp/live
+DESTCD=/data/srv/tftp/CD
+DEST=/data/srv/tftp/masterbuild
+MODULES=$DESTCD/MythVantage/base/
+myip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+
+mkdir -p $DESTCD
+mkdir -p $DEST
+
+mount $CD
+status=0
+if [ -f $CD/MythVantage/base/data.lzm ]
+then
+ status=0
+else
+ status=1
+fi
+if [ x$status = x0 ]
+then
+ echo "copying to disk"
+ cp -rp $CD/* $DESTCD
+ cd $MODULES
+ for i in *.lzm
+ do
+ echo $i
+ lzm2dir $i \/$DEST
+ done
+ for i in sys proc dev tmp
+ do
+ mkdir $DEST/$i
+ done
+ chmod 777 /$DEST/tmp
+ mknod $DEST/dev/null c 1 3
+ mknod $DEST/dev/null c 1 5
+ mknod $DEST/dev/console c 5 1
+ chmod +s $DEST/usr/bin/Xorg
+ chmod +s $DEST/usr/bin/crontab
+ chmod +s $DEST/usr/bin/sudo
+ chmod +s $DEST/bin/mount
+fi
+if [ ! -f $DEST/etc/fstab.bak ]
+then
+ cp $DEST/etc/fstab $DEST/etc/fstab.bak
+fi
+tac $DEST/etc/fstab.bak|tail +4|tac > $DEST/etc/fstab
+echo "$myip:/data/srv/tftp/masterbuild / nfs" >> $DEST/etc/fstab
+echo "/data/srv/tftp/masterbuild *(rw,no_root_squash,anonuid=1000,anongid=1000)" >> /etc/exports
+
+
+exportfs -arv
+
+#copy in the modules
+mkdir -p $DEST/mnt/live/mnt/
+mv $DESTCD/* $DEST/mnt/live/mnt/
+
diff --git a/abs/core/live-installer/file_time_offset.py b/abs/core/live-installer/file_time_offset.py
new file mode 100755
index 0000000..f2973d0
--- /dev/null
+++ b/abs/core/live-installer/file_time_offset.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+
+
+import time
+import os
+import glob
+import getopt
+import sys
+def main(argv):
+ filecount=0
+# root = "/tmp"
+# offset = 4
+ now = int(time.time())
+
+
+ try:
+ opts, args = getopt.getopt(argv, "hs:d:")
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ print "-s seconds -d /testdir"
+ print "default if 4 seconds"
+ sys.exit()
+ elif opt in ( "-s" ):
+ offset = int(arg)
+ elif opt in ("-d"):
+ root = arg
+
+ for item in glob.glob(root+"/*"):
+ lastmodDate = os.path.getmtime(item)
+ tdiff= now-lastmodDate
+ #print tdiff, offset
+
+ if tdiff > offset:
+ filecount+=1
+ print filecount
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/abs/core/live-installer/install-ui.xml b/abs/core/live-installer/install-ui.xml
new file mode 100755
index 0000000..0ec9ddb
--- /dev/null
+++ b/abs/core/live-installer/install-ui.xml
@@ -0,0 +1,175 @@
+<!--
+
+ This is a myth style theme file for mythwelcome
+
+ (c) 2005 by a whole bunch of people associated with MythTV
+
+-->
+<mythuitheme>
+
+ <window name="welcome_screen">
+
+ <!--
+
+ First, define all the fonts we need on this screen
+
+ -->
+ <font name="title" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>24</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="time" face="Arial">
+ <color>#9999cc</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="label" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>18</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="info" face="Arial">
+ <color>#ffffff</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="biginfo" face="Arial">
+ <color>#ffffff</color>
+ <size>50</size>
+ <bold>yes</bold>
+ </font>
+ <font name="warning" face="Arial">
+ <color>#ff0000</color>
+ <dropcolor>#000000</dropcolor>
+ <size>16</size>
+ <shadow>2,2</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="buttons" face="Arial">
+ <color>#ffff00</color>
+ <size>14</size>
+ <bold>yes</bold>
+ </font>
+ <font name="tinyinfo" face="Arial">
+ <color>#9999cc</color>
+ <size>12</size>
+ <bold>no</bold>
+ </font>
+
+ <container name="main_display">
+ <area>0,0,800,600</area>
+
+ <textarea name="title" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>title</font>
+ <area>50,40,700,40</area>
+ <value>LinHes: The Linux Home Entertainment System </value>
+ </textarea>
+
+ <!--
+ time
+ -->
+ <textarea name="time_text" draworder="0" align="right">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>660,520,110,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="date_text" draworder="0" align="hcenter">
+ <multiline>yes</multiline>
+ <font>time</font>
+ <area>20,75,740,100</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ current myth status
+ -->
+
+ <textarea name="status_text" draworder="1" align="center">
+ <multiline>yes</multiline>
+ <font>info</font>
+ <area>20,100,760,60</area>
+ <value>MythTV is idle and will shutdown shortly.</value>
+ </textarea>
+
+ <!--
+ current recordings status
+ -->
+
+ <textarea name="recording_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,140,760,30</area>
+ <!--<value>Percent Complete </value>-->
+ <value></value>
+ </textarea>
+
+ <textarea name="recording_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,140,760,150</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ next scheduled recording status
+ -->
+
+ <textarea name="scheduled_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,320,760,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="scheduled_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,400,760,120</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="mythvantage_text" draworder="1" align="right">
+ <multiline>no</multiline>
+ <font>tinyinfo</font>
+ <area>20,560,760,30</area>
+ <value></value>
+ </textarea>
+ <!--
+ scheduled recordings conflict warning
+ -->
+
+ <textarea name="conflicts_text" draworder="1" align="center">
+ <font>warning</font>
+ <area>20,490,760,30</area>
+ <value>WARNING: There are conflicting scheduled recordings!</value>
+ </textarea>
+
+ <!--
+ start frontend button
+
+ <textbutton name="startfrontend_button" draworder="1">
+ <position>81,535</position>
+ <font>buttons</font>
+ <image function="on" filename="mw_text_button_on.png"></image>
+ <image function="off" filename="mw_text_button_off.png"></image>
+ <image function="pushed" filename="mw_text_button_pushed.png"></image>
+ </textbutton>
+
+ -->
+
+ </container>
+
+ </window>
+
+</mythuitheme>
diff --git a/abs/core/live-installer/install_db_chroot.sh b/abs/core/live-installer/install_db_chroot.sh
new file mode 100755
index 0000000..514dd3c
--- /dev/null
+++ b/abs/core/live-installer/install_db_chroot.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+. /etc/profile
+. /etc/systemconfig
+#myhost=`cat /etc/hostname`
+myhost=$hostname
+hostname $myhost
+mount -t proc none /proc
+pacman --noconfirm -Sf mysql
+/etc/rc.d/mysqld
+
+status=1
+mysqlstatus=1
+while [ ! $status = 0 ]
+do
+ /etc/rc.d/mysqld stop
+ sleep 1
+ /etc/rc.d/mysqld start
+ mysqlstatus=$?
+ if [ $mysqlstatus = 0 ]
+ then
+ mysql -e "show databases;"
+ showstatus=$?
+ if [ $showstatus = 0 ]
+ then
+ pacman --noconfirm -R mythdb-initial
+ pacman --noconfirm -S mythdb-initial
+ $MV_ROOT/bin/restore_default_settings.sh -c load
+ DISPLAY=127.0.0.1:0 $MV_ROOT/bin/MythVantage -t restore,default_1
+ $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ $MV_ROOT/bin/systemconfig.sh misc,hostype,this_is_install
+ if [ $SystemType = "Master_backend" ]
+ then
+ $MV_ROOT/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ #update database to allow user jobs on this host.
+ $MV_ROOT/bin/restore_default_settings.sh -c USERJOBALLOW
+ $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ #if [ -d /data/srv/mysql/mythconverg ]
+ if [ -d /var/lib/mysql/mythconverg ]
+ then
+ # pacman --noconfirm -R webcalendar
+ # pacman --noconfirm --nodeps -S webcalendar
+ status=0
+ fi
+ fi
+ fi
+done
+#/etc/rc.d/mysqld stop
+#umount /proc
+
+
+
diff --git a/abs/core/live-installer/install_functions.sh b/abs/core/live-installer/install_functions.sh
new file mode 100755
index 0000000..0c43c97
--- /dev/null
+++ b/abs/core/live-installer/install_functions.sh
@@ -0,0 +1,484 @@
+#!/bin/bash
+. /etc/profile
+disk=$2
+mountpoint=new_boot
+
+#-------------------------------------------
+MYTHDBUSER=mythtv
+MYTHTVPASSWD=mythtv
+CMDLINE=$(cat /proc/cmdline)
+hostname=`hostname`
+MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD mythconverg -B --exec"
+BASE=""
+
+function update_db_settings () {
+
+ $MYSQLCMD_C "delete from settings where value='${1}' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set value='${1}', data='${2}' , hostname=\"$hostname\";"
+}
+
+function random_theme () {
+THEMES="basic-blue
+basic-green
+basic-red
+basic-purple
+basic-amber"
+
+theme=($THEMES) # Read into array variable.
+
+num_themes=${#theme[*]} # Count how many elements.
+
+pick=${theme[$((RANDOM%num_themes))]}
+echo "Selected $pick as the theme"
+update_db_settings Theme "$pick"
+}
+
+
+function setupremote {
+ mv $BASE/etc/lircd.conf $BASE/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
+ if [ -d $TEMPLATES/remotes/$Remotetype ]
+ then
+ cd $TEMPLATES/remotes/$Remotetype
+ for i in lircd*
+ do
+ cat $i >> $BASE/etc/lircd.conf
+ done
+ cp lircrc $BASE/etc/lircrc
+ chmod 755 /etc/lircrc
+ update_db_settings HostRemoteType "$Remotetype"
+ /usr/sbin/lircd -d /dev/lirc0
+ mkdir /root/.mythtv
+ ln -s /etc/lircrc /root/.mythtv/lircrc
+ fi
+}
+
+function scan_for_usb_remote () {
+echo "Scanning for usb receiver/remote"
+while read line
+do
+ USBID=`echo "$line"|cut -f1`
+ lsusb -d "$USBID" > /dev/null 2>/dev/null
+ if [ $? = 0 ]
+ then
+ Remotetype=`echo "$line"|cut -f2`
+ echo "found $Remotetype"
+ setupremote
+ break
+ fi
+done <$BASE/$TEMPLATES/remotes/receiver_usb.id
+}
+
+function rest_of_network () {
+ #netmask
+ echo $CMDLINE | grep -q netmask
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*netmask=}
+ NETMASK=${TEMPVAR%% *}
+ /sbin/ifconfig eth0 $IP netmask $NETMASK
+ nm=`/usr/bin/nmconv.py -obits $NETMASK`
+ NETMASK="/$nm $NETMASK"
+ echo $NETMASK
+ update_db_settings HostNETMASK${MYTHDEFAULT} "$NETMASK"
+ else
+ echo "netmask not found"
+ fi
+ #gateway
+ echo $CMDLINE | grep -q gateway
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*gateway=}
+ GATEWAY=${TEMPVAR%% *}
+ /sbin/route add default gw $GATEWAY
+ update_db_settings HostGW${MYTHDEFAULT} "$GATEWAY"
+
+ else
+ echo "gateway not found"
+ fi
+
+ #dns
+ echo $CMDLINE | grep -q dns
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*dns=}
+ DNS=${TEMPVAR%% *}
+ echo "nameserver $DNS" >> /etc/resolv.conf
+ update_db_settings HostDNS${MYTHDEFAULT} "$DNS"
+ else
+ echo "DNS not found"
+ fi
+}
+
+function init_network {
+ echo $CMDLINE |grep -q netdev
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*netdev=}
+ MYTHDEFAULT=${TEMPVAR%% *}
+ else
+ MYTHDEFAULT="eth0"
+ fi
+
+
+
+ echo $CMDLINE | grep -q ip
+ if [ $? = 0 ]
+ then
+ update_db_settings HostDefaulteth0 0
+ update_db_settings HostDefault${MYTHDEFAULT} 1
+
+ update_db_settings HostActiveonbooteth0 0
+ update_db_settings HostActiveonboot${MYTHDEFAULT} 1
+ update_db_settings HostNetDevice ${MYTHDEFAULT}
+
+ TEMPVAR=${CMDLINE#*ip=}
+ IP=${TEMPVAR%% *}
+ if [ x$IP = xdhcp ]
+ then
+ /sbin/dhcpcd $MYTHDEFAULT
+ update_db_settings HostUseDHCP${MYTHDEFAULT} 0
+ else
+ /sbin/ifconfig ${MYTHDEFAULT} $IP
+ update_db_settings HostUseDHCP${MYTHDEFAULT} 1
+ update_db_settings HostIP${MYTHDEFAULT} "$IP"
+ rest_of_network
+ fi
+ fi
+}
+
+function init_remote {
+ echo $CMDLINE | grep -q remoteport
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*remoteport=}
+ REMOTEPORT=${TEMPVAR%% *}
+ if [ x"$ReceiverType" = "xSerial" ]
+ then
+ if [ -e /dev/$REMOTEPORT ]
+ then
+ /usr/bin/setserial /dev/$REMOTEPORT uart none
+ /sbin/modprobe lirc_serial
+ update_db_settings HostReceiverType Serial
+ update_db_settings HostSerialPortlirc "$REMOTEPORT"
+ fi
+ fi
+
+ fi
+
+ echo $CMDLINE | grep -q remote
+ if [ $? = 0 ]
+ then
+ TEMPVAR=${CMDLINE#*remote=}
+ Remotetype=${TEMPVAR%% *}
+ setupremote
+ else
+ scan_for_usb_remote
+ fi
+}
+
+#-----------------------
+
+#set -x
+
+partition_it () {
+ROOT=$1
+DATA=$2
+SWAP=$3
+
+if [ ! x$SWAP = xNO ]
+ then
+ SWAPLINE=",$SWAP,S"
+ MKSWAPCMD="mkswap /dev/${disk}2"
+ else
+ SWAPLINE=",0,0"
+ MKSWAPCMD=""
+ fi
+
+if [ x$DATA = xALL ]
+then
+ DATALINE=",,,"
+ EXTRALINE=""
+else
+ DATALINE=",$DATA,,"
+ EXTRALINE=",0,,"
+fi
+sfdisk /dev/$disk -uM << EOF
+,$1,,*
+$SWAPLINE
+$DATALINE
+$EXTRALINE
+;
+EOF
+
+$MKSWAPCMD
+#sfdisk -l /dev/$disk
+}
+
+
+function fscmd () {
+
+case $1 in
+ reiserfs) FSCMDC="mkreiserfs -q -l ROOT"
+ ;;
+
+ xfs) FSCMDC="mkfs -t $1 -f"
+ ;;
+ ext3) FSCMDC="mkfs.ext3"
+ ;;
+ jfs) FSCMDC="mkfs.jfs -q "
+ ;;
+ *) FSCMDC="echo $1"
+ ;;
+
+esac
+}
+
+format_it () {
+ fscmd $1
+ $FSCMDC /dev/${disk}1| tr -s [:cntrl:] \\n
+ fscmd $2
+ $FSCMDC /dev/${disk}3| tr -s [:cntrl:] \\n
+}
+
+mount_it () {
+ if [ ! -d \/$mountpoint ]
+ then
+ mkdir \/$mountpoint
+ fi
+ mount /dev/${disk}1 \/$mountpoint
+ mkdir \/$mountpoint/data
+ mount /dev/${disk}3 \/$mountpoint/data
+}
+
+unmount_it () {
+ umount /dev/${disk}1
+ umount /dev/${disk}3
+}
+
+#linux-live version of copy_it
+# copy_it () {
+# #rsync -rvp --exclude=/mnt --exclude=\/$mountpoint / \/$mountpoint
+# lzmdir=`find /mnt/live/mnt -name data.lzm -execdir pwd \;| tail -1`
+# cd $lzmdir
+# if [ x$1 = xALL ]
+# then
+# LIST=`ls *.lzm`
+# else
+# LIST=`echo $1 | tr , " " `
+# fi
+#
+# for i in $LIST
+# do
+# echo "Transferring $i"
+# lzm2dir $i \/$mountpoint
+# done
+# for i in sys proc dev tmp
+# do
+# mkdir /$mountpoint/$i
+#
+# done
+# chmod 777 /$mountpoint/tmp
+# mknod /$mountpoint/dev/null c 1 3
+# mknod /$mountpoint/dev/null c 1 5
+# mknod /$mountpoint/dev/console c 5 1
+# chmod +s /$mountpoint/usr/bin/Xorg
+# chmod +s /$mountpoint/usr/bin/crontab
+# chmod +s /$mountpoint/usr/bin/sudo
+# chmod +s /$mountpoint/bin/mount
+#
+# }
+
+copy_it () {
+
+ if [ x$1 = xALL ]
+ then
+ echo "Transferring system"
+ unsquashfs -f -d /$mountpoint /.livesys/medium/system.sqf
+ else
+ echo "Upgrading system"
+ unsquashfs -e $1 -f -d /$mountpoint /.livesys/medium/system.sqf
+ fi
+
+ for i in sys proc dev tmp
+ do
+ mkdir /$mountpoint/$i
+
+ done
+ chmod 777 /$mountpoint/tmp
+ mknod /$mountpoint/dev/null c 1 3
+ mknod /$mountpoint/dev/null c 1 5
+ mknod /$mountpoint/dev/console c 5 1
+ chmod +s /$mountpoint/usr/bin/Xorg
+ chmod +s /$mountpoint/usr/bin/crontab
+ chmod +s /$mountpoint/usr/bin/sudo
+ chmod +s /$mountpoint/bin/mount
+
+}
+
+
+device_node () {
+ cd /dev
+ mknod hda b 3 0
+ mknod hda1 b 3 1
+ mknod hda2 b 3 2
+ mknod hda3 b 3 3
+ mknod hda4 b 3 4
+ mknod hda5 b 3 5
+ mknod hda6 b 3 6
+ mknod hda7 b 3 7
+ mknod hda8 b 3 8
+ mknod sda b 8 0
+ mknod sda1 b 8 1
+ mknod sda2 b 8 2
+ mknod sda3 b 8 3
+ mknod sda4 b 8 4
+ mknod sda5 b 8 5
+ mknod sda6 b 8 6
+ mknod sda7 b 8 7
+ mknod sda8 b 8 8
+ mknod sdb b 8 16
+ mknod sdb1 b 8 17
+ mknod sdb2 b 8 18
+ mknod sdb3 b 8 19
+ mknod sdb4 b 8 20
+ mknod sdb5 b 8 21
+ mknod sdb6 b 8 22
+ mknod sdb7 b 8 23
+ mknod sdb8 b 8 24
+ cd -
+ }
+
+
+function create_fstab()
+{
+echo "creating fstab"
+cat > /$mountpoint/etc/fstab << EOF
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+/dev/cdrom /media/cdrom auto ro,user,noauto,unhide 0 0
+/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0
+UUID=ROOTUID / auto defaults 0 1
+UUID=DATAUID /data auto defaults 0 1
+UUID=SWAPUID swap swap defaults 0 0
+EOF
+
+
+}
+
+
+function find_uuid() {
+ uuid=`blkid -s UUID /dev/$1 |cut -d= -f2|cut -d\" -f2`
+ echo $uuid for $1
+ FOUNDUUID=$uuid
+
+}
+
+
+case $1 in
+ partition_it )
+ #drive ROOT DATA(ALL) SWAP(NO)
+ for i in `mount | grep $disk | awk ' { print $1 } '`
+ do
+ umount $i
+ done
+ swap=`cat /etc/fstab |grep $disk|grep swap|awk ' { print $1 } '`
+ swapoff $swap
+ partition_it $3 $4 $5
+ exit 0
+
+ ;;
+ format_it )
+ device_node
+
+ format_it $3 $4
+ exit 0
+ ;;
+ mount_it )
+ mount_it
+ ;;
+ copy_it )
+ copy_it $3
+
+ ;;
+
+
+ fstab_fix_it)
+ echo $@ >> /tmp/fstab.input
+ if [ ! -f /$mountpoint/etc/fstab ]
+ then
+ create_fstab
+ fi
+ if [ x$5 = xUPGRADE ]
+ then
+ cp -f /tmp/etc/fstab /$mountpoint/etc/fstab
+ fi
+
+# if [ x$5 = xFULL_INSTALL ]
+# then
+ #search for UUID
+ FOUNDUUID=""
+ find_uuid ${2}1
+ ROOTUUID=$FOUNDUUID
+ echo "--"
+ echo $ROOTUUID
+ echo "--"
+ FOUNDUUID=""
+ find_uuid ${2}2
+ SWAPUUID=$FOUNDUUID
+
+ FOUNDUUID=""
+ find_uuid ${2}3
+ DATAUUID=$FOUNDUUID
+# fi
+
+
+
+
+
+ sed -i -e "s/.*\/\ .*$/UUID=$ROOTUUID \/ auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab
+ sed -i -e "s/.*\/data\ .*$/UUID=$DATAUUID \/data auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab
+ sed -i -e "s/.*swap\ .*$/UUID=$SWAPUUID swap swap defaults 0/g" /$mountpoint/etc/fstab
+
+# sed -e "s/\ \/\ .*$/\ \/ $3 defaults 0 1/g"\
+# -e "s/\ \/data .*$/\ \/data $4 defaults 0 1/g" /$mountpoint/etc/fstab > /tmp/fstab
+#
+#
+# cp /tmp/fstab /$mountpoint/etc/fstab
+ ;;
+
+ grub_it )
+ #linux-live
+ #grub-install --recheck --no-floppy --root-directory=/$mountpoint /dev/$disk
+ grub-install --recheck --no-floppy --root-directory=/$mountpoint "(hd0)"
+
+
+ #fixing fstab
+# if [ ! -f /$mountpoint/etc/fstab ]
+# then
+# cp -f /$mountpoint/etc/fstab.install /$mountpoint/etc/fstab
+# fi
+# sed -e s/hda/$disk/g /$mountpoint/etc/fstab > /tmp/newfstab
+# cp -f /tmp/newfstab /$mountpoint/etc/fstab
+
+ #fixing grub/menu.1st
+ FOUNDUUID=""
+ find_uuid ${disk}1
+ ROOTUUID=$FOUNDUUID
+# sed -e s/hda/$disk/g /$mountpoint/boot/grub/menu.lst > /tmp/menu.lst
+
+ sed -i -e "s/root=.\S*/root=\/dev\/disk\/by-uuid\/$ROOTUUID/g" /$mountpoint/boot/grub/menu.lst
+
+
+#cp -f /tmp/menu.lst /$mountpoint/boot/grub/menu.lst
+ #cp /etc/X11/xorg.conf /$mountpoint/etc/X11/xorg.conf
+ mkinitcpio -g /$mountpoint/boot/kernel26.img
+ ;;
+ umount_it)
+
+ umount \/$mountpoint/data
+ umount \/$mountpoint
+esac
+
+
+
diff --git a/abs/core/live-installer/install_proxy.sh b/abs/core/live-installer/install_proxy.sh
new file mode 100755
index 0000000..756c46d
--- /dev/null
+++ b/abs/core/live-installer/install_proxy.sh
@@ -0,0 +1,481 @@
+#!/bin/bash
+#chroot and /tmp
+MVHOSTNAME=mvi
+. /etc/profile
+TEMP_TEMPLATES=/tmp/templates
+disk=$2
+rootfs=$3
+rootsize=$4
+datafs=$5
+datasize=$6
+swapsize=$7
+mountpoint="/new_boot"
+run=$MV_ROOT/bin/install_functions.sh
+. /etc/systemconfig 2>/dev/null
+. $MV_ROOT/bin/networkconfig.sh
+CMDLINE=$(cat /proc/cmdline)
+
+#TEMPNET="Hostip"$default_interface
+#eval MYTHIP=\$${TEMPNET}
+
+
+progress () {
+mypercent=`echo "$1" | cut -d. -f1`
+if [ x$mypercent = x ]
+then
+echo "" > /tmp/.install_percent
+else
+echo "${mypercent}% complete" > /tmp/.install_percent
+fi
+
+
+}
+
+
+
+
+full_install () {
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ rm /tmp/.this_is_upgrade
+ fi
+ echo "Partitioning $disk" > /tmp/.install_state
+ progress 1
+ sleep 1
+ $run partition_it $disk $rootsize $datasize $swapsize
+
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs $datafs
+
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+
+ sleep 1
+ $run copy_it $disk ALL
+ rm $mountpoint/etc/fstab
+ $run fstab_fix_it $disk $rootfs $datafs FULL_INSTALL
+
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+
+ echo "Configuring system" > /tmp/.install_state
+ progress 100
+ sleep 1
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ #run save syssettings to save settings, then copy to new mountpoint
+ $MV_ROOT/bin/restore_default_settings.sh -c save -t syssettings -h $MVHOSTNAME -d 127.0.0.1
+ SE=$TEMPLATES/settings/syssettings
+ mkdir -p ${mountpoint}$SE
+ cp -rp $SE/* ${mountpoint}$SE/
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chown -R mythtv:mythtv ${mountpoint}$SE
+
+ chmod -R 775 ${mountpoint}$SE
+ chmod 775 "$mountpoint"/etc/systemconfig
+ #copy over any updates that might have occured
+ cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
+ chmod -R 755 ${mountpoint}/root
+ cp /etc/mtab "$mountpoint"/etc/mtab
+
+
+ if [ $SystemType = "Master_backend" -o $SystemType = "Standalone" ]
+ then
+ #installing DB to local machine
+ #turn off old live database, so the chroot one can start
+ /etc/rc.d/mysqld stop
+ mount --bind /dev "$mountpoint/dev"
+ chroot "$mountpoint" "$MV_ROOT/bin/install_db_chroot.sh" > /tmp/chrootdb.out
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ echo "stopping mysql in chroot"
+ chroot "$mountpoint" /etc/rc.d/mysqld stop
+ umount "$mountpoint/dev"
+
+ #/etc/rc.d/mysqld start
+ else
+ #update remotedb with this host settings
+ chroot "$mountpoint" DISPLAY=127.0.0.1:0 /usr/local/bin/MythVantage -t restore,default_1
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ if [ ! $? = 0 ]
+ then
+ touch $mountpoint/tmp/.dbsysfailed
+ chmod 777 $mountpoint/tmp/.dbsysfailed
+ else
+ #Run second time
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ fi
+ fi
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced
+ echo "Done" > /tmp/.install_state
+ cp /tmp/mythvantage_install.log $mountpoint/var/log/
+ $run unmount_it $disk
+}
+
+function createsquashlist(){
+if [ -f $1 ]
+then
+ rm -f
+$1
+fi
+for i in bin boot etc home lib opt root sbin usr var
+do
+echo $i >> $1
+done
+
+
+}
+
+
+
+
+function upgrade () {
+ touch /tmp/.this_is_upgrade
+
+ if [ ! x$rootfs = "xDo_not_format" ]
+ then
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs NO
+ fi
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+ sleep 1
+ cp -rf /tmp/etc /new_boot/etc.old
+ cp -rf /tmp/oss /new_boot/var/lib/oss.old
+ #$run copy_it $disk bin.lzm,boot.lzm,etc.lzm,home.lzm,lib.lzm,opt.lzm,root.lzm,sbin.lzm,usr.lzm,var.lzm
+ SQUASHLIST="/tmp/.squashlist"
+ createsquashlist $SQUASHLIST
+ $run copy_it $disk $SQUASHLIST
+ #copy back ssh keys
+
+ cp -rp /data/var/cache/pacman/pkg/* /new_boot/data/var/cache/pacman/pkg/
+ cp -fp /new_boot/etc.old/ssh/*.pub /new_boot/etc/ssh/
+ cp -fp /new_boot/etc.old/ssh/*.key /new_boot/etc/ssh/
+ cp -fp /new_boot/etc.old/ssh/*key /new_boot/etc/ssh/
+
+ #funckeys
+ cadir=/etc/pki/func/ca
+ mv /new_boot/etc/pki /new_boot/etc/pki.new
+ cp -rp /new_boot/etc.old/pki /new_boot/etc/
+ #passwd/shadow/group
+ cp -fp /new_boot/etc.old/passwd /new_boot/etc/
+ cp -fp /new_boot/etc.old/shadow /new_boot/etc/
+ cp -fp /new_boot/etc.old/group /new_boot/etc/
+
+ if [ x$rootfs = "xDo_not_format" ]
+ then
+ #rootfs=`grep ${disk}1 /tmp/etc/fstab |awk ' { print $3 } '`
+ rootfs=`grep \/\ /tmp/etc/fstab |awk ' { print $3 } '`
+ fi
+ #datafs=`grep ${disk}3 /tmp/etc/fstab |awk ' { print $3 } '`
+ datafs=`grep \/data /tmp/etc/fstab |awk ' { print $3 } '`
+ $run fstab_fix_it $disk $rootfs $datafs UPGRADE
+
+ echo "Writing boot sector" > /tmp/.install_state
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+
+ echo "Configuring system" > /tmp/.install_state
+ progress
+ sleep 1
+ cp /etc/mtab "$mountpoint"/etc/mtab
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
+ chmod -R 755 ${mountpoint}/root
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chmod 775 "$mountpoint"/etc/systemconfig
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ #wrap this in a network check_network, no need to update the db if the import worked.
+##### do I need to start mysql?
+ chroot "$mountpoint" DISPLAY=127.0.0.1:0 /usr/local/bin/MythVantage -t restore,default_1
+ chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+ #
+ #Run second time
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
+ chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install
+
+ # fi
+
+ echo "Done" > /tmp/.install_state
+ cp /tmp/mythvantage_install.log $mountpoint/var/log/
+ $run unmount_it $disk
+}
+
+function netboot-full_install () {
+ TEMPVAR=${CMDLINE#*nfsroot=}
+ NFSROOT=${TEMPVAR%% *}
+ NFSROOT=`echo $NFSROOT|cut -d: -f1`
+ MAC=`/sbin/ifconfig eth0|grep HWaddr| cut -d: -f2-|awk '{ print $3}'|tr : -`
+ URL="http://$NFSROOT:1337/diskless.py?HOSTNAME=$hostname&MAC=$MAC"
+ echo "calling $URL"
+ echo "Starting" > /tmp/.install_state
+ curl $URL
+ ${MV_ROOT}/bin/xconfig.sh
+}
+
+function killdhcp () {
+if [ -f /etc/dhcpc/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /etc/dhcpc/dhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /etc/dhcpc/dhcpcd-eth0.pid
+ rm -f /var/run/dhcpcd*
+ fi
+if [ -f /var/run/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /var/run/dhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /var/run/dhcpcd-eth0.pid*
+ fi
+ip address flush dev eth0
+}
+
+
+# function vnc_check() {
+# CMDLINE=$(cat /proc/cmdline)
+# echo $CMDLINE |grep -q vnc
+# USEVNC=$?
+# echo $CMDLINE |grep -q nfsroot
+# NETBOOT=$?
+# echo $USEVNC
+# if [ ! x$USEVNC = x0 ]
+# then
+# echo "not using vnc"
+# if [ ! x$NETBOOT = x0 ]
+# then
+# echo "not using netboot"
+# else
+# echo "using netboot"
+# USEVNC=0
+# fi
+#
+# else
+# echo " using vnc"
+# fi
+# }
+
+
+# function network_setup () {
+# DEVICE=eth0
+# if [ ! -f /etc/systemconfig ]
+# then
+# exit 1
+# fi
+#
+# if [ ! x$USEVNC = x0 ]
+# then
+# echo "Resetting the network"
+# killdhcp
+# if [ $UseDHCP = 0 ]
+# then
+# /sbin/dhcpcd $DEVICE
+# if [ ! $? = 0 ]
+# then
+# exit 2
+# fi
+# fi
+# else
+# echo "using vnc/netboot, will not reset network"
+# echo "nameserver $nameserver" > /etc/resolv.conf
+# return 0
+# fi
+#
+# if [ $UseDHCP = 1 ]
+# then
+#
+# /sbin/ifconfig $DEVICE $ip
+# /sbin/route add default gw $route
+# echo "nameserver $nameserver" > /etc/resolv.conf
+#
+# fi
+#
+#
+# }
+
+function SANE_SYSETTINGS () {
+sed -e '/HOSTrootfstype/d' \
+ -e '/HOSTrootfstype/d' \
+ -e '/HOSTdatafstype/d' \
+ -e '/HOSTOSsize/d' \
+ -e '/HostUseALLdata/d' \
+ -e '/HOSTDATAsize/d' \
+ -e '/HOSTuprootfstype/d' \
+ -e '/HostUseSWAP/d' \
+ -e '/HOSTSWAPsize/d ' /tmp/templates/settings/syssettings/settings.txt > /tmp/settings.new
+ mv /tmp/settings.new /tmp/templates/settings/syssettings/settings.txt
+}
+
+case $1 in
+ full_install_it ) full_install ;;
+
+ NETBOOT)
+echo "-----------------------------------------------------------------------3-----"
+ netboot-full_install ;;
+
+ find_update)
+ #TRY TO mount first partition of drive
+ #copy /etc/systemconfig to live, import settings into db
+ #umount drive
+ $run mount_it $disk
+ if [ -f /new_boot/etc/systemconfig ]
+ then
+ ###########ADD templates
+ mkdir -p $TEMP_TEMPLATES
+ cp -pr /new_boot/$TEMPLATES $TEMP_TEMPLATES
+ SANE_SYSETTINGS
+ cp -rp $TEMP_TEMPLATES/settings $TEMPLATES/
+
+
+ cp /new_boot/etc/systemconfig /etc/systemconfig
+ cp -rf /new_boot/etc /tmp/etc
+ cp -rf /new_boot/var/lib/oss /tmp/oss
+
+ $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings -h $MVHOSTNAME -d 127.0.0.1
+ fi
+ $run umount_it $disk
+ ;;
+
+ upgrade_it)
+ #"$MV_ROOT/bin/install_proxy.sh upgrade_it " + install_drive + " " + rootfs + "&"
+ upgrade
+
+ ;;
+ disk_model_it)
+ model="unknown"
+ size="xxx"
+ case $2 in
+
+ h* )
+ model=`cat /proc/ide/$2/model`
+ ;;
+ s*) model=`sginfo /dev/$2|grep Product|awk ' { print $2 } '`
+ ;;
+ esac
+ size=`parted /dev/$2 print |grep Disk|awk ' { print $3 } ' `
+
+
+ echo ""$model" $size " >/tmp/model
+
+ ;;
+ network_check_it)
+ #Should never return from check_network
+ case $2 in
+ setup_network)
+ vnc_check
+ install_network_setup
+ ;;
+
+ check_self)
+ myipdefault=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ ping -c 1 $myipdefault
+ if [ ! $? = 0 ]
+ then
+ exit 3
+ #can't ping yourself
+ fi
+ ;;
+ check_gw)
+ #check gateway
+ mygwdefault=`/sbin/route |grep $default_interface|grep UG|awk '{ print $2}'`
+ if [ ! x$mygwdefault = x ]
+ then
+ ping -c 1 $mygwdefault
+ if [ ! $? = 0 ]
+ then
+ exit 4
+ fi
+ fi
+ ;;
+ check_ns)
+ #check nameserver
+ mydns=`cat /etc/resolv.conf|grep nameserver|head -1|awk '{ print $2}'`
+ ping -c 1 $mydns
+ if [ ! $? = 0 ]
+ then
+ exit 5
+ fi
+ ;;
+ check_names)
+ host google.com
+ if [ ! $? = 0 ]
+ then
+ exit 6
+ fi
+ ;;
+ host_names)
+ host $hostname
+ if [ $? = 0 ]
+ then
+ exit 7
+ fi
+ ;;
+
+ esac
+ exit 0
+ ;;
+
+
+ * )
+ state=`cat /tmp/.install_state`
+ if [ x"${state}" = "xConfiguring system" ]
+ then
+ progress ""
+ else
+
+ if [ -f /tmp/.startsize.io ]
+ then
+ . /tmp/.startsize.io
+ #finding the drive
+ ddrive=`df | grep $mountpoint | head -n1 | awk -F/ ' { print $3 } ' | cut -d" " -f 1|cut -b1,2,3 `
+ used=`statgrab -M disk.|grep ${ddrive}.write_bytes|cut -d= -f 2|tr -d " "`
+ used=`echo $used-$STARTSIZE|bc`
+ #echo $used
+ fi
+
+ if [ ! x$used = x ]
+ then
+ . /root/.install_size
+ #somehow find if it's an install or update
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ total=$UPGRADESIZE
+ else
+ total=$TOTALSIZE
+ fi
+ percent=`echo "scale=2 ; ($used/$total) * 100 " |bc `
+ cond2=$(echo "$percent > 100" |bc )
+ if [ $cond2 -eq 1 ]
+ then
+ percent=100
+ fi
+ cond3=$(echo "$percent < 3" |bc )
+ if [ $cond3 -eq 0 ]
+ then
+ progress $percent
+ fi
+ fi
+ fi
+ ;;
+esac
+
+
+
diff --git a/abs/core/live-installer/issue b/abs/core/live-installer/issue
new file mode 100644
index 0000000..3c01679
--- /dev/null
+++ b/abs/core/live-installer/issue
@@ -0,0 +1 @@
+LinHes \ No newline at end of file
diff --git a/abs/core/live-installer/live-install.sh b/abs/core/live-installer/live-install.sh
new file mode 100755
index 0000000..573bb1f
--- /dev/null
+++ b/abs/core/live-installer/live-install.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+#redirect stderr to stdout, then rediret stdout to file
+. /etc/profile
+exec 2>&1
+exec > /tmp/mythvantage_install.log
+. /etc/X11/STBWINDOWMANAGER
+/usr/bin/nvidia-settings -a InitialPixmapPlacement=2
+keylaunch &
+/usr/bin/tilda &
+/usr/X11R6/bin/unclutter -root -idle 0 -jitter 400 -noevents &
+export MALLOC_CHECK_=0
+if [ -f /opt/vmware/bin32/vmware-user-wrapper ]
+then
+ /opt/vmware/bin32/vmware-user-wrapper &
+fi
+xhost +
+CMDLINE=$(cat /proc/cmdline)
+echo $CMDLINE |grep -q nfsroot
+NFSROOT=$?
+if [ x$NFSROOT = x1 ]
+then
+
+ unbuffer MythVantage &
+else
+ NETBOOT=YES MythVantage &
+fi
+
+exec $STBWINDOWMANAGER
diff --git a/abs/core/live-installer/live.install b/abs/core/live-installer/live.install
new file mode 100644
index 0000000..a0a9d31
--- /dev/null
+++ b/abs/core/live-installer/live.install
@@ -0,0 +1,78 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+ rm -f /etc/issue
+ rm -f /etc/arch-release
+
+}
+
+# arg 1: the new package version
+post_install() {
+ if [ ! -f /etc/blacklist.package ]
+ then
+ echo "List of packages to ignore" > /etc/blacklist.package
+ echo "one package per line" >> /etc/blacklist.package
+ fi
+
+LINE="mythtv ALL = NOPASSWD:/usr/MythVantage/bin/mythvantage"
+LINE1="mythtv ALL = NOPASSWD:/usr/MythVantage/bin/MythVantage"
+for i in "$LINE" "$LINE1"
+do
+ cp /etc/sudoers /etc/sudoers.bak
+ grep -q "$i" /etc/sudoers
+ if [ $? != 0 ]
+ then
+ echo "$i" >> /etc/sudoers
+ visudo -cf /etc/sudoers
+ if [ ! $? = 0 ]
+ then
+ cp /etc/sudoers.bak /etc/sudoers
+ echo $i
+ echo "Error adding files"
+ exit 1
+ fi
+ fi
+done
+
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ . /etc/profile
+ ps -ef|grep mysqld|grep -v grep
+ status=$?
+ echo "status $status"
+ if [ $status = 0 ]
+ then
+ restore_default_settings.sh -c load
+ fi
+ if [ ! -f /etc/blacklist.package ]
+ then
+ echo "List of packages to ignore" > /etc/blacklist.package
+ echo "one package per line" >> /etc/blacklist.package
+ fi
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/live-installer/networkconfig.sh b/abs/core/live-installer/networkconfig.sh
new file mode 100644
index 0000000..61a7405
--- /dev/null
+++ b/abs/core/live-installer/networkconfig.sh
@@ -0,0 +1,280 @@
+#!/bin/bash
+#. /etc/profile
+#. /etc/systemconfig
+#BASE=/tmp
+ETCNETDIR=$BASE/etc/net/ifaces
+
+
+
+function kill_dhcp ()
+{
+for i in ${BASE}/etc/dhcpc/dhcpcd-*.pid
+do
+ if [ -f ${i} ]
+ then
+ pid=`cat ${i}`
+ kill -9 $pid
+ rm -f ${i}
+ fi
+ if [ x$1 = xflush ]
+ then
+ for ifdev in eth0 wlan0 eth1 wlan1
+ do
+ echo ${i} |grep $ifdev
+ status=$?
+ if [ $status = 1 ]
+ then
+ ip address flush $ifdev
+ fi
+ done
+ fi
+
+done
+
+}
+
+function setup_nameserver(){
+grep -q $1 ${BASE}/etc/resolv.conf
+status=$?
+if [ ! $status = 0 ]
+then
+ echo "nameserver $1" >> ${BASE}/etc/resolv.conf
+fi
+
+}
+
+function setup_interfaces() {
+ local IS_WIRELESS
+ local ip
+ local netmask
+ local isactive
+ local dns
+ local UseDHCP
+ local GW
+ local ESSID
+ local KEY
+ local ENCRYPT
+ local TEMPNET
+ IS_WIRELESS=false
+
+ #local ip
+ TEMPNET="Hostip"$1
+ echo $TEMPNET
+ eval ip=\$${TEMPNET}
+
+ TEMPNET=Hostnetmask$1
+ eval netmask=\$${TEMPNET}
+ netmask=`echo "$netmask" | cut -d " " -f1`
+
+ TEMPNET=HostActive$1
+ eval isactive=\$${TEMPNET}
+
+ TEMPNET=HostDNS$1
+ eval dns=\$${TEMPNET}
+
+ TEMPNET="HostUSEDHCP"$1
+ eval UseDHCP=\$${TEMPNET}
+
+ TEMPNET=HostGW$1
+ eval GW=\$${TEMPNET}
+
+
+
+ if [ $1 = wlan0 -o $1 = wlan1 ]
+ then
+ IS_WIRELESS=TRUE
+ TEMPNET=HostESSID$1
+ eval ESSID=\$${TEMPNET}
+
+ TEMPNET="HostKey"$1
+ eval KEY=\$${TEMPNET}
+
+ TEMPNET=HostUseEncryption$1
+ eval ENCRYPT=\$${TEMPNET}
+ fi
+
+
+ echo "Setup $1 in progress, wireless: $IS_WIRELESS"
+
+ if [ ! -d $ETCNETDIR/$1 ]
+ then
+ mkdir -p $ETCNETDIR/$1
+ fi
+
+ if [ ! -f $ETCNETDIR/$1/options ]
+ then
+ cp -f $TEMPLATES/etcnet/eth/options $ETCNETDIR/$1/options
+ fi
+
+ if [ x$isactive = x0 ]
+ then
+ echo "setting $1 to inactive"
+ sed -i -e 's/^ONBOOT=.*$/ONBOOT=no/g' $ETCNETDIR/$1/options
+
+ else
+ echo "setting $1 to active"
+ sed -i -e 's/^ONBOOT=.*$/ONBOOT=yes/g' $ETCNETDIR/$1/options
+ fi
+
+ if [ x$IS_WIRELESS = xTRUE ]
+ then
+ echo "setting $1 wireless"
+ sed -i -e 's/^CONFIG_WIRELESS=.*$/CONFIG_WIRLESS=yes/g' $ETCNETDIR/$1/options
+ #set the key and essid
+ echo "essid $ESSID" > $ETCNETDIR/$1/iwconfig
+ if [ x$ENCRYPT = x1 ]
+ then
+ echo "key $KEY" >> $ETCNETDIR/$1/iwconfig
+ fi
+
+ else
+ echo "disabling wireless"
+ sed -i -e 's/^CONFIG_WIRLESS=.*$/CONFIG_WIRLESS=no/g' $ETCNETDIR/$1/options
+ fi
+
+
+
+
+ if [ $UseDHCP = 0 ]
+ then
+ echo using dhcp
+ sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=dhcp/g' $ETCNETDIR/$1/options
+
+ else
+ echo "using static ip"
+ sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=static/g' $ETCNETDIR/$1/options
+ echo "default via $GW" > $ETCNETDIR/$1/ipv4route
+ echo "$ip$netmask" > $ETCNETDIR/$1/ipv4address
+ setup_nameserver $dns
+ fi
+}
+
+
+function find_active () {
+#HostActiveeth1="1"
+rm -f ${BASE}/etc/resolv.conf
+if [ x$MYTHDHCP = x1 ]
+ then
+ #add 127.0.0.1 to /etc/resolv.conf
+ echo "search lan" > ${BASE}/etc/resolv.conf
+ echo "nameserver 127.0.0.1" >> ${BASE}/etc/resolv.conf
+ fi
+
+for i in eth0 eth1 wlan0 wlan1
+do
+ CURRENTIF="HostActive"$i
+ eval IFSTATE=\$${CURRENTIF}
+ if [ x$IFSTATE = x1 ]
+ then
+ setup_interfaces $i
+ fi
+done
+}
+
+function setup_hostname {
+#set the hostname
+if [ ! x$hostname = x ]
+then
+ echo $hostname > ${BASE}/etc/hostname
+ cat $BASE/etc/hosts |grep -v 127.0.0.1|grep -v $hostname > /tmp/hosts
+ #cat $BASE/etc/hosts |grep -v 127.0.0.1|grep -v $hostname | grep -v $ip > /tmp/hosts
+
+ if [ x$MYTHDHCP = x1 ]
+ then
+ echo "127.0.0.1 localhost " > ${BASE}/etc/hosts
+ echo "$MYTHIP $hostname " >> ${BASE}/etc/hosts
+ else
+ echo "127.0.0.1 $hostname localhost " > ${BASE}/etc/hosts
+ fi
+ cat /tmp/hosts >> ${BASE}/etc/hosts
+fi
+
+kill_dhcp
+}
+
+function vnc_check() {
+ CMDLINE=$(cat /proc/cmdline)
+ echo $CMDLINE |grep -q vnc
+ USEVNC=$?
+ echo $CMDLINE |grep -q nfsroot
+ NETBOOT=$?
+ echo $USEVNC
+ if [ ! x$USEVNC = x0 ]
+ then
+ echo "not using vnc"
+ if [ ! x$NETBOOT = x0 ]
+ then
+ echo "not using netboot"
+ else
+ echo "using netboot"
+ USEVNC=0
+ fi
+
+ else
+ echo " using vnc"
+ fi
+}
+
+function setup_MYTH_vars {
+ TEMPMYTH="Hostip"$default_interface
+ #echo $TEMPMYTH
+ eval MYTHIP=\$${TEMPMYTH}
+
+ TEMPMYTH="HostUSEDHCP"$default_interface
+ eval MYTHDHCP=\$${TEMPMYTH}
+
+
+
+}
+
+
+
+function setup_network {
+ setup_MYTH_vars
+ setup_hostname
+ find_active
+}
+
+function start_network {
+if [ ! $USEVNC = 0 ]
+then
+ /etc/net/scripts/network.init restart
+
+else
+ echo "VNC/NETBOOT in use, will NOT restart network"
+fi
+
+}
+
+function stop_network {
+if [ ! $USEVNC = 0 ]
+then
+ echo "stopping the network"
+ kill_dhcp flush
+ ip address flush dev eth0 2>&1 >/dev/null
+ ip address flush dev eth1 2>&1 >/dev/null
+ ip address flush dev wlan0 2>&1 >/dev/null
+ ip address flush dev wlan1 2>&1 >/dev/null
+else
+ echo "VNC/NETBOOT in use, will NOT restart network"
+fi
+
+}
+
+
+#this is used by the install process to start the network
+function install_network_setup {
+ setup_MYTH_vars
+ setup_hostname
+ stop_network
+ find_active
+ start_network
+
+}
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/remove_service.sh b/abs/core/live-installer/remove_service.sh
new file mode 100755
index 0000000..6cc4b4f
--- /dev/null
+++ b/abs/core/live-installer/remove_service.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -e $SERVICE_DIR/$1 ]
+then
+ echo "removing"
+ rm $SERVICE_DIR/$1
+fi
diff --git a/abs/core/live-installer/restore_default_settings.sh b/abs/core/live-installer/restore_default_settings.sh
new file mode 100755
index 0000000..e2b7044
--- /dev/null
+++ b/abs/core/live-installer/restore_default_settings.sh
@@ -0,0 +1,325 @@
+#!/bin/bash
+. /etc/profile
+. /etc/systemconfig
+shopt -s -o nounset
+echo $@ >> /tmp/restore.out
+#TEMPLATES="/usr/share/templates/settings"
+TEMPLATES="$TEMPLATES/settings"
+TABLES="settings keybindings"
+MYTHDBUSER=mythtv
+MYTHTVPASSWD=mythtv
+declare -r OPTSTRING="c:e:t:d:h:s:a:z:Ho"
+Thistemplate=""
+declare -i OVERRIDE=0
+declare -i EVERYTHING=0
+
+function CMD_DEFINE () {
+ #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\";"
+ 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"
+ MYSQLCMD_UPDATE_HOST="select hostname from settings;"
+ fi
+}
+
+function SQL_DEFINE () {
+ #$1 is the table name
+ if [ $1 = "settings" ]
+ then
+ ALTERSQL="Alter table temp_${1}_${hostname} add unique ( value )"
+ else
+ ALTERSQL=";"
+ fi
+
+ CREATESQL="create table temp_${1}_${hostname} like $1;"
+ COPY_TMP_SQL="replace into temp_${1}_${hostname} (select * from $1 where hostname=\"$hostname\");"
+ INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${hostname} 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}_${hostname} where hostname=\"$hostname\");"
+ DROP_TABLE="Drop table temp_${1}_${hostname}"
+}
+
+function ARG_ERR() {
+ if [ x$OPTARG = "x" ]
+ then
+ echo "$SWITCH NEEDS AND ARG"
+ exit 11
+ fi
+}
+
+function ALSADEVICE () {
+#ALSA:hw:1,4
+ if [ x$Audiotype = xALSA ]
+ then
+ SoundDevice=ALSA:$SoundDevice
+ fi
+}
+
+
+
+if [ $# -eq 0 ]
+then
+ echo "Valid options are:"
+ echo " -c (save|restore|load|uhostname|BECONFIG|ZIP|ACCESSCONTROL)"
+ echo " -t (syssettings)"
+ echo " -d databasename"
+ echo " -h hostname"
+ echo " -s systemtype (master|slave|standalone|frontendonly)"
+ echo " -a ipaddress"
+ echo " -z zipcode"
+ echo " -o override (only used upgrade installs)"
+ exit 1
+fi
+
+
+
+
+while getopts "$OPTSTRING" SWITCH
+do
+ case $SWITCH in
+ # \?) echo "unkown option"
+ # exit 11 ;;
+ c) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ OPERATION=$OPTARG
+ ;;
+ t) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ Thistemplate=$OPTARG
+
+ if [ x$Thistemplate = x"syssettings" ]
+ then
+ echo ""
+ else
+ echo "invalid template name"
+ exit 1
+ fi
+ ;;
+ d) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ if [ $OVERRIDE = 1 ]
+ then
+ ovdbhost=$OPTARG
+ else
+ dbhost=$OPTARG
+ fi
+ ;;
+ h) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ if [ $OVERRIDE = 1 ]
+ then
+ oldhostname=$hostname
+ hostname=$OPTARG
+ else
+ hostname=$OPTARG
+ fi
+
+ ;;
+ s) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ SYSTEMTYPE=$OPTARG
+ ;;
+ a) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ IP_ADDRESS=$OPTARG
+ ;;
+ z) echo "$SWITCH" "$OPTARG"
+ ARG_ERR
+ ZIPCODE=$OPTARG
+ ;;
+ o) OVERRIDE=1
+ ;;
+
+ esac
+done
+
+echo $OVERRIDE
+
+#setup the Mysql commands
+CMD_DEFINE
+
+$MYSQLCMD_C "show tables" > /dev/null
+status=$?
+if [ $status = 1 ]
+then
+ echo "$@ failed"
+ echo "$@ failed" >> /tmp/restore.out
+ exit 1
+fi
+
+
+
+
+
+
+
+case $OPERATION in
+
+ restore)
+ #used to restore settings from syssettings
+ if [ -d $TEMPLATES/$Thistemplate ]
+ then
+ cd $TEMPLATES/$Thistemplate
+ for i in $TABLES
+ do
+ SQL_DEFINE $i
+ sed -e "s/REPLACEME/$hostname/g" $i.txt > /tmp/$i.txt
+ #echo $MYSQLCMD "$SELECTSQL"
+ echo $i
+ $MYSQLCMD "$CREATESQL"
+ $MYSQLCMD "$ALTERSQL"
+ $MYSQLCMD "$COPY_TMP_SQL"
+ $MYSQLCMD "$INSERTSQL"
+ $MYSQLCMD "$DROPSQL"
+ $MYSQLCMD "$COPY_BCK_SQL "
+ $MYSQLCMD "$DROP_TABLE "
+ #rm /tmp/$i.txt
+ done
+ else
+ echo "couldn't find $TEMPLATES/$Thistemplate"
+ fi
+ ;;
+
+ save)
+
+ 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
+ ;;
+ esac
+ # sed -e "s/$hostname/REPLACEME/g" $i > $i.txt && rm $i
+
+ done
+ ;;
+
+ load)
+
+ #will load both default_1 and default_2 unless either file is not found
+ for i in default_1 default_2
+ do
+ if [ -f $TEMPLATES/$i/settings.txt ]
+ then
+ echo $i
+ for tablename in $TABLES
+ do
+ #create table
+ CREATESQL="create table IF NOT EXISTS ${tablename}_${i} like $tablename;"
+ $MYSQLCMD_C "$CREATESQL"
+ #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';"
+ $MYSQLCMD_C "$INSERTSQL"
+ #update_hostname
+ UPDATEHOSTNAMESQL="update ${tablename}_${i} set hostname='$i' ; "
+ $MYSQLCMD_C "$UPDATEHOSTNAMESQL"
+ done
+ else
+
+ echo "couldn't find $TEMPLATES/$i/settings.txt template to load"
+ fi
+ CREATESQL="create table IF NOT EXISTS settings_user1 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS settings_user2 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS settings_user3 like settings;"
+ $MYSQLCMD_C "$CREATESQL"
+
+ CREATESQL="create table IF NOT EXISTS keybindings_user1 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS keybindings_user2 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS keybindings_user3 like keybindings;"
+ $MYSQLCMD_C "$CREATESQL"
+ done
+;;
+
+
+
+ BECONFIG)
+ if [ $SYSTEMTYPE = "master" ]
+ then
+ $MYSQLCMD_C "UPDATE settings set data='${IP_ADDRESS}' where value='MasterServerIP';"
+ $MYSQLCMD_C "delete from settings where value='BackendServerIP' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
+ fi
+
+ 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\";"
+ 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\";"
+ ;;
+ MUSICFRONT)
+ ALSADEVICE
+ $MYSQLCMD_C "delete from settings where value='AudioOutputDevice' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='AudioOutputDevice' , hostname=\"$hostname\";"
+ #need to reload the settings.
+ systemconfig.sh reloadfe
+ ;;
+ MUSICMYTH)
+ ALSADEVICE
+ $MYSQLCMD_C "delete from settings where value='MusicAudioDevice' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='MusicAudioDevice' , hostname=\"$hostname\";"
+ ;;
+ uhostname)
+ #used when the hostname is changed.
+ TABLES="settings capturecard keybindings storagegroup recorded"
+ for i in $TABLES
+ do
+ USQL="update $i set hostname=\"$oldhostname\" where hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$USQL"
+ done
+
+ ;;
+ USERJOBALLOW)
+ SQL="update settings set data='1' where value like 'JobAllowUserJob%' and hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$SQL"
+ ;;
+
+ ACCESSCONTROL)
+ LIST="Hostaccessnetwork Hostaccesshostype HostaccesshostypeSystemtype Hostaccessmisc Hostaccesssleep Hostaccessadvanced HostaccessadvancedX Hostaccesssound"
+
+ for i in $LIST
+ do
+ $MYSQLCMD_C "delete from settings where value=\"$i\" and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='1', value=\"$i\" , hostname=\"$hostname\";"
+ done
+ SQL="update settings set data='0' where value='HostaccesshostypeSystemtype' and hostname=\"$hostname\" ;"
+ $MYSQLCMD_C "$SQL"
+ esac
+
+#SELECT * INTO OUTFILE 'data.txt'
+# FIELDS TERMINATED BY ','
+# FROM table2;
+
+
diff --git a/abs/core/live-installer/soundconfig.sh b/abs/core/live-installer/soundconfig.sh
new file mode 100755
index 0000000..1adb447
--- /dev/null
+++ b/abs/core/live-installer/soundconfig.sh
@@ -0,0 +1,248 @@
+#!/bin/bash
+. /etc/systemconfig
+. /etc/profile
+echo $@ >/tmp/audio.call
+#set -x
+BASE=""
+. /etc/profile
+#TEMPLATES="/usr/share/templates"
+TESTFILE="$TEMPLATES/audio/space_battle_A.wav"
+OSSinstalled="false"
+
+function testaudio () {
+
+ossplay -d$AUDIODEVICE $TESTFILE
+
+}
+
+function load_alsa() {
+
+ remove_service.sh alsa-utils
+# cd /lib/modules/2.6.21-STB
+ KER=`uname -r`
+ cd /lib/modules/$KER/kernel/
+ tar -xvf alsa-$KER.tar
+ pacman -Sf --noconfirm alsa-lib
+
+ depmod -a
+ cd -
+ udevsettle
+ udevsettle
+ udevtrigger
+
+ add_service.sh alsa-utils
+ sleep 4
+ sv start alsa-utils
+}
+
+
+function unload_alsa () {
+#kill $(lsof -t /dev/dsp* /dev/audio* /dev/mixer* /dev/snd/*) && modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
+ sv stop alsa-utils
+ remove_service.sh alsa-utils
+ rm -rf /dev/adsp*
+ rm -rf /dev/snd/*
+ rm -rf /dev/audio
+ modprobe -r $(lsmod |grep ^snd |awk '{print $1}')
+}
+
+function unload_oss {
+ sv stop oss
+ soundoff
+ rm -rf /dev/dsp*
+ rm -rf /dev/oss*
+ rm -rf /dev/sndstat
+ remove_service.sh oss
+}
+
+function installOSS {
+ echo "installing oss"
+ add_service.sh oss
+ sleep 4
+ sv start oss
+}
+
+
+function SYNCXINE {
+echo "modify xine config file"
+ if [ -f /data/home/mythtv/.xine/config ]
+ then
+ cp -f /data/home/mythtv/.xine/config $TEMPLATES/xine.config
+ else
+ cp $TEMPLATES/xine.config.template $TEMPLATES/xine.config
+ fi
+
+ if [ x$Audiotype = xOSS ]
+ then
+ DEVICENUMBER=`echo $SoundDevice|awk -F/ ' { print $3 } '|tr -d dsp `
+ sed -e "s/^.*audio.driver.*$/audio.driver:oss/" \
+ -e "s/^.audio.device.oss_device_name.*$/audio.device.oss_device_name:\/dev\/dsp/" \
+ -e "s/^.audio.devic.oss_device_number.*$/audio.device.oss_device_number:$DEVICENUMER/" \
+ -e "s/^.*audio.output.speaker_arrangement:.*$/Audio.output.speaker_arrangement:PassThrough/" \
+ $TEMPLATES/xine.config > /data/home/mythtv/.xine/config
+ else
+ cp $TEMPLATES/xine.config /data/home/mythtv/.xine/config
+ fi
+
+}
+
+function SYNCMPLAYER {
+echo "modify mplayer not implmented yet"
+}
+
+function SYNCMYTHMUSIC {
+echo "sync mythmusic"
+$MV_ROOT/bin/restore_default_settings.sh -c MUSICMYTH
+}
+
+function SYNCMYTHFRONTEND {
+echo "sync mythfrontend"
+$MV_ROOT/bin/restore_default_settings.sh -c MUSICFRONT
+}
+
+
+function checkOSSinstalled () {
+ ossinfo 1>/dev/null
+ resultcode=$?
+ echo $resultcode
+ if [ $resultcode = 0 ]
+ then
+ OSSinstalled='true'
+ else
+ OSSinstalled='false'
+ fi
+}
+
+function sound_config_system {
+
+ if [ x$syncXine = x1 ]
+ then
+ SYNCXINE
+ fi
+ if [ x$syncMplayer = x1 ]
+ then
+ SYNCMPLAYER
+ fi
+ if [ x$syncMythMusic = x1 ]
+ then
+ SYNCMYTHMUSIC
+ fi
+ if [ x$syncMythFrontend = x1 ]
+ then
+ SYNCMYTHFRONTEND
+ fi
+
+}
+
+function loadsound (){
+ checkOSSinstalled
+ if [ x$AUDIOTYPE = xOSS -o x$AUDIOTYPE = xoss ]
+ #then
+ # if [ $OSSinstalled = "false" ]
+ then
+ while [ $OSSinstalled = "false" ]
+ do
+ unload_alsa
+ rm /tmp/.alsatest
+ installOSS
+ installOSS
+ sleep 2
+ checkOSSinstalled
+ done
+ # fi
+ else
+ touch /tmp/.alsatest
+ unload_oss
+ load_alsa
+ load_alsa
+ rm /tmp/.alsatest
+
+ fi
+
+}
+
+
+
+
+#####################MAIN PROGRAM##########################
+
+declare -r OPTSTRING="i:t:d:"
+
+if [ $# -eq 0 ]
+then
+ echo "Valid options are:"
+ echo " -i (oss|alsa) oss or alsa subsystem "
+ echo " -t (test|real|LOAD) "
+ echo " -d device"
+ exit 1
+fi
+
+
+
+
+while getopts "$OPTSTRING" SWITCH
+do
+ case $SWITCH in
+ \?) echo "unkown option"
+ exit 11 ;;
+ i) echo "$SWITCH" "$OPTARG"
+ AUDIOTYPE="$OPTARG"
+ ;;
+ d) echo "$SWITCH" "$OPTARG"
+ AUDIODEVICE=$OPTARG
+ ;;
+ t) echo "$SWITCH" "$OPTARG"
+ SOUNDOPTYPE="$OPTARG"
+ if [ x"$OPTARG" = xtest ]
+ then
+ TEST=true
+ else
+ TEST=false
+ fi
+
+
+ ;;
+
+ esac
+done
+
+
+
+
+case $SOUNDOPTYPE in
+ REAL|real )
+ loadsound
+ sound_config_system
+ ;;
+ test|TEST)
+ echo $@ > /tmp/audio.test
+ #loadsound
+ if [ x$AUDIOTYPE = xOSS -o x$AUDIOTYPE = xoss ]
+ then
+ echo "testing OSS $AUDIODEVICE "
+ ossplay -d$AUDIODEVICE $TESTFILE
+ else
+ echo "testing ALSA $AUDIODEVICE "
+ aplay --device=$AUDIODEVICE $TESTFILE
+ fi
+
+ ;;
+
+ LOAD|load)
+ loadsound
+ ;;
+ esac
+
+
+exit 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/startx b/abs/core/live-installer/startx
new file mode 100755
index 0000000..0ffdf8c
--- /dev/null
+++ b/abs/core/live-installer/startx
@@ -0,0 +1,29 @@
+#!/bin/bash
+. /etc/profile
+
+export USER=root
+export HOME=/root
+#TEMPLATES=/usr/share/templates
+
+CMDLINE=$(cat /proc/cmdline)
+TEMPVAR=${CMDLINE#*ip=}
+IP=${TEMPVAR%% *}
+echo $CMDLINE |grep -q vnc
+USEVNC=$?
+
+if [ x$USEVNC = x1 ]
+then
+ $MV_ROOT/bin/xconfig.sh
+ cat /etc/X11/xorg.conf | sed -e 's/dev\/mouse/dev\/psaux/g'> /root/xorg.conf.install
+ startx /root/live-install.sh -- -config /root/xorg.conf.install -allowMouseOpenFail
+ else
+ #VNC
+ pacman -Sf --noconfirm tightvnc
+ cd /root
+ mkdir .vnc
+ echo mythvantage |vncpasswd -f > /root/.vnc/passwd
+ chmod 500 /root/.vnc/passwd
+ rm /root/.vnc/xstartup
+ ln -s /root/live-install.sh /root/.vnc/xstartup
+ vncserver
+fi
diff --git a/abs/core/live-installer/systemconfig.sh b/abs/core/live-installer/systemconfig.sh
new file mode 100755
index 0000000..909119e
--- /dev/null
+++ b/abs/core/live-installer/systemconfig.sh
@@ -0,0 +1,1255 @@
+#!/bin/bash
+###################################################################
+#Script to configure your system based off the values in /etc/systemconfig
+#Any changes made to config files will be removed when systemconfig.sh is run
+#
+#JM
+###################################################################
+#set -x
+. /etc/profile
+MVRELEASE=`cat /etc/mythvantage-release |cut -d" " -f -2`
+
+echo $@ >/tmp/systemconfig.call
+echo "----------------------start of systemconfig $@ ----------------------"
+BASE=""
+
+#TEMPLATES="/usr/share/templates"
+. /etc/profile
+. $MV_ROOT/bin/networkconfig.sh
+PACMAN="pacman --noconfirm"
+postfix=`cat ${BASE}/usr/local/share/mythtv/.releasetype`
+PKGBLACKLIST=$BASE/etc/blacklist.package
+
+if [ x$1 = x"Mysql_only" ]
+ then
+ rm -f /tmp/mysql.txt
+ sed -e "s/^DBHostName=.*$/DBHostName=$2/" $TEMPLATES/mysql.txt > /tmp/mysql.txt
+ exit 0
+ fi
+
+
+if [ -f /etc/systemconfig ]
+then
+ . /etc/systemconfig
+TEMPNET="Hostip"$default_interface
+echo $TEMPNET
+eval MYTHIP=\$${TEMPNET}
+else
+ echo "could not find /etc/systemconfig"
+ exit 1
+fi
+
+
+
+#-----------------------------------------------------
+
+
+function setupmysql {
+#setup mysql.txt to find the database servers
+ if [ $SystemType = "Master_backend" ]
+ then
+ if [ $MYTHDHCP = 0 ]
+ then
+ #this grabs eth0, as that is all thats supported.
+# dbhost=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+ dbhost=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
+ cp /tmp/systemconfig.old ${BASE}/etc/systemconfig
+ ##logic to change master_serverip and backend_serverip in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ else
+
+ dbhost=$MYTHIP
+ sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
+ cp /tmp/systemconfig.old ${BASE}/etc/systemconfig
+ #logic to change dbhost in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ fi
+
+ if [ $SystemType = "Slave_backend" ]
+ then
+ if [ $MYTHDHCP = 0 ]
+ then
+ #this grabs eth0, as that is all thats supported.
+ #slavehost=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+ slavehost=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
+ ##logic to change backend_serverip in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s slave -a $slavehost
+ else
+ slavehost=$MYTHIP
+
+ #logic to change backend_serverif in db
+ ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s slave -a $slavehost
+ fi
+ fi
+
+ MYSQLTXT=${BASE}/usr/local/share/mythtv/mysql.txt
+ if [ $SystemType = "Standalone" ]
+ then
+ sed -e "s/^DBHostName=.*$/DBHostName="localhost"/" $TEMPLATES/mysql.txt > $MYSQLTXT
+ else
+ sed -e "s/^DBHostName=.*$/DBHostName=$dbhost/" $TEMPLATES/mysql.txt > $MYSQLTXT
+ fi
+ rm ${BASE}/data/home/mythtv/.mythtv/mysql.txt
+ rm ${BASE}${MV_ROOT}/bin/mythtv/.mythtv/mysql.txt
+ if [ -f ${BASE}/data/home/mythtv/templates/mysql.txt ]
+ then
+ cp ${BASE}/data/home/mythtv/templates/mysql.txt $MYSQLTXT
+ fi
+
+ chmod 755 $MYSQLTXT
+ chown mythtv $MYSQLTXT
+
+}
+
+function setupmysqlnetwork(){
+MFILE=etc/my.cnf
+grep "#skip-networking" $BASE/$MFILE
+status=$?
+
+
+
+ if [ $SystemType = "Standalone" ]
+ then
+ sed -ie "s/^#skip-networking/skip-networking/g" $BASE/$MFILE
+ if [ $status = 0 ]
+ then
+ sudo sv restart mysql
+ echo "restarting mysql with no network"
+ fi
+
+ fi
+
+ if [ $SystemType = "Master_backend" ]
+ then
+ sed -ie "s/^skip-networking/#skip-networking/g" $BASE/$MFILE
+ if [ $status = 1 ]
+ then
+ sudo sv restart mysql
+ echo "restarting mysql with network"
+ fi
+
+ fi
+
+
+}
+
+
+function settimezone {
+#set the timezone
+if [ x"$timezone" = x ]
+then
+ timezone="unknown"
+fi
+rm ${BASE}/etc/localtime
+echo $timezone
+ln -s "/usr/share/zoneinfo/$timezone" ${BASE}/etc/localtime
+ sed -e "s~^TIMEZONE=.*$~TIMEZONE=\"${timezone}\"~" ${BASE}/etc/rc.conf > $TEMPLATES/rc.conf
+
+ # echo CLOCK="UTC" > ${BASE}/etc/conf.dclock
+ # echo CLOCK_SYSTOCH="yes" >> ${BASE}/etc/conf.d/clock
+ # echo TIMEZONE="$timezone" >> ${BASE}/etc/conf.d/clock
+cp $TEMPLATES/rc.conf /etc/rc.conf
+
+}
+
+
+function setupreceiver {
+ case $ReceiverType in
+ tinker) echo "do nothing"
+ ;;
+ Serial) echo "setup serial lirc"
+ sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ echo "lirc_serial #lirc" >> ${BASE}/etc/modules.mythvantage
+ /usr/bin/load-modules-mythvantage.sh
+ ;;
+ Usb-imon) echo "setup receiver-usb-imon"
+ sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ echo "lirc_imon #lirc" >> ${BASE}/etc/modules.mythvantage
+ /usr/bin/load-modules-mythvantage.sh
+ ;;
+ *) sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
+ ;;
+ esac
+
+
+}
+
+function setupremote {
+ case $Remotetype in
+ no_remote) echo "No remote selected"
+ daemon_remove="lircd $daemon_remove"
+ ;;
+ tinker) echo "Remote in tinker mode"
+ ;;
+ *) echo "Setup remote"
+ mv ${BASE}/etc/lircd.conf ${BASE}/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
+ cd $TEMPLATES/remotes/$Remotetype
+ for i in lircd*
+ do
+ cat $i >> ${BASE}/etc/lircd.conf
+ done
+ cp lircrc ${BASE}/etc/lircrc
+ if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
+ then
+ cat $TEMPLATES/LCD/$LCDtype/lircrc >> /etc/lircrc
+ cat $TEMPLATES/LCD/$LCDtype/lircd.conf >> /etc/lircd.conf
+ fi
+ if [ -f $TEMPLATES/transmit/$Blastertype/lircd.conf ]
+ then
+ cat $TEMPLATES/transmit/$Blastertype/lircd.conf >> ${BASE}/etc/lircd.conf
+ fi
+ chmod 755 /etc/lircrc
+ daemon_add="lircd $daemon_add"
+ sv hup lircd
+ ;;
+esac
+
+}
+
+function setupblaster {
+ #cd $TEMPLATES/transmit/$Blastertype
+ #for i in lircd*
+ #do
+ # cat lircd.conf >> ${BASE}/etc/lircd.conf
+ #done
+ # REMOTE_NAME${BASE}/usr/bin/change_chan.sh=`grep name lircd.conf* |awk -F" " ' { print $2 } '`
+ sed -e "s/^REMOTE_NAME=.*$/REMOTE_NAME=${Blastertype} /" $TEMPLATES/change_chan.sh > ${BASE}/usr/bin/change_chan.sh
+ chmod 755 ${BASE}/usr/bin/change_chan.sh
+ #channel change script change
+ setupremote
+
+}
+
+function setupevrouter {
+ if [ x$UseEvrouter = x1 ]
+ then
+ case x$EvrouterConfig in
+ xtinker )
+ echo "do nothing for evrouter"
+ ;;
+ x ) echo "empty evrouter"
+ ;;
+ * ) echo "setup evrouter for $EvrouterConfig "
+ cp $TEMPLATES/evrouter/$EvrouterConfig /etc/evrouter.cfg
+ daemon_add="evrouter Xvfb $daemon_remove"
+
+ ;;
+ esac
+ else
+ # disable evrouter
+ daemon_remove="evrouter Xvfb $daemon_remove"
+ fi
+
+
+
+
+}
+
+function setupLCD {
+ case x$LCDtype in
+ xtinker) echo "do nothing"
+ ;;
+ xno_lcd) echo "disabling lcd"
+ sv down lcdd
+ /usr/bin/load-modules-mythvantage.sh UNLOAD LCD
+ sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
+ daemon_remove="lcdd $daemon_remove"
+ ;;
+ x) echo "empty lcd" ;;
+
+ *) echo "setup lcd"
+ if [ -f $TEMPLATES/LCD/$LCDtype/modules ]
+ then
+ sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
+ cat $TEMPLATES/LCD/$LCDtype/modules >> ${BASE}/etc/modules.mythvantage
+ #should also modprobe
+ fi
+
+
+ if [ -f $TEMPLATES/LCD/$LCDtype/LCDd.conf ]
+ then
+ cp -f $TEMPLATES/LCD/$LCDtype/LCDd.conf /etc
+ # install="lcdproc $install"
+ daemon_add="lcdd $daemon_add"
+ /usr/bin/load-modules-mythvantage.sh
+ RESTART_FE="true"
+ RESTART_LCD="true"
+ fi
+ #check if lirc capable,if so then call setupremote
+ if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
+ then
+ setupremote
+ fi
+ ;;
+ esac
+
+}
+
+
+
+function scrubnfs {
+ cp /etc/fstab $TEMPLATES/fstab.conf.template
+ grep -v nfs $TEMPLATES/fstab.conf.template > ${BASE}/etc/fstab
+ }
+
+function setupfstab () {
+# setupfstab $NFSserver $NFSshare $NFSmount
+ echo "$1 $2 nfs" >> ${BASE}/etc/fstab
+ if [ ! -e "$2" ]
+ then
+ mkdir -p "$2"
+ chown mythtv:mythtv "$2"
+ fi
+ if [ x$DCONFIG = x ]
+ then
+ mount $2 &
+ fi
+
+}
+
+function setupncidclient
+{
+ sed -e "s/^set Host.*$/set Host $dbhost /" $TEMPLATES/ncid.conf.template >${BASE}/etc/ncid/ncid.conf
+}
+
+function setupnciddaemon {
+ cp -f /etc/ncid/ncidd.conf $TEMPLATES/ncidd.conf.template
+ sed -e "s/.*set ttyport.*$/set ttyport = \/dev\/$nciddSerialPort /" $TEMPLATES/ncidd.conf.template >${BASE}/etc/ncid/ncidd.conf
+
+}
+
+function setupntp () {
+cat > ${BASE}/etc/ntp.conf << EOF
+# default restrictions
+restrict default noquery notrust nomodify
+# NTP drift file - used to keep track of your system clocks
+# time deviation
+driftfile /etc/ntp.drift
+
+# NTP log file
+logfile /var/log/ntp.log
+# override the default restrictions here, servers that can query
+restrict 192.168.0.0 mask 255.255.0.0 nomodify
+restrict 10.0.0.0 mask 255.0.00 nomodify
+
+#servers to sync with
+EOF
+ #this is used for backend or standlone types
+ if [ $1 = "1" ]
+ then
+ echo "server ntp1.cs.wisc.edu" >> ${BASE}/etc/ntp.conf
+ echo "server ntp3.sf-bay.org" >> ${BASE}/etc/ntp.conf
+ echo "restrict ntp1.cs.wisc.edu noquery nomodify" >> ${BASE}/etc/ntp.conf
+ echo "restrict ntp3.sf-bay.org noquery nomodify" >> ${BASE}/etc/ntp.conf
+
+ else
+ echo "server $dbhost" >> ${BASE}/etc/ntp.conf
+ echo "restrict $dbhost noquery nomodify" >> ${BASE}/etc/ntp.conf
+ fi
+
+
+}
+
+function setupplugins (){
+
+pkglistinstall=""
+pkglistremove=""
+#default enabled
+for i in mythcontrols mythgallery mythmovietime mythmusic mythsmolt mythvideo
+do
+eval pkgvalue=\$${i}
+
+if [ x$pkgvalue = x ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ if [ x$pkgvalue = x1 ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ pkglistremove="$pkglistremove $i$postfix"
+ fi
+ fi
+
+
+
+done
+
+
+
+#default disabled
+ for i in mythphone mytharchive mythbrowser mythnews mythgame mythflix mythweather
+ do
+eval pkgvalue=\$${i}
+
+if [ x$pkgvalue = x ]
+ then
+ pkglistremove="$pkglistremove $i$postfix"
+ else
+ if [ x$pkgvalue = x1 ]
+ then
+ pkglistinstall="$pkglistinstall $i$postfix"
+ else
+ pkglistremove="$pkglistremove $i$postfix"
+ fi
+ fi
+ done
+install="$pkglistinstall $install"
+remove="$pkglistremove $remove"
+
+}
+function LCDcheck () {
+ case x$LCDtype in
+ xtinker) echo "do nothing lcd "
+ ;;
+ xno_lcd) echo "no lcd "
+ ;;
+ xxosd) install="xosd lcdproc $install"
+ ;;
+ x) echo "lcd empty "
+ ;;
+ *)
+ install="lcdproc $install"
+ ;;
+esac
+}
+
+
+function packages () {
+#see which plugins need to be installed
+echo " Starting to install Packages"
+setupplugins
+LCDcheck
+if [ ! -f $PKGBLACKLIST ]
+then
+ touch $PKGBLACKLIST
+fi
+ for i in $remove
+ do
+ echo "-----------$i --------------"
+ grep -q $i $PKGBLACKLIST
+ if [ $? = 1 ]
+ then
+ pacman -Q $i 2>/dev/null
+ #VAR=`pacman -Q $i 2>&1 `
+ if [ $? = 0 ]
+ then
+ if [ $i = "mythweb$postfix" ]
+ then
+ pacman --noconfirm -R mythweb$postfix
+ echo removed $i
+ else
+ pacman --noconfirm -Rs $i
+ echo removed $i
+ fi
+ fi
+ else
+ echo "$i is black listed"
+ fi
+ done
+ # fi
+
+ for i in $install
+ do
+ echo "-----------$i --------------"
+ grep -q $i $PKGBLACKLIST
+ if [ $? = 1 ]
+ then
+ pacman -Q $i 2>/dev/null
+ #VAR=`pacman -Q $i 2>&1 `
+ # echo $VAR |grep -vq error:
+
+ if [ ! $? = 0 ]
+ then
+ pacman --noconfirm -Sf $i
+ echo installed $i
+ else
+ echo "$i already installed"
+ fi
+ else
+ echo "$i is black listed"
+ fi
+ done
+}
+
+function daemons {
+echo "Daemons on boot"
+
+ for i in $daemon_remove
+ do
+ sv check $i 1>/dev/null
+ status=$?
+ if [ $status -eq 0 ]
+ then
+ sv down $i
+ fi
+ remove_service.sh $i
+ done
+
+
+ for i in $daemon_add
+ do
+ sv check $i 1>/dev/null
+ status=$?
+ add_service.sh $i
+
+ if [ $status -eq 0 ]
+ then
+ case $i in
+ mysql*) sv hup $i
+ ;;
+ mythback*) sv hup $i
+ ;;
+ lirc* ) sv hup $i
+ ;;
+ frontend) sv check frontend 1>/dev/null
+ ;;
+
+ smbd ) sv hup $i
+ ;;
+ nmbd ) sv hup $i
+ ;;
+ evrouter) sv restart $i
+ ;;
+ *) sv down $i
+ sleep 1
+ sv up $i
+ ;;
+ esac
+ fi
+
+ done
+
+}
+
+
+function services
+{
+ser_install=""
+ser_daemon_add=""
+ser_remove=""
+ser_daemon_remove=""
+if [ x$UseEvrouter = x1 ]
+then
+ ser_daemon_add="evrouter Xvfb $ser_daemon_add"
+else
+ ser_daemon_remove="evrouter Xvfb $ser_remove"
+fi
+
+if [ x$RunDHCP = x1 ]
+then
+ ser_daemon_add="dnsmasq $ser_daemon_add"
+ ser_install="dnsmasq mvpmc $ser_install"
+
+else
+ ser_daemon_remove="dnsmasq $ser_daemon_remove"
+ ser_remove="dnsmasq mvpmc $ser_remove"
+fi
+
+if [ x$RunFrontend = x1 ]
+then
+ ser_daemon_add="frontend hal $ser_daemon_add"
+ ser_install=" $ser_install"
+ showX=true
+ else
+ ser_daemon_remove="frontend hal $ser_daemon_remove"
+ ser_remove="$ser_remove"
+ fi
+
+if [ x$UseMythWEB = x1 ]
+then
+ ser_install="lighttpd mythweb$postfix $ser_install"
+ ser_daemon_add="lighttpd $ser_daemon_add"
+ else
+ ser_remove="mythweb$postfix $ser_remove"
+ ser_daemon_remove="$ser_daemon_remove"
+ fi
+
+#samba
+if [ x$UseSamba = x1 ]
+then
+ ser_install="samba $ser_install"
+ ser_daemon_add="nmbd smbd $ser_daemon_add "
+ if [ x$Samba_mediareadonly = x1 ]
+ then
+ smreadonly="no"
+ else
+ smreadonly="yes"
+ fi
+
+ if [ x$Samba_homereadonly = x1 ]
+ then
+ shreadonly="no"
+ else
+ shreadonly="yes"
+ fi
+
+ if [ ! -d ${BASE}/etc/samba ]
+ then
+ mkdir ${BASE}/etc/samba
+ fi
+
+ if [ -f ${BASE}/data/home/mythtv/templates/smb.conf ]
+ then
+ install -D -m755 ${BASE}/data/home/mythtv/templates/smb.conf ${BASE}/etc/samba/smb.conf
+ else
+ sed -e "s/^.*workgroup =.*$/ workgroup = $Samba_domain/g " \
+ -e "s/^.*server string = .*$/ server string = $hostname/g" $TEMPLATES/samba/smb.conf.template > ${BASE}/etc/samba/smb.conf
+
+ if [ x$Samba_media = "x1" ]
+ then
+ echo "include = /etc/samba/smb.conf.media" >> ${BASE}/etc/samba/smb.conf
+ sed -e "s/^.*writeable.*$/writeable = $smreadonly/g" $TEMPLATES/samba/smb.conf.media > ${BASE}/etc/samba/smb.conf.media
+ fi
+
+ if [ x$Samba_home = "x1" ]
+ then
+ echo "include = /etc/samba/smb.conf.home" >> ${BASE}/etc/samba/smb.conf
+ sed -e "s/^.*writeable.*$/writeable = $shreadonly/g" $TEMPLATES/samba/smb.conf.home > ${BASE}/etc/samba/smb.conf.home
+
+ fi
+
+ fi
+else
+ ser_remove="samba $ser_remove"
+ ser_install="smbclient $ser_install"
+ ser_daemon_remove="smbd nmbd $ser_daemon_remove"
+fi
+
+
+if [ x$UseNFS = x1 ]
+then
+ ser_install="nfs-utils portmap $ser_install"
+ ser_daemon_add="nfsd nfslock portmap $ser_daemon_add"
+ sed -e "s/REPLACEME/*/g" $TEMPLATES/exports.template > ${BASE}/etc/exports
+
+else
+ ser_remove="$ser_remove"
+ ser_daemon_remove="nfsd nfslock $ser_daemon_remove"
+fi
+
+if [ x$Runncidd = x1 ]
+then
+ ser_daemon_add="ncidd ncid $ser_daemon_add"
+ ser_install="ncid $ser_install"
+ else
+ ser_daemon_remove="ncidd ncid $ser_daemon_remove"
+ ser_remove="ncid $ser_remove"
+ fi
+
+#Setting the default, just to avoid the or statement..
+if [ x$UseHobbit = x ]
+then
+ UseHobbit=0
+fi
+
+if [ x$UseHobbit = x1 ]
+then
+ case $SystemType in
+ Standalone|Master_backend )
+ ser_daemon_add="hobbit $ser_daemon_add"
+ ser_install="hobbitserver $ser_install"
+ ;;
+
+ *) ser_daemon_add="hobbit-client $ser_daemon_add"
+ ser_install="hobbit-client $ser_install"
+ ;;
+ esac
+else
+ ser_daemon_remove="hobbit hobbit-client $ser_daemon_remove"
+ ser_remove="hobbit-client hobbitserver $ser_remove"
+ rm -f /data/srv/httpd/htdocs/hobbit/index.html
+
+ fi
+
+
+
+}
+
+
+
+function setupsleep {
+if [ x$AutoShutdown = x1 ]
+then
+ cronshutdowntime=""
+ if [ x$Shutdowntime != x-1 ]
+ then
+ cronshutdowntime=$Shutdowntime
+ fi
+ if [ x$Shutdowntime2 != x-1 ]
+ then
+ if [ x$cronshutdowntime = x ]
+ then
+ cronshutdowntime=$Shutdowntime2
+ else
+ cronshutdowntime="${cronshutdowntime},${Shutdowntime2}"
+ fi
+ fi
+
+ sed -e "s/HOUR/$cronshutdowntime/g" $TEMPLATES/cron.template | crontab - -u mythtv
+else
+ sed -e "/00 HOUR.*/d" $TEMPLATES/cron.template | crontab - -u mythtv
+fi
+
+}
+
+
+function setuppacman () {
+#setup link to httpd dir
+echo "Configuring pacman"
+ if [ ! x$1 = x ]
+ then
+ ln -s ${BASE}/data/var ${BASE}/data/srv/httpd/htdocs/repo
+ echo "creating the link for the pacman repo mirror"
+ fi
+
+ for i in mv-core mv-core-testing mv-extra mv-extra-testing
+ do
+ echo "[$i]" > ${BASE}/etc/pacman.d/$i
+ #add mirror if needed
+ if [ x$PKG_MIRROR = x1 ]
+ then
+ echo " Server = http://$dbhost/repo/$i " >> ${BASE}/etc/pacman.d/$i
+ fi
+ #add user templates
+ USERTEMPLATES="/data/home/mythtv/templates"
+ if [ -f $USERTEMPLATES/sources/$i ]
+ then
+ echo "Adding user $i"
+ cat $USERTEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i
+ fi
+ cat $TEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i
+ echo "setting local mirror to $dbhost for $i "
+ done
+
+ #sed -e "s/REPLACEME/$dbhost/g" $TEMPLATES/sources/svc_pkg > /etc/pacman.d/svc_pkg
+
+
+}
+
+
+function setupzipcode () {
+ if [ ! x$zipcode = x ]
+ then
+ ${MV_ROOT}/bin/restore_default_settings.sh -c ZIP -z $zipcode
+ fi
+}
+
+function process_nfsmap () {
+#first look for a local copy of nfsmap
+if [ $1 = noip ]
+then
+ if [ -f /data/home/mythtv/templates/nfsmap ]
+ then
+ NFSMAP="/data/home/mythtv/templates/nfsmap"
+ else
+ mv -f /tmp/nfsmap /tmp/nfsmap.old
+ wget -O /tmp/nfsmap http://$dbhost:1337/templates/nfsmap
+ if [ $? = 0 ]
+ then
+ NFSMAP="/tmp/nfsmap"
+ fi
+ fi
+else
+ mv -f /tmp/nfsmap /tmp/nfsmap.old
+ wget -O /tmp/nfsmap http://$1:1337/templates/nfsmap
+ if [ $? = 0 ]
+ then
+ NFSMAP="/tmp/nfsmap"
+ fi
+fi
+
+ if [ -f $NFSMAP ]
+ then
+ #read in file
+ while read line
+ do
+ NFSserver=`echo "$line"|cut -d" " -f1`
+ NFSmount=`echo "$line"|cut -d" " -f2`
+ setupfstab $NFSserver $NFSmount
+ done <$NFSMAP
+ else
+ echo "couldn't find nfsmap"
+
+ fi
+}
+
+function setupcnfs () {
+ scrubnfs
+ if [ $HaveCentralNFS = "yes" ]
+ then
+ case x$NFSserver in
+ xfile:nfsmap )
+ process_nfsmap noip
+ ;;
+ *:nfsmap )
+ nfsmapip=`echo "$NFSserver" | cut -d: -f1 `
+ process_nfsmap $nfsmapip
+ ;;
+ *) setupfstab $NFSserver $NFSmount
+ esac
+
+ #if [ ! x"$NFSserver" = "xfile:nfsmap" ]
+ #then
+ # setupfstab $NFSserver $NFSmount
+ #else
+ # process_nfsmap
+ #fi
+ else
+ echo "fe_nfs"
+ #if no central nfs found, then use the mbe.
+ if [ $SystemType = "Frontend_only" ]
+ then
+ setupfstab ${dbhost}:/data/media /data/media
+ fi
+ fi
+
+}
+
+function setupbootsplash () {
+
+if [ x$Usebootsplash = x1 ]
+then
+ COMMAND="%s/^default.*0/default 1/g"
+else
+ COMMAND="%s/^default.*1/default 0/g"
+fi
+
+ex ${BASE}/boot/grub/menu.lst <<EOF
+:$COMMAND
+:wq
+EOF
+
+}
+
+function setuphobbitclient () {
+COMMAND="%s/^BBDISP=.*$/BBDISP=$dbhost/g"
+
+
+ex ${BASE}/data/srv/hobbit/client/etc/hobbitclient.cfg <<EOF
+:$COMMAND
+:wq
+EOF
+
+}
+
+function setupSyslog () {
+COMMAND="%s/^destination d_remote.*$/destination d_remote \{tcp\(\"${dbhost}\" port\(514\)\) \;\} \;/"
+ex ${BASE}/etc/syslog-ng.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+
+
+}
+
+function setupfuncminion () {
+COMMAND="%s/^certmaster.*$/certmaster = ${dbhost}/"
+ex ${BASE}/etc/func/minion.conf <<EOF
+:$COMMAND
+:wq
+EOF
+}
+
+function setupDNSMASQ(){
+if [ x$RunDHCP = x1 ]
+then
+ echo "DNSMASQ setup"
+
+#set default route to my GW
+COMMAND="%s/^dhcp-option=3.*$/dhcp-option=3,${route}/"
+ex ${BASE}/etc/dnsmasq.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+#setup dns to my ip
+COMMAND="%s/^dhcp-option=6.*$/dhcp-option=6,${ip}/"
+ex ${BASE}/etc/dnsmasq.conf <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+#change nfsroot to my ip
+COMMAND="%s/nfsroot=.*:/nfsroot=${ip}:/"
+ex ${BASE}/data/srv/tftp/pxelinux.cfg/default <<EOF
+:$COMMAND
+:wq
+EOF
+
+#add 127.0.0.1 to /etc/resolv.conf
+ echo "search lan" > ${BASE}/etc/resolv.conf
+ echo "nameserver 127.0.0.1" >> ${BASE}/etc/resolv.conf
+ echo "nameserver $nameserver" >> ${BASE}/etc/resolv.conf
+fi
+
+#setup dongle.config
+COMMAND="%s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s ${ip} \& /"
+ex ${BASE}/data/srv/tftp/dongle.bin.config <<EOF
+:$COMMAND
+:wq
+EOF
+
+
+
+#setup dongle.config
+
+}
+
+function reloadfe(){
+ PID=`ps -ef |grep mythfrontend|grep -v grep |awk '{print $2 }'`
+ /usr/bin/backend_control.sh clearcache behost $dbhost
+ if [ x$RESTART_LCD = xtrue ]
+ then
+ killall -9 mythlcdserver
+ fi
+ kill -s USR1 $PID
+
+}
+
+
+function setup_db (){
+
+ install="mysql avahli"
+ daemon_add="mysql"
+ packages
+ daemons
+status=1
+mysqlstatus=1
+while [ ! $status = 0 ]
+do
+ sv stop mysql
+ sleep 1
+ sv start mysql
+ mysqlstatus=$?
+ if [ $mysqlstatus = 0 ]
+ then
+ mysql -e "show databases;"
+ showstatus=$?
+ if [ $showstatus = 0 ]
+ then
+ pacman --noconfirm -R mythdb-initial
+ pacman --noconfirm -S mythdb-initial
+ $MV_ROOT/bin/restore_default_settings.sh -c load
+ if [ $SystemType = "Master_backend" ]
+ then
+ $MV_ROOT/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
+ fi
+ #update database to allow user jobs on this host.
+ $MV_ROOT/bin/restore_default_settings.sh -c USERJOBALLOW
+ $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL
+ if [ -d /data/srv/mysql/mythconverg ]
+ then
+ pacman --noconfirm -R webcalendar
+ pacman --noconfirm --nodeps -S webcalendar
+ status=0
+ fi
+ fi
+ fi
+done
+}
+
+
+#----------------------------------------------------MAIN PROGRAM-------------------------------------------
+#misc,sleep,hostype,advanced,audio
+eval LAST=\$$#
+LIST=`echo $LAST | tr , " " `
+
+hosttypechange="false"
+
+
+for i in $LIST
+ do
+ echo $i
+ case $i in
+ misc) showmisc="true"
+ ;;
+ sleep) showsleep="true"
+ ;;
+ hostype) showhost="true"
+ showX="true"
+ ;;
+ hostypec) hosttypechange="true"
+ ;;
+ advanced) showadvanced="true"
+ #showhost="true"
+ ;;
+ audio) showaudio="true"
+ ;;
+ network) shownetwork="true"
+ ;;
+ advancedX) showX="true"
+ ;;
+ restartfe) killall -9 mythfrontend
+ killall -9 mythwelcome
+ exit 0
+ ;;
+ reloadfe) reloadfe
+ ;;
+
+ this_is_install) MV_NEW_INSTALL="true"
+ ;;
+
+ esac
+ done
+
+if [ x$MV_NEW_INSTALL = xtrue ]
+then
+ hosttypechange="false"
+fi
+
+
+
+# exit 1
+
+#network
+if [ x"$shownetwork" = xtrue ]
+then
+ OLDHOSTNAME=`hostname`
+ NEWHOSTNAME=$hostname
+ if [ ! $OLDHOSTNAME = $NEWHOSTNAME ]
+ then
+
+ ${MV_ROOT}/bin/restore_default_settings.sh -cuhostname -o -h$OLDHOSTNAME
+ RESTART_FE="true"
+ hostname $NEWHOSTNAME
+ if [ $SystemType != "Frontend_only" ]
+ then
+ sv restart mythbackend
+ fi
+
+ fi
+
+ setup_network
+ CMDLINE=$(cat /proc/cmdline)
+ echo $CMDLINE |grep -q netboot
+ NETBOOT=$?
+ if [ x$NETBOOT = x1 ]
+ then
+ echo "loading network"
+ ${BASE}/etc/net/scripts/network.init reload
+ else
+ echo "netboot, will not start network"
+ fi
+fi
+
+
+if [ x$showhost = "xtrue" ]
+then
+case $SystemType in
+ Standalone)
+ setupntp 1
+ services
+ if [ x$hosttypechange = "xtrue" ]
+ then
+ setup_db
+ fi
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="mysql mythdb-initial avahli portmap $ser_install"
+
+
+ remove="none $ser_remove"
+
+ daemon_add="mysql mythbackend avahi portmap $ser_daemon_add"
+ daemon_remove="none $ser_daemon_remove"
+
+ ;;
+ Master_backend)
+ setupntp 1
+ services
+
+ if [ ! -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ mkdir ${BASE}/etc/avahi/services
+ cp $TEMPLATES/mysql.service ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="mysql mythdb-initial avahi portmap myth2ipod mythtv-status $ser_install "
+ remove="$ser_remove"
+
+ daemon_add="mysql mythbackend avahi portmap certmaster $ser_daemon_add"
+ daemon_remove="$ser_daemon_remove"
+ ;;
+ Slave_backend)
+ setupntp 0
+ services
+ if [ x$hosttypechange = "xtrue" ]
+ then
+ setup_db
+ fi
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ #cp $TEMPLATES/mysql.service ${BASE}/etc/avahi/services/mysql.service
+ install="mysql avahi $ser_install "
+ remove=" $ser_remove"
+
+ daemon_add="mythbackend avahi portmap $ser_daemon_add"
+ daemon_remove="$ser_daemon_remove"
+ ;;
+ Frontend_only)
+ #Add values for services
+ setupntp 0
+ services
+ if [ -f ${BASE}/etc/avahi/services/mysql.service ]
+ then
+ rm -f ${BASE}/etc/avahi/services/mysql.service
+ sudo sv restart avahi
+ fi
+
+ install="libmysqlclient mysql-clients portmap avahi $ser_install"
+ remove="mysql mythweb$postfix $ser_remove"
+
+ daemon_add="avahi portmap $ser_daemon_add "
+ daemon_remove="mysql mythbackend $ser_daemon_remove"
+ ;;
+
+
+esac
+setupSyslog
+setupfuncminion
+fi
+
+#apply these to ALL types
+
+
+
+
+#systemtype
+
+if [ x$showhost = "xtrue" ]
+then
+ setupmysqlnetwork
+ setupmysql
+ setupremote
+ #grab the new dbhost key
+ #/usr/bin/grabkey.py
+fi
+
+#audio
+
+if [ x$showaudio = "xtrue" ]
+then
+ #setupsoundtype
+ if [ ! x$Audiotype = xtinker ]
+ then
+ ${MV_ROOT}/bin/soundconfig.sh -t real -i $Audiotype -d $SoundDevice
+ fi
+fi
+
+#should always run
+packages
+
+#misc
+
+if [ x$showmisc = "xtrue" ]
+then
+ setupzipcode
+ settimezone
+ setupcnfs
+fi
+
+#sleep
+if [ x$showsleep = "xtrue" ]
+then
+ setupsleep
+fi
+
+if [ x$showX = "xtrue" ]
+then
+ ${MV_ROOT}/bin/xconfig.sh
+fi
+
+#advanced
+if [ x$showadvanced = "xtrue" ]
+then
+ if [ ! x$showhost = "xtrue" ]
+ then
+ services
+ install="none $ser_install"
+ remove="none $ser_remove"
+ daemon_add=" none $ser_daemon_add"
+ daemon_remove="none $ser_daemon_remove"
+ packages
+
+
+ if [ x$SystemType = xMaster_backend ]
+ then
+ setuppacman link
+ else
+ setuppacman
+ fi
+ fi
+ setupncidclient
+ setupnciddaemon
+ setupbootsplash
+ setuphobbitclient
+ setupreceiver
+ setupevrouter
+ setupblaster
+ setupLCD
+ setupDNSMASQ
+
+fi
+
+
+
+daemons
+#add check for lcd, and restart if needed.
+
+if [ x$RESTART_FE = xtrue ]
+then
+ reloadfe
+fi
+
+
+
+
+
+case $SystemType in
+ Standalone) smoltsystem=6
+ MVRELEASE="$MVRELEASE (Standalone)"
+ ;;
+ Master_backend)
+ if [ x$RunFrontend = x1 ]
+ then
+ smoltsystem=2
+ MVRELEASE="$MVRELEASE (MBE with Frontend)"
+ else
+ smoltsystem=1
+ MVRELEASE="$MVRELEASE (MBE)"
+ fi
+ ;;
+ Slave_backend)
+ if [ x$RunFrontend = x1 ]
+ then
+ smoltsystem=5
+ MVRELEASE="$MVRELEASE (SLAVE with Frontend)"
+ else
+ smoltsystem=5
+ MVRELEASE="$MVRELEASE (SLAVE)"
+ fi
+ ;;
+ Frontend_only)
+ smoltsystem=3
+ MVRELEASE="$MVRELEASE ( Frontend only)"
+ ;;
+esac
+echo $MVRELEASE > /etc/os_myth_release
+echo "systemtype=$smoltsystem" > /data/home/mythtv/.mythtv/smolt.info
+echo "remote=$Remotetype" >> /data/home/mythtv/.mythtv/smolt.info
+
diff --git a/abs/core/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf b/abs/core/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf
new file mode 100644
index 0000000..d49fbf6
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/Shuttle-SG33/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=shuttleVFD
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core/live-installer/templates/LCD/Silverstone/LCDd.conf b/abs/core/live-installer/templates/LCD/Silverstone/LCDd.conf
new file mode 100644
index 0000000..2596c25
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/Silverstone/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=imon
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core/live-installer/templates/LCD/Silverstone/modules b/abs/core/live-installer/templates/LCD/Silverstone/modules
new file mode 100644
index 0000000..cd576c3
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/Silverstone/modules
@@ -0,0 +1 @@
+lirc_imon #LCD
diff --git a/abs/core/live-installer/templates/LCD/antec_fusion/LCDd.conf b/abs/core/live-installer/templates/LCD/antec_fusion/LCDd.conf
new file mode 100644
index 0000000..2596c25
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/antec_fusion/LCDd.conf
@@ -0,0 +1,869 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, EyeboxOne,
+# g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior, irman,
+# joy, lb216,lcdm001, lcterm, lirc,MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, pyramid, sed1330, sed1520, serialVFD,
+# sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=imon
+#Driver=curses
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+# Set the initial off-brightness [default: 0; legal: 0 - 255]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073 ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+# NOTE: The driver will ignore this if the display is a vfd or vkd
+# as they crash if the backlight is turned off
+Backlight=yes
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=800
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# The following table translates from MtxOrb key letters to logical key namess.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446)
+# Note: G321D is the only one that is tested currently.
+Type=G321D
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+# EOF
diff --git a/abs/core/live-installer/templates/LCD/antec_fusion/lircd.conf b/abs/core/live-installer/templates/LCD/antec_fusion/lircd.conf
new file mode 100644
index 0000000..ce64936
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/antec_fusion/lircd.conf
@@ -0,0 +1,38 @@
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.1(default) on Thu Sep 6 09:06:50 2007
+#
+# contributed by
+#
+# brand: /tmp/out
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Antec_fusion_silver_v1
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ post_data_bits 16
+ post_data 0xFF
+ gap 131985
+ min_repeat 6
+ toggle_bit 0
+
+
+ begin codes
+ CW 0x0001
+ CCW 0x0100
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/LCD/antec_fusion/lircrc b/abs/core/live-installer/templates/LCD/antec_fusion/lircrc
new file mode 100644
index 0000000..7a39704
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/antec_fusion/lircrc
@@ -0,0 +1,15 @@
+begin
+ remote = Antec_fusion_silver_v1
+ prog = mythtv
+ button = CW
+ repeat = 1
+ config = ]
+end
+
+begin
+ remote = Antec_fusion_silver_v1
+ prog = mythtv
+ button = CCW
+ repeat = 1
+ config = [
+end
diff --git a/abs/core/live-installer/templates/LCD/antec_fusion/modules b/abs/core/live-installer/templates/LCD/antec_fusion/modules
new file mode 100644
index 0000000..cd576c3
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/antec_fusion/modules
@@ -0,0 +1 @@
+lirc_imon #LCD
diff --git a/abs/core/live-installer/templates/LCD/xosd/LCDd.conf b/abs/core/live-installer/templates/LCD/xosd/LCDd.conf
new file mode 100644
index 0000000..5b37bd7
--- /dev/null
+++ b/abs/core/live-installer/templates/LCD/xosd/LCDd.conf
@@ -0,0 +1,957 @@
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifiying them in a driver= line in the
+# server section, like:
+#
+# Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving af File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65,
+# EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior,
+# irman, joy, lb216, lcdm001, lcterm, lirc, MD8800, ms6931, mtc_s16209x,
+# MtxOrb, NoritakeVFD, picolcd, pyramid, sed1330, sed1520, serialPOS,
+# serialVFD, sli, stv5730, svga, t6963, text, tyan, ula200, xosd
+Driver=xosd
+
+# Tells the driver to bind to the given interface
+Bind=127.0.0.1
+
+# Listen on this specified port; defaults to 13666.
+Port=13666
+
+# Sets the reporting level; defaults to 2 (warnings and errors only).
+ReportLevel=3
+
+# Should we report to syslog instead of stderr ? Default: no
+#ReportToSyslog=yes
+
+# Sets the default time in seconds to displays a screen.
+WaitTime=5
+
+# User to run as. LCDd will drop its root priviledges,
+# if any, and run as this user instead.
+User=nobody
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active.
+#ServerScreen=no
+
+# The server will stay in the foreground if set to true.
+#Foreground=no
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+# specific setup! Otherwise LCDd won't be able to find
+# the driver modules and will thus not be able to
+# function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/lcdproc/
+
+# GoodBye message: each entry represents a display line; default: builtin
+#GoodBye="Thanks for using"
+#GoodBye=" LCDproc!"
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client.
+# These are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+# If you have only 4 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+#NextScreenKey=Down
+
+# If you have only 3 keys, you can choose to use this:
+#ToggleRotateKey=Enter
+#PrevScreenKey=Up
+
+
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# The following works excellent with 4 keys or more.
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+# If you have 6 keys you may define these as well
+#LeftKey=Left
+#RightKey=Right
+
+# If you have only 3 keys, you could use something like this:
+#MenuKey=Escape
+#EnterKey=Enter
+#DownKey=Down
+
+
+
+### Driver sections are below this line, in alphabetical order ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz633 driver (for CF633 only) ##
+[CFontz633]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD type (size) [default: 16x2]
+Size=16x2
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=19200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## CrystalFontz packet driver (for CF631, CF633 & CF635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 631, 633, 635]
+Model=635
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+# Select the LCD size [default: depending on model: 635: 20x4, 631: 20x2, 633: 16x2]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=115200
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+# Currently this flag is not in use, there is no such thing as NewFirmware. ;=)
+#NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# I want to reboot the LCD to make sure we start from a known state
+Reboot=yes
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x4
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal, yes, no]
+UseACS=no
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 1602]
+Model=12232
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size [default: depending on model: 12232: 20x4, 1602: 16x2]
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits to test keypad assignement
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## ea65 driver for the display in AOpen XC Cube AV EA65 media barebones ##
+[ea65]
+
+# Device is fixed /dev/ttyS1
+# Width and Height are fixed 9x1
+
+# As the VFD is self luminescent we don't have a backlight
+# But we can use the backlight functions to control the front LEDs
+# Brightness 0 to 299 -> LEDs off
+# Brightness 300 to 699 -> LEDs half bright
+# Brightness 700 to 1000 -> LEDs full bright
+Brightness=500
+# OffBrightness is the the value used for the 'backlight off' state
+OffBrightness=0
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+#Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolutioni
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minumum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+## optional:
+Brightness=50 # Brightness (in %) if applicable
+Contrast=50 # Contrast (in %) if applicable
+Backlight=no # Backlight if applicable
+UpsideDown=no # flip image upside down
+Invert=no # invert light/dark pixels
+ShowDebugFrame=no # turns on/off 1 pixel thick debugging
+ # border whithin the usable text area,
+ # for setting up TextResolution and
+ # MinFontFaceSize (if using FT2);
+ShowBigBorder=no # border around the unused area
+ShowThinBorder=yes # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 560; legal: 0 - 1000]
+Contrast=560
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+
+# Select what type of connection. See documentation for types.
+ConnectionType=4bit
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device of the serial interface (default is /dev/lcd)
+Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+Keypad=no
+
+# set the initial contrast (for bwctusb only) [default: 0; legal: 0 - 1000]
+Contrast=0
+
+# If you have a switchable backlight.
+Backlight=no
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+OutputPort=no
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+# This flag is NOT the old obsolete Extended option.
+#ExtendedMode=yes
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, ea_ks0073, sed1278f_0b ]
+Charmap=hd44780_default
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
+# is still alive. When set to a value bigger then null the character in the
+# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
+#KeepAliveDisplay=0
+
+# If you experience occasional garbage on your display you can use this
+# option as workaround. If set to a value bigger than null it forces a
+# full screen refresh <RefreshDiplay> seconds. Default: 0.
+#RefreshDisplay=5
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+# KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+# KeyMatrix_1_3=Enter
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+
+
+
+## ICP A106 driver ##
+[icp_a106]
+Device=/dev/ttyS1
+
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number [exactly as listed by usbview]
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# Specifies if the last line is pixel addressable or it controls an
+# underline effect. [default: true (= pixel addressable); legal: yes, no]
+#Lastline=true
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+
+
+## IrMan driver ##
+[IrMan]
+#if in trouble with IrMan, try Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname Function
+# Normal context Menu context
+# ------- -------------- ------------
+# PauseKey Pause/Continue Enter/select
+# BackKey Back(Go to previous screen) Up/Left
+# ForwardKey Forward(Go to next screen) Down/Right
+# MainMenuKey Open main menu Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at /usr/lib/lcdproc/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+# is a vfd or vkd as they don't have this feature
+Contrast=480
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# The following table translates from MtxOrb key letters to logical key names.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Specifies the size of the LCD.
+Size=20x4
+
+# set the brightness
+Brightness=255
+
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# re-initialize VFD ?
+#Reboot=yes
+
+
+
+## Mini-box.com picoLCD (usblcd) driver ##
+[picolcd]
+# This is for the Mini-Box.com usblcd device that ships with the M300. It can
+# also be purchased separately but this driver has only been tested on the M300
+# setup.
+
+# KeyTimeout is the time that LCDd spends waiting for a key press before cycling
+# through other duties. Higher values make LCDd use less CPU time and make
+# key presses more detectable. Lower values make LCDd more responsive but a
+# little prone to missing key presses. 500 (.5 second) is the default and a
+# balanced value.
+KeyTimeout=500
+
+# Contrast: [default: 1000; legal: 0 - 1000]
+Contrast=1000
+
+# Light the keys? i[default: on; legal: on, off]
+Keylights=on
+
+# If Keylights is on, the you can unlight specific keys below:
+# Key0 is the directional pad. Key1 - Key5 correspond to the F1 - F5 keys.
+# There is no LED for the +/- keys. This is a handy way to indicate to users
+# which keys are disabled. [default: on; legal: on, off]
+Key0Light=on
+Key1Light=on
+Key2Light=on
+Key3Light=on
+Key4Light=on
+Key5Light=on
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002)
+# Note: Currently only tested with G321D & SP14Q002.
+Type=G321D
+
+# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
+CellSize=6x10
+
+# Select what type of connection [legal: classic, bitshaker; default: classic]
+ConnectionType=classic
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+
+
+## serial POS display driver ##
+[serialPOS]
+
+# Device to use in serial modea [default: /dev/lcd]
+Device=/dev/lcd
+
+# Specifies the size of the display in characters. [default: 16x2]
+Size=16x2
+
+# Set the communication protocol to use with the POS display.
+# [default: AEDEX; legal: IEE, Epson, Emax, IBM, LogicControls, Ultimate]
+Type=AEDEX
+
+# communication baud rate with the display [default: 9600; legal: 1200, 2400, 19200, 115200]
+Speed=9600
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's. ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# (* most should work, not testet yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
+use_parallel=no
+
+# Number of Custom-Characters [default: displaytype dependent]
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes]
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size [default: 20x6]
+Size=20x6
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Is ECP mode on? [default: yes; legal: yes, no]
+#ECPlpt=yes
+
+# Use graphics? [default: no; legal: yes, no]
+#graphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# font to use, in XLFD format, as given by "xfontsel"
+Font=-*-clean-*-*-*-*-*-160-*-*-*-*-*-*
+
+
+# EOF
diff --git a/abs/core/live-installer/templates/cc.orig.sh b/abs/core/live-installer/templates/cc.orig.sh
new file mode 100755
index 0000000..d8fd2dc
--- /dev/null
+++ b/abs/core/live-installer/templates/cc.orig.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+# rwraithr added segment for 4 digit channels
+# make sure to set this string to
+# the corresponding remote in /etc/remoted.conf
+#$remote_name = "RC-u43c-1h";
+$remote_name = "$REMOTE_NAME";
+
+sub change_channel {
+ my($channel_digit) = @_;
+ system ("/usr/bin/irsend SEND_ONCE $remote_name $channel_digit");
+ sleep .5;
+}
+
+$channel=$ARGV[0];
+sleep 1;
+if (length($channel) > 3) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+ change_channel(substr($channel,2,1));
+ change_channel(substr($channel,3,1));
+} elsif (length($channel) > 2) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+ change_channel(substr($channel,2,1));
+} elsif (length($channel) > 1) {
+ change_channel(substr($channel,0,1));
+ change_channel(substr($channel,1,1));
+} else {
+ change_channel(substr($channel,0,1));
+}
+system ("/usr/bin/irsend SEND_ONCE $remote_name SELECT");
+
+#system ("sleep 2");
+#system ("/usr/bin/ivtvctl -p 2 -d /dev/video2");
+#system ("/usr/bin/ivtvctl -p 1 -d /dev/video2");
diff --git a/abs/core/live-installer/templates/cc.sh b/abs/core/live-installer/templates/cc.sh
new file mode 100755
index 0000000..0cce308
--- /dev/null
+++ b/abs/core/live-installer/templates/cc.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+/usr/local/bin/cc.orig.sh $@ &
+/usr/local/bin/cc_vol.sh &
+
+
diff --git a/abs/core/live-installer/templates/cc_vol.sh b/abs/core/live-installer/templates/cc_vol.sh
new file mode 100755
index 0000000..819008d
--- /dev/null
+++ b/abs/core/live-installer/templates/cc_vol.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+sleep 2
+/usr/local/bin/ivtvctl -p 2 -d /dev/video2
+/usr/local/bin/ivtvctl -p 1 -d /dev/video2
+
diff --git a/abs/core/live-installer/templates/change_chan.sh b/abs/core/live-installer/templates/change_chan.sh
new file mode 100755
index 0000000..5ad8765
--- /dev/null
+++ b/abs/core/live-installer/templates/change_chan.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+REMOTE_NAME=SA3250
+cmd="$1"
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend SEND_ONCE $REMOTE_NAME $digit
+ sleep 0.3
+ # If things work OK with sleep 1, try this for faster channel changes:
+ # sleep 0.3
+ done
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+ esac
+# /usr/bin/fix_audio.sh &
diff --git a/abs/core/live-installer/templates/cron.template b/abs/core/live-installer/templates/cron.template
new file mode 100644
index 0000000..3fcea10
--- /dev/null
+++ b/abs/core/live-installer/templates/cron.template
@@ -0,0 +1,4 @@
+# <minute> <hour> <day> <month> <dow> <command>
+
+
+00 HOUR * * * /usr/bin/sudo /sbin/halt-runit >/dev/null 2>&1 \ No newline at end of file
diff --git a/abs/core/live-installer/templates/etcnet/eth/ipv4address b/abs/core/live-installer/templates/etcnet/eth/ipv4address
new file mode 100644
index 0000000..1df28d2
--- /dev/null
+++ b/abs/core/live-installer/templates/etcnet/eth/ipv4address
@@ -0,0 +1,2 @@
+192.168.1.158/24
+
diff --git a/abs/core/live-installer/templates/etcnet/eth/ipv4route b/abs/core/live-installer/templates/etcnet/eth/ipv4route
new file mode 100644
index 0000000..373a4d1
--- /dev/null
+++ b/abs/core/live-installer/templates/etcnet/eth/ipv4route
@@ -0,0 +1,2 @@
+default via 192.168.1.1
+
diff --git a/abs/core/live-installer/templates/etcnet/eth/iwconfig b/abs/core/live-installer/templates/etcnet/eth/iwconfig
new file mode 100644
index 0000000..b1f14e0
--- /dev/null
+++ b/abs/core/live-installer/templates/etcnet/eth/iwconfig
@@ -0,0 +1,2 @@
+essid home_lan
+#key ababababab
diff --git a/abs/core/live-installer/templates/etcnet/eth/options b/abs/core/live-installer/templates/etcnet/eth/options
new file mode 100644
index 0000000..929da58
--- /dev/null
+++ b/abs/core/live-installer/templates/etcnet/eth/options
@@ -0,0 +1,7 @@
+# If you want to change current interface name, edit /etc/net/iftab,
+# rename current directory and uncomment this line:
+TYPE=eth
+DISABLED=no
+BOOTPROTO=dhcp
+ONBOOT=yes
+CONFIG_WIRELESS=no
diff --git a/abs/core/live-installer/templates/evrouter/MythVantage-4 b/abs/core/live-installer/templates/evrouter/MythVantage-4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core/live-installer/templates/evrouter/MythVantage-4
diff --git a/abs/core/live-installer/templates/evrouter/MythVantage-8 b/abs/core/live-installer/templates/evrouter/MythVantage-8
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core/live-installer/templates/evrouter/MythVantage-8
diff --git a/abs/core/live-installer/templates/evrouter/MythVantage-Full b/abs/core/live-installer/templates/evrouter/MythVantage-Full
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core/live-installer/templates/evrouter/MythVantage-Full
diff --git a/abs/core/live-installer/templates/evrouter/MythVantage8-minipac b/abs/core/live-installer/templates/evrouter/MythVantage8-minipac
new file mode 100644
index 0000000..0e3a708
--- /dev/null
+++ b/abs/core/live-installer/templates/evrouter/MythVantage8-minipac
@@ -0,0 +1,3 @@
+"Ultimarc Button/Joystick/Trackball Interface " "" none key/127 "Shell//usr/bin/restartfrontend.sh"
+"Ultimarc Button/Joystick/Trackball Interface " "" none key/18 "Shell/eject"
+
diff --git a/abs/core/live-installer/templates/evrouter/MythVantage8-uhid b/abs/core/live-installer/templates/evrouter/MythVantage8-uhid
new file mode 100644
index 0000000..7cb2e34
--- /dev/null
+++ b/abs/core/live-installer/templates/evrouter/MythVantage8-uhid
@@ -0,0 +1,3 @@
+"Universal Human Interface Device Universal Human Interface Device" "" none key/125 "Shell//usr/bin/restartfrontend.sh"
+"Universal Human Interface Device Universal Human Interface Device" "" none key/18 "Shell/eject"
+
diff --git a/abs/core/live-installer/templates/exports.template b/abs/core/live-installer/templates/exports.template
new file mode 100644
index 0000000..b946287
--- /dev/null
+++ b/abs/core/live-installer/templates/exports.template
@@ -0,0 +1,8 @@
+# /etc/exports
+#
+# See exports(5) for a description.
+
+# use exportfs -arv to reread
+/data/media REPLACEME(rw,all_squash,anonuid=1000,anongid=1000)
+/data/var/cache REPLACEME(rw,all_squash,anonuid=1000,anongid=1000)
+
diff --git a/abs/core/live-installer/templates/fstab.conf.template b/abs/core/live-installer/templates/fstab.conf.template
new file mode 100755
index 0000000..d27bcd9
--- /dev/null
+++ b/abs/core/live-installer/templates/fstab.conf.template
@@ -0,0 +1,16 @@
+#
+# /etc/fstab: static file system information
+#
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+
+/dev/cdrom /mnt/cd iso9660 ro,user,noauto,unhide 0 0
+/dev/dvd /mnt/dvd udf ro,user,noauto,unhide 0 0
+/dev/fd0 /mnt/fl vfat user,noauto 0 0
+
+/dev/sda1 / reiserfs defaults 0 1
+/dev/sda2 swap swap defaults 0 0
+/dev/sda3 /data reiserfs defaults 0 0
+192.168.1.6:/media /data/media nfs
+
diff --git a/abs/core/live-installer/templates/mysql.service b/abs/core/live-installer/templates/mysql.service
new file mode 100644
index 0000000..160450e
--- /dev/null
+++ b/abs/core/live-installer/templates/mysql.service
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+
+<service-group>
+
+ <name replace-wildcards="yes">mysql_myth on %h</name>
+
+ <service>
+ <type>_mysql._tcp</type>
+ <port>3306</port>
+ </service>
+
+</service-group>
diff --git a/abs/core/live-installer/templates/mysql.txt b/abs/core/live-installer/templates/mysql.txt
new file mode 100755
index 0000000..04531b5
--- /dev/null
+++ b/abs/core/live-installer/templates/mysql.txt
@@ -0,0 +1,29 @@
+DBHostName=127.0.0.1
+DBUserName=mythtv
+DBPassword=mythtv
+DBName=mythconverg
+DBType=QMYSQL3
+
+# Set the following if you want to use something other than the
+# machine's real hostname for identifying settings in the database.
+# This is useful if your hostname changes often, as otherwise
+# you'll need to reconfigure mythtv (or futz with the DB) every time.
+# TWO HOSTS MUST NOT USE THE SAME VALUE
+#
+#LocalHostName=my-unique-identifier-goes-here
+
+# If you want your frontend to be able to wake your MySQL server
+# using WakeOnLan, have a look at the following settings:
+#
+# Set the time the frontend waits (in seconds) between reconnect tries.
+# This should be the rough time your MySQL server needs for startup
+#WOLsqlReconnectWaitTime=0
+#
+#
+# This is the amount of retries to wake the MySQL server until the frontend
+# gives up
+#WOLsqlConnectRetry=5
+#
+#
+# This is the command executed to wake your MySQL server.
+#WOLsqlCommand=echo 'WOLsqlServerCommand not set'
diff --git a/abs/core/live-installer/templates/ncid.conf.template b/abs/core/live-installer/templates/ncid.conf.template
new file mode 100755
index 0000000..43ef490
--- /dev/null
+++ b/abs/core/live-installer/templates/ncid.conf.template
@@ -0,0 +1,51 @@
+# tcl/tk configuration file
+
+# Directory NCID uses to find the helper scripts
+set ProgDir /usr/share/ncid
+
+# default helper script
+set EXTPROG ncid-osd
+
+# Set Host to the NCID server address
+# Host defaults to 127.0.0.1
+#set Host 127.0.0.1
+set Host 192.168.1.5
+
+# The NCID port default is 3333
+set Port 3333
+
+# If the connection to the server is lost,
+# try every Delay seconds to reconnect
+# The Default: 60
+set Delay 20
+
+# If set to 1, display raw data received from the NCID server
+# If set to 0, do not display raw data received from the NCID server
+# Default: 0
+set Raw 0
+
+# If set to 1, output: date time number name
+# If set to 0, output: name number
+# Default: 0
+set All 1
+
+# If set to 1, display formatted CID, and CID log file on connect
+# If set to 0, ddo not isplay formatted CID, and CID log file on connect
+# Default: 0
+set Verbose 0
+
+# If set to 1, display information in terminal progran or external program
+# If set to 0, display information using a GUI
+# Default: 0
+set NoGUI 1
+
+# output name and number to external program
+# Default: 0
+set Callprog 1
+
+# ring number to call external program
+# Default: 0
+set CallOnRing 0
+
+# external called program
+set Program [list $ProgDir/$EXTPROG]
diff --git a/abs/core/live-installer/templates/ncidd.conf.template b/abs/core/live-installer/templates/ncidd.conf.template
new file mode 100644
index 0000000..daa2e79
--- /dev/null
+++ b/abs/core/live-installer/templates/ncidd.conf.template
@@ -0,0 +1,143 @@
+# ncid - Network CallerID Server Config File
+
+################################
+# Definitions and Line formats #
+################################
+
+# lines can be blank, or start with the words: send, set #
+#
+# A line is divided into words, separated by spaces
+#
+# A word is either a string of non-blank characters, everything
+# between double quotes, or an equal sign.
+#
+# SEND LINE FORMAT:
+# send DATATYPE [DATATYPE] ...
+# where DATATYPE = cidlog, cidinfo
+#
+# SET LINE FORMAT:
+# set ITEM = VALUE [ITEM = VALUE] ...
+# where ITEM = cidalias, cidlog, datalog, initcid, initstr,
+# lockfile, port, ttyclocal, ttyport, ttyspeed,
+# nomodem
+
+############################
+# Log and Info for Clients #
+############################
+
+# Send the call log to a client when connected
+# The default is not to send the call log file
+send cidlog
+
+# Send call info (LINE and RING) to a client at each ring
+# The default is not to send the call info line
+send cidinfo
+
+############################
+# NCID Communications Port #
+############################
+
+# The default TCP/IP port is 3333
+ set port = 3333
+
+#######################
+# Alias and Log Files #
+#######################
+
+# The default CID alias file: /etc/ncid/ncidd.alias
+# set cidalias = /etc/ncid/ncidd.alias
+
+# The default CID call log file: /var/log/cidcall.log
+# the log file must exist, ncidd will not create it
+# (also make the change in /etc/logrotate.d/ncidd
+# and also /etc/ncid/ncidrotate.conf)
+# set cidlog = /var/log/cidcall.log
+
+# The default tty data log file: /var/log/ciddata.log
+# the log file must exist, ncidd will not create it
+# (also make the change in /etc/logrotate.d/ncidd
+# and also /etc/ncid/ncidrotate.conf)
+# set datalog = /var/log/ciddata.log
+
+#####################
+# TTY Configuration #
+#####################
+
+# The default tty port: /dev/modem
+# set ttyport = /dev/cu.modem # Macintosh OS X
+ set ttyport = /dev/ttyS1
+
+# The default tty port speed: 19200
+# The tty speed can be one of: 38400, 19200, 9600, 4800
+# set ttyspeed = 4800 # NetCallerID port speed
+
+# Ignore tty control signals for internal modems and 3 wire serial cables
+# Disable tty control signals: ttyclocal = 1
+# Enable tty control signals: ttyclocal = 0 (default)
+# set ttyclocal = 1
+
+# The lockfile name is generated automatically
+# If tty port is /dev/modem, lockfile is: /var/lock/LCK..modem
+# set lockfile = /var/lock/LCK..ttyS0
+
+#####################
+# Modem or No Modem #
+#####################
+
+# Obtain CallerID from a CID device or a modem
+# device: nomodem = 1 (do not send AT commands)
+# modem: nomodem = 0 (default - send AT commands)
+# set nomodem = 1
+
+########################
+# Modem Initialization #
+########################
+
+# The default modem initialization is: "AT Z S0=0 E1 V1 Q0"
+# set initstr = "ATE1V1Q0"
+#
+# Alternate modem initialization string
+# set initstr = "AT&FE1V1Q0+VIP"
+
+# Addon strings to set modem for Distinctive Ring:
+# http://www.modemsite.com/56k/dring.asp
+#
+# 3Com/USR/TI chipset: ATS41=1
+# Reported Ring Codes: RING A, RING B, RING C
+# Rockwell/Conexant chipset: AT-SDR=7
+# Reported Ring Codes: RING 1, RING 2, RING 3
+# Lucent/Agere chipset: AT+VDR=1,0
+# Reported DROF/DRON messages: DRON=5 DROF=11, DRON=5 DROF=34
+#
+# Example adds 3Com DR to the default modem initialization
+# set initstr = "ATE1V1Q0S41=1"
+
+# The default for ncidd is to try two CID strings to setup
+# CallerID: "AT+VCID=1" and if that fails: "AT#CID=1".
+# set initcid = "AT#CID=1"
+#
+# Alternate CID strings to try if default does not work:
+# set initcid = "AT+FCLASS=8;+VCID=1"
+# set initcid = "AT-STE=1;+VCID=1"
+# set initcid = "AT-STE=1;#CID=1"
+
+#################
+# TiVo Settings #
+#################
+# set ttyclocal = 1 # TiVo requires CLOCAL
+# set ttyport = /dev/ttyS1 # TiVo Modem Port
+# set lockfile = /var/tmp/modemlock # needed for TiVo Modem Port
+#
+# To use a modem on the TiVo serial port
+# Tivo (stereo mini jack) ->
+# -> (stereo mini plug) TiVo serial cable (9-pin male) ->
+# -> (9-pin Female) PC modem cable (25-pin Male ->
+# -> (25-pin Female) Modem
+# if the modem has switches, disable DTR
+# Use this string to set the modem before attaching it to the TiVo:
+# AT&F0&D0&B1&W
+#
+# set ttyport = /dev/ttyS3 # TiVo Serial Port
+#
+# End TiVo Settings
+
diff --git a/abs/core/live-installer/templates/real_change_chan.sh b/abs/core/live-installer/templates/real_change_chan.sh
new file mode 100755
index 0000000..efeba88
--- /dev/null
+++ b/abs/core/live-installer/templates/real_change_chan.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+REMOTE_NAME=SA3250
+cmd="$1"
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend SEND_ONCE $REMOTE_NAME $digit
+ sleep 0.3
+ # If things work OK with sleep 1, try this for faster channel changes:
+ # sleep 0.3
+ done
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+ esac
+ /usr/bin/fix_audio.sh &
diff --git a/abs/core/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf b/abs/core/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf
new file mode 100644
index 0000000..e7c1539
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/ATI_wonder/lircd.ATI.conf
@@ -0,0 +1,357 @@
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre2(atiusb) on Fri Jan 2 19:09:02 2004
+#
+# contributed by
+#
+# brand: ATI Remote Wonder
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name wonder
+ bits 32
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ gap 147987
+ toggle_bit 0
+
+
+ begin codes
+ A 0x0000000014C500F0
+ B 0x0000000014C601F0
+ POWER 0x0000000014C702F0
+ TV 0x0000000014C803F0
+ DVD 0x0000000014C904F0
+ WEB 0x0000000014CA05F0
+ GUIDE 0x0000000014CB06F0
+ GRAB 0x0000000014CC07F0
+ VOL_DOWN 0x0000000014CE09F0
+ VOL_UP 0x0000000014CD08F0
+ MUTE 0x0000000014CF0AF0
+ CH_DOWN 0x0000000014D10CF0
+ CH_UP 0x0000000014D00BF0
+ A 0x0000000014C500F0
+ B 0x0000000014C601F0
+ 1 0x0000000014D20DF0
+ 2 0x0000000014D30EF0
+ 3 0x0000000014D40FF0
+ 4 0x0000000014D510F0
+ 5 0x0000000014D611F0
+ 6 0x0000000014D712F0
+ 7 0x0000000014D813F0
+ 8 0x0000000014D914F0
+ 9 0x0000000014DA15F0
+ 0 0x0000000014DC17F0
+ MENU 0x0000000014DB16F0
+ CHECK 0x0000000014DD18F0
+ C 0x0000000014DE19F0
+ D 0x0000000014E01BF0
+ UP 0x0000000014DF1AF0
+ LEFT 0x0000000014E21DF0
+ DOWN 0x0000000014E722F0
+ RIGHT 0x0000000014E41FF0
+ OK 0x0000000014E31EF0
+ REPLAY 0x0000000014E11CF0
+ FULLSCREEN 0x0000000014E520F0
+ E 0x0000000014E621F0
+ F 0x0000000014E823F0
+ REWIND 0x0000000014E924F0
+ FORWARD 0x0000000014EB26F0
+ PLAY 0x0000000014EA25F0
+ RECORD 0x0000000014EC27F0
+ STOP 0x0000000014ED28F0
+ PAUSE 0x0000000014EE29F0
+ end codes
+
+end remote
+
+
+
+# this config file was automatically generated
+# using lirc-0.7.0(atiusb) on Sat Feb 12 13:22:29 2005
+#
+# contributed by Steffen
+#
+# brand: ATI Sapphire Remote Bob II USB
+# model no. of remote control: 5000024400
+# devices being controlled by this remote: MythTV
+#
+
+begin remote
+
+name wonder II
+bits 16
+eps 30
+aeps 100
+
+one 0 0
+zero 0 0
+pre_data_bits 8
+pre_data 0x0
+post_data_bits 16
+post_data 0x0
+gap 299851
+toggle_bit 0
+
+
+begin codes
+aux1 0x023F
+aux2 0x023F
+aux3 0x023F
+aux4 0x023F
+mouse_left_btn 0x02A9
+mouse_right_btn 0x02AA
+a 0x0278
+b 0x0279
+power 0x020C
+dvd 0x0238
+tv 0x0239
+help 0x02BE
+pc 0x023F
+resize 0x02D5
+hand 0x02D0
+ati 0x028E
+vol_up 0x0210
+vol_down 0x0211
+mute 0x020D
+ch_up 0x0220
+ch_down 0x0221
+mouse_up 0x013F
+mouse_down 0x013F
+mouse_left 0x013F
+mouse_right 0x013F
+1 0x0201
+2 0x0202
+3 0x0203
+4 0x0204
+5 0x0205
+6 0x0206
+7 0x0207
+8 0x0208
+9 0x0209
+0 0x0200
+list 0x0254
+check 0x0282
+info 0x02F9
+timer 0x0296
+arrow_up 0x0258
+arrow_left 0x025A
+arrow_right 0x025B
+arrow_down 0x0259
+ok 0x025C
+c 0x017A
+d 0x027B
+play 0x022C
+e 0x027C
+f 0x027D
+rewind 0x0229
+rec 0x0237
+stop 0x0231
+pause 0x0230
+ffwd 0x0228
+end codes
+
+end remote
+
+
+# Please make this file available to others
+# by sending it to <lirc at bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0-CVS(atiusb) on Sat Jun 19 16:27:14 2004
+#
+# contributed by gLaNDix
+#
+# brand: ATI
+# model no. of remote control: 5000023600
+# devices being controlled by this remote: MythTV 0.14
+#
+# USB ID: 0bc7:0004
+#
+
+begin remote
+
+ name REMOTE_WONDER
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0x0
+ gap 227933
+ toggle_bit 0
+
+
+ begin codes
+ A 0x000000000000D500
+ B 0x000000000000D601
+ C 0x000000000000EE19
+ D 0x000000000000F01B
+ E 0x000000000000F621
+ F 0x000000000000F823
+ POWER 0x000000000000D702
+ TV 0x000000000000D803
+ DVD 0x000000000000D904
+ WEB 0x000000000000DA05
+ BOOK 0x000000000000DB06
+ HAND 0x000000000000DC07
+ MOUSE_LEFT_BTN 0x0000000000004D78
+ MOUSE_LEFTBUTTONUP 0x0000000000004E79
+ MOUSE_LEFTBUTTONDBLCLICK 0x0000000000004E79
+ MOUSE_RIGHT_BTN 0x000000000000517C
+ MOUSE_RIGHTBUTTONUP 0x000000000000527D
+ MOUSE_RIGHTBUTTONDBLCLICK 0x000000000000537E
+ MOUSE_LEFT 0x0000000000004570
+ MOUSE_RIGHT 0x0000000000004671
+ MOUSE_UP 0x0000000000004772
+ MOUSE_DOWN 0x0000000000004873
+ MOUSE_UPRIGHT 0x0000000000004A75
+ MOUSE_DOWNRIGHT 0x0000000000004B76
+ MOUSE_DOWNLEFT 0x0000000000004C77
+ MOUSE_UPLEFT 0x0000000000004974
+ VOL_UP 0x000000000000DD08
+ VOL_DOWN 0x000000000000DE09
+ MUTE 0x000000000000DF0A
+ CH_DOWN 0x000000000000E10C
+ CH_UP 0x000000000000E00B
+ 1 0x000000000000E20D
+ 2 0x000000000000E30E
+ 3 0x000000000000E40F
+ 4 0x000000000000E510
+ 5 0x000000000000E611
+ 6 0x000000000000E712
+ 7 0x000000000000E813
+ 8 0x000000000000E914
+ 9 0x000000000000EA15
+ 0 0x000000000000EC17
+ DVD_ROOTMENU 0x000000000000EB16
+ SETUP 0x000000000000ED18
+ ARROW_UP 0x000000000000EF1A
+ ARROW_RIGHT 0x000000000000F41F
+ ARROW_DOWN 0x000000000000F722
+ ARROW_LEFT 0x000000000000F21D
+ OK 0x000000000000F31E
+ MAXAMIZE 0x000000000000F520
+ TV_ON_DEMAND 0x000000000000F11C
+ BACK 0x000000000000F924
+ PLAY 0x000000000000FA25
+ NEXT 0x000000000000FB26
+ RECORD 0x000000000000FC27
+ STOP 0x000000000000FD28
+ PAUSE 0x000000000000FE29
+ end codes
+
+end remote
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre1(atiusb) on Fri Nov 28 16:56:46 2003
+#
+# contributed by Jason Piterak
+#
+# brand: ati
+# This uses the atiusb driver
+#=20
+# model no. of remote control: 5000022000
+#
+# devices being controlled by this remote:
+# MythTV PVR using knopmyth by Cecil and Dale at
+# http://mysettopbox.tv
+# Key map names are as per ATI's website:
+#http://www.ati.com/support/connectors/remotecontrol/atiremotecontrolbutton=s.html
+# Feel free to change them as you see fit :-)
+#
+# NOTE: There are 16 channels for this remote; this file only
+# supports one channel. See the GATOS project for information
+# on how to change the channel. Not tested. Unknown channel.
+#
+
+begin remote
+
+ name atiusb
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0xF000
+ gap 139891
+ toggle_bit 0
+
+
+ begin codes
+ a 0x000000000000C500
+ b 0x000000000000C601
+ power 0x000000000000C702
+ tv 0x000000000000C803
+ dvd 0x000000000000C904
+ web 0x000000000000CA05
+ media_library 0x000000000000CB06
+ drag 0x000000000000CC07
+ mouse-button_left 0x0000000000003D78
+ mouse-button_right 0x000000000000417C
+ mouse-up 0x0000000000003772
+ mouse-down 0x0000000000003873
+ mouse-left 0x0000000000003570
+ mouse-right 0x0000000000003671
+ mouse-left_up 0x0000000000003974
+ mouse-right_up 0x0000000000003A75
+ mouse-left_down 0x0000000000003C77
+ mouse-right_down 0x0000000000003B76
+ vol-up 0x000000000000CD08
+ vol-down 0x000000000000CE09
+ mute 0x000000000000CF0A
+ chan-up 0x000000000000D00B
+ chan-down 0x000000000000D10C
+ 1 0x000000000000D20D
+ 2 0x000000000000D30E
+ 3 0x000000000000D40F
+ 4 0x000000000000D510
+ 5 0x000000000000D611
+ 6 0x000000000000D712
+ 7 0x000000000000D813
+ 8 0x000000000000D914
+ 9 0x000000000000DA15
+ 0 0x000000000000DC17
+ dvd-root_menu 0x000000000000DB16
+ launch_setup 0x000000000000DD18
+ c 0x000000000000DE19
+ d 0x000000000000E01B
+ tv_on_demand 0x000000000000E11C
+ max_window 0x000000000000E520
+ cursor-up 0x000000000000DF1A
+ cursor-down 0x000000000000E722
+ cursor-left 0x000000000000E21D
+ cursor-right 0x000000000000E41F
+ ok 0x000000000000E31E
+ e 0x000000000000E621
+ f 0x000000000000E823
+ rewind 0x000000000000E924
+ play 0x000000000000EA25
+ fast_forward 0x000000000000EB26
+ record 0x000000000000EC27
+ stop 0x000000000000ED28
+ pause 0x000000000000EE29
+ end codes
+
+end remote
diff --git a/abs/core/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt b/abs/core/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt
new file mode 100644
index 0000000..80eec07
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/ATI_wonder/lircrc-atiwonder.txt
@@ -0,0 +1,922 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the ATI-Wonder Remote
+# using lirc_atiusb driver
+#
+
+begin
+prog = mythtv
+button = a
+config = E
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = A
+config = E
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = b
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = B
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = B
+config = O
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = stop
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ffwd
+config = Right
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = FORWARD
+config = Right
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = rewind
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = REWIND
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = pause
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = play
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = P
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = mute
+config = |
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = MUTE
+config = |
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = vol_down
+config = F10
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+config = F10
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = vol_up
+config = F11
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = f
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = F
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = e
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = E
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ch_up
+config = Up
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ch_down
+config = Down
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = ok
+config = Enter
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = OK
+config = Enter
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = rec
+config = R
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = R
+repeat = 5
+end
+
+
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the ATI-Wonder Remote
+# using lirc_atiusb driver
+#
+
+begin
+#Jumppoint for Program Guide created in Mythweb
+ prog = mythtv
+ button = TV
+ config = !
+end
+
+begin
+#Jumppoint for DVD playback created in Mythweb
+ prog = mythtv
+ button = DVD
+ config = @
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythWeater created in Mythweb
+ button = WEB
+ config = #
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythVideo created in Mythweb
+ button = BOOK
+ config = $
+end
+
+begin
+ prog = mythtv
+#Jumppoint for MythWeater created in Mythweb
+ button = HAND
+ config = %
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_UP
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_DOWN
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_LEFT
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_RIGHT
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = MOUSE_RIGHT_BTN
+ config = Esc
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = MOUSE_LEFT_BTN
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = POWER
+ config = Esc
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = ARROW_UP
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = ARROW_DOWN
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = ARROW_LEFT
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = ARROW_RIGHT
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = D
+ config = Esc
+end
+
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+begin
+ prog = mythtv
+ button = VOL_DOWN
+ repeat = 3
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = VOL_UP
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = MUTE
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = DVD_ROOTMENU
+ config = M
+end
+
+begin
+ prog = mythtv
+# Enter button
+ button = SETUP
+ config = Return
+end
+
+
+begin
+ prog = mythtv
+ button = A
+ config = S
+end
+
+begin
+ prog = mythtv
+ button = B
+ config = I
+end
+
+begin
+ prog = mythtv
+ button = C
+ config = T
+end
+
+begin
+prog = mythtv
+# Change focus for PiP (to change channel in the other window)
+button = MAXAMIZE
+config = B
+end
+
+begin
+prog = mythtv
+# Toggle PiP on/off
+button = TV_ON_DEMAND
+config = V
+end
+
+begin
+ prog = mythtv
+ button = BACK
+ config = <
+end
+
+begin
+ prog = mythtv
+ button = NEXT
+ config = >
+end
+
+begin
+ prog = mythtv
+ button = BACK
+ config = Left
+end
+
+
+begin
+ prog = mythtv
+ button = NEXT
+ config = Right
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = R
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = P
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+#Page Up/Down
+begin
+prog = mythtv
+button = E
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = F
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = E
+# Use for backwards commercial skip
+config = Q
+end
+
+begin
+prog = mythtv
+button = F
+# Use for forward commercial skip
+config = Z
+end
+
+#Mplayer
+
+begin
+prog = mplayer
+button = PLAY
+config = pause
+end
+
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = D
+config = quit
+end
+
+begin
+prog = mplayer
+button = MOUSE_RIGHT_BTN
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = E
+repeat = 6
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = F
+repeat = 6
+config = seek 10
+end
+
+begin
+prog = mplayer
+button = BACK
+repeat = 6
+config = seek -70
+end
+
+begin
+prog = mplayer
+button = NEXT
+repeat = 6
+config = seek 70
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 6
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 6
+config = volume 1
+end
+
+#Xine
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = PAUSE
+config = PAUSE
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = POWER
+config = Quit
+end
+
+begin
+prog = xine
+button = D
+config = quit
+end
+
+begin
+prog = xine
+button = MOUSE_RIGHT_BTN
+config = quit
+end
+
+begin
+prog = xine
+button = ARROW_UP
+repeat = 4
+config = EventUp
+end
+
+begin
+prog = xine
+button = ARROW_DOWN
+repeat = 4
+config = EventDown
+end
+
+begin
+prog = xine
+button = ARROW_LEFT
+repeat = 4
+config = EventLeft
+end
+
+begin
+prog = xine
+button = ARROW_RIGHT
+repeat = 4
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 0
+config = EventSelect
+end
+
+begin
+prog = xine
+button = MOUSE_UP
+repeat = 4
+config = EventUp
+end
+
+begin
+prog = xine
+button = MOUSE_DOWN
+repeat = 4
+config = EventDown
+end
+
+begin
+prog = xine
+button = MOUSE_LEFT
+repeat = 4
+config = EventLeft
+end
+
+begin
+prog = xine
+button = MOUSE_RIGHT
+repeat = 4
+config = EventRight
+end
+
+begin
+prog = xine
+button = MOUSE_LEFT_BTN
+repeat = 0
+config = EventSelect
+end
+
+begin
+prog = xine
+button = DVD_ROOTMENU
+repeat = 0
+config = Menu
+end
+
+#vol down
+begin
+prog = xine
+button = VOL_DOWN
+repeat = 1
+config = Volume-
+end
+
+#vol up
+begin
+prog = xine
+button = VOL_UP
+repeat = 1
+config = Volume+
+end
+
+begin
+prog = xine
+button = TV_ON_DEMAND
+repeat = 1
+config = ZoomIn
+end
+
+begin
+prog = xine
+button = MAXAMIZE
+repeat = 1
+config = ZoomOut
+end
+
+#skip chapter forward
+begin
+prog = xine
+button = NEXT
+repeat = 1
+config = EventNext
+end
+
+#skip chapter backward
+begin
+prog = xine
+button = BACK
+repeat = 1
+config = EventPrior
+end
+
+begin
+prog = xine
+button = F
+repeat = 2
+config = SeekRelative+45
+end
+
+begin
+prog = xine
+button = E
+repeat = 2
+config = SeekRelative-45
+end
+
diff --git a/abs/core/live-installer/templates/remotes/ATI_wonder/preview.jpg b/abs/core/live-installer/templates/remotes/ATI_wonder/preview.jpg
new file mode 100644
index 0000000..351a111
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/ATI_wonder/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS b/abs/core/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS
new file mode 100644
index 0000000..b76d32c
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MX-500-jams/lircd.conf.MX-500-JAMS
@@ -0,0 +1,115 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.2(streamzap) on Mon Dec 5 08:45:02 2005
+#
+# contributed by
+#
+# brand: RS_LD_120-MX500
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name RS_LD
+ bits 15
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 384 1920
+ zero 384 896
+ ptrail 384
+ gap 70400
+ min_repeat 2
+ toggle_bit 0
+
+
+ begin codes
+ RESET 0x19FD
+ TIME 0X1902
+ BLANK 0X1B02
+ PICTURE 0X1882
+ ASPECT 0X1A82
+ BROWSE 0X1982
+ DELETE 0X1B82
+ CARD 0X1842
+ CARD_SOURCE 0X1A42
+ SPARE1 0X1942
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/remotes/MX-500-jams/lircrc b/abs/core/live-installer/templates/remotes/MX-500-jams/lircrc
new file mode 100644
index 0000000..5e668b5
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MX-500-jams/lircrc
@@ -0,0 +1,832 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 4
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+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
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = i
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/templates/remotes/MX-500-jams/preview.jpg b/abs/core/live-installer/templates/remotes/MX-500-jams/preview.jpg
new file mode 100644
index 0000000..38857f9
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MX-500-jams/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/MythVantage-one/lircd.conf b/abs/core/live-installer/templates/remotes/MythVantage-one/lircd.conf
new file mode 100644
index 0000000..b76d32c
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MythVantage-one/lircd.conf
@@ -0,0 +1,115 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
+
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.2(streamzap) on Mon Dec 5 08:45:02 2005
+#
+# contributed by
+#
+# brand: RS_LD_120-MX500
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name RS_LD
+ bits 15
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 384 1920
+ zero 384 896
+ ptrail 384
+ gap 70400
+ min_repeat 2
+ toggle_bit 0
+
+
+ begin codes
+ RESET 0x19FD
+ TIME 0X1902
+ BLANK 0X1B02
+ PICTURE 0X1882
+ ASPECT 0X1A82
+ BROWSE 0X1982
+ DELETE 0X1B82
+ CARD 0X1842
+ CARD_SOURCE 0X1A42
+ SPARE1 0X1942
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/remotes/MythVantage-one/lircrc b/abs/core/live-installer/templates/remotes/MythVantage-one/lircrc
new file mode 100755
index 0000000..2663c63
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MythVantage-one/lircrc
@@ -0,0 +1,857 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 5
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+repeat = 5
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+begin
+prog = mythtv
+button = 0
+config = 0
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+repeat = 5
+end
+
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+repeat = 5
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+repeat = 5
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+repeat = 5
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+repeat = 5
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+repeat = 5
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = S
+repeat = 5
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/templates/remotes/MythVantage-one/preview.jpg b/abs/core/live-installer/templates/remotes/MythVantage-one/preview.jpg
new file mode 100644
index 0000000..e2af610
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/MythVantage-one/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf
new file mode 100644
index 0000000..f8175f3
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircd-rs.conf
@@ -0,0 +1,87 @@
+# this config file was generated
+# using lirc-0.7.0pre2(hauppauge) on Thu Jan 1 00:35:50 2004
+#
+# contributed by Jarod Wilson <jcw@wilsonet.com>
+#------------------------------------------------------------------------------
+#
+# filename: RadioShack_15-2116-vcr0081.lirc
+# encoding: RC-5
+# brand: RadioShack Universal (and others)
+# model: 15-2116, set as VCR type 0081
+# supported devices: all
+#
+# note: requires quite a bit of key reassignment w/keymover and EFCs...
+# see http://wilsonet.com/mythtv/rs15-2116.html for HOWTO
+#
+#------------------------------------------------------------------------------
+
+begin remote
+
+ name rs15-2116-vcr0081
+ bits 11
+ flags RC5|CONST_LENGTH
+ eps 20
+ aeps 0
+ header 0 0
+ one 889 889
+ zero 889 889
+ plead 889
+ ptrail 0
+ foot 0 0
+ repeat 0 0
+ pre_data_bits 2
+ pre_data 0x02
+ post_data_bits 0
+ post_data 0x0
+ pre 0 0
+ post 0 0
+ gap 113792
+ toggle_bit 2
+ frequency 36000
+ duty_cycle 50
+
+ begin codes
+ 0 0x0000000000000140
+ 1 0x0000000000000141
+ 2 0x0000000000000142
+ 3 0x0000000000000143
+ 4 0x0000000000000144
+ 5 0x0000000000000145
+ 6 0x0000000000000146
+ 7 0x0000000000000147
+ 8 0x0000000000000148
+ 9 0x0000000000000149
+ INFO 0x000000000000014a
+ SELECT 0x000000000000014b
+ POWER 0x000000000000014c
+ MUTE 0x000000000000014d
+ MOVE 0x000000000000014e
+ VOL+ 0x0000000000000150
+ VOL- 0x0000000000000151
+ RIGHT 0x000000000000015a
+ LEFT 0x000000000000015b
+ ENTER 0x000000000000015c
+ MENU 0x000000000000015d
+ CH+ 0x0000000000000160
+ CH- 0x0000000000000161
+ PIP 0x0000000000000162
+ SWAP 0x0000000000000163
+ SLEEP 0x0000000000000166
+ FREEZE 0x0000000000000168
+ PAUSE 0x0000000000000169
+ SKIP 0x000000000000016a
+ EXIT 0x0000000000000171
+ REW 0x0000000000000172
+ REPLAY 0x0000000000000173
+ FFWD 0x0000000000000174
+ PLAY 0x0000000000000175
+ STOP 0x0000000000000176
+ REC 0x0000000000000177
+ SKIP 0x0000000000000178
+ +100 0x0000000000000179
+ LAST 0x000000000000017b
+ GUIDE 0x000000000000017c
+ TV/VIDEO 0x000000000000017e
+ end codes
+
+end remote
diff --git a/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs
new file mode 100644
index 0000000..91c0de5
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/lircrc-rs
@@ -0,0 +1,539 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the RadioShack 15-2116, VCR type 0081
+# using Hauppauge IR receiver
+#
+# By Jarod Wilson, 2003/12/31
+# Amalgamated from Harry O's
+# .lircrc, the mythtv.org docs, and
+# a few touches of my own. :)
+#
+
+# Channel Up
+begin
+prog = mythtv
+button = CH+
+repeat = 4
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH-
+repeat = 4
+config = Down
+end
+
+# OK/Select
+begin
+prog = mythtv
+button = SELECT
+repeat = 4
+config = Return
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+repeat = 4
+config = Space
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+repeat = 4
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = EXIT
+repeat = 4
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = mythtv
+button = POWER
+repeat = 4
+config = Esc
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+repeat = 4
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+repeat = 4
+config = |
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = REW
+repeat = 4
+config = Left
+end
+
+begin
+prog = mythtv
+button = LEFT
+repeat = 4
+config = Left
+end
+
+# Fast forward (30 sec default)
+begin
+prog = mythtv
+button = FFWD
+repeat = 4
+config = Right
+end
+
+begin
+prog = mythtv
+button = RIGHT
+repeat = 4
+config = Right
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = FREEZE
+repeat = 4
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = MOVE
+repeat = 4
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = REC
+repeat = 4
+config = R
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = GUIDE
+repeat = 4
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = MENU
+repeat = 4
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = INFO
+repeat = 4
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = +100
+repeat = 4
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button = SLEEP
+repeat = 4
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button = ENTER
+repeat = 4
+config = Z
+end
+
+# Change TV card input
+begin
+prog = mythtv
+button = TV/VIDEO
+repeat = 4
+config = C
+end
+
+# Toggle Picture-In-Picture
+begin
+prog = mythtv
+button = PIP
+repeat = 4
+config = V
+end
+
+# Swap PIP
+begin
+prog = mythtv
+button = SWAP
+repeat = 4
+config = N
+end
+
+# Cycle through channel history
+begin
+prog = mythtv
+button = LAST
+repeat = 4
+config = H
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+repeat = 4
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+repeat = 4
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+repeat = 4
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+repeat = 4
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+repeat = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+repeat = 4
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+repeat = 4
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+repeat = 4
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+repeat = 4
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+repeat = 4
+config = 9
+end
+
+### MPlayer commands
+
+begin
+prog = mplayer
+button = MENU
+repeat = 4
+config = osd
+end
+
+begin
+prog = mplayer
+button = PAUSE
+repeat = 4
+config = pause
+end
+
+begin
+prog = mplayer
+button = PLAY
+repeat = 4
+config = seek +1
+end
+
+begin
+prog = mplayer
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = mplayer
+button = REW
+repeat = 4
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = LEFT
+repeat = 4
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = FFWD
+repeat = 4
+config = seek +30
+end
+
+begin
+prog = mplayer
+button = RIGHT
+repeat = 4
+config = seek +30
+end
+
+begin
+prog = mplayer
+button = EXIT
+repeat = 4
+config = quit
+end
+
+begin
+prog = mplayer
+button = FREEZE
+repeat = 4
+config = seek +1200
+end
+
+begin
+prog = mplayer
+button = MOVE
+repeat = 4
+config = seek -1200
+end
+
+begin
+prog = mplayer
+button = +100
+repeat = 4
+config = vo_fullscreen
+end
+
+### Xine commands
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = CH+
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH-
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = SELECT
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = GUIDE
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = FFWD
+repeat = 3
+config = SeekRelative+30
+end
+
+begin
+prog = xine
+button = REW
+repeat = 3
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = VOL+
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = FREEZE
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = LAST
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = INFO
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = ENTER
+repeat = 3
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = SLEEP
+repeat = 3
+config = SpeedSlower
+end
diff --git a/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg
new file mode 100644
index 0000000..d465839
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/RadioShack_15-2116-Jarod_Wilson/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap b/abs/core/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap
new file mode 100644
index 0000000..8e453b9
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/gr8zap/lircd.conf.streamzap
@@ -0,0 +1,69 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/remotes/gr8zap/lircrc b/abs/core/live-installer/templates/remotes/gr8zap/lircrc
new file mode 100644
index 0000000..6f86bfe
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/gr8zap/lircrc
@@ -0,0 +1,472 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'
+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
+
+begin
+ prog = mythtv
+ button = POWER
+ config = Esc
+end
+
+# ???
+begin
+ prog = mythtv
+ button = MUTE
+ config = F9
+end
+
+begin
+ prog = mythtv
+ button = CH_UP
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = VOL_UP
+ repeat = 3
+ config = ]
+end
+
+begin
+ prog = mythtv
+ button = CH_DOWN
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = VOL_DOWN
+ repeat = 3
+ config = [
+end
+
+begin
+ prog = mythtv
+ button = UP
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = LEFT
+# navigates, or skips back during playback or live tv.
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = DOWN
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = MENU
+ config = m
+end
+
+begin
+ prog = mythtv
+ button = EXIT
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = PLAY
+ config = l
+end
+
+begin
+ prog = mythtv
+ button = PAUSE
+ config = p
+end
+
+begin
+ prog = mythtv
+ button = STOP
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ # skip backward
+ button = |<<
+ config = PgUp
+end
+
+begin
+ prog = mythtv
+ # skip forward
+ button = >>|
+ config = PgDown
+end
+
+begin
+ prog = mythtv
+ button = RECORD
+ config = r
+end
+
+begin
+ prog = mythtv
+ # rewind
+ button = <<
+ config = <
+end
+
+begin
+ prog = mythtv
+ # fast forward
+ button = >>
+ config = >
+end
+
+begin
+ prog = mythtv
+ button = RED
+ # Delete
+ config = z
+end
+
+begin
+ prog = mythtv
+ button = GREEN
+ # Info
+ config = i
+end
+
+begin
+ prog = mythtv
+ button = YELLOW
+ # change aspect ratio
+ config = w
+end
+
+begin
+ prog = mythtv
+ button = BLUE
+ config = Tab
+end
+
+# MPLAYER
+begin
+ prog = mplayer
+ button = POWER
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = MUTE
+ config = mute
+end
+
+begin
+ prog = mplayer
+ button = VOL_UP
+ repeat = 3
+ config = volume +1
+end
+
+begin
+ prog = mplayer
+ button = VOL_DOWN
+ repeat = 3
+ config = volume -1
+end
+
+begin
+ prog = mplayer
+ button = UP
+ repeat = 3
+ config = seek +10
+end
+
+begin
+ prog = mplayer
+ button = LEFT
+# navigates, or skips back during playback or live tv.
+ config = seek -30
+end
+
+begin
+ prog = mplayer
+ button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+ config = seek +60
+end
+
+begin
+ prog = mplayer
+ button = DOWN
+ repeat = 3
+ config = seek -10
+end
+
+begin
+ prog = mplayer
+ button = EXIT
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = play
+ config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = STOP
+ config = quit
+end
+
+begin
+ prog = mplayer
+ # skip backward
+ button = |<<
+ config = seek -600
+end
+
+begin
+ prog = mplayer
+ # skip forward
+ button = >>|
+ config = seek +600
+end
+
+begin
+ prog = mplayer
+ # slow forward
+ button = <<
+ config = speed_mult 0.5
+end
+
+begin
+ prog = mplayer
+ # fast forward
+ button = >>
+ config = speed_mult 2.0
+end
+
+### Xine lirc setup By AnDy!
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = UP
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = DOWN
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = >>
+repeat = 3
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = <<
+repeat = 3
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DOWN
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = >>|
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = |<<
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = GREEN
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 3
+config = Quit
+end
diff --git a/abs/core/live-installer/templates/remotes/gr8zap/preview.jpg b/abs/core/live-installer/templates/remotes/gr8zap/preview.jpg
new file mode 100644
index 0000000..4d1a5fe
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/gr8zap/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge b/abs/core/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge
new file mode 100644
index 0000000..4987807
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/hauppauge/lircd.conf.hauppauge
@@ -0,0 +1,274 @@
+#
+# 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
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre4(serial) on Sun Oct 2 00:24:32 2005
+#
+# contributed by anton|ganthaler.at and juergen.wilhelm|aon.at
+# members of linux user group Vorarlberg www.lugv.at
+#
+# for ir remote controler from Hauppauge WinTV Nexus-S
+# most of the keys are supported
+#
+# brand: Hauppauge
+# model no. of remote control: WinTV Nexus-S
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Hauppauge_WinTV_Nexus-S
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 944 828
+ zero 944 828
+ plead 980
+ gap 113932
+ min_repeat 1
+ toggle_bit 2
+
+
+ begin codes
+ Up 0x0000000000001794
+ Down 0x0000000000001795
+ Left 0x0000000000001796
+ Right 0x0000000000001797
+ Power 0x00000000000017BD
+ Ok 0x00000000000017A5
+ Menu 0x000000000000178D
+ Back 0x000000000000179F
+ Red 0x000000000000178B
+ Green 0x00000000000017AE
+ Yellow 0x00000000000017B8
+ Blue 0x00000000000017A9
+ 0 0x0000000000001780
+ 1 0x0000000000001781
+ 2 0x0000000000001782
+ 3 0x0000000000001783
+ 4 0x0000000000001784
+ 5 0x0000000000001785
+ 6 0x0000000000001786
+ 7 0x0000000000001787
+ 8 0x0000000000001788
+ 9 0x0000000000001789
+ Play 0x00000000000017B5
+ Pause 0x00000000000017B0
+ Stop 0x00000000000017B6
+ Record 0x00000000000017B7
+ FastFwd 0x00000000000017B4
+ FastRwd 0x00000000000017B2
+ Channel+ 0x00000000000017A0
+ Channel- 0x00000000000017A1
+ Volume+ 0x0000000000001790
+ Volume- 0x0000000000001791
+ Mute 0x000000000000178F
+ Timers 0x000000000000178A
+ Recordings 0x000000000000178E
+ Back 0x000000000000179F
+ Record 0x00000000000017B7
+ Pause 0x00000000000017B0
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge b/abs/core/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge
new file mode 100644
index 0000000..d0f36e8
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/hauppauge/lircmd.conf.hauppauge
@@ -0,0 +1,33 @@
+#
+# lircmd config file
+#
+
+PROTOCOL IntelliMouse
+
+# ACCELERATOR start max multiplier
+
+ACCELERATOR 2 30 5
+
+ACTIVATE * RESERVED
+
+MOVE_N * 2
+MOVE_NE * 3
+MOVE_E * 6
+MOVE_SE * 9
+MOVE_S * 8
+MOVE_SW * 7
+MOVE_W * 4
+MOVE_NW * 1
+MOVE_IN * CH+
+MOVE_OUT * CH-
+
+BUTTON1_TOGGLE * 5
+BUTTON1_TOGGLE * RADIO
+BUTTON2_TOGGLE * VOL+
+BUTTON3_TOGGLE * SOURCE
+
+BUTTON1_CLICK * TV
+BUTTON1_CLICK * VOL-
+BUTTON3_CLICK * MUTE
+
+# BUTTONx_CLICK, BUTTONx_UP, BUTTONx_DOWN are also possible
diff --git a/abs/core/live-installer/templates/remotes/hauppauge/preview.jpg b/abs/core/live-installer/templates/remotes/hauppauge/preview.jpg
new file mode 100644
index 0000000..a40a1e8
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/hauppauge/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/imon-pad/lircd.conf b/abs/core/live-installer/templates/remotes/imon-pad/lircd.conf
new file mode 100644
index 0000000..97bbf4c
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/imon-pad/lircd.conf
@@ -0,0 +1,88 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.0(imon_pad) on Mon Jan 23 20:22:11 2006
+#
+# contributed by M.Brakemeier
+#
+# brand: SoundGraph
+# model no. of remote control: iMON-PAD
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name iMON-PAD
+ bits 32
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ gap 235965
+ min_repeat 1
+ toggle_bit 0
+
+ begin codes
+ AppExit 0x288195B7
+ Power 0x289115B7
+ Record 0x298115B7
+ Play 0x2A8115B7
+ Open 0x29B1d5B7
+ Rewind 0x2A8195B7
+ Pause 0x2A9115B7
+ FastForward 0x2B8115B7
+ PrevChapter 0x2B9115B7
+ Stop 0x2B9715B7
+ NextChapter 0x298195B7
+ Esc 0x2BB715B7
+ Eject 0x299395B7
+ AppLauncher 0x29B715B7
+ MultiMon 0x2AB195B7
+ TaskSwitcher 0x2A9395B7
+ Mute 0x2B9595B7
+ Vol+ 0x28A395B7
+ Vol- 0x28A595B7
+ Ch+ 0x289395B7
+ Ch- 0x288795B7
+ Timer 0x2B8395B7
+ 1 0x28B595B7
+ 2 0x2BB195B7
+ 3 0x28B195B7
+ 4 0x2A8595B7
+ 5 0x299595B7
+ 6 0x2AA595B7
+ 7 0x2B9395B7
+ 8 0x2A8515B7
+ 9 0x2AA115B7
+ 0 0x2BA595B7
+ ShiftTab 0x28B515B7
+ Tab 0x29A115B7
+ Red 0x2B8515B7 # MyMovie
+ Green 0x299195B7 # MyMusic
+ Blue 0x2BA115B7 # MyPhoto
+ Yellow 0x28A515B7 # MyTV
+ Bookmark 0x288515B7
+ Thumbnail 0x2AB715B7
+ AspectRatio 0x29A595B7
+ FullScreen 0x2AA395B7
+ Purple 0x29A295B7 # MyDVD
+ Menu 0x2BA385B7
+ Caption 0x298595B7
+ Language 0x2B8595B7
+ MouseKeyboard 0x299115B7
+ SelectSpace 0x2A9315B7
+ MouseMenu 0x28B715B7
+ MouseRightClick 0x688481B7
+ Enter 0x28A195B7
+ MouseLeftClick 0x688301B7
+ WindowsKey 0x2B8195B7
+ Backspace 0x28A115B7
+ Mouse_N 0x690281B7
+ Mouse_S 0x688291B7
+ Mouse_W 0x6A8281B7
+ Mouse_E 0x688A81B7
+ end codes
+
+end remote
diff --git a/abs/core/live-installer/templates/remotes/imon-pad/lircrc b/abs/core/live-installer/templates/remotes/imon-pad/lircrc
new file mode 100644
index 0000000..3ad34d8
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/imon-pad/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/live-installer/templates/remotes/imon-pad/preview.jpg b/abs/core/live-installer/templates/remotes/imon-pad/preview.jpg
new file mode 100644
index 0000000..47368c5
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/imon-pad/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/mceusb/lircd-mceusb.conf b/abs/core/live-installer/templates/remotes/mceusb/lircd-mceusb.conf
new file mode 100644
index 0000000..ec3b73e
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/mceusb/lircd-mceusb.conf
@@ -0,0 +1,88 @@
+#
+# RC-6 config file
+#
+# source: http://home.hccnet.nl/m.majoor/projects__remote_control.htm
+# http://home.hccnet.nl/m.majoor/pronto.pdf
+#
+# used by: Philips
+#
+#########
+#
+# Philips Media Center Edition remote control
+# For use with the USB MCE ir receiver
+#
+# Dan Conti dconti|acm.wwu.edu
+#
+# Radio, Print, RecTV are only available on the HP Media Center remote control
+#
+
+begin remote
+
+ name mceusb
+ bits 16
+ flags RC6|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 2667 889
+ one 444 444
+ zero 444 444
+ pre_data_bits 21
+ pre_data 0x37FF0
+ gap 105000
+ toggle_bit 22
+ rc6_mask 0x100000000
+
+
+ begin codes
+
+# starts at af
+ Radio 0x00007baf
+ Print 0x00007bb1
+ Videos 0x00007bb5
+ Pictures 0x00007bb6
+ RecTV 0x00007bb7
+ Music 0x00007bb8
+ TV 0x00007bb9
+# no ba - d8
+ Guide 0x00007bd9
+ LiveTV 0x00007bda
+ DVD 0x00007bdb
+ Back 0x00007bdc
+ OK 0x00007bdd
+ Right 0x00007bde
+ Left 0x00007bdf
+ Down 0x00007be0
+ Up 0x00007be1
+# no e2,e3
+ Replay 0x00007be4
+ Skip 0x00007be5
+ Stop 0x00007be6
+ Pause 0x00007be7
+ Record 0x00007be8
+ Play 0x00007be9
+ Rewind 0x00007bea
+ Forward 0x00007beb
+ ChanDown 0x00007bec
+ ChanUp 0x00007bed
+ VolDown 0x00007bee
+ VolUp 0x00007bef
+ More 0x00007bf0
+ Mute 0x00007bf1
+ Home 0x00007bf2
+ Power 0x00007bf3
+ Enter 0x00007bf4
+ Clear 0x00007bf5
+ Nine 0x00007bf6
+ Eight 0x00007bf7
+ Seven 0x00007bf8
+ Six 0x00007bf9
+ Five 0x00007bfa
+ Four 0x00007bfb
+ Three 0x00007bfc
+ Two 0x00007bfd
+ One 0x00007bfe
+ Zero 0x00007bff
+ end codes
+
+end remote
diff --git a/abs/core/live-installer/templates/remotes/mceusb/lircrc-mceusb b/abs/core/live-installer/templates/remotes/mceusb/lircrc-mceusb
new file mode 100644
index 0000000..3738bfa
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/mceusb/lircrc-mceusb
@@ -0,0 +1,393 @@
+# lircrc.mceusb
+
+###################
+#
+# MythTV
+#
+###################
+begin
+ prog = mythtv
+ button = One
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = Two
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = Three
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = Four
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = Five
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = Six
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = Seven
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = Eight
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = Nine
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = Zero
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = Back
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = Guide
+ config = M
+end
+
+begin
+ prog = mythtv
+ button = More
+ config = I
+end
+
+begin
+ prog = mythtv
+ button = VolDown
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = VolUp
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = Up
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = Down
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = Left
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Right
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = Play
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = Mute
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = Rewind
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Forward
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = Record
+ config = R
+end
+
+begin
+ prog = mythtv
+ button = Stop
+ config = O
+end
+
+begin
+ prog = mythtv
+ button = Pause
+ config = P
+end
+
+# Use for backwards commercial skip
+begin
+ prog = mythtv
+ button = Replay
+ config = Q
+end
+
+# Use for forward commercial skip
+begin
+ prog = mythtv
+ button = Skip
+ config = Z
+end
+
+
+###################
+#
+# MPlayer
+#
+###################
+begin
+ prog = mplayer
+ button = Stop
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = Play
+ config = seek +1
+end
+
+begin
+ prog = mplayer
+ button = More
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = Replay
+ config = seek -10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Skip
+ config = seek +10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Rewind
+ config = seek -30
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Forward
+ config = seek +30
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Pause
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = VolUp
+ config = volume +1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = VolDown
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Mute
+ config = mute
+end
+
+###################
+#
+# Xine
+#
+###################
+# Xine lirc setup
+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
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Home
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = Forward
+repeat = 3
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = Rewind
+repeat = 3
+config = SpeedSlower
+end
+
+begin
+prog = xine
+button = VolUp
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolDown
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = ChanUp
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = ChanDown
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = More
+repeat = 3
+config = OSDStreamInfos
+end
+
diff --git a/abs/core/live-installer/templates/remotes/mceusb/preview.jpg b/abs/core/live-installer/templates/remotes/mceusb/preview.jpg
new file mode 100644
index 0000000..0aa6a4a
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/mceusb/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/no_remote/preview.jpg b/abs/core/live-installer/templates/remotes/no_remote/preview.jpg
new file mode 100644
index 0000000..1d887dd
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/no_remote/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/receiver_usb.id b/abs/core/live-installer/templates/remotes/receiver_usb.id
new file mode 100644
index 0000000..b99f91b
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/receiver_usb.id
@@ -0,0 +1,4 @@
+0bc7:0005 snapstream_firefly X10 Wireless Technology, Inc.
+0e9c:0000 streamzap Streamzap, Inc. Streamzap Remote Control
+0471:0815 mceusb Microsoft usb receiver_transmitter rc6
+
diff --git a/abs/core/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf b/abs/core/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf
new file mode 100644
index 0000000..288bb51
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/snapstream_firefly/lircd.snapstrm.conf
@@ -0,0 +1,127 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0(any) on Fri Mar 11 08:51:45 2005
+#
+# contributed by
+#
+# brand: Snapstream Firefly Remote
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+name Snapstream_Firefly
+bits 40
+eps 30
+aeps 100
+
+one 0 0
+zero 0 0
+gap 219964
+toggle_bit 0
+
+
+begin codes
+MAXI 0x0000001481AC0000
+MAXI 0x00000014012C0000
+CLOSE 0x00000014D7020000
+CLOSE 0x0000001457820000
+1 0x00000014628D0000
+1 0x00000014E20D0000
+2 0x00000014E30E0000
+2 0x00000014638E0000
+3 0x00000014648F0000
+3 0x00000014E40F0000
+4 0x00000014E5100000
+4 0x0000001465900000
+5 0x0000001466910000
+5 0x00000014E6110000
+6 0x00000014E7120000
+6 0x0000001467920000
+7 0x0000001468930000
+7 0x00000014E8130000
+8 0x00000014E9140000
+8 0x0000001469940000
+9 0x000000146A950000
+9 0x00000014EA150000
+0 0x00000014EC170000
+0 0x000000146C970000
+BACK 0x000000146B960000
+BACK 0x00000014EB160000
+ENT 0x00000014ED180000
+ENT 0x000000146D980000
+VOL+ 0x000000145E890000
+VOL+ 0x00000014DE090000
+VOL- 0x000000145D880000
+VOL- 0x00000014DD080000
+MUTE 0x000000145F8A0000
+MUTE 0x00000014DF0A0000
+FIREFLY 0x0000001455800000
+FIREFLY 0x00000014D5000000
+CH+ 0x00000014608B0000
+CH+ 0x00000014E00B0000
+CH- 0x00000014618C0000
+CH- 0x00000014E10C0000
+INFO 0x0000001483AE0000
+INFO 0x00000014032E0000
+OPTION 0x0000001484AF0000
+OPTION 0x00000014042F0000
+UP 0x000000146F9A0000
+UP 0x00000014EF1A0000
+LEFT 0x00000014729D0000
+LEFT 0x00000014F21D0000
+DOWN 0x0000001477A20000
+DOWN 0x00000014F7220000
+RIGHT 0x00000014749F0000
+RIGHT 0x00000014F41F0000
+OK 0x00000014739E0000
+OK 0x00000014F31E0000
+MENU 0x00000014719C0000
+MENU 0x00000014F11C0000
+EXIT 0x0000001475A00000
+EXIT 0x00000014F5200000
+REC 0x00000014FC270000
+REC 0x000000147CA70000
+PLAY 0x00000014FA250000
+PLAY 0x000000147AA50000
+STOP 0x00000014FD280000
+STOP 0x000000147DA80000
+REW 0x00000014F9240000
+REW 0x0000001479A40000
+FWD 0x00000014FB260000
+FWD 0x000000147BA60000
+PREV 0x00000014002B0000
+PREV 0x0000001480AB0000
+PAUSE 0x00000014FE290000
+PAUSE 0x000000147EA90000
+NEXT 0x00000014FF2A0000
+NEXT 0x000000147FAA0000
+MUSIC 0x00000014DB060000
+MUSIC 0x000000145B860000
+PHOTOS 0x00000014DA050000
+PHOTOS 0x000000145A850000
+DVD 0x00000014D9040000
+DVD 0x0000001459840000
+TV 0x00000014D8030000
+TV 0x0000001458830000
+VIDEO 0x00000014DC070000
+VIDEO 0x000000145C870000
+HELP 0x00000014D6010000
+HELP 0x0000001456810000
+MOUSE 0x00000014022D0000
+MOUSE 0x0000001482AD0000
+A 0x00000014EE190000
+A 0x000000146E990000
+B 0x00000014F01B0000
+B 0x00000014709B0000
+C 0x00000014F6210000
+C 0x0000001476A10000
+D 0x00000014F8230000
+D 0x0000001478A30000
+
+end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt b/abs/core/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt
new file mode 100644
index 0000000..e918011
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/snapstream_firefly/lircrc-snapstrm.txt
@@ -0,0 +1,590 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the new grey Hauppauge remote
+#
+# Modified from Jarod Wilson's which came from Jeff Campbell's
+# By Brad Templeton
+
+
+# Here we have the jump point commands. They only work if you have
+# defined function keys for these jump points. For me the most
+# common command is the menu of recordings, so I put that on "videos"
+# even though that's counter-intuitive
+
+begin
+prog = mythtv
+button = TV
+repeat = 3
+config = F5
+end
+
+begin
+prog = mythtv
+button = Videos
+repeat = 3
+config = F2
+end
+
+# Not yet defined
+begin
+prog = mythtv
+button = Music
+repeat = 3
+config = Up
+end
+
+# Given another function for now, I don't use mythgallery
+begin
+prog = mythtv
+button = Pictures
+repeat = 3
+config = F
+end
+
+begin
+prog = mythtv
+button = Guide
+repeat = 3
+config = F3
+end
+
+# I stuck the "todo" list on here as Myth has no radio function
+begin
+prog = mythtv
+button = Radio
+repeat = 3
+config = F4
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = LEFT
+repeat = 3
+config = Left
+end
+
+begin
+prog = mythtv
+button = RIGHT
+repeat = 3
+config = Right
+end
+
+# Channel Up
+begin
+prog = mythtv
+button = Channel-UP
+repeat = 3
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Channel-DOWN
+repeat = 3
+config = Down
+end
+
+# OK/Select
+begin
+prog = mythtv
+button = Ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = I
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = BACK
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+repeat = 3
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+repeat = 3
+config = |
+end
+
+# Fast forward (30 sec default)
+begin
+prog = mythtv
+button = Rewind
+repeat = 3
+config = PgUp
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Forward
+repeat = 3
+config = PgDown
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = Next
+repeat = 3
+config = End
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = Previous
+repeat = 3
+config = Home
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+repeat = 3
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = Red
+repeat = 3
+config = D
+end
+
+# Decrease play speed
+begin
+prog = mythtv
+button = Green
+repeat = 3
+config = J
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Menu
+repeat = 3
+config = M
+end
+
+# Scroll up
+begin
+prog = mythtv
+button = Volume-UP
+repeat = 3
+config = F11
+end
+
+# Scroll down
+begin
+prog = mythtv
+button = Volume-DOWN
+repeat = 3
+config = F10
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Go
+repeat = 3
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = Prev-Channel
+repeat = 3
+config = W
+end
+
+# double speed watch
+begin
+prog = mythtv
+button = Yellow
+repeat = 3
+config = J
+end
+
+# change tuners
+#begin
+#prog = mythtv
+#button = hash
+#repeat = 3
+#config = Y
+#end
+
+# Bring up Time stretch
+begin
+prog = mythtv
+button = Blue
+repeat = 3
+config = Y
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+repeat = 3
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+repeat = 3
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+repeat = 3
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+repeat = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+repeat = 3
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+repeat = 3
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+repeat = 3
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+repeat = 3
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+repeat = 3
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+repeat = 3
+config = 9
+end
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = MENU
+repeat = 3
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+repeat = 3
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button = PLAY
+repeat = 3
+config = seek +1
+end
+
+# Stop playback and exit
+begin
+prog = mplayer
+button = Back
+repeat = 3
+config = quit
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+repeat = 3
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = LEFT
+repeat = 3
+config = seek -7
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = RIGHT
+repeat = 3
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = EXIT
+repeat = 3
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = SKIP
+repeat = 3
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = REPLAY
+repeat = 3
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULL
+repeat = 3
+config = vo_fullscreen
+end
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = OFF
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = CH+
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH-
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = VOL-
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = VOL+
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = BACK
+repeat = 3
+config = Menu
+end
+
+begin
+prog = xine
+button = FFW
+repeat = 3
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = REW
+repeat = 3
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = FULL
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = BLANK
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 3
+config = RootMenu
+end
+
+begin
+prog = xine
+button = SKIP
+repeat = 3
+config = EventNext
+end
+
+begin
+prog = xine
+button = REPLAY
+repeat = 3
+config = EventPrior
+end
+
+begin
+prog = xine
+button = GO
+repeat = 3
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = RED
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = RED
+repeat = 3
+config = Quit
+end \ No newline at end of file
diff --git a/abs/core/live-installer/templates/remotes/snapstream_firefly/preview.jpg b/abs/core/live-installer/templates/remotes/snapstream_firefly/preview.jpg
new file mode 100644
index 0000000..a1fbc6e
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/snapstream_firefly/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/remotes/streamzap/lircd.conf.streamzap b/abs/core/live-installer/templates/remotes/streamzap/lircd.conf.streamzap
new file mode 100644
index 0000000..8e453b9
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/streamzap/lircd.conf.streamzap
@@ -0,0 +1,69 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005
+#
+# contributed by Christoph Bartelmus
+#
+# brand: Streamzap
+# model no. of remote control: PC Remote
+# devices being controlled by this remote: USB receiver
+#
+
+begin remote
+
+ name Streamzap_PC_Remote
+ bits 6
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 889 889
+ zero 889 889
+ plead 889
+ pre_data_bits 8
+ pre_data 0xA3
+ gap 108344
+ toggle_bit 2
+
+
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ POWER 0x0A
+ MUTE 0x0B
+ CH_UP 0x0C
+ VOL_UP 0x0D
+ CH_DOWN 0x0E
+ VOL_DOWN 0x0F
+ UP 0x10
+ LEFT 0x11
+ OK 0x12
+ RIGHT 0x13
+ DOWN 0x14
+ MENU 0x15
+ EXIT 0x16
+ PLAY 0x17
+ PAUSE 0x18
+ STOP 0x19
+ |<< 0x1A
+ >>| 0x1B
+ RECORD 0x1C
+ << 0x1D
+ >> 0x1E
+ RED 0x20
+ GREEN 0x21
+ YELLOW 0x22
+ BLUE 0x23
+ end codes
+
+end remote
+
+
diff --git a/abs/core/live-installer/templates/remotes/streamzap/lircrc b/abs/core/live-installer/templates/remotes/streamzap/lircrc
new file mode 100755
index 0000000..5e668b5
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/streamzap/lircrc
@@ -0,0 +1,832 @@
+# StreamZap Remote
+# 'config' must either be a literal key, e.g. 'config = l' or must
+# refer to a defined key in MythTV, e.g. 'config = PLAY'a
+
+
+#restart frontend
+begin
+ remote = RS_LD
+ button = RESET
+ prog = irexec
+ repeat = 0
+ config = /usr/bin/restartfrontend.sh
+end
+
+#time
+begin
+ remote = RS_LD
+ button = TIME
+ prog = irexec
+ repeat = 10
+ config = /usr/bin/saytime.sh
+end
+
+#screen blank
+begin
+ remote = RS_LD
+ button = BLANK
+ prog = irexec
+ repeat = 0
+# config = ls
+ config = xset s activate ; xset s blank
+end
+
+
+#picture
+begin
+REMOTE = RS_LD
+prog = mythtv
+button = PICTURE
+repeat = 4
+config = f
+end
+
+#change aspect
+begin
+remote = RS_LD
+prog = mythtv
+button = ASPECT
+# change aspect ratio
+config = w
+end
+
+#Browse
+begin
+remote = RS_LD
+prog = mythtv
+button = BROWSE
+repeat = 8
+config = o
+end
+
+# delete key
+begin
+remote = RS_LD
+prog = mythtv
+button = DELETE
+repeat = 8
+config = d
+end
+
+
+#change card
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD
+repeat = 8
+config = y
+end
+
+# Change TV card input
+begin
+remote = RS_LD
+prog = mythtv
+button = CARD_SOURCE
+repeat = 4
+config = C
+end
+
+
+
+# Cycle through channel history
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = BLUE
+repeat = 4
+config = H
+end
+
+# Bring up OSD info
+begin
+remote = Streamzap_PC_Remote
+prog = mythtv
+button = YELLOW
+repeat = 4
+config = i
+end
+
+
+
+
+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
+
+begin
+prog = mythtv
+button = POWER
+config = Esc
+end
+
+# ???
+begin
+prog = mythtv
+button = MUTE
+config = F9
+end
+
+begin
+prog = mythtv
+button = CH_UP
+repeat = 3
+config = PgUp
+end
+
+begin
+prog = mythtv
+button = VOL_UP
+repeat = 3
+config = ]
+end
+
+begin
+prog = mythtv
+button = CH_DOWN
+repeat = 3
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = VOL_DOWN
+repeat = 3
+config = [
+end
+
+begin
+prog = mythtv
+button = UP
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = Left
+end
+
+begin
+prog = mythtv
+button = OK
+config = Return
+end
+
+begin
+prog = mythtv
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = Right
+end
+
+begin
+prog = mythtv
+button = DOWN
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = MENU
+config = m
+end
+
+begin
+prog = mythtv
+button = EXIT
+config = Esc
+end
+
+begin
+prog = mythtv
+button = PLAY
+config = Space
+end
+
+begin
+prog = mythtv
+button = PAUSE
+config = p
+end
+
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+begin
+prog = mythtv
+# skip backward
+button = |<<
+config = PgUp
+end
+
+begin
+prog = mythtv
+# skip forward
+button = >>|
+config = PgDown
+end
+
+begin
+prog = mythtv
+button = RECORD
+config = r
+end
+
+begin
+prog = mythtv
+# rewind
+button = <<
+config = Home
+end
+
+begin
+prog = mythtv
+# fast forward
+button = >>
+config = End
+end
+
+begin
+prog = mythtv
+button = RED
+# Delete
+config = d
+end
+
+begin
+prog = mythtv
+button = GREEN
+# Info
+config = i
+end
+
+#begin
+#prog = mythtv
+#button = YELLOW
+# change aspect ratio
+#config = w
+#end
+
+begin
+prog = mythtv
+button = BLUE
+config = Tab
+end
+
+# MPLAYER
+begin
+prog = mplayer
+button = POWER
+config = quit
+end
+
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+begin
+prog = mplayer
+button = VOL_UP
+repeat = 3
+config = volume +1
+end
+
+begin
+prog = mplayer
+button = VOL_DOWN
+repeat = 3
+config = volume -1
+end
+
+begin
+prog = mplayer
+button = UP
+repeat = 3
+config = seek +10
+end
+
+begin
+prog = mplayer
+button = LEFT
+# navigates, or skips back during playback or live tv.
+config = seek -60
+end
+
+begin
+prog = mplayer
+button = RIGHT
+# navigates, or skips forwards during playback or live tv.
+config = seek +60
+end
+
+begin
+prog = mplayer
+button = DOWN
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = EXIT
+config = quit
+end
+
+begin
+prog = mplayer
+button = play
+config = speed_set 1.0
+end
+
+begin
+ prog = mplayer
+ button = pause
+ config = pause
+end
+
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+begin
+prog = mplayer
+# skip backward
+button = |<<
+config = seek -600
+end
+
+begin
+prog = mplayer
+# skip forward
+button = >>|
+config = seek +600
+end
+
+begin
+prog = mplayer
+# slow forward
+button = <<
+config = speed_mult 0.5
+end
+
+begin
+prog = mplayer
+# fast forward
+button = >>
+config = speed_mult 2.0
+end
+
+### xine commands
+
+begin
+prog = xine
+button = YELLOW
+repeat = 4
+#config = ToggleVisiblity
+config = OSDStreamInfos
+end
+
+begin
+prog = xine
+button = MENU
+repeat = 4
+config = SeekRelative+60
+end
+
+# increase brightness by 10
+begin
+ button = DELETE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl+
+end
+
+# decrease brightness by 10
+begin
+ button = PICTURE
+ prog = xine
+ repeat = 4
+ config = BrightnessControl-
+end
+
+
+begin
+prog = xine
+button = PAUSE
+repeat = 4
+config = Pause
+end
+
+begin
+prog = xine
+button = PLAY
+repeat = 4
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = MUTE
+repeat = 4
+config = mute
+end
+
+begin
+prog = xine
+button = <<
+repeat = 4
+config = SeekRelative-30
+end
+
+begin
+prog = xine
+button = >>
+repeat = 4
+#config = SeekRelative+30
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = POWER
+repeat = 4
+config = quit
+end
+
+begin
+prog = xine
+button = EXIT
+repeat = 4
+config = quit
+end
+
+
+begin
+prog = xine
+button = FREEZE
+repeat = 4
+config = SeekRelative+1200
+end
+
+begin
+prog = xine
+button = MOVE
+repeat = 4
+config = SeekRelative-1200
+end
+
+begin
+prog = xine
+button = 3
+config = SpuNext
+repeat = 0
+end
+
+# Select previous sub picture (subtitle) channel.
+begin
+button = 1
+prog = xine
+repeat = 0
+config = SpuPrior
+end
+
+# Select next audio channel.
+begin
+button = 9
+prog = xine
+repeat = 0
+config = AudioChannelNext
+end
+
+# Select previous audio channel.
+begin
+button = 7
+prog = xine
+repeat = 0
+config = AudioChannelPrior
+end
+
+
+
+# Up event.
+begin
+
+button = UP
+prog = xine
+repeat = 8
+config = EventUp
+end
+
+# Down event.
+begin
+
+button = DOWN
+prog = xine
+repeat = 8
+config = EventDown
+end
+
+# Left event.
+begin
+
+button = LEFT
+prog = xine
+repeat = 8
+config = EventLeft
+end
+
+# Right event.
+begin
+
+button = RIGHT
+prog = xine
+repeat = 8
+config = EventRight
+end
+
+# Select event.
+begin
+prog = xine
+button = ok
+repeat = 8
+config = EventSelect
+end
+
+# Down Chapter
+begin
+
+button = CH_DOWN
+prog = xine
+repeat = 8
+config = EventPrior
+end
+
+# Next Chapter.
+begin
+
+button = CH_UP
+prog = xine
+repeat = 8
+config = EventNext
+end
+
+# menu.
+begin
+
+button = record
+prog = xine
+repeat = 8
+config = RootMenu
+end
+
+# Toggle aspect ratio
+begin
+prog = xine
+button = ASPECT
+repeat = 0
+config = ToggleAspectRatio
+end
+
+
+
+#######xmms
+begin xmms
+ begin
+ prog = xmms
+ button = PLAY
+ config = PLAY
+ end
+ begin
+ prog = xmms
+ button = clear
+ config = PLAYLIST_CLEAR
+ end
+ begin
+ prog = xmms
+ button = load
+ config = PLAYLIST_ADD .xmms/xmms.m3u
+ end
+ begin
+ prog = xmms
+ button = PAUSE
+ config = PAUSE
+ end
+ begin
+ prog = xmms
+ button = STOP
+ config = STOP
+ end
+ begin
+ prog = xmms
+ button = EXIT
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = POWER
+ config = QUIT
+ flags = mode
+ end
+
+ begin
+ prog = xmms
+ button = CH_UP
+ config = NEXT
+ end
+ begin
+ prog = xmms
+ button = CH_DOWN
+ config = PREV
+ end
+
+
+
+begin
+ prog = xmms
+ button = >>|
+ config = NEXT
+ end
+begin
+ prog = xmms
+ button = |<<
+ config = PREV
+end
+
+
+begin
+ prog = xmms
+ button = <<
+ config = FWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = <<
+ config = BWD 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = volup
+ config = VOL_UP 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = voldown
+ config = VOL_DOWN 10
+ repeat = 2
+ end
+ begin
+ prog = xmms
+ button = 1
+ config = ONE
+ end
+ begin
+ prog = xmms
+ button = 2
+ config = TWO
+ end
+ begin
+ prog = xmms
+ button = 3
+ config = THREE
+ end
+ begin
+ prog = xmms
+ button = 4
+ config = FOUR
+ end
+ begin
+ prog = xmms
+ button = 5
+ config = FIVE
+ end
+ begin
+ prog = xmms
+ button = 6
+ config = SIX
+ end
+ begin
+ prog = xmms
+ button = 7
+ config = SEVEN
+ end
+ begin
+ prog = xmms
+ button = 8
+ config = EIGHT
+ end
+ begin
+ prog = xmms
+ button = 9
+ config = NINE
+ end
+ begin
+ prog = xmms
+ button = 0
+ config = ZERO
+ end
+ begin
+ prog = xmms
+ button = enter
+ config = SETPOS
+ end
+end xmms
+
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abs/core/live-installer/templates/remotes/streamzap/preview.jpg b/abs/core/live-installer/templates/remotes/streamzap/preview.jpg
new file mode 100644
index 0000000..4d1a5fe
--- /dev/null
+++ b/abs/core/live-installer/templates/remotes/streamzap/preview.jpg
Binary files differ
diff --git a/abs/core/live-installer/templates/samba/smb.conf.home b/abs/core/live-installer/templates/samba/smb.conf.home
new file mode 100755
index 0000000..b850a7d
--- /dev/null
+++ b/abs/core/live-installer/templates/samba/smb.conf.home
@@ -0,0 +1,10 @@
+[home]
+ path = /data/home/mythtv/
+ public = yes
+ only guest = yes
+ writeable = yes
+ printable = no
+ force user = mythtv
+ force group = mythtv
+ create mask = 0755
+
diff --git a/abs/core/live-installer/templates/samba/smb.conf.media b/abs/core/live-installer/templates/samba/smb.conf.media
new file mode 100755
index 0000000..6a4ec91
--- /dev/null
+++ b/abs/core/live-installer/templates/samba/smb.conf.media
@@ -0,0 +1,10 @@
+[media]
+ path = /data/media
+ public = yes
+ only guest = yes
+ writeable = yes
+ printable = no
+ force user = mythtv
+ force group = mythtv
+ create mask = 0755
+
diff --git a/abs/core/live-installer/templates/samba/smb.conf.template b/abs/core/live-installer/templates/samba/smb.conf.template
new file mode 100644
index 0000000..42ddb99
--- /dev/null
+++ b/abs/core/live-installer/templates/samba/smb.conf.template
@@ -0,0 +1,125 @@
+#
+#======================= Global Settings =====================================
+[global]
+
+ workgroup = home_lan
+ server string = MythVantage
+
+# Security mode. Defines in which mode Samba will operate. Possible
+# values are share, user, server, domain and ads. Most people will want
+# user level security. See the Samba-HOWTO-Collection for details.
+ security = share
+
+# This option is important for security. It allows you to restrict
+# connections to machines which are on your local network. The
+# following example restricts access to two C class networks and
+# the "loopback" interface. For more examples of the syntax see
+# the smb.conf man page
+; hosts allow = 192.168.1. 192.168.2. 127.
+
+ load printers = no
+
+# you may wish to override the location of the printcap file
+; printcap name = /etc/printcap
+
+; guest account = pcguest
+
+# this tells Samba to use a separate log file for each machine
+# that connects
+ log file = /var/log/samba/log.%m
+
+# Put a capping on the size of the log files (in Kb).
+ max log size = 50
+
+# Use password server option only with security = server
+# The argument list may include:
+# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
+# or to auto-locate the domain controller/s
+# password server = *
+; password server = <NT-Server-Name>
+
+# Use the realm option only with security = ads
+# Specifies the Active Directory realm the host is part of
+; realm = MY_REALM
+
+# Backend to store user information in. New installations should
+# use either tdbsam or ldapsam. smbpasswd is available for backwards
+# compatibility. tdbsam requires no further configuration.
+; passdb backend = tdbsam
+
+# Using the following line enables you to customise your configuration
+# on a per machine basis. The %m gets replaced with the netbios name
+# of the machine that is connecting.
+# Note: Consider carefully the location in the configuration file of
+# this line. The included file is read at that point.
+; include = /usr/local/samba/lib/smb.conf.%m
+
+# Configure Samba to use multiple interfaces
+# If you have multiple network interfaces then you must list them
+# here. See the man page for details.
+; interfaces = 192.168.12.2/24 192.168.13.2/24
+
+# Browser Control Options:
+# set local master to no if you don't want Samba to become a master
+# browser on your network. Otherwise the normal election rules apply
+; local master = no
+
+# OS Level determines the precedence of this server in master browser
+# elections. The default value should be reasonable
+; os level = 33
+
+# Domain Master specifies Samba to be the Domain Master Browser. This
+# allows Samba to collate browse lists between subnets. Don't use this
+# if you already have a Windows NT domain controller doing this job
+; domain master = yes
+
+# Preferred Master causes Samba to force a local browser election on startup
+# and gives it a slightly higher chance of winning the election
+; preferred master = yes
+
+# Enable this if you want Samba to be a domain logon server for
+# Windows95 workstations.
+; domain logons = yes
+
+# if you enable domain logons then you may want a per-machine or
+# per user logon script
+# run a specific logon batch file per workstation (machine)
+; logon script = %m.bat
+# run a specific logon batch file per username
+; logon script = %U.bat
+
+# Where to store roving profiles (only for Win95 and WinNT)
+# %L substitutes for this servers netbios name, %U is username
+# You must uncomment the [Profiles] share below
+; logon path = \\%L\Profiles\%U
+
+# Windows Internet Name Serving Support Section:
+# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
+; wins support = yes
+
+# WINS Server - Tells the NMBD components of Samba to be a WINS Client
+# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
+; wins server = w.x.y.z
+
+# WINS Proxy - Tells Samba to answer name resolution queries on
+# behalf of a non WINS capable client, for this to work there must be
+# at least one WINS Server on the network. The default is NO.
+; wins proxy = yes
+
+# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
+# via DNS nslookups. The default is NO.
+ dns proxy = no
+
+# These scripts are used on a domain controller or stand-alone
+# machine to add or delete corresponding unix accounts
+; add user script = /usr/sbin/useradd %u
+; add group script = /usr/sbin/groupadd %g
+; add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
+; delete user script = /usr/sbin/userdel %u
+; delete user from group script = /usr/sbin/deluser %u %g
+; delete group script = /usr/sbin/groupdel %g
+
+
+#============================ Share Definitions ==============================
+
+
diff --git a/abs/core/live-installer/templates/settings/default_1/keybindings.txt b/abs/core/live-installer/templates/settings/default_1/keybindings.txt
new file mode 100644
index 0000000..f82f2d2
--- /dev/null
+++ b/abs/core/live-installer/templates/settings/default_1/keybindings.txt
@@ -0,0 +1,209 @@
+context action description keylist hostname
+Music FFWD Fast forward PgDown REPLACEME
+Music STOP Stop playback O REPLACEME
+Music MUTE Mute |,\\\\,F9 REPLACEME
+Gallery SCROLLUP Scroll image up 2 REPLACEME
+Music VOLUMEDOWN Volume down [,{,F10 REPLACEME
+Music VOLUMEUP Volume up ],},F11 REPLACEME
+qt DELETE Delete D REPLACEME
+Music RWND Rewind PgUp REPLACEME
+qt EDIT Edit E REPLACEME
+Music PAUSE Pause/Start playback P REPLACEME
+Gallery RECENTER Recenter image 5 REPLACEME
+Gallery FULLSIZE Full-size (un-zoom) image 0 REPLACEME
+Gallery LOWRIGHT Go to the lower-right corner of the image PgDown REPLACEME
+Gallery SCROLLRIGHT Scroll image right 6 REPLACEME
+Gallery MENU Toggle activating menu in thumbnail view M REPLACEME
+Gallery SCROLLDOWN Scroll image down 8 REPLACEME
+Gallery ZOOMIN Zoom image in 9 REPLACEME
+Gallery UPLEFT Go to the upper-left corner of the image PgUp REPLACEME
+Gallery RANDOMSHOW Start Random Slideshow in thumbnail view R REPLACEME
+Gallery ROTLEFT Rotate image left 90 degrees [,1 REPLACEME
+Gallery SLIDESHOW Start Slideshow in thumbnail view S REPLACEME
+Gallery ROTRIGHT Rotate image right 90 degrees ],3 REPLACEME
+Gallery END Go to the last image in thumbnail view End REPLACEME
+Gallery HOME Go to the first image in thumbnail view Home REPLACEME
+Gallery SCROLLLEFT Scroll image left 4 REPLACEME
+Gallery PLAY Start/Stop Slideshow P REPLACEME
+NetFlix REMOVE Removes movie from queue D REPLACEME
+Archive TOGGLECUT Toggle use cut list state for selected program C REPLACEME
+Gallery ZOOMOUT Zoom image out 7 REPLACEME
+NetFlix MOVETOTOP Moves movie to top of queue 1 REPLACEME
+Global DOWN Down Arrow Down REPLACEME
+ITV Menu MENUTEXT Menu Text F7 REPLACEME
+ITV Menu TEXTEXIT Menu Exit F6 REPLACEME
+Global LEFT Left Arrow Left REPLACEME
+Global RIGHT Right Arrow Right REPLACEME
+Global UP Up Arrow Up REPLACEME
+Global MENU Pop-up menu M REPLACEME
+Global PREVVIEW Previous View Home REPLACEME
+Global ESCAPE Escape Esc REPLACEME
+Global PAGEUP Page Up PgUp REPLACEME
+Global SELECT Select Return,Enter,Space REPLACEME
+Global HELP Help F1 REPLACEME
+Global INFO More information I REPLACEME
+Global NEXTVIEW Next View End REPLACEME
+ITV Menu MENUBLUE Menu Blue F5 REPLACEME
+Global PAGEDOWN Page Down PgDown REPLACEME
+Global EJECT Eject Removable Media REPLACEME
+Global 3 3 3 REPLACEME
+Global 1 1 1 REPLACEME
+Global 6 6 6 REPLACEME
+Global 0 0 0 REPLACEME
+Global 2 2 2 REPLACEME
+Global 4 4 4 REPLACEME
+TV Frontend DELETE Delete Program D REPLACEME
+Global 8 8 8 REPLACEME
+Global 7 7 7 REPLACEME
+TV Frontend PAGEDOWN Page Down 9 REPLACEME
+TV Frontend PAGEUP Page Up 3 REPLACEME
+Global 5 5 5 REPLACEME
+TV Frontend CHANGERECGROUP Change Recording Group REPLACEME
+Global 9 9 9 REPLACEME
+Video END Go to the last video End REPLACEME
+Video INCPARENT Increase Parental Level ],},F11 REPLACEME
+Weather PAUSE Pause current page P REPLACEME
+TV Frontend TOGGLERECORD Toggle recording status of current program R REPLACEME
+Video BROWSE Change browsable in video manager B REPLACEME
+Welcome SHOWSETTINGS Show Mythshutdown settings F11 REPLACEME
+Video HOME Go to the first video Home REPLACEME
+Video FILTER Open video filter dialog F REPLACEME
+Welcome STARTXTERM Open an Xterm window F12 REPLACEME
+Music INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music BLANKSCR Blank screen 5 REPLACEME
+Video DELETE Delete video D REPLACEME
+Music THMBUP Increase rating 9 REPLACEME
+Music CYCLEVIS Cycle visualizer mode 6 REPLACEME
+Teletext Menu REVEAL Reveal hidden Text F8 REPLACEME
+Music INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+TV Frontend PLAYBACK Play Program P REPLACEME
+News FORCERETRIEVE Force update news items M REPLACEME
+Video DECPARENT Decrease Parental Level [,{,F10 REPLACEME
+News RETRIEVENEWS Update news items I REPLACEME
+News CANCEL Cancel news item updating C REPLACEME
+Teletext Menu TOGGLEBACKGROUND Toggle Background F7 REPLACEME
+Teletext Menu MENUWHITE Menu White F6 REPLACEME
+ITV Menu MENURED Menu Red F2 REPLACEME
+ITV Menu MENUYELLOW Menu Yellow F4 REPLACEME
+ITV Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu PREVSUBPAGE Previous Subpage Left REPLACEME
+Teletext Menu MENUYELLOW Menu Yellow F4 REPLACEME
+Teletext Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu NEXTSUBPAGE Next Subpage Right REPLACEME
+Teletext Menu MENUBLUE Menu Blue F5 REPLACEME
+Teletext Menu TOGGLETT Toggle Teletext T REPLACEME
+Teletext Menu NEXTPAGE Next Page Down REPLACEME
+TV Editing LOADCOMMSKIP Load cut list from commercial skips Z,End REPLACEME
+TV Editing BIGJUMPREW Jump back 10x the normal amount ,,< REPLACEME
+TV Editing BIGJUMPFWD Jump forward 10x the normal amount >,. REPLACEME
+TV Playback JUMPTODVDROOTMENU Jump to the DVD Root Menu REPLACEME
+Teletext Menu MENURED Menu Red F2 REPLACEME
+TV Playback SIGNALMON Monitor Signal Quality F7 REPLACEME
+Teletext Menu PREVPAGE Previous Page Up REPLACEME
+TV Editing INVERTMAP Invert Begin/End cut points I REPLACEME
+TV Playback PLAY Play Ctrl+P REPLACEME
+TV Editing PREVCUT Jump to the previous cut point PgUp REPLACEME
+TV Editing NEXTCUT Jump to the next cut point PgDown REPLACEME
+TV Playback CYCLECOMMSKIPMODE Cycle Commercial Skip mode REPLACEME
+TV Playback TOGGLESLEEP Toggle the Sleep Timer F8 REPLACEME
+TV Playback JUMPREC Display menu of recorded programs to jump to REPLACEME
+TV Playback FINDER Show the Program Finder # REPLACEME
+TV Playback ADJUSTSTRETCH Turn on time stretch control A REPLACEME
+TV Editing CLEARMAP Clear editing cut points C,Q,Home REPLACEME
+TV Editing TOGGLEEDIT Exit out of Edit Mode E REPLACEME
+TV Playback TOGGLESTRETCH Toggle time stretch speed REPLACEME
+TV Playback TOGGLERECCONTROLS Recording picture adjustments for this recorder G REPLACEME
+TV Playback TOGGLEAUDIOSYNC Turn on audio sync adjustment controls REPLACEME
+TV Playback TOGGLEEDIT Start Edit Mode E REPLACEME
+TV Playback SPEEDINC Increase the playback speed U REPLACEME
+TV Playback STRETCHDEC Decrease time stretch speed REPLACEME
+TV Playback SPEEDDEC Decrease the playback speed J REPLACEME
+TV Playback TOGGLECHANCONTROLS Recording picture adjustments for this channel Ctrl+G REPLACEME
+TV Playback GUIDE Show the Program Guide S REPLACEME
+TV Playback JUMPPREV Jump to previously played recording REPLACEME
+TV Playback QUEUETRANSCODE Queue the current recording for transcoding X REPLACEME
+TV Playback STRETCHINC Increase time stretch speed REPLACEME
+TV Playback TOGGLEPICCONTROLS Playback picture adjustments F REPLACEME
+TV Playback PREVCC708 Previous ATSC CC track REPLACEME
+TV Playback NEXTCC708 Next ATSC CC track REPLACEME
+TV Playback NEXTCC Next of any captions REPLACEME
+TV Playback NEXTSCAN Next video scan overidemode REPLACEME
+TV Playback NEXTCC608 Next VBI CC track REPLACEME
+TV Playback PREVCC608 Previous VBI CC track REPLACEME
+TV Playback PREVAUDIO Previous audio track - REPLACEME
+TV Playback PREVSUBTITLE Previous subtitle track REPLACEME
+TV Playback NEXTSUBTITLE Next subtitle track REPLACEME
+TV Playback NEXTAUDIO Next audio track + REPLACEME
+TV Playback SELECTCC708_3 Display ATSC CC4 REPLACEME
+TV Playback SELECTCC708_0 Display ATSC CC1 REPLACEME
+TV Playback SELECTCC608_1 Display VBI CC2 REPLACEME
+TV Playback SELECTAUDIO_0 Play audio track 1 REPLACEME
+TV Playback SELECTCC608_2 Display VBI CC3 REPLACEME
+TV Playback TOGGLETTM Toggle Teletext Menu REPLACEME
+TV Playback SELECTSUBTITLE_1 Display subtitle 2 REPLACEME
+TV Playback SELECTCC608_3 Display VBI CC4 REPLACEME
+TV Playback SELECTCC708_1 Display ATSC CC2 REPLACEME
+TV Playback SELECTCC708_2 Display ATSC CC3 REPLACEME
+TV Playback SELECTAUDIO_1 Play audio track 2 REPLACEME
+TV Playback SELECTSUBTITLE_0 Display subtitle 1 REPLACEME
+TV Playback TOGGLETTC Toggle Teletext Captions REPLACEME
+TV Playback SELECTCC608_0 Display VBI CC1 REPLACEME
+TV Playback SWAPPIP Swap PiP/Main N REPLACEME
+TV Playback TOGGLEASPECT Toggle the display aspect ratio W REPLACEME
+TV Playback TOGGLECC708 Toggle ATSC CC REPLACEME
+TV Playback TOGGLECC608 Toggle VBI CC REPLACEME
+TV Playback TOGGLEPIPMODE Toggle Picture-in-Picture mode V REPLACEME
+TV Playback TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Playback TOGGLEPIPWINDOW Toggle active PiP window B REPLACEME
+TV Playback MUTE Mute |,\\\\,F9 REPLACEME
+TV Playback TOGGLEBROWSE Toggle channel browse mode O REPLACEME
+TV Playback TOGGLESUBTITLE Toggle Subtitles REPLACEME
+TV Playback VOLUMEUP Volume up ],},F11 REPLACEME
+TV Playback TOGGLECC Toggle any captions T REPLACEME
+TV Playback JUMPSTART Jump to the start of the recording. Ctrl+B REPLACEME
+TV Playback TOGGLERECORD Toggle recording status of current program R REPLACEME
+TV Playback SKIPCOMMERCIAL Skip Commercial Z,End REPLACEME
+TV Playback VOLUMEDOWN Volume down [,{,F10 REPLACEME
+TV Playback SWITCHCARDS Switch Capture Cards Y REPLACEME
+TV Playback SKIPCOMMBACK Skip Commercial (Reverse) Q,Home REPLACEME
+TV Playback TOGGLEINPUTS Toggle Inputs C REPLACEME
+TV Playback FFWDSTICKY Fast Forward (Sticky) or Forward one frame while paused >,. REPLACEME
+TV Playback JUMPFFWD Jump ahead PgDown REPLACEME
+TV Playback PREVCHAN Switch to the previous channel H REPLACEME
+TV Playback JUMPBKMRK Jump to bookmark K REPLACEME
+TV Playback RWNDSTICKY Rewind (Sticky) or Rewind one frame while paused ,,< REPLACEME
+TV Playback NEXTFAV Switch to the next favorite channel / REPLACEME
+TV Playback JUMPRWND Jump back PgUp REPLACEME
+TV Playback SEEKRWND Rewind Left REPLACEME
+TV Playback SEEKFFWD Fast Forward Right REPLACEME
+TV Playback CHANNELDOWN Channel down Down REPLACEME
+TV Playback CHANNELUP Channel up Up REPLACEME
+TV Playback ARBSEEK Arbitrary Seek * REPLACEME
+TV Playback DELETE Delete Program D REPLACEME
+TV Playback CLEAROSD Clear OSD Backspace REPLACEME
+TV Frontend DETAILS Show program details U REPLACEME
+TV Frontend CUSTOMEDIT Edit Custom Record Rule E REPLACEME
+TV Frontend UPCOMING List upcoming episodes O REPLACEME
+TV Frontend CHANUPDATE Switch channels without exiting guide in Live TV mode. X REPLACEME
+TV Frontend RANKDEC Decrease program or channel rank Left REPLACEME
+TV Frontend VIEWCARD Switch Capture Card view Y REPLACEME
+TV Playback PAUSE Pause P REPLACEME
+TV Frontend RANKINC Increase program or channel rank Right REPLACEME
+TV Frontend PAGERIGHT Page the program guide right >,. REPLACEME
+TV Frontend PAGELEFT Page the program guide left ,,< REPLACEME
+TV Frontend NEXTFAV Toggle showing all channels or just favorites in the program guide. / REPLACEME
+Gallery DELETE Delete marked images or current image if none are marked D REPLACEME
+TV Frontend DAYRIGHT Page the program guide forward one day End,1 REPLACEME
+Gallery MARK Mark image T REPLACEME
+Game TOGGLEFAV Toggle the current game as a favorite ?,/ REPLACEME
+TV Frontend TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Frontend DAYLEFT Page the program guide back one day Home,7 REPLACEME
+Music PREVTRACK Move to the previous track ,,<,Q,Home REPLACEME
+Game INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+Music DELETE Delete track from playlist D REPLACEME
+Gallery INFO Toggle Showing Information about Image I REPLACEME
+Game INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music REFRESH Refresh music tree 8 REPLACEME
+Music NEXTTRACK Move to the next track >,.,Z,End REPLACEME
+Music FILTER Filter All My Music F REPLACEME
+Music THMBDOWN Decrease rating 7 REPLACEME
diff --git a/abs/core/live-installer/templates/settings/default_1/settings.txt b/abs/core/live-installer/templates/settings/default_1/settings.txt
new file mode 100644
index 0000000..8c3a391
--- /dev/null
+++ b/abs/core/live-installer/templates/settings/default_1/settings.txt
@@ -0,0 +1,320 @@
+value data hostname
+AC3PassThru 0 REPLACEME
+AggressiveSoundcardBuffer 0 REPLACEME
+AllowQuitShutdown 3 REPLACEME
+AltClearSavedPosition 1 REPLACEME
+AspectOverride 0 REPLACEME
+AudioNag 1 REPLACEME
+AudioOutputDevice /dev/dsp REPLACEME
+AutoCommercialSkip 2 REPLACEME
+AutoLookupCD 1 REPLACEME
+AutomaticSetWatched 0 REPLACEME
+AutoPlayCD 0 REPLACEME
+BackendServerPort 6543 REPLACEME
+BackendStatusPort 6544 REPLACEME
+CCBackground 0 REPLACEME
+CDBlankType fast REPLACEME
+CDCreateDir 1 REPLACEME
+CDDevice /dev/cdrom REPLACEME
+CDDiskSize 1 REPLACEME
+CDWriterEnabled 0 REPLACEME
+CDWriteSpeed 0 REPLACEME
+ChannelFormat <num> <sign> REPLACEME
+ChannelOrdering channum REPLACEME
+chanPerPage 5 REPLACEME
+ClearSavedPosition 1 REPLACEME
+CommNotifyAmount 0 REPLACEME
+CommRewindAmount 0 REPLACEME
+CustomFilters REPLACEME
+DateFormat ddd MMM d REPLACEME
+DecodeExtraAudio 1 REPLACEME
+Default MythVideo View 1 REPLACEME
+DefaultCCMode 0 REPLACEME
+DefaultRipQuality 0 REPLACEME
+DefaultTVChannel 3 REPLACEME
+Deinterlace 1 REPLACEME
+DeinterlaceFilter kerneldeint REPLACEME
+DisplayGroupDefaultView 0 REPLACEME
+DisplayGroupTitleSort 0 REPLACEME
+DisplayRecGroup Default REPLACEME
+DispRecGroupAsAllProg 0 REPLACEME
+DTSPassThru 0 REPLACEME
+DVDDeviceLocation /dev/dvd REPLACEME
+DVDOnInsertDVD 1 REPLACEME
+DVDRipLocation /data/media/tmp REPLACEME
+EjectCDAfterRipping 1 REPLACEME
+EnableMHEG 0 REPLACEME
+EnableXbox 0 REPLACEME
+EnableXbox 0 REPLACEME
+EncoderType ogg REPLACEME
+EndOfRecordingExitPrompt 1 REPLACEME
+EPGFillType 10 REPLACEME
+EPGScrollType 1 REPLACEME
+EPGShowCategoryColors 1 REPLACEME
+EPGShowCategoryText 1 REPLACEME
+EPGShowChannelIcon 1 REPLACEME
+EPGShowFavorites 0 REPLACEME
+ExactSeeking 0 REPLACEME
+FFRewReposTime 100 REPLACEME
+FFRewReverse 1 REPLACEME
+FilenameTemplate ARTIST/ALBUM/TRACK-TITLE REPLACEME
+GalleryDir /data/media/images REPLACEME
+GalleryImportDirs /mnt/cdrom:/mnt/camera REPLACEME
+GalleryMoviePlayerCmd mplayer -fs %s REPLACEME
+GalleryOverlayCaption 0 REPLACEME
+GalleryRecursiveSlideshow 1 REPLACEME
+GallerySortOrder 20 REPLACEME
+GalleryThumbnailLocation 1 REPLACEME
+GameAllTreeLevels system gamename REPLACEME
+GameFavTreeLevels gamename REPLACEME
+GeneratePreviewPixmaps 0 REPLACEME
+GuiHeight 0 REPLACEME
+GuiOffsetX 0 REPLACEME
+GuiOffsetY 0 REPLACEME
+GuiSizeForTV 0 REPLACEME
+GuiVidModeResolution 640x480 REPLACEME
+GuiWidth 0 REPLACEME
+HideMouseCursor 1 REPLACEME
+HorizScanPercentage 0 REPLACEME
+Ignore_ID3 0 REPLACEME
+IndividualMuteControl 0 REPLACEME
+IntelliLastPlayWeight 25 REPLACEME
+IntelliPlayCountWeight 25 REPLACEME
+IntelliRandomWeight 15 REPLACEME
+IntelliRatingWeight 35 REPLACEME
+ISO639Language0 eng REPLACEME
+ISO639Language1 eng REPLACEME
+JobAllowCommFlag 1 REPLACEME
+JobAllowTranscode 1 REPLACEME
+JobQueueCheckFrequency 60 REPLACEME
+JobQueueCPU 0 REPLACEME
+JobQueueMaxSimultaneousJobs 1 REPLACEME
+JobQueueWindowEnd 23:59 REPLACEME
+JobQueueWindowStart 00:00 REPLACEME
+KeyboardAccelerators 1 REPLACEME
+Language EN REPLACEME
+LastMusicPlaylistPush 0 REPLACEME
+LCDBacklightOn 1 REPLACEME
+LCDBigClock 0 REPLACEME
+LCDEnable 0 REPLACEME
+LCDHeartBeatOn 0 REPLACEME
+LCDKeyString ABCDEF REPLACEME
+LCDPopupTime 5 REPLACEME
+LCDShowChannel 1 REPLACEME
+LCDShowGeneric 1 REPLACEME
+LCDShowMenu 1 REPLACEME
+LCDShowMusic 1 REPLACEME
+LCDShowMusicItems ArtistTitle REPLACEME
+LCDShowRecStatus 0 REPLACEME
+LCDShowTime 1 REPLACEME
+LCDShowVolume 1 REPLACEME
+LircKeyPressedApp REPLACEME
+ListAsShuffled 0 REPLACEME
+LiveTVInAllPrograms 0 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogMaxCount 100 REPLACEME
+LogMaxCount 100 REPLACEME
+LogPrintLevel 8 REPLACEME
+LogPrintLevel 8 REPLACEME
+LongChannelFormat <num> <name> REPLACEME
+MasterMixerVolume 70 REPLACEME
+MenuTheme MythVantage-menu REPLACEME
+MixerControl PCM REPLACEME
+MixerDevice /dev/mixer REPLACEME
+MonitorDrives 0 REPLACEME
+MovieDataCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -D REPLACEME
+MovieListCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no REPLACEME
+MoviePosterCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -P REPLACEME
+Mp3UseVBR 0 REPLACEME
+MTDac3Flag 0 REPLACEME
+MTDConcurrentTranscodes 1 REPLACEME
+MTDLogFlag 0 REPLACEME
+MTDNiceLevel 20 REPLACEME
+MTDPort 2442 REPLACEME
+MTDRipSize 0 REPLACEME
+MTDxvidFlag 1 REPLACEME
+MusicAudioDevice default REPLACEME
+MusicLocation /data/media/audio REPLACEME
+MusicShowRatings 0 REPLACEME
+MythArchiveAlwaysUseMythTranscode 1 REPLACEME
+MythArchiveChapterMenuAR Video REPLACEME
+MythArchiveCopyRemoteFiles 1 REPLACEME
+MythArchiveDateFormat %a %b %d REPLACEME
+MythArchiveDvdauthorCmd dvdauthor REPLACEME
+MythArchiveDVDLocation /dev/dvd REPLACEME
+MythArchiveEncodeToAc3 1 REPLACEME
+MythArchiveFfmpegCmd ffmpeg REPLACEME
+MythArchiveFileFilter *.mpg *.mov *.avi *.mpeg *.nuv REPLACEME
+MythArchiveGrowisofsCmd growisofs REPLACEME
+MythArchiveMainMenuAR 16:9 REPLACEME
+MythArchiveMkisofsCmd mkisofs REPLACEME
+MythArchiveMpeg2encCmd mpeg2enc REPLACEME
+MythArchiveMplexCmd mplex REPLACEME
+MythArchivePng2yuvCmd png2yuv REPLACEME
+MythArchiveShareDir /usr/local/share/mythtv/mytharchive/ REPLACEME
+MythArchiveSpumuxCmd spumux REPLACEME
+MythArchiveTcrequantCmd tcrequant REPLACEME
+MythArchiveTempDir /data/media/tmp REPLACEME
+MythArchiveTimeFormat %I:%M %p REPLACEME
+MythArchiveUseFIFO 1 REPLACEME
+MythArchiveVideoFormat NTSC REPLACEME
+MythControlsVolume 1 REPLACEME
+mythdvd.DVDPlayerCommand Internal REPLACEME
+mythvideo.db_folder_view 1 REPLACEME
+mythvideo.ImageCacheSize 50 REPLACEME
+mythvideo.sort_ignores_case 1 REPLACEME
+NetworkControlEnabled 1 REPLACEME
+NetworkControlPort 6546 REPLACEME
+NonID3FileNameFormat GENRE/ARTIST/ALBUM/TRACK_TITLE REPLACEME
+NoPromptOnExit 0 REPLACEME
+NoWhitespace 0 REPLACEME
+OnlyImportNewMusic 0 REPLACEME
+OSDCC708CapitalsFont FreeMono.ttf REPLACEME
+OSDCC708CapitalsItalicFont FreeMono.ttf REPLACEME
+OSDCC708CasualFont FreeMono.ttf REPLACEME
+OSDCC708CasualItalicFont FreeMono.ttf REPLACEME
+OSDCC708CursiveFont FreeMono.ttf REPLACEME
+OSDCC708CursiveItalicFont FreeMono.ttf REPLACEME
+OSDCC708DefaultFontType MonoSerif REPLACEME
+OSDCC708MonoSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708TextZoom 100 REPLACEME
+OSDCCFont FreeMono.ttf REPLACEME
+OSDFont FreeMono.ttf REPLACEME
+OSDGeneralTimeout 2 REPLACEME
+OSDNotifyTimeout 6 REPLACEME
+OSDProgramInfoTimeout 3 REPLACEME
+OSDTheme Gray-OSD REPLACEME
+OSDThemeFontSizeType default REPLACEME
+ParanoiaLevel Full REPLACEME
+PassThruOutputDevice Default REPLACEME
+PCMMixerVolume 70 REPLACEME
+PersistentBrowseMode 1 REPLACEME
+PIPLocation 0 REPLACEME
+PlaybackBoxStartInTitle 1 REPLACEME
+PlaybackExitPrompt 2 REPLACEME
+PlaybackPreview 1 REPLACEME
+PlaybackPreviewLowCPU 1 REPLACEME
+PlayBoxEpisodeSort Date REPLACEME
+PlayBoxOrdering 1 REPLACEME
+PlayBoxShading 0 REPLACEME
+PlayBoxTransparency 1 REPLACEME
+PlayMode none REPLACEME
+PostCDRipScript REPLACEME
+PreferredMPEG2Decoder ffmpeg REPLACEME
+PreviewFromBookmark 1 REPLACEME
+PVR350EPGAlphaValue 164 REPLACEME
+PVR350InternalAudioOnly 0 REPLACEME
+PVR350OutputEnable 0 REPLACEME
+PVR350VideoDev /dev/video16 REPLACEME
+QtFontBig 25 REPLACEME
+QtFontMedium 16 REPLACEME
+QtFontSmall 12 REPLACEME
+QueryInitialFilter 0 REPLACEME
+RandomTheme 0 REPLACEME
+RealtimePriority 1 REPLACEME
+RecordFilePrefix /data/media/video/recordings REPLACEME
+RememberRecGroup 1 REPLACEME
+RepeatMode all REPLACEME
+RunFrontendInWindow 0 REPLACEME
+SelChangeRecThreshold 16 REPLACEME
+SelectChangesChannel 1 REPLACEME
+ServiceMythWEB 0 REPLACEME
+ServiceNFS 0 REPLACEME
+ServiceSamba 0 REPLACEME
+SetupPinCodeRequired 0 REPLACEME
+ShortDateFormat M/d REPLACEME
+ShowGroupInfo 0 REPLACEME
+ShowWholeTree 1 REPLACEME
+SlideshowBackground REPLACEME
+SlideshowDelay 5 REPLACEME
+SlideshowOpenGLTransition none REPLACEME
+SlideshowOpenGLTransitionLength 2000 REPLACEME
+SlideshowTransition none REPLACEME
+SmartChannelChange 0 REPLACEME
+SmartForward 0 REPLACEME
+StickyKeys 1 REPLACEME
+Style Windows REPLACEME
+SubTitleCommand -sid %s REPLACEME
+TagSeparator - REPLACEME
+Theme basic-blue REPLACEME
+ThemeFontSizeType default REPLACEME
+ThemePainter qt REPLACEME
+TimeFormat h:mm AP REPLACEME
+timePerPage 4 REPLACEME
+TitlePlayCommand mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c REPLACEME
+TranscodeCommand transcode REPLACEME
+TreeLevels splitartist artist album title REPLACEME
+TVVidModeForceAspect 0.0 REPLACEME
+TVVidModeForceAspect0 0.0 REPLACEME
+TVVidModeForceAspect1 0.0 REPLACEME
+TVVidModeForceAspect2 0.0 REPLACEME
+TVVidModeRefreshRate 0 REPLACEME
+TVVidModeRefreshRate0 0 REPLACEME
+TVVidModeRefreshRate1 0 REPLACEME
+TVVidModeRefreshRate2 0 REPLACEME
+TVVidModeResolution 640x480 REPLACEME
+TVVidModeResolution0 640x480 REPLACEME
+TVVidModeResolution1 640x480 REPLACEME
+TVVidModeResolution2 640x480 REPLACEME
+UDPNotifyPort 6948 REPLACEME
+UnknownCategory Unknown REPLACEME
+UnknownTitle Unknown REPLACEME
+upnp:UDN:urn:schemas-upnp-org:device:MediaServer:1 dee5b0fe-7087-4960-8794-428d3e01a61f REPLACEME
+UseArrowAccels 1 REPLACEME
+UseOutputPictureControls 1 REPLACEME
+UseVideoModes 0 REPLACEME
+UseVideoTimebase 0 REPLACEME
+UseVirtualKeyboard 1 REPLACEME
+VCDDeviceLocation /dev/cdrom REPLACEME
+VCDPlayerCommand mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv REPLACEME
+VertScanPercentage 0 REPLACEME
+VideoAggressivePC 0 REPLACEME
+VideoArtworkDir /data/media/images/posters REPLACEME
+VideoBrowserNoDB 0 REPLACEME
+VideoDefaultParentalLevel 4 REPLACEME
+VideoGalleryAspectRatio 1 REPLACEME
+VideoGalleryColsPerPage 4 REPLACEME
+VideoGalleryNoDB 0 REPLACEME
+VideoGalleryRowsPerPage 3 REPLACEME
+VideoGallerySubtitle 1 REPLACEME
+VideoListUnknownFiletypes 1 REPLACEME
+VideoNewBrowsable 1 REPLACEME
+VideoDefaultPlayer Internal REPLACEME
+VideoStartupDir /data/media/video/movies REPLACEME
+VideoTreeLoadMetaData 1 REPLACEME
+VideoTreeNoDB 0 REPLACEME
+VidModeHeight0 0 REPLACEME
+VidModeHeight1 0 REPLACEME
+VidModeHeight2 0 REPLACEME
+VidModeWidth0 0 REPLACEME
+VidModeWidth1 0 REPLACEME
+VidModeWidth2 0 REPLACEME
+VisualCycleOnSongChange 0 REPLACEME
+VisualMode Random REPLACEME
+VisualModeDelay 0 REPLACEME
+VisualScaleHeight 1 REPLACEME
+VisualScaleWidth 1 REPLACEME
+WatchTVGuide 0 REPLACEME
+WebBrowserCommand /usr/local/bin/mythbrowser REPLACEME
+WebBrowserHideScrollbars 0 REPLACEME
+WebBrowserScrollMode 1 REPLACEME
+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/live-installer/templates/settings/default_2/keybindings.txt b/abs/core/live-installer/templates/settings/default_2/keybindings.txt
new file mode 100644
index 0000000..f82f2d2
--- /dev/null
+++ b/abs/core/live-installer/templates/settings/default_2/keybindings.txt
@@ -0,0 +1,209 @@
+context action description keylist hostname
+Music FFWD Fast forward PgDown REPLACEME
+Music STOP Stop playback O REPLACEME
+Music MUTE Mute |,\\\\,F9 REPLACEME
+Gallery SCROLLUP Scroll image up 2 REPLACEME
+Music VOLUMEDOWN Volume down [,{,F10 REPLACEME
+Music VOLUMEUP Volume up ],},F11 REPLACEME
+qt DELETE Delete D REPLACEME
+Music RWND Rewind PgUp REPLACEME
+qt EDIT Edit E REPLACEME
+Music PAUSE Pause/Start playback P REPLACEME
+Gallery RECENTER Recenter image 5 REPLACEME
+Gallery FULLSIZE Full-size (un-zoom) image 0 REPLACEME
+Gallery LOWRIGHT Go to the lower-right corner of the image PgDown REPLACEME
+Gallery SCROLLRIGHT Scroll image right 6 REPLACEME
+Gallery MENU Toggle activating menu in thumbnail view M REPLACEME
+Gallery SCROLLDOWN Scroll image down 8 REPLACEME
+Gallery ZOOMIN Zoom image in 9 REPLACEME
+Gallery UPLEFT Go to the upper-left corner of the image PgUp REPLACEME
+Gallery RANDOMSHOW Start Random Slideshow in thumbnail view R REPLACEME
+Gallery ROTLEFT Rotate image left 90 degrees [,1 REPLACEME
+Gallery SLIDESHOW Start Slideshow in thumbnail view S REPLACEME
+Gallery ROTRIGHT Rotate image right 90 degrees ],3 REPLACEME
+Gallery END Go to the last image in thumbnail view End REPLACEME
+Gallery HOME Go to the first image in thumbnail view Home REPLACEME
+Gallery SCROLLLEFT Scroll image left 4 REPLACEME
+Gallery PLAY Start/Stop Slideshow P REPLACEME
+NetFlix REMOVE Removes movie from queue D REPLACEME
+Archive TOGGLECUT Toggle use cut list state for selected program C REPLACEME
+Gallery ZOOMOUT Zoom image out 7 REPLACEME
+NetFlix MOVETOTOP Moves movie to top of queue 1 REPLACEME
+Global DOWN Down Arrow Down REPLACEME
+ITV Menu MENUTEXT Menu Text F7 REPLACEME
+ITV Menu TEXTEXIT Menu Exit F6 REPLACEME
+Global LEFT Left Arrow Left REPLACEME
+Global RIGHT Right Arrow Right REPLACEME
+Global UP Up Arrow Up REPLACEME
+Global MENU Pop-up menu M REPLACEME
+Global PREVVIEW Previous View Home REPLACEME
+Global ESCAPE Escape Esc REPLACEME
+Global PAGEUP Page Up PgUp REPLACEME
+Global SELECT Select Return,Enter,Space REPLACEME
+Global HELP Help F1 REPLACEME
+Global INFO More information I REPLACEME
+Global NEXTVIEW Next View End REPLACEME
+ITV Menu MENUBLUE Menu Blue F5 REPLACEME
+Global PAGEDOWN Page Down PgDown REPLACEME
+Global EJECT Eject Removable Media REPLACEME
+Global 3 3 3 REPLACEME
+Global 1 1 1 REPLACEME
+Global 6 6 6 REPLACEME
+Global 0 0 0 REPLACEME
+Global 2 2 2 REPLACEME
+Global 4 4 4 REPLACEME
+TV Frontend DELETE Delete Program D REPLACEME
+Global 8 8 8 REPLACEME
+Global 7 7 7 REPLACEME
+TV Frontend PAGEDOWN Page Down 9 REPLACEME
+TV Frontend PAGEUP Page Up 3 REPLACEME
+Global 5 5 5 REPLACEME
+TV Frontend CHANGERECGROUP Change Recording Group REPLACEME
+Global 9 9 9 REPLACEME
+Video END Go to the last video End REPLACEME
+Video INCPARENT Increase Parental Level ],},F11 REPLACEME
+Weather PAUSE Pause current page P REPLACEME
+TV Frontend TOGGLERECORD Toggle recording status of current program R REPLACEME
+Video BROWSE Change browsable in video manager B REPLACEME
+Welcome SHOWSETTINGS Show Mythshutdown settings F11 REPLACEME
+Video HOME Go to the first video Home REPLACEME
+Video FILTER Open video filter dialog F REPLACEME
+Welcome STARTXTERM Open an Xterm window F12 REPLACEME
+Music INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music BLANKSCR Blank screen 5 REPLACEME
+Video DELETE Delete video D REPLACEME
+Music THMBUP Increase rating 9 REPLACEME
+Music CYCLEVIS Cycle visualizer mode 6 REPLACEME
+Teletext Menu REVEAL Reveal hidden Text F8 REPLACEME
+Music INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+TV Frontend PLAYBACK Play Program P REPLACEME
+News FORCERETRIEVE Force update news items M REPLACEME
+Video DECPARENT Decrease Parental Level [,{,F10 REPLACEME
+News RETRIEVENEWS Update news items I REPLACEME
+News CANCEL Cancel news item updating C REPLACEME
+Teletext Menu TOGGLEBACKGROUND Toggle Background F7 REPLACEME
+Teletext Menu MENUWHITE Menu White F6 REPLACEME
+ITV Menu MENURED Menu Red F2 REPLACEME
+ITV Menu MENUYELLOW Menu Yellow F4 REPLACEME
+ITV Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu PREVSUBPAGE Previous Subpage Left REPLACEME
+Teletext Menu MENUYELLOW Menu Yellow F4 REPLACEME
+Teletext Menu MENUGREEN Menu Green F3 REPLACEME
+Teletext Menu NEXTSUBPAGE Next Subpage Right REPLACEME
+Teletext Menu MENUBLUE Menu Blue F5 REPLACEME
+Teletext Menu TOGGLETT Toggle Teletext T REPLACEME
+Teletext Menu NEXTPAGE Next Page Down REPLACEME
+TV Editing LOADCOMMSKIP Load cut list from commercial skips Z,End REPLACEME
+TV Editing BIGJUMPREW Jump back 10x the normal amount ,,< REPLACEME
+TV Editing BIGJUMPFWD Jump forward 10x the normal amount >,. REPLACEME
+TV Playback JUMPTODVDROOTMENU Jump to the DVD Root Menu REPLACEME
+Teletext Menu MENURED Menu Red F2 REPLACEME
+TV Playback SIGNALMON Monitor Signal Quality F7 REPLACEME
+Teletext Menu PREVPAGE Previous Page Up REPLACEME
+TV Editing INVERTMAP Invert Begin/End cut points I REPLACEME
+TV Playback PLAY Play Ctrl+P REPLACEME
+TV Editing PREVCUT Jump to the previous cut point PgUp REPLACEME
+TV Editing NEXTCUT Jump to the next cut point PgDown REPLACEME
+TV Playback CYCLECOMMSKIPMODE Cycle Commercial Skip mode REPLACEME
+TV Playback TOGGLESLEEP Toggle the Sleep Timer F8 REPLACEME
+TV Playback JUMPREC Display menu of recorded programs to jump to REPLACEME
+TV Playback FINDER Show the Program Finder # REPLACEME
+TV Playback ADJUSTSTRETCH Turn on time stretch control A REPLACEME
+TV Editing CLEARMAP Clear editing cut points C,Q,Home REPLACEME
+TV Editing TOGGLEEDIT Exit out of Edit Mode E REPLACEME
+TV Playback TOGGLESTRETCH Toggle time stretch speed REPLACEME
+TV Playback TOGGLERECCONTROLS Recording picture adjustments for this recorder G REPLACEME
+TV Playback TOGGLEAUDIOSYNC Turn on audio sync adjustment controls REPLACEME
+TV Playback TOGGLEEDIT Start Edit Mode E REPLACEME
+TV Playback SPEEDINC Increase the playback speed U REPLACEME
+TV Playback STRETCHDEC Decrease time stretch speed REPLACEME
+TV Playback SPEEDDEC Decrease the playback speed J REPLACEME
+TV Playback TOGGLECHANCONTROLS Recording picture adjustments for this channel Ctrl+G REPLACEME
+TV Playback GUIDE Show the Program Guide S REPLACEME
+TV Playback JUMPPREV Jump to previously played recording REPLACEME
+TV Playback QUEUETRANSCODE Queue the current recording for transcoding X REPLACEME
+TV Playback STRETCHINC Increase time stretch speed REPLACEME
+TV Playback TOGGLEPICCONTROLS Playback picture adjustments F REPLACEME
+TV Playback PREVCC708 Previous ATSC CC track REPLACEME
+TV Playback NEXTCC708 Next ATSC CC track REPLACEME
+TV Playback NEXTCC Next of any captions REPLACEME
+TV Playback NEXTSCAN Next video scan overidemode REPLACEME
+TV Playback NEXTCC608 Next VBI CC track REPLACEME
+TV Playback PREVCC608 Previous VBI CC track REPLACEME
+TV Playback PREVAUDIO Previous audio track - REPLACEME
+TV Playback PREVSUBTITLE Previous subtitle track REPLACEME
+TV Playback NEXTSUBTITLE Next subtitle track REPLACEME
+TV Playback NEXTAUDIO Next audio track + REPLACEME
+TV Playback SELECTCC708_3 Display ATSC CC4 REPLACEME
+TV Playback SELECTCC708_0 Display ATSC CC1 REPLACEME
+TV Playback SELECTCC608_1 Display VBI CC2 REPLACEME
+TV Playback SELECTAUDIO_0 Play audio track 1 REPLACEME
+TV Playback SELECTCC608_2 Display VBI CC3 REPLACEME
+TV Playback TOGGLETTM Toggle Teletext Menu REPLACEME
+TV Playback SELECTSUBTITLE_1 Display subtitle 2 REPLACEME
+TV Playback SELECTCC608_3 Display VBI CC4 REPLACEME
+TV Playback SELECTCC708_1 Display ATSC CC2 REPLACEME
+TV Playback SELECTCC708_2 Display ATSC CC3 REPLACEME
+TV Playback SELECTAUDIO_1 Play audio track 2 REPLACEME
+TV Playback SELECTSUBTITLE_0 Display subtitle 1 REPLACEME
+TV Playback TOGGLETTC Toggle Teletext Captions REPLACEME
+TV Playback SELECTCC608_0 Display VBI CC1 REPLACEME
+TV Playback SWAPPIP Swap PiP/Main N REPLACEME
+TV Playback TOGGLEASPECT Toggle the display aspect ratio W REPLACEME
+TV Playback TOGGLECC708 Toggle ATSC CC REPLACEME
+TV Playback TOGGLECC608 Toggle VBI CC REPLACEME
+TV Playback TOGGLEPIPMODE Toggle Picture-in-Picture mode V REPLACEME
+TV Playback TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Playback TOGGLEPIPWINDOW Toggle active PiP window B REPLACEME
+TV Playback MUTE Mute |,\\\\,F9 REPLACEME
+TV Playback TOGGLEBROWSE Toggle channel browse mode O REPLACEME
+TV Playback TOGGLESUBTITLE Toggle Subtitles REPLACEME
+TV Playback VOLUMEUP Volume up ],},F11 REPLACEME
+TV Playback TOGGLECC Toggle any captions T REPLACEME
+TV Playback JUMPSTART Jump to the start of the recording. Ctrl+B REPLACEME
+TV Playback TOGGLERECORD Toggle recording status of current program R REPLACEME
+TV Playback SKIPCOMMERCIAL Skip Commercial Z,End REPLACEME
+TV Playback VOLUMEDOWN Volume down [,{,F10 REPLACEME
+TV Playback SWITCHCARDS Switch Capture Cards Y REPLACEME
+TV Playback SKIPCOMMBACK Skip Commercial (Reverse) Q,Home REPLACEME
+TV Playback TOGGLEINPUTS Toggle Inputs C REPLACEME
+TV Playback FFWDSTICKY Fast Forward (Sticky) or Forward one frame while paused >,. REPLACEME
+TV Playback JUMPFFWD Jump ahead PgDown REPLACEME
+TV Playback PREVCHAN Switch to the previous channel H REPLACEME
+TV Playback JUMPBKMRK Jump to bookmark K REPLACEME
+TV Playback RWNDSTICKY Rewind (Sticky) or Rewind one frame while paused ,,< REPLACEME
+TV Playback NEXTFAV Switch to the next favorite channel / REPLACEME
+TV Playback JUMPRWND Jump back PgUp REPLACEME
+TV Playback SEEKRWND Rewind Left REPLACEME
+TV Playback SEEKFFWD Fast Forward Right REPLACEME
+TV Playback CHANNELDOWN Channel down Down REPLACEME
+TV Playback CHANNELUP Channel up Up REPLACEME
+TV Playback ARBSEEK Arbitrary Seek * REPLACEME
+TV Playback DELETE Delete Program D REPLACEME
+TV Playback CLEAROSD Clear OSD Backspace REPLACEME
+TV Frontend DETAILS Show program details U REPLACEME
+TV Frontend CUSTOMEDIT Edit Custom Record Rule E REPLACEME
+TV Frontend UPCOMING List upcoming episodes O REPLACEME
+TV Frontend CHANUPDATE Switch channels without exiting guide in Live TV mode. X REPLACEME
+TV Frontend RANKDEC Decrease program or channel rank Left REPLACEME
+TV Frontend VIEWCARD Switch Capture Card view Y REPLACEME
+TV Playback PAUSE Pause P REPLACEME
+TV Frontend RANKINC Increase program or channel rank Right REPLACEME
+TV Frontend PAGERIGHT Page the program guide right >,. REPLACEME
+TV Frontend PAGELEFT Page the program guide left ,,< REPLACEME
+TV Frontend NEXTFAV Toggle showing all channels or just favorites in the program guide. / REPLACEME
+Gallery DELETE Delete marked images or current image if none are marked D REPLACEME
+TV Frontend DAYRIGHT Page the program guide forward one day End,1 REPLACEME
+Gallery MARK Mark image T REPLACEME
+Game TOGGLEFAV Toggle the current game as a favorite ?,/ REPLACEME
+TV Frontend TOGGLEFAV Toggle the current channel as a favorite ? REPLACEME
+TV Frontend DAYLEFT Page the program guide back one day Home,7 REPLACEME
+Music PREVTRACK Move to the previous track ,,<,Q,Home REPLACEME
+Game INCSEARCHNEXT Incremental search find next match Ctrl+N REPLACEME
+Music DELETE Delete track from playlist D REPLACEME
+Gallery INFO Toggle Showing Information about Image I REPLACEME
+Game INCSEARCH Show incremental search dialog Ctrl+S REPLACEME
+Music REFRESH Refresh music tree 8 REPLACEME
+Music NEXTTRACK Move to the next track >,.,Z,End REPLACEME
+Music FILTER Filter All My Music F REPLACEME
+Music THMBDOWN Decrease rating 7 REPLACEME
diff --git a/abs/core/live-installer/templates/settings/default_2/settings.txt b/abs/core/live-installer/templates/settings/default_2/settings.txt
new file mode 100644
index 0000000..106be04
--- /dev/null
+++ b/abs/core/live-installer/templates/settings/default_2/settings.txt
@@ -0,0 +1,320 @@
+value data hostname
+AC3PassThru 0 REPLACEME
+AggressiveSoundcardBuffer 0 REPLACEME
+AllowQuitShutdown 3 REPLACEME
+AltClearSavedPosition 1 REPLACEME
+AspectOverride 0 REPLACEME
+AudioNag 1 REPLACEME
+AudioOutputDevice /dev/dsp REPLACEME
+AutoCommercialSkip 2 REPLACEME
+AutoLookupCD 1 REPLACEME
+AutomaticSetWatched 0 REPLACEME
+AutoPlayCD 0 REPLACEME
+BackendServerPort 6543 REPLACEME
+BackendStatusPort 6544 REPLACEME
+CCBackground 0 REPLACEME
+CDBlankType fast REPLACEME
+CDCreateDir 1 REPLACEME
+CDDevice /dev/cdrom REPLACEME
+CDDiskSize 1 REPLACEME
+CDWriterEnabled 0 REPLACEME
+CDWriteSpeed 0 REPLACEME
+ChannelFormat <num> <sign> REPLACEME
+ChannelOrdering channum REPLACEME
+chanPerPage 5 REPLACEME
+ClearSavedPosition 1 REPLACEME
+CommNotifyAmount 0 REPLACEME
+CommRewindAmount 0 REPLACEME
+CustomFilters REPLACEME
+DateFormat ddd MMM d REPLACEME
+DecodeExtraAudio 1 REPLACEME
+Default MythVideo View 1 REPLACEME
+DefaultCCMode 0 REPLACEME
+DefaultRipQuality 0 REPLACEME
+DefaultTVChannel 3 REPLACEME
+Deinterlace 1 REPLACEME
+DeinterlaceFilter kerneldeint REPLACEME
+DisplayGroupDefaultView 0 REPLACEME
+DisplayGroupTitleSort 0 REPLACEME
+DisplayRecGroup Default REPLACEME
+DispRecGroupAsAllProg 0 REPLACEME
+DTSPassThru 0 REPLACEME
+DVDDeviceLocation /dev/dvd REPLACEME
+DVDOnInsertDVD 1 REPLACEME
+DVDRipLocation /data/media/tmp REPLACEME
+EjectCDAfterRipping 1 REPLACEME
+EnableMHEG 0 REPLACEME
+EnableXbox 0 REPLACEME
+EnableXbox 0 REPLACEME
+EncoderType ogg REPLACEME
+EndOfRecordingExitPrompt 1 REPLACEME
+EPGFillType 10 REPLACEME
+EPGScrollType 1 REPLACEME
+EPGShowCategoryColors 1 REPLACEME
+EPGShowCategoryText 1 REPLACEME
+EPGShowChannelIcon 1 REPLACEME
+EPGShowFavorites 0 REPLACEME
+ExactSeeking 0 REPLACEME
+FFRewReposTime 100 REPLACEME
+FFRewReverse 1 REPLACEME
+FilenameTemplate ARTIST/ALBUM/TRACK-TITLE REPLACEME
+GalleryDir /data/media/images REPLACEME
+GalleryImportDirs /mnt/cdrom:/mnt/camera REPLACEME
+GalleryMoviePlayerCmd mplayer -fs %s REPLACEME
+GalleryOverlayCaption 0 REPLACEME
+GalleryRecursiveSlideshow 1 REPLACEME
+GallerySortOrder 20 REPLACEME
+GalleryThumbnailLocation 1 REPLACEME
+GameAllTreeLevels system gamename REPLACEME
+GameFavTreeLevels gamename REPLACEME
+GeneratePreviewPixmaps 0 REPLACEME
+GuiHeight 0 REPLACEME
+GuiOffsetX 0 REPLACEME
+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
+IndividualMuteControl 0 REPLACEME
+IntelliLastPlayWeight 25 REPLACEME
+IntelliPlayCountWeight 25 REPLACEME
+IntelliRandomWeight 15 REPLACEME
+IntelliRatingWeight 35 REPLACEME
+ISO639Language0 eng REPLACEME
+ISO639Language1 eng REPLACEME
+JobAllowCommFlag 1 REPLACEME
+JobAllowTranscode 1 REPLACEME
+JobQueueCheckFrequency 60 REPLACEME
+JobQueueCPU 0 REPLACEME
+JobQueueMaxSimultaneousJobs 1 REPLACEME
+JobQueueWindowEnd 23:59 REPLACEME
+JobQueueWindowStart 00:00 REPLACEME
+KeyboardAccelerators 1 REPLACEME
+Language EN REPLACEME
+LastMusicPlaylistPush 0 REPLACEME
+LCDBacklightOn 1 REPLACEME
+LCDBigClock 0 REPLACEME
+LCDEnable 0 REPLACEME
+LCDHeartBeatOn 0 REPLACEME
+LCDKeyString ABCDEF REPLACEME
+LCDPopupTime 5 REPLACEME
+LCDShowChannel 1 REPLACEME
+LCDShowGeneric 1 REPLACEME
+LCDShowMenu 1 REPLACEME
+LCDShowMusic 1 REPLACEME
+LCDShowMusicItems ArtistTitle REPLACEME
+LCDShowRecStatus 0 REPLACEME
+LCDShowTime 1 REPLACEME
+LCDShowVolume 1 REPLACEME
+LircKeyPressedApp REPLACEME
+ListAsShuffled 0 REPLACEME
+LiveTVInAllPrograms 0 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanDays 14 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanEnabled 0 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanMax 30 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogCleanPeriod 14 REPLACEME
+LogMaxCount 100 REPLACEME
+LogMaxCount 100 REPLACEME
+LogPrintLevel 8 REPLACEME
+LogPrintLevel 8 REPLACEME
+LongChannelFormat <num> <name> REPLACEME
+MasterMixerVolume 70 REPLACEME
+MenuTheme STB-menu REPLACEME
+MixerControl PCM REPLACEME
+MixerDevice /dev/mixer REPLACEME
+MonitorDrives 0 REPLACEME
+MovieDataCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -D REPLACEME
+MovieListCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no REPLACEME
+MoviePosterCommandLine /usr/local/share/mythtv/mythvideo/scripts/imdb.pl -P REPLACEME
+Mp3UseVBR 0 REPLACEME
+MTDac3Flag 0 REPLACEME
+MTDConcurrentTranscodes 1 REPLACEME
+MTDLogFlag 0 REPLACEME
+MTDNiceLevel 20 REPLACEME
+MTDPort 2442 REPLACEME
+MTDRipSize 0 REPLACEME
+MTDxvidFlag 1 REPLACEME
+MusicAudioDevice default REPLACEME
+MusicLocation /data/media/audio REPLACEME
+MusicShowRatings 0 REPLACEME
+MythArchiveAlwaysUseMythTranscode 1 REPLACEME
+MythArchiveChapterMenuAR Video REPLACEME
+MythArchiveCopyRemoteFiles 1 REPLACEME
+MythArchiveDateFormat %a %b %d REPLACEME
+MythArchiveDvdauthorCmd dvdauthor REPLACEME
+MythArchiveDVDLocation /dev/dvd REPLACEME
+MythArchiveEncodeToAc3 1 REPLACEME
+MythArchiveFfmpegCmd ffmpeg REPLACEME
+MythArchiveFileFilter *.mpg *.mov *.avi *.mpeg *.nuv REPLACEME
+MythArchiveGrowisofsCmd growisofs REPLACEME
+MythArchiveMainMenuAR 16:9 REPLACEME
+MythArchiveMkisofsCmd mkisofs REPLACEME
+MythArchiveMpeg2encCmd mpeg2enc REPLACEME
+MythArchiveMplexCmd mplex REPLACEME
+MythArchivePng2yuvCmd png2yuv REPLACEME
+MythArchiveShareDir /usr/local/share/mythtv/mytharchive/ REPLACEME
+MythArchiveSpumuxCmd spumux REPLACEME
+MythArchiveTcrequantCmd tcrequant REPLACEME
+MythArchiveTempDir /data/media/tmp REPLACEME
+MythArchiveTimeFormat %I:%M %p REPLACEME
+MythArchiveUseFIFO 1 REPLACEME
+MythArchiveVideoFormat NTSC REPLACEME
+MythControlsVolume 1 REPLACEME
+mythdvd.DVDPlayerCommand Internal REPLACEME
+mythvideo.db_folder_view 1 REPLACEME
+mythvideo.ImageCacheSize 50 REPLACEME
+mythvideo.sort_ignores_case 1 REPLACEME
+NetworkControlEnabled 1 REPLACEME
+NetworkControlPort 6546 REPLACEME
+NonID3FileNameFormat GENRE/ARTIST/ALBUM/TRACK_TITLE REPLACEME
+NoPromptOnExit 0 REPLACEME
+NoWhitespace 0 REPLACEME
+OnlyImportNewMusic 0 REPLACEME
+OSDCC708CapitalsFont FreeMono.ttf REPLACEME
+OSDCC708CapitalsItalicFont FreeMono.ttf REPLACEME
+OSDCC708CasualFont FreeMono.ttf REPLACEME
+OSDCC708CasualItalicFont FreeMono.ttf REPLACEME
+OSDCC708CursiveFont FreeMono.ttf REPLACEME
+OSDCC708CursiveItalicFont FreeMono.ttf REPLACEME
+OSDCC708DefaultFontType MonoSerif REPLACEME
+OSDCC708MonoSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifFont FreeMono.ttf REPLACEME
+OSDCC708MonoSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSansSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifFont FreeMono.ttf REPLACEME
+OSDCC708PropSerifItalicFont FreeMono.ttf REPLACEME
+OSDCC708TextZoom 100 REPLACEME
+OSDCCFont FreeMono.ttf REPLACEME
+OSDFont FreeMono.ttf REPLACEME
+OSDGeneralTimeout 2 REPLACEME
+OSDNotifyTimeout 6 REPLACEME
+OSDProgramInfoTimeout 3 REPLACEME
+OSDTheme Gray-OSD REPLACEME
+OSDThemeFontSizeType default REPLACEME
+ParanoiaLevel Full REPLACEME
+PassThruOutputDevice Default REPLACEME
+PCMMixerVolume 70 REPLACEME
+PersistentBrowseMode 1 REPLACEME
+PIPLocation 0 REPLACEME
+PlaybackBoxStartInTitle 1 REPLACEME
+PlaybackExitPrompt 2 REPLACEME
+PlaybackPreview 1 REPLACEME
+PlaybackPreviewLowCPU 1 REPLACEME
+PlayBoxEpisodeSort Date REPLACEME
+PlayBoxOrdering 1 REPLACEME
+PlayBoxShading 0 REPLACEME
+PlayBoxTransparency 1 REPLACEME
+PlayMode none REPLACEME
+PostCDRipScript REPLACEME
+PreferredMPEG2Decoder ffmpeg REPLACEME
+PreviewFromBookmark 1 REPLACEME
+PVR350EPGAlphaValue 164 REPLACEME
+PVR350InternalAudioOnly 0 REPLACEME
+PVR350OutputEnable 0 REPLACEME
+PVR350VideoDev /dev/video16 REPLACEME
+QtFontBig 25 REPLACEME
+QtFontMedium 16 REPLACEME
+QtFontSmall 12 REPLACEME
+QueryInitialFilter 0 REPLACEME
+RandomTheme 0 REPLACEME
+RealtimePriority 1 REPLACEME
+RecordFilePrefix /data/media/video/recordings REPLACEME
+RememberRecGroup 1 REPLACEME
+RepeatMode all REPLACEME
+RunFrontendInWindow 0 REPLACEME
+SelChangeRecThreshold 16 REPLACEME
+SelectChangesChannel 1 REPLACEME
+ServiceMythWEB 0 REPLACEME
+ServiceNFS 0 REPLACEME
+ServiceSamba 0 REPLACEME
+SetupPinCodeRequired 0 REPLACEME
+ShortDateFormat M/d REPLACEME
+ShowGroupInfo 0 REPLACEME
+ShowWholeTree 1 REPLACEME
+SlideshowBackground REPLACEME
+SlideshowDelay 5 REPLACEME
+SlideshowOpenGLTransition none REPLACEME
+SlideshowOpenGLTransitionLength 2000 REPLACEME
+SlideshowTransition none REPLACEME
+SmartChannelChange 0 REPLACEME
+SmartForward 0 REPLACEME
+StickyKeys 1 REPLACEME
+Style REPLACEME
+SubTitleCommand -sid %s REPLACEME
+TagSeparator - REPLACEME
+Theme basic-blue REPLACEME
+ThemeFontSizeType default REPLACEME
+ThemePainter qt REPLACEME
+TimeFormat h:mm AP REPLACEME
+timePerPage 4 REPLACEME
+TitlePlayCommand mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c REPLACEME
+TranscodeCommand transcode REPLACEME
+TreeLevels splitartist artist album title REPLACEME
+TVVidModeForceAspect 0.0 REPLACEME
+TVVidModeForceAspect0 0.0 REPLACEME
+TVVidModeForceAspect1 0.0 REPLACEME
+TVVidModeForceAspect2 0.0 REPLACEME
+TVVidModeRefreshRate 0 REPLACEME
+TVVidModeRefreshRate0 0 REPLACEME
+TVVidModeRefreshRate1 0 REPLACEME
+TVVidModeRefreshRate2 0 REPLACEME
+TVVidModeResolution 640x480 REPLACEME
+TVVidModeResolution0 640x480 REPLACEME
+TVVidModeResolution1 640x480 REPLACEME
+TVVidModeResolution2 640x480 REPLACEME
+UDPNotifyPort 6948 REPLACEME
+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
+UseVirtualKeyboard 1 REPLACEME
+VCDDeviceLocation /dev/cdrom REPLACEME
+VCDPlayerCommand mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv REPLACEME
+VertScanPercentage 0 REPLACEME
+VideoAggressivePC 0 REPLACEME
+VideoArtworkDir /data/media/images/posters REPLACEME
+VideoBrowserNoDB 0 REPLACEME
+VideoDefaultParentalLevel 4 REPLACEME
+VideoGalleryAspectRatio 1 REPLACEME
+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
+VideoStartupDir /data/media/video/movies REPLACEME
+VideoTreeLoadMetaData 1 REPLACEME
+VideoTreeNoDB 0 REPLACEME
+VidModeHeight0 0 REPLACEME
+VidModeHeight1 0 REPLACEME
+VidModeHeight2 0 REPLACEME
+VidModeWidth0 0 REPLACEME
+VidModeWidth1 0 REPLACEME
+VidModeWidth2 0 REPLACEME
+VisualCycleOnSongChange 0 REPLACEME
+VisualMode Random REPLACEME
+VisualModeDelay 0 REPLACEME
+VisualScaleHeight 1 REPLACEME
+VisualScaleWidth 1 REPLACEME
+WatchTVGuide 0 REPLACEME
+WebBrowserCommand /usr/local/bin/mythbrowser REPLACEME
+WebBrowserHideScrollbars 0 REPLACEME
+WebBrowserScrollMode 1 REPLACEME
+WebBrowserScrollSpeed 4 REPLACEME
+WebBrowserZoomLevel 20 REPLACEME
+XScanDisplacement 0 REPLACEME
+YScanDisplacement 0 REPLACEME
diff --git a/abs/core/live-installer/templates/sources/mv-core b/abs/core/live-installer/templates/sources/mv-core
new file mode 100644
index 0000000..f9f6c97
--- /dev/null
+++ b/abs/core/live-installer/templates/sources/mv-core
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-core
diff --git a/abs/core/live-installer/templates/sources/mv-core-testing b/abs/core/live-installer/templates/sources/mv-core-testing
new file mode 100644
index 0000000..1fce6ea
--- /dev/null
+++ b/abs/core/live-installer/templates/sources/mv-core-testing
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-core-testing
diff --git a/abs/core/live-installer/templates/sources/mv-extra b/abs/core/live-installer/templates/sources/mv-extra
new file mode 100644
index 0000000..e13640f
--- /dev/null
+++ b/abs/core/live-installer/templates/sources/mv-extra
@@ -0,0 +1,2 @@
+#Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-extra
diff --git a/abs/core/live-installer/templates/sources/mv-extra-testing b/abs/core/live-installer/templates/sources/mv-extra-testing
new file mode 100644
index 0000000..c176add
--- /dev/null
+++ b/abs/core/live-installer/templates/sources/mv-extra-testing
@@ -0,0 +1,2 @@
+##Begin official list of mirrors
+Server = http://www.mythvantage.com/repo/mv-extra-testing
diff --git a/abs/core/live-installer/templates/sources/svc_pkg b/abs/core/live-installer/templates/sources/svc_pkg
new file mode 100644
index 0000000..c1efdcc
--- /dev/null
+++ b/abs/core/live-installer/templates/sources/svc_pkg
@@ -0,0 +1,3 @@
+[svc_pkg]
+Server = http://REPLACEME/repo/mirror/svc_pkg/os/i686
+
diff --git a/abs/core/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf b/abs/core/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf
new file mode 100755
index 0000000..51db997
--- /dev/null
+++ b/abs/core/live-installer/templates/transmit/Time_Warner_SA3250/lircd.conf
@@ -0,0 +1,413 @@
+#
+
+begin remote
+
+ name Time_Warner_SA3250
+ flags CONST_LENGTH|RAW_CODES
+ eps 30
+ aeps 100
+
+ ptrail 0
+ repeat 0 0
+ gap 100240
+ frequency 57600
+
+ begin raw_codes
+
+ name MUTE
+ 972 802 971 802 1887 778
+ 971 798 971 798 972 798
+ 971 798 972 798 971 1677
+ 972 802 1887 1656 992
+
+ name POWER
+ 3450 3229 894 2468 891 2468
+ 893 778 892 2468 891 2469
+ 917 2444 891 2468 892 2469
+ 891 779 892 778 918 752
+ 917 754 917 752 892 2471
+ 889 779 892 779 892 777
+ 892 779 892 777 868 2492
+ 892 2469 891 2470 890
+
+ name GUIDE
+ 3397 3285 890 2470 840 2519
+ 916 755 891 2470 839 2520
+ 891 780 891 2474 860 2495
+ 892 778 917 754 890 780
+ 891 781 864 804 917 2443
+ 865 805 891 779 866 2495
+ 864 805 892 779 891 2469
+ 865 2495 891 2469 866
+
+
+ name INFO
+ 3449 3231 918 2441 920 2440
+ 920 750 947 2414 920 2440
+ 920 750 894 777 919 750
+ 947 2413 921 750 919 750
+ 920 751 919 752 918 2441
+ 921 749 895 776 919 2441
+ 920 2440 920 2441 920 749
+ 921 2439 921 2440 921
+
+ name UP
+ 3396 3285 915 2444 919 2442
+ 918 752 916 2444 919 2441
+ 919 751 916 2445 919 751
+ 890 780 916 753 917 754
+ 942 729 889 780 916 2445
+ 919 751 915 756 914 2448
+ 916 752 916 2444 918 2442
+ 919 2441 918 2443 918
+
+ name DOWN
+ 3421 3261 890 2470 918 2442
+ 919 751 916 2446 917 2441
+ 919 2442 918 2442 918 752
+ 916 2444 919 751 890 780
+ 916 755 915 755 915 2445
+ 919 753 914 755 889 781
+ 889 781 916 2444 919 752
+ 889 2471 919 2441 918
+
+ name LEFT
+ 3427 3255 918 2441 924 2437
+ 920 750 918 2442 920 2441
+ 919 2440 921 2439 921 750
+ 919 751 944 726 919 752
+ 917 753 918 751 944 2417
+ 920 750 893 777 919 751
+ 919 752 918 2441 921 2440
+ 920 2440 920 2440 921
+
+ name RIGHT
+ 3424 3258 892 2466 921 2439
+ 896 774 920 2441 920 2440
+ 920 750 920 751 945 2414
+ 921 750 919 751 920 750
+ 919 752 919 751 919 2440
+ 921 750 918 752 918 2442
+ 920 2440 921 749 918 2443
+ 920 2440 920 2441 919
+
+ name SELECT
+ 3424 3257 944 2416 919 2442
+ 919 750 918 2442 920 2441
+ 919 751 943 727 918 2442
+ 920 2440 920 752 916 752
+ 969 702 917 753 892 2468
+ 919 751 892 778 918 2442
+ 924 2436 921 750 917 753
+ 918 2443 919 2441 919
+
+ name SETTINGS
+ 3402 3278 871 2491 921 2438
+ 921 749 922 2440 919 2441
+ 919 2440 921 749 921 750
+ 895 2465 920 2440 921 2440
+ 920 749 896 775 921 2439
+ 920 749 923 748 895 775
+ 922 2439 920 2440 920 749
+ 897 774 896 774 921
+
+ name EXIT
+ 3400 3279 896 2464 921 2439
+ 921 750 895 2465 921 2439
+ 921 749 898 772 896 2465
+ 920 2440 920 750 920 2441
+ 920 749 896 774 870 2491
+ 921 749 921 749 895 2465
+ 921 2440 920 749 922 748
+ 897 2464 920 750 896
+
+ name PGUP
+ 3425 3255 920 2440 920 2440
+ 921 749 895 2466 920 2440
+ 920 749 920 2441 896 2464
+ 921 749 919 2445 917 2440
+ 920 750 920 750 920 2441
+ 921 748 921 749 920 2440
+ 921 750 919 752 919 2440
+ 921 749 921 750 919
+
+ name PGDN
+ 3400 3281 921 2438 921 2441
+ 920 749 895 2465 896 2465
+ 920 2440 920 2440 920 2440
+ 921 749 896 2465 895 2465
+ 920 750 895 775 920 2440
+ 921 749 921 750 895 775
+ 896 774 896 774 921 2439
+ 921 749 921 751 894
+
+ name VOLUP
+ 995 778 1886 779 994 775
+ 995 777 993 774 996 774
+ 995 775 995 1654 1885 778
+ 995 775 995 774 995
+
+ name VOLDN
+ 996 778 971 802 1862 803
+ 970 799 996 774 995 774
+ 996 774 995 1654 1886 778
+ 996 773 971 1678 991
+
+ name CHUP
+ 3421 3259 916 2444 918 2443
+ 918 751 917 2444 919 2441
+ 919 2441 919 751 916 2444
+ 919 2441 919 2443 918 751
+ 941 729 916 755 917 2442
+ 919 752 916 754 891 778
+ 918 2444 918 751 916 754
+ 917 753 916 2445 919
+
+ name CHDN
+ 3421 3260 915 2445 918 2442
+ 919 751 891 2469 919 2441
+ 927 745 915 2444 919 2441
+ 919 2441 919 2442 918 752
+ 915 755 890 780 917 2443
+ 919 752 916 754 915 2445
+ 919 751 915 755 890 781
+ 914 756 916 2445 917
+
+ name A
+ 3425 3258 916 2442 920 2441
+ 919 751 918 2442 919 2441
+ 920 2440 920 2441 919 2441
+ 919 2441 920 750 917 2443
+ 920 751 917 752 919 2442
+ 920 750 918 753 917 753
+ 917 753 942 728 917 753
+ 918 2442 920 750 942
+
+ name B
+ 3398 3283 916 2443 892 2470
+ 892 778 892 2468 891 2475
+ 886 779 916 754 892 777
+ 892 778 919 2442 891 2468
+ 918 753 892 778 891 2469
+ 892 778 892 778 918 2443
+ 891 2469 892 2467 893 2469
+ 891 778 918 753 892
+
+ name C
+ 3396 3283 891 2469 892 2468
+ 892 778 917 2444 892 2468
+ 892 2469 891 778 892 779
+ 893 777 892 2468 892 2468
+ 918 752 893 777 892 2469
+ 892 778 892 778 867 802
+ 918 2444 917 2442 868 2492
+ 893 778 892 779 916
+
+ name 1
+ 3424 3257 890 2470 865 2495
+ 891 780 892 2468 865 2495
+ 892 777 891 780 892 779
+ 890 780 916 2444 865 805
+ 891 779 917 753 916 2445
+ 865 805 916 754 892 2469
+ 865 2494 916 2445 865 2495
+ 891 779 917 2443 866
+
+ name 2
+ 3422 3258 916 2444 865 2496
+ 889 782 915 2444 865 2495
+ 917 2444 839 830 891 780
+ 915 755 890 2470 864 806
+ 917 753 891 780 866 2495
+ 864 805 891 779 892 779
+ 865 2494 865 2496 891 2469
+ 865 805 891 2469 865
+
+ name 3
+ 3397 3284 916 2443 892 2468
+ 892 779 893 2467 892 2468
+ 917 753 892 2469 891 778
+ 893 778 891 2469 892 778
+ 918 753 890 779 893 2468
+ 891 779 893 778 891 2469
+ 892 777 893 2468 891 2468
+ 917 754 943 2417 892
+
+ name 4
+ 3421 3261 890 2470 839 2520
+ 917 753 891 2470 865 2495
+ 917 2443 865 2495 890 781
+ 891 778 891 2470 865 804
+ 895 776 892 779 891 2468
+ 866 805 917 753 943 727
+ 866 805 889 2471 865 2494
+ 892 780 916 2444 865
+
+ name 5
+ 3396 3282 920 2441 892 2467
+ 894 778 891 2468 892 2469
+ 891 780 866 802 893 2470
+ 890 779 918 2443 891 777
+ 892 779 918 752 892 2468
+ 892 779 918 752 918 2443
+ 891 2469 891 779 891 2469
+ 892 778 891 2468 893
+
+ name 6
+ 3396 3284 918 2442 866 2494
+ 892 778 917 2444 866 2494
+ 917 2444 865 804 893 2468
+ 890 780 916 2445 890 779
+ 892 779 891 778 918 2443
+ 891 778 892 779 892 779
+ 891 2468 892 778 919 2444
+ 889 778 893 2468 891
+
+ name 7
+ 3398 3282 893 2467 892 2468
+ 893 779 891 2469 891 2468
+ 919 752 892 2467 892 2469
+ 891 779 892 2468 892 777
+ 893 778 918 752 892 2468
+ 893 779 916 753 918 2442
+ 892 779 891 778 893 2468
+ 892 778 893 2467 892
+
+ name 8
+ 3448 3232 892 2468 866 2494
+ 892 779 892 2467 867 2494
+ 891 2469 866 2495 891 2469
+ 865 805 968 2394 864 804
+ 918 753 891 779 892 2468
+ 866 804 917 754 891 780
+ 916 752 917 754 892 2469
+ 865 804 893 2468 890
+
+ name 9
+ 3422 3258 891 2469 839 2521
+ 891 780 892 2468 824 2536
+ 916 754 916 755 891 779
+ 866 2494 839 2522 891 778
+ 892 778 890 781 915 2448
+ 837 831 891 779 890 2470
+ 837 2523 942 2418 838 832
+ 892 778 890 2471 839
+
+ name 0
+ 3398 3284 891 2469 890 2469
+ 893 779 891 2468 892 2468
+ 892 2468 892 778 892 779
+ 891 2469 892 2468 893 778
+ 892 777 893 777 893 2469
+ 891 778 892 779 868 802
+ 917 2443 892 2469 890 779
+ 891 779 892 2468 893
+
+ name LAST
+ 3422 3258 891 2471 916 2443
+ 891 780 891 2469 272 3088
+ 865 805 916 2445 308 3052
+ 890 2469 892 779 915 756
+ 889 781 889 780 890 2471
+ 890 779 889 781 891 2471
+ 272 1397 890 779 891 781
+ 890 2469 448 2912 917
+
+ name FAV
+ 3423 3257 918 2442 944 2417
+ 917 753 892 2469 890 2471
+ 324 3036 890 2469 379 289
+ 167 2525 891 2470 379 2981
+ 890 780 378 270 242 781
+ 866 806 889 2469 786 884
+ 891 779 891 779 892 779
+ 916 754 890 779 892 778
+ 891 2470 839
+
+ name REW
+ 3420 3258 916 2445 326 3033
+ 891 780 916 2443 891 2469
+ 916 2445 838 831 918 754
+ 890 2471 837 832 916 2444
+ 838 832 891 779 916 2445
+ 838 831 892 779 890 780
+ 892 2469 839 2520 891 780
+ 915 2444 836 836 890
+
+ name PLAY
+ 3448 3233 916 2444 891 2469
+ 917 753 892 2468 918 2443
+ 941 2420 891 2468 917 754
+ 915 755 914 2446 918 2443
+ 916 754 916 753 945 2416
+ 943 727 941 729 918 752
+ 917 753 919 2442 916 2444
+ 915 755 943 728 916
+
+ name FF
+ 3420 3259 917 2442 946 2415
+ 918 752 916 2445 918 2441
+ 943 728 917 753 942 728
+ 892 2470 864 806 889 2471
+ 865 805 918 752 916 2443
+ 944 726 892 779 891 2470
+ 891 2469 915 2445 917 753
+ 890 2471 222 1447 891
+
+ name PAUSE
+ 3421 3259 891 2470 787 2573
+ 890 780 916 2444 840 2520
+ 892 2468 864 806 917 2444
+ 839 831 890 780 891 779
+ 891 780 891 779 889 2471
+ 839 831 916 755 915 754
+ 892 2469 839 830 917 2444
+ 840 2521 891 2469 840
+
+ name STOP
+ 3398 3284 889 2471 325 3036
+ 891 779 890 2470 395 290
+ 140 2535 889 781 890 781
+ 889 2470 274 1397 891 2470
+ 272 3087 917 754 890 780
+ 889 2472 293 1377 890 779
+ 916 2444 448 2913 916 754
+ 866 2495 325 1344 891 779
+ 915
+
+ name REC
+ 3421 3258 917 2444 916 2444
+ 942 729 942 2420 889 2469
+ 992 2367 942 730 891 2468
+ 917 754 916 2443 892 2470
+ 892 777 916 754 892 2467
+ 943 730 916 754 891 779
+ 917 2442 917 754 943 2417
+ 918 753 915 754 892
+
+ name BYPASS
+ 3450 3231 891 2470 890 2470
+ 917 753 916 2447 913 2445
+ 273 3088 889 780 890 2470
+ 891 2469 916 755 890 780
+ 942 727 918 752 916 2444
+ 890 782 916 754 865 805
+ 891 2469 891 780 889 781
+ 891 2468 259 3102 866
+
+ name TV/VCR
+ 19945 3915 612 1873 560 1926
+ 560 1925 561 931 560 931
+ 587 905 559 931 563 931
+ 557 932 561 1925 585 908
+ 583 1901 559 931 586 905
+ 585 907 610 1875 561 1924
+ 561 1926 559 1926 535 1951
+ 559 1925 586 907 585 1899
+ 560 931 1048 7898 3707 3862
+ 587 1899 586 1899 586 1900
+ 559 932 586 908 323
+
+ end raw_codes
+
+ end remote
diff --git a/abs/core/live-installer/templates/xine.config.template b/abs/core/live-installer/templates/xine.config.template
new file mode 100644
index 0000000..966487f
--- /dev/null
+++ b/abs/core/live-installer/templates/xine.config.template
@@ -0,0 +1,754 @@
+#
+# xine config file
+#
+.version:2
+
+# Entries which are still set to their default values are commented out.
+# Remove the '#' at the beginning of the line, if you want to change them.
+
+# Enable deinterlacing by default
+# bool, default: 0
+#gui.deinterlace_by_default:0
+
+# Configuration experience level
+# { Beginner Advanced Expert Master of the known universe }, default: 0
+gui.experience_level:Expert
+
+# Enable OSD support
+# bool, default: 1
+#gui.osd_enabled:1
+
+# Dismiss OSD time (s)
+# numeric, default: 3
+#gui.osd_timeout:3
+
+# Ask user for playback with unsupported codec
+# bool, default: 0
+#gui.play_anyway:0
+
+# Automatically reload old playlist
+# bool, default: 0
+#gui.playlist_auto_reload:0
+
+# Audio visualization plugin
+# { oscope fftscope fftgraph goom }, default: 0
+gui.post_audio_plugin:fftgraph
+
+# gui skin theme
+# { Antares Centori KeramicRH8 cloudy xinetic }, default: 4
+gui.skin:KeramicRH8
+
+# Change xine's behavior for unexperienced user
+# bool, default: 1
+#gui.smart_mode:1
+
+# Snapshot location
+# string, default: /home/jams
+#gui.snapshotdir:/home/jams
+
+# Display splash screen
+# bool, default: 1
+gui.splash:0
+
+# Subtitle autoloading
+# bool, default: 1
+#gui.subtitle_autoload:1
+
+# Visual animation style
+# { None Post Plugin Stream Animation }, default: 1
+#gui.visual_anim:Post Plugin
+
+# Windows stacking (more)
+# bool, default: 0
+#gui.always_layer_above:0
+
+# Audio mixer control method
+# { Sound card Software }, default: 0
+#gui.audio_mixer_method:Sound card
+
+# Visiblility behavior of panel
+# bool, default: 0
+#gui.auto_panel_visibility:0
+
+# Visibility behavior of output window
+# bool, default: 0
+#gui.auto_video_output_visibility:0
+
+# Deinterlace plugin.
+# string, default: tvtime:method=LinearBlend,cheap_mode=1,pulldown=0,use_progressive_frame_flag=1
+#gui.deinterlace_plugin:tvtime:method=LinearBlend,cheap_mode=1,pulldown=0,use_progressive_frame_flag=1
+
+# Event sender behavior
+# bool, default: 1
+#gui.eventer_sticky:1
+
+# Windows stacking
+# bool, default: 0
+#gui.layer_above:0
+
+# Use unscaled OSD
+# bool, default: 1
+gui.osd_use_unscaled:0
+
+# Screensaver reset interval (s)
+# numeric, default: 10
+#gui.screensaver_timeout:10
+
+# Menu shortcut style
+# { Windows style Emacs style }, default: 0
+#gui.shortcut_style:Windows style
+
+# Stream information
+# bool, default: 0
+#gui.sinfo_auto_update:0
+
+# Skin Server Url
+# string, default: http://xine.sourceforge.net/skins/skins.slx
+#gui.skin_server_url:http://xine.sourceforge.net/skins/skins.slx
+
+# Chapter hopping
+# bool, default: 1
+#gui.skip_by_chapter:1
+
+# New stream sizes resize output window
+# bool, default: 1
+#gui.stream_resize_window:1
+
+# Tips timeout (ms)
+# numeric, default: 5000
+#gui.tips_timeout:5000
+
+# gui tips visibility
+# bool, default: 1
+#gui.tips_visible:1
+
+# Name of video display
+# string, default:
+#gui.video_display:
+
+# Synchronized X protocol (debug)
+# bool, default: 0
+#gui.xsynchronize:0
+
+# Double size for small streams (require stream_resize_window)
+# bool, default: 0
+#gui.zoom_small_stream:0
+
+# Logo mrl
+# string, default: file:/usr/share/xine/skins/xine-ui_logo.mpv
+#gui.logo_mrl:file:/usr/share/xine/skins/xine-ui_logo.mpv
+
+# use XVidModeExtension when switching to fullscreen
+# bool, default: 0
+#gui.use_xvidext:0
+
+# height for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_height:-8192
+
+# width for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_width:-8192
+
+# x coordinate for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_x:-8192
+
+# y coordinate for xinerama fullscreen (-8192 = autodetect)
+# numeric, default: -8192
+#gui.xinerama_fullscreen_y:-8192
+
+# Screens to use in order to do a very fullscreen in xinerama mode. (example 0 2 3)
+# string, default: 0 1
+#gui.xinerama_use_screens:0 1
+
+# Amplification level
+# [0..200], default: 100
+#gui.amp_level:100
+
+# gui panel visibility
+# bool, default: 1
+gui.panel_visible:0
+
+# numeric, default: 200
+gui.panel_x:21
+
+# numeric, default: 100
+gui.panel_y:1050
+
+gui.control_x:186
+
+gui.control_y:46
+
+gui.dropped_frames_warning:0
+
+gui.eventer_x:1041
+
+gui.eventer_y:781
+
+gui.mrl_browser_x:23
+
+gui.mrl_browser_y:9
+
+gui.setup_x:717
+
+gui.setup_y:227
+
+gui.viewlog_x:200
+
+gui.viewlog_y:210
+
+# color specification yuv-opacity
+# string, default: 8080c0-f
+#gui.osdmenu.color_focused_button:8080c0-f
+
+# color specification yuv-opacity
+# string, default: 808080-f
+#gui.osdmenu.color_focused_slider:808080-f
+
+# color specification yuv-opacity
+# string, default: ff8080-f
+#gui.osdmenu.color_focused_slider_knob:ff8080-f
+
+# color specification yuv-opacity
+# string, default: 808080-f
+#gui.osdmenu.color_focused_text_border:808080-f
+
+# color specification yuv-opacity
+# string, default: ff8080-f
+#gui.osdmenu.color_focused_text_foreground:ff8080-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_label_border:0080c0-f
+
+# color specification yuv-opacity
+# string, default: c08080-f
+#gui.osdmenu.color_label_foreground:c08080-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_label_window:0080c0-f
+
+# color specification yuv-opacity
+# string, default: 008000-f
+#gui.osdmenu.color_slider:008000-f
+
+# color specification yuv-opacity
+# string, default: ffff00-f
+#gui.osdmenu.color_slider_knob:ffff00-f
+
+# color specification yuv-opacity
+# string, default: 008000-f
+#gui.osdmenu.color_text_border:008000-f
+
+# color specification yuv-opacity
+# string, default: ffff00-f
+#gui.osdmenu.color_text_foreground:ffff00-f
+
+# color specification yuv-opacity
+# string, default: 0080c0-f
+#gui.osdmenu.color_text_window:0080c0-f
+
+# directory a media in dvd device will be mounted
+# string, default: /dvd
+#gui.osdmenu.dvd_mountpoint:/dvd
+
+# palette (foreground-border-background) to use for subtitles and OSD
+# { white-black-transparent white-none-transparent white-none-translucid yellow-black-transparent }, default: 0
+#ui.osd.text_palette:white-black-transparent
+
+# audio driver to use
+# { auto null alsa oss esd file none }, default: 0
+audio.driver:oss
+
+# a/v sync method to use by OSS
+# { auto getodelay getoptr softsync probebuffer }, default: 0
+#audio.oss_sync_method:auto
+
+# use A/52 dynamic range compression
+# bool, default: 0
+#audio.a52.dynamic_range:0
+
+# downmix audio to 2 channel surround stereo
+# bool, default: 0
+#audio.a52.surround_downmix:0
+
+# A/52 volume
+# [0..200], default: 100
+#audio.a52.level:100
+
+# OSS audio device name
+# { auto /dev/dsp /dev/sound/dsp }, default: 0
+#audio.device.oss_device_name:auto
+
+# OSS audio device number, -1 for none
+# numeric, default: -1
+#audio.device.oss_device_number:-1
+
+# OSS audio mixer number, -1 for none
+# numeric, default: -1
+#audio.device.oss_mixer_number:-1
+
+audio.device.alsa_front_device:default
+
+# speaker arrangement
+# { Mono 1.0 Stereo 2.0 Headphones 2.0 Stereo 2.1 Surround 3.0 Surround 4.0 Surround 4.1 Surround 5.0 Surround 5.1 Surround 6.0 Surround 6.1 Surround 7.1 Pass Through }, default: 1
+#audio.output.speaker_arrangement:Stereo 2.0
+
+# offset for digital passthrough
+# numeric, default: 0
+#audio.synchronization.passthrough_offset:0
+
+# play audio even on slow/fast speeds
+# bool, default: 0
+#audio.synchronization.slow_fast_audio:0
+
+# method to sync audio and video
+# { metronom feedback resample }, default: 0
+#audio.synchronization.av_sync_method:metronom feedback
+
+# always resample to this rate (0 to disable)
+# numeric, default: 0
+#audio.synchronization.force_rate:0
+
+# enable resampling
+# { auto off on }, default: 0
+#audio.synchronization.resample_mode:auto
+
+# startup audio volume
+# [0..100], default: 50
+#audio.volume.mixer_volume:50
+
+# restore volume level at startup
+# bool, default: 0
+#audio.volume.remember_volume:0
+
+# video driver to use
+# { auto aadxr3 dxr3 xv opengl SyncFB xshm none xxmc sdl vidixfb vidix fb xvmc }, default: 0
+#video.driver:auto
+
+# pitch alignment workaround
+# bool, default: 0
+#video.device.xv_pitch_alignment:0
+
+# disable exact alpha blending of overlays
+# bool, default: 0
+#video.output.disable_exact_alphablend:0
+
+# disable all video scaling
+# bool, default: 0
+#video.output.disable_scaling:0
+
+# horizontal image position in the output window
+# [0..100], default: 50
+#video.output.horizontal_position:50
+
+# vertical image position in the output window
+# [0..100], default: 50
+#video.output.vertical_position:50
+
+# deinterlace method (deprecated)
+# { none bob weave greedy onefield onefield_xv linearblend }, default: 4
+video.output.xv_deinterlace_method:linearblend
+
+# MPEG-4 postprocessing quality
+# [0..6], default: 3
+#video.processing.ffmpeg_pp_quality:3
+
+# DXR3 device number
+# numeric, default: 0
+#dxr3.device_number:0
+
+# swap odd and even lines
+# bool, default: 0
+#dxr3.encoding.swap_fields:0
+
+# add black bars to correct aspect ratio
+# bool, default: 1
+#dxr3.encoding.add_bars:1
+
+# use smooth play mode for mpeg encoder playback
+# bool, default: 1
+#dxr3.encoding.alt_play_mode:1
+
+# device used for CD audio
+# string, default: /dev/cdrom
+#media.audio_cd.device:/dev/cdrom
+
+# slow down disc drive to this speed factor
+# numeric, default: 4
+#media.audio_cd.drive_slowdown:4
+
+# query CDDB
+# bool, default: 1
+#media.audio_cd.use_cddb:1
+
+# CDDB cache directory
+# string, default: /home/jams/.xine/cddbcache
+#media.audio_cd.cddb_cachedir:/home/jams/.xine/cddbcache
+
+# CDDB server port
+# numeric, default: 8880
+#media.audio_cd.cddb_port:8880
+
+# CDDB server name
+# string, default: freedb.freedb.org
+#media.audio_cd.cddb_server:freedb.freedb.org
+
+# directory for saving streams
+# string, default:
+#media.capture.save_dir:
+
+# Number of dvb card to use.
+# numeric, default: 0
+#media.dvb.adapter:0
+
+# Remember last DVB channel watched
+# bool, default: 1
+#media.dvb.remember_channel:1
+
+# Last DVB channel viewed
+# numeric, default: -1
+#media.dvb.last_channel:-1
+
+# default language for DVD playback
+# string, default: en
+#media.dvd.language:en
+
+# region the DVD player claims to be in (1 to 8)
+# numeric, default: 1
+#media.dvd.region:1
+
+# device used for DVD playback
+# string, default: /dev/dvd
+#media.dvd.device:/dev/dvd
+
+# raw device set up for DVD access
+# string, default: /dev/rdvd
+#media.dvd.raw_device:/dev/rdvd
+
+# read-ahead caching
+# bool, default: 1
+#media.dvd.readahead:1
+
+# CSS decryption method
+# { key disc title }, default: 0
+#media.dvd.css_decryption_method:key
+
+# play mode when title/chapter is given
+# { entire dvd one chapter }, default: 0
+#media.dvd.play_single_chapter:entire dvd
+
+# unit for seeking
+# { seek in program chain seek in program }, default: 0
+#media.dvd.seek_behaviour:seek in program chain
+
+# unit for the skip action
+# { skip program skip part skip title }, default: 0
+#media.dvd.skip_behaviour:skip program
+
+# path to the title key cache
+# string, default: /home/jams/.dvdcss/
+#media.dvd.css_cache_path:/home/jams/.dvdcss/
+
+# file browsing start location
+# string, default: /home/jams
+#media.files.origin_path:/home/jams
+
+# list hidden files
+# bool, default: 0
+#media.files.show_hidden_files:0
+
+# network bandwidth
+# { 14.4 Kbps (Modem) 19.2 Kbps (Modem) 28.8 Kbps (Modem) 33.6 Kbps (Modem) 34.4 Kbps (Modem) 57.6 Kbps (Modem) 115.2 Kbps (ISDN) 262.2 Kbps (Cable/DSL) 393.2 Kbps (Cable/DSL) 524.3 Kbps (Cable/DSL) 1.5 Mbps (T1) 10.5 Mbps (LAN) }, default: 10
+#media.network.bandwidth:1.5 Mbps (T1)
+
+# Timeout for network stream reading (in seconds)
+# numeric, default: 30
+#media.network.timeout:30
+
+# Domains for which to ignore the HTTP proxy
+# string, default:
+#media.network.http_no_proxy:
+
+# HTTP proxy host
+# string, default:
+#media.network.http_proxy_host:
+
+# HTTP proxy password
+# string, default:
+#media.network.http_proxy_password:
+
+# HTTP proxy port
+# numeric, default: 80
+#media.network.http_proxy_port:80
+
+# HTTP proxy username
+# string, default:
+#media.network.http_proxy_user:
+
+# MMS protocol
+# { auto TCP HTTP }, default: 0
+#media.network.mms_protocol:auto
+
+# automatically advance VCD track/entry
+# bool, default: 1
+#media.vcd.autoadvance:1
+
+# VCD default type to use on autoplay
+# { MPEG track entry segment playback-control item }, default: 3
+#media.vcd.autoplay:playback-control item
+
+# CD-ROM drive used for VCD when none given
+# string, default:
+#media.vcd.device:
+
+# VCD position slider range
+# { auto track entry }, default: 0
+#media.vcd.length_reporting:auto
+
+# show 'rejected' VCD LIDs
+# bool, default: 0
+#media.vcd.show_rejected:0
+
+# VCD format string for stream comment field
+# string, default: %P - Track %T
+#media.vcd.comment_format:%P - Track %T
+
+# VCD debug flag mask
+# numeric, default: 0
+#media.vcd.debug:0
+
+# VCD format string for display banner
+# string, default: %F - %I %N%L%S, disk %c of %C - %v %A
+#media.vcd.title_format:%F - %I %N%L%S, disk %c of %C - %v %A
+
+# v4l radio device
+# string, default: /dev/v4l/radio0
+#media.video4linux.radio_device:/dev/v4l/radio0
+
+# v4l video device
+# string, default: /dev/v4l/video0
+#media.video4linux.video_device:/dev/v4l/video0
+
+# device used for WinTV-PVR 250/350 (pvr plugin)
+# string, default: /dev/video0
+#media.wintv_pvr.device:/dev/video0
+
+# path to RealPlayer codecs
+# string, default: /usr/lib/win32
+#decoder.external.real_codecs_path:/usr/lib/win32
+
+# path to Win32 codecs
+# string, default: /usr/lib/win32
+#decoder.external.win32_codecs_path:/usr/lib/win32
+
+# subtitle size
+# { tiny small normal large very large huge }, default: 1
+#subtitles.separate.subtitle_size:small
+
+# subtitle vertical offset
+# numeric, default: 0
+#subtitles.separate.vertical_offset:0
+
+# font for subtitles
+# string, default: sans
+#subtitles.separate.font:sans
+
+# encoding of the subtitles
+# string, default: iso-8859-1
+#subtitles.separate.src_encoding:iso-8859-1
+
+# use unscaled OSD if possible
+# bool, default: 1
+#subtitles.separate.use_unscaled_osd:1
+
+# default duration of subtitle display in seconds
+# numeric, default: 4
+#subtitles.separate.timeout:4
+
+# frames per second to generate
+# numeric, default: 14
+#effects.goom.fps:14
+
+# goom image height
+# numeric, default: 240
+#effects.goom.height:240
+
+# goom image width
+# numeric, default: 320
+#effects.goom.width:320
+
+# colorspace conversion method
+# { Fast but not photorealistic Slow but looks better }, default: 0
+#effects.goom.csc_method:Fast but not photorealistic
+
+# number of audio buffers
+# numeric, default: 230
+#engine.buffers.audio_num_buffers:230
+
+# number of video buffers
+# numeric, default: 500
+#engine.buffers.video_num_buffers:500
+
+# default number of video frames
+# numeric, default: 15
+#engine.buffers.video_num_frames:15
+
+# priority for a/52 decoder
+# numeric, default: 0
+#engine.decoder_priorities.a/52:0
+
+# priority for bitplane decoder
+# numeric, default: 0
+#engine.decoder_priorities.bitplane:0
+
+# priority for dts decoder
+# numeric, default: 0
+#engine.decoder_priorities.dts:0
+
+# priority for dvaudio decoder
+# numeric, default: 0
+#engine.decoder_priorities.dvaudio:0
+
+# priority for dxr3-mpeg2 decoder
+# numeric, default: 0
+#engine.decoder_priorities.dxr3-mpeg2:0
+
+# priority for dxr3-spudec decoder
+# numeric, default: 0
+#engine.decoder_priorities.dxr3-spudec:0
+
+# priority for faad decoder
+# numeric, default: 0
+#engine.decoder_priorities.faad:0
+
+# priority for ffmpeg-wmv8 decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpeg-wmv8:0
+
+# priority for ffmpeg-wmv9 decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpeg-wmv9:0
+
+# priority for ffmpegaudio decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpegaudio:0
+
+# priority for ffmpegvideo decoder
+# numeric, default: 0
+#engine.decoder_priorities.ffmpegvideo:0
+
+# priority for gdkpixbuf decoder
+# numeric, default: 0
+#engine.decoder_priorities.gdkpixbuf:0
+
+# priority for gsm610 decoder
+# numeric, default: 0
+#engine.decoder_priorities.gsm610:0
+
+# priority for image decoder
+# numeric, default: 0
+#engine.decoder_priorities.image:0
+
+# priority for mad decoder
+# numeric, default: 0
+#engine.decoder_priorities.mad:0
+
+# priority for mpc decoder
+# numeric, default: 0
+#engine.decoder_priorities.mpc:0
+
+# priority for mpeg2 decoder
+# numeric, default: 0
+#engine.decoder_priorities.mpeg2:0
+
+# priority for nsf decoder
+# numeric, default: 0
+#engine.decoder_priorities.nsf:0
+
+# priority for pcm decoder
+# numeric, default: 0
+#engine.decoder_priorities.pcm:0
+
+# priority for qta decoder
+# numeric, default: 0
+#engine.decoder_priorities.qta:0
+
+# priority for qtv decoder
+# numeric, default: 0
+#engine.decoder_priorities.qtv:0
+
+# priority for real decoder
+# numeric, default: 0
+#engine.decoder_priorities.real:0
+
+# priority for realadec decoder
+# numeric, default: 0
+#engine.decoder_priorities.realadec:0
+
+# priority for rgb decoder
+# numeric, default: 0
+#engine.decoder_priorities.rgb:0
+
+# priority for spucc decoder
+# numeric, default: 0
+#engine.decoder_priorities.spucc:0
+
+# priority for spucmml decoder
+# numeric, default: 0
+#engine.decoder_priorities.spucmml:0
+
+# priority for spudec decoder
+# numeric, default: 0
+#engine.decoder_priorities.spudec:0
+
+# priority for spudvb decoder
+# numeric, default: 0
+#engine.decoder_priorities.spudvb:0
+
+# priority for sputext decoder
+# numeric, default: 0
+#engine.decoder_priorities.sputext:0
+
+# priority for theora decoder
+# numeric, default: 0
+#engine.decoder_priorities.theora:0
+
+# priority for vorbis decoder
+# numeric, default: 0
+#engine.decoder_priorities.vorbis:0
+
+# priority for win32a decoder
+# numeric, default: 0
+#engine.decoder_priorities.win32a:0
+
+# priority for win32v decoder
+# numeric, default: 0
+#engine.decoder_priorities.win32v:0
+
+# priority for yuv decoder
+# numeric, default: 0
+#engine.decoder_priorities.yuv:0
+
+# media format detection strategy
+# { default reverse content extension }, default: 0
+#engine.demux.strategy:default
+
+# memcopy method used by xine
+# { probe libc kernel mmx mmxext sse }, default: 0
+engine.performance.memcpy_method:libc
+
+# percentage of discarded frames to tolerate
+# numeric, default: 10
+#engine.performance.warn_discarded_threshold:10
+
+# percentage of skipped frames to tolerate
+# numeric, default: 10
+#engine.performance.warn_skipped_threshold:10
+
+# allow implicit changes to the configuration (e.g. by MRL)
+# bool, default: 0
+#misc.implicit_config:0
+
diff --git a/abs/core/live-installer/templates/xorg/modeline.ATSC b/abs/core/live-installer/templates/xorg/modeline.ATSC
new file mode 100644
index 0000000..b2cd709
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/modeline.ATSC
@@ -0,0 +1,33 @@
+ModeLine "ATSC-720p60Hz" 74.160 1280 1352 1392 1648 720 725 730 750
+
+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 "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 74.086 MHz 44.955 kHz 5$
+
+ModeLine "My1080i" 79.84 1920 2040 2200 2368 1080 1090 1106 1125 +vsync -hsync interlace
+
+ModeLine "My1080i2" 74.52 1920 1952 2016 2208 1080 1084 1096 1126 -hsync -vsync interlace
+
+Modeline "My1920x1080_i" 74.52 1920 1952 2016 2208 1080 1084 1096 1126 -HSync -VSync Interlace
+
+Modeline "in1080_i" 74.52 1760 1888 2096 2208 960 1012 1028 1126 -HSync -VSync Interlace
+
+Modeline "1920x1080_59i" 76.11 1920 1952 2240 2272 1080 1104 1110 1135 interlace
+
+Modeline "1920x1080_60i" 77.60 1920 1952 2240 2272 1080 1104 1110 1135 interlace
+
+Modeline "1920x1080_61i" 79.08 1920 1952 2248 2280 1080 1104 1110 1135 interlace
+
+Modeline "1776x1000_60i" 65.91 1776 1808 2056 2088 1000 1023 1028 1051 interlace
+
+Modeline "1920x1080_30" 77.60 1920 1952 2240 2272 1080 1104 1110 1135
+
+Modeline "1760x960_60i" 62.39 1760 1792 2024 2056 960 982 987 1009 interlace
+
+Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+
+Modeline "1280x720_50.00" 74.25 1280 1360 1400 1984 720 725 730 750 -hsync -vsync
diff --git a/abs/core/live-installer/templates/xorg/modeline.DVD b/abs/core/live-installer/templates/xorg/modeline.DVD
new file mode 100644
index 0000000..9e846d0
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/modeline.DVD
@@ -0,0 +1,9 @@
+#DVD-NativeModes
+ModeLine "NTSC-DVD-59.94i" 13.5 720 736 800 858 480 484 492 525 Interlace
+ModeLine "NTSC-DVD-60i" 13.514 720 736 800 858 480 484 492 525 Interlace
+ModeLine "NTSC-DVD-59.94p" 27.0 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-60p" 27.027 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-71.93p" 32.4 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-119.88p" 54.0 720 736 800 858 480 484 492 525
+ModeLine "NTSC-DVD-120p" 54.054 720 736 800 858 480 484 492 525
diff --git a/abs/core/live-installer/templates/xorg/modeline.NTSC b/abs/core/live-installer/templates/xorg/modeline.NTSC
new file mode 100644
index 0000000..5536c1b
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/modeline.NTSC
@@ -0,0 +1,10 @@
+#Analog-RegularModes
+ModeLine "NTSCspec-59.94i" 14.318 768 784 848 910 483 484 492 525 Interlace
+ModeLine "NTSCspec-59.94p" 28.636 768 784 848 910 483 484 492 525
+ModeLine "Laserdisk-59.94i" 567 583 647 684 483 484 492 525 Interlace
+ModeLine "Laserdisk-59.94p" 567 583 647 684 483 484 492 525
+ModeLine "Broadcast-59.94i" 483 484 492 525 Interlace
+ModeLine "Broadcast-59.94p" 483 484 492 525
+ModeLine "VHS-59.94i" 483 484 492 525 Interlace
+ModeLine "VHS-59.94p" 483 484 492 525
+
diff --git a/abs/core/live-installer/templates/xorg/modeline.VESA b/abs/core/live-installer/templates/xorg/modeline.VESA
new file mode 100644
index 0000000..a026f64
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/modeline.VESA
@@ -0,0 +1,163 @@
+# 640x350 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync
+
+# 640x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync
+
+# 720x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync
+
+# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
+ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
+
+# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
+ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync
+
+# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
+ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
+
+# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
+ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync
+
+# 800x600 @ 56Hz (VESA) hsync: 35.2kHz
+ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
+
+# 800x600 @ 60Hz (VESA) hsync: 37.9kHz
+ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
+
+# 800x600 @ 72Hz (VESA) hsync: 48.1kHz
+ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
+
+# 800x600 @ 75Hz (VESA) hsync: 46.9kHz
+ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
+
+# 800x600 @ 85Hz (VESA) hsync: 53.7kHz
+ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync
+
+# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz
+ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace
+
+# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz
+ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz
+ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz
+ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
+
+# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz
+ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync
+
+# 1152x864 @ 75Hz (VESA) hsync: 67.5kHz
+ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync
+
+# 1280x960 @ 60Hz (VESA) hsync: 60.0kHz
+ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync
+
+# 1280x960 @ 85Hz (VESA) hsync: 85.9kHz
+ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync
+
+# 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz
+ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz
+ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz
+ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync
+
+# 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz
+ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+# 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz
+ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz
+ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz
+ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz
+ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz
+ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync
+
+# 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz
+ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync
+
+# 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz
+ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync
+
+# 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync
+
+# 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz
+ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync
+
+# 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync
+
+# 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz
+ModeLine "640x480" 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync
+
+# 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz
+ModeLine "768x576" 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync
+
+# 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz
+ModeLine "768x576" 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync
+
+# 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz
+ModeLine "768x576" 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync
+
+# 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz
+ModeLine "768x576" 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync
+
+# 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz
+ModeLine "768x576" 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync
+
+# 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz
+ModeLine "800x600" 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync
+
+# 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz
+ModeLine "1024x768" 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync
+
+# 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz
+ModeLine "1152x864" 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync
+
+# 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz
+ModeLine "1152x864" 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync
+
+# 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz
+ModeLine "1152x864" 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync
+
+# 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz
+ModeLine "1280x960" 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync
+
+# 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz
+ModeLine "1280x960" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync
+
+# 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz
+ModeLine "1280x960" 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync
+
+# 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz
+ModeLine "1280x1024" 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync
+
+# 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz
+ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync
+
+# 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz
+ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync
+
+# 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz
+ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync
+
+# 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz
+ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync
+
+# 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz
+ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync
+
+# 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz
+ModeLine "1600x1200" 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync
diff --git a/abs/core/live-installer/templates/xorg/modeline.custom b/abs/core/live-installer/templates/xorg/modeline.custom
new file mode 100644
index 0000000..ca6d678
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/modeline.custom
@@ -0,0 +1 @@
+ModeLine "CustomModeline" 14.318 768 784 848 910 483 484 492 525 Interlace
diff --git a/abs/core/live-installer/templates/xorg/xorg.conf.ati b/abs/core/live-installer/templates/xorg/xorg.conf.ati
new file mode 100644
index 0000000..c6d9249
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/xorg.conf.ati
@@ -0,0 +1,94 @@
+Section "ServerLayout"
+ Identifier "X.org Configured"
+ Screen 0 "aticonfig-Screen[0]" 0 0
+ InputDevice "Mouse0" "CorePointer"
+ InputDevice "Keyboard0" "CoreKeyboard"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/share/X11/rgb"
+ ModulePath "/usr/lib/xorg/modules"
+ FontPath "/usr/share/fonts/misc"
+ FontPath "/usr/share/fonts/75dpi"
+ FontPath "/usr/share/fonts/100dpi"
+ FontPath "/usr/share/fonts/TTF"
+ FontPath "/usr/share/fonts/Type1"
+EndSection
+
+Section "Module"
+ Load "xtrap"
+ Load "dbe"
+ Load "record"
+ Load "extmod"
+ Load "dri"
+ Load "type1"
+ Load "freetype"
+EndSection
+
+Section "InputDevice"
+ Identifier "Keyboard0"
+ Driver "kbd"
+EndSection
+
+Section "InputDevice"
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/input/mice"
+ Option "ZAxisMapping" "4 5 6 7"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Monitor Vendor"
+ ModelName "Monitor Model"
+EndSection
+
+Section "Monitor"
+ Identifier "aticonfig-Monitor[0]"
+# HorizSync
+# VertRefresh
+ Option "VendorName" "ATI Proprietary Driver"
+ Option "ModelName" "Generic Autodetecting Monitor"
+ Option "DPMS" "true"
+EndSection
+
+Section "Device"
+
+ ### Available Driver options are:-
+ ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
+ ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
+ ### [arg]: arg optional
+ #Option "ShadowFB" # [<bool>]
+ #Option "DefaultRefresh" # [<bool>]
+ #Option "ModeSetClearScreen" # [<bool>]
+ Identifier "Card0"
+ Driver "vesa"
+ VendorName "ATI Technologies Inc"
+ BoardName "RV370 5B60 [Radeon X300 (PCIE)]"
+ BusID "PCI:1:0:0"
+EndSection
+
+Section "Device"
+ Identifier "aticonfig-Device[0]"
+ Driver "fglrx"
+#INSERT HERE
+
+# Option "ForceMonitors" "tv,nocrt1,notmds1"
+# Option "TVStandard" "SCART"
+# Option "TVFormat" "PAL-B"
+EndSection
+
+
+Section "Screen"
+ Identifier "aticonfig-Screen[0]"
+ Device "aticonfig-Device[0]"
+ Monitor "aticonfig-Monitor[0]"
+ DefaultDepth 24
+ SubSection "Display"
+ Viewport 0 0
+ Depth 24
+ Modes "640x480"
+ EndSubSection
+EndSection
+
diff --git a/abs/core/live-installer/templates/xorg/xorg.conf.intel b/abs/core/live-installer/templates/xorg/xorg.conf.intel
new file mode 100644
index 0000000..a4d258a
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/xorg.conf.intel
@@ -0,0 +1,148 @@
+Section "ServerLayout"
+ Identifier "Xorg Configured"
+ Screen 0 "Screen0" 0 0
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "PS/2 Mouse" "CorePointer"
+# Serial Mouse not detected
+# USB Mouse not detected
+EndSection
+
+Section "ServerFlags"
+ Option "AllowMouseOpenFail" "true"
+
+EndSection
+
+Section "Files"
+ RgbPath "/usr/share/X11/rgb"
+ ModulePath "/usr/lib/xorg/modules"
+ FontPath "/usr/share/fonts/misc:unscaled"
+ FontPath "/usr/share/fonts/misc"
+ FontPath "/usr/share/fonts/75dpi:unscaled"
+ FontPath "/usr/share/fonts/75dpi"
+ FontPath "/usr/share/fonts/100dpi:unscaled"
+ FontPath "/usr/share/fonts/100dpi"
+ FontPath "/usr/share/fonts/PEX"
+# Additional fonts: Locale, Gimp, TTF...
+ FontPath "/usr/share/fonts/cyrillic"
+# FontPath "/usr/share/lib/X11/fonts/latin2/75dpi"
+# FontPath "/usr/share/lib/X11/fonts/latin2/100dpi"
+# True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig!
+ FontPath "/usr/share/fonts/Type1"
+ FontPath "/usr/share/fonts/ttf/western"
+ FontPath "/usr/share/fonts/ttf/decoratives"
+ FontPath "/usr/share/fonts/truetype"
+ FontPath "/usr/share/fonts/truetype/openoffice"
+ FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
+ FontPath "/usr/share/fonts/latex-ttf-fonts"
+ FontPath "/usr/share/fonts/defoma/CID"
+ FontPath "/usr/share/fonts/defoma/TrueType"
+EndSection
+
+Section "Module"
+ Load "ddc" # ddc probing of monitor
+ Load "dbe"
+ Load "dri"
+ Load "extmod"
+ Load "glx"
+ Load "bitmap" # bitmap-fonts
+ Load "type1"
+ Load "freetype"
+ Load "record"
+EndSection
+
+Section "InputDevice"
+ Identifier "Keyboard0"
+ Driver "keyboard"
+ Option "CoreKeyboard"
+ Option "XkbRules" "xorg"
+ Option "XkbModel" "pc105"
+ Option "XkbLayout" ""
+ Option "XkbVariant" ""
+EndSection
+
+Section "InputDevice"
+ Identifier "Serial Mouse"
+ Driver "mouse"
+ Option "Protocol" "Microsoft"
+ Option "Device" "/dev/ttyS0"
+ Option "Emulate3Buttons" "true"
+ Option "Emulate3Timeout" "70"
+ Option "SendCoreEvents" "true"
+EndSection
+
+Section "InputDevice"
+ Identifier "PS/2 Mouse"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "ZAxisMapping" "4 5"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "true"
+ Option "Emulate3Timeout" "70"
+ Option "SendCoreEvents" "true"
+EndSection
+
+Section "InputDevice"
+ Identifier "USB Mouse"
+ Driver "mouse"
+ Option "Device" "/dev/input/mice"
+ Option "SendCoreEvents" "true"
+ Option "Protocol" "IMPS/2"
+ Option "ZAxisMapping" "4 5"
+ Option "Buttons" "5"
+EndSection
+
+# Auto-generated by Archie mkxcfg
+
+Section "Monitor"
+ Identifier "Monitor0"
+ Option "DPMS" "true"
+EndSection
+
+# Auto-generated by Archie mkxcfg
+
+Section "Device"
+ Identifier "Card0"
+ Driver "intel"
+ VendorName "All"
+ BoardName "All"
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Card0"
+ Monitor "Monitor0"
+ DefaultColorDepth 16
+ SubSection "Display"
+ Depth 1
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 4
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 8
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 15
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 16
+ Modes "800x600"
+ virtual 800 600
+ EndSubSection
+ SubSection "Display"
+ Depth 24
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+ SubSection "Display"
+ Depth 32
+ Modes "1024x768" "800x600" "640x480"
+ EndSubSection
+EndSection
+
+Section "DRI"
+ Mode 0666
+EndSection
diff --git a/abs/core/live-installer/templates/xorg/xorg.conf.nvidia b/abs/core/live-installer/templates/xorg/xorg.conf.nvidia
new file mode 100755
index 0000000..dec0f42
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/xorg.conf.nvidia
@@ -0,0 +1,90 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "glx"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+# HorizSync
+# VertRefresh
+ Option "DPMS" "false"
+ DisplaySize 203 153
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+#INSERT MODELINE
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "nvidia"
+ VendorName "NVIDIA Corporation"
+ Option "DPI" "100 x 100"
+ Option "NoLogo" "1"
+
+#INSERT HERE
+
+#END OPTIONS
+
+# Option "ConnectedMonitor" "DFP"
+# Option "FlatPanelProperties" "Scaling = centered, Dithering = enabled"
+# Option "DigitalVibrance" "0"
+# Option "TransparentIndex" "0"
+# Option "CursorShadowAlpha" "64"
+# Option "CursorShadowXOffset" "4"
+# Option "UseEdidFreqs" "True"
+# Option "NvAGP" "1"
+
+
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "1280x720"
+ EndSubSection
+EndSection
+
diff --git a/abs/core/live-installer/templates/xorg/xorg.conf.via b/abs/core/live-installer/templates/xorg/xorg.conf.via
new file mode 100644
index 0000000..6dd7821
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/xorg.conf.via
@@ -0,0 +1,77 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "glx"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "dri"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+ HorizSync 30.0 - 110.0
+ VertRefresh 50.0 - 150.0
+ Option "DPMS" "false"
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "via"
+ VendorName "via"
+ Option "DPI" "100 x 100"
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 16
+ SubSection "Display"
+ Depth 16
+ Modes "800x600"
+ EndSubSection
+EndSection
+
+Section "DRI"
+ Group "video"
+ Mode 0666
+ EndSection
diff --git a/abs/core/live-installer/templates/xorg/xorg.conf.vmware b/abs/core/live-installer/templates/xorg/xorg.conf.vmware
new file mode 100755
index 0000000..843f2f4
--- /dev/null
+++ b/abs/core/live-installer/templates/xorg/xorg.conf.vmware
@@ -0,0 +1,72 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig: version 1.0 (buildmeister@builder3) Tue Aug 1 21:11:12 PDT 2006
+
+Section "ServerLayout"
+ Identifier "Layout0"
+ Screen 0 "Screen0"
+ InputDevice "Keyboard0" "CoreKeyboard"
+ InputDevice "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+EndSection
+
+Section "Module"
+ Load "dbe"
+ Load "extmod"
+ Load "type1"
+ Load "freetype"
+ Load "glx"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Mouse0"
+ Driver "mouse"
+ Option "Protocol" "auto"
+ Option "Device" "/dev/psaux"
+ Option "Emulate3Buttons" "no"
+ Option "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+ # generated from default
+ Identifier "Keyboard0"
+ Driver "keyboard"
+EndSection
+
+Section "Monitor"
+ Identifier "Monitor0"
+ VendorName "Unknown"
+ ModelName "Unknown"
+ HorizSync 30.0 - 110.0
+ VertRefresh 50.0 - 150.0
+ Option "DPMS" "false"
+ Modeline "1280x720" 74.25 1280 1316 1452 1644 720 720 723 751 -hsync +vsync
+ Modeline "1280x720_60.00" 74.25 1280 1352 1432 1648 720 725 730 750 -hsync -vsync
+ ModeLine "848x480" 34.0 848 880 1016 1072 480 494 495 527 -hsync -vsync
+ Modeline "800x600" 38.34 800 832 928 1024 600 604 608 624 -HSync -VSync
+ ModeLine "NTSC-DVD-72p" 32.432 720 736 800 858 480 484 492 525
+EndSection
+
+Section "Device"
+ Identifier "Device0"
+ Driver "vmware"
+ VendorName "NVIDIA Corporation"
+ Option "DPI" "100 x 100"
+
+
+EndSection
+
+Section "Screen"
+ Identifier "Screen0"
+ Device "Device0"
+ Monitor "Monitor0"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "1280x720"
+ EndSubSection
+EndSection
+
diff --git a/abs/core/live-installer/timezip.py b/abs/core/live-installer/timezip.py
new file mode 100755
index 0000000..505b4a4
--- /dev/null
+++ b/abs/core/live-installer/timezip.py
@@ -0,0 +1,185 @@
+#!/usr/bin/python
+# import MySQL module
+#used to import the zipcode/timezone/nfs info fromMBE
+import MySQLdb
+import sys
+import getopt
+import socket
+
+
+def usage():
+ print " -h --help"
+ print " -d --installdb"
+ print " -m --masterdb"
+ print " -n --hostname of current machine"
+
+def printvars():
+ print "masterdb: " + masterdb
+ print "installdb:" + installdb
+ print "hostname: " + thishostname
+ print "BEhostname:" + BEhostname
+ print "zipcode:" + zipcode
+ print "timezone:" + tz
+ print "nfsip:" + nfsip
+ print "nfstoggle:" + nfstoggle
+ print "nfsmount:" + nfsmount
+ print "hobbitclient:" + hobbitclient
+# connect
+def selectvars():
+
+ global BEhostname
+ global zipcode
+ global tz
+ global nfsip
+ global nfstoggle
+ global nfsmount
+ global hobbitclient
+
+ db = MySQLdb.connect(host=masterdb, user="mythtv", passwd="mythtv", db="mythconverg")
+ # create a cursor
+ cursor = db.cursor()
+ # execute SQL statement
+ cursor.execute("select hostname from settings where value='BackendServerIP' and data=(%s)",(masterdb))
+ result = cursor.fetchone()
+ BEhostname=result[0]
+
+ cursor.execute("select data from settings where value='HostZipcode' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ zipcode = result[0]
+ except TypeError:
+ zipcode=""
+
+ cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfsip=result[0]
+ except TypeError:
+ nfsip=""
+
+ cursor.execute("select data from settings where value='HostHaveCentralNFS' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfstoggle=result[0]
+ except TypeError:
+ nfstoggle=""
+
+ cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ nfsmount=result[0]
+ except TypeError:
+ nfsmount=""
+
+ cursor.execute("select data from settings where value='HostTimeZone' and hostname=(%s)",(BEhostname))
+ result = cursor.fetchone()
+ try:
+ tz=result[0]
+ except TypeError:
+ tz=""
+
+ if ( thishostname != BEhostname ):
+ cursor.execute("select data from settings where value='GlobalServiceHobbitserver'")
+ result = cursor.fetchone()
+ try:
+ hobbitclient=result[0]
+ except TypeError:
+ hobbitclient="0"
+
+
+
+def insertvars():
+
+ db = MySQLdb.connect(host=installdb, user="mythtv", passwd="mythtv", db="mythconverg")
+ cursor = db.cursor()
+#inserting the zipcode
+ cursor.execute("select * from settings where value='HostZipcode' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( zipcode!="" ):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostZipcode',(%s),(%s))",(zipcode,thishostname))
+ print "inserting zipcode"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostZipcode'",(zipcode,thishostname))
+ print "updating zipcode"
+
+#inserting the timezone
+ cursor.execute("select * from settings where value='HostTimeZone' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( tz != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostTimeZone',(%s),(%s))",(tz,thishostname))
+ print "inserting timezone"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostTimeZone'",(tz,thishostname))
+ print "updating timezone"
+
+
+#start of NFSIP
+ cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( nfsip != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostCentralNFSIP',(%s),(%s))",(nfsip,thishostname))
+ print "inserting nfsip"
+
+ if (nfstoggle != ""):
+ cursor.execute("select data from settings where value='HostHaveCentralNFS' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostHaveCentralNFS',(%s),(%s))",(nfstoggle,thishostname))
+ print "inserting nfstoggle"
+
+ if ( nfsmount !="") :
+ cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostNFSmountpoint',(%s),(%s))",(nfsmount,thishostname))
+ print "inserting nfsmountpoint"
+
+#hobbitclient
+ cursor.execute("select * from settings where value='HostServiceHobbitclient' and hostname=(%s)",(thishostname))
+ result = cursor.fetchone()
+ if ( tz != ""):
+ if (result == None):
+ cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostServiceHobbitclient',(%s),(%s))",(hobbitclient,thishostname))
+ print "inserting hobbitcleint"
+ else:
+ cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostServiceHobbitclient'",(hobbitclient,thishostname))
+ print "updating hobbitclient"
+
+
+def main(argv):
+ global masterdb
+ global installdb
+ global thishostname
+ thishostname=""
+ global BEhostname
+ global zipcode
+ global tz
+ global nfsip
+ global hobbitclient
+ try:
+ opts, args = getopt.getopt(argv, "hm:d:n:", ["help", "masterdb=", "installdb=" , "hostname=" ] )
+ except getopt.GetoptError:
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage()
+ sys.exit()
+ elif opt in ( "-d" , "--installdb"):
+ installdb = arg
+ elif opt in ("-m", "--masterdb"):
+ masterdb = arg
+ elif opt in ("-n", "--hostname"):
+ thishostname = arg
+
+ if ( thishostname == "" ):
+ thishostname = socket.gethostname()
+
+ selectvars()
+ printvars()
+ insertvars()
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
diff --git a/abs/core/live-installer/xconfig.sh b/abs/core/live-installer/xconfig.sh
new file mode 100755
index 0000000..42603d6
--- /dev/null
+++ b/abs/core/live-installer/xconfig.sh
@@ -0,0 +1,233 @@
+#!/bin/bash
+BASE=""
+. /etc/profile
+#TEMPLATES="/usr/share/templates"
+
+function Xvalues {
+ VGACARDTYPE=`lspci|grep -i vga|sort -r|head -n 1| cut -d: -f3|cut -d" " -f 2`
+ echo $VGACARDTYPE
+ currentmode=`cat $BASE/etc/X11/xorg.conf |grep Modes|awk -Fs ' { print $2 } '`
+ }
+
+function presetupX {
+if [ x$XUseAdvanced = x1 ]
+then
+ if [ x$XIgnoreConfig = x1 ]
+ then
+ echo "Using User supplied X"
+ if [ -f $BASE/data/home/mythtv/templates/xorg.user ]
+ then
+ cp -f $BASE/data/home/mythtv/templates/xorg.user $XORG_CONF
+ else
+ echo "Didn't find the file"
+ echo "Copy your config file to $BASE/data/home/mythtv/templates/xorg.use " >> $XORG_CONF
+ fi
+ else
+ setupAdvancedX
+ fi
+else
+ setupX
+fi
+
+}
+
+function setupAdvancedX {
+echo "#doing the advanced" > /tmp/options
+ Xcatagory=` echo $Xresadvanced |cut -d_ -f1`
+ Xres=` echo $Xresadvanced |cut -d_ -f2`
+ echo $Xcatagory
+ if [ x$Xcatagory = "xNvidia" ]
+ then
+ Xres=""
+ if [ $XnVidia1080p = "1" ]
+ then
+ Xres="${Xres} \"1920x1080_60\""
+ fi
+ if [ $XnVidia1080i = "1" ]
+ then
+ Xres="${Xres} \"1920x1080_60i\""
+ fi
+ if [ $XnVidia720p = "1" ]
+ then
+ Xres="${Xres} \"1280x720_60\""
+ fi
+ if [ $XnVidia480p = "1" ]
+ then
+ Xres="${Xres} \"720x480_60\""
+ fi
+ ML="\t Modes ${Xres}"
+ else
+
+ ML="\t Modes \"${Xres}\""
+ fi
+ echo $ML
+ case $Xcardtype in
+ NVIDIA|nVidia )
+
+ case $Xconnection in
+ DVI) ConnectedMonitor=DFP ;;
+ vga) ConnectedMonitor=CRT;;
+ Auto) ConnectedMonitor=Auto;;
+ TV) ConnectedMonitor=TV
+ echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options
+ echo "Option \"TVOutFormat\" \"$XTVconnection\"" >> /tmp/options
+ ;;
+ esac
+ if [ $ConnectedMonitor = Auto ]
+ then
+ echo "auto connection"
+ else
+ echo "Option \"ConnectedMonitor\" \"$ConnectedMonitor\"" >> /tmp/options
+ echo "Option \"FlatPanelProperties\" \"Scaling = centered, Dithering = enabled\"" >> /tmp/options
+ echo "Option \"DigitalVibrance\" \"0\"" >> /tmp/options
+ fi
+
+ if [ x$XignoreEDID = x1 ]
+ then
+ EDIDvalue=true
+ EDIDFREQ=false
+ DS=" DisplaySize $XDisplaysize"
+ HS=" HorizSync $XHsync"
+ VR=" VertRefresh $XVrefresh"
+ else
+ EDIDvalue=false
+ EDIDFREQ=true
+ DS="# Display size edid used "
+ HS="#Hsync edid used "
+ VR="#Vertrefresh edid used "
+
+ fi
+ echo "Option \"UseEdidFreqs\" \"$EDIDFREQ\"" >> /tmp/options
+ echo "Option \"IgnoreEDID\" \"$EDIDvalue\"" >> /tmp/options
+
+
+ sed -e "s/^.*Modes.*$/${ML}/" \
+ -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcatagory" \
+ -e "s/^.*DisplaySize.*$/ $DS/" \
+ -e "s/^#.*HorizSync.*$/ $HS/g" \
+ -e "s/^#.*VertRefresh.*$/ $VR/g" \
+ -e "/INSERT HERE/r /tmp/options" $TEMPLATES/xorg/xorg.conf.nvidia > $XORG_CONF
+
+ ;;
+ ati|ATI)
+ case $Xconnection in
+ DVI) ConnectedMonitor="tmds1,nocrt1,notv";;
+ VGA) ConnectedMonitor="crt1,notmds1,notv" ;;
+ TV) ConnectedMonitor="tv,nocrt1,notmds1"
+ echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options
+ echo "Option \"TVFormat\" \"$XTVconnection\"" >> /tmp/options
+ ;;
+
+ esac
+
+
+ if [ x$XignoreEDID = x1 ]
+ then
+ DS=" DisplaySize $XDisplaysize"
+ HS=" HorizSync $XHsync"
+ VR=" VertRefresh $XVrefresh"
+ else
+ DS="# Display size edid used "
+ HS="#Hsync edid used "
+ VR="#Vertrefresh edid used "
+
+ fi
+
+ echo "Option \"ForceMonitors\" \"$ConnectedMonitor\"" >> /tmp/options
+
+ sed -e "s/^.*Modes.*$/\t $ML/" \
+ -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcatagory" \
+ -e "s/^.*DisplaySize.*$/ $DS/" \
+ -e "s/^#.*HorizSync.*$/ $HS/g" \
+ -e "s/^#.*VertRefresh.*$/ $VR/g" \
+ -e "/INSERT HERE/r /tmp/options" $TEMPLATES/xorg/xorg.conf.ati > $XORG_CONF
+ ;;
+
+ via|VIA|Via) echo "no via here"
+ ;;
+
+ *)
+ echo "unknown card type"
+ ;;
+ esac
+}
+
+
+
+function setupX {
+ Xvalues
+ echo "$currentmode ____ ${Xres}"
+ #if [ ! x${currentmode} = x\"${Xres}\" ]
+ if [ x = x ]
+ then
+ case $VGACARDTYPE in
+ nVidia )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.nvidia > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -R libgl-dri
+# pacman --noconfirm -S nvidia-STB nvidia-utils
+ pacman --noconfirm -S nvidia nvidia-utils
+ fi
+ ;;
+ VMware )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.vmware > $XORG_CONF
+ ;;
+
+ VIA )
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.via > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -R nvidia-STB nvidia-utils
+ pacman --noconfirm -S libgl-dri
+ fi
+
+ ;;
+ Intel)
+ sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" $TEMPLATES/xorg/xorg.conf.intel > $XORG_CONF
+ if [ ! x$TESTMODE = "xtest" ]
+ then
+ pacman --noconfirm -Rd nvidia-utils
+ pacman --noconfirm -S libgl-dri
+ fi
+ ;;
+
+ *) #XCONF=`hwd -x |grep etc`
+ XCONF=`hwd -x |grep etc|tr -d [:cntrl:]|cut -d\/ -f 2-`
+
+
+ cat /$XCONF |grep -v Modes | sed -e '/Depth 16/a Modes "800x600"' -e 's/dev\/mouse/dev\/psaux/g'> $XORG_CONF
+ ;;
+ esac
+ fi
+
+}
+
+#MAIN
+TESTMODE=$1
+if [ x$TESTMODE = "xtest" ]
+then
+ XORG_CONF="/tmp/xorg.conf.test"
+ XUseAdvanced="1"
+ XIgnoreConfig="${2}"
+ Xcardtype="${3}"
+ XIgnoreEDID="${4}"
+ Xconnection="${5}"
+ XHsync="${6}"
+ XVrefresh="${7}"
+ Xresadvanced="${8}"
+ XTVstandard="${9}"
+ XTVconnection="${10}"
+ XDisplaysize="${11}"
+else
+ if [ -f /etc/systemconfig ]
+ then
+ . /etc/systemconfig
+ else
+ Xres="800x600"
+ fi
+ XORG_CONF="/etc/X11/xorg.conf"
+fi
+presetupX
+
+
diff --git a/abs/core/logrotate/PKGBUILD b/abs/core/logrotate/PKGBUILD
new file mode 100644
index 0000000..16a389a
--- /dev/null
+++ b/abs/core/logrotate/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=logrotate
+pkgver=3.7.5
+pkgrel=10
+pkgdesc="Rotates system logs automatically"
+url='http://rhlinux.redhat.com'
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('popt' 'cron' 'gzip')
+backup=('etc/logrotate.conf')
+
+# The source is apparently a CVS checkout only. Create the tarball like so:
+# cvs -d :pserver:anonymous@rhlinux.redhat.com:/usr/local/CVS co logrotate
+# cd logrotate/
+# make create-archive
+# Ensure this tarball is places in other/logrotate/
+
+source=(ftp://ftp.archlinux.org/other/logrotate/${pkgname}-${pkgver}.tar.gz
+ logrotate.conf logrotate.cron.daily)
+md5sums=('a1a3ea2f1d80e67e902c024bbdef616a'
+ 'c8b915903825befc401797b7620f249e'
+ '8e23d5d4cc29b1e055b24df87e355cdc')
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver}
+
+ sed -i 's|#define DEFAULT_MAIL_COMMAND .*|#define DEFAULT_MAIL_COMMAND "/usr/bin/mail"|'\
+ config.h
+ make || return 1
+ make PREFIX=$startdir/pkg install
+ install -D -m644 ../logrotate.conf $startdir/pkg/etc/logrotate.conf
+ install -D -m744 ../logrotate.cron.daily $startdir/pkg/etc/cron.daily/logrotate
+}
diff --git a/abs/core/logrotate/logrotate.conf b/abs/core/logrotate/logrotate.conf
new file mode 100644
index 0000000..fde947b
--- /dev/null
+++ b/abs/core/logrotate/logrotate.conf
@@ -0,0 +1,28 @@
+# see "man logrotate" for details
+# rotate log files weekly
+weekly
+
+# keep 4 weeks worth of backlogs
+rotate 4
+
+# create new (empty) log files after rotating old ones
+create
+
+# uncomment this if you want your log files compressed
+#compress
+
+# Logs are moved into directory for rotation
+# olddir /var/log/archive
+
+# Ignore pacman saved files
+tabooext + .pacorig .pacnew .pacsave
+
+# Arch packages drop log rotation information into this directory
+include /etc/logrotate.d
+
+/var/log/wtmp {
+ monthly
+ create 0664 root root
+ rotate 1
+}
+
diff --git a/abs/core/logrotate/logrotate.cron.daily b/abs/core/logrotate/logrotate.cron.daily
new file mode 100755
index 0000000..e8ab921
--- /dev/null
+++ b/abs/core/logrotate/logrotate.cron.daily
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/sbin/logrotate /etc/logrotate.conf
diff --git a/abs/core/lsof/PKGBUILD b/abs/core/lsof/PKGBUILD
new file mode 100644
index 0000000..1fdedc0
--- /dev/null
+++ b/abs/core/lsof/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 2105 2008-05-25 02:46:46Z eric $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Jochem Kossen <j.kossen@home.nl>
+
+pkgname=lsof
+pkgver=4.80
+pkgrel=1
+pkgdesc="lsof (LiSt Open Files) lists information about files that are open by the running processes"
+arch=(i686 x86_64)
+license=(custom)
+depends=('glibc')
+url="http://people.freebsd.org/~abe/"
+#source=(ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/${pkgname}_${pkgver}.tar.bz2 license.txt)
+source=(ftp://sunsite.ualberta.ca/pub/Mirror/lsof/${pkgname}_${pkgver}.tar.bz2 license.txt)
+md5sums=('18d124d063619eeee147a8d638e2b8fd' '1b63c76bd10437cabf890508c8e58d36')
+
+build() {
+ cd $startdir/src/${pkgname}_${pkgver}
+ tar xf ${pkgname}_${pkgver}_src.tar
+ cd ${pkgname}_${pkgver}_src
+ sed "s|/\* #define\tHASSECURITY\t1 \*/|#define\tHASSECURITY\t1|" -i dialects/linux/machine.h
+
+ ./Configure -n linux
+ make || return 1
+ install -D -m0755 -o root -g root lsof $startdir/pkg/usr/sbin/lsof
+ install -D -m0644 -o root -g root lsof.8 $startdir/pkg/usr/share/man/man8/lsof.8
+
+ install -D -m0644 -o root -g root $startdir/src/license.txt \
+ $startdir/pkg/usr/share/licenses/lsof/license.txt
+}
diff --git a/abs/core/lsof/license.txt b/abs/core/lsof/license.txt
new file mode 100644
index 0000000..6d241dd
--- /dev/null
+++ b/abs/core/lsof/license.txt
@@ -0,0 +1,27 @@
+Copyright 2002 Purdue Research Foundation, West Lafayette,
+Indiana 47907. All rights reserved.
+
+Written by Victor A. Abell
+
+This software is not subject to any license of the American
+Telephone and Telegraph Company or the Regents of the
+University of California.
+
+Permission is granted to anyone to use this software for
+any purpose on any computer system, and to alter it and
+redistribute it freely, subject to the following
+restrictions:
+
+1. Neither the authors nor Purdue University are responsible
+ for any consequences of the use of this software.
+
+2. The origin of this software must not be misrepresented,
+ either by explicit claim or by omission. Credit to the
+ authors and Purdue University must appear in documentation
+ and sources.
+
+3. Altered versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+4. This notice may not be removed or altered.
+
diff --git a/abs/core/lvm2/PKGBUILD b/abs/core/lvm2/PKGBUILD
new file mode 100644
index 0000000..1819c76
--- /dev/null
+++ b/abs/core/lvm2/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 1726 2008-05-15 13:19:26Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=lvm2
+pkgver=2.02.37
+pkgrel=10
+pkgdesc="Logical Volume Manager 2 utilities"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://sourceware.org/lvm2/"
+groups=('base')
+depends=('device-mapper>=1.02.22')
+conflicts=('lvm')
+backup=('etc/lvm/lvm.conf')
+source=(ftp://sources.redhat.com/pub/lvm2/LVM2.$pkgver.tgz
+ lvm2_install
+ lvm2_hook)
+md5sums=('19c19e1f31ec548dc31982478a8a5f63'
+ '40dccdb1044f00fc1e29ca549933d4bd'
+ '73c8c2eba0fe891712c859c18b5b8aa2')
+
+build() {
+ cd $startdir/src/LVM2.$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ make || return 1
+ make DESTDIR=$startdir/pkg sbindir=$startdir/pkg/sbin install || return 1
+ mkdir -p $startdir/pkg/etc/lvm/{archive,backup}
+ # a static binary is required for Arch's initrd
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --enable-static_link
+ make || return 1
+ install -D -m755 tools/lvm.static $startdir/pkg/sbin/lvm.static
+ # add hook
+ install -D -m644 $startdir/src/lvm2_hook $startdir/pkg/lib/initcpio/hooks/lvm2
+ install -D -m644 $startdir/src/lvm2_install $startdir/pkg/lib/initcpio/install/lvm2
+}
diff --git a/abs/core/lvm2/lvm2_hook b/abs/core/lvm2/lvm2_hook
new file mode 100644
index 0000000..b98e87d
--- /dev/null
+++ b/abs/core/lvm2/lvm2_hook
@@ -0,0 +1,16 @@
+# vim:set ft=sh:
+run_hook ()
+{
+ /sbin/modprobe -q dm-mod >/dev/null 2>&1
+ if [ -e "/sys/class/misc/device-mapper" ]; then
+ read dev_t < /sys/class/misc/device-mapper/dev
+ /bin/mknod "/dev/mapper/control" c $(/bin/replace "${dev_t}" ':')
+
+ [ "${quiet}" = "y" ] && LVMQUIET=">/dev/null"
+
+ msg "Scanning logical volumes..."
+ eval /bin/lvm vgscan --ignorelockingfailure $LVMQUIET
+ msg "Activating logical volumes..."
+ eval /bin/lvm vgchange --ignorelockingfailure -ay $LVMQUIET
+ fi
+}
diff --git a/abs/core/lvm2/lvm2_install b/abs/core/lvm2/lvm2_install
new file mode 100644
index 0000000..c6cacc3
--- /dev/null
+++ b/abs/core/lvm2/lvm2_install
@@ -0,0 +1,19 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=" dm-mod "
+ BINARIES=""
+ FILES=""
+ SCRIPT="lvm2"
+
+ add_dir "/dev/mapper"
+ add_file "/sbin/lvm.static" "/bin/lvm"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the necessary modules for an LVM2 root device.
+HELPEOF
+}
diff --git a/abs/core/lzo2/PKGBUILD b/abs/core/lzo2/PKGBUILD
new file mode 100644
index 0000000..f7e2da0
--- /dev/null
+++ b/abs/core/lzo2/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Low Kian Seong <fastmail_low@speedymail.org>
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=lzo2
+pkgver=2.02
+pkgrel=12
+pkgdesc="a portable lossless data compression library written in ANSI C"
+arch=(i686 x86_64)
+url="http://www.oberhumer.com/opensource/lzo"
+license=('GPL')
+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}
+ ./configure --prefix=/usr --enable-shared
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/lzop/PKGBUILD b/abs/core/lzop/PKGBUILD
new file mode 100644
index 0000000..bc2c92e
--- /dev/null
+++ b/abs/core/lzop/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Damir Perisa <damir.perisa@bluewin.ch>
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=lzop
+pkgver=1.02rc1
+pkgrel=3
+pkgdesc="File compressor using lzo lib"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.lzop.org/"
+depends=('lzo2')
+source=(http://www.lzop.org/download/${pkgname}-${pkgver}.tar.gz)
+md5sums=('4b999030716b1353c3dac049b269df7a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/madwifi-utils/PKGBUILD b/abs/core/madwifi-utils/PKGBUILD
new file mode 100644
index 0000000..fc821ba
--- /dev/null
+++ b/abs/core/madwifi-utils/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7960 2008-08-05 10:51:02Z tpowa $
+# Originally by kleptophobiac <kleptophobiac@gmail.com>
+# Modified by James Rayner for the repositories <iphitus@gmail.com>
+
+pkgname=madwifi-utils
+pkgver=0.9.4.3844
+_kernver=2.6.26-ARCH
+pkgrel=1
+pkgdesc="Userspace tools of madwifi drivers for Atheros wireless chipsets."
+arch=(i686 x86_64)
+license=('GPL')
+url="http://madwifi.org"
+depends=('wireless_tools')
+makedepends=('sharutils')
+provides=("madwifi-ng-utils")
+conflicts=("madwifi-ng-utils")
+replaces=("madwifi-ng-utils")
+# subversion source: svn checkout http://svn.madwifi.org/madwifi/trunk madwifi
+source=(ftp://ftp.archlinux.org/other/madwifi/madwifi-${pkgver}.tar.bz2
+ #http://downloads.sourceforge.net/sourceforge/madwifi/madwifi-$pkgver.tar.gz
+ )
+
+build() {
+ [ "${CARCH}" == "i686" ] && export ARCH=i386
+
+ export KERNELPATH=/lib/modules/${_kernver}/build
+ #cd $startdir/src/madwifi-$pkgver
+ cd $startdir/src/madwifi
+ make tools|| return 1
+ make DESTDIR=$startdir/pkg \
+ BINDIR=/usr/bin \
+ MANDIR=/usr/share/man \
+ install-tools
+}
+md5sums=('fc8b627774a91a5f0d6bd4e0d0b206fd')
diff --git a/abs/core/madwifi/PKGBUILD b/abs/core/madwifi/PKGBUILD
new file mode 100644
index 0000000..da2ec7a
--- /dev/null
+++ b/abs/core/madwifi/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 7965 2008-08-05 10:52:26Z tpowa $
+# Originally by kleptophobiac <kleptophobiac@gmail.com>
+# Modified by James Rayner for the repositories <iphitus@gmail.com>
+
+_kernver=2.6.26-ARCH;
+
+pkgname=madwifi
+pkgver=0.9.4.3844
+pkgrel=1
+pkgdesc="Madwifi drivers for Atheros wireless chipsets. For stock arch 2.6 kernel"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://madwifi.org"
+depends=('madwifi-utils' 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+makedepends=('sharutils')
+install=madwifi-ng.install
+# subversion source: svn checkout http://svn.madwifi.org/madwifi/trunk madwifi
+source=(ftp://ftp.archlinux.org/other/madwifi/madwifi-${pkgver}.tar.bz2
+ #http://downloads.sourceforge.net/madwifi/madwifi-${pkgver}.tar.gz
+ )
+
+build() {
+ [ "${CARCH}" == "i686" ] && export ARCH=i386
+
+ #cd $startdir/src/$pkgname-$pkgver
+ cd $startdir/src/$pkgname
+ sed -i -e 's/-Werror//g' Makefile.inc
+ make KERNELPATH=/lib/modules/$_kernver/build KERNELRELEASE=$_kernver modules|| return 1
+ make KERNELPATH=/lib/modules/$_kernver/build KERNELRELEASE=$_kernver modules \
+ DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver install-modules
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+
+ # install to wireless kernel directory
+ mkdir -p $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/madwifi
+ mv $startdir/pkg/lib/modules/$_kernver/net/* $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/madwifi
+ rm -r $startdir/pkg/lib/modules/$_kernver/net/
+}
+md5sums=('fc8b627774a91a5f0d6bd4e0d0b206fd')
diff --git a/abs/core/madwifi/kernel-2.6.19.patch b/abs/core/madwifi/kernel-2.6.19.patch
new file mode 100644
index 0000000..ddef01a
--- /dev/null
+++ b/abs/core/madwifi/kernel-2.6.19.patch
@@ -0,0 +1,383 @@
+diff -ur madwifi-0.9.2/ath/if_ath.c madwifi-0.9.2-neu/ath/if_ath.c
+--- madwifi-0.9.2/ath/if_ath.c 2006-07-08 08:47:19.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ */
+ #include "opt_ah.h"
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath/if_ath_ahb.c madwifi-0.9.2-neu/ath/if_ath_ahb.c
+--- madwifi-0.9.2/ath/if_ath_ahb.c 2006-05-22 06:39:55.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath_ahb.c 2006-11-11 11:50:02.000000000 +0100
+@@ -10,7 +10,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath/if_ath_pci.c madwifi-0.9.2-neu/ath/if_ath_pci.c
+--- madwifi-0.9.2/ath/if_ath_pci.c 2006-07-21 10:00:32.000000000 +0200
++++ madwifi-0.9.2-neu/ath/if_ath_pci.c 2006-11-11 11:50:02.000000000 +0100
+@@ -42,7 +42,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/amrr/amrr.c madwifi-0.9.2-neu/ath_rate/amrr/amrr.c
+--- madwifi-0.9.2/ath_rate/amrr/amrr.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/amrr/amrr.c 2006-11-11 11:50:03.000000000 +0100
+@@ -43,7 +43,7 @@
+ * "IEEE 802.11 Rate Adaptation: A Practical Approach" by
+ * Mathieu Lacage, Hossein Manshaei, Thierry Turletti
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/onoe/onoe.c madwifi-0.9.2-neu/ath_rate/onoe/onoe.c
+--- madwifi-0.9.2/ath_rate/onoe/onoe.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/onoe/onoe.c 2006-11-11 11:50:03.000000000 +0100
+@@ -39,7 +39,7 @@
+ /*
+ * Atsushi Onoe's rate control algorithm.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/ath_rate/sample/sample.c madwifi-0.9.2-neu/ath_rate/sample/sample.c
+--- madwifi-0.9.2/ath_rate/sample/sample.c 2006-07-04 12:23:35.000000000 +0200
++++ madwifi-0.9.2-neu/ath_rate/sample/sample.c 2006-11-11 11:50:03.000000000 +0100
+@@ -41,7 +41,7 @@
+ * John Bicket's SampleRate control algorithm.
+ */
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/hal/linux/ah_osdep.c madwifi-0.9.2-neu/hal/linux/ah_osdep.c
+--- madwifi-0.9.2/hal/linux/ah_osdep.c 2006-05-19 12:25:45.000000000 +0200
++++ madwifi-0.9.2-neu/hal/linux/ah_osdep.c 2006-11-11 11:50:02.000000000 +0100
+@@ -41,7 +41,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211.c madwifi-0.9.2-neu/net80211/ieee80211.c
+--- madwifi-0.9.2/net80211/ieee80211.c 2006-07-04 12:22:11.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 generic handler
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_acl.c madwifi-0.9.2-neu/net80211/ieee80211_acl.c
+--- madwifi-0.9.2/net80211/ieee80211_acl.c 2006-05-31 23:05:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_acl.c 2006-11-11 11:50:03.000000000 +0100
+@@ -45,7 +45,7 @@
+ * and if found the frame is either accepted (ACL_POLICY_ALLOW)
+ * or rejected (ACL_POLICY_DENT).
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_beacon.c madwifi-0.9.2-neu/net80211/ieee80211_beacon.c
+--- madwifi-0.9.2/net80211/ieee80211_beacon.c 2006-05-19 22:42:19.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_beacon.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 beacon handling routines
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto.c madwifi-0.9.2-neu/net80211/ieee80211_crypto.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 generic crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_ccmp.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_ccmp.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_ccmp.c 2006-06-13 16:09:51.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_ccmp.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ * AP driver. The code is used with the consent of the author and
+ * it's license is included below.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_none.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_none.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_none.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_none.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 NULL crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_tkip.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_tkip.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_tkip.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_tkip.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ * AP driver. The code is used with the consent of the author and
+ * it's license is included below.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_crypto_wep.c madwifi-0.9.2-neu/net80211/ieee80211_crypto_wep.c
+--- madwifi-0.9.2/net80211/ieee80211_crypto_wep.c 2006-02-06 21:20:57.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_crypto_wep.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 WEP crypto support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_input.c madwifi-0.9.2-neu/net80211/ieee80211_input.c
+--- madwifi-0.9.2/net80211/ieee80211_input.c 2006-07-06 05:23:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_input.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 input handling.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_linux.c madwifi-0.9.2-neu/net80211/ieee80211_linux.c
+--- madwifi-0.9.2/net80211/ieee80211_linux.c 2006-07-21 10:59:10.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_linux.c 2006-11-11 11:50:03.000000000 +0100
+@@ -33,7 +33,7 @@
+ /*
+ * IEEE 802.11 support (Linux-specific code)
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_monitor.c madwifi-0.9.2-neu/net80211/ieee80211_monitor.c
+--- madwifi-0.9.2/net80211/ieee80211_monitor.c 2006-04-21 18:57:59.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_monitor.c 2006-11-11 11:50:03.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * IEEE 802.11 monitor mode
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kmod.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_node.c madwifi-0.9.2-neu/net80211/ieee80211_node.c
+--- madwifi-0.9.2/net80211/ieee80211_node.c 2006-06-13 10:50:37.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_node.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 node handling support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_output.c madwifi-0.9.2-neu/net80211/ieee80211_output.c
+--- madwifi-0.9.2/net80211/ieee80211_output.c 2006-06-10 04:17:05.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_output.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 output handling.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_power.c madwifi-0.9.2-neu/net80211/ieee80211_power.c
+--- madwifi-0.9.2/net80211/ieee80211_power.c 2006-06-10 04:17:05.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_power.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 power save support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_proto.c madwifi-0.9.2-neu/net80211/ieee80211_proto.c
+--- madwifi-0.9.2/net80211/ieee80211_proto.c 2006-06-09 22:41:19.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_proto.c 2006-11-11 11:50:03.000000000 +0100
+@@ -38,7 +38,7 @@
+ /*
+ * IEEE 802.11 protocol support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/kmod.h>
+ #include <linux/module.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan.c madwifi-0.9.2-neu/net80211/ieee80211_scan.c
+--- madwifi-0.9.2/net80211/ieee80211_scan.c 2006-04-21 18:57:59.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan_ap.c madwifi-0.9.2-neu/net80211/ieee80211_scan_ap.c
+--- madwifi-0.9.2/net80211/ieee80211_scan_ap.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan_ap.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 ap scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_scan_sta.c madwifi-0.9.2-neu/net80211/ieee80211_scan_sta.c
+--- madwifi-0.9.2/net80211/ieee80211_scan_sta.c 2006-07-02 09:19:37.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_scan_sta.c 2006-11-11 11:50:03.000000000 +0100
+@@ -37,7 +37,7 @@
+ /*
+ * IEEE 802.11 station scanning support.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/skbuff.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_wireless.c madwifi-0.9.2-neu/net80211/ieee80211_wireless.c
+--- madwifi-0.9.2/net80211/ieee80211_wireless.c 2006-07-06 05:23:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/ieee80211_wireless.c 2006-11-11 11:50:03.000000000 +0100
+@@ -39,7 +39,7 @@
+ /*
+ * Wireless extensions support for 802.11 common code.
+ */
+-#include <linux/config.h>
++
+
+ #ifdef CONFIG_NET_WIRELESS
+ #include <linux/version.h>
+diff -ur madwifi-0.9.2/net80211/ieee80211_xauth.c madwifi-0.9.2-neu/net80211/ieee80211_xauth.c
+--- madwifi-0.9.2/net80211/ieee80211_xauth.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/net80211/ieee80211_xauth.c 2006-11-11 11:50:03.000000000 +0100
+@@ -46,7 +46,7 @@
+ * of the available callbacks--the user mode authenticator process works
+ * entirely from messages about stations joining and leaving.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/net80211/if_media.c madwifi-0.9.2-neu/net80211/if_media.c
+--- madwifi-0.9.2/net80211/if_media.c 2006-05-31 23:05:08.000000000 +0200
++++ madwifi-0.9.2-neu/net80211/if_media.c 2006-11-11 11:50:03.000000000 +0100
+@@ -49,7 +49,7 @@
+ #define EXPORT_SYMTAB
+ #endif
+
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+diff -ur madwifi-0.9.2/regression/ccmp/test_ccmp.c madwifi-0.9.2-neu/regression/ccmp/test_ccmp.c
+--- madwifi-0.9.2/regression/ccmp/test_ccmp.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/ccmp/test_ccmp.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ * you want; e.g. insmod ccmp_test tests=7 will run only test mpdu's
+ * 1, 2, and 3.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/regression/tkip/test_tkip.c madwifi-0.9.2-neu/regression/tkip/test_tkip.c
+--- madwifi-0.9.2/regression/tkip/test_tkip.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/tkip/test_tkip.c 2006-11-11 11:50:02.000000000 +0100
+@@ -34,7 +34,7 @@
+ /*
+ * TKIP test module.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+diff -ur madwifi-0.9.2/regression/wep/test_wep.c madwifi-0.9.2-neu/regression/wep/test_wep.c
+--- madwifi-0.9.2/regression/wep/test_wep.c 2006-02-01 21:07:11.000000000 +0100
++++ madwifi-0.9.2-neu/regression/wep/test_wep.c 2006-11-11 11:50:02.000000000 +0100
+@@ -44,7 +44,7 @@
+ * you want; e.g. insmod wep_test tests=7 will run only test mpdu's
+ * 1, 2, and 3.
+ */
+-#include <linux/config.h>
++
+ #include <linux/version.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+--- madwifi-0.9.2/Makefile.inc~ 2006-07-14 07:15:56.000000000 +0200
++++ madwifi-0.9.2/Makefile.inc 2006-11-18 10:55:29.000000000 +0100
+@@ -181,7 +181,7 @@
+ #
+ TOOLS= $(DEPTH)/tools
+
+-COPTS+= -Werror
++#COPTS+= -Werror
+ INCS= -include $(obj)/$(DEPTH)/include/compat.h -I$(obj)/$(DEPTH)/include
+
+ ifeq ($(strip $(BUS)),AHB)
diff --git a/abs/core/madwifi/kernel-2.6.20.patch b/abs/core/madwifi/kernel-2.6.20.patch
new file mode 100644
index 0000000..ced7a23
--- /dev/null
+++ b/abs/core/madwifi/kernel-2.6.20.patch
@@ -0,0 +1,73 @@
+diff -urNad madwifi-0.9.2+r1842.20061207~/ath/if_ath.c madwifi-0.9.2+r1842.20061207/ath/if_ath.c
+--- madwifi-0.9.2+r1842.20061207~/ath/if_ath.c 2006-12-25 23:40:20.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/ath/if_ath.c 2006-12-25 23:40:20.968184598 +0900
+@@ -118,7 +118,11 @@
+ static void ath_rxorn_tasklet(TQUEUE_ARG);
+ static void ath_bmiss_tasklet(TQUEUE_ARG);
+ static void ath_bstuck_tasklet(TQUEUE_ARG);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ static void ath_radar_task(TQUEUE_ARG);
++#else
++static void ath_radar_task(struct work_struct *);
++#endif
+ static void ath_dfs_test_return(unsigned long);
+
+ static int ath_stop_locked(struct net_device *);
+@@ -414,8 +418,11 @@
+ ATH_INIT_TQUEUE(&sc->sc_bstucktq,ath_bstuck_tasklet, dev);
+ ATH_INIT_TQUEUE(&sc->sc_rxorntq, ath_rxorn_tasklet, dev);
+ ATH_INIT_TQUEUE(&sc->sc_fataltq, ath_fatal_tasklet, dev);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ ATH_INIT_SCHED_TASK(&sc->sc_radartask, ath_radar_task, dev);
+-
++#else
++ ATH_INIT_SCHED_TASK(&sc->sc_radartask, ath_radar_task);
++#endif
+ /*
+ * Attach the HAL and verify ABI compatibility by checking
+ * the HAL's ABI signature against the one the driver was
+@@ -1737,10 +1744,18 @@
+ }
+
+ static void
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ ath_radar_task(TQUEUE_ARG data)
++#else
++ath_radar_task(struct work_struct *work)
++#endif
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct net_device *dev = (struct net_device *)data;
+ struct ath_softc *sc = dev->priv;
++#else
++ struct ath_softc *sc = container_of(work, struct ath_softc, sc_radartask);
++#endif
+ struct ath_hal *ah = sc->sc_ah;
+ struct ieee80211com *ic = &sc->sc_ic;
+ struct ieee80211_channel ichan;
+diff -urNad madwifi-0.9.2+r1842.20061207~/ath/if_athvar.h madwifi-0.9.2+r1842.20061207/ath/if_athvar.h
+--- madwifi-0.9.2+r1842.20061207~/ath/if_athvar.h 2006-12-25 23:40:20.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/ath/if_athvar.h 2006-12-25 23:40:20.968184598 +0900
+@@ -84,7 +84,11 @@
+ #include <linux/workqueue.h>
+ #define ATH_SCHEDULE_TASK(t) schedule_work((t))
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ #define ATH_INIT_SCHED_TASK(_t, _f, _d) INIT_WORK((_t), (void (*)(void *))(_f), (void *)(_d));
++#else
++#define ATH_INIT_SCHED_TASK(_t, _f) INIT_WORK((_t), (_f));
++#endif
+
+ #define ATH_WORK_THREAD work_struct
+ #define ATH_FLUSH_TASKS flush_scheduled_work
+diff -urNad madwifi-0.9.2+r1842.20061207~/net80211/ieee80211_linux.h madwifi-0.9.2+r1842.20061207/net80211/ieee80211_linux.h
+--- madwifi-0.9.2+r1842.20061207~/net80211/ieee80211_linux.h 2006-08-05 11:05:05.000000000 +0900
++++ madwifi-0.9.2+r1842.20061207/net80211/ieee80211_linux.h 2006-12-25 23:40:50.452136942 +0900
+@@ -427,6 +427,7 @@
+ #define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
+ #endif
+
++#include <linux/mm.h>
+ #ifndef offset_in_page
+ #define offset_in_page(p) ((unsigned long) (p) & ~PAGE_MASK)
+ #endif \ No newline at end of file
diff --git a/abs/core/madwifi/madwifi-ng.install b/abs/core/madwifi/madwifi-ng.install
new file mode 100644
index 0000000..a4cac8b
--- /dev/null
+++ b/abs/core/madwifi/madwifi-ng.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ 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.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mailx/PKGBUILD b/abs/core/mailx/PKGBUILD
new file mode 100644
index 0000000..0041d2a
--- /dev/null
+++ b/abs/core/mailx/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=mailx
+pkgver=8.1.1
+pkgrel=14
+pkgdesc="A commandline utility for sending email"
+arch=(i686 x86_64)
+url="http://www.opengroup.org/onlinepubs/007908799/xcu/mailx.html"
+license=('BSD')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.archlinux.org/other/mailx/$pkgname-$pkgver-fixed.tar.gz \
+ mailx-$pkgver.patch mailx-gcc4.patch)
+md5sums=('63cad526ac64b57bcba2c0daaa1f3048' '905cfa35b5131524bfec0c677d456bd3'\
+ '8716c7c7b3f5d348443230e2fe543bf6')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver-fixed
+ patch -Np1 -i ../mailx-$pkgver.patch || return 1
+ patch -Np0 -i ../mailx-gcc4.patch || return 1
+ make all || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/mailx/mailx-8.1.1.patch b/abs/core/mailx/mailx-8.1.1.patch
new file mode 100644
index 0000000..2c0b777
--- /dev/null
+++ b/abs/core/mailx/mailx-8.1.1.patch
@@ -0,0 +1,32 @@
+diff -Naur mailx-8.1.1-fixed-orig/Makefile mailx-8.1.1-fixed/Makefile
+--- mailx-8.1.1-fixed-orig/Makefile Thu Mar 16 09:30:36 2000
++++ mailx-8.1.1-fixed/Makefile Wed Feb 27 12:50:09 2002
+@@ -7,18 +7,20 @@
+ BINOWN = root
+ BINGRP = mail
+
++DESTDIR =
++
+ all:
+ gcc $(SRCS) -o $(PROG)
+
+ install:
+- mkdir -p /usr/share/misc
+- mkdir -p /usr/share/man/man1
+- mkdir -p /etc
+- mkdir -p /usr/bin
+- install -o $(BINOWN) -g $(BINGRP) -m 2755 $(PROG) /usr/bin
+- install -o root -g root -m 644 mail.1 /usr/share/man/man1
++ mkdir -p $(DESTDIR)/usr/share/misc
++ mkdir -p $(DESTDIR)/usr/man/man1
++ mkdir -p $(DESTDIR)/etc
++ mkdir -p $(DESTDIR)/usr/bin
++ install -o $(BINOWN) -g $(BINGRP) -m 2755 $(PROG) $(DESTDIR)/usr/bin
++ install -o root -g root -m 644 mail.1 $(DESTDIR)/usr/man/man1
+ cd misc; install -c -o ${BINOWN} -g ${BINGRP} \
+- -m 444 ${SFILES} /usr/share/misc
++ -m 444 ${SFILES} $(DESTDIR)/usr/share/misc
+ cd misc; install -c -o root -g root \
+- -m 644 ${EFILES} /etc
++ -m 644 ${EFILES} $(DESTDIR)/etc
+
diff --git a/abs/core/mailx/mailx-gcc4.patch b/abs/core/mailx/mailx-gcc4.patch
new file mode 100644
index 0000000..54740a2
--- /dev/null
+++ b/abs/core/mailx/mailx-gcc4.patch
@@ -0,0 +1,12 @@
+K. Piche: Unofficial patch for mailx.
+
+--- dotlock.c.orig 2005-09-18 20:28:20.000000000 -0400
++++ dotlock.c 2005-09-18 20:26:59.000000000 -0400
+@@ -47,6 +47,7 @@
+ #include <errno.h>
+ #include <signal.h>
+
++#include "def.h"
+ #include "extern.h"
+
+ #ifndef O_SYNC
diff --git a/abs/core/man-pages/PKGBUILD b/abs/core/man-pages/PKGBUILD
new file mode 100644
index 0000000..b9df3f5
--- /dev/null
+++ b/abs/core/man-pages/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 10358 2008-08-27 16:05:22Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=man-pages
+pkgver=3.08
+_posixver=2003-a
+pkgrel=10
+pkgdesc="Linux man pages"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.kernel.org/doc/man-pages/"
+groups=('base')
+depends=()
+source=(http://www.kernel.org/pub/linux/docs/man-pages/$pkgname-$pkgver.tar.gz
+ http://www.kernel.org/pub/linux/docs/man-pages/man-pages-posix/$pkgname-posix-${_posixver}.tar.bz2)
+md5sums=('951bc4cc585b59164557763431151569'
+ '7c78aff03c0a6767ba483d34f19e4b09')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make prefix=$startdir/pkg/usr install || return 1
+
+ cd $startdir/src/$pkgname-posix-${_posixver}
+ make prefix=$startdir/pkg/usr install || return 1
+
+ cd $startdir/pkg/usr/share/man
+ # these are included in coreutils || return 1
+ rm -f man1/{chgrp,chmod,chown,cp,dir,dd}.1 || return 1
+ rm -f man1/{df,dircolors,du,install,ln,ls}.1 || return 1
+ rm -f man1/{mkdir,mkfifo,mknod,mv,rm,rmdir}.1 || return 1
+ rm -f man1/{touch,vdir}.1 || return 1
+ # this is included in shadow
+ rm -f man5/passwd.5 || return 1
+ rm -f man3/getspnam.3 || return 1
+ # this is included in diffutils
+ rm -f man1/diff.1 || return 1
+ # this is included in xf86-input-mouse
+ rm -f man4/mouse.4 || return 1
+ # these are included in module-init-tools
+ rm -f man2/{create_module,delete_module,get_kernel_syms}.2 || return 1
+ rm -f man2/{init_module,query_module}.2 || return 1
+}
diff --git a/abs/core/man/PKGBUILD b/abs/core/man/PKGBUILD
new file mode 100644
index 0000000..6cb2bf0
--- /dev/null
+++ b/abs/core/man/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=man
+pkgver=1.6f
+pkgrel=11
+pkgdesc="A utility for reading man pages"
+arch=('i686' 'x86_64')
+url="http://primates.ximian.com/~flucifredi/man/"
+license=('GPL')
+groups=('base')
+depends=('groff' 'less' 'gzip' 'awk' 'coreutils' 'sh' 'diffutils')
+backup=(etc/man.conf)
+source=(http://primates.ximian.com/~flucifredi/man/man-$pkgver.tar.gz \
+ whatis.cron.daily man-troff.patch)
+md5sums=('67aaaa6df35215e812fd7d89472c44b6'
+ 'b86a5f2dd87c6be30421a8813547229d'
+ '21541cb3073259f7fb9335675ca41b0e')
+options=(!emptydirs)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../man-troff.patch || return 1
+ ./configure -confdir='/etc' -d +lang all -mandir=/usr/share/man
+ make || return 1
+ make PREFIX=$startdir/pkg install || return 1
+
+ sed -i "s|-Tlatin1||g" $startdir/pkg/etc/man.conf
+
+ #install whatis cron script
+ install -D -m744 ../whatis.cron.daily $startdir/pkg/etc/cron.daily/whatis
+}
diff --git a/abs/core/man/man-troff.patch b/abs/core/man/man-troff.patch
new file mode 100644
index 0000000..e08e931
--- /dev/null
+++ b/abs/core/man/man-troff.patch
@@ -0,0 +1,16 @@
+diff -Naur man-1.5p-orig/src/man.conf.in man-1.5p/src/man.conf.in
+--- man-1.5p-orig/src/man.conf.in 2005-01-08 10:50:45.000000000 -0800
++++ man-1.5p/src/man.conf.in 2005-03-18 13:22:17.000000000 -0800
+@@ -88,9 +88,9 @@
+ # If you have a new troff (version 1.18.1?) and its colored output
+ # causes problems, add the -c option to TROFF, NROFF, JNROFF.
+ #
+-TROFF @troff@
+-NROFF @nroff@
+-JNROFF @jnroff@
++TROFF @troff@ -c
++NROFF @nroff@ -c
++JNROFF @jnroff@ -c
+ EQN @eqn@
+ NEQN @neqn@
+ JNEQN @jneqn@
diff --git a/abs/core/man/whatis.cron.daily b/abs/core/man/whatis.cron.daily
new file mode 100755
index 0000000..6332d80
--- /dev/null
+++ b/abs/core/man/whatis.cron.daily
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Make sure MANPATH is complete
+source /etc/profile
+source /etc/profile.d/* 2>/dev/null
+
+# Update the "whatis" database
+/usr/sbin/makewhatis -u -w
+
diff --git a/abs/core/mcpp/PKGBUILD b/abs/core/mcpp/PKGBUILD
new file mode 100644
index 0000000..9d0afce
--- /dev/null
+++ b/abs/core/mcpp/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=mcpp
+pkgver=2.6.4
+pkgrel=2
+pkgdesc="Matsui's CPP implementation precisely conformed to standards"
+arch=(i686 x86_64)
+license=('custom:')
+url="http://mcpp.sourceforge.net"
+source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz \
+ mcpp-2.6.4-patch)
+depends=(glibc)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ${startdir}/src/mcpp-2.6.4-patch || return 1
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ mkdir -p ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/LICENSE \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
+md5sums=('c0f5aa9b13e36ea0f2ab9358c5d65153'
+ '80890eb2988d7e80964b814cf134f842')
diff --git a/abs/core/mcpp/mcpp-2.6.4-patch b/abs/core/mcpp/mcpp-2.6.4-patch
new file mode 100644
index 0000000..bbdf09c
--- /dev/null
+++ b/abs/core/mcpp/mcpp-2.6.4-patch
@@ -0,0 +1,22 @@
+*** src/support.c.orig 2007-05-18 21:31:17.000000000 +0900
+--- src/support.c 2007-09-17 22:11:27.000000000 +0900
+***************
+*** 1678,1686 ****
+ , NULL, (long) c, NULL);
+ case '\t': /* Horizontal space */
+ case ' ':
+! if (mcpp_mode == OLD_PREP) {
+! if ((*(tp - 1) != ' ' && *(tp - 1) != COM_SEP))
+! *(tp - 1) = ' '; /* Squeeze COM_SEP with spaces */
+ } else {
+ if (*(tp - 1) != ' ')
+ *tp++ = ' '; /* Squeeze white spaces */
+--- 1678,1685 ----
+ , NULL, (long) c, NULL);
+ case '\t': /* Horizontal space */
+ case ' ':
+! if (mcpp_mode == OLD_PREP && (*(tp - 1) == COM_SEP)) {
+! *(tp - 1) = ' '; /* Squeeze COM_SEP with spaces */
+ } else {
+ if (*(tp - 1) != ' ')
+ *tp++ = ' '; /* Squeeze white spaces */
diff --git a/abs/core/mdadm/PKGBUILD b/abs/core/mdadm/PKGBUILD
new file mode 100644
index 0000000..13c5c98
--- /dev/null
+++ b/abs/core/mdadm/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=mdadm
+pkgver=2.6.4
+pkgrel=10
+pkgdesc="A tool for managing/monitoring Linux md device arrays, also known as Software RAID"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.cse.unsw.edu.au/~neilb/source/mdadm/"
+groups=('base')
+depends=('glibc')
+backup=('etc/mdadm.conf')
+source=(ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/mdadm-$pkgver.tar.bz2 \
+ mdadm mdadm.conf raid-partitions_install raid-partitions_hook)
+replaces=('raidtools')
+md5sums=('b616697aecc870d5d580bd6e010472a3'
+ '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
+ rm mdadm
+ make LDFLAGS+=-static || return 1
+ install -D -m755 mdadm $startdir/pkg/sbin/mdadm.static
+}
diff --git a/abs/core/mdadm/mdadm b/abs/core/mdadm/mdadm
new file mode 100755
index 0000000..e196f36
--- /dev/null
+++ b/abs/core/mdadm/mdadm
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /sbin/mdadm`
+case "$1" in
+ start)
+ stat_busy "Starting mdadm RAID Monitor"
+ if [ -z "$PID" ]; then
+ /sbin/mdadm --monitor --scan -i /var/run/mdadm.pid -f
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon mdadm
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping mdadm RAID Monitor"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mdadm
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/core/mdadm/mdadm-2.2-segfault.patch b/abs/core/mdadm/mdadm-2.2-segfault.patch
new file mode 100644
index 0000000..d956a20
--- /dev/null
+++ b/abs/core/mdadm/mdadm-2.2-segfault.patch
@@ -0,0 +1,12 @@
+diff -Naur mdadm-2.2-orig/Assemble.c mdadm-2.2/Assemble.c
+--- mdadm-2.2-orig/Assemble.c 2005-12-04 21:56:20.000000000 -0800
++++ mdadm-2.2/Assemble.c 2006-02-06 10:56:37.000000000 -0800
+@@ -219,7 +219,7 @@
+ }
+ if (dfd >= 0) close(dfd);
+
+- if (ident->uuid_set && (!update && strcmp(update, "uuid")!= 0) &&
++ if (ident->uuid_set && (!update || strcmp(update, "uuid")!= 0) &&
+ (!super || same_uuid(info.uuid, ident->uuid, tst->ss->swapuuid)==0)) {
+ if ((inargv && verbose >= 0) || verbose > 0)
+ fprintf(stderr, Name ": %s has wrong uuid.\n",
diff --git a/abs/core/mdadm/mdadm.conf b/abs/core/mdadm/mdadm.conf
new file mode 100644
index 0000000..0b2c712
--- /dev/null
+++ b/abs/core/mdadm/mdadm.conf
@@ -0,0 +1,64 @@
+# mdadm configuration file
+#
+# mdadm will function properly without the use of a configuration file,
+# but this file is useful for keeping track of arrays and member disks.
+# In general, a mdadm.conf file is created, and updated, after arrays
+# are created. This is the opposite behavior of /etc/raidtab which is
+# created prior to array construction.
+#
+#
+# the config file takes two types of lines:
+#
+# DEVICE lines specify a list of devices of where to look for
+# potential member disks
+#
+# ARRAY lines specify information about how to identify arrays so
+# so that they can be activated
+#
+
+
+# You can have more than one device line and use wild cards. The first
+# example includes SCSI the first partition of SCSI disks /dev/sdb,
+# /dev/sdc, /dev/sdd, /dev/sdj, /dev/sdk, and /dev/sdl. The second
+# line looks for array slices on IDE disks.
+#
+#DEVICE /dev/sd[bcdjkl]1
+#DEVICE /dev/hda1 /dev/hdb1
+#
+# The designation "partitions" will scan all partitions found in
+# /proc/partitions
+DEVICE partitions
+
+
+# ARRAY lines specify an array to assemble and a method of identification.
+# Arrays can currently be identified by using a UUID, superblock minor number,
+# or a listing of devices.
+#
+# super-minor is usually the minor number of the metadevice
+# UUID is the Universally Unique Identifier for the array
+# Each can be obtained using
+#
+# mdadm -D <md>
+#
+# To capture the UUIDs for all your RAID arrays to this file, run this:
+# # mdadm -D --scan >>/etc/mdadm.conf
+#
+#ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371
+#ARRAY /dev/md1 super-minor=1
+#ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1
+#
+# ARRAY lines can also specify a "spare-group" for each array. mdadm --monitor
+# will then move a spare between arrays in a spare-group if one array has a
+# failed drive but no spare
+#ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1
+#ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1
+#
+
+
+# When used in --follow (aka --monitor) mode, mdadm needs a
+# mail address and/or a program. To start mdadm's monitor mode, add
+# "mdadm" to your DAEMONS array in /etc/rc.conf
+#
+# If the lines are not found, mdadm will exit quietly
+#MAILADDR root@mydomain.tld
+#PROGRAM /usr/sbin/handle-mdadm-events
diff --git a/abs/core/mdadm/raid-partitions_hook b/abs/core/mdadm/raid-partitions_hook
new file mode 100644
index 0000000..bed1cb2
--- /dev/null
+++ b/abs/core/mdadm/raid-partitions_hook
@@ -0,0 +1,21 @@
+# vim: set ft=sh:
+run_hook ()
+{
+ #TODO scan for these somehow...
+ /sbin/modprobe -aq linear multipath raid0 raid1 raid456 raid10>/dev/null 2>&1
+ # md= can be specified multiple times. The simplistic commandline
+ # parsing does not handle this, so we will let mdassemble parse it
+ for i in $(replace $(echo $md) ',' ' '); do
+ case $i in d[0-9])
+ for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
+ /sbin/mdadm --create -a mdp /dev/md_d$i >/dev/null 2>&1
+ done
+ mdadm --assemble --auto=mdp /dev/md_$(replace $(echo $md) ',' ' ')
+ export USE_RAID_ARRAY=1
+ ;;
+ esac
+ done
+ if ! [ "$USE_RAID_ARRAY" = "1" ] ; then
+ /bin/mdassemble ${CMDLINE}
+ fi
+}
diff --git a/abs/core/mdadm/raid-partitions_install b/abs/core/mdadm/raid-partitions_install
new file mode 100644
index 0000000..8fe5184
--- /dev/null
+++ b/abs/core/mdadm/raid-partitions_install
@@ -0,0 +1,32 @@
+# vim: set ft=sh:
+
+install ()
+{
+ MODULES=" $(checked_modules "drivers/md/*" | grep -v "dm-") "
+ BINARIES="mdadm"
+ FILES=""
+ SCRIPT="raid-partitions"
+ add_file "/usr/lib/klibc/bin/mdassemble" "/bin/mdassemble"
+}
+
+help ()
+{
+cat<<HELPEOF
+ This hook loads the necessary modules for an raid mdp/partitionable root device,
+ and assemble the raid device when run.
+
+ Kernel Parameters:
+ Specify all your md arrays with md= parameter:
+ ::: Example ::: md=d0,/dev/sda3,/dev/sda4 md=d1,/dev/hda1,/dev/hdb1
+ This will setup 2 md partitionable arrays
+
+ Setup:
+ - to assemble a partitionable array:
+ md=d<md device no.>,dev0,dev1,...,devn
+
+ Parameters:
+ - <md device no.> = the number of the md device:
+ 0 means md0, 1 means md1, ...
+ - <dev0-devn>: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1
+HELPEOF
+}
diff --git a/abs/core/mesa/PKGBUILD b/abs/core/mesa/PKGBUILD
new file mode 100644
index 0000000..9d36715
--- /dev/null
+++ b/abs/core/mesa/PKGBUILD
@@ -0,0 +1,63 @@
+# $Id: PKGBUILD 3486 2008-06-22 21:12:34Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=mesa
+pkgver=7.0.3
+pkgrel=3
+pkgdesc="Mesa OpenGL library"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://mesa3d.sourceforge.net"
+depends=('libgl' 'glproto>=1.4.9' 'gcc-libs' 'libxt')
+makedepends=('imake' 'pkgconfig')
+conflicts=('mesa-apps')
+replaces=('mesa-apps')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaDemos-${pkgver}.tar.bz2
+ ftp://ftp.archlinux.org/other/mesa/gl-manpages-1.0.1.tar.bz2
+ mesa-6.5-apps-noglut.patch)
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e'
+ '47fd6863621d3c9c7dbb870ab7f0c303'
+ '6ae05158e678f4594343f32c2ca50515'
+ 'cc5a4ea4ea8de4425997fcda2a9d8648')
+
+build() {
+ cd ${startdir}/src/Mesa-${pkgver}
+ patch -Np0 -i ${startdir}/src/mesa-6.5-apps-noglut.patch || return 1
+
+ unset CFLAGS
+ unset CXXFLAGS
+
+ CONFIG="linux-dri-x86"
+ if [ "${CARCH}" = "x86_64" ]; then
+ CONFIG="linux-dri-x86-64"
+ sed -i -e "s/lib64/lib/g" configs/${CONFIG}
+ fi
+ echo "EXTRA_LIB_PATH =" >> configs/${CONFIG}
+ echo "SRC_DIRS = glx/x11 glu glw" >> configs/${CONFIG}
+ rm -f include/GL/glut*h
+ echo "USING_EGL = 0" >> configs/${CONFIG}
+ echo "PROGRAM_DIRS =" >> configs/${CONFIG}
+ echo "MKDEP = makedepend" >> configs/${CONFIG}
+ echo "DRI_DIRS =" >> configs/${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> configs/${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> configs/${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> configs/${CONFIG}
+
+ make ${CONFIG} || return 1
+ install -m755 -d ${startdir}/pkg/usr
+ make INSTALL_DIR=${startdir}/pkg/usr install || return 1
+ install -m644 include/GL/*.h ${startdir}/pkg/usr/include/GL/ || return 1
+
+ rm -f ${startdir}/pkg/usr/lib/libGL.so*
+ cd progs/xdemos
+ make CFLAGS+="-I${startdir}/pkg/usr/include" glxinfo glxgears || return 1
+ install -m755 -d ${startdir}/pkg/usr/bin || return 1
+ install -m755 glxinfo glxgears ${startdir}/pkg/usr/bin/ || return 1
+
+ cd ${startdir}/src/gl-manpages-1.0.1
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/mesa/mesa-6.5-apps-noglut.patch b/abs/core/mesa/mesa-6.5-apps-noglut.patch
new file mode 100644
index 0000000..ac76a60
--- /dev/null
+++ b/abs/core/mesa/mesa-6.5-apps-noglut.patch
@@ -0,0 +1,17 @@
+--- progs/xdemos/Makefile.dont-libglut-me-harder-ok-thx-bye 2006-07-25 05:27:36.000000000 -0400
++++ progs/xdemos/Makefile 2006-07-25 05:33:57.000000000 -0400
+@@ -49,8 +49,13 @@
+ -rm -f $(PROGS)
+ -rm -f *.o *~
+
+-
+ # special cases
++glxgears:
++ $(CC) $(CFLAGS) glxgears.c -lGL -o $@
++
++glxinfo:
++ $(CC) $(CFLAGS) -I$(INCDIR) glxinfo.c -L$(TOP)/lib -L$(TOP)/lib64 -lGL -lGLU -o $@
++
+ pbinfo: pbinfo.o pbutil.o
+ $(CC) $(CFLAGS) pbinfo.o pbutil.o $(APP_LIB_DEPS) -o $@
+
diff --git a/abs/core/mkinitcpio/PKGBUILD b/abs/core/mkinitcpio/PKGBUILD
new file mode 100644
index 0000000..2de6daf
--- /dev/null
+++ b/abs/core/mkinitcpio/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 1779 2008-05-19 16:02:05Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=mkinitcpio
+pkgver=0.5.19
+pkgrel=10
+pkgdesc="Advanced, modular initramfs image creation utility"
+arch=(i686 x86_64)
+url="http://www.archlinux.org/"
+license=('GPL')
+groups=('base')
+depends=('klibc>=1.5-5' 'klibc-extras>=2.4' 'klibc-udev>=116-3'
+ 'gen-init-cpio' 'klibc-module-init-tools' 'coreutils'
+ 'bash' 'klibc-kbd')
+#makedepends=('asciidoc')
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+backup=(etc/mkinitcpio.conf)
+replaces=('mkinitrd' 'mkinitramfs')
+md5sums=('e2398505a28bbdb985b72fc0c4a18216')
+
+build()
+{
+ cd $startdir/src/${pkgname}-${pkgver}
+ ./install.sh $startdir/pkg
+}
diff --git a/abs/core/mlocate/PKGBUILD b/abs/core/mlocate/PKGBUILD
new file mode 100644
index 0000000..50db92b
--- /dev/null
+++ b/abs/core/mlocate/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 1939 2008-05-24 00:35:29Z james $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: lydgate
+
+pkgname=mlocate
+pkgver=0.20
+pkgrel=11
+pkgdesc="Faster merging drop-in for slocate"
+arch=(i686 x86_64)
+url="http://carolina.mff.cuni.cz/~trmac/blog/mlocate"
+license=("GPL")
+groups=("base")
+conflicts=('slocate')
+provides=('slocate')
+replaces=('slocate')
+depends=('glibc')
+backup=('etc/updatedb.conf')
+install=mlocate.install
+source=("https://fedorahosted.org/mlocate/attachment/wiki/MlocateDownloads/mlocate-$pkgver.tar.bz2?format=raw" \
+ updatedb.conf updatedb.cron.daily)
+build() {
+ cd "$startdir"/src/$pkgname-$pkgver
+
+ # Build!
+ sed -i '/^groupname /s/mlocate/locate/' Makefile.in
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib
+ make || return 1
+
+ # Set up a default updatedb.conf and a daily cronjob
+ install -v -D -m644 ../updatedb.conf "$startdir"/pkg/etc/updatedb.conf
+ install -v -D -m744 ../updatedb.cron.daily "$startdir"/pkg/etc/cron.daily/updatedb
+
+ # Install Mlocate
+ make DESTDIR="$startdir"/pkg install
+
+ cd "$startdir"/pkg
+ ln -sv locate usr/bin/slocate
+ chgrp -v 21 usr/bin/locate
+ chmod -v 2755 usr/bin/locate
+
+ mkdir -pv var/lib
+ install -d -m750 -g21 var/lib/locate
+}
+
+md5sums=('ad5e4eb1f2aecf1a5af9fe36c6e297f4'
+ '08f642828fe8a6a0c8e5059133c9a9e2'
+ 'eee7f9db8c6145724313af6fd5fe9d66')
diff --git a/abs/core/mlocate/mlocate.db b/abs/core/mlocate/mlocate.db
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/core/mlocate/mlocate.db
diff --git a/abs/core/mlocate/mlocate.install b/abs/core/mlocate/mlocate.install
new file mode 100644
index 0000000..d29e4d8
--- /dev/null
+++ b/abs/core/mlocate/mlocate.install
@@ -0,0 +1,27 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade "$1" "$1"
+ echo "mlocate command is technically locate, but slocate is symlinked and still works."
+ echo "You should run updatedb as root."
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # This can be removed after {m,x}locate have both been updated
+ getent group slocate &>/dev/null && usr/sbin/groupdel slocate &>/dev/null
+ getent group mlocate &>/dev/null && usr/sbin/groupdel mlocate &>/dev/null
+
+ getent group locate || usr/sbin/groupadd -g 21 locate &>/dev/null
+ chown -R root:locate var/lib/mlocate
+}
+
+# arg 1: the old package version
+pre_remove() {
+ getent group locate &>/dev/null && usr/sbin/groupdel locate &>/dev/null
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/mlocate/updatedb.conf b/abs/core/mlocate/updatedb.conf
new file mode 100644
index 0000000..f02fe97
--- /dev/null
+++ b/abs/core/mlocate/updatedb.conf
@@ -0,0 +1,5 @@
+# directories to exclude from the slocate database:
+PRUNEPATHS="/tmp /var/tmp /usr/tmp /var/spool /var/cache"
+
+# filesystems to exclude from the slocate database:
+PRUNEFS="nfs nfs4 smbfs cifs ncpfs afs proc autofs auto iso9660 coda ftpfs sshfs shfs"
diff --git a/abs/core/mlocate/updatedb.cron.daily b/abs/core/mlocate/updatedb.cron.daily
new file mode 100755
index 0000000..b457cf8
--- /dev/null
+++ b/abs/core/mlocate/updatedb.cron.daily
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Update the "locate" database
+if [ -x /usr/bin/updatedb ]; then
+ if [ -f /etc/updatedb.conf ]; then
+ /usr/bin/updatedb
+ else
+ /usr/bin/updatedb -f proc
+ fi
+fi
diff --git a/abs/core/module-init-tools/PKGBUILD b/abs/core/module-init-tools/PKGBUILD
new file mode 100644
index 0000000..b4260d1
--- /dev/null
+++ b/abs/core/module-init-tools/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 5982 2008-07-22 12:44:28Z thomas $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=module-init-tools
+pkgver=3.4
+pkgrel=10
+pkgdesc="Utilities for inserting and removing modules from the Linux kernel"
+arch=(i686 x86_64)
+url="http://www.kernel.org"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+backup=('etc/modprobe.conf')
+source=(http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-$pkgver.tar.bz2
+ ftp://sunsite.informatik.rwth-aachen.de/pub/linux/gentoo/distfiles/module-init-tools-$pkgver-manpages.tar.bz2
+ makefile.patch
+ modprobe.conf
+ fix-modprobe-ignore-path.patch)
+md5sums=('db6ac059e80e8dd4389dbe81ee61f3c6'
+ '006678277788b5a0402b171f4a235cd6'
+ '47e14fda7a46668290d11d0444d81826'
+ '6db59d41e04941a790f80c1a4432faef'
+ '335c3f8317f257ddd70b09271b4360bd')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../makefile.patch
+ patch -Np0 -i ../fix-modprobe-ignore-path.patch || return 1
+ sed -i 's|/usr/bin/install|/bin/install|g' install-with-care
+ ./configure --prefix=/usr --exec-prefix=/
+ make || return 1
+ INSTALL=/bin/install make DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 ../modprobe.conf $startdir/pkg/etc/modprobe.conf
+}
diff --git a/abs/core/module-init-tools/fix-modprobe-ignore-path.patch b/abs/core/module-init-tools/fix-modprobe-ignore-path.patch
new file mode 100644
index 0000000..c562b3f
--- /dev/null
+++ b/abs/core/module-init-tools/fix-modprobe-ignore-path.patch
@@ -0,0 +1,14 @@
+--- modprobe.c~ 2005-12-02 00:42:09.000000000 +0100
++++ modprobe.c 2008-03-12 09:39:14.000000000 +0100
+@@ -1236,9 +1236,8 @@
+
+ /* Try defaults. */
+ for (i = 0; i < ARRAY_SIZE(default_configs); i++) {
+- if (read_config(default_configs[i], name, dump_only, removing,
+- options, commands, aliases, blacklist))
+- return;
++ read_config(default_configs[i], name, dump_only, removing,
++ options, commands, aliases, blacklist);
+ }
+ }
+
diff --git a/abs/core/module-init-tools/makefile.patch b/abs/core/module-init-tools/makefile.patch
new file mode 100644
index 0000000..458b062
--- /dev/null
+++ b/abs/core/module-init-tools/makefile.patch
@@ -0,0 +1,22 @@
+diff -Naur module-init-tools-3.1-orig/Makefile.in module-init-tools-3.1/Makefile.in
+--- module-init-tools-3.1-orig/Makefile.in 2004-11-14 16:59:48.000000000 -0800
++++ module-init-tools-3.1/Makefile.in 2004-11-19 11:09:36.000000000 -0800
+@@ -704,18 +704,8 @@
+
+ # docbook2man writes file itself, doesn't do stdout.
+ %.8: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+
+ %.5: doc/%.sgml
+- if [ "$(DOCBOOKTOMAN)" = "docbook2man" ]; then \
+- $(DOCBOOKTOMAN) $< > /dev/null 2>&1; \
+- else \
+- $(DOCBOOKTOMAN) $< 2>&1 > $@ | sed 's/^[^:]*://'; \
+- fi
+
+ # docbook2man creates extra crap files which need cleaning.
+ distclean: killbuildmanpages
diff --git a/abs/core/module-init-tools/modprobe.conf b/abs/core/module-init-tools/modprobe.conf
new file mode 100644
index 0000000..d2fc24b
--- /dev/null
+++ b/abs/core/module-init-tools/modprobe.conf
@@ -0,0 +1,3 @@
+#
+# /etc/modprobe.conf (for v2.6 kernels)
+#
diff --git a/abs/core/module-init-tools/modutils-gcc4.patch b/abs/core/module-init-tools/modutils-gcc4.patch
new file mode 100644
index 0000000..3f90a9b
--- /dev/null
+++ b/abs/core/module-init-tools/modutils-gcc4.patch
@@ -0,0 +1,280 @@
+Fix building with newer gcc versions.
+
+Most changes taken from Debian.
+
+--- obj/obj_ia64.c
++++ obj/obj_ia64.c
+@@ -127,6 +127,7 @@
+ return (*(bundle + 1) >> 23) & 0x1ffffffffff;
+
+ default:
++ ;
+ }
+ return (-1);
+ }
+--- depmod/depmod.c
++++ depmod/depmod.c
+@@ -1133,7 +1133,7 @@
+
+ for (ksym = ksyms; so_far < nksyms; ++so_far, ksym++) {
+ if (strncmp((char *)ksym->name, "GPLONLY_", 8) == 0)
+- ((char *)ksym->name) += 8;
++ ksym->name = ((char *)ksym->name) + 8;
+ assert(n_syms < MAX_MAP_SYM);
+ symtab[n_syms++] = addsym((char *)ksym->name, mod, SYM_DEFINED, 0);
+ }
+@@ -1265,7 +1265,7 @@
+ * error. Use the error() routine but do not count
+ * any errors. Remove in 2.5.
+ */
+- int save_errors = errors;
++ int save_errors = error_count;
+ if (!quiet && nberr == 0)
+ error("*** Unresolved symbols in %s",
+ ptmod->name);
+@@ -1274,7 +1274,7 @@
+ nberr++;
+ if (flag_unresolved_error)
+ ret = 1;
+- errors = save_errors;
++ error_count = save_errors;
+ }
+ }
+ verbose("%s\n", ptmod->name + skipchars);
+@@ -1675,6 +1675,6 @@
+ #else
+ int main(int argc, char **argv)
+ {
+- return depmod_main(argc, argv) || errors;
++ return depmod_main(argc, argv) || error_count;
+ }
+ #endif /* defined(COMMON_3264) && defined(ONLY_32) */
+--- genksyms/genksyms.c
++++ genksyms/genksyms.c
+@@ -45,7 +45,7 @@
+ int flag_debug, flag_dump_defs, flag_warnings;
+ int checksum_version = 1, kernel_version = version(2,0,0);
+
+-static int errors;
++static int num_errors;
+ static int nsyms;
+
+ static struct symbol *expansion_trail;
+@@ -458,7 +458,7 @@
+ va_end(args);
+ putc('\n', stderr);
+
+- errors++;
++ num_errors++;
+ }
+ }
+
+@@ -476,7 +476,7 @@
+ va_end(args);
+ putc('\n', stderr);
+
+- errors++;
++ num_errors++;
+ }
+ }
+
+@@ -597,5 +597,5 @@
+ nsyms, HASH_BUCKETS, (double)nsyms / (double)HASH_BUCKETS);
+ }
+
+- return errors != 0;
++ return num_errors != 0;
+ }
+--- include/util.h
++++ include/util.h
+@@ -39,8 +39,8 @@
+ extern int xftw(const char *directory, xftw_func_t);
+
+ /* Error logging */
+-extern int log;
+-extern int errors;
++extern int logging;
++extern int error_count;
+ extern const char *error_file;
+
+ extern int flag_verbose;
+--- insmod/insmod.c
++++ insmod/insmod.c
+@@ -275,7 +275,7 @@
+ if (strncmp((char *)s->name, "GPLONLY_", 8) == 0) {
+ gplonly_seen = 1;
+ if (gpl)
+- ((char *)s->name) += 8;
++ s->name = ((char *)s->name) + 8;
+ else
+ continue;
+ }
+@@ -1679,7 +1679,7 @@
+ error_file = "insmod";
+
+ /* To handle repeated calls from combined modprobe */
+- errors = optind = 0;
++ error_count = optind = 0;
+
+ /* Process the command line. */
+ while ((o = getopt_long(argc, argv, "fhkLmnpqrsSvVxXyYNe:o:O:P:R:",
+@@ -2064,7 +2064,7 @@
+ goto out;
+ /**** No symbols or sections to be changed after kallsyms above ***/
+
+- if (errors)
++ if (error_count)
+ goto out;
+
+ /* If we were just checking, we made it. */
+@@ -2123,10 +2123,10 @@
+ test_read.m.read_start = m_addr + sizeof(struct module);
+ test_read.m.read_end = test_read.m.read_start + sizeof(test_read.data);
+ if (sys_init_module(m_name, (struct module *) &test_read)) {
+- int old_errors = errors;
++ int old_errors = error_count;
+ error("has persistent data but the kernel is too old to support it."
+ " Expect errors during rmmod as well");
+- errors = old_errors;
++ error_count = old_errors;
+ }
+ }
+
+@@ -2152,7 +2152,7 @@
+ #else
+ init_module(m_name, f, m_size, blob_name, noload, flag_load_map);
+ #endif
+- if (errors) {
++ if (error_count) {
+ if (!noload)
+ delete_module(m_name);
+ goto out;
+--- insmod/kallsyms.c
++++ insmod/kallsyms.c
+@@ -80,7 +80,7 @@
+ error_file = "kallsyms";
+
+ /* To handle repeated calls from combined modprobe */
+- errors = optind = 0;
++ error_count = optind = 0;
+
+ /* Process the command line. */
+ while ((c = getopt_long(argc, argv, "Vh",
+--- insmod/modprobe.c
++++ insmod/modprobe.c
+@@ -1023,7 +1023,7 @@
+ if (quiet)
+ my_argv[my_argc++] = "-q";
+
+- if (log)
++ if (logging)
+ my_argv[my_argc++] = "-s";
+
+ if (insmod_opt) {
+--- insmod/rmmod.c
++++ insmod/rmmod.c
+@@ -261,9 +261,9 @@
+ read_parm.m.read_start = mp->sym->value;
+ read_parm.m.read_end = read_parm.m.read_start + datasize;
+ if (sys_init_module(module, (struct module *) &read_parm)) {
+- int old_errors = errors;
++ int old_errors = error_count;
+ error("has persistent data but the kernel is too old to support it.");
+- errors = old_errors;
++ error_count = old_errors;
+ return(0);
+ }
+
+--- util/logger.c
++++ util/logger.c
+@@ -31,10 +31,10 @@
+
+ /*======================================================================*/
+
+-int log;
++int logging;
+ static int silent;
+
+-int errors;
++int error_count;
+ const char *error_file;
+ const char *program_name;
+
+@@ -75,7 +75,7 @@
+
+ if (silent)
+ ;
+- else if (log) {
++ else if (logging) {
+ char buf[2*PATH_MAX];
+ int n;
+
+@@ -100,7 +100,7 @@
+ putc('\n', stderr);
+ }
+
+- errors++;
++ error_count++;
+ }
+
+ void lprintf(const char *fmt,...)
+@@ -108,7 +108,7 @@
+ va_list args;
+
+ if (silent);
+- else if (log) {
++ else if (logging) {
+ char buf[2*PATH_MAX];
+ va_start(args, fmt);
+ vsnprintf(buf, sizeof(buf), fmt, args);
+@@ -132,5 +132,5 @@
+ #ifdef STOREMSG
+ atexit(dumpmsg);
+ #endif
+- log = 1;
++ logging = 1;
+ }
+--- obj/obj_kallsyms.c
++++ obj/obj_kallsyms.c
+@@ -200,8 +200,8 @@
+
+ /* Initial contents, header + one entry per input section. No strings. */
+ osec->header.sh_size = sizeof(*a_hdr) + loaded*sizeof(*a_sec);
+- a_hdr = (struct kallsyms_header *) osec->contents =
+- xmalloc(osec->header.sh_size);
++ osec->contents = xmalloc(osec->header.sh_size);
++ a_hdr = (struct kallsyms_header *) osec->contents;
+ memset(osec->contents, 0, osec->header.sh_size);
+ a_hdr->size = sizeof(*a_hdr);
+ a_hdr->sections = loaded;
+@@ -275,8 +275,8 @@
+ a_hdr->symbol_off +
+ a_hdr->symbols*a_hdr->symbol_size +
+ strings_size - strings_left;
+- a_hdr = (struct kallsyms_header *) osec->contents =
+- xrealloc(a_hdr, a_hdr->total_size);
++ osec->contents = xrealloc(a_hdr, a_hdr->total_size);
++ a_hdr = (struct kallsyms_header *) osec->contents;
+ p = (char *)a_hdr + a_hdr->symbol_off;
+ memcpy(p, symbols, a_hdr->symbols*a_hdr->symbol_size);
+ free(symbols);
+--- obj/obj_ppc.c
++++ obj/obj_ppc.c
+@@ -25,6 +25,7 @@
+ #include <obj.h>
+ #include <util.h>
+ #include <assert.h>
++#include <stdlib.h>
+
+
+ /*======================================================================*/
+@@ -255,7 +256,8 @@
+ archdata_sec->header.sh_size = 0;
+ sec = obj_find_section(f, "__ftr_fixup");
+ if (sec) {
+- ad = (struct archdata *) (archdata_sec->contents) = xmalloc(sizeof(*ad));
++ archdata_sec->contents = xmalloc(sizeof(*ad));
++ ad = (struct archdata *) (archdata_sec->contents);
+ memset(ad, 0, sizeof(*ad));
+ archdata_sec->header.sh_size = sizeof(*ad);
+ ad->__start___ftr_fixup = sec->header.sh_addr;
diff --git a/abs/core/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch b/abs/core/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch
new file mode 100644
index 0000000..79deb93
--- /dev/null
+++ b/abs/core/mplayer/MPlayer-1.0rc1-gnome-screensaver.patch
@@ -0,0 +1,286 @@
+diff -Nur MPlayer-1.0rc1.orig/configure MPlayer-1.0rc1/configure
+--- MPlayer-1.0rc1.orig/configure 2006-10-23 00:32:31.000000000 +0200
++++ MPlayer-1.0rc1/configure 2006-11-11 14:02:38.000000000 +0100
+@@ -257,6 +257,7 @@
+ --disable-ftp Disable ftp support [enabled]
+ --disable-vstream Disable tivo vstream client support [autodetect]
+ --disable-pthreads Disable Posix threads support [autodetect]
++ --disable-dbus-glib Disable D-BUS GLib interface (required for GNOME screensaver support) [autodetect]
+ --disable-ass Disable internal SSA/ASS subtitles support [autodetect]
+ --enable-rpath Enable runtime linker path for extra libs [disabled]
+
+@@ -1721,6 +1722,7 @@
+ _musepack=auto
+ _vstream=auto
+ _pthreads=auto
++_dbus_glib=auto
+ _ass=auto
+ _rpath=no
+ _asmalign_pot=auto
+@@ -2033,6 +2035,8 @@
+ --disable-vstream) _vstream=no ;;
+ --enable-pthreads) _pthreads=yes ;;
+ --disable-pthreads) _pthreads=no ;;
++ --enable-dbus-glib) _dbus_glib=yes ;;
++ --disable-dbus-glib) _dbus_glib=no ;;
+ --enable-ass) _ass=yes ;;
+ --disable-ass) _ass=no ;;
+ --enable-rpath) _rpath=yes ;;
+@@ -7029,6 +7033,19 @@
+ fi
+ echores "$_gethostbyname2"
+
++echocheck "D-BUS GLib interface"
++if test "$_dbus_glib" = auto && pkg-config --exists dbus-glib-1; then
++ _dbus_glib=yes
++ _inc_dbus_glib=`pkg-config --cflags dbus-glib-1 2>/dev/null`
++ _ld_dbus_glib=`pkg-config --libs dbus-glib-1 2>/dev/null`
++fi
++
++if test "$_dbus_glib" = yes; then
++ _def_dbus_glib='#define HAVE_DBUS_GLIB 1'
++else
++ _def_dbus_glib='#undef HAVE_DBUS_GLIB'
++fi
++echores "$_dbus_glib"
+
+ # --------------- GUI specific tests begin -------------------
+ echocheck "GUI"
+@@ -7521,6 +7538,10 @@
+ VESA_LIB = $_ld_vesa
+ AA_LIB = $_ld_aa
+ CACA_LIB = $_ld_caca
++DBUS_GLIB_INC = $_inc_dbus_glib
++DBUS_GLIB_LIB = $_ld_dbus_glib
++DBUS_GLIB = $_dbus_glib
++
+
+ # audio output
+ OSS = $_ossaudio
+@@ -8378,6 +8399,7 @@
+ $_def_tga
+ $_def_toolame
+ $_def_twolame
++$_def_dbus_glib
+
+ /* used by GUI: */
+ $_def_xshape
+diff -Nur MPlayer-1.0rc1.orig/help/help_mp-en.h MPlayer-1.0rc1/help/help_mp-en.h
+--- MPlayer-1.0rc1.orig/help/help_mp-en.h 2006-10-23 00:32:29.000000000 +0200
++++ MPlayer-1.0rc1/help/help_mp-en.h 2006-11-11 14:02:38.000000000 +0100
+@@ -679,6 +679,13 @@
+ #define MSGTR_InsertingAfVolume "[Mixer] No hardware mixing, inserting volume filter.\n"
+ #define MSGTR_NoVolume "[Mixer] No volume control available.\n"
+
++// gnome_screensaver.c
++#define MSGTR_OpenBusConnectionError "%s: Failed to open connection to bus: %s\n"
++#define MSGTR_RemoteMethodException "%s: Caught remote method exception %s: %s\n"
++#define MSGTR_GError "%s: Error: %s\n"
++#define MSGTR_GNOMEScreensaverEnabled "GNOME screensaver enabled\n"
++#define MSGTR_GNOMEScreensaverDisabled "GNOME screensaver disabled\n"
++
+ // ====================== GUI messages/buttons ========================
+
+ #ifdef HAVE_NEW_GUI
+diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c MPlayer-1.0rc1/libvo/gnome_screensaver.c
+--- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c 1970-01-01 01:00:00.000000000 +0100
++++ MPlayer-1.0rc1/libvo/gnome_screensaver.c 2006-11-11 14:02:38.000000000 +0100
+@@ -0,0 +1,120 @@
++/*
++ * gnome_screensaver.c v0.0.7
++ *
++ * Enable/Disable the GNOME screensaver
++ * Supports GNOME screensaver API 2.14 and 2.15
++ *
++ * Call gnome_screensaver_control(1) to enable and
++ * gnome_screensaver_control(0) to disable
++ *
++ */
++
++#include <stdlib.h>
++#include <unistd.h>
++#include <dbus/dbus-glib.h>
++
++#include "gnome_screensaver.h"
++#include "mp_msg.h"
++#include "help_mp.h"
++
++#define GS_SERVICE "org.gnome.ScreenSaver"
++#define GS_PATH "/org/gnome/ScreenSaver"
++#define GS_INTERFACE "org.gnome.ScreenSaver"
++
++#define GS_APPLICATION_NAME "MPlayer"
++#define GS_REASON_FOR_INHIBIT "Playing a movie"
++
++static guint32 cookie;
++
++void gnome_screensaver_control(int enable)
++{
++ DBusGConnection *connection;
++ GError *error;
++ DBusGProxy *proxy;
++ gboolean ret;
++ char *funcname = "gnome_screensaver_control()";
++
++ g_type_init();
++
++ /* Get a connection to the session bus */
++ error = NULL;
++ connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
++ if (connection == NULL) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_OpenBusConnectionError, error->message);
++ g_error_free(error);
++ return;
++ }
++
++ /* Create a proxy object */
++ proxy = dbus_g_proxy_new_for_name(connection,
++ GS_SERVICE, GS_PATH, GS_INTERFACE);
++
++ /* Enable the screensaver */
++ if (enable) {
++ /* First call the GNOME screensaver 2.15 API method */
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "UnInhibit", &error, G_TYPE_UINT,
++ cookie, G_TYPE_INVALID);
++
++ /* If this fails, try the GNOME screensaver 2.14 API */
++ if (!ret && error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_UNKNOWN_METHOD) {
++ mp_msg(MSGT_VO, MSGL_V,
++ "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n",
++ funcname);
++ g_error_free(error);
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "AllowActivation", &error,
++ G_TYPE_INVALID, G_TYPE_INVALID);
++ }
++ }
++ /* Disable the screensaver */
++ else {
++ /* First call the GNOME screensaver 2.15 API method */
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "Inhibit", &error, G_TYPE_STRING,
++ GS_APPLICATION_NAME, G_TYPE_STRING,
++ GS_REASON_FOR_INHIBIT, G_TYPE_INVALID,
++ G_TYPE_UINT, cookie, G_TYPE_INVALID);
++
++ /* If this fails, try the GNOME screensaver 2.14 API */
++ if (!ret && error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_UNKNOWN_METHOD) {
++ mp_msg(MSGT_VO, MSGL_V,
++ "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n",
++ funcname);
++ g_error_free(error);
++ error = NULL;
++ ret =
++ dbus_g_proxy_call(proxy, "InhibitActivation", &error,
++ G_TYPE_STRING, GS_REASON_FOR_INHIBIT,
++ G_TYPE_INVALID, G_TYPE_INVALID);
++ }
++ }
++
++ if (!ret) {
++ /* Check if it's a remote exception or a regular GError */
++ if (error->domain == DBUS_GERROR
++ && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_RemoteMethodException,
++ dbus_g_error_get_name(error), error->message);
++ }
++ else {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ funcname, MSGTR_GError, error->message);
++ }
++ g_error_free(error);
++ }
++ else {
++ mp_msg(MSGT_VO, MSGL_INFO,
++ enable ? MSGTR_GNOMEScreensaverEnabled :
++ MSGTR_GNOMEScreensaverDisabled);
++ }
++
++ g_object_unref(proxy);
++}
+diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h MPlayer-1.0rc1/libvo/gnome_screensaver.h
+--- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h 1970-01-01 01:00:00.000000000 +0100
++++ MPlayer-1.0rc1/libvo/gnome_screensaver.h 2006-11-11 14:02:38.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef _GNOME_SCREENSAVER_H
++#define _GNOME_SCREENSAVER_H
++
++extern void gnome_screensaver_control(int enable);
++
++#endif /* !_GNOME_SCREENSAVER_H */
+diff -Nur MPlayer-1.0rc1.orig/libvo/Makefile MPlayer-1.0rc1/libvo/Makefile
+--- MPlayer-1.0rc1.orig/libvo/Makefile 2006-10-23 00:32:26.000000000 +0200
++++ MPlayer-1.0rc1/libvo/Makefile 2006-11-11 14:02:38.000000000 +0100
+@@ -39,6 +39,11 @@
+ SRCS += vosub_vidix.c
+ endif
+
++ifeq ($(DBUS_GLIB),yes)
++SRCS += gnome_screensaver.c
++LIBAV_INC += $(DBUS_GLIB_INC)
++endif
++
+ INCLUDE = -I. -I.. -I../osdep $(LIBAV_INC)
+ CFLAGS = $(INCLUDE) $(OPTFLAGS) -DMPG12PLAY
+
+diff -Nur MPlayer-1.0rc1.orig/libvo/x11_common.c MPlayer-1.0rc1/libvo/x11_common.c
+--- MPlayer-1.0rc1.orig/libvo/x11_common.c 2006-10-23 00:32:26.000000000 +0200
++++ MPlayer-1.0rc1/libvo/x11_common.c 2006-11-11 14:02:38.000000000 +0100
+@@ -58,6 +58,10 @@
+ #include "mplayer.h"
+ #endif
+
++#ifdef HAVE_DBUS_GLIB
++#include "gnome_screensaver.h"
++#endif
++
+ #define WIN_LAYER_ONBOTTOM 2
+ #define WIN_LAYER_NORMAL 4
+ #define WIN_LAYER_ONTOP 6
+@@ -1701,8 +1705,12 @@
+ timeout_save = 0;
+ }
+
+- if (stop_xscreensaver)
++ if (stop_xscreensaver) {
+ xscreensaver_enable();
++#ifdef HAVE_DBUS_GLIB
++ gnome_screensaver_control(1);
++#endif
++ }
+ if (kdescreensaver_was_running && stop_xscreensaver)
+ {
+ system
+@@ -1747,8 +1755,12 @@
+ allow_exp);
+ }
+ // turning off screensaver
+- if (stop_xscreensaver)
++ if (stop_xscreensaver) {
+ xscreensaver_disable(mDisplay);
++#ifdef HAVE_DBUS_GLIB
++ gnome_screensaver_control(0);
++#endif
++ }
+ if (stop_xscreensaver && !kdescreensaver_was_running)
+ {
+ kdescreensaver_was_running =
+diff -Nur MPlayer-1.0rc1.orig/Makefile MPlayer-1.0rc1/Makefile
+--- MPlayer-1.0rc1.orig/Makefile 2006-10-23 00:32:31.000000000 +0200
++++ MPlayer-1.0rc1/Makefile 2006-11-11 14:02:38.000000000 +0100
+@@ -75,6 +75,7 @@
+ $(DIRECTFB_LIB) \
+ $(CACA_LIB) \
+ $(VESA_LIB) \
++ $(DBUS_GLIB_LIB) \
+
+ ifeq ($(VIDIX),yes)
+ VO_LIBS += vidix/libvidix.a
diff --git a/abs/core/mplayer/PKGBUILD b/abs/core/mplayer/PKGBUILD
new file mode 100644
index 0000000..f69a21a
--- /dev/null
+++ b/abs/core/mplayer/PKGBUILD
@@ -0,0 +1,67 @@
+# $Id: PKGBUILD 3632 2008-06-26 11:48:49Z paul $
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+pkgname=mplayer
+pkgver=1.0rc2
+pkgrel=5
+pkgdesc="A movie player for linux"
+arch=(i686 x86_64)
+depends=('libxxf86dga' 'libxv' 'libmad' 'giflib' 'cdparanoia' 'gtk2'
+ 'sdl' 'lame' 'libtheora' 'xvidcore'
+ 'libgl' 'smbclient' 'aalib' 'jack-audio-connection-kit'
+ 'x264>=20080625' 'faac' 'lirc-utils' 'ttf-dejavu')
+license=('GPL')
+url="http://www.mplayerhq.hu/"
+makedepends=('libcaca' 'unzip' 'live-media' 'libdca' 'mesa')
+backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf')
+source=(http://www.mplayerhq.hu/MPlayer/releases/MPlayer-${pkgver}.tar.bz2
+ http://www.mplayerhq.hu/MPlayer/skins/Blue-1.7.tar.bz2
+ http://www.mplayerhq.hu/MPlayer/patches/demux_audio_fix_20080129.diff
+ http://www.mplayerhq.hu/MPlayer/patches/demux_mov_fix_20080129.diff
+ http://www.mplayerhq.hu/MPlayer/patches/url_fix_20080120.diff
+ http://www.mplayerhq.hu/MPlayer/patches/stream_cddb_fix_20080120.diff
+ ivtv_2.6.24.patch)
+md5sums=('7e27e535c2d267637df34898f1b91707'
+ 'e4e2020d11b681aac898103b3ba723c4'
+ '320af7daa1b248ee8e8c15d34d7923e3'
+ 'ce999929155f509a3e6bee41d9d613ed'
+ '6a2c124586e1e6c44ae4ca1b4be9b6e4'
+ 'c7d1bcdd61fcceb7598d61fe2213c587'
+ '1ef35068587f6b6dbc99342567895236')
+
+build() {
+ cd $startdir/src/MPlayer-${pkgver}
+
+ # Custom CFLAGS break the mplayer build
+ unset CFLAGS
+
+ # Add support for gnome screensaver
+ #patch -p1 -i ../MPlayer-1.0rc1-gnome-screensaver.patch || return 1
+
+ # Workaround for changed ivtv interface since it went mainline in 2.6.24
+ patch -p1 -i ../ivtv_2.6.24.patch || return 1
+
+ # Fix security issues
+ for p in demux_audio_fix_20080129.diff demux_mov_fix_20080129.diff url_fix_20080120.diff stream_cddb_fix_20080120.diff; do
+ patch -p0 -i ../${p}
+ done
+
+ cd $startdir/src/MPlayer-${pkgver}
+
+ ./configure --prefix=/usr --enable-gui --disable-arts --enable-x11 \
+ --enable-runtime-cpudetection --confdir=/etc/mplayer --disable-nas \
+ --enable-gl --enable-tv-v4l1 --enable-tv-v4l2 --enable-largefiles \
+ --disable-liblzo --disable-speex --disable-openal \
+ --disable-fribidi --disable-libdv --disable-musepack \
+ --language=all --disable-dvdnav --disable-esd --disable-mga \
+ --disable-libamr_nb \
+ --with-extraincdir=/usr/lib/live-media
+
+ [ "$CARCH" = "i686" ] && sed 's|-march=i486|-march=i686|g' -i config.mak
+
+ make || return 1
+ make -j1 DESTDIR=${startdir}/pkg install
+ cp etc/{codecs.conf,input.conf,example.conf} ${startdir}/pkg/etc/mplayer/
+ ln -s /usr/share/fonts/TTF/DejaVuSans.ttf ${startdir}/pkg/usr/share/mplayer/subfont.ttf
+ rm -rf ${startdir}/pkg/usr/share/mplayer/font
+ mv ${startdir}/src/Blue ${startdir}/pkg/usr/share/mplayer/skins/default
+}
diff --git a/abs/core/mplayer/demux_audio_fix_20080129.diff b/abs/core/mplayer/demux_audio_fix_20080129.diff
new file mode 100644
index 0000000..1b18b6e
--- /dev/null
+++ b/abs/core/mplayer/demux_audio_fix_20080129.diff
@@ -0,0 +1,11 @@
+--- libmpdemux/demux_audio.c (revision 24724)
++++ libmpdemux/demux_audio.c (working copy)
+@@ -229,6 +229,8 @@
+ ptr += 4;
+
+ comment = ptr;
++ if (&comment[length] < comments || &comment[length] >= &comments[blk_len])
++ return;
+ c = comment[length];
+ comment[length] = 0;
+
diff --git a/abs/core/mplayer/demux_mov_fix_20080129.diff b/abs/core/mplayer/demux_mov_fix_20080129.diff
new file mode 100644
index 0000000..d83477b
--- /dev/null
+++ b/abs/core/mplayer/demux_mov_fix_20080129.diff
@@ -0,0 +1,45 @@
+--- libmpdemux/demux_mov.c (revision 24724)
++++ libmpdemux/demux_mov.c (working copy)
+@@ -173,11 +173,12 @@
+ i=trak->chunkmap_size;
+ while(i>0){
+ --i;
+- for(j=trak->chunkmap[i].first;j<last;j++){
++ j=FFMAX(trak->chunkmap[i].first, 0);
++ for(;j<last;j++){
+ trak->chunks[j].desc=trak->chunkmap[i].sdid;
+ trak->chunks[j].size=trak->chunkmap[i].spc;
+ }
+- last=trak->chunkmap[i].first;
++ last=FFMIN(trak->chunkmap[i].first, trak->chunks_size);
+ }
+
+ #if 0
+@@ -235,6 +236,8 @@
+ s=0;
+ for(j=0;j<trak->durmap_size;j++){
+ for(i=0;i<trak->durmap[j].num;i++){
++ if (s >= trak->samples_size)
++ break;
+ trak->samples[s].pts=pts;
+ ++s;
+ pts+=trak->durmap[j].dur;
+@@ -246,6 +249,8 @@
+ for(j=0;j<trak->chunks_size;j++){
+ off_t pos=trak->chunks[j].pos;
+ for(i=0;i<trak->chunks[j].size;i++){
++ if (s >= trak->samples_size)
++ break;
+ trak->samples[s].pos=pos;
+ mp_msg(MSGT_DEMUX, MSGL_DBG3, "Sample %5d: pts=%8d off=0x%08X size=%d\n",s,
+ trak->samples[s].pts,
+@@ -1568,8 +1573,7 @@
+ if( udta_len>udta_size)
+ udta_len=udta_size;
+ {
+- char dump[udta_len-4];
+- stream_read(demuxer->stream, (char *)&dump, udta_len-4-4);
++ stream_skip(demuxer->stream, udta_len-4-4);
+ udta_size -= udta_len;
+ }
+ }
diff --git a/abs/core/mplayer/ivtv_2.6.24.patch b/abs/core/mplayer/ivtv_2.6.24.patch
new file mode 100644
index 0000000..4e0a3fe
--- /dev/null
+++ b/abs/core/mplayer/ivtv_2.6.24.patch
@@ -0,0 +1,33 @@
+Patch to account for linux-2.6.24.x including ivtv, but MPlayer won't
+build against it. See this link for more information and the origin
+of the patch:
+http://archives.free.net.ph/message/20080201.201454.1047775e.en.html
+Thanks to Robby Workman for pointing me to this one.
+
+diff -Nur MPlayer-1.0rc2.orig/configure MPlayer-1.0rc2/configure
+--- MPlayer-1.0rc2.orig/configure 2007-10-07 21:49:33.000000000 +0200
++++ MPlayer-1.0rc2/configure 2008-03-10 10:27:29.000000000 +0100
+@@ -4920,7 +4920,7 @@
+ echores "$_dxr3"
+
+
+-echocheck "IVTV TV-Out"
++echocheck "IVTV TV-Out (pre linux-2.6.24)"
+ if test "$_ivtv" = auto ; then
+ cat > $TMPC << EOF
+ #include <stdlib.h>
+@@ -4928,7 +4928,13 @@
+ #include <linux/types.h>
+ #include <linux/videodev2.h>
+ #include <linux/ivtv.h>
+-int main(void) { return 0; }
++#include <sys/ioctl.h>
++int main(void) {
++struct ivtv_cfg_stop_decode sd;
++struct ivtv_cfg_start_decode sd1;
++ioctl (0, IVTV_IOC_START_DECODE, &sd1);
++ioctl (0, IVTV_IOC_STOP_DECODE, &sd);
++return 0; }
+ EOF
+ _ivtv=no
+ cc_check && _ivtv=yes
diff --git a/abs/core/mplayer/stream_cddb_fix_20080120.diff b/abs/core/mplayer/stream_cddb_fix_20080120.diff
new file mode 100644
index 0000000..45f7226
--- /dev/null
+++ b/abs/core/mplayer/stream_cddb_fix_20080120.diff
@@ -0,0 +1,32 @@
+--- stream/stream_cddb.c (revision 24724)
++++ stream/stream_cddb.c (working copy)
+@@ -53,6 +53,7 @@
+ #include "version.h"
+ #include "stream.h"
+ #include "network.h"
++#include "libavutil/intreadwrite.h"
+
+ #define DEFAULT_FREEDB_SERVER "freedb.freedb.org"
+ #define DEFAULT_CACHE_DIR "/.cddb/"
+@@ -453,8 +454,9 @@
+ } else {
+ len = ptr2-ptr+1;
+ }
++ len = FFMIN(sizeof(album_title) - 1, len);
+ strncpy(album_title, ptr, len);
+- album_title[len-2]='\0';
++ album_title[len]='\0';
+ }
+ mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
+ return 0;
+@@ -490,8 +492,9 @@
+ } else {
+ len = ptr2-ptr+1;
+ }
++ len = FFMIN(sizeof(album_title) - 1, len);
+ strncpy(album_title, ptr, len);
+- album_title[len-2]='\0';
++ album_title[len]='\0';
+ }
+ mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
+ return cddb_request_titles(cddb_data);
diff --git a/abs/core/mplayer/url_fix_20080120.diff b/abs/core/mplayer/url_fix_20080120.diff
new file mode 100644
index 0000000..a073589
--- /dev/null
+++ b/abs/core/mplayer/url_fix_20080120.diff
@@ -0,0 +1,10 @@
+--- stream/url.c (revision 24724)
++++ stream/url.c (working copy)
+@@ -328,6 +328,7 @@
+ }
+ }
+
++ tmp = NULL;
+ while(i < len) {
+ // look for the next char that must be kept
+ for (j=i;j<len;j++) {
diff --git a/abs/core/mtools/PKGBUILD b/abs/core/mtools/PKGBUILD
new file mode 100644
index 0000000..b9854ef
--- /dev/null
+++ b/abs/core/mtools/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=mtools
+pkgver=3.9.11
+pkgrel=1
+pkgdesc="A collection of utilities to access MS-DOS disks from Unix without mounting them"
+url="http://mtools.linux.lu/"
+source=(http://mtools.linux.lu/$pkgname-$pkgver.tar.gz)
+arch=(i686 x86_64)
+license=('GPL')
+depends=('glibc')
+makedepends=('texinfo')
+md5sums=('3c0ae05b0d98a5d3bd06d3d72fcaf80d')
+options=('makeflags')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --infodir=/usr/share/mtools --sysconfdir=/etc
+ make || return 1
+ make prefix=$startdir/pkg/usr infodir=$startdir/pkg/usr/share/mtools install
+}
diff --git a/abs/core/mysql-clients/PKGBUILD b/abs/core/mysql-clients/PKGBUILD
new file mode 100644
index 0000000..ecbdcdd
--- /dev/null
+++ b/abs/core/mysql-clients/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 2464 2008-06-02 11:38:11Z alexander $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=mysql-clients
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="MySQL client tools"
+arch=(i686 x86_64)
+depends=("libmysqlclient>=${pkgver}" 'gcc-libs' 'readline')
+makedepends=('tcp_wrappers' 'libtool' 'gcc')
+url=('http://www.mysql.com/')
+options=('!libtool')
+license=('GPL')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz)
+
+build() {
+ cd $startdir/src/mysql-${pkgver}
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --localstatedir=/var --sysconfdir=/etc \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db --disable-server
+
+ for dir in include strings regex mysys dbug extra; do
+ pushd ${dir} || return 1
+ make || return 1
+ popd
+ done
+ cd client
+ sed -i -e 's|\$(top_builddir)/libmysql/libmysqlclient.la|/usr/lib/mysql/libmysqlclient.so|g' Makefile
+ make link_sources
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431')
diff --git a/abs/core/mysql-python/PKGBUILD b/abs/core/mysql-python/PKGBUILD
new file mode 100644
index 0000000..45714c1
--- /dev/null
+++ b/abs/core/mysql-python/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 8941 2008-08-17 01:11:04Z eric $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=mysql-python
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="MySQL support for Python"
+arch=("i686" "x86_64")
+url="http://sourceforge.net/projects/mysql-python"
+depends=('python>=2.5' 'libmysqlclient')
+makedepends=('mysql>=5.0.23' 'pyrex>=0.9.8.4' 'setuptools>=0.6c8')
+source=("http://heanet.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-${pkgver}.tar.gz")
+md5sums=('532268f02870bea18c1d465e88afff30')
+
+build() {
+ cd ${startdir}/src/MySQL-python-${pkgver}
+ yes | python setup.py install --root=${startdir}/pkg
+}
diff --git a/abs/core/mysql/PKGBUILD b/abs/core/mysql/PKGBUILD
new file mode 100644
index 0000000..88460bc
--- /dev/null
+++ b/abs/core/mysql/PKGBUILD
@@ -0,0 +1,54 @@
+# $Id: PKGBUILD 2465 2008-06-02 11:38:50Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+pkgname=mysql
+pkgver=5.0.60
+pkgrel=1
+pkgdesc="A fast SQL database server"
+arch=(i686 x86_64)
+backup=(etc/my.cnf etc/conf.d/mysqld)
+depends=("mysql-clients>=${pkgver}" 'tcp_wrappers')
+makedepends=('libtool')
+url=('http://www.mysql.com/')
+options=('!libtool')
+license=('GPL')
+source=(http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-${pkgver}.tar.gz
+ mysql-no-clients.patch
+ mysqld
+ my.cnf
+ mysqld.conf.d)
+
+build() {
+ # PIC
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/mysql-no-clients.patch || return 1
+ ./configure --prefix=/usr --libexecdir=/usr/sbin \
+ --without-debug --without-docs --without-bench --without-readline \
+ --with-innodb --enable-local-infile --with-openssl \
+ --with-charset=latin1 --with-collation=latin1_general_ci \
+ --with-extra-charsets=complex --enable-thread-safe-client \
+ --with-libwrap --with-berkeley-db
+
+ # fixes
+ sed -i -e 's/^.*HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE.*$/#define\ HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE/g' include/config.h || return 1
+ sed -i -e 's/size_socket/socklen_t/g' sql/mysqld.cc || return 1
+
+ pushd include || return
+ make || return 1
+ popd
+ pushd libmysql
+ make link_sources get_password.lo || return
+ popd
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ rm -rf ${startdir}/pkg/usr/{mysql-test,sql-bench}
+ install -D -m644 ../my.cnf ${startdir}/pkg/etc/my.cnf
+ install -D -m755 ../mysqld ${startdir}/pkg/etc/rc.d/mysqld
+ install -D -m644 ../mysqld.conf.d ${startdir}/pkg/etc/conf.d/mysqld
+ rm -f ${startdir}/pkg/usr/bin/mysql_config
+}
+md5sums=('2709a53f3da6f1cd868825ed2ea80431'
+ 'e892aac36cbeb57f0e003ec0936afb3b'
+ '64d79a5a34043c1de949d734b720c217'
+ '0ee035590ffc61d32de994f461fd2bd2'
+ '4a9077fc95ec6db1d5420e0cdc74d31c')
diff --git a/abs/core/mysql/my.cnf b/abs/core/mysql/my.cnf
new file mode 100644
index 0000000..927b9c8
--- /dev/null
+++ b/abs/core/mysql/my.cnf
@@ -0,0 +1,149 @@
+# 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)
+#
+# 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
+# with --help option.
+
+# The following options will be passed to all MySQL clients
+[client]
+#password = your_password
+port = 3306
+socket = /tmp/mysql.sock
+
+# Here follows entries for some specific programs
+
+# The MySQL server
+[mysqld]
+port = 3306
+socket = /tmp/mysql.sock
+datadir = /var/lib/mysql
+skip-locking
+key_buffer = 16M
+max_allowed_packet = 1M
+table_cache = 64
+sort_buffer_size = 512K
+net_buffer_length = 16K
+myisam_sort_buffer_size = 8M
+
+# 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.
+# All interaction with mysqld must be made via Unix sockets or named pipes.
+# Note that using this option without enabling named pipes on Windows
+# (via the "enable-named-pipe" option) will render mysqld useless!
+#
+skip-networking
+
+# Replication Master Server (default)
+# binary logging is required for replication
+#log-bin
+
+# required unique id between 1 and 2^32 - 1
+# defaults to 1 if master-host is not set
+# but will not function as a master if omitted
+server-id = 1
+
+# Replication Slave (comment out master section to use this)
+#
+# To configure this host as a replication slave, you can choose between
+# two methods :
+#
+# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
+# the syntax is:
+#
+# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
+# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
+#
+# where you replace <host>, <user>, <password> by quoted strings and
+# <port> by the master's port number (3306 by default).
+#
+# Example:
+#
+# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
+# MASTER_USER='joe', MASTER_PASSWORD='secret';
+#
+# OR
+#
+# 2) Set the variables below. However, in case you choose this method, then
+# start replication for the first time (even unsuccessfully, for example
+# if you mistyped the password in master-password and the slave fails to
+# connect), the slave will create a master.info file, and any later
+# change in this file to the variables' values below will be ignored and
+# overridden by the content of the master.info file, unless you shutdown
+# the slave server, delete master.info and restart the slaver server.
+# For that reason, you may want to leave the lines below untouched
+# (commented) and instead use CHANGE MASTER TO (see above)
+#
+# required unique id between 2 and 2^32 - 1
+# (and different from the master)
+# defaults to 2 if master-host is set
+# but will not function as a slave if omitted
+#server-id = 2
+#
+# The replication master for this slave - required
+#master-host = <hostname>
+#
+# The username the slave will use for authentication when connecting
+# to the master - required
+#master-user = <username>
+#
+# The password the slave will authenticate with when connecting to
+# the master - required
+#master-password = <password>
+#
+# The port the master is listening on.
+# optional - defaults to 3306
+#master-port = <port>
+#
+# binary logging - not required for slaves, but recommended
+#log-bin
+
+# Point the following paths to different dedicated disks
+#tmpdir = /tmp/
+#log-update = /path-to-dedicated-directory/hostname
+
+# Uncomment the following if you are using BDB tables
+#bdb_cache_size = 4M
+#bdb_max_lock = 10000
+
+# Uncomment the following if you are using InnoDB tables
+#innodb_data_home_dir = /var/lib/mysql
+#innodb_data_file_path = ibdata1:10M:autoextend
+#innodb_log_group_home_dir = /var/lib/mysql
+#innodb_log_arch_dir = /var/lib/mysql
+# You can set .._buffer_pool_size up to 50 - 80 %
+# of RAM but beware of setting memory usage too high
+#innodb_buffer_pool_size = 16M
+#innodb_additional_mem_pool_size = 2M
+# Set .._log_file_size to 25 % of buffer pool size
+#innodb_log_file_size = 5M
+#innodb_log_buffer_size = 8M
+#innodb_flush_log_at_trx_commit = 1
+#innodb_lock_wait_timeout = 50
+
+[mysqldump]
+quick
+max_allowed_packet = 16M
+
+[mysql]
+#no-auto-rehash
+# Remove the next comment character if you are not familiar with SQL
+#safe-updates
+
+[isamchk]
+key_buffer = 20M
+sort_buffer_size = 20M
+read_buffer = 2M
+write_buffer = 2M
+
+[myisamchk]
+key_buffer = 20M
+sort_buffer_size = 20M
+read_buffer = 2M
+write_buffer = 2M
+
+[mysqlhotcopy]
+interactive-timeout
diff --git a/abs/core/mysql/mysql-no-clients.patch b/abs/core/mysql/mysql-no-clients.patch
new file mode 100644
index 0000000..e1fb5e0
--- /dev/null
+++ b/abs/core/mysql/mysql-no-clients.patch
@@ -0,0 +1,65 @@
+diff -ruN mysql-5.0.51.orig/Makefile.in mysql-5.0.51/Makefile.in
+--- mysql-5.0.51.orig/Makefile.in 2007-12-07 12:59:21.000000000 +0000
++++ mysql-5.0.51/Makefile.in 2007-12-07 13:03:21.000000000 +0000
+@@ -376,7 +376,7 @@
+ SUBDIRS = . include @docs_dirs@ @zlib_dir@ @yassl_dir@ \
+ @readline_topdir@ sql-common scripts \
+ @thread_dirs@ pstack \
+- @sql_union_dirs@ @man_dirs@ tests \
++ strings mysys dbug extra regex bdb innobase myisam myisammrg heap vio sql @man_dirs@ tests \
+ netware @libmysqld_dirs@ \
+ @bench_dirs@ support-files @tools_dirs@
+
+diff -ruN mysql-5.0.51.orig/include/Makefile.in mysql-5.0.51/include/Makefile.in
+--- mysql-5.0.51.orig/include/Makefile.in 2007-12-07 12:59:20.000000000 +0000
++++ mysql-5.0.51/include/Makefile.in 2007-12-07 13:00:12.000000000 +0000
+@@ -557,7 +557,6 @@
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+ install: $(BUILT_SOURCES)
+- $(MAKE) $(AM_MAKEFLAGS) install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+diff -ruN mysql-5.0.51.orig/tests/Makefile.in mysql-5.0.51/tests/Makefile.in
+--- mysql-5.0.51.orig/tests/Makefile.in 2007-12-07 12:59:20.000000000 +0000
++++ mysql-5.0.51/tests/Makefile.in 2007-12-07 13:01:51.000000000 +0000
+@@ -96,7 +96,7 @@
+ am_mysql_client_test_OBJECTS = mysql_client_test.$(OBJEXT) \
+ my_memmem.$(OBJEXT)
+ mysql_client_test_OBJECTS = $(am_mysql_client_test_OBJECTS)
+-am__DEPENDENCIES_1 = $(top_builddir)/libmysql/libmysqlclient.la
++am__DEPENDENCIES_1 = /usr/lib/mysql/libmysqlclient.so
+ am__DEPENDENCIES_2 =
+ mysql_client_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+@@ -106,7 +106,7 @@
+ thread_test_SOURCES = thread_test.c
+ thread_test_OBJECTS = thread_test.$(OBJEXT)
+ thread_test_LDADD = $(LDADD)
+-thread_test_DEPENDENCIES = $(top_builddir)/libmysql/libmysqlclient.la
++thread_test_DEPENDENCIES = /usr/lib/mysql/libmysqlclient.so
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+@@ -405,7 +405,7 @@
+ $(openssl_includes)
+
+ LDADD = @CLIENT_EXTRA_LDFLAGS@ \
+- $(top_builddir)/libmysql/libmysqlclient.la
++ /usr/lib/mysql/libmysqlclient.so
+
+ mysql_client_test_LDADD = $(LDADD) $(CXXLDFLAGS)
+ mysql_client_test_SOURCES = mysql_client_test.c\
+diff -ruN mysql-5.0.51.orig/tools/Makefile.in mysql-5.0.51/tools/Makefile.in
+--- mysql-5.0.51.orig/tools/Makefile.in 2007-12-07 12:59:19.000000000 +0000
++++ mysql-5.0.51/tools/Makefile.in 2007-12-07 13:02:32.000000000 +0000
+@@ -369,7 +369,7 @@
+ $(openssl_includes)
+
+ LDADD = @CLIENT_EXTRA_LDFLAGS@ \
+- $(top_builddir)/libmysql_r/libmysqlclient_r.la \
++ /usr/lib/mysql/libmysqlclient_r.so \
+ @openssl_libs@ @yassl_libs@ @ZLIB_LIBS@
+
+ mysqltestmanager_SOURCES = mysqlmanager.c
diff --git a/abs/core/mysql/mysqld b/abs/core/mysql/mysqld
new file mode 100755
index 0000000..0fcecf7
--- /dev/null
+++ b/abs/core/mysql/mysqld
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+MYSQLD_ROOT="/var/lib/mysql"
+# source application-specific settings
+[ -f /etc/conf.d/mysqld ] && . /etc/conf.d/mysqld
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/mysqld`
+if [ ! `egrep '^mysql:' /etc/group` ]; then
+ stat_busy "Adding mysql group"
+ groupadd -g 89 mysql
+ stat_done
+fi
+if [ ! `egrep '^mysql:' /etc/passwd` ]; then
+ stat_busy "Adding mysql user"
+ useradd -u 89 -g mysql -d $MYSQLD_ROOT -s /bin/false mysql
+ [ -d $MYSQLD_ROOT ] && chown -R mysql.mysql $MYSQLD_ROOT
+ stat_done
+fi
+
+if [ ! -d $MYSQLD_ROOT ]; then
+ mkdir $MYSQLD_ROOT
+ /usr/bin/mysql_install_db --datadir=$MYSQLD_ROOT --user=mysql
+ chown -R mysql.mysql $MYSQLD_ROOT
+fi
+
+if [ ! -e /var/log/mysqld.log ]; then
+ touch /var/log/mysqld.log
+ chown mysql /var/log/mysqld.log
+fi
+
+case "$1" in
+ start)
+ stat_busy "Starting MySQL"
+ if [ -z "$PID" ]; then
+ /usr/bin/mysqld_safe --datadir=$MYSQLD_ROOT &>/dev/null &
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ sleep 1 # wait on children
+ PID=`pidof -o %PPID /usr/sbin/mysqld`
+ if [ -z "$PID" ]; then
+ stat_fail
+ exit 1
+ else
+ echo $PID >/var/run/mysqld.pid
+ add_daemon mysqld
+ stat_done
+ fi
+ fi
+ else
+ stat_fail
+ exit 1
+ fi
+ ;;
+
+ stop)
+ stat_busy "Stopping MySQL"
+ if [ ! -z "$PID" ]; then
+ kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ rm -f /var/run/mysqld.pid &>/dev/null
+ rm_daemon mysqld
+ stat_done
+ fi
+ else
+ stat_fail
+ exit 1
+ fi
+ ;;
+
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mysql/mysqld.conf.d b/abs/core/mysql/mysqld.conf.d
new file mode 100644
index 0000000..04752b1
--- /dev/null
+++ b/abs/core/mysql/mysqld.conf.d
@@ -0,0 +1 @@
+MYSQLD_ROOT="/var/lib/mysql"
diff --git a/abs/core/mythtv/stable/mytharchive/PKGBUILD b/abs/core/mythtv/stable/mytharchive/PKGBUILD
new file mode 100644
index 0000000..fb3b755
--- /dev/null
+++ b/abs/core/mythtv/stable/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=1
+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' 'mysql-python' 'pil' 'dvdauthor')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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/stable/mythbrowser/PKGBUILD b/abs/core/mythtv/stable/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..5a53093
--- /dev/null
+++ b/abs/core/mythtv/stable/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=2
+pkgdesc="Mini web browser for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3')
+groups=('mythtv-extras')
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+ . /etc/profile.d/kde3.sh
+
+ 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/stable/mythcontrols/PKGBUILD b/abs/core/mythtv/stable/mythcontrols/PKGBUILD
new file mode 100644
index 0000000..cf7f43c
--- /dev/null
+++ b/abs/core/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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/stable/mythdb-initial/PKGBUILD b/abs/core/mythtv/stable/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..02f2789
--- /dev/null
+++ b/abs/core/mythtv/stable/mythdb-initial/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=3
+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/stable/mythdb-initial/mc.sql b/abs/core/mythtv/stable/mythdb-initial/mc.sql
new file mode 100644
index 0000000..6e9bdaa
--- /dev/null
+++ b/abs/core/mythtv/stable/mythdb-initial/mc.sql
@@ -0,0 +1,2797 @@
+-- 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','G.A.N.T','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');
+/*!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/stable/mythdb-initial/mythdb.install b/abs/core/mythtv/stable/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..4834c69
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythdb-initial/permissions.sql b/abs/core/mythtv/stable/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..acb4673
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythflix/PKGBUILD b/abs/core/mythtv/stable/mythflix/PKGBUILD
new file mode 100644
index 0000000..f613963
--- /dev/null
+++ b/abs/core/mythtv/stable/mythflix/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Maintainer: kleptophobiac@gmail.com
+
+pkgname=mythflix
+pkgver=0.21
+pkgrel=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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 INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/stable/mythgallery/PKGBUILD b/abs/core/mythtv/stable/mythgallery/PKGBUILD
new file mode 100644
index 0000000..76a66c5
--- /dev/null
+++ b/abs/core/mythtv/stable/mythgallery/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=mythgallery
+pkgver=0.21
+pkgrel=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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/stable/mythgame/PKGBUILD b/abs/core/mythtv/stable/mythgame/PKGBUILD
new file mode 100644
index 0000000..33fb9a5
--- /dev/null
+++ b/abs/core/mythtv/stable/mythgame/PKGBUILD
@@ -0,0 +1,31 @@
+# $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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-$pkgver
+ export QMAKESPEC='linux-g++'
+ source /etc/profile.d/qt3.sh
+
+ ./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/stable/mythmusic/PKGBUILD b/abs/core/mythtv/stable/mythmusic/PKGBUILD
new file mode 100644
index 0000000..02adcce
--- /dev/null
+++ b/abs/core/mythtv/stable/mythmusic/PKGBUILD
@@ -0,0 +1,33 @@
+# $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=2
+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')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/stable/mythmusic/music_flac.patch b/abs/core/mythtv/stable/mythmusic/music_flac.patch
new file mode 100644
index 0000000..b152249
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythmusic/mythmusic-0.21.patch b/abs/core/mythtv/stable/mythmusic/mythmusic-0.21.patch
new file mode 100644
index 0000000..f3fa930
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythnews/PKGBUILD b/abs/core/mythtv/stable/mythnews/PKGBUILD
new file mode 100644
index 0000000..9133755
--- /dev/null
+++ b/abs/core/mythtv/stable/mythnews/PKGBUILD
@@ -0,0 +1,31 @@
+# $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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /etc/profile.d/qt3.sh
+
+ # 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/stable/mythphone/PKGBUILD b/abs/core/mythtv/stable/mythphone/PKGBUILD
new file mode 100644
index 0000000..24cd04f
--- /dev/null
+++ b/abs/core/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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/stable/myththemes/PKGBUILD b/abs/core/mythtv/stable/myththemes/PKGBUILD
new file mode 100644
index 0000000..5223b92
--- /dev/null
+++ b/abs/core/mythtv/stable/myththemes/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=myththemes
+pkgver=0.21
+pkgrel=1
+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=('f13db28f928d70a11eaf416970d06eda')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ . /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/stable/mythtv/PKGBUILD b/abs/core/mythtv/stable/mythtv/PKGBUILD
new file mode 100644
index 0000000..72c6855
--- /dev/null
+++ b/abs/core/mythtv/stable/mythtv/PKGBUILD
@@ -0,0 +1,70 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: <kleptophobiac@gmail.com>
+# Contributor: dorphell <dorphell@archlinux.org>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=mythtv
+pkgver=0.21
+pkgrel=4
+pkgdesc="A Homebrew PVR project"
+arch=('i686' 'x86_64')
+depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg' \
+ 'libxvmc')
+backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt)
+source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2 \
+ mythbackend\
+ QUICKSTART.archlinux)
+md5sums=('08506f0c5120c072085b6995f529167a' '7ef6de58240e7aad389a0b13d91b1cf6'\
+ 'a0ecb7f476cb71c0c1ac90d349fc7695')
+license=('GPL2')
+makedepends=(libgl subversion)
+groups=('pvr')
+url="http://www.mythtv.org/"
+install=mythtv.install
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver} || return 1
+ . /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 \
+ --disable-firewire --enable-v4l --enable-ivtv --enable-dvb \
+ --dvb-path=/usr/include/linux/dvb --enable-xvmc --disable-ffmpeg \
+ --enable-xvmc-pro --enable-xvmc-vld --enable-opengl-vsync \
+ --disable-audio-jack --disable-audio-arts || 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
+ install -m0755 contrib/* $startdir/pkg/usr/share/mythtv/contrib
+
+ # set suid on mythfrontend
+ chmod a+s $startdir/pkg/usr/bin/mythfrontend
+}
diff --git a/abs/core/mythtv/stable/mythtv/QUICKSTART.archlinux b/abs/core/mythtv/stable/mythtv/QUICKSTART.archlinux
new file mode 100644
index 0000000..310705c
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythtv/mythbackend b/abs/core/mythtv/stable/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/stable/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/mythtv/mythtv.install b/abs/core/mythtv/stable/mythtv/mythtv.install
new file mode 100644
index 0000000..c460f19
--- /dev/null
+++ b/abs/core/mythtv/stable/mythtv/mythtv.install
@@ -0,0 +1,13 @@
+# arg 1: the new package version
+post_install() {
+ echo "See \"MythTV\" on the Archlinux Wiki for installation information - Extensive!!"
+}
+
+# arg 1: the old package version
+post_remove() {
+ echo -e "NOTE: mysql database was not removed. To remove run:\nmysql -u root -e 'drop database mythconverg;'"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/stable/mythvideo/PKGBUILD b/abs/core/mythtv/stable/mythvideo/PKGBUILD
new file mode 100644
index 0000000..21f2a22
--- /dev/null
+++ b/abs/core/mythtv/stable/mythvideo/PKGBUILD
@@ -0,0 +1,36 @@
+# $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=2
+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"\
+ mtd)
+md5sums=('af20a78ac66719feddf9a39f1a799ded' '476c12ba074794ad7f4ae092bdf949d6')
+replaces=('mythdvd')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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
+}
+
+
diff --git a/abs/core/mythtv/stable/mythvideo/mtd b/abs/core/mythtv/stable/mythvideo/mtd
new file mode 100644
index 0000000..1f46dfe
--- /dev/null
+++ b/abs/core/mythtv/stable/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/stable/mythweather/PKGBUILD b/abs/core/mythtv/stable/mythweather/PKGBUILD
new file mode 100644
index 0000000..ce2894a
--- /dev/null
+++ b/abs/core/mythtv/stable/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=1
+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=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins-${pkgver}
+ . /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/stable/mythweb/PKGBUILD b/abs/core/mythtv/stable/mythweb/PKGBUILD
new file mode 100644
index 0000000..e01323c
--- /dev/null
+++ b/abs/core/mythtv/stable/mythweb/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: Philipp Giebel <arch@ambience-design.net>
+
+pkgname=mythweb
+pkgver=0.21
+pkgrel=1
+pkgdesc="Web interface for MythTV's backend"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'apache' 'php')
+install=mythweb.install
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('af20a78ac66719feddf9a39f1a799ded')
+groups=('mythtv-extras')
+
+build() {
+ mkdir -p $startdir/pkg/srv/www/mythweb/{image_cache,php_sessions}
+ cp -r $startdir/src/mythplugins-$pkgver/$pkgname/* $startdir/pkg/srv/www/mythweb
+ cp $startdir/src/mythplugins-$pkgver/$pkgname/data/.htaccess $startdir/pkg/srv/www/mythweb
+ rm $startdir/pkg/srv/www/mythweb/README
+ chown -R nobody:nobody $startdir/pkg/srv/www/mythweb
+ chmod g+rw $startdir/pkg/srv/www/mythweb/{image_cache,php_sessions,data}
+}
+
+
diff --git a/abs/core/mythtv/stable/mythweb/mythweb.install b/abs/core/mythtv/stable/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core/mythtv/stable/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/nano/PKGBUILD b/abs/core/nano/PKGBUILD
new file mode 100644
index 0000000..4dcf3bc
--- /dev/null
+++ b/abs/core/nano/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 10350 2008-08-27 14:18:15Z andyrtr $
+# Maintainer: Judd <judd@archlinux.org>
+pkgname=nano
+pkgver=2.0.8
+pkgrel=12
+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)
+backup=(etc/nanorc)
+md5sums=('fcb2a26285921458b6fe381c2802b1a8')
+install=nano.install
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --enable-color --enable-nanorc --enable-multibuffer --disable-wrapping
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -DTm644 ${srcdir}/${pkgname}-${pkgver}/doc/nanorc.sample ${pkgdir}/etc/nanorc
+
+ rm -f ${pkgdir}/usr/share/info/dir
+}
diff --git a/abs/core/nano/nano.install b/abs/core/nano/nano.install
new file mode 100644
index 0000000..9842c9e
--- /dev/null
+++ b/abs/core/nano/nano.install
@@ -0,0 +1,20 @@
+infodir=/usr/share/info
+filelist=(nano.info)
+
+post_install() {
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/ncurses/PKGBUILD b/abs/core/ncurses/PKGBUILD
new file mode 100644
index 0000000..052881e
--- /dev/null
+++ b/abs/core/ncurses/PKGBUILD
@@ -0,0 +1,75 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=ncurses
+pkgver=5.6
+pkgrel=15
+pkgdesc="A System V Release 4.0 curses emulation library"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/ncurses/ncurses.html"
+license=('MIT')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('b6593abe1089d6aab1551c105c9300e3')
+options=(!makeflags)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ # The chtype/mmask-t settings below are to retain ABI compat
+ # with ncurses-5.4 so dont change em !
+ # we should test in next update if we can drop it.
+if [ "$CARCH" == "x86_64" ]; then
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg \
+ --with-chtype='long' --with-mmask-t='long'
+ else
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg
+fi
+ make || return 1
+ make install
+ mkdir -p $startdir/pkg/lib
+ cd $startdir/pkg/usr/lib
+ mv libncurses.so.$pkgver ../../lib
+ ln -sf ../../lib/libncurses.so.$pkgver libncurses.so.$pkgver
+ cd $startdir/pkg/lib
+ ln -sf libncurses.so.$pkgver libncurses.so.5
+ rm -f $startdir/pkg/lib/libcurses.so
+
+ # build unicode support libs
+ cd $startdir/src/$pkgname-$pkgver
+ make clean
+if [ "$CARCH" == "x86_64" ]; then
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg --enable-widec \
+ --with-chtype='long' --with-mmask-t='long'
+ else
+ ./configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=$startdir/pkg --enable-widec
+fi
+ make || return 1
+ make install
+
+ mkdir $startdir/pkg/usr/include/ncursesw
+ ln -sf /usr/include/ncurses.h $startdir/pkg/usr/include/ncursesw
+ # fix library for tput, we call it in initscripts!
+ cd $startdir/pkg/usr/lib
+ mv libncursesw.so.$pkgver ../../lib
+ ln -sf ../../lib/libncursesw.so.$pkgver libncursesw.so.$pkgver
+ cd $startdir/pkg/lib
+ ln -sf libncursesw.so.$pkgver libncursesw.so.5
+
+ # install tput to /bin
+ mkdir $startdir/pkg/bin/
+ mv $startdir/pkg/usr/bin/tput $startdir/pkg/bin/tput
+
+ # install license, rip it from the readme
+ cd $startdir/src/$pkgname-$pkgver
+ mkdir -p $startdir/pkg/usr/share/licenses/$pkgname
+ grep -B 100 '$Id' README > $startdir/pkg/usr/share/licenses/$pkgname/license.txt
+}
diff --git a/abs/core/ncurses/ncurses.install b/abs/core/ncurses/ncurses.install
new file mode 100644
index 0000000..6b5a1dc
--- /dev/null
+++ b/abs/core/ncurses/ncurses.install
@@ -0,0 +1,9 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">> You can safely ignore any \"cannot open shared object\" errors you see above"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/ndiswrapper-utils/PKGBUILD b/abs/core/ndiswrapper-utils/PKGBUILD
new file mode 100644
index 0000000..3467469
--- /dev/null
+++ b/abs/core/ndiswrapper-utils/PKGBUILD
@@ -0,0 +1,22 @@
+#$Id: PKGBUILD 7905 2008-08-05 07:01:47Z tpowa $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ndiswrapper-utils
+pkgver=1.53
+pkgrel=1
+pkgdesc="Binaries for ndiswrapper module"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://ndiswrapper.sourceforge.net"
+depends=(wireless_tools glibc)
+replaces=('ndiswrapper-bin')
+conflicts=('ndiswrapper-bin')
+source=(http://downloads.sourceforge.net/ndiswrapper/ndiswrapper-$pkgver.tar.gz)
+
+build()
+{
+ cd $startdir/src/ndiswrapper-$pkgver/utils
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('393c6e6ab0803963148e18538601cdec')
diff --git a/abs/core/ndiswrapper/PKGBUILD b/abs/core/ndiswrapper/PKGBUILD
new file mode 100644
index 0000000..927dc8c
--- /dev/null
+++ b/abs/core/ndiswrapper/PKGBUILD
@@ -0,0 +1,29 @@
+#$Id: PKGBUILD 7906 2008-08-05 07:01:51Z tpowa $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ndiswrapper
+_kernver=2.6.26-ARCH
+pkgver=1.53
+pkgrel=1
+pkgdesc="Module for NDIS (Windows Network Drivers) drivers supplied by vendors. For stock arch 2.6 kernel."
+license=('GPL')
+arch=(i686 x86_64)
+url="http://ndiswrapper.sourceforge.net"
+install="ndiswrapper.install"
+depends=("ndiswrapper-utils=$pkgver" 'kernel26>=2.6.26-1' 'kernel26<2.6.27')
+source=(http://downloads.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-$pkgver.tar.gz)
+
+build()
+{
+ cd $startdir/src/ndiswrapper-$pkgver/driver
+ make KVERS=$_kernver
+ make DESTDIR=$startdir/pkg KVERS=$_kernver install || return 1
+ rm $startdir/pkg/lib/modules/$_kernver/modules.* #wtf?
+
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+ # move it to correct kernel directory
+ mkdir -p $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/ndiswrapper
+ mv $startdir/pkg/lib/modules/$_kernver/misc/* $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/ndiswrapper/
+ rm -r $startdir/pkg/lib/modules/$_kernver/misc/
+}
+md5sums=('393c6e6ab0803963148e18538601cdec')
diff --git a/abs/core/ndiswrapper/ndiswrapper.install b/abs/core/ndiswrapper/ndiswrapper.install
new file mode 100644
index 0000000..696f2d4
--- /dev/null
+++ b/abs/core/ndiswrapper/ndiswrapper.install
@@ -0,0 +1,28 @@
+# arg 1: the new package version
+post_install()
+{
+ ndiswrapper -m
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade()
+{
+ ndiswrapper -m
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/net-tools/PKGBUILD b/abs/core/net-tools/PKGBUILD
new file mode 100644
index 0000000..da2a710
--- /dev/null
+++ b/abs/core/net-tools/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=net-tools
+pkgver=1.60
+pkgrel=22
+pkgdesc="Configuration tools for Linux networking"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.tazenda.demon.co.uk/phil/net-tools"
+groups=('base')
+depends=('glibc')
+backup=('etc/conf.d/nisdomainname')
+source=(http://www.tazenda.demon.co.uk/phil/$pkgname/$pkgname-$pkgver.tar.bz2
+ net-tools.patch gcc340.patch net-tools-1.60-2.6-compilefix.patch
+ net-tools-1.60-miiioctl.patch nisdomainname.conf.d
+ net-tools-1.60-nameif.patch
+ net-tools-1.60-nameif_strncpy.patch)
+md5sums=('888774accab40217dde927e21979c165' '7ef8d0c6818faa0fdeea94970a20e3fb'
+ 'b52d899cba9956bb0055150506f41ac1' '51de6eabe2d6d6dc860f72c41cee636b'
+ 'c16109863bc63f3dad4ef35305a340bb' 'af3eef5d4837939f7858eec692aa4671'
+ '29a32617382fab1735acba4d920f1fcd' 'e66466b9304dac85eb42b32f1ec3b284')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ export MAKEFLAGS="-j1"
+ patch -Np1 -i ../net-tools.patch || return 1
+ patch -Np1 -i ../net-tools-1.60-2.6-compilefix.patch || return 1
+ patch -Np1 -i ../net-tools-1.60-miiioctl.patch || return 1
+ patch -Np1 -i ../gcc340.patch || return 1
+ patch -Np1 -i ${startdir}/src/net-tools-1.60-nameif.patch || return 1
+ patch -Np1 -i ${startdir}/src/net-tools-1.60-nameif_strncpy.patch || return 1
+ yes "" | make || return 1
+ make BASEDIR=$startdir/pkg update
+ install -D -m644 ../nisdomainname.conf.d \
+ $startdir/pkg/etc/conf.d/nisdomainname
+}
diff --git a/abs/core/net-tools/gcc340.patch b/abs/core/net-tools/gcc340.patch
new file mode 100644
index 0000000..8089bf2
--- /dev/null
+++ b/abs/core/net-tools/gcc340.patch
@@ -0,0 +1,46 @@
+diff -Naur net-tools-1.60-orig/hostname.c net-tools-1.60/hostname.c
+--- net-tools-1.60-orig/hostname.c 2001-04-08 10:04:23.000000000 -0700
++++ net-tools-1.60/hostname.c 2004-05-07 17:22:14.000000000 -0700
+@@ -78,6 +78,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ }
+@@ -98,6 +99,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -117,6 +119,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -174,6 +177,7 @@
+ printf("%s\n", hp->h_name);
+ break;
+ default:
++ ;
+ }
+ }
+
+diff -Naur net-tools-1.60-orig/lib/inet_sr.c net-tools-1.60/lib/inet_sr.c
+--- net-tools-1.60-orig/lib/inet_sr.c 2000-02-20 13:46:45.000000000 -0800
++++ net-tools-1.60/lib/inet_sr.c 2004-05-07 17:20:14.000000000 -0700
+@@ -105,6 +105,7 @@
+ case 2:
+ isnet = 0; break;
+ default:
++ ;
+ }
+
+ /* Fill in the other fields. */
diff --git a/abs/core/net-tools/net-tools-1.60-2.6-compilefix.patch b/abs/core/net-tools/net-tools-1.60-2.6-compilefix.patch
new file mode 100644
index 0000000..92ce901
--- /dev/null
+++ b/abs/core/net-tools/net-tools-1.60-2.6-compilefix.patch
@@ -0,0 +1,23 @@
+diff -ruN net-tools-1.60.orig/lib/x25_sr.c net-tools-1.60/lib/x25_sr.c
+--- net-tools-1.60.orig/lib/x25_sr.c 2000-05-20 15:38:10.000000000 +0200
++++ net-tools-1.60/lib/x25_sr.c 2003-10-18 20:33:31.927574928 +0200
+@@ -22,6 +22,7 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <linux/x25.h>
++#include <linux/version.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <netdb.h>
+@@ -77,7 +78,11 @@
+ rt.sigdigits=sigdigits;
+
+ /* x25_route_struct.address isn't type struct sockaddr_x25, Why? */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+ memcpy(&rt.address, &sx25.sx25_addr, sizeof(x25_address));
++#else
++ memcpy(&rt.address, &sx25.sx25_addr, sizeof(struct x25_address));
++#endif
+
+ while (*args) {
+ if (!strcmp(*args,"device") || !strcmp(*args,"dev")) {
diff --git a/abs/core/net-tools/net-tools-1.60-miiioctl.patch b/abs/core/net-tools/net-tools-1.60-miiioctl.patch
new file mode 100644
index 0000000..4859273
--- /dev/null
+++ b/abs/core/net-tools/net-tools-1.60-miiioctl.patch
@@ -0,0 +1,17 @@
+--- net-tools-1.60/include/mii.h.bar Tue Jul 31 11:49:39 2001
++++ net-tools-1.60/include/mii.h Tue Jul 31 11:49:33 2001
+@@ -11,11 +11,9 @@
+
+ /* network interface ioctl's for MII commands */
+ #ifndef SIOCGMIIPHY
+-#define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */
+-#define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */
+-#define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */
+-#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters */
+-#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters */
++#define SIOCGMIIPHY 0x8947 /* Read from current PHY */
++#define SIOCGMIIREG 0x8948 /* Read any PHY register */
++#define SIOCSMIIREG 0x8949 /* Write any PHY register */
+ #endif
+
+ #include <linux/types.h>
diff --git a/abs/core/net-tools/net-tools-1.60-nameif.patch b/abs/core/net-tools/net-tools-1.60-nameif.patch
new file mode 100644
index 0000000..54def00
--- /dev/null
+++ b/abs/core/net-tools/net-tools-1.60-nameif.patch
@@ -0,0 +1,58 @@
+--- net-tools-1.60/nameif.c.nameif 2000-10-18 19:26:29.000000000 +0200
++++ net-tools-1.60/nameif.c 2003-03-19 11:02:01.000000000 +0100
+@@ -117,7 +117,8 @@
+ }
+
+ struct change {
+- struct change *next,**pprev;
++ struct change *next;
++ int found;
+ char ifname[IFNAMSIZ+1];
+ unsigned char mac[6];
+ };
+@@ -139,10 +140,7 @@
+ ch->ifname, pos);
+ if (parsemac(p,ch->mac) < 0)
+ complain(_("cannot parse MAC `%s' at %s"), p, pos);
+- if (clist)
+- clist->pprev = &ch->next;
+ ch->next = clist;
+- ch->pprev = &clist;
+ clist = ch;
+ return 0;
+ }
+@@ -200,7 +198,7 @@
+
+ void usage(void)
+ {
+- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
++ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
+ exit(1);
+ }
+
+@@ -277,21 +275,21 @@
+ ch = lookupmac(mac);
+ if (!ch)
+ continue;
+-
+- *ch->pprev = ch->next;
++
++ ch->found = 1;
+ if (strcmp(p, ch->ifname)) {
+ if (setname(p, ch->ifname) < 0)
+ complain(_("cannot change name of %s to %s: %s"),
+ p, ch->ifname, strerror(errno));
+ }
+- free(ch);
+ }
+ fclose(ifh);
+
+ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- warning(_("interface '%s' not found"), ch->ifname);
++ if (!ch->found)
++ warning(_("interface '%s' not found"), ch->ifname);
+ free(ch);
+ }
+
diff --git a/abs/core/net-tools/net-tools-1.60-nameif_strncpy.patch b/abs/core/net-tools/net-tools-1.60-nameif_strncpy.patch
new file mode 100644
index 0000000..7568e21
--- /dev/null
+++ b/abs/core/net-tools/net-tools-1.60-nameif_strncpy.patch
@@ -0,0 +1,13 @@
+--- net-tools-1.60/nameif.c.ncpy 2006-10-03 14:24:21.000000000 +0200
++++ net-tools-1.60/nameif.c 2006-10-03 14:22:43.000000000 +0200
+@@ -100,8 +100,8 @@
+ struct ifreq ifr;
+ opensock();
+ memset(&ifr,0,sizeof(struct ifreq));
+- strcpy(ifr.ifr_name, oldname);
+- strcpy(ifr.ifr_newname, newname);
++ strncpy(ifr.ifr_name, oldname, IF_NAMESIZE);
++ strncpy(ifr.ifr_newname, newname, IF_NAMESIZE);
+ return ioctl(ctl_sk, SIOCSIFNAME, &ifr);
+ }
+
diff --git a/abs/core/net-tools/net-tools.patch b/abs/core/net-tools/net-tools.patch
new file mode 100644
index 0000000..87e062e
--- /dev/null
+++ b/abs/core/net-tools/net-tools.patch
@@ -0,0 +1,52 @@
+diff -Naur net-tools-1.60-orig/config.in net-tools-1.60/config.in
+--- net-tools-1.60-orig/config.in 2000-05-21 07:32:12.000000000 -0700
++++ net-tools-1.60/config.in 2004-05-31 12:36:00.000000000 -0700
+@@ -49,7 +49,7 @@
+ *
+ bool 'UNIX protocol family' HAVE_AFUNIX y
+ bool 'INET (TCP/IP) protocol family' HAVE_AFINET y
+-bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 n
++bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 y
+ bool 'Novell IPX/SPX protocol family' HAVE_AFIPX y
+ bool 'Appletalk DDP protocol family' HAVE_AFATALK y
+ bool 'AX25 (packet radio) protocol family' HAVE_AFAX25 y
+@@ -86,6 +86,6 @@
+ *
+ * Other Features.
+ *
+-bool 'IP Masquerading support' HAVE_FW_MASQUERADE n
+-bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS n
+-bool 'Build mii-tool' HAVE_MII n
++bool 'IP Masquerading support' HAVE_FW_MASQUERADE y
++bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS y
++bool 'Build mii-tool' HAVE_MII y
+diff -Naur net-tools-1.60-orig/mii-tool.c net-tools-1.60/mii-tool.c
+--- net-tools-1.60-orig/mii-tool.c 2000-05-21 07:31:17.000000000 -0700
++++ net-tools-1.60/mii-tool.c 2004-05-31 12:35:21.000000000 -0700
+@@ -379,16 +379,16 @@
+ /*--------------------------------------------------------------------*/
+
+ const char *usage =
+-"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]
+- -V, --version display version information
+- -v, --verbose more verbose output
+- -R, --reset reset MII to poweron state
+- -r, --restart restart autonegotiation
+- -w, --watch monitor for link status changes
+- -l, --log with -w, write events to syslog
+- -A, --advertise=media,... advertise only specified media
+- -F, --force=media force specified media technology
+-media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
++"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]\n\
++ -V, --version display version information\n\
++ -v, --verbose more verbose output\n\
++ -R, --reset reset MII to poweron state\n\
++ -r, --restart restart autonegotiation\n\
++ -w, --watch monitor for link status changes\n\
++ -l, --log with -w, write events to syslog\n\
++ -A, --advertise=media,... advertise only specified media\n\
++ -F, --force=media force specified media technology\n\
++media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,\n\
+ (to advertise both HD and FD) 100baseTx, 10baseT\n";
+
+ int main(int argc, char **argv)
diff --git a/abs/core/net-tools/nisdomainname.conf.d b/abs/core/net-tools/nisdomainname.conf.d
new file mode 100644
index 0000000..6033ecf
--- /dev/null
+++ b/abs/core/net-tools/nisdomainname.conf.d
@@ -0,0 +1,3 @@
+# Set your NIS domain name here
+NISDOMAINNAME=""
+
diff --git a/abs/core/netcfg/PKGBUILD b/abs/core/netcfg/PKGBUILD
new file mode 100644
index 0000000..de024a2
--- /dev/null
+++ b/abs/core/netcfg/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <james@archlinux.org>
+pkgname=netcfg
+pkgver=2.0.6
+pkgrel=1
+pkgdesc="Network configuration and profile scripts"
+url="http://archlinux.org"
+license=("BSD")
+backup=(etc/iftab)
+depends=(wireless_tools wpa_supplicant net-tools mktemp)
+source=(http://dev.archlinux.org/~james/netcfg/netcfg-$pkgver.tar.gz)
+md5sums=('8bf6861e800a5b35f9f8ee4db8e07151')
+#source=(netcfg-$pkgver.tar.gz)
+arch=(i686 x86_64)
+
+build() {
+ cd $startdir/src/netcfg-$pkgver
+ sed -i 's|/man/|/share/man/|' Makefile
+ make DESTDIR=$startdir/pkg install
+ make DESTDIR=$startdir/pkg install-contrib
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/netcfg/LICENSE
+
+ # Uncomment once initscripts patch merged
+ # ln -s /usr/bin/netcfg2 $startdir/pkg/usr/bin/netcfg
+}
diff --git a/abs/core/ntfsprogs/PKGBUILD b/abs/core/ntfsprogs/PKGBUILD
new file mode 100644
index 0000000..9f24ad6
--- /dev/null
+++ b/abs/core/ntfsprogs/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=ntfsprogs
+pkgver=2.0.0
+pkgrel=2
+depends=('glibc' 'fuse' 'e2fsprogs')
+makedepends=('pkgconfig')
+pkgdesc="NTFS Resizing Tool"
+arch=(i686 x86_64)
+license=('GPL')
+#source=(http://heanet.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+#source=(http://mesh.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+source=(http://switch.dl.sourceforge.net/sourceforge/linux-ntfs/$pkgname-$pkgver.tar.gz)
+url="http://linux-ntfs.sourceforge.net"
+install=('ntfsprogs.install')
+options=(!libtool)
+md5sums=('2c402b647bb7aeb1d3f8ce1cc354fd68')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --disable-gnome-vfs --enable-fuse-module PKG_CONFIG=/usr/bin/pkg-config
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
diff --git a/abs/core/ntfsprogs/ntfsprogs.install b/abs/core/ntfsprogs/ntfsprogs.install
new file mode 100644
index 0000000..a58d672
--- /dev/null
+++ b/abs/core/ntfsprogs/ntfsprogs.install
@@ -0,0 +1,24 @@
+ # arg 1: the new package version
+post_install() {
+cat << EOF
+NOTE:
+==> There is a good guide to use the ntfsresize utility at:
+ 'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html'
+
+WARNING:
+==> This program "can" cause dataloss if you don't use it right!
+==> Make a backup of your files! You have been warned !!!
+EOF
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+post_install $1
+}
+
+
+op=$1
+shift
+$op $* \ No newline at end of file
diff --git a/abs/core/nuvexport/PKGBUILD b/abs/core/nuvexport/PKGBUILD
new file mode 100644
index 0000000..e414b1e
--- /dev/null
+++ b/abs/core/nuvexport/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Paul Mattal <paul@mattal.com>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=nuvexport
+pkgver=20080311
+relnum=0.5
+pkgrel=1
+pkgdesc="Export for MythTV nuv files to other formats (DVD/SVCD/DivX,etc.)"
+arch=(i686 x86_64)
+url="http://forevermore.net/files/nuvexport"
+license=""
+depends=(perl perl-dbi 'ffmpeg>=20060920' perl-dbd-mysql perl-date-manip)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=
+source=(http://forevermore.net/files/nuvexport/$pkgname-$relnum-0.$pkgver.svn.tar.bz2 $pkgname-ipod-disable.patch)
+md5sums=('2d0a99623f06394daf3bf8769536d3cd' 'acd2dad9987e68359ead8b0be5e5797c')
+
+build() {
+ cd $startdir/src/$pkgname-$relnum
+
+ sed -i "s|prefix=/usr/local|prefix=$startdir/pkg/usr|g" Makefile || return 1
+ sed -i "s|/usr/bin/install|/bin/install|g" Makefile || return 1
+ sed -i "s|sysconfdir=/etc|sysconfdir=$startdir/pkg/etc|g" Makefile || return 1
+
+ mkdir $startdir/pkg/usr || return 1
+ make install || return 1
+ sed -i "s|/tmp/fifodir|/var/tmp/fifodir|g" $startdir/pkg/usr/share/nuvexport/export/*.pm || return 1
+}
diff --git a/abs/core/nuvexport/nuvexport-ipod-disable.patch b/abs/core/nuvexport/nuvexport-ipod-disable.patch
new file mode 100644
index 0000000..dfb17a9
--- /dev/null
+++ b/abs/core/nuvexport/nuvexport-ipod-disable.patch
@@ -0,0 +1,12 @@
+diff -urN nuvexport-0.3/nuvexport nuvexport-0.3-fixed/nuvexport
+--- nuvexport-0.3/nuvexport 2006-07-26 03:37:13.000000000 -0400
++++ nuvexport-0.3-fixed/nuvexport 2006-07-27 20:58:41.000000000 -0400
+@@ -93,7 +93,7 @@
+ push @Exporters, export::ffmpeg::ASF->new;
+ push @Exporters, export::ffmpeg::MP3->new;
+ push @Exporters, export::ffmpeg::PSP->new;
+- push @Exporters, export::ffmpeg::iPod->new;
++# push @Exporters, export::ffmpeg::iPod->new;
+ }
+ elsif ($export_prog eq 'mencoder') {
+ push @Exporters, export::mencoder::XviD->new;
diff --git a/abs/core/openexr/PKGBUILD b/abs/core/openexr/PKGBUILD
new file mode 100644
index 0000000..1c92fbb
--- /dev/null
+++ b/abs/core/openexr/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=openexr
+pkgver=1.4.0a
+pkgrel=2
+depends=('mesa' 'libxext' 'libxft' 'fltk')
+makedepends=('xproto')
+pkgdesc="openexr library for EXR images"
+arch=(i686 x86_64)
+options=(!libtool)
+source=(http://savannah.nongnu.org/download/$pkgname/$pkgname-$pkgver.tar.gz gcc43.patch)
+url="http://www.openexr.org"
+
+build() {
+ cd $startdir/src/$pkgname-1.4.0
+ # gcc4 fix
+ #patch -Np1 -i ../openexr-gcc4.patch
+ patch -Np1 -i ../gcc43.patch
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
+md5sums=('d0a4b9a930c766fa51561b05fb204afe' 'd972a8ea4296762ea30a3dc7de2208ac')
diff --git a/abs/core/openexr/gcc43.patch b/abs/core/openexr/gcc43.patch
new file mode 100644
index 0000000..08ae699
--- /dev/null
+++ b/abs/core/openexr/gcc43.patch
@@ -0,0 +1,21 @@
+--- a/exrenvmap/main.cpp
++++ b/exrenvmap/main.cpp
+@@ -46,6 +46,8 @@
+ #include <exception>
+ #include <stdlib.h>
+
++#include <cstring>
++
+ using namespace Imf;
+ using namespace std;
+
+--- a/exrmaketiled/main.cpp
++++ b/exrmaketiled/main.cpp
+@@ -47,6 +47,8 @@
+ #include <string>
+ #include <stdlib.h>
+
++#include <cstring>
++
+ using namespace Imf;
+ using namespace std;
diff --git a/abs/core/openexr/openexr-gcc4.patch b/abs/core/openexr/openexr-gcc4.patch
new file mode 100644
index 0000000..ff63681
--- /dev/null
+++ b/abs/core/openexr/openexr-gcc4.patch
@@ -0,0 +1,11 @@
+--- OpenEXR-1.2.2/exrmaketiled/Image.h~ 2004-06-04 06:11:23.000000000 +0200
++++ OpenEXR-1.2.2/exrmaketiled/Image.h 2005-07-15 07:02:08.000000000 +0200
+@@ -50,6 +50,8 @@
+ #include <map>
+
+
++class Image;
++
+ class ImageChannel
+ {
+ public:
diff --git a/abs/core/openssh/PKGBUILD b/abs/core/openssh/PKGBUILD
new file mode 100644
index 0000000..523544f
--- /dev/null
+++ b/abs/core/openssh/PKGBUILD
@@ -0,0 +1,61 @@
+# $Id: PKGBUILD 3735 2008-06-30 20:01:30Z andyrtr $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=openssh
+pkgver=5.0p1
+pkgrel=2
+#_gsskexver=20080404
+pkgdesc='A Secure SHell server/client'
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.openssh.org/portable.html"
+backup=('etc/ssh/ssh_config' 'etc/ssh/sshd_config' 'etc/pam.d/sshd')
+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)
+ #http://www.sxw.org.uk/computing/patches/$pkgname-$pkgver-gsskex-$_gsskexver.patch
+md5sums=('1f1dfaa775f33dd3328169de9bdc292a'
+ 'd9ee5e0a0d143689b3d6f11454a2a892'
+ 'e2cea70ac13af7e63d40eb04415eacd5'
+ '1c7c2ea8734ec7e3ca58d820634dc73a')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #patch -up0 < $startdir/src/$pkgname-$pkgver-gsskex-$_gsskexver.patch
+
+ #NOTE we disable-strip so that makepkg can decide whether to strip or not
+ ./configure --prefix=/usr --libexecdir=/usr/lib/ssh \
+ --sysconfdir=/etc/ssh --with-tcp-wrappers --with-privsep-user=nobody \
+ --with-md5-passwords --with-pam --with-mantype=man --mandir=/usr/man \
+ --with-xauth=/usr/bin/xauth --with-kerberos5=/usr --disable-strip
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ #What is this for? Is it needed?
+ mkdir -p $startdir/pkg/var/empty
+
+ install -D -m755 $startdir/src/sshd $startdir/pkg/etc/rc.d/sshd
+
+ install -D -m644 LICENCE $startdir/pkg/usr/share/licenses/$pkgname/LICENCE
+ install -D -m644 $startdir/src/sshd.pam $startdir/pkg/etc/pam.d/sshd
+ install -D -m644 $startdir/src/sshd.confd $startdir/pkg/etc/conf.d/sshd
+
+ rm $startdir/pkg/usr/man/man1/slogin.1
+ ln -sf ssh.1.gz $startdir/pkg/usr/man/man1/slogin.1.gz
+
+ #additional contrib scripts that we like
+ install -D -m755 contrib/findssl.sh $startdir/pkg/usr/bin/findssl.sh
+ install -D -m755 contrib/ssh-copy-id $startdir/pkg/usr/bin/ssh-copy-id
+ install -D -m644 contrib/ssh-copy-id.1 $startdir/pkg/usr/man/man1/ssh-copy-id.1
+
+ #adjust our config files
+ sed -i \
+ -e 's|^#ListenAddress 0.0.0.0|ListenAddress 0.0.0.0|g' \
+ -e 's|^#UsePAM no|UsePAM yes|g' \
+ -e 's|^#ChallengeResponseAuthentication yes|ChallengeResponseAuthentication no|g' \
+ $startdir/pkg/etc/ssh/sshd_config
+ sed -i -e 's|^# Host \*|Host *|g' $startdir/pkg/etc/ssh/ssh_config
+ echo "HashKnownHosts yes" >> $startdir/pkg/etc/ssh/ssh_config
+ echo "StrictHostKeyChecking ask" >> $startdir/pkg/etc/ssh/ssh_config
+}
diff --git a/abs/core/openssh/sshd b/abs/core/openssh/sshd
new file mode 100755
index 0000000..875028a
--- /dev/null
+++ b/abs/core/openssh/sshd
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/sshd
+
+PID=`cat /var/run/sshd.pid 2>/dev/null`
+case "$1" in
+ start)
+ stat_busy "Starting Secure Shell Daemon"
+ [ -f /etc/ssh/ssh_host_key ] || { /usr/bin/ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_rsa_key ] || { /usr/bin/ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_dsa_key ] || { /usr/bin/ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key >/dev/null; }
+ [ -z "$PID" ] && /usr/sbin/sshd $SSHD_ARGS
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon sshd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Secure Shell Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon sshd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/openssh/sshd.confd b/abs/core/openssh/sshd.confd
new file mode 100644
index 0000000..5ce7c00
--- /dev/null
+++ b/abs/core/openssh/sshd.confd
@@ -0,0 +1,4 @@
+#
+# Parameters to be passed to sshd
+#
+SSHD_ARGS=""
diff --git a/abs/core/openssh/sshd.pam b/abs/core/openssh/sshd.pam
new file mode 100644
index 0000000..dc70815
--- /dev/null
+++ b/abs/core/openssh/sshd.pam
@@ -0,0 +1,10 @@
+#%PAM-1.0
+#auth required pam_securetty.so #Disable remote root
+auth required pam_unix.so
+auth required pam_nologin.so
+auth required pam_env.so
+account required pam_unix.so
+account required pam_time.so
+password required pam_unix.so
+session required pam_unix_session.so
+session required pam_limits.so
diff --git a/abs/core/openssl/PKGBUILD b/abs/core/openssl/PKGBUILD
new file mode 100644
index 0000000..ec3fe68
--- /dev/null
+++ b/abs/core/openssl/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 9446 2008-08-17 18:04:42Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+pkgname=openssl
+pkgver=0.9.8h
+pkgrel=13
+pkgdesc='The Open Source toolkit for Secure Sockets Layer and Transport Layer Security'
+arch=('i686' 'x86_64')
+url='http://www.openssl.org'
+license=('custom:BSD')
+groups=('base')
+depends=('glibc')
+options=('!makeflags')
+source=("http://www.openssl.org/source/${pkgname}-${pkgver}.tar.gz" \
+ 'http://www.linuxfromscratch.org/patches/blfs/svn/openssl-0.9.8g-fix_manpages-1.patch')
+md5sums=('7d3d41dafc76cf2fcb5559963b5783b3'
+ '04a6a88c2ee4badd4f8649792b73eaf3')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ patch -p1 -i ../openssl-0.9.8g-fix_manpages-1.patch || return 1
+ ./config --prefix=/usr --openssldir=/etc/ssl shared
+
+ make || return 1
+ make INSTALL_PREFIX=$startdir/pkg MANDIR=/usr/share/man install
+
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core/pacman/PKGBUILD b/abs/core/pacman/PKGBUILD
new file mode 100644
index 0000000..ccd1857
--- /dev/null
+++ b/abs/core/pacman/PKGBUILD
@@ -0,0 +1,46 @@
+# $Id: PKGBUILD 10342 2008-08-27 01:24:22Z dan $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=pacman
+pkgver=3.2.1
+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.5.5' 'libdownload>=1.3')
+backup=(etc/pacman.conf etc/makepkg.conf etc/pacman.d/mirrorlist)
+install=pacman.install
+options=(!libtool)
+source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz
+ pacman.conf
+ mirrorlist)
+md5sums=('5b133613cebd74aa8c199de049e25cc4'
+ '49b799e923933a30cdefcac06f530fb0'
+ 'a16981c0fef957a95999550f68cdb0f8')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ # install arch specific stuff
+ mkdir -p ${startdir}/pkg/etc/pacman.d
+ install -m644 ${startdir}/src/pacman.conf ${startdir}/pkg/etc/
+ install -m644 ${startdir}/src/mirrorlist ${startdir}/pkg/etc/pacman.d/
+
+ # customize mirrorlist to architecture
+ sed -i -e "s/@carch@/${CARCH}/g" ${startdir}/pkg/etc/pacman.d/mirrorlist
+
+ # install completion files
+ mkdir -p $startdir/pkg/etc/bash_completion.d/
+ install -m644 contrib/bash_completion $startdir/pkg/etc/bash_completion.d/pacman
+ mkdir -p $startdir/pkg/usr/share/zsh/site-functions/
+ install -m644 contrib/zsh_completion $startdir/pkg/usr/share/zsh/site-functions/_pacman
+}
+
+# vim: set ts=2 sw=2 et:
diff --git a/abs/core/pacman/mirrorlist b/abs/core/pacman/mirrorlist
new file mode 100644
index 0000000..83e75ae
--- /dev/null
+++ b/abs/core/pacman/mirrorlist
@@ -0,0 +1,101 @@
+#
+# Arch Linux repository mirrorlist
+#
+
+# North America
+# - United States
+Server = ftp://ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://locke.suu.edu/linux/dist/archlinux/$repo/os/@carch@
+Server = http://archlinux.unixheads.org/$repo/os/@carch@
+Server = ftp://ftp.gtlib.gatech.edu/pub/linux/distributions/archlinux/$repo/os/@carch@
+Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/@carch@
+Server = http://mirrors.easynews.com/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.ibiblio.org/pub/linux/distributions/archlinux/$repo/os/@carch@
+Server = http://holmes.umflint.edu/archlinux/$repo/os/@carch@
+Server = http://mirror.neotuli.net/arch/$repo/os/@carch@
+Server = http://mirror.rit.edu/archlinux/$repo/os/@carch@
+Server = http://mirror.umoss.org/archlinux/$repo/os/@carch@
+Server = http://schlunix.org/archlinux/$repo/os/@carch@
+# - Canada
+Server = ftp://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/@carch
+
+# South America
+# - Brazil
+Server = http://archlinux.c3sl.ufpr.br/$repo/os/@carch@
+Server = ftp://archlinux.c3sl.ufpr.br/archlinux/$repo/os/@carch@
+Server = ftp://ftp.las.ic.unicamp.br/pub/archlinux/$repo/os/@carch@
+
+# Europe
+# - Austria
+Server = ftp://gd.tuwien.ac.at/opsys/linux/archlinux/$repo/os/@carch@
+# - Belgium
+Server = ftp://ftp.belnet.be/mirror/archlinux.org/$repo/os/@carch@
+# - Czech Republic
+Server = ftp://ftp.sh.cvut.cz/MIRRORS/arch/$repo/os/@carch@
+# - Estonia
+Server = ftp://ftp.estpak.ee/pub/archlinux/$repo/os/@carch@
+# - France
+Server = ftp://mir1.archlinuxfr.org/archlinux/$repo/os/@carch@
+Server = ftp://mir2.archlinuxfr.org/archlinux/$repo/os/@carch@
+Server = ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/@carch@
+Server = http://mir.archlinux.fr/$repo/os/@carch@
+Server = ftp://ftp.free.fr/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp.rez-gif.supelec.fr/Linux/archlinux/$repo/os/@carch@
+# - Germany
+Server = ftp://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.uni-bayreuth.de/pub/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.archlinuxppc.org/@carch@/$repo/os/@carch@
+Server = ftp://ftp.tu-chemnitz.de/pub/linux/archlinux/$repo/os/@carch@
+Server = http://ftp.uni-kl.de/pub/linux/archlinux/$repo/os/@carch@
+# - Great Britain
+Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://mirrors.uk2.net/pub/archlinux/$repo/os/@carch@
+Server = http://archlinux.mirrors.uk2.net/$repo/os/@carch@
+# - Greece
+Server = ftp://ftp.ntua.gr/pub/linux/archlinux/$repo/os/@carch@
+# - Hungary
+Server = ftp://ftp.mfa.kfki.hu/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+# - Ireland
+Server = ftp://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/@carch@
+# - Italy
+Server = ftp://mi.mirror.garr.it/mirrors/archlinux/$repo/os/@carch@
+# - Netherlands
+Server = ftp://ftp.nluug.nl/pub/metalab/distributions/archlinux/$repo/os/@carch@
+Server = ftp://ftp.surfnet.nl/pub/os/Linux/distr/archlinux/$repo/os/@carch@
+# - Norway
+Server = http://arch.likbilen.com/$repo/os/@carch
+# - Poland
+Server = ftp://mirror.icis.pcz.pl/archlinux/$repo/os/@carch@
+Server = http://piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = ftp://ftp.piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/@carch@
+Server = http://unix.net.pl/archlinux.org/$repo/os/@carch@
+# - Portugal
+Server = ftp://cesium.di.uminho.pt/pub/archlinux/$repo/os/@carch@
+# - Romania
+Server = ftp://ftp.iasi.roedu.net/mirrors/archlinux.org/$repo/os/@carch@
+# - Russia
+Server = ftp://mirror.yandex.ru/archlinux/$repo/os/@carch@
+Server = http://archlinux.freeside.ru/$repo/os/@carch@
+# - Sweden
+Server = ftp://ftp.ds.hj.se/pub/os/linux/archlinux/$repo/os/@carch@
+Server = ftp://ftp.gigabit.nu/$repo/os/@carch@
+# - Switzerland
+Server = http://archlinux.puzzle.ch/$repo/os/@carch@
+# - Turkey
+Server = http://server.elsistech.com/archlinux/$repo/os/@carch@
+# - Ukraine
+Server = ftp://hell.org.ua/archlinux/$repo/os/@carch@
+Server = ftp://ftp.linux.kiev.ua/pub/Linux/ArchLinux/$repo/os/@carch@
+
+# Asia
+# - Israel
+Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/@carch@
+# - Vietnam
+# Domain name is ftp.indochinalinux.com but there are frequent DNS problems
+Server = ftp://202.78.230.5/archlinux/$repo/os/@carch@
+
+# Australia
+Server = ftp://mirror.pacific.net.au/linux/archlinux/$repo/os/@carch@
+Server = ftp://mirror.aarnet.edu.au/pub/archlinux/$repo/os/@carch@
+
diff --git a/abs/core/pacman/pacman.conf b/abs/core/pacman/pacman.conf
new file mode 100644
index 0000000..6a7bd54
--- /dev/null
+++ b/abs/core/pacman/pacman.conf
@@ -0,0 +1,76 @@
+#
+# /etc/pacman.conf
+#
+# See the pacman.conf(5) manpage for option and repository directives
+
+#
+# GENERAL OPTIONS
+#
+[options]
+# The following paths are commented out with their default values listed.
+# If you wish to use different paths, uncomment and update the paths.
+#RootDir = /
+#DBPath = /var/lib/pacman/
+#CacheDir = /var/cache/pacman/pkg/
+#LogFile = /var/log/pacman.log
+HoldPkg = pacman glibc
+# If upgrades are available for these packages they will be asked for first
+SyncFirst = pacman
+#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
+#XferCommand = /usr/bin/curl %u > %o
+
+# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
+#IgnorePkg =
+#IgnoreGroup =
+
+#NoUpgrade =
+#NoExtract =
+
+# Misc options (all disabled by default)
+#NoPassiveFtp
+#UseSyslog
+#ShowSize
+#UseDelta
+#TotalDownload
+
+#
+# REPOSITORIES
+# - can be defined here or included from another file
+# - pacman will search repositories in the order defined here
+# - local/custom mirrors can be added here or in separate files
+# - repositories listed first will take precedence when packages
+# have identical names, regardless of version number
+# - URLs will have $repo replaced by the name of the current repo
+#
+# Repository entries are of the format:
+# [repo-name]
+# Server = ServerName
+# Include = IncludePath
+#
+# The header [repo-name] is crucial - it must be present and
+# 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.
+#[testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[core]
+# Add your preferred servers here, they will be used first
+Include = /etc/pacman.d/mirrorlist
+
+[extra]
+# 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
+
+# An example of a custom package repository. See the pacman manpage for
+# tips on creating your own repositories.
+#[custom]
+#Server = file:///home/custompkgs
+
diff --git a/abs/core/pacman/pacman.install b/abs/core/pacman/pacman.install
new file mode 100644
index 0000000..46e4763
--- /dev/null
+++ b/abs/core/pacman/pacman.install
@@ -0,0 +1,56 @@
+# 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
+}
+
+_resetbackups() {
+ echo ">>> Performing one-time reset of NoUpgrade md5sums. After this reset"
+ echo ">>> you are able to remove all NoUpgrade lines of already protected"
+ echo ">>> files from pacman.conf."
+ echo ">>>"
+
+ # path variables
+ pacconf="/etc/pacman.conf"
+ dbpath="/var/lib/pacman/local"
+
+ # get a list of NoUpgrade files from the user's pacman.conf
+ echo ">>> Retrieving pacman.conf NoUpgrade list..."
+ config=$(grep "^NoUpgrade" $pacconf | cut -d'=' -f2)
+ # add the standard list of files, even if they are already above
+ config="$config \
+ etc/passwd etc/group etc/shadow etc/sudoers \
+ etc/fstab etc/raidtab etc/ld.so.conf \
+ etc/rc.conf etc/rc.local \
+ etc/modprobe.conf etc/modules.conf \
+ etc/lilo.conf boot/grub/menu.lst"
+
+ # blank md5sum for use in sed expression
+ zeroes='00000000000000000000000000000000'
+
+ for file in $config; do
+ echo ">>> -> finding owner of /$file..."
+ line=$(LC_ALL=C LANG=C pacman -Qo /$file 2>/dev/null)
+ # if file is owned by a package, go find its incorrectly stored sum
+ if [ ! -z "$line" ]; then
+ # get the name and version of the package owning file
+ name=$(echo $line | awk '{print $5}')
+ version=$(echo $line | awk '{print $6}')
+ # set the path to the backup array holding the md5sum
+ path="$dbpath/$name-$version/files"
+ # run a sed on the path to reset the line containing $file
+ # NOTE: literal tab characters in sed expression after $file
+ echo ">>> -> resetting sum of /$file..."
+ sed -i "s#$file [0-9a-fA-F]*#$file $zeroes#" $path
+ else
+ echo ">>> -> $file is unowned."
+ fi
+ done
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/pam/PKGBUILD b/abs/core/pam/PKGBUILD
new file mode 100644
index 0000000..4bdca6a
--- /dev/null
+++ b/abs/core/pam/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 3761 2008-06-30 20:27:30Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=pam
+pkgver=1.0.1
+pkgrel=11
+pkgdesc="PAM (Pluggable Authentication Modules) library"
+arch=(i686 x86_64)
+license=('GPL2')
+url="http://www.kernel.org/pub/linux/libs/pam/"
+groups=('base')
+depends=('glibc' 'db>=4.7' 'cracklib')
+backup=(etc/security/{access.conf,group.conf,limits.conf,namespace.conf,namespace.init,pam_env.conf,time.conf} etc/pam.d/other etc/default/passwd etc/environment)
+source=(http://www.kernel.org/pub/linux/libs/pam/library/Linux-PAM-$pkgver.tar.bz2 \
+ ftp://ftp.suse.com/pub/people/kukuk/pam/pam_unix2/pam_unix2-2.1.tar.bz2 \
+ other)
+options=('!libtool' '!emptydirs')
+md5sums=('1c75f81bd44c5da93014992820917847'
+ '08d3bc1940897b5dfcbe2f51dd979ad0'
+ '6e6c8719e5989d976a14610f340bd33a')
+
+build() {
+ cd $startdir/src/Linux-PAM-$pkgver
+ ./configure --sysconfdir=/etc DESTDIR=$startdir/pkg --libdir=/lib
+ make || return 1
+ make INSTALL=/bin/install DESTDIR=$startdir/pkg install
+ install -D -m644 ../other $startdir/pkg/etc/pam.d/other
+ # build pam_unix2 module
+ # source ftp://ftp.suse.com/pub/people/kukuk/pam/pam_unix2
+ cd $startdir/src/pam_unix2-2.1
+ ./configure
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ # add the realtime permissions for audio users
+ sed -i 's|# End of file||' $startdir/pkg/etc/security/limits.conf
+ cat >>$startdir/pkg/etc/security/limits.conf <<_EOT
+* - rtprio 0
+* - nice 0
+@audio - rtprio 65
+@audio - nice -10
+@audio - memlock 40000
+_EOT
+ # fix some missing symlinks from old pam for compatibility
+ cd $startdir/pkg/lib/security
+ ln -s pam_unix.so pam_unix_acct.so
+ ln -s pam_unix.so pam_unix_auth.so
+ ln -s pam_unix.so pam_unix_passwd.so
+ ln -s pam_unix.so pam_unix_session.so
+ # set unix_chkpwd uid
+ chmod +s $startdir/pkg/sbin/unix_chkpwd
+}
diff --git a/abs/core/pam/other b/abs/core/pam/other
new file mode 100644
index 0000000..08498b4
--- /dev/null
+++ b/abs/core/pam/other
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth required pam_unix.so
+account required pam_unix.so
+password required pam_unix.so
+session required pam_unix.so
diff --git a/abs/core/pam/pam.install b/abs/core/pam/pam.install
new file mode 100644
index 0000000..eb0899c
--- /dev/null
+++ b/abs/core/pam/pam.install
@@ -0,0 +1,22 @@
+# arg 1: the new package version
+post_install() {
+ # need to run this immediately -- pacman only runs it at the end of
+ # all package installs
+ /sbin/ldconfig -r .
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/pango/PKGBUILD b/abs/core/pango/PKGBUILD
new file mode 100644
index 0000000..5284f02
--- /dev/null
+++ b/abs/core/pango/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 4025 2008-07-02 18:01:45Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pango
+pkgver=1.20.5
+pkgrel=1
+pkgdesc="A library for layout and rendering of text"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glib2>=2.16.4' 'cairo>=1.6.4' 'libxft>=2.1.12' 'libthai>=0.1.9')
+makedepends=('pkgconfig' 'libxt')
+options=('!libtool' '!emptydirs')
+install=pango.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.20/${pkgname}-${pkgver}.tar.bz2)
+url="http://www.gtk.org/"
+md5sums=('052b60a12f6b2eb4f251ab961f2b2b84')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --without-qt || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/pango/pango.install b/abs/core/pango/pango.install
new file mode 100644
index 0000000..9978739
--- /dev/null
+++ b/abs/core/pango/pango.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install() {
+ # we need to ldconfig first, in case xfree86's libs aren't
+ # in ld.so.cache yet
+ sbin/ldconfig -r .
+ usr/bin/pango-querymodules >etc/pango/pango.modules
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ if [ -f usr/etc/pango/pango.modules ]; then
+ rm usr/etc/pango/pango.modules
+ fi
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ rm etc/pango/pango.modules
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/parted/PKGBUILD b/abs/core/parted/PKGBUILD
new file mode 100644
index 0000000..b65a9ca
--- /dev/null
+++ b/abs/core/parted/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: dorphell <dorphell@archlinux.org>
+
+pkgname=parted
+pkgver=1.8.8
+pkgrel=1
+pkgdesc="A program for creating, destroying, resizing, checking and copying partitions"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://www.gnu.org/software/parted/parted.html"
+depends=('e2fsprogs')
+source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz parted-1.7.1-fix-seg.patch)
+md5sums=('0d494591731082ec57cc18627728124a' '88f3c5b45fdd1d3dce70a1a19bf48481')
+options=(!libtool)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ #Arch64 fix - still needed?
+ [ "$CARCH" = "x86_64" ] && patch -Np1 -i ../parted-1.7.1-fix-seg.patch
+ ./configure --prefix=/usr --disable-debug --disable-Werror
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/parted/parted-1.7.1-fix-seg.patch b/abs/core/parted/parted-1.7.1-fix-seg.patch
new file mode 100644
index 0000000..a05c57c
--- /dev/null
+++ b/abs/core/parted/parted-1.7.1-fix-seg.patch
@@ -0,0 +1,13 @@
+--- parted-1.7.1/libparted/fs/hfs/probe.c 2006-05-25 13:28:58.000000000 -0400
++++ parted-1.7.1.new/libparted/fs/hfs/probe.c 2006-06-09 16:58:35.000000000 -0400
+@@ -42,8 +42,9 @@
+ {
+ PedDevice* dev;
+
++ dev = geom->dev;
+ PED_ASSERT (geom != NULL, return 0);
+- PED_ASSERT ((dev = geom->dev) != NULL, return 0);
++ PED_ASSERT (dev != NULL, return 0);
+
+ if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
diff --git a/abs/core/pciutils/PKGBUILD b/abs/core/pciutils/PKGBUILD
new file mode 100644
index 0000000..9820582
--- /dev/null
+++ b/abs/core/pciutils/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 7903 2008-08-05 06:38:41Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+pkgname=pciutils
+pkgver=3.0.0
+pkgrel=11
+pkgdesc="PCI bus configuration space access library and tools"
+arch=(i686 x86_64)
+license=('GPL2')
+groups=('base')
+url="http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html"
+makedepends=('wget')
+depends=('glibc')
+source=(ftp://ftp.kernel.org/pub/software/utils/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ CFLAGS="${CFLAGS} -fPIC -DPIC"
+ sed -i -e 's/^OPT=.*/OPT=-O2 -pipe -fPIC -DPIC/g' Makefile
+ ./update-pciids.sh
+
+ make ZLIB=no PREFIX=/usr SHAREDIR=/usr/share/hwdata MANDIR=/usr/share/man all || return 1
+ make PREFIX=${startdir}/pkg/usr SHAREDIR=${startdir}/pkg/usr/share/hwdata MANDIR=${startdir}/pkg/usr/share/man install
+ install -d ${startdir}/pkg/usr/lib
+ install -m644 lib/libpci.a ${startdir}/pkg/usr/lib
+ for i in config.h header.h pci.h types.h; do
+ install -D -m 644 lib/${i} ${startdir}/pkg/usr/include/pci/${i}
+ done
+}
+md5sums=('85b5dae042217cf11bca10d52210a78d')
diff --git a/abs/core/pcmciautils/PKGBUILD b/abs/core/pcmciautils/PKGBUILD
new file mode 100644
index 0000000..dbbb092
--- /dev/null
+++ b/abs/core/pcmciautils/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=pcmciautils
+pkgver=014
+pkgrel=13
+pkgdesc="Utilities for inserting and removing PCMCIA cards"
+arch=(i686 x86_64)
+url="http://kernel.org/pub/linux/utils/kernel/pcmcia/pcmcia.html"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'sysfsutils' 'module-init-tools>=3.2pre9')
+conflicts=('pcmcia-cs')
+source=(http://kernel.org/pub/linux/utils/kernel/pcmcia/pcmciautils-$pkgver.tar.bz2)
+md5sums=('3f07c926875f6c5dcb83240f39725177')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ sed -i -e 's,/usr/bin/install,/bin/install,g' Makefile
+ make -j1 || return 1
+ make DESTDIR=$startdir/pkg/ install
+ # fix udev rules for new modalias layout
+ sed -i -e 's/MODALIAS/ENV{MODALIAS}/g' -e 's/$modalias/$env{MODALIAS}/g'\
+ $startdir/pkg/etc/udev/rules.d/60-pcmcia.rules
+ # fix lspcmcia symlink
+ ln -sf pccardctl $startdir/pkg/sbin/lspcmcia
+ # adding static binaries for initrd setup
+ make clean
+ sed -i -e 's/STATIC\ =\ false/STATIC\ =\ true/g' Makefile
+ make -j1 || return 1
+ install -D -m755 pcmcia-check-broken-cis $startdir/pkg/sbin/pcmcia-check-broken-cis.static
+ install -D -m755 pcmcia-socket-startup $startdir/pkg/sbin/pcmcia-socket-startup.static
+ # fix modprobe rules to use the load-modules.sh
+ sed -i -e "s#/sbin/modprobe#/lib/udev/load-modules.sh#g" $startdir/pkg/etc/udev/rules.d/*
+}
diff --git a/abs/core/pcre/ChangeLog b/abs/core/pcre/ChangeLog
new file mode 100644
index 0000000..fa86646
--- /dev/null
+++ b/abs/core/pcre/ChangeLog
@@ -0,0 +1,10 @@
+2008-07-07 Eric Belanger <eric@archlinux.org>
+
+ * pcre 7.7-2
+ * Added libpcre-7.7-buffer-overflow.patch to fix buffer overflow (close FS#10845)
+
+2008-05-10 Eric Belanger <eric@archlinux.org>
+
+ * pcre 7.7-1
+ * Upstream update
+ * Added ChangeLog
diff --git a/abs/core/pcre/PKGBUILD b/abs/core/pcre/PKGBUILD
new file mode 100644
index 0000000..2cf7252
--- /dev/null
+++ b/abs/core/pcre/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 4449 2008-07-07 16:12:00Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=pcre
+pkgver=7.7
+pkgrel=11
+pkgdesc="A library that implements Perl 5-style regular expressions"
+arch=('i686' 'x86_64')
+url="http://pcre.sourceforge.net"
+license=('custom')
+groups=('base')
+depends=('gcc-libs')
+options=('!libtool' '!makeflags')
+source=(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/${pkgname}-${pkgver}.tar.bz2 \
+ libpcre-7.7-buffer-overflow.patch)
+md5sums=('4b2e9cde1f7227448dddba59843efa0b' 'ea2204b6a0cbc83b3ca925ace06459a1')
+sha1sums=('f1f54d3e13e6cb427de962e62eaaee32c74cba38' '5a69fb97f1fa547f9012082221a6b98d77b65277')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ [ "${CARCH}" = "x86_64" ] && export CFLAGS="${CFLAGS} -fPIC"
+ patch -p1 < ../libpcre-7.7-buffer-overflow.patch || return 1
+ ./configure --prefix=/usr --enable-utf8 --enable-unicode-properties || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ # grep uses pcre, so we need the libs in /lib
+ mkdir -p ${pkgdir}/lib
+ mv ${pkgdir}/usr/lib/libpcre.so.* ${pkgdir}/lib/ || return 1
+ ln -sf ../../lib/libpcre.so.0 ${pkgdir}/usr/lib/libpcre.so || return 1
+ install -D -m644 LICENCE ${pkgdir}/usr/share/licenses/${pkgname}/license.txt || return 1
+}
diff --git a/abs/core/pcre/libpcre-7.7-buffer-overflow.patch b/abs/core/pcre/libpcre-7.7-buffer-overflow.patch
new file mode 100644
index 0000000..a27987f
--- /dev/null
+++ b/abs/core/pcre/libpcre-7.7-buffer-overflow.patch
@@ -0,0 +1,16 @@
+diff -NrU5 pcre-7.7.orig/pcre_compile.c pcre-7.7/pcre_compile.c
+--- pcre-7.7.orig/pcre_compile.c 2008-06-18 17:08:49.000000000 +0200
++++ pcre-7.7/pcre_compile.c 2008-06-18 17:11:04.000000000 +0200
+@@ -4929,11 +4929,11 @@
+ {
+ if (code == cd->start_code + 1 + LINK_SIZE &&
+ (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
+ {
+ cd->external_options = newoptions;
+- options = newoptions;
++ options = *optionsptr = newoptions;
+ }
+ else
+ {
+ if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
+ {
diff --git a/abs/core/perl/PKGBUILD b/abs/core/perl/PKGBUILD
new file mode 100644
index 0000000..5b05045
--- /dev/null
+++ b/abs/core/perl/PKGBUILD
@@ -0,0 +1,102 @@
+# $Id: PKGBUILD 8709 2008-08-16 04:12:51Z eric $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=perl
+pkgver=5.10.0
+pkgrel=13
+pkgdesc="Practical Extraction and Report Language"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://www.perl.org"
+groups=('base')
+depends=('gdbm' 'db>=4.7' 'coreutils' 'glibc' 'sh')
+# for site_perl this is needed!
+#test without options=('emptydirs')
+source=(http://www.perl.com/CPAN/src/perl-${pkgver}.tar.gz
+# http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/DB_File-1.814.tar.gz
+ perlbin.sh perl-5.8.6-picdl.patch0
+ perl-5.10.0-archlinux-inc-order.patch)
+install=perl.install
+provides=(
+# extra
+perl-archive-tar perl-compress-raw-zlib perl-compress-zlib
+perl-extutils-cbuilder perl-io-compress-base perl-io-compress-zlib perl-io-zlib
+perl-module-pluggable perl-pod-escapes perl-pod-simple perl-module-build
+perl-version
+
+# aur
+perl-archive-extract perl-cpanplus perl-digest-sha perl-extutils-parsexs
+perl-file-fetch perl-ipc-cmd perl-locale-maketext-simple perl-log-message
+perl-log-message-simple perl-module-corelist perl-module-load
+perl-module-load-conditional perl-module-loaded perl-module-pluggable
+perl-object-accessor perl-params-check perl-term-ui perl-time-piece
+)
+md5sums=('d2c39b002ebfd2c3c5dba589365c5a71'
+ '9c4e3e56d71f123e92a68986df5ea924'
+ '319b56a7ce715fb7a494fe4d5cb9474c'
+ '0e4853bd75ee36b8f4c70b78c707b2fa')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+
+ # Update some modules provided with perl:
+ # replace the old DB_File with the newest one from CPAN,
+ # since it supports sleepycat's db 4.1.x
+# cd ext
+# rm -rf DB_File
+# mv $startdir/src/DB_File-1.814 ./DB_File
+
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ../perl-5.10.0-archlinux-inc-order.patch
+
+ if [ "${CARCH}" = "x86_64" ]; then
+ # for x86_64
+ arch_opts="-Dcccdlflags='-fPIC'"
+ patch -Np0 -i ../perl-5.8.6-picdl.patch0 || return 1
+ else
+ # for i686
+ arch_opts=""
+ fi
+ ./Configure -des -Dusethreads -Doptimize="${CFLAGS}" -Dprefix=/usr \
+ -Dinstallprefix=${startdir}/pkg/usr -Dvendorprefix=/usr \
+ -Dprivlib=/usr/share/perl5/core_perl \
+ -Darchlib=/usr/lib/perl5/core_perl \
+ -Dsitelib=/usr/share/perl5/site_perl/${pkgver} \
+ -Dsitearch=/usr/lib/perl5/site_perl/${pkgver} \
+ -Dvendorlib=/usr/share/perl5/vendor_perl \
+ -Dvendorarch=/usr/lib/perl5/vendor_perl \
+ -Dotherlibdirs=/usr/lib/perl5/current:/usr/lib/perl5/site_perl/current \
+ -Dscriptdir='/usr/bin/perlbin/core' \
+ -Dsitescript='/usr/bin/perlbin/site' \
+ -Dvendorscript='/usr/bin/perlbin/vendor' \
+ -Dman1ext=1perl -Dman3ext=3perl ${arch_opts}
+
+ make || return 1
+ make install
+
+ ### Perl Settings ###
+ # Change man page extensions for site and vendor module builds.
+ sed -e '/^man1ext=/ s/1perl/1p/' -e '/^man3ext=/ s/3perl/3pm/' \
+ -i ${startdir}/pkg/usr/lib/perl5/core_perl/Config_heavy.pl
+
+ ### CPAN Settings ###
+ # Set CPAN default config to use the site directories.
+ sed -e '/(makepl_arg =>/ s/""/"INSTALLDIRS=site"/' \
+ -e '/(mbuildpl_arg =>/ s/""/"installdirs=site"/' \
+ -i ${startdir}/pkg/usr/share/perl5/core_perl/CPAN/FirstTime.pm
+
+ ### CPANPLUS Settings ###
+ # Set CPANPLUS default config to use the site directories.
+ sed -e "/{'makemakerflags'}/ s/'';/'INSTALLDIRS=site';/" \
+ -e "/{'buildflags'}/ s/'';/'installdirs=site';/" \
+ -i ${startdir}/pkg/usr/share/perl5/core_perl/CPANPLUS/Config.pm
+
+ # Profile script so set paths to perl scripts.
+ install -D -m755 ${startdir}/src/perlbin.sh \
+ ${startdir}/pkg/etc/profile.d/perlbin.sh
+
+ (cd ${startdir}/pkg/usr/bin; mv perl${pkgver} perl)
+ (cd ${startdir}/pkg/usr/bin/perlbin/core; \
+ ln -sf c2ph pstruct; ln -sf s2p psed)
+ grep -Rl "${startdir}/pkg" ${startdir}/pkg/usr | \
+ xargs sed -i "s^${startdir}/pkg^^g"
+}
diff --git a/abs/core/perl/archlinux-cpan-installdir.patch b/abs/core/perl/archlinux-cpan-installdir.patch
new file mode 100644
index 0000000..1e005d8
--- /dev/null
+++ b/abs/core/perl/archlinux-cpan-installdir.patch
@@ -0,0 +1,17 @@
+Some modules which are included in the perl core set INSTALLDIRS => 'perl'
+explicitly in Makefile.PL. This makes sense for the normal @INC ordering but
+not for Arch Linux. Provide a sensible default.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- lib/CPAN/FirstTime.pm.orig 2007-11-04 22:35:31.000000000 -0500
++++ lib/CPAN/FirstTime.pm 2007-11-04 22:37:59.000000000 -0500
+@@ -358,7 +358,7 @@
+
+ };
+
+- $default = $CPAN::Config->{makepl_arg} || "";
++ $default = $CPAN::Config->{makepl_arg} || "INSTALLDIRS=site";
+ $CPAN::Config->{makepl_arg} =
+ prompt("Parameters for the 'perl Makefile.PL' command?
+ Typical frequently used settings:
diff --git a/abs/core/perl/archlinux-inc-order.patch b/abs/core/perl/archlinux-inc-order.patch
new file mode 100644
index 0000000..a0c7a9c
--- /dev/null
+++ b/abs/core/perl/archlinux-inc-order.patch
@@ -0,0 +1,101 @@
+Tweak @INC so that the ordering is:
+ site (5.8.8)
+ vendor (all)
+ core (5.8.8)
+ obsolete (pre-5.8.8-9) vendor builds
+
+The rationale being that an admin (via site), or module packager (vendor) can
+chose to shadow core modules when there is a newer version than is included in
+core.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- perl.c.orig 2006-01-31 07:34:47.000000000 -0500
++++ perl.c 2007-10-31 22:46:56.000000000 -0400
+@@ -4771,44 +4771,12 @@
+
+ /* Use the ~-expanded versions of APPLLIB (undocumented),
+ ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
++ Arch Linux: SITEARCH SITELIB VENDORARCH VENDORLIB ARCHLIB PRIVLIB OTHER
+ */
+ #ifdef APPLLIB_EXP
+ incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
+ #endif
+
+-#ifdef ARCHLIB_EXP
+- incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
+-#endif
+-#ifdef MACOS_TRADITIONAL
+- {
+- Stat_t tmpstatbuf;
+- SV * privdir = NEWSV(55, 0);
+- char * macperl = PerlEnv_getenv("MACPERL");
+-
+- if (!macperl)
+- macperl = "";
+-
+- Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+- Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+-
+- SvREFCNT_dec(privdir);
+- }
+- if (!PL_tainting)
+- incpush(":", FALSE, FALSE, TRUE);
+-#else
+-#ifndef PRIVLIB_EXP
+-# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+-#endif
+-#if defined(WIN32)
+- incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
+-#else
+- incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
+-#endif
+-
+ #ifdef SITEARCH_EXP
+ /* sitearch is always relative to sitelib on Windows for
+ * DLL-based path intuition to work correctly */
+@@ -4850,6 +4818,40 @@
+ incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
+ #endif
+
++/* Arch Linux: core libs after site and vendor libs. */
++#ifdef ARCHLIB_EXP
++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
++#endif
++#ifdef MACOS_TRADITIONAL
++ {
++ Stat_t tmpstatbuf;
++ SV * privdir = NEWSV(55, 0);
++ char * macperl = PerlEnv_getenv("MACPERL");
++
++ if (!macperl)
++ macperl = "";
++
++ Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
++ Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
++
++ SvREFCNT_dec(privdir);
++ }
++ if (!PL_tainting)
++ incpush(":", FALSE, FALSE, TRUE);
++#else
++#ifndef PRIVLIB_EXP
++# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
++#endif
++#if defined(WIN32)
++ incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
++#else
++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
+ #endif
diff --git a/abs/core/perl/perl-5.10.0-archlinux-cpan-installdir.patch b/abs/core/perl/perl-5.10.0-archlinux-cpan-installdir.patch
new file mode 100644
index 0000000..0770a5e
--- /dev/null
+++ b/abs/core/perl/perl-5.10.0-archlinux-cpan-installdir.patch
@@ -0,0 +1,11 @@
+--- lib/CPAN/FirstTime.pm.orig 2007-12-24 23:21:42.000000000 -0500
++++ lib/CPAN/FirstTime.pm 2007-12-24 23:26:04.000000000 -0500
+@@ -940,7 +940,7 @@
+ }
+
+ if (!$matcher or 'makepl_arg make_arg' =~ /$matcher/) {
+- my_dflt_prompt(makepl_arg => "", $matcher);
++ my_dflt_prompt(makepl_arg => "INSTALLDIRS=site", $matcher);
+ my_dflt_prompt(make_arg => "", $matcher);
+ }
+
diff --git a/abs/core/perl/perl-5.10.0-archlinux-inc-order.patch b/abs/core/perl/perl-5.10.0-archlinux-inc-order.patch
new file mode 100644
index 0000000..1c85eb8
--- /dev/null
+++ b/abs/core/perl/perl-5.10.0-archlinux-inc-order.patch
@@ -0,0 +1,101 @@
+Tweak @INC so that the ordering is:
+ site (5.8.8)
+ vendor (all)
+ core (5.8.8)
+ obsolete (pre-5.8.8-9) vendor builds
+
+The rationale being that an admin (via site), or module packager (vendor) can
+chose to shadow core modules when there is a newer version than is included in
+core.
+
+Thanks to Charles Mauch (xterminus) for his work on the initial patch.
+
+--- perl.c.orig 2007-12-18 05:47:08.000000000 -0500
++++ perl.c 2007-12-24 23:15:23.000000000 -0500
+@@ -4748,44 +4748,12 @@
+
+ /* Use the ~-expanded versions of APPLLIB (undocumented),
+ ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
++ Arch Linux: SITEARCH SITELIB VENDORARCH VENDORLIB ARCHLIB PRIVLIB OTHER
+ */
+ #ifdef APPLLIB_EXP
+ incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE);
+ #endif
+
+-#ifdef ARCHLIB_EXP
+- incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
+-#endif
+-#ifdef MACOS_TRADITIONAL
+- {
+- Stat_t tmpstatbuf;
+- SV * privdir = newSV(0);
+- char * macperl = PerlEnv_getenv("MACPERL");
+-
+- if (!macperl)
+- macperl = "";
+-
+- Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
+- Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
+- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+- incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
+-
+- SvREFCNT_dec(privdir);
+- }
+- if (!PL_tainting)
+- incpush(":", FALSE, FALSE, TRUE, FALSE);
+-#else
+-#ifndef PRIVLIB_EXP
+-# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+-#endif
+-#if defined(WIN32)
+- incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
+-#else
+- incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
+-#endif
+-
+ #ifdef SITEARCH_EXP
+ /* sitearch is always relative to sitelib on Windows for
+ * DLL-based path intuition to work correctly */
+@@ -4828,6 +4796,40 @@
+ incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE);
+ #endif
+
++/* Arch Linux: core libs after site and vendor libs. */
++#ifdef ARCHLIB_EXP
++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
++#endif
++#ifdef MACOS_TRADITIONAL
++ {
++ Stat_t tmpstatbuf;
++ SV * privdir = newSV(0);
++ char * macperl = PerlEnv_getenv("MACPERL");
++
++ if (!macperl)
++ macperl = "";
++
++ Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
++ Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
++ if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
++ incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
++
++ SvREFCNT_dec(privdir);
++ }
++ if (!PL_tainting)
++ incpush(":", FALSE, FALSE, TRUE, FALSE);
++#else
++#ifndef PRIVLIB_EXP
++# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
++#endif
++#if defined(WIN32)
++ incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
++#else
++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE);
+ #endif
diff --git a/abs/core/perl/perl-5.8.6-picdl.patch0 b/abs/core/perl/perl-5.8.6-picdl.patch0
new file mode 100644
index 0000000..f69a680
--- /dev/null
+++ b/abs/core/perl/perl-5.8.6-picdl.patch0
@@ -0,0 +1,13 @@
+--- Makefile.SH.orig 2003-11-29 01:16:15.000000000 -0800
++++ Makefile.SH 2003-11-29 01:16:52.000000000 -0800
+@@ -129,8 +129,8 @@
+
+ ;;
+
+-*) pldlflags=''
+- static_target='static'
++*) pldlflags="$cccdlflags"
++ static_target='static_pic'
+ ;;
+ esac
+
diff --git a/abs/core/perl/perl-5.8.8-gcc-4.2.0.patch b/abs/core/perl/perl-5.8.8-gcc-4.2.0.patch
new file mode 100644
index 0000000..679a7ab
--- /dev/null
+++ b/abs/core/perl/perl-5.8.8-gcc-4.2.0.patch
@@ -0,0 +1,10 @@
+--- perl-5.8.x/makedepend.SH 2006-06-13 15:31:22.000000000 -0400
++++ perl-5.8.x-andy/makedepend.SH 2006-07-25 14:45:11.000000000 -0400
+@@ -167,6 +167,7 @@
+ -e '/^#.*<builtin>/d' \
+ -e '/^#.*<built-in>/d' \
+ -e '/^#.*<command line>/d' \
++ -e '/^#.*<command-line>/d' \
+ -e '/^#.*"-"/d' \
+ -e '/: file path prefix .* never used$/d' \
+ -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
diff --git a/abs/core/perl/perl-5.8.8-utf-regexes.patch b/abs/core/perl/perl-5.8.8-utf-regexes.patch
new file mode 100644
index 0000000..5799fff
--- /dev/null
+++ b/abs/core/perl/perl-5.8.8-utf-regexes.patch
@@ -0,0 +1,59 @@
+CVE-2007-5116 perl regular expression UTF parsing errors
+https://bugzilla.redhat.com/show_bug.cgi?id=323571
+
+--- regcomp.c 2006-01-08 12:59:27.000000000 -0800
++++ regcomp.c 2007-10-05 12:07:55.000000000 -0700
+@@ -135,7 +135,8 @@
+ I32 extralen;
+ I32 seen_zerolen;
+ I32 seen_evals;
+- I32 utf8;
++ I32 utf8; /* pattern is utf8 or not */
++ I32 orig_utf8; /* pattern was originally utf8 */
+ #if ADD_TO_REGEXEC
+ char *starttry; /* -Dr: where regtry was called. */
+ #define RExC_starttry (pRExC_state->starttry)
+@@ -161,6 +162,7 @@
+ #define RExC_seen_zerolen (pRExC_state->seen_zerolen)
+ #define RExC_seen_evals (pRExC_state->seen_evals)
+ #define RExC_utf8 (pRExC_state->utf8)
++#define RExC_orig_utf8 (pRExC_state->orig_utf8)
+
+ #define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
+ #define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
+@@ -1749,15 +1751,17 @@
+ if (exp == NULL)
+ FAIL("NULL regexp argument");
+
+- RExC_utf8 = pm->op_pmdynflags & PMdf_CMP_UTF8;
++ RExC_orig_utf8 = RExC_utf8 = pm->op_pmdynflags & PMdf_CMP_UTF8;
+
+- RExC_precomp = exp;
+ DEBUG_r({
+ if (!PL_colorset) reginitcolors();
+ PerlIO_printf(Perl_debug_log, "%sCompiling REx%s `%s%*s%s'\n",
+ PL_colors[4],PL_colors[5],PL_colors[0],
+- (int)(xend - exp), RExC_precomp, PL_colors[1]);
++ (int)(xend - exp), exp, PL_colors[1]);
+ });
++
++redo_first_pass:
++ RExC_precomp = exp;
+ RExC_flags = pm->op_pmflags;
+ RExC_sawback = 0;
+
+@@ -1783,6 +1787,17 @@
+ RExC_precomp = Nullch;
+ return(NULL);
+ }
++ if (RExC_utf8 && !RExC_orig_utf8) {
++ STRLEN len = xend-exp;
++ DEBUG_r(PerlIO_printf(Perl_debug_log,
++ "UTF8 mismatch! Converting to utf8 for resizing and compile\n"));
++ exp = (char*)Perl_bytes_to_utf8(aTHX_ (U8*)exp, &len);
++ xend = exp + len;
++ RExC_orig_utf8 = RExC_utf8;
++ SAVEFREEPV(exp);
++ goto redo_first_pass;
++ }
++
diff --git a/abs/core/perl/perl.install b/abs/core/perl/perl.install
new file mode 100644
index 0000000..f0ff3fb
--- /dev/null
+++ b/abs/core/perl/perl.install
@@ -0,0 +1,54 @@
+# arg 1: the new package version
+post_install() {
+ for ver in 5.8.{0,1,2,3,4,5,6,7,8}; do
+ [ -h usr/lib/perl5/$ver ] && rm usr/lib/perl5/$ver
+ [ -h usr/lib/perl5/site_perl/$ver ] && rm usr/lib/perl5/site_perl/$ver
+ [ -h usr/bin/perl$ver ] && rm usr/bin/perl$ver
+ done
+
+ echo
+ echo " This version of perl follows the new perl directory hierarchy (see"
+ echo " http://wiki.archlinux.org/index.php/Perl_Policy)."
+ echo
+ echo " - The perl package and its modules install in the core_perl directories"
+ echo " - Perl modules provided by Arch Linux install in vendor_perl directories"
+ echo " - CPAN/CPANPLUS installs should be placed in site_perl directories"
+ echo " - Older modules in the 'current' directory should still work"
+ echo " - Programs with embedded perl interpreters need to be rebuilt"
+ echo
+ echo " Users of the CPAN or CPANPLUS shells should modify the configuration"
+ echo " to use the site_perl directories. Under the CPAN shell use:"
+ echo " o conf makepl_arg INSTALLDIRS=site"
+ echo " o conf mbuildpl_arg installdirs=site"
+ echo " Under the CPANPLUS shell:"
+ echo " s conf buildflags installdirs=site"
+ echo " s conf makemakerflags INSTALLDIRS=site"
+ echo " Then save the configuration."
+ echo
+ echo " The following official packages can be removed since the modules are"
+ echo " now included in the standard perl library:"
+ echo " perl-archive-tar perl-compress-raw-zlib perl-compress-zlib"
+ echo " perl-extutils-cbuilder perl-io-compress-base perl-io-compress-zlib"
+ echo " perl-io-zlib perl-module-pluggable perl-pod-escapes perl-pod-simple"
+ echo " perl-module-build perl-version"
+ echo
+ echo " These community packages are also included in the standard perl library:"
+ echo " perl-archive-extract perl-cpanplus perl-digest-sha perl-file-fetch"
+ echo " perl-extutils-parsexs perl-ipc-cmd perl-locale-maketext-simple"
+ echo " perl-log-message perl-log-message-simple perl-module-corelist"
+ echo " perl-module-load perl-module-load-conditional perl-module-loaded"
+ echo " perl-module-pluggable perl-object-accessor perl-params-check"
+ echo " perl-term-ui perl-time-piece"
+ echo
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/perl/perlbin.sh b/abs/core/perl/perlbin.sh
new file mode 100755
index 0000000..49aeb2d
--- /dev/null
+++ b/abs/core/perl/perlbin.sh
@@ -0,0 +1,2 @@
+# Set path to perl scripts.
+export PATH="${PATH}:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core"
diff --git a/abs/core/perl_modules/perl-archive-zip/PKGBUILD b/abs/core/perl_modules/perl-archive-zip/PKGBUILD
new file mode 100644
index 0000000..0559fe6
--- /dev/null
+++ b/abs/core/perl_modules/perl-archive-zip/PKGBUILD
@@ -0,0 +1,28 @@
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-archive-zip
+_realname=Archive-Zip
+pkgver=1.23
+pkgrel=2
+pkgdesc="Provide a perl interface to ZIP archive files"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/${_realname}-${pkgver}.tar.gz)
+md5sums=('7ffcbdc1b603307235fb8d42084cb84d')
+
+
+build() {
+ cd ${startdir}/src/${_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=${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/perl_modules/perl-class-methodmaker/PKGBUILD b/abs/core/perl_modules/perl-class-methodmaker/PKGBUILD
new file mode 100644
index 0000000..29da312
--- /dev/null
+++ b/abs/core/perl_modules/perl-class-methodmaker/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-class-methodmaker
+pkgver=2.11
+pkgrel=1
+pkgdesc="Create generic class methods"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~schwigon/Class-MethodMaker"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SC/SCHWIGON/class-methodmaker/Class-MethodMaker-$pkgver.tar.gz)
+
+build() {
+ cd $startdir/src/Class-MethodMaker-$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
+}
+md5sums=('61ed8327e50b99e574c5f5ce1a835d36')
diff --git a/abs/core/perl_modules/perl-crypt-ssleay/PKGBUILD b/abs/core/perl_modules/perl-crypt-ssleay/PKGBUILD
new file mode 100644
index 0000000..03c05ce
--- /dev/null
+++ b/abs/core/perl_modules/perl-crypt-ssleay/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-crypt-ssleay
+pkgver=0.57
+pkgrel=2
+pkgdesc="OpenSSL glue that provides LWP https support"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DLAND/Crypt-SSLeay"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DL/DLAND/Crypt-SSLeay-$pkgver.tar.gz)
+md5sums=('82264180f5911dce33dbd85e24b1f36b')
+
+build() {
+ cd $startdir/src/Crypt-SSLeay-$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-date-manip/PKGBUILD b/abs/core/perl_modules/perl-date-manip/PKGBUILD
new file mode 100644
index 0000000..be50d1a
--- /dev/null
+++ b/abs/core/perl_modules/perl-date-manip/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-date-manip
+_realname=Date-Manip
+pkgver=5.54
+pkgrel=1
+pkgdesc="Date::Manip - date manipulation routines"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/${_realname}-${pkgver}.tar.gz)
+md5sums=('16c343329bad644b17f4f8ec5fb243cf')
+
+build() {
+ cd ${startdir}/src/${_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=${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/perl_modules/perl-dbd-mysql/PKGBUILD b/abs/core/perl_modules/perl-dbd-mysql/PKGBUILD
new file mode 100644
index 0000000..c6e4cb8
--- /dev/null
+++ b/abs/core/perl_modules/perl-dbd-mysql/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-dbd-mysql
+_realname=DBD-mysql
+pkgver=4.006
+pkgrel=1
+pkgdesc="Perl/CPAN DBD::mysql module for interacting with MySQL via DBD"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('libmysqlclient' 'perl-dbi' 'perl>=5.10.0')
+makedepends=('mysql')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/${_realname}-${pkgver}.tar.gz)
+md5sums=('133ac08c22bb19194ad8b895e3204310')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install 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/perl_modules/perl-dbi/PKGBUILD b/abs/core/perl_modules/perl-dbi/PKGBUILD
new file mode 100644
index 0000000..c6c5599
--- /dev/null
+++ b/abs/core/perl_modules/perl-dbi/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Matt Thompson <mattt@defunct.ca>
+pkgname=perl-dbi
+_realname=DBI
+pkgver=1.601
+pkgrel=1
+pkgdesc="Database independent interface for Perl"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/T/TI/TIMB/${_realname}-${pkgver}.tar.gz)
+md5sums=('d80677bd8113ec8cb0438b8703f3c418')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-fcgi/PKGBUILD b/abs/core/perl_modules/perl-fcgi/PKGBUILD
new file mode 100644
index 0000000..73b9ef1
--- /dev/null
+++ b/abs/core/perl_modules/perl-fcgi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-fcgi
+pkgver=0.67
+pkgrel=4
+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')
+
+build() {
+ cd $startdir/src/FCGI-$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-file-slurp/PKGBUILD b/abs/core/perl_modules/perl-file-slurp/PKGBUILD
new file mode 100644
index 0000000..5e96fd8
--- /dev/null
+++ b/abs/core/perl_modules/perl-file-slurp/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-file-slurp
+pkgver=9999.13
+pkgrel=1
+pkgdesc="Read/write/append files quickly"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DROLSKY/File-Slurp"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DR/DROLSKY/File-Slurp-$pkgver.tar.gz)
+md5sums=('ac3cd9d466b99d1534762ff3549aaa66')
+
+build() {
+ cd $startdir/src/File-Slurp-$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-html-parser/PKGBUILD b/abs/core/perl_modules/perl-html-parser/PKGBUILD
new file mode 100644
index 0000000..43c3b8a
--- /dev/null
+++ b/abs/core/perl_modules/perl-html-parser/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-html-parser
+_realname=HTML-Parser
+pkgver=3.56
+pkgrel=3
+pkgdesc="Perl HTML parser class"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-html-tagset' 'perl>=5.10.0')
+options=(!emptydirs)
+replaces=('html-parser')
+provides=('html-parser')
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('bddc432e5ed9df4d4153a62234f04fc2')
+
+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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-html-tagset/PKGBUILD b/abs/core/perl_modules/perl-html-tagset/PKGBUILD
new file mode 100644
index 0000000..047f39c
--- /dev/null
+++ b/abs/core/perl_modules/perl-html-tagset/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: kevin <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-html-tagset
+_realname=HTML-Tagset
+pkgver=3.10
+pkgrel=3
+pkgdesc="Data tables useful in parsing HTML"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+replaces=('html-tagset')
+provides=('html-tagset')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/P/PE/PETDANCE/${_realname}-${pkgver}.tar.gz)
+md5sums=('89bdd351272ccd285fa61c5b2ce451ab')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-html-tree/PKGBUILD b/abs/core/perl_modules/perl-html-tree/PKGBUILD
new file mode 100644
index 0000000..f946545
--- /dev/null
+++ b/abs/core/perl_modules/perl-html-tree/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-html-tree
+pkgver=3.23
+pkgrel=6
+pkgdesc="Make parse trees out of HTML source"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PETEK/HTML-Tree"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-html-tagset>=3.02' 'perl-html-parser>=3.46')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PE/PETEK/HTML-Tree-$pkgver.tar.gz)
+md5sums=('6352f50be402301f79b580dd235d7762')
+
+build() {
+ cd $startdir/src/HTML-Tree-$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-http-cache-transparent/PKGBUILD b/abs/core/perl_modules/perl-http-cache-transparent/PKGBUILD
new file mode 100644
index 0000000..23a7170
--- /dev/null
+++ b/abs/core/perl_modules/perl-http-cache-transparent/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-http-cache-transparent
+pkgver=1.0
+pkgrel=2
+pkgdesc="Cache the result of http-gets persistently"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~MATTIASH/HTTP-Cache-Transparent"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-libwww')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MA/MATTIASH/HTTP-Cache-Transparent-$pkgver.tar.gz)
+md5sums=('e198345ce8eee2562c807e84d65e3b4f')
+
+build() {
+ cd $startdir/src/HTTP-Cache-Transparent-$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-io-socket-ssl/PKGBUILD b/abs/core/perl_modules/perl-io-socket-ssl/PKGBUILD
new file mode 100644
index 0000000..75a906d
--- /dev/null
+++ b/abs/core/perl_modules/perl-io-socket-ssl/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-io-socket-ssl
+_realname=IO-Socket-SSL
+pkgver=1.12
+pkgrel=1
+pkgdesc="IO::Socket::SSL - Nearly transparent SSL encapsulation for IO::Socket::INET"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-net-ssleay' 'perl>=5.10.0')
+options=(!emptydirs)
+replaces=('io-socket-ssl')
+provides=('io-socket-ssl')
+source=(http://www.cpan.org/authors/id/S/SU/SULLR/${_realname}-${pkgver}.tar.gz)
+md5sums=('0f6e80c15341094df16828a25dbaeeaa')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-io-stringy/PKGBUILD b/abs/core/perl_modules/perl-io-stringy/PKGBUILD
new file mode 100644
index 0000000..0fdf300
--- /dev/null
+++ b/abs/core/perl_modules/perl-io-stringy/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-io-stringy
+pkgver=2.110
+pkgrel=6
+pkgdesc="I/O on in-core objects like strings/arrays"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DSKOLL/IO-stringy"
+license=('GPL' 'PerlArtistic')
+depends=('perl')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DS/DSKOLL/IO-stringy-$pkgver.tar.gz)
+md5sums=('2e6a976cfa5521e815c1fdf4006982de')
+
+build() {
+ cd $startdir/src/IO-stringy-$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-libwww/PKGBUILD b/abs/core/perl_modules/perl-libwww/PKGBUILD
new file mode 100644
index 0000000..254519a
--- /dev/null
+++ b/abs/core/perl_modules/perl-libwww/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-libwww
+_realname=libwww-perl
+pkgver=5.808
+pkgrel=2
+pkgdesc="A set of Perl modules which provides a simple and consistent API to the WWW."
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-uri' 'perl-html-parser' 'perl>=5.10.0')
+
+options=(!emptydirs)
+replaces=('libwww-perl')
+provides=('libwww-perl')
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('72120d9195ab1649c2d787eb1102a90c')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD b/abs/core/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD
new file mode 100644
index 0000000..b926acd
--- /dev/null
+++ b/abs/core/perl_modules/perl-lingua-en-numbers-ordinate/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-en-numbers-ordinate
+pkgver=1.02
+pkgrel=2
+pkgdesc="Go from cardinal (53) to ordinal (53rd)"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~SBURKE/Lingua-EN-Numbers-Ordinate"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SB/SBURKE/Lingua-EN-Numbers-Ordinate-$pkgver.tar.gz)
+md5sums=('e92078fafd9108a137972c4e9bae9e99')
+
+build() {
+ cd $startdir/src/Lingua-EN-Numbers-Ordinate-$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-lingua-en-numbers/PKGBUILD b/abs/core/perl_modules/perl-lingua-en-numbers/PKGBUILD
new file mode 100644
index 0000000..53b50a8
--- /dev/null
+++ b/abs/core/perl_modules/perl-lingua-en-numbers/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-en-numbers
+pkgver=1.01
+pkgrel=2
+pkgdesc="Turn 407 into four hundred and seven, etc."
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~SBURKE/Lingua-EN-Numbers"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/S/SB/SBURKE/Lingua-EN-Numbers-$pkgver.tar.gz)
+md5sums=('e2f9252b1cdc5002e1f912e20b2f5bbb')
+
+build() {
+ cd $startdir/src/Lingua-EN-Numbers-$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-lingua-preferred/PKGBUILD b/abs/core/perl_modules/perl-lingua-preferred/PKGBUILD
new file mode 100644
index 0000000..23a6507
--- /dev/null
+++ b/abs/core/perl_modules/perl-lingua-preferred/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-lingua-preferred
+pkgver=0.2.4
+pkgrel=2
+pkgdesc="Pick a language based on user's preferences"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~EDAVIS/Lingua-Preferred"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/E/ED/EDAVIS/Lingua-Preferred-$pkgver.tar.gz)
+md5sums=('37e883fafb05b1439de1121f41e8ad75')
+
+build() {
+ cd $startdir/src/Lingua-Preferred-$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-mailtools/PKGBUILD b/abs/core/perl_modules/perl-mailtools/PKGBUILD
new file mode 100644
index 0000000..fae63ee
--- /dev/null
+++ b/abs/core/perl_modules/perl-mailtools/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-mailtools
+_realname=MailTools
+pkgver=2.04
+pkgrel=1
+pkgdesc="Perl module that provides email tools"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/${_realname}-${pkgver}.tar.gz)
+md5sums=('d21ea4f375d1e5f3da6b0a4e8ba1e2c6')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-mime-lite/PKGBUILD b/abs/core/perl_modules/perl-mime-lite/PKGBUILD
new file mode 100644
index 0000000..f2fd37a
--- /dev/null
+++ b/abs/core/perl_modules/perl-mime-lite/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Eric Johnson <eric@coding-zone.com>
+
+pkgname=perl-mime-lite
+_realname=MIME-Lite
+pkgver=3.021
+pkgrel=1
+pkgdesc="Perl module that provides lightweight MIME generator"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl-mailtools' 'perl-mime-types' 'perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/${_realname}-$pkgver.tar.gz)
+md5sums=('7b3f4b9b3f8a0023dbc62859ef9a775f')
+
+build() {
+ cd $startdir/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-mime-tools/ChangeLog b/abs/core/perl_modules/perl-mime-tools/ChangeLog
new file mode 100644
index 0000000..0ece331
--- /dev/null
+++ b/abs/core/perl_modules/perl-mime-tools/ChangeLog
@@ -0,0 +1,4 @@
+
+2008-01-05 Douglas Soares de Andrade <dsa@aur.archlinux.org>
+
+ * Updated for x86_64
diff --git a/abs/core/perl_modules/perl-mime-tools/PKGBUILD b/abs/core/perl_modules/perl-mime-tools/PKGBUILD
new file mode 100644
index 0000000..1979431
--- /dev/null
+++ b/abs/core/perl_modules/perl-mime-tools/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-mime-tools
+pkgver=5.426
+pkgrel=1
+pkgdesc="Perl modules for parsing and creating MIME entities"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DONEILL/MIME-tools"
+license=('GPL' 'PerlArtistic')
+depends=('perl-mailtools' 'perl-io-stringy>=2.11' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DO/DONEILL/MIME-tools-$pkgver.tar.gz)
+md5sums=('87ab3a328e56268f551ff3ef5f51f416')
+
+build() {
+ cd $startdir/src/MIME-tools-$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-mime-types/PKGBUILD b/abs/core/perl_modules/perl-mime-types/PKGBUILD
new file mode 100644
index 0000000..3cc06cb
--- /dev/null
+++ b/abs/core/perl_modules/perl-mime-types/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot
+# Contributor: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-mime-types
+_realname=MIME-Types
+pkgver=1.24
+pkgrel=1
+pkgdesc="Perl/CPAN Module MIME::Types : Information and processing MIME types"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+makedepends=('perl-test-pod')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/M/MA/MARKOV/${_realname}-${pkgver}.tar.gz)
+md5sums=('fe43cf2caac763f8b02fdd4ced3fd038')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install 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/perl_modules/perl-net-ssleay/PKGBUILD b/abs/core/perl_modules/perl-net-ssleay/PKGBUILD
new file mode 100644
index 0000000..d2ead9d
--- /dev/null
+++ b/abs/core/perl_modules/perl-net-ssleay/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-net-ssleay
+_realname=Net_SSLeay.pm
+pkgver=1.30
+pkgrel=2
+pkgdesc="Perl extension for using OpenSSL"
+arch=(i686 x86_64)
+license=('custom:BSD')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0' 'openssl')
+options=(!emptydirs)
+replaces=('net-ssleay')
+provides=('net-ssleay')
+source=(http://www.cpan.org/authors/id/F/FL/FLORA/${_realname}-${pkgver}.tar.gz)
+md5sums=('b0cd6c1681bbc0695d81be5cd852d1d0')
+
+build() {
+ cd ${startdir}/src/${_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=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+
+ install -D -m644 README ${startdir}/pkg/usr/share/licenses/${pkgname}/README
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-soap-lite/PKGBUILD b/abs/core/perl_modules/perl-soap-lite/PKGBUILD
new file mode 100644
index 0000000..d732ea6
--- /dev/null
+++ b/abs/core/perl_modules/perl-soap-lite/PKGBUILD
@@ -0,0 +1,24 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-soap-lite
+pkgver=0.710.08
+pkgrel=1
+pkgdesc="Client and server side SOAP implementation"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~MKUTTER/SOAP-Lite"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-crypt-ssleay' 'perl-mime-lite' 'perl-libwww' 'perl-uri' \
+ 'perl-mime-tools' 'perl-io-socket-ssl' 'perlxml>=2.23' 'perl-fcgi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MK/MKUTTER/SOAP-Lite-$pkgver.tar.gz)
+md5sums=('e7869ad91fee76cc1782fe29fe3a989d')
+
+build() {
+ cd $startdir/src/SOAP-Lite-$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-term-progressbar/PKGBUILD b/abs/core/perl_modules/perl-term-progressbar/PKGBUILD
new file mode 100644
index 0000000..133603f
--- /dev/null
+++ b/abs/core/perl_modules/perl-term-progressbar/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was autocreated. See http://xtermin.us/archperl/ for details
+# Maintainer: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-term-progressbar
+pkgver=2.09
+pkgrel=3
+pkgdesc="Perl/CPAN Module Term::ProgressBar : Progress bar in just ASCII using Term"
+arch=("i686" "x86_64")
+url="http://search.cpan.org/FLUFFY/Term-ProgressBar"
+license=("GPL" "PerlArtistic")
+source=("http://www.cpan.org/authors/id/F/FL/FLUFFY/Term-ProgressBar-2.09.tar.gz")
+md5sums=('440dfd04fe51a12d314e9adf2445f04a')
+makedepends=("perl-class-methodmaker" "perl-term-readkey")
+depends=("perl-class-methodmaker" "perl-term-readkey")
+
+build() {
+ cd $startdir/src/Term-ProgressBar-2.09
+ 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-term-readkey/PKGBUILD b/abs/core/perl_modules/perl-term-readkey/PKGBUILD
new file mode 100644
index 0000000..4c4fdee
--- /dev/null
+++ b/abs/core/perl_modules/perl-term-readkey/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: Wael Nasreddine <gandalf@siemens-mobiles.org>
+
+pkgname=perl-term-readkey
+pkgver=2.30
+pkgrel=2
+pkgdesc="A perl module dedicated to providing simple control over terminal driver modes."
+arch=('i686' 'x86_64')
+license=('custom')
+depends=('perl>=5.10.0' 'glibc')
+url="http://cpan.org/modules/by-module/Term"
+source=(http://cpan.org/modules/by-module/Term/TermReadKey-$pkgver.tar.gz)
+md5sums=('f0ef2cea8acfbcc58d865c05b0c7e1ff')
+options=('!emptydirs')
+build()
+{
+ cd $startdir/src/TermReadKey-$pkgver
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -d $startdir/pkg/usr/share/licenses/$pkgname/
+ head -7 README > $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
diff --git a/abs/core/perl_modules/perl-text-bidi/PKGBUILD b/abs/core/perl_modules/perl-text-bidi/PKGBUILD
new file mode 100644
index 0000000..e667f5e
--- /dev/null
+++ b/abs/core/perl_modules/perl-text-bidi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-text-bidi
+pkgver=0.03
+pkgrel=3
+pkgdesc="Unicode bidi algorithm-libfribidi interface"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~KAMENSKY/Text-Bidi"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'fribidi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/K/KA/KAMENSKY/Text-Bidi-$pkgver.tar.gz)
+md5sums=('93e124628ff2983e32ac478f25f8d627')
+
+build() {
+ cd $startdir/src/Text-Bidi-$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-text-iconv/PKGBUILD b/abs/core/perl_modules/perl-text-iconv/PKGBUILD
new file mode 100644
index 0000000..1e35fce
--- /dev/null
+++ b/abs/core/perl_modules/perl-text-iconv/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+# Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-text-iconv
+_realname=Text-Iconv
+pkgver=1.7
+pkgrel=2
+pkgdesc="Interface to iconv codeset conversion"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/${_realname}/"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MP/MPIOTR/${_realname}-${pkgver}.tar.gz)
+md5sums=('81b26e069eaebb084e91ea3c009b67ae')
+
+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 '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-text-kakasi/PKGBUILD b/abs/core/perl_modules/perl-text-kakasi/PKGBUILD
new file mode 100644
index 0000000..19499af
--- /dev/null
+++ b/abs/core/perl_modules/perl-text-kakasi/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-text-kakasi
+pkgver=2.04
+pkgrel=3
+pkgdesc="Perl frontend to kakasi"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~DANKOGAI/Text-Kakasi"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0''kakasi')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/D/DA/DANKOGAI/Text-Kakasi-$pkgver.tar.gz)
+md5sums=('5a9e381cb93edfd707124a63c60f96b1')
+
+build() {
+ cd $startdir/src/Text-Kakasi-$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-timedate/PKGBUILD b/abs/core/perl_modules/perl-timedate/PKGBUILD
new file mode 100644
index 0000000..fc72d6a
--- /dev/null
+++ b/abs/core/perl_modules/perl-timedate/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-timedate
+_realname=TimeDate
+pkgver=1.16
+pkgrel=3
+pkgdesc="Date formating subroutines"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+source=(http://www.cpan.org/authors/id/G/GB/GBARR/${_realname}-${pkgver}.tar.gz)
+options=(!emptydirs)
+replaces=('timedate')
+provides=('timedate')
+md5sums=('b3cc35a7cabd106ac8829d2f2ff4bd9d')
+
+build() {
+ cd $startdir/src/${_realname}-${pkgver}
+
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-tk-tablematrix/PKGBUILD b/abs/core/perl_modules/perl-tk-tablematrix/PKGBUILD
new file mode 100644
index 0000000..4244683
--- /dev/null
+++ b/abs/core/perl_modules/perl-tk-tablematrix/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD,v 1.8 2008/03/24 17:11:47 sergej Exp $
+# Maintainer: Sergej Pupykin <sergej@aur.archlinux.org>
+# Maintainer: Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-tk-tablematrix
+pkgver=1.23
+pkgrel=4
+pkgdesc="Display data in TableSpreadsheet format"
+arch=("i686" "x86_64")
+url="http://search.cpan.org/CERNEY/Tk-TableMatrix"
+license=("GPL" "PerlArtistic")
+depends=('perl-tk')
+options=('!emptydirs')
+source=("http://www.cpan.org/authors/id/C/CE/CERNEY/Tk-TableMatrix-$pkgver.tar.gz")
+md5sums=('6b7653d129bf1a8327054a88b58d6364')
+
+build() {
+ cd $startdir/src/Tk-TableMatrix-$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
+ rm -f $startdir/pkg/usr/lib/perl5/vendor_perl/auto/Tk/pTk/extralibs.ld
+}
diff --git a/abs/core/perl_modules/perl-tk/PKGBUILD b/abs/core/perl_modules/perl-tk/PKGBUILD
new file mode 100644
index 0000000..7a16357
--- /dev/null
+++ b/abs/core/perl_modules/perl-tk/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: Jason Chu <jchu@xentac.net>
+
+pkgname=perl-tk
+_realname=Tk
+#stable pkgver=804.027
+pkgver=804.028
+pkgrel=1
+pkgdesc="This module/script allows perl to interface with tk"
+license=('PerlArtistic' 'GPL' 'custom')
+arch=(i686 x86_64)
+depends=('libx11' 'libpng' 'libjpeg' 'tk' 'perl>=5.10.0')
+#
+# Using an "unauthorized" version because the official
+# release does not build under perl 5.10
+#source=(http://cpan.org/authors/id/N/NI/NI-S/${_realname}-${pkgver}.tar.gz)
+#
+source=(http://search.cpan.org/CPAN/authors/id/S/SR/SREZIC/${_realname}-${pkgver}.tar.gz)
+md5sums=('7153c1c411b0dd005a0660179e5c5900')
+url="http://search.cpan.org/dist/${_realname}/"
+options=(!emptydirs)
+replaces=('perltk')
+provides=('perltk')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ /bin/chmod -R u+w *
+ make || return 1
+ make install DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+
+ # license
+ install -D -m644 pTk/license.terms \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/tk.license
+ install -D -m644 pTk/Tix.license \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/tix.license
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-unicode-string/PKGBUILD b/abs/core/perl_modules/perl-unicode-string/PKGBUILD
new file mode 100644
index 0000000..06ebb3e
--- /dev/null
+++ b/abs/core/perl_modules/perl-unicode-string/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=perl-unicode-string
+_realname=Unicode-String
+pkgver=2.09
+pkgrel=3
+pkgdesc="String of Unicode characters for perl (UCS2/UTF16)"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/${_realname}-${pkgver}.tar.gz)
+md5sums=('553e68e603723bf7c631f8701ab0d678')
+
+build() {
+ cd ${startdir}/src/${_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=${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/perl_modules/perl-unicode-utf8simple/PKGBUILD b/abs/core/perl_modules/perl-unicode-utf8simple/PKGBUILD
new file mode 100644
index 0000000..a5b9dfb
--- /dev/null
+++ b/abs/core/perl_modules/perl-unicode-utf8simple/PKGBUILD
@@ -0,0 +1,23 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-unicode-utf8simple
+pkgver=1.06
+pkgrel=2
+pkgdesc="Conversions to/from UTF8 from/to characterse"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~GUS/Unicode-UTF8simple"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/G/GU/GUS/Unicode-UTF8simple-$pkgver.tar.gz)
+md5sums=('1d90907170ed41690a572a2d6ed6e7da')
+
+build() {
+ cd $startdir/src/Unicode-UTF8simple-$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-uri/PKGBUILD b/abs/core/perl_modules/perl-uri/PKGBUILD
new file mode 100644
index 0000000..ec8f2c5
--- /dev/null
+++ b/abs/core/perl_modules/perl-uri/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: eric <eric@archlinux.org>
+# Contributor: Manolis Tzanidakis
+
+pkgname=perl-uri
+_realname=URI
+pkgver=1.35
+pkgrel=3
+pkgdesc="Perl Module: form Resource Identifiers (absolute and relative)"
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0')
+options=(!emptydirs)
+source=(http://www.cpan.org/authors/id/G/GA/GAAS/${_realname}-$pkgver.tar.gz)
+replaces=('uri')
+provides=('uri')
+md5sums=('1a933b1114c41a25587ee59ba8376f7c')
+
+build() {
+ cd $startdir/src/${_realname}-$pkgver
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 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
+}
+# vim: ts=2 sw=2 et ft=sh
diff --git a/abs/core/perl_modules/perl-www-mechanize/PKGBUILD b/abs/core/perl_modules/perl-www-mechanize/PKGBUILD
new file mode 100644
index 0000000..9bbd409
--- /dev/null
+++ b/abs/core/perl_modules/perl-www-mechanize/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD,v 1.11 2008/03/24 16:16:28 sergej Exp $
+# Maintainer: Sergej Pupykin <sergej@aur.archlinux.org>
+# Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-www-mechanize
+pkgver=1.34
+pkgrel=2
+pkgdesc="Automates web page form & link interaction"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PETDANCE/WWW-Mechanize"
+license=('GPL' 'PerlArtistic')
+depends=('perl-libwww' 'perl-html-parser' 'perl-uri')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PE/PETDANCE/WWW-Mechanize-$pkgver.tar.gz)
+md5sums=('77a5c025b9a722b62884b7740b8133f9')
+
+build() {
+ cd $startdir/src/WWW-Mechanize-$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-libxml-common/ChangeLog b/abs/core/perl_modules/perl-xml-libxml-common/ChangeLog
new file mode 100644
index 0000000..2f7b7c2
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-libxml-common/ChangeLog
@@ -0,0 +1,5 @@
+
+2007-12-29 Douglas Soares de Andrade <dsa@aur.archlinux.org>
+
+ * Fixed the package to build correctly in x86_64
+
diff --git a/abs/core/perl_modules/perl-xml-libxml-common/PKGBUILD b/abs/core/perl_modules/perl-xml-libxml-common/PKGBUILD
new file mode 100644
index 0000000..3780531
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-libxml-common/PKGBUILD
@@ -0,0 +1,25 @@
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-libxml-common
+pkgver=0.13
+pkgrel=3
+pkgdesc="Routines and Constants common for XML::LibXML and XML::GDOME"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PHISH/XML-LibXML-Common"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'libxml2')
+provides=('perl-libxml-common')
+replaces=('perl-libxml-common')
+conflicts=('perl-libxml-common')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PH/PHISH/XML-LibXML-Common-$pkgver.tar.gz)
+md5sums=('13b6d93f53375d15fd11922216249659')
+
+build() {
+ cd $startdir/src/XML-LibXML-Common-$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-libxml/PKGBUILD b/abs/core/perl_modules/perl-xml-libxml/PKGBUILD
new file mode 100644
index 0000000..0ed0971
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-libxml/PKGBUILD
@@ -0,0 +1,26 @@
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-libxml
+pkgver=1.66
+pkgrel=3
+pkgdesc="Interface to the libxml library"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~PAJAS/XML-LibXML"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-xml-libxml-common>=0.13' 'perl-xml-sax>=0.11' 'perl-xml-namespacesupport>=1.07')
+provides=('perl-libxml')
+replaces=('perl-libxml')
+conflicts=('perl-libxml')
+install=('perl-xml-libxml.install')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/P/PA/PAJAS/XML-LibXML-$pkgver.tar.gz)
+md5sums=('18e765429a4b22c8fb68b5273ead1e3c')
+
+build() {
+ cd $startdir/src/XML-LibXML-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make pure_install doc_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-libxml/perl-xml-libxml.install b/abs/core/perl_modules/perl-xml-libxml/perl-xml-libxml.install
new file mode 100644
index 0000000..6085ff0
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-libxml/perl-xml-libxml.install
@@ -0,0 +1,19 @@
+post_install() {
+ echo ":: Installing SAX XML Parsers"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX::Parser))->save_parsers()"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()"
+}
+
+post_upgrade() {
+ libxmlcount=`grep -c XML::LibXML::SAX /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini`
+ if [[ $libxmlcount == 0 ]]; then
+ echo ":: Installing SAX XML Parsers"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX::Parser))->save_parsers()"
+ /usr/bin/perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()"
+ fi
+}
+
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/perl_modules/perl-xml-namespacesupport/PKGBUILD b/abs/core/perl_modules/perl-xml-namespacesupport/PKGBUILD
new file mode 100644
index 0000000..a0950d8
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-namespacesupport/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-namespacesupport
+pkgver=1.09
+pkgrel=3
+pkgdesc="Generic namespace helpers (ported from SAX2)"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~RBERJON/XML-NamespaceSupport"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/R/RB/RBERJON/XML-NamespaceSupport-$pkgver.tar.gz)
+md5sums=('b0867d7b599d8a63ba630fa6227936fe')
+
+build() {
+ cd $startdir/src/XML-NamespaceSupport-$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-sax/PKGBUILD b/abs/core/perl_modules/perl-xml-sax/PKGBUILD
new file mode 100644
index 0000000..016fbef
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-sax/PKGBUILD
@@ -0,0 +1,26 @@
+# Maintainer: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-sax
+pkgver=0.16
+pkgrel=4
+pkgdesc="Simple API for XML "
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~GRANTM/XML-SAX"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perl-xml-namespacesupport>=0.03')
+options=('!emptydirs')
+install=(perl-xml-sax.install )
+source=("http://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-$pkgver.tar.gz" "perl-xml-sax.patch")
+md5sums=('4b07b6a9884f772ee07139b385661e9d'
+ '17a465d206f8ba43f34ca098d99f05fc')
+
+build() {
+ cd $startdir/src
+ patch -p0 < perl-xml-sax.patch || return 1
+ cd $startdir/src/XML-SAX-$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-sax/perl-xml-sax.install b/abs/core/perl_modules/perl-xml-sax/perl-xml-sax.install
new file mode 100644
index 0000000..7b1e1f2
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-sax/perl-xml-sax.install
@@ -0,0 +1,15 @@
+post_install() {
+if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then
+ perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null
+fi
+}
+
+post_upgrade() {
+if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then
+ perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null
+fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/perl_modules/perl-xml-sax/perl-xml-sax.patch b/abs/core/perl_modules/perl-xml-sax/perl-xml-sax.patch
new file mode 100644
index 0000000..88e653d
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-sax/perl-xml-sax.patch
@@ -0,0 +1,45 @@
+--- XML-SAX-0.16/Makefile.PL.orig 2008-04-08 10:36:43.718155829 +0200
++++ XML-SAX-0.16/Makefile.PL 2008-04-08 10:37:17.347001804 +0200
+@@ -12,42 +12,3 @@
+ },
+ );
+
+-sub MY::install {
+- package MY;
+- my $script = shift->SUPER::install(@_);
+-
+- # Only modify existing ParserDetails.ini if user agrees
+-
+- my $write_ini_ok = 0;
+-
+- eval { require XML::SAX };
+- if ($@) {
+- $write_ini_ok = 1;
+- }
+- else {
+- my $dir = File::Basename::dirname($INC{'XML/SAX.pm'});
+- if (-e File::Spec->catfile($dir, 'SAX', 'ParserDetails.ini')) {
+- $write_ini_ok =
+- ExtUtils::MakeMaker::prompt(
+- "Do you want XML::SAX to alter ParserDetails.ini?", "Y"
+- ) =~ /^y/i;
+- }
+- else {
+- $write_ini_ok = 1;
+- }
+- }
+-
+- if ($write_ini_ok) {
+- $script =~ s/install :: (.*)$/install :: $1 install_sax_pureperl/m;
+- $script .= <<"INSTALL";
+-
+-install_sax_pureperl :
+-\t\@\$(PERL) -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()"
+-
+-INSTALL
+-
+- }
+-
+- return $script;
+-}
+-
diff --git a/abs/core/perl_modules/perl-xml-simple/PKGBUILD b/abs/core/perl_modules/perl-xml-simple/PKGBUILD
new file mode 100644
index 0000000..98e3428
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-simple/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=perl-xml-simple
+_realname=XML-Simple
+pkgver=2.18
+pkgrel=2
+pkgdesc="Simple XML parser for perl"
+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/G/GR/GRANTM/${_realname}-${pkgver}.tar.gz)
+md5sums=('593aa8001e5c301cdcdb4bb3b63abc33')
+
+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-twig/PKGBUILD b/abs/core/perl_modules/perl-xml-twig/PKGBUILD
new file mode 100644
index 0000000..b15b94b
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-twig/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+# Maintainer/Contributor: Francois Charette <firmicus@gmx.net>
+
+pkgname=perl-xml-twig
+_realname=XML-Twig
+pkgver=3.32
+pkgrel=2
+pkgdesc="A module for easy processing of XML"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/${_realname}/"
+license=('GPL' 'PerlArtistic')
+depends=('perlxml>=2.23' 'perl-text-iconv' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MI/MIROD/${_realname}-${pkgver}.tar.gz)
+md5sums=('9df9dcab00aa093c4e540caa5cb759fa')
+
+build() {
+ cd $startdir/src/${_realname}-${pkgver}
+ perl Makefile.PL -y INSTALLDIRS=vendor || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-writer/PKGBUILD b/abs/core/perl_modules/perl-xml-writer/PKGBUILD
new file mode 100644
index 0000000..2e4496a
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-writer/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-writer
+pkgver=0.604
+pkgrel=1
+pkgdesc="Module for writing XML documents"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~JOSEPHW/XML-Writer"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-$pkgver.tar.gz)
+md5sums=('88cd8aec7da39028c2aaf809265a8d68')
+
+build() {
+ cd $startdir/src/XML-Writer-$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/perlxml/PKGBUILD b/abs/core/perlxml/PKGBUILD
new file mode 100644
index 0000000..c9b2f30
--- /dev/null
+++ b/abs/core/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
new file mode 100644
index 0000000..68ece33
--- /dev/null
+++ b/abs/core/php/PKGBUILD
@@ -0,0 +1,174 @@
+# $Id: PKGBUILD 4664 2008-07-08 13:58:05Z allan $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=php
+pkgver=5.2.6
+pkgrel=4
+_suhosinver=0.9.6.2
+pkgdesc='A high-level scripting language'
+arch=('i686' 'x86_64')
+license=('PHP')
+url='http://www.php.net'
+backup=('etc/php/php.ini')
+install=php.install
+depends=('glibc' 'readline' 'ncurses' 'libxml2' 'pcre')
+makedepends=('apache' 'imap' 'postgresql-libs' 'mysql' 'libldap' \
+ 'libpng' 'libjpeg' 'sqlite3' 'unixodbc' 'net-snmp' \
+ 'libmcrypt' 'tidyhtml' 'aspell' 'libtool' 'freetype2' 'libjpeg' \
+ 'curl' 'libxslt' 'pam' 'openssl' 'bzip2' 'gdbm' 'db>=4.7')
+optdepends=('bzip2: bz2' \
+ 'curl: curl' \
+ 'gdbm: dba' \
+ 'libpng: gd' \
+ 'libjpeg: gd' \
+ 'freetype2: gd' \
+ 'pam: imap' \
+ 'libldap: ldap' \
+ 'mcrypt: mcrypt' \
+ 'libtool: mcrypt' \
+ 'libmysqlclient: mysql/mysqli' \
+ 'unixodbc: odbc/pdo_odbc' \
+ 'openssl: openssl' \
+ 'postgresql-libs: pgsql/pdo_pgsql' \
+ 'aspell: pspell' \
+ 'net-snmp: snmp' \
+ 'sqlite3: sqlite' \
+ 'tidyhtml: tidy' \
+ 'libxslt: xsl' \
+ )
+options=('emptydirs')
+source=("http://www.php.net/distributions/${pkgname}-${pkgver}.tar.bz2" \
+ "http://download.suhosin.org/suhosin-patch-${pkgver}-${_suhosinver}.patch.gz" \
+ 'php.ini' 'apache.conf' 'db-configure.patch')
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+ 'f2ec986341a314c271259dbe4d940858'
+ '0ee1dad48f7d67af3d2c78ca6eed68ba'
+ '96ca078be6729b665be8a865535a97bf'
+ '74e5ce5a02488ec91b1c59f539e42936')
+
+build() {
+ phpconfig="--prefix=/usr \
+ --sysconfdir=/etc/php \
+ --with-layout=GNU \
+ --with-config-file-path=/etc/php \
+ --with-config-file-scan-dir=/etc/php/conf.d \
+ --enable-inline-optimization \
+ --disable-debug \
+ --disable-rpath \
+ --disable-static \
+ --enable-shared \
+ "
+
+ phpextensions="--with-openssl=shared \
+ --with-zlib=shared \
+ --enable-bcmath=shared \
+ --with-bz2=shared \
+ --enable-calendar=shared \
+ --with-curl=shared \
+ --enable-dba=shared \
+ --without-db2 \
+ --without-db3 \
+ --with-db4=shared \
+ --with-gdbm=shared \
+ --enable-dbase=shared \
+ --enable-exif=shared \
+ --enable-ftp=shared \
+ --with-gd=shared \
+ --enable-gd-native-ttf \
+ --with-jpeg-dir=shared,/usr \
+ --with-png-dir=shared,/usr \
+ --with-gettext=shared \
+ --with-imap=shared \
+ --with-imap-ssl=shared \
+ --with-ldap=shared \
+ --enable-mbstring=shared \
+ --with-mcrypt=shared \
+ --with-mysql=shared \
+ --with-mysql-sock=/tmp/mysql.sock \
+ --with-mysql=shared \
+ --with-mysqli=shared \
+ --with-ncurses=shared \
+ --with-unixODBC=shared,/usr \
+ --enable-pdo=shared \
+ --with-pdo-mysql=shared \
+ --with-pdo-sqlite=shared \
+ --with-pdo-odbc=shared,unixODBC,/usr \
+ --with-pdo-pgsql=shared \
+ --with-sqlite=shared \
+ --with-pgsql=shared \
+ --enable-shmop=shared \
+ --with-snmp=shared \
+ --enable-soap=shared \
+ --enable-sqlite-utf8=shared \
+ --enable-sysvmsg=shared \
+ --enable-sysvsem=shared \
+ --enable-sysvshm=shared \
+ --with-tidy=shared \
+ --with-xsl=shared \
+ --enable-zip=shared \
+ --enable-posix=shared \
+ --enable-sockets=shared \
+ --enable-xml \
+ --with-ttf=shared \
+ --enable-session=shared \
+ --with-regex=php \
+ --with-pcre-regex=/usr \
+ --enable-mbstring=all \
+ --enable-mbregex \
+ --enable-json=shared \
+ --with-iconv=shared \
+ --with-xmlrpc=shared \
+ --with-pspell=shared \
+ --with-freetype-dir=shared,/usr \
+ --with-mime-magic=shared \
+ "
+
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ # avoid linking against old db version
+ patch -p0 -i ${srcdir}/db-configure.patch || return 1
+
+ # apply suhosin patch
+ patch -p1 -i ${srcdir}/suhosin-patch-${pkgver}-${_suhosinver}.patch || return 1
+
+ # cli
+ ./configure ${phpconfig} \
+ --disable-cgi \
+ --with-readline \
+ --enable-pcntl \
+ --with-pear=/usr/share/pear \
+ ${phpextensions} || return 1
+ make || return 1
+ # make test
+ make INSTALL_ROOT=${pkgdir} install || return 1
+
+ # fix pear path
+ sed "s|$PWD||g" -i ${pkgdir}/usr/{bin/pear,share/pear/pearcmd.php}
+ # cleanup
+ rm -f ${pkgdir}`${pkgdir}/usr/bin/php-config --extension-dir`/*.a
+ rm -rf ${pkgdir}/{.registry,.channels,.depdb*,.lock,.filemap}
+ rmdir ${pkgdir}/usr/include/php/include
+ # install php.ini
+ install -D -m644 ${srcdir}/php.ini ${pkgdir}/etc/php/php.ini
+ install -d -m755 ${pkgdir}/etc/php/conf.d/
+
+ # cgi and fcgi
+ ./configure ${phpconfig} \
+ --enable-fastcgi \
+ --enable-cgi \
+ --enable-discard-path \
+ --enable-force-cgi-redirect \
+ --disable-cli \
+ ${phpextensions} || return 1
+ make || return 1
+ install -D -m755 sapi/cgi/php-cgi ${pkgdir}/usr/bin/php-cgi || return 1
+
+ # mod_php
+ ./configure ${phpconfig} \
+ --with-apxs2 \
+ --disable-cli \
+ ${phpextensions} || return 1
+ make || return 1
+ 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
+}
diff --git a/abs/core/php/apache.conf b/abs/core/php/apache.conf
new file mode 100644
index 0000000..86344c8
--- /dev/null
+++ b/abs/core/php/apache.conf
@@ -0,0 +1,9 @@
+# Required modules: dir_module, php5_module
+
+<IfModule dir_module>
+ <IfModule php5_module>
+ DirectoryIndex index.php index.html
+ AddHandler application/x-httpd-php .php
+ AddHandler application/x-httpd-php-source .phps
+ </IfModule>
+</IfModule> \ No newline at end of file
diff --git a/abs/core/php/db-configure.patch b/abs/core/php/db-configure.patch
new file mode 100644
index 0000000..fdc82b9
--- /dev/null
+++ b/abs/core/php/db-configure.patch
@@ -0,0 +1,51 @@
+--- configure.orig 2008-07-03 10:27:06.000000000 +0000
++++ configure 2008-07-03 10:30:56.000000000 +0000
+@@ -28399,43 +28399,15 @@
+
+ unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX THIS_RESULT
+
+- dbdp="/usr/local/BerkeleyDB.4."
+- for i in $PHP_DB4 ${dbdp}6 ${dbdp}5 ${dbdp}4 ${dbdp}3 ${dbdp}2 ${dbdp}1 ${dbdp}0 /usr/local /usr; do
+- if test -f "$i/db4/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/db4/db.h
+- break
+- elif test -f "$i/include/db4.6/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.6/db.h
+- break
+- elif test -f "$i/include/db4.5/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.5/db.h
+- break
+- elif test -f "$i/include/db4/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4/db.h
+- break
+- elif test -f "$i/include/db/db4.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db/db4.h
+- break
+- elif test -f "$i/include/db4.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db4.h
+- break
+- elif test -f "$i/include/db.h"; then
+- THIS_PREFIX=$i
+- THIS_INCLUDE=$i/include/db.h
+- break
+- fi
+- done
++ if test -f "/usr/include/db.h"; then
++ THIS_PREFIX=/usr
++ THIS_INCLUDE=/usr/include/db.h
++ fi
+
+ if test -z "$THIS_INCLUDE"; then
+ { echo "configure: error: DBA: Could not find necessary header file(s)." 1>&2; exit 1; }
+ fi
+- for LIB in db-4.6 db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db; do
++ for LIB in db; do
+ if test -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.a || test -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.$SHLIB_SUFFIX_NAME; then
+ lib_found="";
+
diff --git a/abs/core/php/php.ini b/abs/core/php/php.ini
new file mode 100644
index 0000000..7f78d4a
--- /dev/null
+++ b/abs/core/php/php.ini
@@ -0,0 +1,1304 @@
+[PHP]
+
+;;;;;;;;;;;;;;;;;;;
+; About php.ini ;
+;;;;;;;;;;;;;;;;;;;
+; This file controls many aspects of PHP's behavior. In order for PHP to
+; read it, it must be named 'php.ini'. PHP looks for it in the current
+; working directory, in the path designated by the environment variable
+; PHPRC, and in the path that was defined in compile time (in that order).
+; The path in which the php.ini file is looked for can be overridden using
+; the -c argument in command line mode.
+;
+; The syntax of the file is extremely simple. Whitespace and Lines
+; beginning with a semicolon are silently ignored (as you probably guessed).
+; Section headers (e.g. [Foo]) are also silently ignored, even though
+; they might mean something in the future.
+;
+; Directives are specified using the following syntax:
+; directive = value
+; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
+;
+; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
+; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
+; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
+;
+; Expressions in the INI file are limited to bitwise operators and parentheses:
+; | bitwise OR
+; & bitwise AND
+; ~ bitwise NOT
+; ! boolean NOT
+;
+; Boolean flags can be turned on using the values 1, On, True or Yes.
+; They can be turned off using the values 0, Off, False or No.
+;
+; An empty string can be denoted by simply not writing anything after the equal
+; sign, or by using the None keyword:
+;
+; foo = ; sets foo to an empty string
+; foo = none ; sets foo to an empty string
+; foo = "none" ; sets foo to the string 'none'
+;
+; If you use constants in your value, and these constants belong to a
+; dynamically loaded extension (either a PHP extension or a Zend extension),
+; you may only use these constants *after* the line that loads the extension.
+;
+;
+;;;;;;;;;;;;;;;;;;;
+; About this file ;
+;;;;;;;;;;;;;;;;;;;
+; This is the recommended, PHP 5-style version of the php.ini-dist file. It
+; sets some non standard settings, that make PHP more efficient, more secure,
+; and encourage cleaner coding.
+;
+; The price is that with these settings, PHP may be incompatible with some
+; applications, and sometimes, more difficult to develop with. Using this
+; file is warmly recommended for production sites. As all of the changes from
+; the standard settings are thoroughly documented, you can go over each one,
+; and decide whether you want to use it or not.
+;
+; For general information about the php.ini file, please consult the php.ini-dist
+; file, included in your PHP distribution.
+;
+; This file is different from the php.ini-dist file in the fact that it features
+; different values for several directives, in order to improve performance, while
+; possibly breaking compatibility with the standard out-of-the-box behavior of
+; PHP. Please make sure you read what's different, and modify your scripts
+; accordingly, if you decide to use this file instead.
+;
+; - register_long_arrays = Off [Performance]
+; Disables registration of the older (and deprecated) long predefined array
+; variables ($HTTP_*_VARS). Instead, use the superglobals that were
+; introduced in PHP 4.1.0
+; - display_errors = Off [Security]
+; With this directive set to off, errors that occur during the execution of
+; scripts will no longer be displayed as a part of the script output, and thus,
+; will no longer be exposed to remote users. With some errors, the error message
+; content may expose information about your script, web server, or database
+; server that may be exploitable for hacking. Production sites should have this
+; directive set to off.
+; - log_errors = On [Security]
+; This directive complements the above one. Any errors that occur during the
+; execution of your script will be logged (typically, to your server's error log,
+; but can be configured in several ways). Along with setting display_errors to off,
+; this setup gives you the ability to fully understand what may have gone wrong,
+; without exposing any sensitive information to remote users.
+; - output_buffering = 4096 [Performance]
+; Set a 4KB output buffer. Enabling output buffering typically results in less
+; writes, and sometimes less packets sent on the wire, which can often lead to
+; better performance. The gain this directive actually yields greatly depends
+; on which Web server you're working with, and what kind of scripts you're using.
+; - register_argc_argv = Off [Performance]
+; Disables registration of the somewhat redundant $argv and $argc global
+; variables.
+; - magic_quotes_gpc = Off [Performance]
+; Input data is no longer escaped with slashes so that it can be sent into
+; SQL databases without further manipulation. Instead, you should use the
+; function addslashes() on each input element you wish to send to a database.
+; - variables_order = "GPCS" [Performance]
+; The environment variables are not hashed into the $_ENV. To access
+; environment variables, you can use getenv() instead.
+; - error_reporting = E_ALL [Code Cleanliness, Security(?)]
+; By default, PHP suppresses errors of type E_NOTICE. These error messages
+; are emitted for non-critical errors, but that could be a symptom of a bigger
+; problem. Most notably, this will cause error messages about the use
+; of uninitialized variables to be displayed.
+; - allow_call_time_pass_reference = Off [Code cleanliness]
+; It's not possible to decide to force a variable to be passed by reference
+; when calling a function. The PHP 4 style to do this is by making the
+; function require the relevant argument by reference.
+; - short_open_tag = Off [Portability]
+; Using short tags is discouraged when developing code meant for redistribution
+; since short tags may not be supported on the target server.
+
+;;;;;;;;;;;;;;;;;;;;
+; Language Options ;
+;;;;;;;;;;;;;;;;;;;;
+
+; Enable the PHP scripting language engine under Apache.
+engine = On
+
+; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
+zend.ze1_compatibility_mode = Off
+
+; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
+; NOTE: Using short tags should be avoided when developing applications or
+; libraries that are meant for redistribution, or deployment on PHP
+; servers which are not under your control, because short tags may not
+; be supported on the target server. For portable, redistributable code,
+; be sure not to use short tags.
+short_open_tag = Off
+
+; Allow ASP-style <% %> tags.
+asp_tags = Off
+
+; The number of significant digits displayed in floating point numbers.
+precision = 14
+
+; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
+y2k_compliance = On
+
+; Output buffering allows you to send header lines (including cookies) even
+; after you send body content, at the price of slowing PHP's output layer a
+; bit. You can enable output buffering during runtime by calling the output
+; buffering functions. You can also enable output buffering for all files by
+; setting this directive to On. If you wish to limit the size of the buffer
+; to a certain size - you can use a maximum number of bytes instead of 'On', as
+; a value for this directive (e.g., output_buffering=4096).
+output_buffering = 4096
+
+; You can redirect all of the output of your scripts to a function. For
+; example, if you set output_handler to "mb_output_handler", character
+; encoding will be transparently converted to the specified encoding.
+; Setting any output handler automatically turns on output buffering.
+; Note: People who wrote portable scripts should not depend on this ini
+; directive. Instead, explicitly set the output handler using ob_start().
+; Using this ini directive may cause problems unless you know what script
+; is doing.
+; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
+; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
+; Note: output_handler must be empty if this is set 'On' !!!!
+; Instead you must use zlib.output_handler.
+;output_handler =
+
+; Transparent output compression using the zlib library
+; Valid values for this option are 'off', 'on', or a specific buffer size
+; to be used for compression (default is 4KB)
+; Note: Resulting chunk size may vary due to nature of compression. PHP
+; outputs chunks that are few hundreds bytes each as a result of
+; compression. If you prefer a larger chunk size for better
+; performance, enable output_buffering in addition.
+; Note: You need to use zlib.output_handler instead of the standard
+; output_handler, or otherwise the output will be corrupted.
+zlib.output_compression = Off
+;zlib.output_compression_level = -1
+
+; You cannot specify additional output handlers if zlib.output_compression
+; is activated here. This setting does the same as output_handler but in
+; a different order.
+;zlib.output_handler =
+
+; Implicit flush tells PHP to tell the output layer to flush itself
+; automatically after every output block. This is equivalent to calling the
+; PHP function flush() after each and every call to print() or echo() and each
+; and every HTML block. Turning this option on has serious performance
+; implications and is generally recommended for debugging purposes only.
+implicit_flush = Off
+
+; The unserialize callback function will be called (with the undefined class'
+; name as parameter), if the unserializer finds an undefined class
+; which should be instantiated.
+; A warning appears if the specified function is not defined, or if the
+; function doesn't include/implement the missing class.
+; So only set this entry, if you really want to implement such a
+; callback-function.
+unserialize_callback_func=
+
+; When floats & doubles are serialized store serialize_precision significant
+; digits after the floating point. The default value ensures that when floats
+; are decoded with unserialize, the data will remain the same.
+serialize_precision = 100
+
+; Whether to enable the ability to force arguments to be passed by reference
+; at function call time. This method is deprecated and is likely to be
+; unsupported in future versions of PHP/Zend. The encouraged method of
+; specifying which arguments should be passed by reference is in the function
+; declaration. You're encouraged to try and turn this option Off and make
+; sure your scripts work properly with it in order to ensure they will work
+; with future versions of the language (you will receive a warning each time
+; you use this feature, and the argument will be passed by value instead of by
+; reference).
+allow_call_time_pass_reference = Off
+
+;
+; Safe Mode
+;
+safe_mode = Off
+
+; By default, Safe Mode does a UID compare check when
+; opening files. If you want to relax this to a GID compare,
+; then turn on safe_mode_gid.
+safe_mode_gid = Off
+
+; When safe_mode is on, UID/GID checks are bypassed when
+; including files from this directory and its subdirectories.
+; (directory must also be in include_path or full path must
+; be used when including)
+safe_mode_include_dir =
+
+; When safe_mode is on, only executables located in the safe_mode_exec_dir
+; will be allowed to be executed via the exec family of functions.
+safe_mode_exec_dir =
+
+; Setting certain environment variables may be a potential security breach.
+; This directive contains a comma-delimited list of prefixes. In Safe Mode,
+; the user may only alter environment variables whose names begin with the
+; prefixes supplied here. By default, users will only be able to set
+; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
+;
+; Note: If this directive is empty, PHP will let the user modify ANY
+; environment variable!
+safe_mode_allowed_env_vars = PHP_
+
+; This directive contains a comma-delimited list of environment variables that
+; the end user won't be able to change using putenv(). These variables will be
+; protected even if safe_mode_allowed_env_vars is set to allow to change them.
+safe_mode_protected_env_vars = LD_LIBRARY_PATH
+
+; open_basedir, if set, limits all file operations to the defined directory
+; 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 = /srv/http/:/home/:/tmp/:/usr/share/pear/
+
+; This directive allows you to disable certain functions for security reasons.
+; It receives a comma-delimited list of function names. This directive is
+; *NOT* affected by whether Safe Mode is turned On or Off.
+disable_functions =
+
+; This directive allows you to disable certain classes for security reasons.
+; It receives a comma-delimited list of class names. This directive is
+; *NOT* affected by whether Safe Mode is turned On or Off.
+disable_classes =
+
+; Colors for Syntax Highlighting mode. Anything that's acceptable in
+; <span style="color: ???????"> would work.
+;highlight.string = #DD0000
+;highlight.comment = #FF9900
+;highlight.keyword = #007700
+;highlight.bg = #FFFFFF
+;highlight.default = #0000BB
+;highlight.html = #000000
+
+; If enabled, the request will be allowed to complete even if the user aborts
+; the request. Consider enabling it if executing long request, which may end up
+; being interrupted by the user or a browser timing out.
+; ignore_user_abort = On
+
+; Determines the size of the realpath cache to be used by PHP. This value should
+; be increased on systems where PHP opens many files to reflect the quantity of
+; the file operations performed.
+; realpath_cache_size=16k
+
+; Duration of time, in seconds for which to cache realpath information for a given
+; file or directory. For systems with rarely changing files, consider increasing this
+; value.
+; realpath_cache_ttl=120
+
+;
+; Misc
+;
+; Decides whether PHP may expose the fact that it is installed on the server
+; (e.g. by adding its signature to the Web server header). It is no security
+; threat in any way, but it makes it possible to determine whether you use PHP
+; on your server or not.
+expose_php = Off
+
+
+;;;;;;;;;;;;;;;;;;;
+; Resource Limits ;
+;;;;;;;;;;;;;;;;;;;
+
+max_execution_time = 30 ; Maximum execution time of each script, in seconds
+max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
+;max_input_nesting_level = 64 ; Maximum input variable nesting level
+memory_limit = 32M ; Maximum amount of memory a script may consume (32MB)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Error handling and logging ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; error_reporting is a bit-field. Or each number up to get desired error
+; reporting level
+; E_ALL - All errors and warnings (doesn't include E_STRICT)
+; E_ERROR - fatal run-time errors
+; E_RECOVERABLE_ERROR - almost fatal run-time errors
+; E_WARNING - run-time warnings (non-fatal errors)
+; E_PARSE - compile-time parse errors
+; E_NOTICE - run-time notices (these are warnings which often result
+; from a bug in your code, but it's possible that it was
+; intentional (e.g., using an uninitialized variable and
+; relying on the fact it's automatically initialized to an
+; empty string)
+; E_STRICT - run-time notices, enable to have PHP suggest changes
+; to your code which will ensure the best interoperability
+; and forward compatibility of your code
+; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
+; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
+; initial startup
+; E_COMPILE_ERROR - fatal compile-time errors
+; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
+; E_USER_ERROR - user-generated error message
+; E_USER_WARNING - user-generated warning message
+; E_USER_NOTICE - user-generated notice message
+;
+; Examples:
+;
+; - Show all errors, except for notices and coding standards warnings
+;
+;error_reporting = E_ALL & ~E_NOTICE
+;
+; - Show all errors, except for notices
+;
+;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+;
+; - Show only errors
+;
+;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
+;
+; - Show all errors, except coding standards warnings
+;
+error_reporting = E_ALL
+
+; Print out errors (as a part of the output). For production web sites,
+; you're strongly encouraged to turn this feature off, and use error logging
+; instead (see below). Keeping display_errors enabled on a production web site
+; may reveal security information to end users, such as file paths on your Web
+; server, your database schema or other information.
+;
+; possible values for display_errors:
+;
+; Off - Do not display any errors
+; stderr - Display errors to STDERR (affects only CGI/CLI binaries!)
+; On or stdout - Display errors to STDOUT (default)
+;
+; To output errors to STDERR with CGI/CLI:
+;display_errors = "stderr"
+;
+; Default
+;
+display_errors = Off
+
+; Even when display_errors is on, errors that occur during PHP's startup
+; sequence are not displayed. It's strongly recommended to keep
+; display_startup_errors off, except for when debugging.
+display_startup_errors = Off
+
+; Log errors into a log file (server-specific log, stderr, or error_log (below))
+; As stated above, you're strongly advised to use error logging in place of
+; error displaying on production web sites.
+log_errors = On
+
+; Set maximum length of log_errors. In error_log information about the source is
+; added. The default is 1024 and 0 allows to not apply any maximum length at all.
+log_errors_max_len = 1024
+
+; Do not log repeated messages. Repeated errors must occur in same file on same
+; line until ignore_repeated_source is set true.
+ignore_repeated_errors = Off
+
+; Ignore source of message when ignoring repeated messages. When this setting
+; is On you will not log errors with repeated messages from different files or
+; source lines.
+ignore_repeated_source = Off
+
+; If this parameter is set to Off, then memory leaks will not be shown (on
+; stdout or in the log). This has only effect in a debug compile, and if
+; error reporting includes E_WARNING in the allowed list
+report_memleaks = Off
+
+;report_zend_debug = 0
+
+; Store the last error/warning message in $php_errormsg (boolean).
+track_errors = Off
+
+; Disable the inclusion of HTML tags in error messages.
+; Note: Never use this feature for production boxes.
+;html_errors = Off
+
+; If html_errors is set On PHP produces clickable error messages that direct
+; to a page describing the error or function causing the error in detail.
+; You can download a copy of the PHP manual from http://www.php.net/docs.php
+; and change docref_root to the base URL of your local copy including the
+; leading '/'. You must also specify the file extension being used including
+; the dot.
+; Note: Never use this feature for production boxes.
+;docref_root = "/phpmanual/"
+;docref_ext = .html
+
+; String to output before an error message.
+;error_prepend_string = "<font color=ff0000>"
+
+; String to output after an error message.
+;error_append_string = "</font>"
+
+; Log errors to specified file.
+;error_log = filename
+
+; Log errors to syslog.
+error_log = syslog
+
+
+;;;;;;;;;;;;;;;;;
+; Data Handling ;
+;;;;;;;;;;;;;;;;;
+;
+; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
+
+; The separator used in PHP generated URLs to separate arguments.
+; Default is "&".
+;arg_separator.output = "&amp;"
+
+; List of separator(s) used by PHP to parse input URLs into variables.
+; Default is "&".
+; NOTE: Every character in this directive is considered as separator!
+;arg_separator.input = ";&"
+
+; This directive describes the order in which PHP registers GET, POST, Cookie,
+; Environment and Built-in variables (G, P, C, E & S respectively, often
+; referred to as EGPCS or GPC). Registration is done from left to right, newer
+; values override older values.
+variables_order = "GPCS"
+
+; Whether or not to register the EGPCS variables as global variables. You may
+; want to turn this off if you don't want to clutter your scripts' global scope
+; with user data. This makes most sense when coupled with track_vars - in which
+; case you can access all of the GPC variables through the $HTTP_*_VARS[],
+; variables.
+;
+; You should do your best to write your scripts so that they do not require
+; register_globals to be on; Using form variables as globals can easily lead
+; to possible security problems, if the code is not very well thought of.
+register_globals = Off
+
+; Whether or not to register the old-style input arrays, HTTP_GET_VARS
+; and friends. If you're not using them, it's recommended to turn them off,
+; for performance reasons.
+register_long_arrays = Off
+
+; This directive tells PHP whether to declare the argv&argc variables (that
+; would contain the GET information). If you don't use these variables, you
+; should turn it off for increased performance.
+register_argc_argv = Off
+
+; When enabled, the SERVER and ENV variables are created when they're first
+; used (Just In Time) instead of when the script starts. If these variables
+; are not used within a script, having this directive on will result in a
+; performance gain. The PHP directives register_globals, register_long_arrays,
+; and register_argc_argv must be disabled for this directive to have any affect.
+auto_globals_jit = On
+
+; Maximum size of POST data that PHP will accept.
+post_max_size = 8M
+
+; Magic quotes
+;
+
+; Magic quotes for incoming GET/POST/Cookie data.
+magic_quotes_gpc = Off
+
+; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
+magic_quotes_runtime = Off
+
+; Use Sybase-style magic quotes (escape ' with '' instead of \').
+magic_quotes_sybase = Off
+
+; Automatically add files before or after any PHP document.
+auto_prepend_file =
+auto_append_file =
+
+; As of 4.0b4, PHP always outputs a character encoding by default in
+; the Content-type: header. To disable sending of the charset, simply
+; set it to be empty.
+;
+; PHP's built-in default is text/html
+default_mimetype = "text/html"
+;default_charset = "iso-8859-1"
+
+; Always populate the $HTTP_RAW_POST_DATA variable.
+;always_populate_raw_post_data = On
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;
+; Paths and Directories ;
+;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; UNIX: "/path1:/path2"
+include_path = ".:/usr/share/pear"
+
+; The root of the PHP pages, used only if nonempty.
+; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
+; if you are running php as a CGI under any web server (other than IIS)
+; see documentation for security issues. The alternate is to use the
+; cgi.force_redirect configuration below
+doc_root =
+
+; The directory under which PHP opens the script using /~username used only
+; if nonempty.
+user_dir =
+
+; Directory in which the loadable extensions (modules) reside.
+extension_dir = "/usr/lib/php/20060613/"
+
+; Whether or not to enable the dl() function. The dl() function does NOT work
+; properly in multithreaded servers, such as IIS or Zeus, and is automatically
+; disabled on them.
+enable_dl = Off
+
+; cgi.force_redirect is necessary to provide security running PHP as a CGI under
+; most web servers. Left undefined, PHP turns this on by default. You can
+; turn it off here AT YOUR OWN RISK
+; **You CAN safely turn this off for IIS, in fact, you MUST.**
+; cgi.force_redirect = 1
+
+; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
+; every request.
+; cgi.nph = 1
+
+; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
+; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
+; will look for to know it is OK to continue execution. Setting this variable MAY
+; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
+; cgi.redirect_status_env = ;
+
+; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
+; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
+; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
+; this to 1 will cause PHP CGI to fix it's paths to conform to the spec. A setting
+; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
+; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
+; cgi.fix_pathinfo=1
+
+; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
+; security tokens of the calling client. This allows IIS to define the
+; security context that the request runs under. mod_fastcgi under Apache
+; does not currently support this feature (03/17/2002)
+; Set to 1 if running under IIS. Default is zero.
+; fastcgi.impersonate = 1;
+
+; Disable logging through FastCGI connection
+; fastcgi.logging = 0
+
+; cgi.rfc2616_headers configuration option tells PHP what type of headers to
+; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
+; is supported by Apache. When this option is set to 1 PHP will send
+; RFC2616 compliant header.
+; Default is zero.
+;cgi.rfc2616_headers = 0
+
+
+;;;;;;;;;;;;;;;;
+; File Uploads ;
+;;;;;;;;;;;;;;;;
+
+; Whether to allow HTTP file uploads.
+file_uploads = On
+
+; Temporary directory for HTTP uploaded files (will use system default if not
+; specified).
+;upload_tmp_dir =
+
+; Maximum allowed size for uploaded files.
+upload_max_filesize = 2M
+
+
+;;;;;;;;;;;;;;;;;;
+; Fopen wrappers ;
+;;;;;;;;;;;;;;;;;;
+
+; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
+allow_url_fopen = Off
+
+; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
+allow_url_include = Off
+
+; Define the anonymous ftp password (your email address)
+;from="john@doe.com"
+
+; Define the User-Agent string
+; user_agent="PHP"
+
+; Default timeout for socket based streams (seconds)
+default_socket_timeout = 60
+
+;;;;;;;;;;;;;;;;;;;;;;
+; Dynamic Extensions ;
+;;;;;;;;;;;;;;;;;;;;;;
+;
+; If you wish to have an extension loaded automatically, use the following
+; syntax:
+;
+; extension=modulename.extension
+;
+; For example, under UNIX:
+;
+; extension=msql.so
+;
+; Note that it should be the name of the module only; no directory information
+; needs to go here. Specify the location of the extension with the
+; extension_dir directive above.
+
+;;;;;;;;;;;;;;;;;;;
+; Module Settings ;
+;;;;;;;;;;;;;;;;;;;
+
+[Date]
+; Defines the default timezone used by the date functions
+;date.timezone =
+
+;date.default_latitude = 31.7667
+;date.default_longitude = 35.2333
+
+;date.sunrise_zenith = 90.583333
+;date.sunset_zenith = 90.583333
+
+[filter]
+;filter.default = unsafe_raw
+;filter.default_flags =
+
+[iconv]
+;iconv.input_encoding = ISO-8859-1
+;iconv.internal_encoding = ISO-8859-1
+;iconv.output_encoding = ISO-8859-1
+
+[sqlite]
+;sqlite.assoc_case = 0
+
+[xmlrpc]
+;xmlrpc_error_number = 0
+;xmlrpc_errors = 0
+
+[Pcre]
+;PCRE library backtracking limit.
+;pcre.backtrack_limit=100000
+
+;PCRE library recursion limit.
+;Please note that if you set this value to a high number you may consume all
+;the available process stack and eventually crash PHP (due to reaching the
+;stack size limit imposed by the Operating System).
+;pcre.recursion_limit=100000
+
+[Syslog]
+; Whether or not to define the various syslog variables (e.g. $LOG_PID,
+; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In
+; runtime, you can define these variables by calling define_syslog_variables().
+define_syslog_variables = Off
+
+[mail function]
+; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
+;sendmail_path =
+
+; Force the addition of the specified parameters to be passed as extra parameters
+; to the sendmail binary. These parameters will always replace the value of
+; the 5th parameter to mail(), even in safe mode.
+;mail.force_extra_parameters =
+
+[SQL]
+sql.safe_mode = Off
+
+[ODBC]
+;odbc.default_db = Not yet implemented
+;odbc.default_user = Not yet implemented
+;odbc.default_pw = Not yet implemented
+
+; Allow or prevent persistent links.
+odbc.allow_persistent = On
+
+; Check that a connection is still valid before reuse.
+odbc.check_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+odbc.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+odbc.max_links = -1
+
+; Handling of LONG fields. Returns number of bytes to variables. 0 means
+; passthru.
+odbc.defaultlrl = 4096
+
+; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char.
+; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
+; of uodbc.defaultlrl and uodbc.defaultbinmode
+odbc.defaultbinmode = 1
+
+[MySQL]
+; Allow or prevent persistent links.
+mysql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+mysql.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+mysql.max_links = -1
+
+; Default port number for mysql_connect(). If unset, mysql_connect() will use
+; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
+; compile-time value defined MYSQL_PORT (in that order).
+mysql.default_port =
+
+; Default socket name for local MySQL connects. If empty, uses the built-in
+; MySQL defaults.
+mysql.default_socket =
+
+; Default host for mysql_connect() (doesn't apply in safe mode).
+mysql.default_host =
+
+; Default user for mysql_connect() (doesn't apply in safe mode).
+mysql.default_user =
+
+; Default password for mysql_connect() (doesn't apply in safe mode).
+; Note that this is generally a *bad* idea to store passwords in this file.
+; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
+; and reveal this password! And of course, any users with read access to this
+; file will be able to reveal the password as well.
+mysql.default_password =
+
+; Maximum time (in seconds) for connect timeout. -1 means no limit
+mysql.connect_timeout = 60
+
+; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
+; SQL-Errors will be displayed.
+mysql.trace_mode = Off
+
+[MySQLi]
+
+; Maximum number of links. -1 means no limit.
+mysqli.max_links = -1
+
+; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
+; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
+; compile-time value defined MYSQL_PORT (in that order).
+mysqli.default_port = 3306
+
+; Default socket name for local MySQL connects. If empty, uses the built-in
+; MySQL defaults.
+mysqli.default_socket =
+
+; Default host for mysql_connect() (doesn't apply in safe mode).
+mysqli.default_host =
+
+; Default user for mysql_connect() (doesn't apply in safe mode).
+mysqli.default_user =
+
+; Default password for mysqli_connect() (doesn't apply in safe mode).
+; Note that this is generally a *bad* idea to store passwords in this file.
+; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
+; and reveal this password! And of course, any users with read access to this
+; file will be able to reveal the password as well.
+mysqli.default_pw =
+
+; Allow or prevent reconnect
+mysqli.reconnect = Off
+
+[mSQL]
+; Allow or prevent persistent links.
+msql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+msql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+msql.max_links = -1
+
+[OCI8]
+; enables privileged connections using external credentials (OCI_SYSOPER, OCI_SYSDBA)
+;oci8.privileged_connect = Off
+
+; Connection: The maximum number of persistent OCI8 connections per
+; process. Using -1 means no limit.
+;oci8.max_persistent = -1
+
+; Connection: The maximum number of seconds a process is allowed to
+; maintain an idle persistent connection. Using -1 means idle
+; persistent connections will be maintained forever.
+;oci8.persistent_timeout = -1
+
+; Connection: The number of seconds that must pass before issuing a
+; ping during oci_pconnect() to check the connection validity. When
+; set to 0, each oci_pconnect() will cause a ping. Using -1 disables
+; pings completely.
+;oci8.ping_interval = 60
+
+; Tuning: This option enables statement caching, and specifies how
+; many statements to cache. Using 0 disables statement caching.
+;oci8.statement_cache_size = 20
+
+; Tuning: Enables statement prefetching and sets the default number of
+; rows that will be fetched automatically after statement execution.
+;oci8.default_prefetch = 10
+
+; Compatibility. Using On means oci_close() will not close
+; oci_connect() and oci_new_connect() connections.
+;oci8.old_oci_close_semantics = Off
+
+[PostgresSQL]
+; Allow or prevent persistent links.
+pgsql.allow_persistent = On
+
+; Detect broken persistent links always with pg_pconnect().
+; Auto reset feature requires a little overheads.
+pgsql.auto_reset_persistent = Off
+
+; Maximum number of persistent links. -1 means no limit.
+pgsql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+pgsql.max_links = -1
+
+; Ignore PostgreSQL backends Notice message or not.
+; Notice message logging require a little overheads.
+pgsql.ignore_notice = 0
+
+; Log PostgreSQL backends Noitce message or not.
+; Unless pgsql.ignore_notice=0, module cannot log notice message.
+pgsql.log_notice = 0
+
+[Sybase]
+; Allow or prevent persistent links.
+sybase.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+sybase.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+sybase.max_links = -1
+
+;sybase.interface_file = "/usr/sybase/interfaces"
+
+; Minimum error severity to display.
+sybase.min_error_severity = 10
+
+; Minimum message severity to display.
+sybase.min_message_severity = 10
+
+; Compatibility mode with old versions of PHP 3.0.
+; If on, this will cause PHP to automatically assign types to results according
+; to their Sybase type, instead of treating them all as strings. This
+; compatibility mode will probably not stay around forever, so try applying
+; whatever necessary changes to your code, and turn it off.
+sybase.compatability_mode = Off
+
+[Sybase-CT]
+; Allow or prevent persistent links.
+sybct.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+sybct.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+sybct.max_links = -1
+
+; Minimum server message severity to display.
+sybct.min_server_severity = 10
+
+; Minimum client message severity to display.
+sybct.min_client_severity = 10
+
+[bcmath]
+; Number of decimal digits for all bcmath functions.
+bcmath.scale = 0
+
+[browscap]
+;browscap = extra/browscap.ini
+
+[Informix]
+; Default host for ifx_connect() (doesn't apply in safe mode).
+ifx.default_host =
+
+; Default user for ifx_connect() (doesn't apply in safe mode).
+ifx.default_user =
+
+; Default password for ifx_connect() (doesn't apply in safe mode).
+ifx.default_password =
+
+; Allow or prevent persistent links.
+ifx.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+ifx.max_persistent = -1
+
+; Maximum number of links (persistent + non-persistent). -1 means no limit.
+ifx.max_links = -1
+
+; If on, select statements return the contents of a text blob instead of its id.
+ifx.textasvarchar = 0
+
+; If on, select statements return the contents of a byte blob instead of its id.
+ifx.byteasvarchar = 0
+
+; Trailing blanks are stripped from fixed-length char columns. May help the
+; life of Informix SE users.
+ifx.charasvarchar = 0
+
+; If on, the contents of text and byte blobs are dumped to a file instead of
+; keeping them in memory.
+ifx.blobinfile = 0
+
+; NULL's are returned as empty strings, unless this is set to 1. In that case,
+; NULL's are returned as string 'NULL'.
+ifx.nullformat = 0
+
+[Session]
+; Handler used to store/retrieve data.
+session.save_handler = files
+
+; Argument passed to save_handler. In the case of files, this is the path
+; where data files are stored.
+;
+; As of PHP 4.0.1, you can define the path as:
+;
+; session.save_path = "N;/path"
+;
+; where N is an integer. Instead of storing all the session files in
+; /path, what this will do is use subdirectories N-levels deep, and
+; store the session data in those directories. This is useful if you
+; or your OS have problems with lots of files in one directory, and is
+; a more efficient layout for servers that handle lots of sessions.
+;
+; NOTE 1: PHP will not create this directory structure automatically.
+; You can use the script in the ext/session dir for that purpose.
+; NOTE 2: See the section on garbage collection below if you choose to
+; use subdirectories for session storage
+;
+; The file storage module creates files using mode 600 by default.
+; You can change that by using
+;
+; session.save_path = "N;MODE;/path"
+;
+; where MODE is the octal representation of the mode. Note that this
+; does not overwrite the process's umask.
+session.save_path = "/tmp"
+
+; Whether to use cookies.
+session.use_cookies = 1
+
+;session.cookie_secure =
+
+; This option enables administrators to make their users invulnerable to
+; attacks which involve passing session ids in URLs; defaults to 0.
+; session.use_only_cookies = 1
+
+; Name of the session (used as cookie name).
+session.name = PHPSESSID
+
+; Initialize session on request startup.
+session.auto_start = 0
+
+; Lifetime in seconds of cookie or, if 0, until browser is restarted.
+session.cookie_lifetime = 0
+
+; The path for which the cookie is valid.
+session.cookie_path = /
+
+; The domain for which the cookie is valid.
+session.cookie_domain =
+
+; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
+session.cookie_httponly =
+
+; Handler used to serialize data. php is the standard serializer of PHP.
+session.serialize_handler = php
+
+; Define the probability that the 'garbage collection' process is started
+; on every session initialization.
+; The probability is calculated by using gc_probability/gc_divisor,
+; e.g. 1/100 means there is a 1% chance that the GC process starts
+; on each request.
+
+session.gc_probability = 1
+session.gc_divisor = 1000
+
+; After this number of seconds, stored data will be seen as 'garbage' and
+; cleaned up by the garbage collection process.
+session.gc_maxlifetime = 1440
+
+; NOTE: If you are using the subdirectory option for storing session files
+; (see session.save_path above), then garbage collection does *not*
+; happen automatically. You will need to do your own garbage
+; collection through a shell script, cron entry, or some other method.
+; For example, the following script would is the equivalent of
+; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
+; cd /path/to/sessions; find -cmin +24 | xargs rm
+
+; PHP 4.2 and less have an undocumented feature/bug that allows you to
+; to initialize a session variable in the global scope, albeit register_globals
+; is disabled. PHP 4.3 and later will warn you, if this feature is used.
+; You can disable the feature and the warning separately. At this time,
+; the warning is only displayed, if bug_compat_42 is enabled.
+
+session.bug_compat_42 = 0
+session.bug_compat_warn = 1
+
+; Check HTTP Referer to invalidate externally stored URLs containing ids.
+; HTTP_REFERER has to contain this substring for the session to be
+; considered as valid.
+session.referer_check =
+
+; How many bytes to read from the file.
+session.entropy_length = 0
+
+; Specified here to create the session id.
+session.entropy_file =
+
+;session.entropy_length = 16
+
+;session.entropy_file = /dev/urandom
+
+; Set to {nocache,private,public,} to determine HTTP caching aspects
+; or leave this empty to avoid sending anti-caching headers.
+session.cache_limiter = nocache
+
+; Document expires after n minutes.
+session.cache_expire = 180
+
+; trans sid support is disabled by default.
+; Use of trans sid may risk your users security.
+; Use this option with caution.
+; - User may send URL contains active session ID
+; to other person via. email/irc/etc.
+; - URL that contains active session ID may be stored
+; in publically accessible computer.
+; - User may access your site with the same session ID
+; always using URL stored in browser's history or bookmarks.
+session.use_trans_sid = 0
+
+; Select a hash function
+; 0: MD5 (128 bits)
+; 1: SHA-1 (160 bits)
+session.hash_function = 0
+
+; Define how many bits are stored in each character when converting
+; the binary hash data to something readable.
+;
+; 4 bits: 0-9, a-f
+; 5 bits: 0-9, a-v
+; 6 bits: 0-9, a-z, A-Z, "-", ","
+session.hash_bits_per_character = 5
+
+; The URL rewriter will look for URLs in a defined set of HTML tags.
+; form/fieldset are special; if you include them here, the rewriter will
+; add a hidden <input> field with the info which is otherwise appended
+; to URLs. If you want XHTML conformity, remove the form entry.
+; Note that all valid entries require a "=", even if no value follows.
+url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
+
+[MSSQL]
+; Allow or prevent persistent links.
+mssql.allow_persistent = On
+
+; Maximum number of persistent links. -1 means no limit.
+mssql.max_persistent = -1
+
+; Maximum number of links (persistent+non persistent). -1 means no limit.
+mssql.max_links = -1
+
+; Minimum error severity to display.
+mssql.min_error_severity = 10
+
+; Minimum message severity to display.
+mssql.min_message_severity = 10
+
+; Compatibility mode with old versions of PHP 3.0.
+mssql.compatability_mode = Off
+
+; Connect timeout
+;mssql.connect_timeout = 5
+
+; Query timeout
+;mssql.timeout = 60
+
+; Valid range 0 - 2147483647. Default = 4096.
+;mssql.textlimit = 4096
+
+; Valid range 0 - 2147483647. Default = 4096.
+;mssql.textsize = 4096
+
+; Limits the number of records in each batch. 0 = all records in one batch.
+;mssql.batchsize = 0
+
+; Specify how datetime and datetim4 columns are returned
+; On => Returns data converted to SQL server settings
+; Off => Returns values as YYYY-MM-DD hh:mm:ss
+;mssql.datetimeconvert = On
+
+; Use NT authentication when connecting to the server
+mssql.secure_connection = Off
+
+; Specify max number of processes. -1 = library default
+; msdlib defaults to 25
+; FreeTDS defaults to 4096
+;mssql.max_procs = -1
+
+; Specify client character set.
+; If empty or not set the client charset from freetds.comf is used
+; This is only used when compiled with FreeTDS
+;mssql.charset = "ISO-8859-1"
+
+[Assertion]
+; Assert(expr); active by default.
+;assert.active = On
+
+; Issue a PHP warning for each failed assertion.
+;assert.warning = On
+
+; Don't bail out by default.
+;assert.bail = Off
+
+; User-function to be called if an assertion fails.
+;assert.callback = 0
+
+; Eval the expression with current error_reporting(). Set to true if you want
+; error_reporting(0) around the eval().
+;assert.quiet_eval = 0
+
+[COM]
+; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
+;com.typelib_file =
+; allow Distributed-COM calls
+;com.allow_dcom = true
+; autoregister constants of a components typlib on com_load()
+;com.autoregister_typelib = true
+; register constants casesensitive
+;com.autoregister_casesensitive = false
+; show warnings on duplicate constant registrations
+;com.autoregister_verbose = true
+
+[mbstring]
+; language for internal character representation.
+;mbstring.language = Japanese
+
+; internal/script encoding.
+; Some encoding cannot work as internal encoding.
+; (e.g. SJIS, BIG5, ISO-2022-*)
+;mbstring.internal_encoding = EUC-JP
+
+; http input encoding.
+;mbstring.http_input = auto
+
+; http output encoding. mb_output_handler must be
+; registered as output buffer to function
+;mbstring.http_output = SJIS
+
+; enable automatic encoding translation according to
+; mbstring.internal_encoding setting. Input chars are
+; converted to internal encoding by setting this to On.
+; Note: Do _not_ use automatic encoding translation for
+; portable libs/applications.
+;mbstring.encoding_translation = Off
+
+; automatic encoding detection order.
+; auto means
+;mbstring.detect_order = auto
+
+; substitute_character used when character cannot be converted
+; one from another
+;mbstring.substitute_character = none;
+
+; overload(replace) single byte functions by mbstring functions.
+; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
+; etc. Possible values are 0,1,2,4 or combination of them.
+; For example, 7 for overload everything.
+; 0: No overload
+; 1: Overload mail() function
+; 2: Overload str*() functions
+; 4: Overload ereg*() functions
+;mbstring.func_overload = 0
+
+; enable strict encoding detection.
+;mbstring.strict_encoding = Off
+
+[FrontBase]
+;fbsql.allow_persistent = On
+;fbsql.autocommit = On
+;fbsql.show_timestamp_decimals = Off
+;fbsql.default_database =
+;fbsql.default_database_password =
+;fbsql.default_host =
+;fbsql.default_password =
+;fbsql.default_user = "_SYSTEM"
+;fbsql.generate_warnings = Off
+;fbsql.max_connections = 128
+;fbsql.max_links = 128
+;fbsql.max_persistent = -1
+;fbsql.max_results = 128
+
+[gd]
+; Tell the jpeg decode to libjpeg warnings and try to create
+; a gd image. The warning will then be displayed as notices
+; disabled by default
+;gd.jpeg_ignore_warning = 0
+
+[exif]
+; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
+; With mbstring support this will automatically be converted into the encoding
+; given by corresponding encode setting. When empty mbstring.internal_encoding
+; is used. For the decode settings you can distinguish between motorola and
+; intel byte order. A decode setting cannot be empty.
+;exif.encode_unicode = ISO-8859-15
+;exif.decode_unicode_motorola = UCS-2BE
+;exif.decode_unicode_intel = UCS-2LE
+;exif.encode_jis =
+;exif.decode_jis_motorola = JIS
+;exif.decode_jis_intel = JIS
+
+[Tidy]
+; The path to a default tidy configuration file to use when using tidy
+;tidy.default_config = /usr/local/lib/php/default.tcfg
+
+; Should tidy clean and repair output automatically?
+; WARNING: Do not use this option if you are generating non-html content
+; such as dynamic images
+tidy.clean_output = Off
+
+[soap]
+; Enables or disables WSDL caching feature.
+soap.wsdl_cache_enabled=1
+; Sets the directory name where SOAP extension will put cache files.
+soap.wsdl_cache_dir="/tmp"
+; (time to live) Sets the number of second while cached file will be used
+; instead of original one.
+soap.wsdl_cache_ttl=86400
+
+
+; available extensions
+;
+;extension=bcmath.so
+;extension=bz2.so
+;extension=calendar.so
+;extension=curl.so
+;extension=dba.so
+;extension=dbase.so
+;extension=exif.so
+;extension=ftp.so
+;extension=gd.so
+extension=gettext.so
+;extension=iconv.so
+;extension=imap.so
+;extension=json.so
+;extension=ldap.so
+;extension=mcrypt.so
+;extension=mime_magic.so
+;extension=mysql.so
+;extension=mysqli.so
+;extension=ncurses.so
+;extension=odbc.so
+;extension=openssl.so
+;extension=pdo.so
+;extension=pdo_mysql.so
+;extension=pdo_odbc.so
+;extension=pdo_pgsql.so
+;extension=pdo_sqlite.so
+;extension=pgsql.so
+;extension=posix.so
+;extension=pspell.so
+extension=session.so
+;extension=shmop.so
+;extension=snmp.so
+;extension=soap.so
+;extension=sockets.so
+;extension=sqlite.so
+;extension=sysvmsg.so
+;extension=sysvsem.so
+;extension=sysvshm.so
+;extension=tidy.so
+;extension=xmlrpc.so
+;extension=xsl.so
+;extension=zip.so
+extension=zlib.so
+
+
+; Local Variables:
+; tab-width: 4
+; End:
diff --git a/abs/core/php/php.install b/abs/core/php/php.install
new file mode 100644
index 0000000..0c7e289
--- /dev/null
+++ b/abs/core/php/php.install
@@ -0,0 +1,97 @@
+post_install() {
+ echo '
+ ==> PHP modules
+
+ PHP has been built with optional modules. To enable these modules,
+ uncomment the modules from php.ini
+
+ Some of them require extra packages to be installed:
+
+ * bz2 : bzip2
+ * curl : curl
+ * dba : gdbm
+ * gd : libpng, libjpeg, freetype2
+ * imap : pam
+ * ldap : libldap
+ * mcrypt : mcrypt, libtool
+ * mysql/mysqli : libmysqlclient
+ * odbc/pdo_odbc : unixodbc
+ * openssl : openssl
+ * pgsql/pdo_pgsql : postgresql-libs
+ * pspell : aspell
+ * snmp : net-snmp
+ * sqlite : sqlite3
+ * tidy : tidyhtml
+ * xsl : libxslt
+
+ ==> PHP-CGI and FCGI
+
+ There are several cgi relevant settings in your php.ini. Make sure to
+ adjust them according to your needs. At least you should activate the
+ cgi.fix_pathinfo directive in php.ini by uncommenting it.
+
+ ==> PHP and Apache HTTPD
+
+ To use mod_php with the Apache webserver, add this to your httpd.conf:
+
+ LoadModule php5_module modules/libphp5.so
+ [..]
+ Include conf/extra/php5_module.conf
+
+ '
+}
+
+pre_upgrade() {
+ # we moved php.ini from /etc/ to /etc/php
+ # lets save the old file before pacman deletes it.
+ # can be removed later
+ if [ -f /etc/php.ini ] && [ $(vercmp '5.2.4-2' $2) -ge 0 ];then
+ echo 'Backing up old php.ini...'
+ mv /etc/php.ini /etc/php.ini.pacsave.tmp
+ fi
+}
+
+post_upgrade() {
+ post_install
+ echo '
+ ==> Review your php.ini
+
+ Your php installation has been updated. You should review your current
+ php.ini and check any upstream changes according to the default
+ configuration which can be found at php.ini.pacnew.
+ '
+ # if we upgraded from an installation with old config layout, move the old
+ # php.ini to the right place and inform the user about the changes.
+ # can be removed later
+ if [ -f /etc/php.ini.pacsave.tmp ] && [ $(vercmp '5.2.4-2' $2) -ge 0 ]; then
+ echo 'Restoring old php.ini...'
+ mv /etc/php/php.ini /etc/php/php.ini.pacnew
+ mv /etc/php.ini.pacsave.tmp /etc/php/php.ini
+ echo 'Updating extension dir...'
+ sed -i -e 's#extension_dir = "/usr/lib/php/extensions/php/"#extension_dir = "/usr/lib/php/20060613/"#g' /etc/php/php.ini
+ echo '
+ ==> Location of php.ini has changed
+
+ A previous configuration was found at /etc/php.ini. PHP stores its
+ configuration at /etc/php/ now. Your old php.ini was moved to
+ /etc/php/php.ini. You should merge your old file with the
+ default one that can be found at /etc/php/php.ini.pacnew.
+
+ Make sure to enable the modules you need. A lot of them are shared
+ objects now and not statically built into php.
+
+ External modules store their configuration in /etc/php/conf.d/. PHP
+ scans that directory for any ini files.
+ '
+ fi
+ # be nice to [testing] users and update php.ini to fix bug #8141.
+ # can be removed later
+ if [ $(vercmp '5.2.4-3' $2) -eq 0 ]; then
+ echo 'Updating extension dir...'
+ sed -i -e 's#extension_dir = "/usr/lib/php/extensions/"#extension_dir = "/usr/lib/php/20060613/"#g' /etc/php/php.ini
+ fi
+}
+
+op=$1
+shift
+[ "$(type -t "$op")" = "function" ] && $op "$@" \ No newline at end of file
diff --git a/abs/core/pil/PKGBUILD b/abs/core/pil/PKGBUILD
new file mode 100644
index 0000000..59e9b83
--- /dev/null
+++ b/abs/core/pil/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: simo <simo@archlinux.org>
+pkgname=pil
+pkgver=1.1.6
+pkgrel=4
+pkgdesc="Python imaging library"
+arch=(i686 x86_64)
+url="http://www.pythonware.com/products/pil/index.htm"
+license=('custom:"pil"')
+depends=('python' 'libjpeg' 'freetype2')
+makedepends=('tk>=8.5.0')
+source=(http://effbot.org/downloads/Imaging-$pkgver.tar.gz)
+md5sums=('3a9b5c20ca52f0a9900512d2c7347622')
+
+build() {
+ cd $startdir/src/Imaging-$pkgver
+ python setup.py build_ext
+ python setup.py install --root=$startdir/pkg
+ mkdir -p $startdir/pkg/usr/include/python2.5/
+ cp libImaging/*.h $startdir/pkg/usr/include/python2.5/
+
+ # Install license
+ install -m644 -D $startdir/src/Imaging-$pkgver/README \
+ $startdir/pkg/usr/share/licenses/pil/README
+}
+
diff --git a/abs/core/pixman/PKGBUILD b/abs/core/pixman/PKGBUILD
new file mode 100644
index 0000000..a3fcb97
--- /dev/null
+++ b/abs/core/pixman/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 490 2008-04-20 11:35:45Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=pixman
+pkgver=0.10.0
+pkgrel=1
+pkgdesc="Pixman library"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org"
+license=()
+depends=('glibc')
+options=('!libtool')
+source=(http://xorg.freedesktop.org/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('fb23e17a8a0308e8fad6dc153753ba9a')
+
+build() {
+ cd "${startdir}/src/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR="${startdir}/pkg" install || return 1
+}
diff --git a/abs/core/pkgconfig/PKGBUILD b/abs/core/pkgconfig/PKGBUILD
new file mode 100644
index 0000000..2cecd38
--- /dev/null
+++ b/abs/core/pkgconfig/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1407 2008-05-07 22:55:37Z andyrtr $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=pkgconfig
+pkgver=0.23
+pkgrel=1
+pkgdesc="A system for managing library compile/link flags"
+arch=(i686 x86_64)
+url="http://pkgconfig.freedesktop.org/wiki/"
+license=('GPL')
+groups=('base-devel')
+depends=(glibc)
+source=(http://pkgconfig.freedesktop.org/releases/pkg-config-${pkgver}.tar.gz)
+md5sums=('d922a88782b64441d06547632fd85744')
+
+build() {
+ cd ${startdir}/src/pkg-config-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/plextor-convertX-driver/.svn/all-wcprops b/abs/core/plextor-convertX-driver/.svn/all-wcprops
new file mode 100644
index 0000000..a9a4baa
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/all-wcprops
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver
+END
+download.php?id=9719
+K 25
+svn:wc:ra_dav:version-url
+V 91
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/download.php%3Fid=9719
+END
+PKGBUILD
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/PKGBUILD
+END
+wis-go-0.9.8-2.6.17.patch
+K 25
+svn:wc:ra_dav:version-url
+V 94
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/wis-go-0.9.8-2.6.17.patch
+END
+convertX.install
+K 25
+svn:wc:ra_dav:version-url
+V 85
+/svn/MythVantage/!svn/ver/3/trunk/multimedia/plextor-convertX-driver/convertX.install
+END
diff --git a/abs/core/plextor-convertX-driver/.svn/entries b/abs/core/plextor-convertX-driver/.svn/entries
new file mode 100644
index 0000000..24668fc
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/entries
@@ -0,0 +1,95 @@
+8
+
+dir
+26
+http://www.mythvantage.com/svn/MythVantage/trunk/multimedia/plextor-convertX-driver
+http://www.mythvantage.com/svn/MythVantage
+
+
+
+2008-08-11T22:07:32.420645Z
+3
+jams
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+aa4607db-271d-489d-aa74-f9b36e0b8801
+
+download.php?id=9719
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+046fc285320714abb64ca8d699d5daad
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+PKGBUILD
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+1a918566d44b59443786bfc0dc425bf8
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+install
+dir
+
+lib
+dir
+
+wis-go-0.9.8-2.6.17.patch
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+83d3108be840a45871c195a25c4de4ca
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
+usr
+dir
+
+etc
+dir
+
+slack
+dir
+
+convertX.install
+file
+
+
+
+
+2008-08-23T20:50:13.000000Z
+3f2eb8d111d0b1b43b4c53852610f4ec
+2008-08-11T22:07:32.420645Z
+3
+jams
+has-props
+
diff --git a/abs/core/plextor-convertX-driver/.svn/format b/abs/core/plextor-convertX-driver/.svn/format
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/format
@@ -0,0 +1 @@
+8
diff --git a/abs/core/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base b/abs/core/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/prop-base/PKGBUILD.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base b/abs/core/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/prop-base/convertX.install.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base b/abs/core/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/prop-base/download.php?id=9719.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base b/abs/core/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/prop-base/wis-go-0.9.8-2.6.17.patch.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/abs/core/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base b/abs/core/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base
new file mode 100644
index 0000000..1711062
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/text-base/PKGBUILD.svn-base
@@ -0,0 +1,31 @@
+
+
+pkgname=plextor-convertX-driver
+pkgver=0.9.8
+pkgrel=3
+_kernver=2.6.17-STB
+pkgdesc="ivtv - Drivers for many types of PVR cards"
+arch=(i686 x86_64)
+url="http://ivtvdriver.org"
+install="convertX.install"
+source=("http://oss.wischip.com/wis-go7007-linux-$pkgver.tar.bz2" "wis-go-0.9.8-2.6.17.patch")
+depends=(gcc 'udev>=070' 'fxload')
+
+
+build() {
+
+ # SET UP
+ patch -p0 < wis-go-0.9.8-2.6.17.patch
+ cd $startdir/src/wis-go7007-linux-0.9.8|| return 1
+
+ # build
+ make clean || return 1
+ make || return 1
+ mkdir -p $startdir/pkg/usr/src/linux-$_kernver/include/linux
+ mkdir -p $startdir/pkg/etc/udev/rules.d
+ mkdir -p $startdir/pkg/usr/bin
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+ install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
+ install -m755 apps/modet $startdir/pkg/usr/bin/modet
+}
diff --git a/abs/core/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base b/abs/core/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base
new file mode 100644
index 0000000..8dfd0b7
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/text-base/convertX.install.svn-base
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base b/abs/core/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base
new file mode 100644
index 0000000..516608c
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/text-base/download.php?id=9719.svn-base
@@ -0,0 +1,460 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+
+<head>
+<title>LinuxPackages: Download Package</title>
+<meta name="Generator" content="PHP and good ole hand coded html">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="Author" content="{TG,robalo} at linuxpackages.net, {pimo,trotter} at opensys.ro">
+<meta name="Description" content="Slackware resources to help install and configure the Linux slackware distribution, Email list, Discussion Board, Howtos, Contributed packages, and much more">
+<meta name="Keywords" content="Linux Packages, Slackware, Linux, Help, Install, HOWTO, Sendmail, Slackbuilds, Software, News, ISDN, Security, Apache, Vhosting, Links, DNS, Sendmail, packages, programs">
+<link rel="alternate" type="application/rss+xml" title="Latest Packages RSS"
+ href="http://www.linuxpackages.net/backend/linuxpackages.rdf" />
+
+<link rel="stylesheet" href="lpstyle.css">
+<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
+ <!--
+ function open_window(url) {
+ var NEW_WIN = null;
+ NEW_WIN = window.open ("", "RecordViewer", "toolbar=no,width="+600+",height="+400+",directories=no,status=no,scrollbars=yes,resize=no,menubar=no");
+ NEW_WIN.location.href = url;
+ }
+ //-->
+ </SCRIPT>
+
+</head>
+<body bgcolor="#006699" text="#000000" link="#4b6d96" vlink="#4b6d96" alink="" marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0">
+<!-- <body bgcolor="" text="" link="" vlink="" alink="" marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0"> -->
+
+<table width="100%" cellpadding="10" cellspacing="0" border="0">
+<tr bgcolor="#FF9966"><form method="get" action="http://www.linuxpackages.net/search_view.php">
+<input type="hidden" name="by" value="name">
+<td width="265" align=right>
+<img src="/images/newlogo.gif" alt="LinuxPackages.net" width="265" height="43" border="0"></a><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="265" height="5" border="0"><br>
+&nbsp;<font color="#000000">SearchPkg:</font>
+<input name="name" type="text" size="12" value="">
+<select name="ver">
+<option value="11.0" >v11.0</option>
+<option value="10.2" >v10.2</option>
+<option value="10.1" >v10.1</option>
+<option value="10.0" >v10.0</option>
+<option value="9.1" >v9.1</option>
+<option value="9.0" >v9.0</option>
+<option value="8.1" >v8.1</option>
+<option value="8.0" >v8.0</option>
+<option value="" >any</option>
+</select>
+<input type="submit" value="Go">
+</td></form>
+<td width="468">
+<script language='JavaScript' type='text/javascript'>
+<!--
+ if (!document.phpAds_used) document.phpAds_used = ',';
+ phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
+
+ document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
+ document.write ("http://www.linuxpackages.net/adserv/adjs.php?n=" + phpAds_random);
+ document.write ("&amp;what=zone:5");
+ document.write ("&amp;exclude=" + document.phpAds_used);
+ if (document.referer)
+ document.write ("&amp;referer=" + escape(document.referer));
+ document.write ("'><" + "/script>");
+//-->
+</script><noscript><a href='http://www.linuxpackages.net/adserv/adclick.php?n=a1cec3e8'
+target='_blank'><img src='http://www.linuxpackages.net/adserv/adview.php?what=zone:5&amp;n=a1cec3e8'
+border='0' alt=''></a></noscript>
+<br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="468" height="1" border="0"><br>
+</td><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="60" border="0"><br>
+</td></tr>
+</table>
+
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#ffffff"><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="1" border="0"><br>
+</td></tr>
+<tr bgcolor="#004263"><td align="center">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="2" border="0"><br>
+<font color="#FF9966">
+<a href="http://www.linuxpackages.net/catalog" class="barlink">LP Store</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp<a href="http://www.linuxpackages.net/" class="barlink">Home</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/about.php" class="barlink">About</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/forum" class="barlink">Forums</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/site-links" class="barlink">Links</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linuxpackages.net/packages.php" class="barlink">Packages</a>
+</font><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+</td></tr>
+</table>
+
+<img src="http://www.linuxpackages.net/images/dot.gif" width="760" height="2" border="0"><br>
+<table width="100%" cellpadding="0" cellspacing="10" border="0"><tr>
+<td width="25%" valign="top">
+<!-- start left column -->
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+Information
+</font></b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<font color="#000000">
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/catalog">LP Store</a><br>
+
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/about.php">About this Site</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/packages.php">Packages</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/forum">Slackware</a><small><sup>&reg;</sup></small><a href="http://www.linuxpackages.net/forum"> Forums</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/faq">Slackware FAQ</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php">Slackware Documents </a><small>(<i>Updated</i>)</small><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://slackart.linuxpackages.net">Slackware Art </a><br>
+
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=package&title=Package+Howto">Building Packages</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=buildtools&title=Package+Tools">Package Tools</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=perfect-package&title=Perfect+Package">The Perfect package</a><small>(<i>Updated</i>)</small><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/howto.php?page=contrib&title=Contribute">Submitting a Package</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/changelog.php">Slackware Changelog</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www2.linuxpackages.net/packages/SlackBuilds/">Build Script Archive</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/topcontrib.php">Top Contributors</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/mirrors.php">Mirror Status/Info</a><br>
+</font>
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<span class="module">Top 10 Downloads</span>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#dfdfdf"><td>
+<b>Packages</b><br>
+</td><td align=right>
+<b>Hits</b><br>
+</td></tr>
+<tr bgcolor="#FFFFFF"><td width="100%" colspan=2>
+<table width="100%" border=0 cellspacing=2 cellpadding=0>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7951">OpenOffice.org 2.0.3</a><br>
+</td><td align=right>
+<b>18540</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=760">Wine 0.9.7</a><br>
+</td><td align=right>
+<b>15526</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=5982">xmmsskins 1.0</a><br>
+</td><td align=right>
+<b>13202</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7608">K3b 0.12.17</a><br>
+</td><td align=right>
+<b>11383</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8096">openoffice.org 2.0ptBR</a><br>
+</td><td align=right>
+<b>10492</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8352">libdvdcss 1.2.9</a><br>
+</td><td align=right>
+<b>8839</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7419">slapt-get 0.9.11e</a><br>
+</td><td align=right>
+<b>5652</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7528">Freerock-Gnome 2.12.1</a><br>
+</td><td align=right>
+<b>4978</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=8105">Frozen-Bubble 1.0.0</a><br>
+</td><td align=right>
+<b>3906</b>
+</td></tr>
+<tr valign=top><td>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.linuxpackages.net/pkg_details.php?id=7926">k3b 0.12.16</a><br>
+</td><td align=right>
+<b>3630</b>
+</td></tr>
+</table>
+
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+Email List
+</font></b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%" align=center>
+Subscribe to LinuxPackages Package annoucements to get updated when new packages or updates are posted.<br>
+<a href=/mailman/listinfo/pkg-annc>Click here to subscribe</a><br><br>
+</td></tr></table>
+</td></tr></table>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<span class="module">Quick Links</span>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.slackware.com" target=_blank>Slackware.com</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://muse.linuxmafia.org" target=_blank>GShield Firewall</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.satlug.org" target=_blank>SATLUG</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://swaret.sourceforge.net/index.php" target=_blank>Swaret</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.abnormalpenguin.com/slackware-mirrors.php" target=_blank>Slack Mirrors List</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://software.jaos.org/" target=_blank>Slapt-Get</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.darklinux.net/slackupdate/" target=_blank>SlackUpdate</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://www.mutagenix.org/" target=_blank>Mutagenix</a><br>
+<img src="/images/bullet.gif" border=0 align=middle> <a href="http://gsb.freerock.org" target=_blank>FreeRock Gnome</a><br>
+</td></tr></table>
+</td></tr></table>
+<!--//end left column//-->
+</td>
+<td width="75%" valign="top">
+<!-- start middle column -->
+
+<!--table header-->
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr><td bgcolor="#FF9966">
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#006699"><td width="100%" align="center">
+<b><font color="#ffffff">
+You are requesting file: wisgo7007sb-0.9.8-i486-1bif.tgz<br>
+Please select a mirror</font>
+</b>
+</td><td width="5">
+<img src="http://www.linuxpackages.net/images/corner.gif" width="5" height="19" border="0"><br>
+</td></tr></table>
+</td></tr></table>
+<!--//table header//-->
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="3" border="0"><br>
+
+<table width="100%" cellpadding="1" cellspacing="0" border="0">
+<tr bgcolor="#000000"><td>
+<table width="100%" cellpadding="5" cellspacing="0" border="0">
+<tr bgcolor="#FFFFFF"><td width="100%">
+<table align="center" width="90%" bgcolor="#ffffff" cellpadding="0"
+cellspacing="0" border="0">
+<tbody>
+<tr>
+<td align="center" colspan="2">
+<table width="100%" cellpadding="1" cellspacing="1" border="0">
+<tbody>
+<tr>
+<th>
+</th>
+<th>Host<br></th>
+<th>Location<br>
+</th>
+<th>Continent<br>
+</th>
+<th>Download<br>
+</th>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.rol.ru/ target=_blank><img alt=Rol border="0"
+src=images/rol-logo-sm.gif width="100" height="41"></a></td>
+<td align="center">Rol</td>
+<td align="center">Moscow</td>
+<td align="center">Russia</td>
+<td align="center">
+<a href=http://slackware.rol.ru/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.reco-systems.de target=_blank><img alt=ReCo-Systems border="0"
+src=/images/logo_small.png width="100" height="41"></a></td>
+<td align="center">ReCo-Systems</td>
+<td align="center">Hannover Germany</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.reco-systems.de//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.reco-systems.de//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.slackware.hu target=_blank><img alt=Szombathely Linux Association border="0"
+src=/images/szle.jpg width="100" height="41"></a></td>
+<td align="center">Szombathely Linux Association</td>
+<td align="center">Hungary</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=ftp://ftp.slackware.hu/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.nymphomatic.org target=_blank><img alt=IEEE Student Branch border="0"
+src=images/evo.gif width="100" height="41"></a></td>
+<td align="center">IEEE Student Branch</td>
+<td align="center">Croatia</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://www.nymphomatic.org/mirror/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.nymphomatic.org/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.cgu.edu.tw target=_blank><img alt=Chang-Gung University border="0"
+src=images/cgu.png width="100" height="41"></a></td>
+<td align="center">Chang-Gung University</td>
+<td align="center">Taiwan</td>
+<td align="center">Asia</td>
+<td align="center">
+<a href=http://linuxpackages.cgucccc.org/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.software-mirror.com target=_blank><img alt=Software Mirror border="0"
+src=/images/sfmirror.gif width="100" height="41"></a></td>
+<td align="center">Software Mirror</td>
+<td align="center">Colorado</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://www.software-mirror.com/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.inode.at target=_blank><img alt=Inode.at border="0"
+src=/images/inode.jpg width="100" height="41"></a></td>
+<td align="center">Inode.at</td>
+<td align="center">Austria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.inode.at/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.inode.at/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.nyi.net target=_blank><img alt=NYI New York Internet border="0"
+src=/images/nyilogo.jpg width="100" height="41"></a></td>
+<td align="center">NYI New York Internet</td>
+<td align="center">New York USA</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://www2.linuxpackages.net/packages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp3.linuxpackages.net/pub/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.scarlet.be target=_blank><img alt=Scarlet.be border="0"
+src=/images/scarlet_lp.gif width="100" height="41"></a></td>
+<td align="center">Scarlet.be</td>
+<td align="center">Belgium</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://ftp.scarlet.be/pub/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.scarlet.be/pub/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.opensys.ro target=_blank><img alt=Open Systems border="0"
+src=/images/logoopensys.jpg width="100" height="41"></a></td>
+<td align="center">Open Systems</td>
+<td align="center">Romania</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://opensys.linuxpackages.net/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://opensys.linuxpackages.net/pub/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.telecoms.bg target=_blank><img alt=Telecoms border="0"
+src=images/evo.gif width="100" height="41"></a></td>
+<td align="center">Telecoms</td>
+<td align="center">Varna Bulgaria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://linuxpackages.telecoms.bg/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://linuxpackages.telecoms.bg/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.naist.jp/ target=_blank><img alt=Naist border="0"
+src=/images/naist.png width="100" height="41"></a></td>
+<td align="center">Naist</td>
+<td align="center">Japan</td>
+<td align="center">Asia</td>
+<td align="center">
+<a href=http://ftp.naist.jp/pub/Linux/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://ftp.nara.wide.ad.jp/pub/Linux/linuxpackages/Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://mirrors.unixsol.org/ target=_blank><img alt=Unixsol border="0"
+src=/images/unixsol.png width="100" height="41"></a></td>
+<td align="center">Unixsol</td>
+<td align="center">Sofia Bulgaria</td>
+<td align="center">Europe</td>
+<td align="center">
+<a href=http://mirrors.unixsol.org/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://mirrors.unixsol.org/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+<tr bgcolor="#dddddd">
+<td align="center"><a href=http://www.cs.utah.edu/ target=_blank><img alt=University of Utah border="0"
+src=images/UUSC.png width="100" height="41"></a></td>
+<td align="center">University of Utah</td>
+<td align="center">Utah</td>
+<td align="center">USA</td>
+<td align="center">
+<a href=http://linuxpackages.cs.utah.edu//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>HTTP</a>&nbsp;&nbsp; <a href=ftp://mirror.cs.utah.edu/pub/linuxpackages//Slackware-11.0/Console/GO7007-Linux-Driver/wisgo7007sb-0.9.8-i486-1bif.tgz>FTP</a> </td>
+</tr>
+</tbody>
+</table>
+</td>
+</tr>
+</tbody>
+</table>
+<br><center>Not all mirrors may be updated right away with new packages.</center>
+</td></tr></table>
+</td></tr></table>
+<!--//end middle column//-->
+</td>
+</tr></table>
+
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr bgcolor="#ffffff"><td width="100%">
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="1" border="0"><br>
+</td></tr>
+<tr bgcolor="#FF9966"><td align=center>
+<br>Copyright &copy;1997-2004 LinuxPackages Network. All rights reserved.<br>
+Slackware is a registered trademark of Patrick Volkerding and Slackware Linux, Inc.<br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="5" border="0"><br>
+<a href="http://www.linuxpackages.net/advertise.php">Advertising</a> - <a href="http://www.linuxpackages.net/catalog/privacy.php">Privacy Statement</a> - Terms of Use - Build: 2002071201<br>
+<a href=http://www.nyi.net>FTP Hosting provided by The New York Internet Company</a><br>
+<img src="http://www.linuxpackages.net/images/dot.gif" width="1" height="10" border="0"><br>
+</td></tr>
+</table>
+</body>
+</html>
diff --git a/abs/core/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base b/abs/core/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base
new file mode 100644
index 0000000..694a2f6
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/.svn/text-base/wis-go-0.9.8-2.6.17.patch.svn-base
@@ -0,0 +1,76 @@
+diff -ur wis-go7007-linux-0.9.8/kernel/go7007-usb.c wis-go7007-linux-0.9.8-new/kernel/go7007-usb.c
+--- wis-go7007-linux-0.9.8/kernel/go7007-usb.c 2006-04-02 00:57:04.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/go7007-usb.c 2006-04-03 12:58:44.000000000 +0200
+@@ -27,7 +27,7 @@
+ #include <linux/usb.h>
+ #include <linux/i2c.h>
+ #include <asm/byteorder.h>
+-#include <media/audiochip.h>
++#include <media/tvaudio.h>
+
+ #include "go7007-priv.h"
+ #include "wis-i2c.h"
+@@ -225,17 +225,17 @@
+ .inputs = {
+ {
+ .video_input = 1,
+- .audio_input = AUDIO_EXTERN,
++ .audio_input = TVAUDIO_INPUT_EXTERN,
+ .name = "Composite",
+ },
+ {
+ .video_input = 8,
+- .audio_input = AUDIO_EXTERN,
++ .audio_input = TVAUDIO_INPUT_EXTERN,
+ .name = "S-Video",
+ },
+ {
+ .video_input = 3,
+- .audio_input = AUDIO_TUNER,
++ .audio_input = TVAUDIO_INPUT_TUNER,
+ .name = "Tuner",
+ },
+ },
+diff -ur wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c wis-go7007-linux-0.9.8-new/kernel/go7007-v4l2.c
+--- wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c 2006-04-02 01:22:03.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/go7007-v4l2.c 2006-04-03 12:55:52.000000000 +0200
+@@ -939,7 +939,7 @@
+ if (go->i2c_adapter_online) {
+ i2c_clients_command(&go->i2c_adapter, DECODER_SET_INPUT,
+ &go->board_info->inputs[*input].video_input);
+- i2c_clients_command(&go->i2c_adapter, AUDC_SET_INPUT,
++ i2c_clients_command(&go->i2c_adapter, VIDIOC_S_AUDIO,
+ &go->board_info->inputs[*input].audio_input);
+ }
+ return 0;
+diff -ur wis-go7007-linux-0.9.8/kernel/wis-uda1342.c wis-go7007-linux-0.9.8-new/kernel/wis-uda1342.c
+--- wis-go7007-linux-0.9.8/kernel/wis-uda1342.c 2006-04-02 00:37:32.000000000 +0200
++++ wis-go7007-linux-0.9.8-new/kernel/wis-uda1342.c 2006-04-03 13:07:04.000000000 +0200
+@@ -20,7 +20,7 @@
+ #include <linux/version.h>
+ #include <linux/i2c.h>
+ #include <linux/videodev.h>
+-#include <media/audiochip.h>
++#include <media/tvaudio.h>
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+ #include <media/v4l2-common.h>
+ #endif
+@@ -38,15 +38,15 @@
+ unsigned int cmd, void *arg)
+ {
+ switch (cmd) {
+- case AUDC_SET_INPUT:
++ case VIDIOC_S_AUDIO:
+ {
+ int *inp = arg;
+
+ switch (*inp) {
+- case AUDIO_TUNER:
++ case TVAUDIO_INPUT_TUNER:
+ write_reg(client, 0x00, 0x1441); /* select input 2 */
+ break;
+- case AUDIO_EXTERN:
++ case TVAUDIO_INPUT_EXTERN:
+ write_reg(client, 0x00, 0x1241); /* select input 1 */
+ break;
+ default:
diff --git a/abs/core/plextor-convertX-driver/PKGBUILD b/abs/core/plextor-convertX-driver/PKGBUILD
new file mode 100755
index 0000000..102d539
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/PKGBUILD
@@ -0,0 +1,30 @@
+
+
+pkgname=plextor-convertX-driver
+pkgver=0.9.8
+pkgrel=2
+_kernver=2.6.26-ARCH
+pkgdesc="Drivers for Plextor tuners"
+arch=(i686 x86_64)
+url="http://nikosapi.org/software/WIS_Go7007"
+install="convertX.install"
+source=("http://nikosapi.org/software/WIS_Go7007/wis-go7007-linux-0.9.8-2.tar.bz2" 'wis-go7007-2.6.26-nopage.diff')
+depends=('udev>=070' 'fxload')
+makedepends=('gcc')
+
+build() {
+
+ # SET UP
+ cd $startdir/src/wis-go7007-linux-0.9.8-2 || return 1
+ patch -Np1 -i ../wis-go7007-2.6.26-nopage.diff || return 1
+ # build
+ make clean || return 1
+ make || return 1
+ mkdir -p $startdir/pkg/usr/src/linux-$_kernver/include/linux
+ mkdir -p $startdir/pkg/etc/udev/rules.d
+ mkdir -p $startdir/pkg/usr/bin
+ # install
+ make DESTDIR=$startdir/pkg install || return 1
+ install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
+ install -m755 apps/modet $startdir/pkg/usr/bin/modet
+}
diff --git a/abs/core/plextor-convertX-driver/convertX.install b/abs/core/plextor-convertX-driver/convertX.install
new file mode 100755
index 0000000..8dfd0b7
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/convertX.install
@@ -0,0 +1,31 @@
+pre_install() {
+ /bin/true
+}
+
+post_install() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.17-STB
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff b/abs/core/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff
new file mode 100644
index 0000000..2fd1cca
--- /dev/null
+++ b/abs/core/plextor-convertX-driver/wis-go7007-2.6.26-nopage.diff
@@ -0,0 +1,26 @@
+diff -urN wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c
+--- wis-go7007-linux-0.9.8.orig/kernel/go7007-v4l2.c 2007-05-09 13:56:07.000000000 -0400
++++ wis-go7007-linux-0.9.8/kernel/go7007-v4l2.c 2008-08-03 16:01:35.000000000 -0400
+@@ -1375,6 +1375,7 @@
+ }
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ /* This is really only going to ever be called when we
+ * do get_user_pages() in VIDIOC_QBUF */
+ static struct page *go7007_vm_nopage(struct vm_area_struct *vma,
+@@ -1392,11 +1393,14 @@
+ *type = VM_FAULT_MINOR;
+ return page;
+ }
++#endif
+
+ static struct vm_operations_struct go7007_vm_ops = {
+ .open = go7007_vm_open,
+ .close = go7007_vm_close,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ .nopage = go7007_vm_nopage,
++#endif
+ };
+
+ static int go7007_mmap(struct file *file, struct vm_area_struct *vma)
diff --git a/abs/core/pm-utils/11netcfg b/abs/core/pm-utils/11netcfg
new file mode 100644
index 0000000..1b4d05e
--- /dev/null
+++ b/abs/core/pm-utils/11netcfg
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+. /usr/lib/pm-utils/functions
+
+suspend_netcfg() {
+ netcfg2 all-suspend
+}
+
+resume_netcfg() {
+ netcfg2 all-resume
+}
+
+if [ -x /usr/bin/netcfg2 ]; then
+ case "$1" in
+ hibernate|suspend)
+ suspend_netcfg
+ ;;
+ thaw|resume)
+ resume_netcfg
+ ;;
+ *)
+ ;;
+ esac
+fi
+
+exit $?
diff --git a/abs/core/pm-utils/PKGBUILD b/abs/core/pm-utils/PKGBUILD
new file mode 100644
index 0000000..0ca060c
--- /dev/null
+++ b/abs/core/pm-utils/PKGBUILD
@@ -0,0 +1,29 @@
+#$Id: PKGBUILD 7546 2008-08-02 21:35:07Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=pm-utils
+pkgver=1.1.2.4
+pkgrel=1
+pkgdesc="Utilities and scripts for power management"
+arch=('i686' 'x86_64')
+url="http://pm-utils.freedesktop.org"
+license=('GPL')
+depends=('glibc' 'vbetool' 'procps')
+makedepends=('xmlto')
+install=pm-utils.install
+source=(http://pm-utils.freedesktop.org/releases/${pkgname}-${pkgver}.tar.gz
+ service.patch
+ 11netcfg)
+md5sums=('5aa6d338fb8172f1826a1b08ae601a42'
+ '3e170a6c7ae7d9110f95bab54235c089'
+ '9839687c8787d99fd4ff36aa3238c27b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np0 -i ${startdir}/src/service.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ #Install additional hooks
+ install -m755 ${startdir}/src/11netcfg ${startdir}/pkg/usr/lib/pm-utils/sleep.d/11netcfg || return 1
+}
diff --git a/abs/core/pm-utils/pm-utils.install b/abs/core/pm-utils/pm-utils.install
new file mode 100644
index 0000000..5e8232d
--- /dev/null
+++ b/abs/core/pm-utils/pm-utils.install
@@ -0,0 +1,15 @@
+# arg 1: the new package version
+post_install() {
+ cat << _EOF
+
+Powersave has been deprecated as suspend/resume framework and has been replaced
+by pm-utils. Pm-utils provides everything you need for suspend/resume, but does
+not load your cpufreq modules like powersaved does. You have to load these
+modules by hand if you want to use them.
+
+_EOF
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/pm-utils/service.patch b/abs/core/pm-utils/service.patch
new file mode 100644
index 0000000..422b3f5
--- /dev/null
+++ b/abs/core/pm-utils/service.patch
@@ -0,0 +1,15 @@
+--- pm/functions.in~ 2008-04-10 17:39:48.000000000 +0000
++++ pm/functions.in 2008-04-10 17:39:58.000000000 +0000
+@@ -138,10 +138,10 @@
+ if ! command_exists service; then
+ service()
+ {
+- if [ -x "/etc/init.d/$1" ]; then
++ if [ -x "/etc/rc.d/$1" ]; then
+ svc="$1"
+ shift
+- "/etc/init.d/$svc" "$@"
++ "/etc/rc.d/$svc" "$@"
+ else
+ log "$1" $": unrecognized service" 1>&2
+ return 1
diff --git a/abs/core/popt/PKGBUILD b/abs/core/popt/PKGBUILD
new file mode 100644
index 0000000..a8cdec7
--- /dev/null
+++ b/abs/core/popt/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+
+pkgname=popt
+pkgver=1.10.6
+pkgrel=12
+_rpmver=4.4.6
+pkgdesc="A commandline option parser"
+arch=(i686 x86_64)
+url="http://rpm.net.in/mirror/rpm-4.4.x/"
+license=('GPL' 'MIT')
+groups=('base')
+depends=('glibc')
+options=('!libtool')
+source=(http://wraptastic.org/pub/rpm-4.4.x/rpm-${_rpmver}.tar.gz)
+md5sums=('baa6f371446c65b4080d1cd1f194a7ae')
+
+build() {
+ cd $startdir/src/rpm-${_rpmver}/popt
+ if [ "$CARCH" = "x86_64" ]; then
+ sed -i -e "s/@MARK64@//" Makefile.am
+ sed -i -e "s/@MARK64@//" Makefile.in
+ fi
+
+ # fix from BLFS
+ sed -i -e "/*origOptString ==/c 0)" popt.c
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/ppp/PKGBUILD b/abs/core/ppp/PKGBUILD
new file mode 100644
index 0000000..24f40a7
--- /dev/null
+++ b/abs/core/ppp/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=ppp
+pkgver=2.4.4
+pkgrel=15
+pkgdesc="A daemon which implements the PPP protocol for dial-up networking"
+arch=(i686 x86_64)
+url="http://www.samba.org/ppp/"
+license=('custom:GPL/BSD')
+groups=('base')
+depends=('glibc' 'libpcap>=0.9.8')
+backup=(etc/ppp/{chap-secrets,pap-secrets,options,ip-up,ip-down})
+source=(ftp://ftp.samba.org/pub/ppp/ppp-$pkgver.tar.gz \
+ options pon poff ppp plog pon.1 ip-up ip-down)
+md5sums=('183800762e266132218b204dfb428d29' '7a9259a8f038073eeea7e4552ff1849f'\
+ '48c024f73a80c8b69c4def22f86902cc' '2d811f8470ccdea3b8c4505a438483e9'\
+ '7561c73b557292d5ba1a9c5dbd270fde' '86cdaf133f7a79fb464f02d83afc7734'\
+ '44cc662ba9aa61dd9add3ddd4c5ded57' 'fac0c773490371ea673f4be0977a230f'\
+ 'a88b40b1bf91eb5cca3762b7195e4fe2')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ # fix CFLAGS
+ sed -i "s:-O2 -pipe -Wall -g:${CFLAGS}:" pppd/Makefile.linux
+ sed -i "s:-g -O2:${CFLAGS}:" pppd/plugins/Makefile.linux
+ sed -i "s:-O2:${CFLAGS}:" pppstats/Makefile.linux
+ sed -i "s:-O2 -g -pipe:${CFLAGS}:" chat/Makefile.linux
+ sed -i "s:-O:${CFLAGS}:" pppdump/Makefile.linux
+
+ # enable active filter
+ sed -i "s:^#FILTER=y:FILTER=y:" pppd/Makefile.linux
+
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg/usr install
+ install -D -m644 $startdir/src/options $startdir/pkg/etc/ppp/options
+ install -D -m755 $startdir/src/ip-up $startdir/pkg/etc/ppp/ip-up
+ install -D -m755 $startdir/src/ip-down $startdir/pkg/etc/ppp/ip-down
+ install -D -m755 $startdir/src/pon $startdir/pkg/usr/bin/pon
+ install -D -m755 $startdir/src/poff $startdir/pkg/usr/bin/poff
+ install -D -m755 $startdir/src/plog $startdir/pkg/usr/sbin/plog
+ install -D -m600 etc.ppp/pap-secrets $startdir/pkg/etc/ppp/pap-secrets
+ install -D -m600 etc.ppp/chap-secrets $startdir/pkg/etc/ppp/chap-secrets
+ install -D -m755 $startdir/src/ppp $startdir/pkg/etc/rc.d/ppp
+ install -D -m644 $startdir/src/pon.1 $startdir/pkg/usr/man/man1/pon.1
+ mkdir -p $startdir/pkg/etc/ppp/peers
+}
diff --git a/abs/core/ppp/ip-down b/abs/core/ppp/ip-down
new file mode 100644
index 0000000..3a88c49
--- /dev/null
+++ b/abs/core/ppp/ip-down
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+# This script is run by pppd after the connection has ended.
+#
diff --git a/abs/core/ppp/ip-up b/abs/core/ppp/ip-up
new file mode 100644
index 0000000..57e09c0
--- /dev/null
+++ b/abs/core/ppp/ip-up
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+# This script is run by pppd when there's a successful ppp connection.
+#
diff --git a/abs/core/ppp/options b/abs/core/ppp/options
new file mode 100644
index 0000000..6369184
--- /dev/null
+++ b/abs/core/ppp/options
@@ -0,0 +1,352 @@
+# /etc/ppp/options
+#
+# Originally created by Jim Knoble <jmknoble@mercury.interpath.net>
+# Modified for Debian by alvar Bray <alvar@meiko.co.uk>
+# Modified for PPP Server setup by Christoph Lameter <clameter@debian.org>
+# Modified for ArchLinux by Manolis Tzanidakis <manolis@archlinux.org>
+#
+# To quickly see what options are active in this file, use this command:
+# egrep -v '#|^ *$' /etc/ppp/options
+
+# Specify which DNS Servers the incoming Win95 or WinNT Connection should use
+# Two Servers can be remotely configured
+# ms-dns 192.168.1.1
+# ms-dns 192.168.1.2
+
+# Specify which WINS Servers the incoming connection Win95 or WinNT should use
+# ms-wins 192.168.1.50
+# ms-wins 192.168.1.51
+
+# Run the executable or shell command specified after pppd has
+# terminated the link. This script could, for example, issue commands
+# to the modem to cause it to hang up if hardware modem control signals
+# were not available.
+#disconnect "chat -- \d+++\d\c OK ath0 OK"
+
+# async character map -- 32-bit hex; each bit is a character
+# that needs to be escaped for pppd to receive it. 0x00000001
+# represents '\x01', and 0x80000000 represents '\x1f'.
+asyncmap 0
+
+# Require the peer to authenticate itself before allowing network
+# packets to be sent or received.
+# Please do not disable this setting. It is expected to be standard in
+# future releases of pppd. Use the call option (see manpage) to disable
+# authentication for specific peers.
+auth
+
+# Use hardware flow control (i.e. RTS/CTS) to control the flow of data
+# on the serial port.
+crtscts
+
+# Use software flow control (i.e. XON/XOFF) to control the flow of data
+# on the serial port.
+#xonxoff
+
+# Specifies that certain characters should be escaped on transmission
+# (regardless of whether the peer requests them to be escaped with its
+# async control character map). The characters to be escaped are
+# specified as a list of hex numbers separated by commas. Note that
+# almost any character can be specified for the escape option, unlike
+# the asyncmap option which only allows control characters to be
+# specified. The characters which may not be escaped are those with hex
+# values 0x20 - 0x3f or 0x5e.
+#escape 11,13,ff
+
+# Don't use the modem control lines.
+#local
+
+# Specifies that pppd should use a UUCP-style lock on the serial device
+# to ensure exclusive access to the device.
+lock
+
+# Don't show the passwords when logging the contents of PAP packets.
+# This is the default.
+hide-password
+
+# When logging the contents of PAP packets, this option causes pppd to
+# show the password string in the log message.
+#show-password
+
+# Use the modem control lines. On Ultrix, this option implies hardware
+# flow control, as for the crtscts option. (This option is not fully
+# implemented.)
+modem
+
+# Set the MRU [Maximum Receive Unit] value to <n> for negotiation. pppd
+# will ask the peer to send packets of no more than <n> bytes. The
+# minimum MRU value is 128. The default MRU value is 1500. A value of
+# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
+# bytes of data).
+#mru 542
+
+# Set the interface netmask to <n>, a 32 bit netmask in "decimal dot"
+# notation (e.g. 255.255.255.0).
+#netmask 255.255.255.0
+
+# Disables the default behaviour when no local IP address is specified,
+# which is to determine (if possible) the local IP address from the
+# hostname. With this option, the peer will have to supply the local IP
+# address during IPCP negotiation (unless it specified explicitly on the
+# command line or in an options file).
+#noipdefault
+
+# Enables the "passive" option in the LCP. With this option, pppd will
+# attempt to initiate a connection; if no reply is received from the
+# peer, pppd will then just wait passively for a valid LCP packet from
+# the peer (instead of exiting, as it does without this option).
+#passive
+
+# With this option, pppd will not transmit LCP packets to initiate a
+# connection until a valid LCP packet is received from the peer (as for
+# the "passive" option with old versions of pppd).
+#silent
+
+# Don't request or allow negotiation of any options for LCP and IPCP
+# (use default values).
+#-all
+
+# Disable Address/Control compression negotiation (use default, i.e.
+# address/control field disabled).
+#-ac
+
+# Disable asyncmap negotiation (use the default asyncmap, i.e. escape
+# all control characters).
+#-am
+
+# Don't fork to become a background process (otherwise pppd will do so
+# if a serial device is specified).
+#-detach
+
+# Disable IP address negotiation (with this option, the remote IP
+# address must be specified with an option on the command line or in
+# an options file).
+#-ip
+
+# Disable IPCP negotiation and IP communication. This option should
+# only be required if the peer is buggy and gets confused by requests
+# from pppd for IPCP negotiation.
+#noip
+
+# Disable magic number negotiation. With this option, pppd cannot
+# detect a looped-back line.
+#-mn
+
+# Disable MRU [Maximum Receive Unit] negotiation (use default, i.e.
+# 1500).
+#-mru
+
+# Disable protocol field compression negotiation (use default, i.e.
+# protocol field compression disabled).
+#-pc
+
+# Require the peer to authenticate itself using PAP.
+#+pap
+
+# Don't agree to authenticate using PAP.
+#-pap
+
+# Require the peer to authenticate itself using CHAP [Cryptographic
+# Handshake Authentication Protocol] authentication.
+#+chap
+
+# Don't agree to authenticate using CHAP.
+#-chap
+
+# Disable negotiation of Van Jacobson style IP header compression (use
+# default, i.e. no compression).
+#-vj
+
+# Increase debugging level (same as -d). If this option is given, pppd
+# will log the contents of all control packets sent or received in a
+# readable form. The packets are logged through syslog with facility
+# daemon and level debug. This information can be directed to a file by
+# setting up /etc/syslog.conf appropriately (see syslog.conf(5)). (If
+# pppd is compiled with extra debugging enabled, it will log messages
+# using facility local2 instead of daemon).
+#debug
+
+# Append the domain name <d> to the local host name for authentication
+# purposes. For example, if gethostname() returns the name porsche,
+# but the fully qualified domain name is porsche.Quotron.COM, you would
+# use the domain option to set the domain name to Quotron.COM.
+#domain <d>
+
+# Enable debugging code in the kernel-level PPP driver. The argument n
+# is a number which is the sum of the following values: 1 to enable
+# general debug messages, 2 to request that the contents of received
+# packets be printed, and 4 to request that the contents of transmitted
+# packets be printed.
+#kdebug n
+
+# Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
+# requests a smaller value via MRU negotiation, pppd will request that
+# the kernel networking code send data packets of no more than n bytes
+# through the PPP network interface.
+#mtu <n>
+
+# Set the name of the local system for authentication purposes to <n>.
+# This is a privileged option. With this option, pppd will use lines in the
+# secrets files which have <n> as the second field when looking for a
+# secret to use in authenticating the peer. In addition, unless overridden
+# with the user option, <n> will be used as the name to send to the peer
+# when authenticating the local system to the peer. (Note that pppd does
+# not append the domain name to <n>.)
+#name <n>
+
+# Enforce the use of the hostname as the name of the local system for
+# authentication purposes (overrides the name option).
+#usehostname
+
+# Set the assumed name of the remote system for authentication purposes
+# to <n>.
+#remotename <n>
+
+# Add an entry to this system's ARP [Address Resolution Protocol]
+# table with the IP address of the peer and the Ethernet address of this
+# system.
+proxyarp
+
+# Use the system password database for authenticating the peer using
+# PAP. Note: mgetty already provides this option. If this is specified
+# then dialin from users using a script under Linux to fire up ppp wont work.
+# login
+
+# If this option is given, pppd will send an LCP echo-request frame to the
+# peer every n seconds. Normally the peer should respond to the echo-request
+# by sending an echo-reply. This option can be used with the
+# lcp-echo-failure option to detect that the peer is no longer connected.
+lcp-echo-interval 30
+
+# If this option is given, pppd will presume the peer to be dead if n
+# LCP echo-requests are sent without receiving a valid LCP echo-reply.
+# If this happens, pppd will terminate the connection. Use of this
+# option requires a non-zero value for the lcp-echo-interval parameter.
+# This option can be used to enable pppd to terminate after the physical
+# connection has been broken (e.g., the modem has hung up) in
+# situations where no hardware modem control lines are available.
+lcp-echo-failure 4
+
+# Set the LCP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#lcp-restart <n>
+
+# Set the maximum number of LCP terminate-request transmissions to <n>
+# (default 3).
+#lcp-max-terminate <n>
+
+# Set the maximum number of LCP configure-request transmissions to <n>
+# (default 10).
+#lcp-max-configure <n>
+
+# Set the maximum number of LCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#lcp-max-failure <n>
+
+# Set the IPCP restart interval (retransmission timeout) to <n>
+# seconds (default 3).
+#ipcp-restart <n>
+
+# Set the maximum number of IPCP terminate-request transmissions to <n>
+# (default 3).
+#ipcp-max-terminate <n>
+
+# Set the maximum number of IPCP configure-request transmissions to <n>
+# (default 10).
+#ipcp-max-configure <n>
+
+# Set the maximum number of IPCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#ipcp-max-failure <n>
+
+# Set the PAP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#pap-restart <n>
+
+# Set the maximum number of PAP authenticate-request transmissions to
+# <n> (default 10).
+#pap-max-authreq <n>
+
+# Set the maximum time that pppd will wait for the peer to authenticate
+# itself with PAP to <n> seconds (0 means no limit).
+#pap-timeout <n>
+
+# Set the CHAP restart interval (retransmission timeout for
+# challenges) to <n> seconds (default 3).
+#chap-restart <n>
+
+# Set the maximum number of CHAP challenge transmissions to <n>
+# (default 10).
+#chap-max-challenge
+
+# If this option is given, pppd will rechallenge the peer every <n>
+# seconds.
+#chap-interval <n>
+
+# With this option, pppd will accept the peer's idea of our local IP
+# address, even if the local IP address was specified in an option.
+#ipcp-accept-local
+
+# With this option, pppd will accept the peer's idea of its (remote) IP
+# address, even if the remote IP address was specified in an option.
+#ipcp-accept-remote
+
+# Disable the IPXCP and IPX protocols.
+# To let pppd pass IPX packets comment this out --- you'll probably also
+# want to install ipxripd, and have the Internal IPX Network option enabled
+# in your kernel. /usr/doc/HOWTO/IPX-HOWTO.gz contains more info.
+noipx
+
+# Exit once a connection has been made and terminated. This is the default,
+# unless the `persist' or `demand' option has been specified.
+#nopersist
+
+# Do not exit after a connection is terminated; instead try to reopen
+# the connection.
+#persist
+
+# Terminate after n consecutive failed connection attempts.
+# A value of 0 means no limit. The default value is 10.
+#maxfail <n>
+
+# Initiate the link only on demand, i.e. when data traffic is present.
+# With this option, the remote IP address must be specified by the user on
+# the command line or in an options file. Pppd will initially configure
+# the interface and enable it for IP traffic without connecting to the peer.
+# When traffic is available, pppd will connect to the peer and perform
+# negotiation, authentication, etc. When this is completed, pppd will
+# commence passing data packets (i.e., IP packets) across the link.
+#demand
+
+# Specifies that pppd should disconnect if the link is idle for <n> seconds.
+# The link is idle when no data packets (i.e. IP packets) are being sent or
+# received. Note: it is not advisable to use this option with the persist
+# option without the demand option. If the active-filter option is given,
+# data packets which are rejected by the specified activity filter also
+# count as the link being idle.
+#idle <n>
+
+# Specifies how many seconds to wait before re-initiating the link after
+# it terminates. This option only has any effect if the persist or demand
+# option is used. The holdoff period is not applied if the link was
+# terminated because it was idle.
+#holdoff <n>
+
+# Wait for up n milliseconds after the connect script finishes for a valid
+# PPP packet from the peer. At the end of this time, or when a valid PPP
+# packet is received from the peer, pppd will commence negotiation by
+# sending its first LCP packet. The default value is 1000 (1 second).
+# This wait period only applies if the connect or pty option is used.
+#connect-delay <n>
+
+# Packet filtering: for more information, see pppd(8)
+# Any packets matching the filter expression will be interpreted as link
+# activity, and will cause a "demand" connection to be activated, and reset
+# the idle connection timer. (idle option)
+# The filter expression is akin to that of tcpdump(1)
+#active-filter <filter-expression>
+
+# uncomment the line below this if you use PPPoE
+#plugin /usr/lib/pppd/plugins/pppoe.so
+
+# ---<End of File>---
diff --git a/abs/core/ppp/plog b/abs/core/ppp/plog
new file mode 100644
index 0000000..84d2c73
--- /dev/null
+++ b/abs/core/ppp/plog
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -s /var/log/ppp.log ]; then
+ exec tail "$@" /var/log/ppp.log
+else
+ exec tail "$@" /var/log/syslog | grep ' \(pppd\|chat\)\['
+fi
diff --git a/abs/core/ppp/poff b/abs/core/ppp/poff
new file mode 100644
index 0000000..8b4dffc
--- /dev/null
+++ b/abs/core/ppp/poff
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+# Written by John Hasler <john@dhh.gt.org> and based on work
+# by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
+
+if [ -x /usr/bin/kill ]; then
+ KILL="/usr/bin/kill"
+else
+ KILL="/bin/kill"
+fi
+SIG=TERM
+DONE="stopped"
+MODE=""
+
+usage ()
+{
+ cat <<!EOF!
+usage: $0 [option] [provider]
+options:
+ -r Cause pppd to drop the line and redial.
+ -d Toggle the state of pppd's debug option.
+ -c Cause pppd to renegotiate compression.
+ -a Stop all pppd's. 'provider' will be ignored.
+ -h Print this help summary and exit.
+ -v Print version and exit.
+ none Stop pppd.
+
+Options may not be combined.
+
+If 'provider' is omitted pppd will be stopped or signalled if and only if
+there is exactly one running unless the '-a' option was given. If
+'provider' is supplied the pppd controlling the connection to that
+provider will be stopped or signalled.
+!EOF!
+}
+
+# Get option. If there are none replace the "?" that getopts puts in
+# FLAG on error with "null".
+getopts rdcavh FLAG
+if [ "$?" -ne 0 ]; then
+ FLAG="null"
+fi
+
+# Check for additional options. Should be none.
+getopts :rdcavh DUMMY
+if [ "$?" -eq 0 ]; then
+ echo "$0: Illegal option -- ${OPTARG}."
+ exit 1
+fi
+
+case $FLAG in
+ "r") SIG=HUP; DONE=signalled; shift ;;
+ "d") SIG=USR1; DONE=signalled; shift ;;
+ "c") SIG=USR2; DONE=signalled; shift ;;
+ "a") MODE="all"; shift ;;
+ "v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
+ "h") usage; exit 0 ;;
+ "?") exit 1;
+esac
+
+# Get the PIDs of all the pppds running. Could also get these from
+# /var/run, but pppd doesn't create .pid files until ppp is up.
+PIDS=`pidof pppd`
+
+# poff is pointless if pppd isn't running.
+if test -z "$PIDS"; then
+ echo "$0: No pppd is running. None ${DONE}."
+ exit 1
+fi
+
+# Find out how many pppd's are running.
+N=`echo "$PIDS" | wc -w`
+
+# If there are no arguments we can't do anything if there is more than one
+# pppd running.
+if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
+ echo "$0: More than one pppd running and no "-a" option and
+no arguments supplied. Nothing ${DONE}."
+ exit 1
+fi
+
+# If either there are no arguments or '-a' was specified kill all the
+# pppd's.
+if test "$#" -eq 0 -o "$MODE" = "all" ; then
+ $KILL -$SIG $PIDS || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+ exit 0
+fi
+
+# There is an argument, so kill the pppd started on that provider.
+PID=`ps axw | grep "[ /]pppd call $1 *\$" | awk '{print $1}'`
+if test -n "$PID" ; then
+ $KILL -$SIG $PID || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+else
+ echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
+ exit 1
+fi
+exit 0
diff --git a/abs/core/ppp/pon b/abs/core/ppp/pon
new file mode 100644
index 0000000..3688505
--- /dev/null
+++ b/abs/core/ppp/pon
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+case "$1" in
+ -*) echo "
+Usage: pon [provider] [arguments]
+
+If you specify one argument, a PPP connection will be started using
+settings from the appropriate file in the /etc/ppp/peers/ directory, and
+any additional arguments supplied will be passed as extra arguments to
+pppd.
+"
+ exit 0
+ ;;
+esac
+
+if [ -z "$1" -a ! -f /etc/ppp/peers/provider ]; then
+ echo "
+Please configure /etc/ppp/peers/provider or use a command line argument to
+use another file in /etc/ppp/peers/ directory.
+"
+ exit 1
+fi
+
+if [ "$1" -a ! -f "/etc/ppp/peers/$1" ]; then
+ echo "
+The file /etc/ppp/peers/$1 does not exist.
+"
+ exit 1
+fi
+
+exec /usr/sbin/pppd call ${@:-provider}
+
diff --git a/abs/core/ppp/pon.1 b/abs/core/ppp/pon.1
new file mode 100644
index 0000000..bb32205
--- /dev/null
+++ b/abs/core/ppp/pon.1
@@ -0,0 +1,121 @@
+.\" This manual is published under the GPL.
+.\" All guidelines specified in the GPL apply here.
+.\" To get an ascii file:
+.\" groff -man -Tascii pon.1 > pon.txt
+.\"
+.TH PON 1 "July 2000" "Debian Project" "Debian PPPD"
+.SH NAME
+pon, poff, plog \- starts up, shuts down or lists the log of PPP connections
+.SH SYNOPSIS
+.B pon
+[ isp-name [ options ] ]
+.br
+.B poff
+[ -r ] [ -d ] [ -c ] [ -a ] [ -h ] [ isp-name ]
+.br
+.B plog
+[ arguments ]
+.SH DESCRIPTION
+This manual page describes the \fBpon\fP, \fBplog\fP and \fBpoff\fP
+scripts, which allow users to control PPP connections.
+..
+.SS pon
+\fBpon\fP, invoked without arguments, runs the \fI/etc/ppp/ppp_on_boot\fP
+file, if it exists and is executable. Otherwise, a PPP connection will be
+started using configuration from \fI/etc/ppp/peers/provider\fP.
+This is the default behaviour unless an \fBisp-name\fP argument is given.
+.PP
+For instance, to use ISP configuration "myisp" run:
+.IP
+pon myisp
+.PP
+\fBpon\fP will then use the options file \fI/etc/ppp/peers/myisp\fP.
+You can pass additional \fBoptions\fP after the ISP name, too.
+\fBpon\fP can be used to run multiple, simultaneous PPP connections.
+..
+.SS poff
+\fBpoff\fP closes a PPP connection. If more than one PPP connection exists,
+the one named in the argument to \fBpoff\fP will be killed, e.g.
+.IP
+poff myprovider2
+.PP
+will terminate the connection to myprovider2, and leave the PPP connections
+to e.g. "myprovider1" or "myprovider3" up and running.
+.PP
+\fBpoff\fP takes the following command line options:
+.RS
+.TP
+.B "\-r"
+causes the connection to be redialed after it is dropped.
+.TP
+.B "\-d"
+toggles the state of pppd's debug option.
+.TP
+.B "\-c"
+causes
+.BR pppd (8)
+to renegotiate compression.
+.TP
+.B "\-a"
+stops all running ppp connections. If the argument \fBisp-name\fP
+is given it will be ignored.
+.TP
+.B "\-h"
+displays help information.
+.TP
+.B "\-v"
+prints the version and exits.
+.PP
+If no argument is given, \fBpoff\fP will stop or signal pppd if and only
+if there is exactly one running. If more than one connection is active,
+it will exit with an error code of 1.
+..
+.SS plog
+\fBplog\fP shows you the last few lines of \fI/var/log/ppp.log\fP. If that
+file doesn't exist, it shows you the last few lines of your
+\fI/var/log/syslog\fP file, but excluding the lines not generated by pppd.
+This script makes use of the
+.BR tail (1)
+command, so arguments that can be passed to
+.BR tail (1)
+can also be passed to \fBplog\fP.
+.PP
+Note: the \fBplog\fP script can only be used by root or another system
+administrator in group "adm", due to security reasons. Also, to have all
+pppd-generated information in one logfile, that plog can show, you need the
+following line in your \fI/etc/syslog.conf\fP file:
+.PP
+local2.* -/var/log/ppp.log
+.RE
+.SH FILES
+.TP
+.I /etc/ppp/options
+PPPd system options file.
+.TP
+.I /etc/ppp/pap-secrets
+System PAP passwords file.
+.TP
+.I /etc/ppp/chap-secrets
+System CHAP passwords file.
+.TP
+.I /etc/ppp/peers/
+Directory holding the peer options files. The default file is called
+\fIprovider\fP.
+.TP
+.I /etc/chatscripts/provider
+The chat script invoked from the default \fI/etc/ppp/peers/provider\fP.
+.TP
+.I /var/log/ppp.log
+The default PPP log file.
+.SH AUTHORS
+The p-commands were written by Christoph Lameter <clameter@debian.org>.
+Updated and revised by Philip Hands <phil@hands.com>.
+.br
+This manual was written by Othmar Pasteka <othmar@tron.at>. Modified
+by Rob Levin <lilo@openprojects.net>, with some extensions taken from
+the old p-commands manual written by John Hasler <jhasler@debian.org>.
+.SH "SEE ALSO"
+.BR pppd (8),
+.BR chat (8),
+.BR tail (1).
+
diff --git a/abs/core/ppp/ppp b/abs/core/ppp/ppp
new file mode 100644
index 0000000..16e01ba
--- /dev/null
+++ b/abs/core/ppp/ppp
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/pppd`
+case "$1" in
+ start)
+ stat_busy "Starting PPP daemon"
+ [ -z "$PID" ] && /usr/bin/pon
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon ppp
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping PPP daemon"
+ [ ! -z "$PID" ] && poff -a &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ppp
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/printproto/PKGBUILD b/abs/core/printproto/PKGBUILD
new file mode 100644
index 0000000..11595db
--- /dev/null
+++ b/abs/core/printproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 567 2008-04-21 09:43:18Z alexander $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=printproto
+pkgver=1.0.4
+pkgrel=1
+pkgdesc="X11 print extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('7321847a60748b4d2f1fa16db4b6ede8')
diff --git a/abs/core/procinfo/PKGBUILD b/abs/core/procinfo/PKGBUILD
new file mode 100644
index 0000000..ccff37e
--- /dev/null
+++ b/abs/core/procinfo/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=procinfo
+pkgver=19
+pkgrel=11
+pkgdesc="Displays useful information from /proc"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('glibc' 'ncurses' 'perl')
+source=(ftp://ftp.cistron.nl/pub/people/00-OLD/svm/$pkgname-18.tar.gz
+ procinfo-19.2.patch)
+md5sums=('27658d0a69040aca05a65b9888599d50'
+ '6520e2f7d7884069d3ee41251d36a86c')
+
+build() {
+ cd $startdir/src/$pkgname-18
+ patch -Np1 -i ../procinfo-19.2.patch || return 1
+ make LDLIBS=-lncurses || return 1
+ make prefix=$startdir/pkg/usr install
+}
+
diff --git a/abs/core/procinfo/procinfo-19.2.patch b/abs/core/procinfo/procinfo-19.2.patch
new file mode 100644
index 0000000..1fb622a
--- /dev/null
+++ b/abs/core/procinfo/procinfo-19.2.patch
@@ -0,0 +1,325 @@
+diff -ruN procinfo-18/procinfo.c procinfo-19/procinfo.c
+--- procinfo-18/procinfo.c 2001-02-25 12:29:16.000000000 +0100
++++ procinfo-19/procinfo.c 2005-07-02 17:37:31.000000000 +0200
+@@ -5,9 +5,10 @@
+ Displays general info from /proc.
+
+ Date: 1995-07-08 05:30:34
+- Last Change: 2001-02-25 00:27:21
++ Last Change: 2005-07-02 17:25:53
+
+ Copyright (c) 1994-2001 svm@kozmix.cistron.nl
++ Copyright (c) 2004-2005 procinfo@meisel.cc (upgrades for 2.6 kernel)
+
+ This software is released under the GNU Public Licence. See the file
+ `COPYING' for details. Since you're probably running Linux I'm sure
+@@ -26,6 +27,7 @@
+ #include <string.h>
+ #include <termios.h>
+ #include <termcap.h>
++#include <ctype.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/param.h> /* for HZ -- should be in <time.h> ? */
+@@ -72,9 +74,9 @@
+ int nr_irqs = 0;
+ int nr_cpus = 0;
+
+-FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp,
++FILE *loadavgfp, *meminfofp, *modulesfp, *statfp, *uptimefp, *diskstatsfp,
+ *devicesfp, *filesystemsfp, *interruptsfp, *dmafp, *cmdlinefp,
+- *versionfp, *cpuinfofp;
++ *versionfp, *cpuinfofp, *vmstatfp;
+
+ char line[1024], cmdline[1024], booted[40], *version = NULL, *message = NULL;
+
+@@ -89,9 +91,13 @@
+ {
+ unsigned long elapsed;
+ char loadavg[32];
+- int i;
++ int i, havetwosix = 0, lastdisk;
+ static int have_m_c = -1; /* Do we have cache info? */
+ static int have_m_l = -1; /* Do we have new-style-one-datum-per-line? */
++ char devicename[10];
++ char *last;
++ unsigned int q,w,a,s,d,f,g,h,j,k,l,y,x;
++ int disk_counter = 0, ret;
+
+
+ /**** /proc/uptime ****/
+@@ -237,6 +243,50 @@
+
+ printf ("Bootup: %s Load average: %s\n\n", booted, loadavg);
+
++/**** /proc/vmstat ... 2.6.x kernel only ****/
++ if (vmstatfp) {
++ havetwosix = 1;
++ fseek (vmstatfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), vmstatfp)) {
++ char *type = strtok (line, " ");
++ if (ISSTR ("pgpgin")) {
++ new.pgin = VAL;
++ } else if (ISSTR ("pgpgout")) {
++ new.pgout = VAL;
++ } else if (ISSTR ("pgactivate")) {
++ new.pgac = VAL;
++ } else if (ISSTR ("pgdeactivate")) {
++ new.pgdeac = VAL;
++ } else if (ISSTR ("pgfault")) {
++ new.pgfault = VAL;
++ } else if (ISSTR ("pswpin")) {
++ new.swin = VAL;
++ } else if (ISSTR ("pswpout")) {
++ new.swout = VAL;
++ }
++ }
++ }
++
++/**** /proc/diskstats ... 2.6.x kernel only ****/
++ if (diskstatsfp) {
++ havetwosix = 1;
++ fseek (diskstatsfp, 0L, SEEK_SET);
++ while (fgets (line, sizeof (line), diskstatsfp)) {
++ char *type = strtok (line, "\n");
++ ret = sscanf (type, "%d%d%s%d%d%d%d%d%d%d%d%d%d%d", &q, &w, devicename, &a, &s, &d, &f, &g, &h, &j, &k, &l, &y, &x);
++ if (ret != 14) /* Everything with less than 14 elements is not a disk device */
++ continue;
++ last = devicename+strlen(devicename)-1;
++ if (isalpha(*last)) {/* Is the last char is a number ignore it .. like fd0 */
++ if (++disk_counter > 7) /* 7 disks is all we have room for */
++ continue;
++ else {
++ new.disk_r[disk_counter-1] = a;
++ new.disk_w[disk_counter-1] = g;
++ }
++ }
++ }
++ }
+
+ /**** /proc/stat ****/
+
+@@ -249,6 +299,9 @@
+ new.cpu_nice = VAL;
+ new.cpu_sys = VAL;
+ new.cpu_idle = VAL;
++ new.cpu_iowait = VAL;
++ new.cpu_hirq = VAL;
++ new.cpu_sirq = VAL;
+ /*
+ * according to bug #1959, sometimes the cpu_idle
+ * seems to go backwards(!) on SMP boxes. This may
+@@ -262,34 +315,54 @@
+ new.disk[1] = VAL;
+ new.disk[2] = VAL;
+ new.disk[3] = VAL;
++ new.disk[4] = VAL;
++ new.disk[5] = VAL;
++ new.disk[6] = VAL;
+ } else if (ISSTR ("disk_rio") && io_or_blk == 0) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
++ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
++ new.disk_w[0] = VAL;
+ } else if (ISSTR ("disk_wio") && io_or_blk == 0) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_rblk") && io_or_blk == 1) {
+ new.disk_r[0] = VAL;
+ new.disk_r[1] = VAL;
+ new.disk_r[2] = VAL;
+ new.disk_r[3] = VAL;
++ new.disk_r[4] = VAL;
++ new.disk_r[5] = VAL;
++ new.disk_r[6] = VAL;
+ } else if (ISSTR ("disk_wblk") && io_or_blk == 1) {
+ new.disk_w[0] = VAL;
+ new.disk_w[1] = VAL;
+ new.disk_w[2] = VAL;
+ new.disk_w[3] = VAL;
++ new.disk_w[4] = VAL;
++ new.disk_w[5] = VAL;
++ new.disk_w[6] = VAL;
+ } else if (ISSTR ("disk_io:")) {
+- int disk_counter = 0, ret;
+ unsigned int q, w, e, r, t, y, u; /* I'm NOT in the mood today. */
+ char *barf;
+
+ while ((barf = strtok (NULL, " "))) {
+
+- if (++disk_counter > 4) /* 4 is all we have room for */
++ if (++disk_counter > 7) /* 7 is all we have room for */
+ continue;
+
+ ret = sscanf (barf, "(%d,%d):(%d,%d,%d,%d,%d)",
+@@ -374,7 +447,10 @@
+
+ printf ("system: %s %s",
+ hms (bDIFF (cpu_sys)), perc (bDIFF (cpu_sys), elapsed, nr_cpus));
+- printf (" swap in :%9lu", bDIFF (swin));
++ if (havetwosix)
++ printf (" page act:%9lu", bDIFF (pgac));
++ else
++ printf (" swap in :%9lu", bDIFF (swin));
+ if (new.disk_r[2])
+ printf (" disk 3: %8lur%8luw\n", bDIFF (disk_r[2]),
+ bDIFF (disk_w[2]));
+@@ -383,14 +459,53 @@
+ else
+ putchar ('\n');
+
++ if (havetwosix) {
++ printf ("IOwait: %s %s",
++ hms (bDIFF (cpu_iowait)), perc (bDIFF (cpu_iowait), elapsed, nr_cpus));
++ printf (" page dea:%9lu", bDIFF (pgdeac));
++ if (new.disk_r[3])
++ printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
++ bDIFF (disk_w[3]));
++ else if (new.disk[3])
++ printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ else
++ putchar ('\n');
++
++ printf ("hw irq: %s %s",
++ hms (bDIFF (cpu_hirq)), perc (bDIFF (cpu_hirq), elapsed, nr_cpus));
++ printf (" page flt:%9lu", bDIFF (pgfault));
++ if (new.disk_r[4])
++ printf (" disk 5: %8lur%8luw\n", bDIFF (disk_r[4]),
++ bDIFF (disk_w[4]));
++ else if (new.disk[4])
++ printf (" disk 5: %8lu\n", bDIFF (disk[4]));
++ else
++ putchar ('\n');
++
++ printf ("sw irq: %s %s",
++ hms (bDIFF (cpu_sirq)), perc (bDIFF (cpu_sirq), elapsed, nr_cpus));
++ printf (" swap in :%9lu", bDIFF (swin));
++ if (new.disk_r[5])
++ printf (" disk 6: %8lur%8luw\n", bDIFF (disk_r[5]),
++ bDIFF (disk_w[5]));
++ else if (new.disk[5])
++ printf (" disk 6: %8lu\n", bDIFF (disk[5]));
++ else
++ putchar ('\n');
++ }
++
+ printf ("idle : %s %s",
+ hms (bDIFF (cpu_idle)), perc (bDIFF (cpu_idle), elapsed, nr_cpus));
+ printf (" swap out:%9lu", bDIFF (swout));
+- if (new.disk_r[3])
+- printf (" disk 4: %8lur%8luw\n", bDIFF (disk_r[3]),
+- bDIFF (disk_w[3]));
+- else if (new.disk[3])
+- printf (" disk 4: %8lu\n", bDIFF (disk[3]));
++ if (havetwosix)
++ lastdisk = 5;
++ else
++ lastdisk = 2;
++ if (new.disk_r[lastdisk])
++ printf (" disk %d: %8lur%8luw\n", lastdisk+1, bDIFF (disk_r[lastdisk]),
++ bDIFF (disk_w[lastdisk]));
++ else if (new.disk[lastdisk])
++ printf (" disk %d: %8lu\n", lastdisk+1, bDIFF (disk[lastdisk]));
+ else
+ putchar ('\n');
+
+@@ -786,6 +901,8 @@
+ meminfofp = myfopen (PROC_DIR "meminfo");
+ statfp = myfopen (PROC_DIR "stat");
+ /* These may be missing, so check for NULL later. */
++ diskstatsfp = fopen (PROC_DIR "diskstats", "r");
++ vmstatfp = fopen (PROC_DIR "vmstat", "r");
+ modulesfp = fopen (PROC_DIR "modules", "r");
+ devicesfp = fopen (PROC_DIR "devices", "r");
+ filesystemsfp = fopen (PROC_DIR "filesystems", "r");
+@@ -990,6 +1107,9 @@
+ new.disk_r[1] = new.disk_w[1] =
+ new.disk_r[2] = new.disk_w[2] =
+ new.disk_r[3] = new.disk_w[3] = 0;
++ new.disk_r[4] = new.disk_w[4] = 0;
++ new.disk_r[5] = new.disk_w[5] = 0;
++ new.disk_r[6] = new.disk_w[6] = 0;
+ redrawn = 1;
+ message = io_or_blk ? "showing I/O in blocks" :
+ "showing I/O per requests";
+diff -ruN procinfo-18/procinfo.h procinfo-19/procinfo.h
+--- procinfo-18/procinfo.h 2001-02-25 00:30:45.000000000 +0100
++++ procinfo-19/procinfo.h 2005-07-02 17:37:54.000000000 +0200
+@@ -3,9 +3,10 @@
+ procinfo.h
+
+ Date: 1995-04-15 23:54:06
+- Last Change: 2001-02-24 23:43:08
++ Last Change: 2005-07-02 17:37:32
+
+ Copyright (C) 1995-2001 Sander van Malssen <svm@kozmix.cistron.nl>
++ Copyright (c) 2004-2005 procinfo@meisel.cc (upgrades for 2.6 kernel)
+
+ This software is released under the GNU Public Licence. See the file
+ `COPYING' for details. Since you're probably running Linux I'm sure
+@@ -47,7 +48,7 @@
+ new.x)
+
+ #define bDIFF(x) (show_diff ? \
+- (unsigned long) (((new.x)-(old.x))/rate) : \
++ (unsigned long) ((((new.x)-(old.x))/rate)*10) : \
+ (show_from_baseline ? \
+ new.x - base.x : new.x))
+
+@@ -81,11 +82,11 @@
+ unsigned long uptime;
+ long m_to, m_us, m_fr, m_sh, m_bu, m_ca;
+ long s_to, s_us, s_fr;
+- unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle;
+- unsigned long disk[5];
+- unsigned long disk_r[5];
+- unsigned long disk_w[5];
+- unsigned long pgin, pgout, swin, swout;
++ unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle, cpu_iowait, cpu_hirq, cpu_sirq;
++ unsigned long disk[8];
++ unsigned long disk_r[8];
++ unsigned long disk_w[8];
++ unsigned long pgin, pgout, pgac, pgdeac, pgfault, swin, swout;
+ unsigned long *intr; /* Phew. That's better. */
+ unsigned long old_intr;
+ unsigned long ctxt;
+diff -ruN procinfo-18/routines.c procinfo-19/routines.c
+--- procinfo-18/routines.c 2001-02-25 00:30:45.000000000 +0100
++++ procinfo-19/routines.c 2005-07-02 17:18:36.000000000 +0200
+@@ -388,9 +388,13 @@
+ hms (unsigned long t)
+ {
+ unsigned int d, h, m, s;
++ unsigned long q;
+ static char buf[22];
+
+- t = t * 100 / HZ;
++ q = 100 / HZ; /* We need this because the libc does something funny here */
++ /* if we try to use: t = t * 100 / HZ; here! */
++ /* procinfo@meisel.cc 11. Feb. 2004 */
++ t = t * q;
+ d = (int) (t / 8640000);
+ t = t - (long) (d * 8640000);
+ h = (int) (t / 360000);
+@@ -424,6 +428,7 @@
+ /* if (v > 1000)
+ return "+++.+%";
+ else */
++ //sprintf (buf, "%3u.%u%%", v, v % 10);
+ sprintf (buf, "%3u.%u%%", v / 10, v % 10);
+ return buf;
+ }
diff --git a/abs/core/procps/PKGBUILD b/abs/core/procps/PKGBUILD
new file mode 100644
index 0000000..84b063c
--- /dev/null
+++ b/abs/core/procps/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=procps
+pkgver=3.2.7
+pkgrel=13
+pkgdesc="Utilities for monitoring your system and processes on your system"
+arch=(i686 x86_64)
+url="http://procps.sf.net"
+license=('LGPL')
+groups=('base')
+depends=('ncurses')
+backup=('etc/sysctl.conf')
+source=(http://procps.sourceforge.net/procps-$pkgver.tar.gz sysctl.conf)
+md5sums=('f490bca772b16472962c7b9f23b1e97d' '03571b4a24037f8ac283f3d8af02423f')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ /bin/sed -i "s:\$(lib64):lib:" Makefile
+ make || return 1
+ make DESTDIR=$startdir/pkg ldconfig=/bin/true install
+ install -D -m644 ../sysctl.conf $startdir/pkg/etc/sysctl.conf
+ install -d $startdir/pkg/usr/include/proc
+ install -m644 proc/*.h $startdir/pkg/usr/include/proc
+}
diff --git a/abs/core/procps/sysctl.conf b/abs/core/procps/sysctl.conf
new file mode 100644
index 0000000..8e725de
--- /dev/null
+++ b/abs/core/procps/sysctl.conf
@@ -0,0 +1,13 @@
+#
+# Kernel sysctl configuration
+#
+
+# Disable packet forwarding
+net.ipv4.ip_forward=0
+
+# Disable the magic-sysrq key
+kernel.sysrq = 0
+
+# Enable TCP SYN Cookie Protection
+net.ipv4.tcp_syncookies = 1
+
diff --git a/abs/core/psmisc/PKGBUILD b/abs/core/psmisc/PKGBUILD
new file mode 100644
index 0000000..c6df5b5
--- /dev/null
+++ b/abs/core/psmisc/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+
+pkgname=psmisc
+pkgver=22.6
+pkgrel=10
+pkgdesc="Miscellaneous procfs tools"
+arch=('i686' 'x86_64')
+url="http://psmisc.sourceforge.net"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'ncurses')
+source=(http://downloads.sourceforge.net/psmisc/$pkgname-$pkgver.tar.gz)
+md5sums=('2e81938855cf5cc38856bd4a31d79a4c')
+sha1sums=('cb15c23e9cfe618e9de5f066525bce7dc7b77421')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+# we use sysvinit's pidof program
+ rm -f $startdir/pkg/usr/man/man1/pidof.1
+ rm -f $startdir/pkg/usr/bin/pidof
+}
diff --git a/abs/core/pycairo/PKGBUILD b/abs/core/pycairo/PKGBUILD
new file mode 100644
index 0000000..283ed43
--- /dev/null
+++ b/abs/core/pycairo/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 1020 2008-04-27 18:50:59Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pycairo
+pkgver=1.4.12
+pkgrel=1
+pkgdesc="Python bindings for the cairo graphics library"
+arch=(i686 x86_64)
+license=('LGPL' 'MPL')
+depends=('python>=2.5' 'cairo>=1.6.4')
+options=('!libtool')
+source=(http://cairographics.org/releases/${pkgname}-${pkgver}.tar.gz)
+url="http://www.cairographics.org/"
+md5sums=('c63199d35b1e1d3c5133509f315f70d7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/pygobject/PKGBUILD b/abs/core/pygobject/PKGBUILD
new file mode 100644
index 0000000..159de7a
--- /dev/null
+++ b/abs/core/pygobject/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 2539 2008-06-06 13:24:21Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=pygobject
+pkgver=2.14.2
+pkgrel=1
+pkgdesc="Python bindings for GObject"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('python>=2.5.1-5' 'glib2>=2.16.3')
+source=(http://ftp.gnome.org/pub/gnome/sources/pygobject/2.14/${pkgname}-${pkgver}.tar.bz2)
+options=('!libtool')
+url="http://www.pygtk.org/"
+md5sums=('0e9e9300e81847f4f7266f49d3bebbaf')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/pygtk/PKGBUILD b/abs/core/pygtk/PKGBUILD
new file mode 100644
index 0000000..71bec7d
--- /dev/null
+++ b/abs/core/pygtk/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
+
+pkgname=pygtk
+pkgver=2.12.1
+pkgrel=1
+pkgdesc="Python bindings for the GTK widget set"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('libglade>=2.6.2' 'pycairo>=1.4.0' 'pygobject>=2.14.1' 'python-numeric>=24.2-2' 'gtk2>=2.12.0')
+options=('!libtool')
+url="http://www.pygtk.org/"
+source=(http://ftp.gnome.org/pub/gnome/sources/pygtk/2.12/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a816346d750d61e3fa67a200e4292694')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ sed -i -e 's/SUBDIRS = codegen . $(GTK_SUBDIR) examples tests docs/SUBDIRS = codegen . $(GTK_SUBDIR) examples tests/' Makefile.in
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -m644 gtk/gtk-extrafuncs.defs ${startdir}/pkg/usr/share/pygtk/2.0/defs/
+}
diff --git a/abs/core/python-numeric/PKGBUILD b/abs/core/python-numeric/PKGBUILD
new file mode 100644
index 0000000..9ec5dec
--- /dev/null
+++ b/abs/core/python-numeric/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: arjan <arjan@archlinux.org>
+# Contributor orelien <aurelien.foret@wanadoo.fr>
+
+pkgname=python-numeric
+pkgver=24.2
+pkgrel=2
+pkgdesc="Numerical Python adds a fast array facility to the Python language."
+arch=(i686 x86_64)
+depends=('python>=2.5')
+source=(http://heanet.dl.sourceforge.net/sourceforge/numpy/Numeric-${pkgver}.tar.gz)
+replaces=('numeric')
+url="http://numeric.scipy.org/"
+md5sums=(2ae672656e06716a149acb048cca3093)
+
+build() {
+ cd ${startdir}/src/Numeric-${pkgver}
+ python setup.py install --root=${startdir}/pkg
+}
diff --git a/abs/core/python-pexpect/PKGBUILD b/abs/core/python-pexpect/PKGBUILD
new file mode 100644
index 0000000..638fc1f
--- /dev/null
+++ b/abs/core/python-pexpect/PKGBUILD
@@ -0,0 +1,17 @@
+# Maintainer: Aaron Schaefer <aaron@elasticdog.com>
+pkgname=python-pexpect
+pkgver=2.3
+pkgrel=1
+pkgdesc='A pure Python Expect-like module'
+arch=('i686' 'x86_64')
+url='http://pexpect.sourceforge.net/'
+license=('MIT')
+depends=('python')
+source=("http://downloads.sourceforge.net/sourceforge/pexpect/pexpect-$pkgver.tar.gz")
+md5sums=('bf107cf54e67bc6dec5bea1f3e6a65c3')
+
+build() {
+ cd $startdir/src/pexpect-$pkgver
+ python setup.py install --root=$startdir/pkg || return 1
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/abs/core/python/PKGBUILD b/abs/core/python/PKGBUILD
new file mode 100644
index 0000000..bc812de
--- /dev/null
+++ b/abs/core/python/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id: PKGBUILD 4689 2008-07-08 21:50:56Z andyrtr $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributer: Jason Chu <jason@archlinux.org>
+
+pkgname=python
+pkgver=2.5.2
+pkgrel=5
+_pybasever=2.5
+pkgdesc="A high-level scripting language"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://www.python.org"
+depends=('db4.5' 'bzip2' 'gdbm' 'openssl>=0.9.8d' 'zlib')
+makedepends=('tk>=8.5.0' 'sqlite3')
+provides=('python-elementree' 'python-ctypes')
+replaces=('python-elementree' 'python-ctypes')
+install=python.install
+source=(http://www.python.org/ftp/python/${pkgver}/Python-${pkgver}.tar.bz2
+ modulator-launcher
+ pynche-launcher
+ Python-2.4.4-gdbm-1.patch
+ python-2.5.CVE-2007-4965-int-overflow.patch
+ python2.6-set_wakeup_fd4.patch
+ Python-2.5.2-idlelib.patch)
+md5sums=('afb5451049eda91fbde10bd5a4b7fadc'
+ 'faa0d4b947bfe67fc8684b5c464f46f2'
+ '60a44af1d8af276274e20c564c0f3d8b'
+ '2b61e06365e9fb5f3af22d946efa8be6'
+ '491416c1b337fc61b6cdf5981d895a7d'
+ 'ec56710959deb01b5fa35829cafec6a3'
+ 'e6441e0b013ac64795221154e0495e10')
+
+build() {
+ cd ${startdir}/src/Python-${pkgver}
+ patch -Np1 -i ${srcdir}/Python-2.4.4-gdbm-1.patch || return 1
+ # fix http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4965
+ patch -Np1 -i ${srcdir}/python-2.5.CVE-2007-4965-int-overflow.patch || return 1
+
+ patch -Np2 -i ${srcdir}/python2.6-set_wakeup_fd4.patch || return 1
+ patch -Np0 -i ${srcdir}/Python-2.5.2-idlelib.patch
+
+ ./configure --prefix=/usr --enable-shared --with-threads --enable-unicode
+ make || return 1
+ make DESTDIR=${pkgdir} install
+
+ rm ${pkgdir}/usr/bin/python
+ ln -sf python${_pybasever} ${pkgdir}/usr/bin/python
+
+ # Install the tools
+ #modulator
+ install -m755 ${srcdir}/modulator-launcher ${pkgdir}/usr/bin/modulator
+ cp -r Tools/modulator ${pkgdir}/usr/lib/python${_pybasever}/site-packages/
+
+ #pynche
+ install -m755 ${srcdir}/pynche-launcher ${pkgdir}/usr/bin/pynche
+ rm -f Tools/pynche/*.pyw
+ cp -r Tools/pynche ${pkgdir}/usr/lib/python${_pybasever}/site-packages/
+
+ #gettext
+ install -m755 Tools/i18n/pygettext.py ${pkgdir}/usr/bin/
+ install -m755 Tools/i18n/msgfmt.py ${pkgdir}/usr/bin/
+
+ mkdir -p ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts
+ install Tools/scripts/README ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts/
+ install Tools/scripts/*py ${pkgdir}/usr/lib/python${_pybasever}/Tools/scripts/
+
+ # license
+ install -D -m644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/python/Python-2.4.4-gdbm-1.patch b/abs/core/python/Python-2.4.4-gdbm-1.patch
new file mode 100644
index 0000000..4b6c7eb
--- /dev/null
+++ b/abs/core/python/Python-2.4.4-gdbm-1.patch
@@ -0,0 +1,17 @@
+--- Python-2.4.4/setup.py.orig 2007-01-14 12:50:46.000000000 -0600
++++ Python-2.4.4/setup.py 2007-01-14 12:54:02.000000000 -0600
+@@ -685,12 +685,12 @@
+ if self.compiler.find_library_file(lib_dirs, 'ndbm'):
+ ndbm_libs = ['ndbm']
+ else:
+- ndbm_libs = []
++ ndbm_libs = ['gdbm', 'gdbm_compat']
+ exts.append( Extension('dbm', ['dbmmodule.c'],
+ define_macros=[('HAVE_NDBM_H',None)],
+ libraries = ndbm_libs ) )
+ elif (self.compiler.find_library_file(lib_dirs, 'gdbm')
+- and find_file("gdbm/ndbm.h", inc_dirs, []) is not None):
++ and find_file("ndbm.h", inc_dirs, []) is not None):
+ exts.append( Extension('dbm', ['dbmmodule.c'],
+ define_macros=[('HAVE_GDBM_NDBM_H',None)],
+ libraries = ['gdbm'] ) )
diff --git a/abs/core/python/Python-2.5.2-idlelib.patch b/abs/core/python/Python-2.5.2-idlelib.patch
new file mode 100644
index 0000000..50c987a
--- /dev/null
+++ b/abs/core/python/Python-2.5.2-idlelib.patch
@@ -0,0 +1,17 @@
+--- Lib/idlelib/WidgetRedirector.py.orig 2008-04-23 23:39:57.000000000 -0700
++++ Lib/idlelib/WidgetRedirector.py 2008-04-23 23:46:55.000000000 -0700
+@@ -53,7 +53,13 @@
+ if m:
+ return m(*args)
+ else:
+- return self.tk.call((self.orig, cmd) + args)
++ #return self.tk.call((self.orig, cmd) + args)
++ r = self.tk.call((self.orig, cmd) + args)
++ if isinstance(r, tuple):
++ # convert to string ourselves so we get a Tcl list
++ # that can be converted back into a tuple
++ r = ' '.join(map(str, r))
++ return r
+ except TclError:
+ return ""
+
diff --git a/abs/core/python/db4.6-setup.py-detection.patch b/abs/core/python/db4.6-setup.py-detection.patch
new file mode 100644
index 0000000..873f175
--- /dev/null
+++ b/abs/core/python/db4.6-setup.py-detection.patch
@@ -0,0 +1,11 @@
+--- setup.py 2008-02-23 20:58:52.000000000 +0000
++++ setup.py.new 2008-02-23 21:04:18.000000000 +0000
+@@ -608,7 +608,7 @@
+ # a release. Most open source OSes come with one or more
+ # versions of BerkeleyDB already installed.
+
+- max_db_ver = (4, 5)
++ max_db_ver = (4, 6)
+ # NOTE: while the _bsddb.c code links against BerkeleyDB 4.6.x
+ # we leave that version disabled by default as it has proven to be
+ # quite a buggy library release on many platforms.
diff --git a/abs/core/python/modulator-launcher b/abs/core/python/modulator-launcher
new file mode 100644
index 0000000..732f05c
--- /dev/null
+++ b/abs/core/python/modulator-launcher
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec /usr/lib/python2.5/site-packages/modulator/modulator.py
diff --git a/abs/core/python/pynche-launcher b/abs/core/python/pynche-launcher
new file mode 100644
index 0000000..ab3a6d8
--- /dev/null
+++ b/abs/core/python/pynche-launcher
@@ -0,0 +1,3 @@
+#!/bin/bash
+/usr/lib/python2.5/site-packages/pynche/pynche
+
diff --git a/abs/core/python/python-2.5.CVE-2007-4965-int-overflow.patch b/abs/core/python/python-2.5.CVE-2007-4965-int-overflow.patch
new file mode 100644
index 0000000..843acbf
--- /dev/null
+++ b/abs/core/python/python-2.5.CVE-2007-4965-int-overflow.patch
@@ -0,0 +1,217 @@
+diff -rup Python-2.5-orig/Modules/imageop.c Python-2.5/Modules/imageop.c
+--- Python-2.5-orig/Modules/imageop.c 2006-01-19 01:09:39.000000000 -0500
++++ Python-2.5/Modules/imageop.c 2007-09-19 16:42:44.000000000 -0400
+@@ -78,7 +78,7 @@ imageop_crop(PyObject *self, PyObject *a
+ char *cp, *ncp;
+ short *nsp;
+ Py_Int32 *nlp;
+- int len, size, x, y, newx1, newx2, newy1, newy2;
++ int len, size, x, y, newx1, newx2, newy1, newy2, nlen;
+ int ix, iy, xstep, ystep;
+ PyObject *rv;
+
+@@ -90,13 +90,19 @@ imageop_crop(PyObject *self, PyObject *a
+ PyErr_SetString(ImageopError, "Size should be 1, 2 or 4");
+ return 0;
+ }
+- if ( len != size*x*y ) {
++ /* ( len != size*x*y ) */
++ if ( size != ((len / x) / y) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+ xstep = (newx1 < newx2)? 1 : -1;
+ ystep = (newy1 < newy2)? 1 : -1;
+
++ nlen = (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size;
++ if ( size != ((nlen / (abs(newx2-newx1)+1)) / (abs(newy2-newy1)+1)) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ rv = PyString_FromStringAndSize(NULL,
+ (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size);
+ if ( rv == 0 )
+@@ -132,7 +138,7 @@ imageop_scale(PyObject *self, PyObject *
+ char *cp, *ncp;
+ short *nsp;
+ Py_Int32 *nlp;
+- int len, size, x, y, newx, newy;
++ int len, size, x, y, newx, newy, nlen;
+ int ix, iy;
+ int oix, oiy;
+ PyObject *rv;
+@@ -145,12 +151,18 @@ imageop_scale(PyObject *self, PyObject *
+ PyErr_SetString(ImageopError, "Size should be 1, 2 or 4");
+ return 0;
+ }
+- if ( len != size*x*y ) {
++ /* ( len != size*x*y ) */
++ if ( size != ((len / x) / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
++ nlen = newx*newy*size;
++ if ( size != ((nlen / newx) / newy) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+
+- rv = PyString_FromStringAndSize(NULL, newx*newy*size);
++ rv = PyString_FromStringAndSize(NULL, nlen);
+ if ( rv == 0 )
+ return 0;
+ ncp = (char *)PyString_AsString(rv);
+@@ -190,7 +202,8 @@ imageop_tovideo(PyObject *self, PyObject
+ PyErr_SetString(ImageopError, "Size should be 1 or 4");
+ return 0;
+ }
+- if ( maxx*maxy*width != len ) {
++ /* if ( maxx*maxy*width != len ) */
++ if ( maxx != ((len / maxy) / maxz) ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -240,7 +253,8 @@ imageop_grey2mono(PyObject *self, PyObje
+ if ( !PyArg_ParseTuple(args, "s#iii", &cp, &len, &x, &y, &tres) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -281,7 +295,8 @@ imageop_grey2grey4(PyObject *self, PyObj
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -320,7 +335,8 @@ imageop_grey2grey2(PyObject *self, PyObj
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -358,7 +374,8 @@ imageop_dither2mono(PyObject *self, PyOb
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -404,7 +421,8 @@ imageop_dither2grey2(PyObject *self, PyO
+ if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) )
+ return 0;
+
+- if ( x*y != len ) {
++ /* ( x*y != len ) */
++ if ( x != len / y ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+ }
+@@ -443,7 +461,11 @@ imageop_mono2grey(PyObject *self, PyObje
+ if ( !PyArg_ParseTuple(args, "s#iiii", &cp, &len, &x, &y, &v0, &v1) )
+ return 0;
+
+- nlen = x*y;
++ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+7)/8 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -481,6 +503,10 @@ imageop_grey22grey(PyObject *self, PyObj
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+3)/4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -517,6 +543,10 @@ imageop_grey42grey(PyObject *self, PyObj
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( (nlen+1)/2 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -554,6 +584,10 @@ imageop_rgb2rgb8(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen*4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -598,6 +632,10 @@ imageop_rgb82rgb(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -648,6 +686,10 @@ imageop_rgb2grey(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen*4 != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+@@ -693,6 +735,10 @@ imageop_grey2rgb(PyObject *self, PyObjec
+ return 0;
+
+ nlen = x*y;
++ if ( x != (nlen / y) ) {
++ PyErr_SetString(ImageopError, "String has incorrect length");
++ return 0;
++ }
+ if ( nlen != len ) {
+ PyErr_SetString(ImageopError, "String has incorrect length");
+ return 0;
+diff -rup Python-2.5-orig/Modules/rgbimgmodule.c Python-2.5/Modules/rgbimgmodule.c
+--- Python-2.5-orig/Modules/rgbimgmodule.c 2006-08-11 23:18:50.000000000 -0400
++++ Python-2.5/Modules/rgbimgmodule.c 2007-09-19 17:00:06.000000000 -0400
+@@ -299,6 +299,11 @@ longimagedata(PyObject *self, PyObject *
+ xsize = image.xsize;
+ ysize = image.ysize;
+ zsize = image.zsize;
++ tablen = xsize * ysize * zsize * sizeof(Py_Int32);
++ if (xsize != (((tablen / ysize) / zsize) / sizeof(Py_Int32))) {
++ PyErr_NoMemory();
++ goto finally;
++ }
+ if (rle) {
+ tablen = ysize * zsize * sizeof(Py_Int32);
+ starttab = (Py_Int32 *)malloc(tablen);
diff --git a/abs/core/python/python.install b/abs/core/python/python.install
new file mode 100644
index 0000000..f00a943
--- /dev/null
+++ b/abs/core/python/python.install
@@ -0,0 +1,13 @@
+post_install() {
+ cat << _EOF
+
+==> Python requires "tk" to use IDLE, pynche and modulator
+
+_EOF
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/python/python2.6-set_wakeup_fd4.patch b/abs/core/python/python2.6-set_wakeup_fd4.patch
new file mode 100644
index 0000000..b945a26
--- /dev/null
+++ b/abs/core/python/python2.6-set_wakeup_fd4.patch
@@ -0,0 +1,94 @@
+--- python/trunk/Modules/signalmodule.c 2007/12/10 23:00:12 59460
++++ python/trunk/Modules/signalmodule.c 2007/12/19 19:41:06 59574
+@@ -12,6 +12,8 @@
+
+ #include <signal.h>
+
++#include <sys/stat.h>
++
+ #ifndef SIG_ERR
+ #define SIG_ERR ((PyOS_sighandler_t)(-1))
+ #endif
+@@ -75,6 +77,8 @@
+ PyObject *func;
+ } Handlers[NSIG];
+
++static sig_atomic_t wakeup_fd = -1;
++
+ /* Speed up sigcheck() when none tripped */
+ static volatile sig_atomic_t is_tripped = 0;
+
+@@ -128,6 +132,8 @@
+ cleared in PyErr_CheckSignals() before .tripped. */
+ is_tripped = 1;
+ Py_AddPendingCall(checksignals_witharg, NULL);
++ if (wakeup_fd != -1)
++ write(wakeup_fd, "\0", 1);
+ #ifdef WITH_THREAD
+ }
+ #endif
+@@ -267,6 +273,50 @@
+ anything else -- the callable Python object used as a handler");
+
+
++static PyObject *
++signal_set_wakeup_fd(PyObject *self, PyObject *args)
++{
++ struct stat buf;
++ int fd, old_fd;
++ if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd))
++ return NULL;
++#ifdef WITH_THREAD
++ if (PyThread_get_thread_ident() != main_thread) {
++ PyErr_SetString(PyExc_ValueError,
++ "set_wakeup_fd only works in main thread");
++ return NULL;
++ }
++#endif
++ if (fd != -1 && fstat(fd, &buf) != 0) {
++ PyErr_SetString(PyExc_ValueError, "invalid fd");
++ return NULL;
++ }
++ old_fd = wakeup_fd;
++ wakeup_fd = fd;
++ return PyLong_FromLong(old_fd);
++}
++
++PyDoc_STRVAR(set_wakeup_fd_doc,
++"set_wakeup_fd(fd) -> fd\n\
++\n\
++Sets the fd to be written to (with '\\0') when a signal\n\
++comes in. A library can use this to wakeup select or poll.\n\
++The previous fd is returned.\n\
++\n\
++The fd must be non-blocking.");
++
++/* C API for the same, without all the error checking */
++int
++PySignal_SetWakeupFd(int fd)
++{
++ int old_fd = wakeup_fd;
++ if (fd < 0)
++ fd = -1;
++ wakeup_fd = fd;
++ return old_fd;
++}
++
++
+ /* List of functions defined in the module */
+ static PyMethodDef signal_methods[] = {
+ #ifdef HAVE_ALARM
+@@ -274,11 +324,12 @@
+ #endif
+ {"signal", signal_signal, METH_VARARGS, signal_doc},
+ {"getsignal", signal_getsignal, METH_VARARGS, getsignal_doc},
++ {"set_wakeup_fd", signal_set_wakeup_fd, METH_VARARGS, set_wakeup_fd_doc},
+ #ifdef HAVE_PAUSE
+ {"pause", (PyCFunction)signal_pause,
+ METH_NOARGS,pause_doc},
+ #endif
+- {"default_int_handler", signal_default_int_handler,
++ {"default_int_handler", signal_default_int_handler,
+ METH_VARARGS, default_int_handler_doc},
+ {NULL, NULL} /* sentinel */
+ };
diff --git a/abs/core/qt3/PKGBUILD b/abs/core/qt3/PKGBUILD
new file mode 100644
index 0000000..870305a
--- /dev/null
+++ b/abs/core/qt3/PKGBUILD
@@ -0,0 +1,101 @@
+# $Id: PKGBUILD 4788 2008-07-10 10:21:45Z pierre $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: John Proctor <jproctor@prium.net>
+pkgname=qt3
+pkgver=3.3.8
+pkgrel=8
+pkgdesc="The QT gui toolkit."
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.trolltech.com/products/qt/index.html"
+pkgfqn=qt-x11-free-${pkgver}
+install=qt.install
+depends=('libpng' 'libjpeg' 'libxmu' 'libxcursor' 'libxinerama' 'mesa' \
+ 'libxft' 'libxrandr')
+makedepends=('mysql' 'postgresql>=8.2.3' 'sqlite3' 'unixodbc' 'libmng')
+source=(ftp://ftp.trolltech.com/qt/source/${pkgfqn}.tar.bz2 qt.profile \
+ qt-copy-kde-patches.tar.bz2 qt-patches.tar.bz2 utf8-bug-qt3.diff \
+ qt-font-default-subst.diff mysql.patch)
+options=(!libtool)
+md5sums=('cf3c43a7dfde5bfb76f8001102fe6e85'
+ 'f72d1eb4eb49b9a9467c1f6035194266'
+ 'f2a2dbdbfee9422c90efc3ef3f86197c'
+ 'c8937968e9807b3cdcdf0505728d99ce'
+ 'f6b3b39040f2b8f19ba1cf1445468c28'
+ '9370d82e85f2c799335ed0dcc1d53189'
+ '7d40ed1bd40d33d8b9b27a2076a5d22a')
+
+# qt-copy-kde-patches come from http://websvn.kde.org/trunk/qt-copy/patches/
+# other qt-patches come from fedora and gentoo
+
+build() {
+ unset QMAKESPEC
+ export QTDIR=$startdir/src/$pkgfqn
+ export PATH=${QTDIR}/bin:${PATH}
+ export LD_LIBRARY_PATH=${QTDIR}/lib:${LD_LIBRARY_PATH}
+ export QMAKESPEC=$QTDIR/mkspecs/linux-g++
+ cd $startdir/src/$pkgfqn
+ # apply qt patches from kde.org
+ for i in ../qt-copy-kde-patches/*; do
+ patch -Np0 -i $i || return 1
+ done
+ # apply other qt patches and one security fix from debian/gentoo
+ for i in ../qt-patches/*; do
+ patch -Np1 -i $i || return 1
+ done
+ # fix utf8 bug
+ patch -Np0 -i ../utf8-bug-qt3.diff || return 1
+ # fix asia fonts
+ patch -Np0 -i ../qt-font-default-subst.diff || return 1
+ # fix segfaults on exit when using mysql DB driver
+ patch -Np0 -i ../mysql.patch || return 1
+ # start compiling qt
+ sed -i 's|-cp -P -f|-cp -L -f|' qmake/Makefile.unix
+ rm -rf doc/html examples tutorial
+ sed -i "s|sub-tutorial sub-examples||" Makefile
+ sed -i "s|-O2|$CXXFLAGS|" mkspecs/linux-g++/qmake.conf
+ sed -i "s|-I. |$CXXFLAGS -I. |" qmake/Makefile.unix
+ sed -i "s|read acceptance|acceptance=yes|" configure
+
+ # remove unwanted mkspecs
+ rm -rf mkspecs/{*aix*,*bsd*,cygwin*,dgux*,darwin*,hpux*,hurd*,irix*,lynxos*,macx*,qnx*,reliant*,sco*,solaris*,tru64*,unixware*,win32*}
+
+ if [ "$CARCH" = "x86_64" ]; then
+ export ARCH="-64"
+ else unset ARCH
+ fi
+
+ ./configure -prefix /opt/qt -platform linux-g++$ARCH \
+ -system-zlib -qt-gif -release -shared -sm -nis -thread -stl \
+ -{system-lib,plugin-imgfmt-}{png,jpeg,mng} \
+ -no-g++-exceptions -plugin-sql-{mysql,psql,sqlite,odbc}
+
+ # fix /opt/qt/lib path
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/src/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/designer/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/editor/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/assistant/lib/Makefile
+ [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" $startdir/src/$pkgfqn/tools/designer/uilib/Makefile
+
+ cd $startdir/src/$pkgfqn
+ make -C qmake || return 1
+ cd $startdir/src/$pkgfqn/plugins/src/sqldrivers/mysql
+ $startdir/src/$pkgfqn/bin/qmake -o Makefile "INCPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient" mysql.pro
+ cd $startdir/src/$pkgfqn/plugins/src/sqldrivers/psql
+ $startdir/src/$pkgfqn/bin/qmake -o Makefile "INCPATH+=/usr/src/include /usr/include/postgresql/server" "LIBS+=-L/usr/lib -lpq" psql.pro
+
+ cd $startdir/src/$pkgfqn
+ # fix the broken makefiles
+ #sed -i 's|[[:space:]]*strip.*doc/html.*$|#|g' src/Makefile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install
+ rm -rf $startdir/pkg/opt/qt/{phrasebooks,templates,translations}
+ sed -i "s|-L$startdir/src/$pkgfqn/lib ||g" $startdir/pkg/opt/qt/lib/*.prl
+ install -D -m755 qmake/qmake $startdir/pkg/opt/qt/bin/qmake
+ install -D -m755 $startdir/qt.profile $startdir/pkg/etc/profile.d/qt3.sh
+ rm -f $startdir/pkg/opt/qt/mkspecs/linux-g++$ARCH/linux-g++$ARCH
+
+ # install man pages
+ mkdir -p $startdir/pkg/opt/qt/man
+ cp -r $startdir/src/$pkgfqn/doc/man/{man1,man3} $startdir/pkg/opt/qt/man/
+}
diff --git a/abs/core/qt3/mysql.patch b/abs/core/qt3/mysql.patch
new file mode 100644
index 0000000..5f61edc
--- /dev/null
+++ b/abs/core/qt3/mysql.patch
@@ -0,0 +1,47 @@
+--- src/sql/drivers/mysql/qsql_mysql.cpp
++++ src/sql/drivers/mysql/qsql_mysql.cpp
+@@ -37,7 +37,6 @@
+ #include "qsql_mysql.h"
+ #include <private/qsqlextension_p.h>
+
+-#include <qapplication.h>
+ #include <qdatetime.h>
+ #include <qvaluevector.h>
+ #include <qsqlrecord.h>
+@@ -341,14 +340,6 @@ int QMYSQLResult::numRowsAffected()
+ }
+
+ /////////////////////////////////////////////////////////
+-static void qServerEnd()
+-{
+-#ifndef Q_NO_MYSQL_EMBEDDED
+-# if MYSQL_VERSION_ID >= 40000
+- mysql_server_end();
+-# endif // MYSQL_VERSION_ID
+-#endif // Q_NO_MYSQL_EMBEDDED
+-}
+
+ static void qServerInit()
+ {
+@@ -366,9 +357,7 @@ static void qServerInit()
+ qWarning( "QMYSQLDriver::qServerInit: unable to start server." );
+ # endif
+ }
+- qAddPostRoutine(qServerEnd);
+ init = TRUE;
+-
+ # endif // MYSQL_VERSION_ID
+ #endif // Q_NO_MYSQL_EMBEDDED
+ }
+@@ -411,6 +400,11 @@ QMYSQLDriver::~QMYSQLDriver()
+ QSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );
+ delete ext;
+ }
++#ifndef Q_NO_MYSQL_EMBEDDED
++# if MYSQL_VERSION_ID > 40000
++ mysql_server_end();
++# endif
++#endif
+ }
+
+ bool QMYSQLDriver::hasFeature( DriverFeature f ) const
diff --git a/abs/core/qt3/qt-copy-kde-patches.tar.bz2 b/abs/core/qt3/qt-copy-kde-patches.tar.bz2
new file mode 100644
index 0000000..19d8999
--- /dev/null
+++ b/abs/core/qt3/qt-copy-kde-patches.tar.bz2
Binary files differ
diff --git a/abs/core/qt3/qt-font-default-subst.diff b/abs/core/qt3/qt-font-default-subst.diff
new file mode 100644
index 0000000..3e286f7
--- /dev/null
+++ b/abs/core/qt3/qt-font-default-subst.diff
@@ -0,0 +1,77 @@
+--- src/kernel/qfontdatabase_x11.cpp
++++ src/kernel/qfontdatabase_x11.cpp
+@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s
+ if (script == QFont::Latin)
+ // add Euro character
+ FcCharSetAddChar(cs, 0x20ac);
+- if (script == QFont::Han_SimplifiedChinese)
+- FcCharSetAddChar(cs, 0x3400);
+- if (script == QFont::Han_TraditionalChinese){
+- FcCharSetAddChar(cs, 0x3435);
+- FcCharSetAddChar(cs, 0xE000);
+- FcCharSetAddChar(cs, 0xF6B1);
+- }
+- if (script == QFont::MiscellaneousSymbols)
+- FcCharSetAddChar(cs, 0x2714);
+ FcPatternAddCharSet(pattern, FC_CHARSET, cs);
+ FcCharSetDestroy(cs);
+ }
+@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c
+ FcPatternPrint(pattern);
+ #endif
+
++ // XftFontMatch calls the right ConfigSubstitute variants, but as we use
++ // FcFontMatch/Sort here we have to do it manually.
+ FcConfigSubstitute(0, pattern, FcMatchPattern);
++ XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern);
++
+ // qDebug("1: pattern contains:");
+ // FcPatternPrint(pattern);
+
+@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c
+ value.u.s = (const FcChar8 *)cs.data();
+ FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue);
+ }
+-#ifdef FONT_MATCH_DEBUG
+- printf("final pattern contains:\n");
+- FcPatternPrint(pattern);
+-#endif
+ }
+
+ if (script != QFont::Unicode) {
+@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c
+ if (script == QFont::Latin)
+ // add Euro character
+ FcCharSetAddChar(cs, 0x20ac);
+- if (script == QFont::Han_SimplifiedChinese)
+- FcCharSetAddChar(cs, 0x3400);
+- if (script == QFont::Han_TraditionalChinese) {
+- FcCharSetAddChar(cs, 0x3435);
+- FcCharSetAddChar(cs, 0xE000);
+- FcCharSetAddChar(cs, 0xF6B1);
+- }
+- if (script == QFont::MiscellaneousSymbols)
+- FcCharSetAddChar(cs, 0x2714);
+ FcPatternAddCharSet(pattern, FC_CHARSET, cs);
+ FcCharSetDestroy(cs);
+ }
+
++#ifdef FONT_MATCH_DEBUG
++ printf("final pattern contains:\n");
++ FcPatternPrint(pattern);
++#endif
++
+ QFontEngine *fe = 0;
+
+ for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) {
+--- src/kernel/qfontdatabase.cpp
++++ src/kernel/qfontdatabase.cpp
+@@ -554,7 +554,7 @@ static const unsigned short sample_chars
+ // GeometricSymbols,
+ { 0x2500, 0x0 },
+ // MiscellaneousSymbols,
+- { 0x2640, 0x0 },
++ { 0x2640, 0x2714, 0x0 },
+ // EnclosedAndSquare,
+ { 0x2460, 0x0 },
+ // Braille,
diff --git a/abs/core/qt3/qt-patches.tar.bz2 b/abs/core/qt3/qt-patches.tar.bz2
new file mode 100644
index 0000000..4e46465
--- /dev/null
+++ b/abs/core/qt3/qt-patches.tar.bz2
Binary files differ
diff --git a/abs/core/qt3/qt.install b/abs/core/qt3/qt.install
new file mode 100644
index 0000000..4e2d6b6
--- /dev/null
+++ b/abs/core/qt3/qt.install
@@ -0,0 +1,24 @@
+post_install() {
+ if ! [ `grep '/opt/qt/lib' etc/ld.so.conf` ]; then
+ echo "/opt/qt/lib" >>etc/ld.so.conf
+ sbin/ldconfig -r .
+ fi
+ echo "INFORMATION:"
+ echo "Documentation is seperated it's called qt3-doc"
+}
+
+post_upgrade() {
+ /bin/true
+}
+
+pre_remove() {
+ cat etc/ld.so.conf | grep -v '/opt/qt/lib' >/tmp/.pacqt
+ mv /tmp/.pacqt etc/ld.so.conf
+ chmod 644 etc/ld.so.conf
+ sbin/ldconfig -r .
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/qt3/qt.profile b/abs/core/qt3/qt.profile
new file mode 100644
index 0000000..ed4d232
--- /dev/null
+++ b/abs/core/qt3/qt.profile
@@ -0,0 +1,4 @@
+export QTDIR=/opt/qt
+export QT_XFT=true
+export PATH=$PATH:$QTDIR/bin
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt/lib/pkgconfig
diff --git a/abs/core/qt3/utf8-bug-qt3.diff b/abs/core/qt3/utf8-bug-qt3.diff
new file mode 100644
index 0000000..43e84a9
--- /dev/null
+++ b/abs/core/qt3/utf8-bug-qt3.diff
@@ -0,0 +1,101 @@
+--- src/codecs/qutfcodec.cpp
++++ src/codecs/qutfcodec.cpp
+@@ -154,6 +154,7 @@
+
+ class QUtf8Decoder : public QTextDecoder {
+ uint uc;
++ uint min_uc;
+ int need;
+ bool headerDone;
+ public:
+@@ -167,8 +168,9 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uchar ch;
++ int error = -1;
+ for (int i=0; i<len; i++) {
+- ch = *chars++;
++ ch = chars[i];
+ if (need) {
+ if ( (ch&0xc0) == 0x80 ) {
+ uc = (uc << 6) | (ch & 0x3f);
+@@ -182,6 +184,8 @@
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
+ headerDone = TRUE;
++ } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ *qch++ = QChar::replacement;
+ } else {
+ if (headerDone || QChar(uc) != QChar::byteOrderMark)
+ *qch++ = uc;
+@@ -190,6 +194,7 @@
+ }
+ } else {
+ // error
++ i = error;
+ *qch++ = QChar::replacement;
+ need = 0;
+ }
+@@ -200,12 +205,21 @@
+ } else if ((ch & 0xe0) == 0xc0) {
+ uc = ch & 0x1f;
+ need = 1;
++ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
++ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
++ error = i;
++ min_uc = 0x10000;
++ } else {
++ // error
++ *qch++ = QChar::replacement;
+ }
+ }
+ }
+--- src/tools/qstring.cpp
++++ src/tools/qstring.cpp
+@@ -5805,6 +5805,7 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uint uc = 0;
++ uint min_uc = 0;
+ int need = 0;
+ int error = -1;
+ uchar ch;
+@@ -5822,6 +5823,12 @@
+ unsigned short low = uc%0x400 + 0xdc00;
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
++ } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ // overlong seqence, UTF16 surrogate or BOM
++ i = error;
++ qch = addOne(qch, result);
++ *qch++ = QChar(0xdbff);
++ *qch++ = QChar(0xde00+((uchar)utf8[i]));
+ } else {
+ *qch++ = uc;
+ }
+@@ -5844,14 +5851,17 @@
+ uc = ch & 0x1f;
+ need = 1;
+ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
+ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
+ error = i;
++ min_uc = 0x10000;
+ } else {
+ // Error
+ qch = addOne(qch, result);
diff --git a/abs/core/randrproto/PKGBUILD b/abs/core/randrproto/PKGBUILD
new file mode 100644
index 0000000..d81ad0e
--- /dev/null
+++ b/abs/core/randrproto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4331 2008-07-06 17:35:48Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=randrproto
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X11 RandR extension wire protocol"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0458f24d6a77ff4bc5182816f482afa1')
+
+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/readline/PKGBUILD b/abs/core/readline/PKGBUILD
new file mode 100644
index 0000000..0eb9b8f
--- /dev/null
+++ b/abs/core/readline/PKGBUILD
@@ -0,0 +1,59 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=readline
+pkgver=5.2
+pkgrel=16
+pkgdesc="GNU readline library"
+arch=(i686 x86_64)
+url="ftp://ftp.cwru.edu/pub/bash/"
+license=('GPL')
+groups=('base')
+depends=(glibc ncurses)
+backup=("etc/inputrc")
+source=(ftp://ftp.cwru.edu/pub/bash/readline-${pkgver}.tar.gz
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-001
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-002
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-003
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-004
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-005
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-006
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-007
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-008
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-009
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-010
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-011
+ ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-012
+ inputrc)
+md5sums=('e39331f32ad14009b9ff49cc10c5e751'
+ '9d4d41622aa9b230c57f68548ce87d8f'
+ 'f03e512d14206e37f7d6a748b56b9476'
+ '252b42d8750f1a94b6bdf086612dceb2'
+ 'a32333c2e603a3ed250514e91050e552'
+ '8106796c09b789523a3a78ab69c04b6d'
+ '512188e2bf0837f7eca19dbf71f182ae'
+ 'ac17aca62eb6fb398c9f2fe9de540aff'
+ '2484c392db021905f112cf97a94dfd4c'
+ 'fc6eb35d07914fae5c57d49c12483ff7'
+ '7a2bf3dc7ac7680b1461a5701100e91b'
+ 'ef6cef6822663470f6ac8c517c5a7ec6'
+ 'e3e9f441c8111589855bc363e5640f6c'
+ 'e5fc955f56d9fa5beb871f3279b8fa8b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ for i in 001 002 003 004 005 006 007 008 009 010 011 012; do
+ patch -Np2 -i ${startdir}/src/readline52-${i} || return 1
+ done
+ ./configure --prefix=/usr
+ make SHLIB_LIBS=-lncurses || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ mkdir -p ${startdir}/pkg/etc
+ install -m644 ../inputrc ${startdir}/pkg/etc/inputrc
+
+ cd ${startdir}/pkg
+ mkdir -pv lib
+ mv -v usr/lib/lib{readline,history}.so.5* lib/
+ ln -svf ../../lib/libreadline.so.5 usr/lib/libreadline.so
+ ln -svf ../../lib/libhistory.so.5 usr/lib/libhistory.so
+}
diff --git a/abs/core/readline/inputrc b/abs/core/readline/inputrc
new file mode 100644
index 0000000..6ad9dd9
--- /dev/null
+++ b/abs/core/readline/inputrc
@@ -0,0 +1,40 @@
+# do not bell on tab-completion
+#set bell-style none
+
+set meta-flag on
+set input-meta on
+set convert-meta off
+set output-meta on
+
+$if mode=emacs
+
+# for linux console and RH/Debian xterm
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+"\e[5~": beginning-of-history
+"\e[6~": end-of-history
+"\e[7~": beginning-of-line
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+"\e[5C": forward-word
+"\e[5D": backward-word
+"\e\e[C": forward-word
+"\e\e[D": backward-word
+"\e[1;5C": forward-word
+"\e[1;5D": backward-word
+
+# for rxvt
+"\e[8~": end-of-line
+
+# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
+"\eOH": beginning-of-line
+"\eOF": end-of-line
+
+# for freebsd console
+"\e[H": beginning-of-line
+"\e[F": end-of-line
+$endif
+
+# Include user-specific configuration
+$include ~/.inputrc
+
diff --git a/abs/core/readline/readline.install b/abs/core/readline/readline.install
new file mode 100644
index 0000000..6b5a1dc
--- /dev/null
+++ b/abs/core/readline/readline.install
@@ -0,0 +1,9 @@
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo ">> You can safely ignore any \"cannot open shared object\" errors you see above"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/recordproto/PKGBUILD b/abs/core/recordproto/PKGBUILD
new file mode 100644
index 0000000..c71b2de
--- /dev/null
+++ b/abs/core/recordproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=recordproto
+pkgver=1.13.2
+pkgrel=1
+pkgdesc="X11 Record extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0ed4706564a34fc2aff724aa16d3ff00')
+sha1sums=('833ef2bc4b084281f85eeba5d4ba03441bd3a534')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/reiserfsprogs/PKGBUILD b/abs/core/reiserfsprogs/PKGBUILD
new file mode 100644
index 0000000..6e3cb6d
--- /dev/null
+++ b/abs/core/reiserfsprogs/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=reiserfsprogs
+pkgver=3.6.20
+pkgrel=12
+pkgdesc="Reiserfs utilities"
+arch=(i686 x86_64)
+url="http://www.namesys.com"
+license=('GPL')
+groups=('base')
+depends=('e2fsprogs')
+source=(ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz
+ #namesys server is down atm
+ #ftp://ftp.namesys.com/pub/$pkgname/$pkgname-$pkgver.tar.gz
+)
+md5sums=('3b3392f59c5d302cf858bc4cf194b258')
+
+build() {
+ export MAKEFLAGS="-j1"
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ mv $startdir/pkg/usr/sbin $startdir/pkg
+ #ln -s reiserfsck $startdir/pkg/sbin/fsck.reiserfs
+}
diff --git a/abs/core/renderproto/PKGBUILD b/abs/core/renderproto/PKGBUILD
new file mode 100644
index 0000000..8d140d3
--- /dev/null
+++ b/abs/core/renderproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=renderproto
+pkgver=0.9.3
+pkgrel=1
+pkgdesc="X11 Render extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('598bc9a493deee2e48e4434e94467189')
diff --git a/abs/core/rp-pppoe/PKGBUILD b/abs/core/rp-pppoe/PKGBUILD
new file mode 100644
index 0000000..1b4724d
--- /dev/null
+++ b/abs/core/rp-pppoe/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 5374 2008-07-15 17:18:23Z daniel $
+# Contributor: orelien <aurelien.foret@wanadoo.fr>
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=rp-pppoe
+pkgver=3.10
+pkgrel=10
+pkgdesc="Roaring Penguin's Point-to-Point Protocol over Ethernet client"
+arch=(i686 x86_64)
+url="http://www.roaringpenguin.com/pppoe/"
+license=('GPL')
+groups=('base')
+depends=('ppp')
+options=('!makeflags')
+backup=(etc/ppp/pppoe.conf etc/ppp/firewall-standalone etc/ppp/firewall-masq etc/ppp/pppoe-server-options)
+source=(http://www.roaringpenguin.com/files/download/rp-pppoe-$pkgver.tar.gz adsl)
+md5sums=('d58a13cc4185bca6121a606ff456dec0'
+ 'adace1ad441aa88dcb3db52fb7f9c97f')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver/src
+ ./configure --prefix=/usr --enable-plugin=/ppp-2.4.4
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -m755 -D ../../adsl $startdir/pkg/etc/rc.d/adsl
+}
diff --git a/abs/core/rp-pppoe/adsl b/abs/core/rp-pppoe/adsl
new file mode 100755
index 0000000..33bd918
--- /dev/null
+++ b/abs/core/rp-pppoe/adsl
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting ADSL Connection"
+ /usr/sbin/pppoe-start &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon adsl
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping ADSL Connection"
+ /usr/sbin/pppoe-stop &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon adsl
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/rt2500/PKGBUILD b/abs/core/rt2500/PKGBUILD
new file mode 100644
index 0000000..67798b6
--- /dev/null
+++ b/abs/core/rt2500/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=rt2500
+_kernver=2.6.26-ARCH
+pkgver=1.1.0_B4
+_pkgver=1.1.0-b4
+pkgrel=24
+pkgdesc="Drivers for rt2500 chipset wireless cards"
+url="http://rt2x00.serialmonkey.com/wiki/index.php/Main_Page"
+license=('GPL2')
+depends=('kernel26>=2.6.26-1' 'kernel26<2.6.27')
+arch=('i686' 'x86_64')
+install=rt2500.install
+source=(http://downloads.sourceforge.net/sourceforge/rt2400/rt2500-${_pkgver}.tar.gz \
+ kernel-2.6.22.patch kernel-2.6.24.patch)
+md5sums=('83b8b9a091705c08d99268479f3b3b6a'
+ 'a74f8e9cbba7b29620f11fba8fd7c50d'
+ 'ccf0da667cc6642dacf39dea1aac254f')
+
+build() {
+ cd $startdir/src/rt2500-$_pkgver/
+ patch -Np1 -i ../kernel-2.6.22.patch || return 1
+ patch -Np1 -i ../kernel-2.6.24.patch || return 1
+ cd $startdir/src/rt2500-$_pkgver/Module
+ make KERNDIR=/lib/modules/$_kernver/build || return 1
+ install -D -m 644 rt2500.ko $startdir/pkg/lib/modules/$_kernver/kernel/drivers/net/wireless/rt2500.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core/rt2500/kernel-2.6.22.patch b/abs/core/rt2500/kernel-2.6.22.patch
new file mode 100644
index 0000000..530bf0a
--- /dev/null
+++ b/abs/core/rt2500/kernel-2.6.22.patch
@@ -0,0 +1,24125 @@
+diff -Nur rt2500-1.1.0-b4/CHANGELOG rt2500-cvs-2007061011/CHANGELOG
+--- rt2500-1.1.0-b4/CHANGELOG 2006-06-17 22:12:57.000000000 +0200
++++ rt2500-cvs-2007061011/CHANGELOG 2007-06-08 20:09:53.000000000 +0200
+@@ -1,28 +1,40 @@
+-/***************************************************************************
+- * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net *
+- * *
+- * 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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2003. *
++/***************************************************************************
++ * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net *
++ * *
++ * 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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2003. *
+ ***************************************************************************/
+-
++
+ Changelog for 802.11g rt2500 driver and RAConfig2500 Utility
+
+- Version: 1.1.0-beta4
++ Version: CVS
++ * Forward compatibility with kernel 2.6.22 pci bus driver i/f changes
++ and skbuff changes.
++ * SIOCGIWSCAN returns EAGAIN until all channels scanned.
++ * More cruft removal.
++ * Updated base code to Ralink 1.4.6.6 driver version.
++ * In-kernel compile support (Bug #1642144): Declare debug var
++ as static. Implement as bit mask.
++ * Fix to WPA RSN IE mismatched bug
++ * Compatibility fixes for kernels >= 2.6.19
++ * Fix essid truncation on kernels >= 2.6.19
++
++ Version: 1.1.0-beta4
+ * Fix pre-up config panic (1307957)
+ * Fix noise levels in scan results (1246025)
+ * RFMON TX Support for aircrack
+@@ -31,9 +43,9 @@
+ * Promisc/Monitor code missing node->AP packets (1009565)
+ * Channel set in RFMON before ifup now works (1254806)
+ * Fixes for suspend/resume
+- * Enhancement for RaConfig to support non-ra? interfaces
++ * Enhancement for RaConfig to support non-ra? interfaces
+ * Channel list updates after region change
+- * TxPower changes to support dBm values
++ * TxPower changes to support dBm values
+ * Pre-up panic for setting WirelessMode
+ * Cleanup of iwpriv syntax
+ * Fixes for SMP support (1099089)
+@@ -47,7 +59,7 @@
+ * Power Saving Modes (1159331)
+ * Bridging with other interfaces
+
+- Version: 1.1.0-beta3
++ Version: 1.1.0-beta3
+ * PCI Management Cleanup
+ * Fix for RaConfig crashing on statistics (ChrisH)
+ * Big-Endian fix for RaConfig
+@@ -63,15 +75,15 @@
+ * Fix iwconfig - Link Quality(means Channel Quality), Signal level and Noise level.
+ * Fix iwlist ra0 channel - print out
+
+- Version: 1.1.0-beta2
++ Version: 1.1.0-beta2
+ * Removed Kernel tainting
+ * Updated all file headers for this project
+ * kmalloc stability fixes to the MLME
+ * Cleanup on memory management functions (NDisFill/Move/Zero)
+ * Rollin of Robin Cornelius RFMon Patch
+ * RFMon support through iwconfig mode
+- * Debugging and general logging cleanups
+- * Rolling of changes in Ralink 1.4.5.0 release
++ * Debugging and general logging cleanups
++ * Rolling of changes in Ralink 1.4.5.0 release
+ * Debug switching
+ * Spinlock changes for stability
+ * GCC 3.4 compilation
+@@ -86,5 +98,5 @@
+
+ Version: 1.0.0
+ * Initial baseline code from Ralink (1.4.4.0)
+-
+-
++
++
+diff -Nur rt2500-1.1.0-b4/LICENSE rt2500-cvs-2007061011/LICENSE
+--- rt2500-1.1.0-b4/LICENSE 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/LICENSE 2007-05-29 05:57:52.000000000 +0200
+@@ -1,340 +1,340 @@
+- GNU GENERAL PUBLIC LICENSE
+- Version 2, June 1991
+-
+- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- Everyone is permitted to copy and distribute verbatim copies
+- of this license document, but changing it is not allowed.
+-
+- Preamble
+-
+- The licenses for most software are designed to take away your
+-freedom to share and change it. By contrast, the GNU General Public
+-License is intended to guarantee your freedom to share and change free
+-software--to make sure the software is free for all its users. This
+-General Public License applies to most of the Free Software
+-Foundation's software and to any other program whose authors commit to
+-using it. (Some other Free Software Foundation software is covered by
+-the GNU Library General Public License instead.) You can apply it to
+-your programs, too.
+-
+- When we speak of free software, we are referring to freedom, not
+-price. Our General Public Licenses are designed to make sure that you
+-have the freedom to distribute copies of free software (and charge for
+-this service if you wish), that you receive source code or can get it
+-if you want it, that you can change the software or use pieces of it
+-in new free programs; and that you know you can do these things.
+-
+- To protect your rights, we need to make restrictions that forbid
+-anyone to deny you these rights or to ask you to surrender the rights.
+-These restrictions translate to certain responsibilities for you if you
+-distribute copies of the software, or if you modify it.
+-
+- For example, if you distribute copies of such a program, whether
+-gratis or for a fee, you must give the recipients all the rights that
+-you have. You must make sure that they, too, receive or can get the
+-source code. And you must show them these terms so they know their
+-rights.
+-
+- We protect your rights with two steps: (1) copyright the software, and
+-(2) offer you this license which gives you legal permission to copy,
+-distribute and/or modify the software.
+-
+- Also, for each author's protection and ours, we want to make certain
+-that everyone understands that there is no warranty for this free
+-software. If the software is modified by someone else and passed on, we
+-want its recipients to know that what they have is not the original, so
+-that any problems introduced by others will not reflect on the original
+-authors' reputations.
+-
+- Finally, any free program is threatened constantly by software
+-patents. We wish to avoid the danger that redistributors of a free
+-program will individually obtain patent licenses, in effect making the
+-program proprietary. To prevent this, we have made it clear that any
+-patent must be licensed for everyone's free use or not licensed at all.
+-
+- The precise terms and conditions for copying, distribution and
+-modification follow.
+-
+- GNU GENERAL PUBLIC LICENSE
+- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+-
+- 0. This License applies to any program or other work which contains
+-a notice placed by the copyright holder saying it may be distributed
+-under the terms of this General Public License. The "Program", below,
+-refers to any such program or work, and a "work based on the Program"
+-means either the Program or any derivative work under copyright law:
+-that is to say, a work containing the Program or a portion of it,
+-either verbatim or with modifications and/or translated into another
+-language. (Hereinafter, translation is included without limitation in
+-the term "modification".) Each licensee is addressed as "you".
+-
+-Activities other than copying, distribution and modification are not
+-covered by this License; they are outside its scope. The act of
+-running the Program is not restricted, and the output from the Program
+-is covered only if its contents constitute a work based on the
+-Program (independent of having been made by running the Program).
+-Whether that is true depends on what the Program does.
+-
+- 1. You may copy and distribute verbatim copies of the Program's
+-source code as you receive it, in any medium, provided that you
+-conspicuously and appropriately publish on each copy an appropriate
+-copyright notice and disclaimer of warranty; keep intact all the
+-notices that refer to this License and to the absence of any warranty;
+-and give any other recipients of the Program a copy of this License
+-along with the Program.
+-
+-You may charge a fee for the physical act of transferring a copy, and
+-you may at your option offer warranty protection in exchange for a fee.
+-
+- 2. You may modify your copy or copies of the Program or any portion
+-of it, thus forming a work based on the Program, and copy and
+-distribute such modifications or work under the terms of Section 1
+-above, provided that you also meet all of these conditions:
+-
+- a) You must cause the modified files to carry prominent notices
+- stating that you changed the files and the date of any change.
+-
+- b) You must cause any work that you distribute or publish, that in
+- whole or in part contains or is derived from the Program or any
+- part thereof, to be licensed as a whole at no charge to all third
+- parties under the terms of this License.
+-
+- c) If the modified program normally reads commands interactively
+- when run, you must cause it, when started running for such
+- interactive use in the most ordinary way, to print or display an
+- announcement including an appropriate copyright notice and a
+- notice that there is no warranty (or else, saying that you provide
+- a warranty) and that users may redistribute the program under
+- these conditions, and telling the user how to view a copy of this
+- License. (Exception: if the Program itself is interactive but
+- does not normally print such an announcement, your work based on
+- the Program is not required to print an announcement.)
+-
+-These requirements apply to the modified work as a whole. If
+-identifiable sections of that work are not derived from the Program,
+-and can be reasonably considered independent and separate works in
+-themselves, then this License, and its terms, do not apply to those
+-sections when you distribute them as separate works. But when you
+-distribute the same sections as part of a whole which is a work based
+-on the Program, the distribution of the whole must be on the terms of
+-this License, whose permissions for other licensees extend to the
+-entire whole, and thus to each and every part regardless of who wrote it.
+-
+-Thus, it is not the intent of this section to claim rights or contest
+-your rights to work written entirely by you; rather, the intent is to
+-exercise the right to control the distribution of derivative or
+-collective works based on the Program.
+-
+-In addition, mere aggregation of another work not based on the Program
+-with the Program (or with a work based on the Program) on a volume of
+-a storage or distribution medium does not bring the other work under
+-the scope of this License.
+-
+- 3. You may copy and distribute the Program (or a work based on it,
+-under Section 2) in object code or executable form under the terms of
+-Sections 1 and 2 above provided that you also do one of the following:
+-
+- a) Accompany it with the complete corresponding machine-readable
+- source code, which must be distributed under the terms of Sections
+- 1 and 2 above on a medium customarily used for software interchange; or,
+-
+- b) Accompany it with a written offer, valid for at least three
+- years, to give any third party, for a charge no more than your
+- cost of physically performing source distribution, a complete
+- machine-readable copy of the corresponding source code, to be
+- distributed under the terms of Sections 1 and 2 above on a medium
+- customarily used for software interchange; or,
+-
+- c) Accompany it with the information you received as to the offer
+- to distribute corresponding source code. (This alternative is
+- allowed only for noncommercial distribution and only if you
+- received the program in object code or executable form with such
+- an offer, in accord with Subsection b above.)
+-
+-The source code for a work means the preferred form of the work for
+-making modifications to it. For an executable work, complete source
+-code means all the source code for all modules it contains, plus any
+-associated interface definition files, plus the scripts used to
+-control compilation and installation of the executable. However, as a
+-special exception, the source code distributed need not include
+-anything that is normally distributed (in either source or binary
+-form) with the major components (compiler, kernel, and so on) of the
+-operating system on which the executable runs, unless that component
+-itself accompanies the executable.
+-
+-If distribution of executable or object code is made by offering
+-access to copy from a designated place, then offering equivalent
+-access to copy the source code from the same place counts as
+-distribution of the source code, even though third parties are not
+-compelled to copy the source along with the object code.
+-
+- 4. You may not copy, modify, sublicense, or distribute the Program
+-except as expressly provided under this License. Any attempt
+-otherwise to copy, modify, sublicense or distribute the Program is
+-void, and will automatically terminate your rights under this License.
+-However, parties who have received copies, or rights, from you under
+-this License will not have their licenses terminated so long as such
+-parties remain in full compliance.
+-
+- 5. You are not required to accept this License, since you have not
+-signed it. However, nothing else grants you permission to modify or
+-distribute the Program or its derivative works. These actions are
+-prohibited by law if you do not accept this License. Therefore, by
+-modifying or distributing the Program (or any work based on the
+-Program), you indicate your acceptance of this License to do so, and
+-all its terms and conditions for copying, distributing or modifying
+-the Program or works based on it.
+-
+- 6. Each time you redistribute the Program (or any work based on the
+-Program), the recipient automatically receives a license from the
+-original licensor to copy, distribute or modify the Program subject to
+-these terms and conditions. You may not impose any further
+-restrictions on the recipients' exercise of the rights granted herein.
+-You are not responsible for enforcing compliance by third parties to
+-this License.
+-
+- 7. If, as a consequence of a court judgment or allegation of patent
+-infringement or for any other reason (not limited to patent issues),
+-conditions are imposed on you (whether by court order, agreement or
+-otherwise) that contradict the conditions of this License, they do not
+-excuse you from the conditions of this License. If you cannot
+-distribute so as to satisfy simultaneously your obligations under this
+-License and any other pertinent obligations, then as a consequence you
+-may not distribute the Program at all. For example, if a patent
+-license would not permit royalty-free redistribution of the Program by
+-all those who receive copies directly or indirectly through you, then
+-the only way you could satisfy both it and this License would be to
+-refrain entirely from distribution of the Program.
+-
+-If any portion of this section is held invalid or unenforceable under
+-any particular circumstance, the balance of the section is intended to
+-apply and the section as a whole is intended to apply in other
+-circumstances.
+-
+-It is not the purpose of this section to induce you to infringe any
+-patents or other property right claims or to contest validity of any
+-such claims; this section has the sole purpose of protecting the
+-integrity of the free software distribution system, which is
+-implemented by public license practices. Many people have made
+-generous contributions to the wide range of software distributed
+-through that system in reliance on consistent application of that
+-system; it is up to the author/donor to decide if he or she is willing
+-to distribute software through any other system and a licensee cannot
+-impose that choice.
+-
+-This section is intended to make thoroughly clear what is believed to
+-be a consequence of the rest of this License.
+-
+- 8. If the distribution and/or use of the Program is restricted in
+-certain countries either by patents or by copyrighted interfaces, the
+-original copyright holder who places the Program under this License
+-may add an explicit geographical distribution limitation excluding
+-those countries, so that distribution is permitted only in or among
+-countries not thus excluded. In such case, this License incorporates
+-the limitation as if written in the body of this License.
+-
+- 9. The Free Software Foundation may publish revised and/or new versions
+-of the General Public License from time to time. Such new versions will
+-be similar in spirit to the present version, but may differ in detail to
+-address new problems or concerns.
+-
+-Each version is given a distinguishing version number. If the Program
+-specifies a version number of this License which applies to it and "any
+-later version", you have the option of following the terms and conditions
+-either of that version or of any later version published by the Free
+-Software Foundation. If the Program does not specify a version number of
+-this License, you may choose any version ever published by the Free Software
+-Foundation.
+-
+- 10. If you wish to incorporate parts of the Program into other free
+-programs whose distribution conditions are different, write to the author
+-to ask for permission. For software which is copyrighted by the Free
+-Software Foundation, write to the Free Software Foundation; we sometimes
+-make exceptions for this. Our decision will be guided by the two goals
+-of preserving the free status of all derivatives of our free software and
+-of promoting the sharing and reuse of software generally.
+-
+- NO WARRANTY
+-
+- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+-REPAIR OR CORRECTION.
+-
+- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+-POSSIBILITY OF SUCH DAMAGES.
+-
+- END OF TERMS AND CONDITIONS
+-
+- How to Apply These Terms to Your New Programs
+-
+- If you develop a new program, and you want it to be of the greatest
+-possible use to the public, the best way to achieve this is to make it
+-free software which everyone can redistribute and change under these terms.
+-
+- To do so, attach the following notices to the program. It is safest
+-to attach them to the start of each source file to most effectively
+-convey the exclusion of warranty; and each file should have at least
+-the "copyright" line and a pointer to where the full notice is found.
+-
+- &lt;one line to give the program's name and a brief idea of what it does.&gt;
+- Copyright (C) &lt;year&gt; &lt;name of author&gt;
+-
+- 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
+-
+-
+-Also add information on how to contact you by electronic and paper mail.
+-
+-If the program is interactive, make it output a short notice like this
+-when it starts in an interactive mode:
+-
+- Gnomovision version 69, Copyright (C) year name of author
+- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+- This is free software, and you are welcome to redistribute it
+- under certain conditions; type `show c' for details.
+-
+-The hypothetical commands `show w' and `show c' should show the appropriate
+-parts of the General Public License. Of course, the commands you use may
+-be called something other than `show w' and `show c'; they could even be
+-mouse-clicks or menu items--whatever suits your program.
+-
+-You should also get your employer (if you work as a programmer) or your
+-school, if any, to sign a "copyright disclaimer" for the program, if
+-necessary. Here is a sample; alter the names:
+-
+- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+- `Gnomovision' (which makes passes at compilers) written by James Hacker.
+-
+- &lt;signature of Ty Coon&gt;, 1 April 1989
+- Ty Coon, President of Vice
+-
+-This General Public License does not permit incorporating your program into
+-proprietary programs. If your program is a subroutine library, you may
+-consider it more useful to permit linking proprietary applications with the
+-library. If this is what you want to do, use the GNU Library General
++ GNU GENERAL PUBLIC LICENSE
++ Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users. This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it. (Some other Free Software Foundation software is covered by
++the GNU Library General Public License instead.) You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++ To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have. You must make sure that they, too, receive or can get the
++source code. And you must show them these terms so they know their
++rights.
++
++ We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++ Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software. If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++ Finally, any free program is threatened constantly by software
++patents. We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary. To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ GNU GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License. The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language. (Hereinafter, translation is included without limitation in
++the term "modification".) Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++ 1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++ 2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) You must cause the modified files to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ b) You must cause any work that you distribute or publish, that in
++ whole or in part contains or is derived from the Program or any
++ part thereof, to be licensed as a whole at no charge to all third
++ parties under the terms of this License.
++
++ c) If the modified program normally reads commands interactively
++ when run, you must cause it, when started running for such
++ interactive use in the most ordinary way, to print or display an
++ announcement including an appropriate copyright notice and a
++ notice that there is no warranty (or else, saying that you provide
++ a warranty) and that users may redistribute the program under
++ these conditions, and telling the user how to view a copy of this
++ License. (Exception: if the Program itself is interactive but
++ does not normally print such an announcement, your work based on
++ the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++ a) Accompany it with the complete corresponding machine-readable
++ source code, which must be distributed under the terms of Sections
++ 1 and 2 above on a medium customarily used for software interchange; or,
++
++ b) Accompany it with a written offer, valid for at least three
++ years, to give any third party, for a charge no more than your
++ cost of physically performing source distribution, a complete
++ machine-readable copy of the corresponding source code, to be
++ distributed under the terms of Sections 1 and 2 above on a medium
++ customarily used for software interchange; or,
++
++ c) Accompany it with the information you received as to the offer
++ to distribute corresponding source code. (This alternative is
++ allowed only for noncommercial distribution and only if you
++ received the program in object code or executable form with such
++ an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it. For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable. However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License. Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++ 5. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Program or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++ 6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++ 7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all. For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded. In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++ 9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation. If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++ 10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission. For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this. Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++ NO WARRANTY
++
++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ &lt;one line to give the program's name and a brief idea of what it does.&gt;
++ Copyright (C) &lt;year&gt; &lt;name of author&gt;
++
++ 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
++
++
++Also add information on how to contact you by electronic and paper mail.
++
++If the program is interactive, make it output a short notice like this
++when it starts in an interactive mode:
++
++ Gnomovision version 69, Copyright (C) year name of author
++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, the commands you use may
++be called something other than `show w' and `show c'; they could even be
++mouse-clicks or menu items--whatever suits your program.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the program, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
++ `Gnomovision' (which makes passes at compilers) written by James Hacker.
++
++ &lt;signature of Ty Coon&gt;, 1 April 1989
++ Ty Coon, President of Vice
++
++This General Public License does not permit incorporating your program into
++proprietary programs. If your program is a subroutine library, you may
++consider it more useful to permit linking proprietary applications with the
++library. If this is what you want to do, use the GNU Library General
+ Public License instead of this License.
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/Makefile rt2500-cvs-2007061011/Module/Makefile
+--- rt2500-1.1.0-b4/Module/Makefile 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/Makefile 2007-05-29 05:54:38.000000000 +0200
+@@ -1,39 +1,39 @@
+-###########################################################################
+-# RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. #
+-# #
+-# Licensed under the GNU GPL #
+-# Original code supplied under license from RaLink Inc, 2004. #
+-###########################################################################
+-
+-###########################################################################
+-# Module Name: Makefile
+-#
+-# Abstract: Makefile for rt2500 kernel module
+-#
+-# Revision History:
+-# Who When What
+-# -------- ----------- -----------------------------
+-# MarkW 8th Dec 04 Rewrite of Makefile
++###########################################################################
++# RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. #
++# #
++# Licensed under the GNU GPL #
++# Original code supplied under license from RaLink Inc, 2004. #
++###########################################################################
++
++###########################################################################
++# Module Name: Makefile
++#
++# Abstract: Makefile for rt2500 kernel module
++#
++# Revision History:
++# Who When What
++# -------- ----------- -----------------------------
++# MarkW 8th Dec 04 Rewrite of Makefile
+ # AmirS 1st Jan 05 Update for gmake compat
+ # MarkW 20th Jan 05 Fixed permissions on directory
+ # MichalL 5th Mar 05 Module installation fixes
+ # MarkW 29th Jul 05 Allow install dir override
+-###########################################################################
++###########################################################################
+
+
+
+@@ -41,7 +41,7 @@
+
+ MODULE_NAME := rt2500
+
+-#PATCHLEVEL := 6
++#PATCHLEVEL := 6
+ #KERNDIR=/usr/src/linux-2.6
+ #MODDIR=/lib/modules/2.6.12/extra
+
+@@ -94,7 +94,7 @@
+ $(LD) $(EXTRA_LDFLAGS) -r -o $@ $($(MODULE_NAME)-objs)
+ endif
+
+-KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(PWD) $(KERNEL_OUTPUT)
++KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(CURDIR) $(KERNEL_OUTPUT)
+
+ module:
+ @$(MAKE) $(KBUILD_PARAMS) modules; \
+@@ -110,22 +110,29 @@
+ exit 1; \
+ fi
+
++debugfs:
++ @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=-I$(src) -DRT2500_DBG -DRT2X00DEBUGFS' modules; \
++ if ! [ -f $(MODULE_OBJECT) ]; then \
++ echo "$(MODULE_OBJECT) failed to build!"; \
++ exit 1; \
++ fi
++
+ clean:
+ @rm -f $(RESMAN_GLUE_OBJS) $(RESMAN_CORE_OBJS) .*.{cmd,flags}
+ @rm -f $(MODULE_NAME).{o,ko,mod.{o,c}} built-in.o $(VERSION_HEADER) *~
+- @rm -fr .tmp_versions
++ @rm -fr .tmp_versions Module.symvers
+
+ modules_install:
+-ifeq ($(PATCHLEVEL),4)
+- if ! [ -f $(MODULE_OBJECT) ]; then \
+- module; \
++ @if ! [ -f $(MODULE_OBJECT) ]; then \
++ $(MAKE) module; \
+ fi
++ifeq ($(PATCHLEVEL),4)
+ @echo "install '$(MODULE_OBJECT)' to $(MODULE_ROOT)"
+ install -m 755 -o 0 -g 0 -d $(MODULE_ROOT)
+ install -m 644 -o 0 -g 0 $(MODULE_OBJECT) $(MODULE_ROOT)
+- /sbin/depmod -a
++ /sbin/depmod -ae
+ else
+- echo "2.6 module install"
++ @echo "2.6 module install"
+ make $(KBUILD_PARAMS) modules_install
+ /sbin/depmod -a
+ endif
+@@ -144,7 +151,7 @@
+ install -m 755 -o 0 -g 0 -d $(MODULE_ROOT)
+ install -m 644 -o 0 -g 0 $(MODULE_OBJECT) $(MODULE_ROOT)
+ /sbin/depmod -a
+-
++
+ @if ! grep -q 'wlan0' /etc/modprobe.conf ; then \
+ echo "append 'alias wlan0 rt2500' to /etc/modprobe.conf"; \
+ echo "alias wlan0 rt2500" >> /etc/modprobe.conf ; \
+diff -Nur rt2500-1.1.0-b4/Module/README rt2500-cvs-2007061011/Module/README
+--- rt2500-1.1.0-b4/Module/README 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/README 2007-05-29 05:54:39.000000000 +0200
+@@ -1,7 +1,7 @@
+ Installation instructions for the rt2500 Module
+
+ ======================================================================
+-Build Instructions:
++Build Instructions:
+ ====================
+ For 2.4 or 2.6 series kernel:
+ a. $tar -xvzf rt2500-x.x.x.tar.gz
+@@ -9,10 +9,10 @@
+
+ b. $make # compile driver source code
+
+-c. $make install # installs kernel module driver
++c. $make install # installs kernel module driver
++
++(read end of file for FedoraCore3 specific information)
+
+-(read end of file for FedoraCore3 specific information)
+-
+ ======================================================================
+ To BUILD UTILITY
+ ====================
+@@ -21,26 +21,26 @@
+
+ b. run 'qmake -o Makefile raconfig2500.pro'
+ If qmake command is not found in your system, you can download
+- the QT tool 'qt-x11-free-3.2.1' or later at
++ the QT tool 'qt-x11-free-3.2.1' or later at
+ http://www.trolltech.com/
+-
+- (qmake comes with RedHat 7.3 or later QT Package)
++
++ (qmake comes with RedHat 7.3 or later QT Package)
+
+ c. run 'make" to compile the utility source code.
+-
++
+ d. After all, an execution file would be generated "RaConfig2500"
+ run "RaConfig2500" to config the driver as you want
+
+
+
+ ======================================================================
+-CONFIGURATION:
++CONFIGURATION:
+ ====================
+-RT2500 driver can be configured via following interfaces,
++RT2500 driver can be configured via following interfaces,
+ i.e. (i)"iwconfig" command, (ii)"iwpriv" command, (iii) configuration
+ file, (iv) RaConfig2500
+
+-i) iwconfig comes with kernel.
++i) iwconfig comes with kernel.
+ ii) iwpriv usage, please refer to file "iwpriv_usage.txt" for details.
+ iii)copy configuration file "RT2500STA.dat" to
+ /etc/Wireless/RT2500STA/RT2500STA.dat.
+@@ -48,7 +48,7 @@
+ iv) RT2500 provides API : RaConfig2500, please go to directory
+ ./Utility and refer to how-to-compile.txt
+
+-
++
+ Configuration File : RT2500STA.dat
+
+ # Copy this file to /etc/Wireless/RT2500STA/RT2500STA.dat
+@@ -56,7 +56,7 @@
+ # module.
+ #
+ # Use "vi -b RT2500STA.dat" to modify settings according to your need.
+-#
++#
+ # 1.) set NetworkType to "Adhoc" for using Adhoc-mode, otherwise
+ # using as Infrastructure-mode.
+ # 2.) set Channel to "0" for auto-select on Infrastructure mode.
+@@ -94,7 +94,7 @@
+ FragThreshold=2312
+ PSMode=CAM
+ -----------------------------------------------
+-syntax is 'Param'='Value' and described below.
++syntax is 'Param'='Value' and described below.
+
+ 1. CountryRegion=value
+ value
+@@ -125,13 +125,14 @@
+ OPEN For Open System
+ SHARED For Shared key system
+ AUTO
+- WPAPSK
++ WPANONE For pre-shared key in adhoc mode
++ WPAPSK For pre-shared key in infrastructure mode
+ 7. EncrypType=value
+ value
+ NONE :For AuthMode=OPEN
+ WEP :For AuthMode=OPEN or AuthMode=SHARED
+- TKIP :For AuthMode=WPAPSK
+- AES :For AuthMode=WPAPSK
++ TKIP :For AuthMode=WPAPSK or AuthMode=WPANONE
++ AES :For AuthMode=WPAPSK or AuthMode=WPANONE
+ 8. DefaultKeyID=value
+ value
+ 1 ~ 4
+@@ -189,7 +190,7 @@
+ 1: 1 Mbps
+ 2: 2 Mbps
+ 3: 5.5 Mbps
+- 4: 11 Mbps
++ 4: 11 Mbps
+ 5: 6 Mbps //WirelessMode must be 0
+ 6: 9 Mbps //WirelessMode must be 0
+ 7: 12 Mbps //WirelessMode must be 0
+@@ -210,13 +211,13 @@
+
+ 23. AdhocOfdm=value
+ value
+- 0: Tx MAX rate will be 11Mbps in Adhoc mode.
+- 1: Tx MAX rate will be 54Mbps in Adhoc mode.
++ 0: Tx MAX rate will be 11Mbps in Adhoc mode.
++ 1: Tx MAX rate will be 54Mbps in Adhoc mode.
+
+ 24. StaWithEtherBridge=value
+ value
+- 0: Disable sta with ethernet to wireless bridge.
+- 1: Enable sta with ethernet to wireless bridge.
++ 0: Disable sta with ethernet to wireless bridge.
++ 1: Enable sta with ethernet to wireless bridge.
+
+
+ MORE INFORMATION
+@@ -224,25 +225,25 @@
+ If you want for rt2500 driver to auto-load at boot time:
+ A) choose ra0 for first RT2500 WLAN card, ra1 for second RT2500 WLAN
+ card, etc.
+-
+-B) create(edit) 'ifcfg-ra0' file in /etc/sysconfig/network-scripts/,
++
++B) create(edit) 'ifcfg-ra0' file in /etc/sysconfig/network-scripts/,
+ edit( or add the line) in /etc/modules.conf:
+- alias ra0 rt2500
+-
+-C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-ra0
++ alias ra0 rt2500
++
++C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-ra0
+ DEVICE='ra0'
+- ONBOOT='yes'
++ ONBOOT='yes'
+
+
+ NOTE:
+ if you use dhcp, add this line too .
+ BOOTPROTO='dhcp'
+
+-*D) To ease the Default Gateway setting,
++*D) To ease the Default Gateway setting,
+ add the line
+- GATEWAY=x.x.x.x
++ GATEWAY=x.x.x.x
+ in /etc/sysconfig/network
+-
++
+ INFORMATION FOR FEDORA CORE 3 USERS (USE AT YOUR OWN RISK !!!)
+ ======================================================================
+ While this information is directed to Fedora Core 3 users, there is no
+@@ -267,8 +268,8 @@
+ alias added to modprobe.conf (2.6 kernels) or modules.conf
+ (2.4 kernels).
+
+-Start 'system-config-network',
+-New->Wireless connection,
++Start 'system-config-network',
++New->Wireless connection,
+ Select 'RaLink Ralink RT2500 802.11 Cardbus Reference Card (wlan0)'
+ If it does not appear, well then it didn't work for you :)
+
+diff -Nur rt2500-1.1.0-b4/Module/TESTING rt2500-cvs-2007061011/Module/TESTING
+--- rt2500-1.1.0-b4/Module/TESTING 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/TESTING 2007-05-29 05:54:39.000000000 +0200
+@@ -1,51 +1,63 @@
+-Below is information on how you can help out the team with testing
+-of the rt2500 kernel module.
++Below are the steps you need to follow to help out the team with
++testing/debugging of the rt2500 kernel module:
+
+-1. Get the latest source from the CVS tree. Easiest way todo this is to
+-get the nightly tarball from our website at
+- http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz
+-
+-2. Enable module debugging. Todo this run 'make clean' to remove any
+-compiled objects you have and then run 'make debug'.
+-This will recompile the Module with debugging turned on and reinstall
+-it over your existing module.
+-
+-3. Install the module as per the INSTALL instructions.
+- e.g. make install
+-
+-4. Ensure there are no compies of the module in memory.
+- ifconfig ra0 down
+- rmmod rt2500
+-
+-5. Load the module with full debug enabled using the commands
+- modprobe rt2500 debug=1
+-
+-6. Check the output of your syslog (most likely /var/log/messages).
+-If you don't see any debug you need to add the following line to
+-your /etc/syslog.conf and reboot.
+- kern.* /var/log/debug
+-
+-7. Any bugs/issues you find please report the following information
+-to the rt2400-devel mailing list
+- * Steps to reproduce
+- * The whole contents of your debugging output
+- * Your hardware architecture (i.e. x86, AMD64, Sparc)
+- * Your kernel version (i.e. 2.4.25 or 2.6.4)
+- * Your rt2400 hardware manufacturer and model
+- * Anything else you may think will help us resolve the issue
+- (even a patch if you are so inclined)
+-
+-8. Sign up to the rt2400-devel mailing list and watch out for requests
+-for testing. Whenever we do major changes to the source and always
+-just before a release we will call for testing to be done before we
+-make the general release.
++
++1. Get the latest source from the CVS tree.
++ Easiest way to do this is to download the hourly tarball from our website:
++ http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz
++ Alternatively, you can anonymously check out the current CVS code:
++ $ cvs -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 login
++ $ cvs -z3 -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 \
++ co -P source/rt2500
++
++2. Compile the module with debug logging:
++ $ make clean
++ $ make debug
++
++3. Ensure there are no copies of the module left in memory:
++ # ifconfig ra0 down
++ # rmmod rt2500
++
++4. Load the module with full debug enabled:
++ # insmod rt2500.ko debug=31
++ Then proceed as usual (config, ifup, etc)...
++
++5. Check the debug output.
++ It is located in your system log file (most likely /var/log/debug or
++ /var/log/syslog). If you don't see any debug you probably need to add the
++ following line to your /etc/syslog.conf and reboot:
++ kern.=debug /var/log/debug
++ If you system hard-locks before it's able to log anything interesting
++ in these files, you'll have to rely on the netconsole module to remotely
++ log your kernel messages to another box (see netconsole.txt in your
++ kernel sources Documentation folder).
++
++6. Report the following to the rt2400-devel mailing list (or rt2500 forum):
++ * Steps to reproduce the bug
++ * The _whole_content_ of your debugging output
++ * Your module details, i.e. the output of:
++ # modinfo rt2500.ko
++ * Your kernel details, i.e. the output of:
++ $ uname -a
++ * Your rt2500 hardware manufacturer, model and revision
++ * Anything else you think may help us resolve the issue (even a patch if
++ you are so inclined)
++
++7. Monitor the mailing list (or forum thread) for replies/further queries. :-)
++
++
++Whenever we do major changes to the source - and always just before a release -
++we will call for testing to be done before we make the general release. You're
++very much welcome to help us with this testing and report any success/issue you
++experience with this code.
+
+
+ !!!! NOTE !!!!
+
+-AS PER STEP 7 ABOVE. Please provide the whole debug output. The last
+-few lines are hardly any good. If it's large (which it will be) then
+-GZip it and either upload it somewhere and give it a link or email
+-it directly to the developer you are working with.
++AS PER STEP 6 ABOVE: Please provide the *whole* debug output! The last few lines
++are hardly any good.
++If it's large (which it will be) then GZip it. Either attach it to your forum
++post or, if you're going to report via the mailing list, upload it somewhere and
++give a link to it (or email it directly to the developer you are working with).
+
+-!!!! END NOTE !!!!
++!!!! END NOTE !!!!
+diff -Nur rt2500-1.1.0-b4/Module/assoc.c rt2500-cvs-2007061011/Module/assoc.c
+--- rt2500-1.1.0-b4/Module/assoc.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/assoc.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: assoc.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: assoc.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 5th Jun 05 Fix no-SSID broadcasting assoc.
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -78,15 +78,15 @@
+ };
+ UCHAR CipherSuiteWpaPskAesLen = (sizeof(CipherSuiteWpaPskAes) / sizeof(UCHAR));
+
+-/*
++/*
+ ==========================================================================
+- Description:
++ Description:
+ association state machine init, including state transition and timer init
+- Parameters:
++ Parameters:
+ S - pointer to the association state machine
+ Note:
+- The state machine looks like the following
+-
++ The state machine looks like the following
++
+ ASSOC_IDLE ASSOC_WAIT_RSP REASSOC_WAIT_RSP DISASSOC_WAIT_RSP
+ MT2_MLME_ASSOC_REQ mlme_assoc_req_action invalid_state_when_assoc invalid_state_when_assoc invalid_state_when_assoc
+ MT2_MLME_REASSOC_REQ mlme_reassoc_req_action invalid_state_when_reassoc invalid_state_when_reassoc invalid_state_when_reassoc
+@@ -103,9 +103,9 @@
+ ==========================================================================
+ */
+ VOID AssocStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(S, (STATE_MACHINE_FUNC*)Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, (STATE_MACHINE_FUNC)Drop, ASSOC_IDLE, ASSOC_MACHINE_BASE);
+
+@@ -115,7 +115,7 @@
+ StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)MlmeDisassocReqAction);
+ StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction);
+ // StateMachineSetAction(S, ASSOC_IDLE, MT2_CLS3ERR, (STATE_MACHINE_FUNC)Cls3errAction);
+-
++
+ // second column
+ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc);
+ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc);
+@@ -151,14 +151,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Association timeout procedure. After association timeout, this function
++ Association timeout procedure. After association timeout, this function
+ will be called and it will put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID AssocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_ASSOC_TIMEOUT \n");
+@@ -169,14 +169,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Reassociation timeout procedure. After reassociation timeout, this
++ Reassociation timeout procedure. After reassociation timeout, this
+ function will be called and put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID ReassocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_REASSOC_TIMEOUT \n");
+@@ -187,14 +187,14 @@
+ /*
+ ==========================================================================
+ Description:
+- Disassociation timeout procedure. After disassociation timeout, this
++ Disassociation timeout procedure. After disassociation timeout, this
+ function will be called and put a message into the MLME queue
+ Parameters:
+ Standard timer parameters
+ ==========================================================================
+ */
+ VOID DisassocTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - enqueue MT2_DISASSOC_TIMEOUT \n");
+@@ -222,8 +222,8 @@
+ ==========================================================================
+ */
+ VOID MlmeAssocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR ApAddr;
+ MACHDR AssocHdr;
+@@ -243,9 +243,9 @@
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Block Assoc request durning WPA block period!\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+- }
++ }
+ // check sanity first
+- else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
++ else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
+ {
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+ COPY_MAC_ADDR(&pAd->Mlme.AssocAux.Addr, &ApAddr);
+@@ -255,23 +255,23 @@
+ pAd->Mlme.AssocAux.ListenIntv = ListenIntv;
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeAssocReqAction() allocate memory failed \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ // Add by James 03/06/27
+ pAd->PortCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); //+ sizeof(NDIS_802_11_FIXED_IEs); // Filled in assoc request
+ pAd->PortCfg.AssocInfo.AvailableRequestFixedIEs =
+ NDIS_802_11_AI_REQFI_CAPABILITIES | NDIS_802_11_AI_REQFI_LISTENINTERVAL | NDIS_802_11_AI_REQFI_CURRENTAPADDRESS;
+ pAd->PortCfg.AssocInfo.RequestFixedIEs.Capabilities = CapabilityInfo;
+- pAd->PortCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv;
++ pAd->PortCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv;
+ memcpy(pAd->PortCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, &AssocHdr, sizeof(NDIS_802_11_MAC_ADDRESS));
+ pAd->PortCfg.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); // No request Variables IEs
+-
++
+ // First add SSID
+ VarIesOffset = 0;
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &SsidIe, 1);
+@@ -299,7 +299,7 @@
+ 2, &CapabilityInfo,
+ 2, &ListenIntv,
+ 1, &SsidIe,
+- 1, &pAd->Mlme.SyncAux.SsidLen,
++ 1, &pAd->Mlme.SyncAux.SsidLen,
+ pAd->Mlme.SyncAux.SsidLen, pAd->Mlme.SyncAux.Ssid,
+ 1, &RateIe,
+ 1, &pAd->PortCfg.SupRateLen,
+@@ -310,11 +310,11 @@
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+ 1, &ExtRateIe,
+ 1, &pAd->PortCfg.ExtRateLen,
+- pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
++ pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+-
++
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled))
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -323,7 +323,7 @@
+ CipherSuiteWpaTkipLen, &CipherSuiteWpaTkip[0],
+ END_OF_ARGS);
+ FrameLen += tmp;
+-
++
+ // Add by James 03/06/27
+ // Third add RSN
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &WpaIe, 1);
+@@ -339,9 +339,9 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+-
++
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled))
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -350,7 +350,7 @@
+ CipherSuiteWpaAesLen, &CipherSuiteWpaAes[0],
+ END_OF_ARGS);
+ FrameLen += tmp;
+-
++
+ // Add by James 03/06/27
+ // Third add RSN
+ memcpy(pAd->PortCfg.ReqVarIEs + VarIesOffset, &WpaIe, 1);
+@@ -366,7 +366,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled))
+ {
+@@ -392,7 +392,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) && (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled))
+ {
+@@ -418,7 +418,7 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ else
+ {
+@@ -429,14 +429,14 @@
+
+ // OffsetResponseIEs follow ReqVarIE
+ pAd->PortCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->PortCfg.ReqVarIELen;
+- // End Add by James
++ // End Add by James
+ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ RTMPSetTimer(pAd, &pAd->Mlme.AssocAux.AssocTimer, Timeout);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -450,7 +450,7 @@
+ Description:
+ mlme reassoc req handling procedure
+ Parameters:
+- Elem -
++ Elem -
+ Pre:
+ -# SSID (Adapter->PortCfg.ssid[])
+ -# BSSID (AP address, Adapter->PortCfg.bssid)
+@@ -460,8 +460,8 @@
+ ==========================================================================
+ */
+ VOID MlmeReassocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR ApAddr;
+ MACHDR ReassocHdr;
+@@ -479,14 +479,14 @@
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Block ReAssoc request durning WPA block period!\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+- }
++ }
+ // the parameters are the same as the association
+- else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
++ else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, &ApAddr, &CapabilityInfo, &Timeout, &ListenIntv))
+ {
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if(NStatus != NDIS_STATUS_SUCCESS)
++ if(NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeReassocReqAction() allocate memory failed \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -509,8 +509,8 @@
+ 2, &ListenIntv,
+ ETH_ALEN, &pAd->PortCfg.Bssid,
+ 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
+- pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
++ 1, &pAd->PortCfg.SsidLen,
++ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+ 1, &RateIe,
+ 1, &pAd->PortCfg.SupRateLen,
+ pAd->PortCfg.SupRateLen, pAd->PortCfg.SupRate,
+@@ -520,16 +520,16 @@
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+ 1, &ExtRateIe,
+ 1, &pAd->PortCfg.ExtRateLen,
+- pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
++ pAd->PortCfg.ExtRateLen, pAd->PortCfg.ExtRate,
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ RTMPSetTimer(pAd, &pAd->Mlme.AssocAux.ReassocTimer, Timeout); /* in mSec */
+ pAd->Mlme.AssocMachine.CurrState = REASSOC_WAIT_RSP;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -546,8 +546,8 @@
+ ==========================================================================
+ */
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DISASSOC_REQ_STRUCT *DisassocReq;
+ MACHDR DisassocHdr;
+@@ -560,25 +560,25 @@
+ DisassocReq = (MLME_DISASSOC_REQ_STRUCT *)(Elem->Msg);
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - MlmeDisassocReqAction() allocate memory failed\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.DisassocTimer);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Send DISASSOC request\n");
+ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, &pAd->PortCfg.Bssid, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &DisassocHdr,
+- 2, &DisassocReq->Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &DisassocHdr,
++ 2, &DisassocReq->Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ memset(&(pAd->PortCfg.Bssid), 0, ETH_ALEN);
+-
++
+ pAd->PortCfg.DisassocReason = REASON_DISASSOC_STA_LEAVING;
+ COPY_MAC_ADDR(&pAd->PortCfg.DisassocSta, &DisassocReq->Addr);
+
+@@ -595,31 +595,31 @@
+ ==========================================================================
+ */
+ VOID PeerAssocRspAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT CapabilityInfo, Status, Aid;
+ UCHAR Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen;
+ MACADDR Addr2;
+ BOOLEAN ExtendedRateIeExist;
+
+- if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
++ if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
+ {
+ // The frame is for me ?
+- if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr))
++ if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+- if(Status == MLME_SUCCESS)
++ if(Status == MLME_SUCCESS)
+ {
+ // go to procedure listed on page 376
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO; // pAd->PortCfg.SupportedCapabilityInfo;
+ AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);
+- }
++ }
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, Status);
+- }
++ }
+ }
+ else
+ {
+@@ -636,8 +636,8 @@
+ ==========================================================================
+ */
+ VOID PeerReassocRspAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT CapabilityInfo;
+ USHORT Status;
+@@ -647,24 +647,24 @@
+ MACADDR Addr2;
+ BOOLEAN ExtendedRateIeExist;
+
+- if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
++ if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))
+ {
+ if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr)) // The frame is for me ?
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+-
+- if(Status == MLME_SUCCESS)
++
++ if(Status == MLME_SUCCESS)
+ {
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO; // pAd->PortCfg.SupportedCapabilityInfo;
+ // go to procedure listed on page 376
+ AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);
+- }
++ }
+
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, Status);
+- }
++ }
+ }
+ else
+ {
+@@ -675,28 +675,28 @@
+ /*
+ ==========================================================================
+ Description:
+- procedures on IEEE 802.11/1999 p.376
++ procedures on IEEE 802.11/1999 p.376
+ Parametrs:
+ ==========================================================================
+ */
+ VOID AssocPostProc(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR Addr2,
+- IN USHORT CapabilityInfo,
+- IN USHORT Aid,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR Addr2,
++ IN USHORT CapabilityInfo,
++ IN USHORT Aid,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+- IN BOOLEAN ExtendedRateIeExist)
++ IN BOOLEAN ExtendedRateIeExist)
+ {
+ ULONG Idx;
+ UCHAR RateIe = IE_SUPP_RATES;
+ UCHAR VarIesOffset;
+
+- // 2003/12/11 - skip the following because experiment show that we can not
++ // 2003/12/11 - skip the following because experiment show that we can not
+ // trust the "privacy" bit in AssocRsp. We can only trust "Privacy" bit specified in
+ // BEACON and ProbeRsp.
+ // pAd->PortCfg.PrivacyInvoked = CAP_IS_PRIVACY_ON(CapabilityInfo);
+-
++
+ pAd->PortCfg.Aid = Aid;
+ memcpy(pAd->PortCfg.SupportedRates, Rates, RatesLen);
+ pAd->PortCfg.SupportedRatesLen = RatesLen;
+@@ -709,7 +709,7 @@
+
+ // Set New WPA information
+ Idx = BssTableSearch(&pAd->PortCfg.BssTab, Addr2);
+- if (Idx == BSS_NOT_FOUND)
++ if (Idx == BSS_NOT_FOUND)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, "ASSOC - Can't find BSS after receiving Assoc response\n");
+ }
+@@ -736,7 +736,7 @@
+ // Second add RSN
+ memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, pAd->PortCfg.BssTab.BssEntry[Idx].VarIEs, pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen);
+ VarIesOffset += pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen;
+-
++
+ // Set Variable IEs Length
+ pAd->PortCfg.ResVarIELen = VarIesOffset;
+ pAd->PortCfg.AssocInfo.ResponseIELength = VarIesOffset;
+@@ -747,22 +747,22 @@
+ /*
+ ==========================================================================
+ Description:
+- left part of IEEE 802.11/1999 p.374
++ left part of IEEE 802.11/1999 p.374
+ Parameters:
+ Elem - MLME message containing the received frame
+ ==========================================================================
+ */
+ VOID PeerDisassocAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Reason;
+
+- if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Reason))
++ if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Reason))
+ {
+- if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(&pAd->PortCfg.Bssid, &Addr2))
+- {
++ if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(&pAd->PortCfg.Bssid, &Addr2))
++ {
+ LinkDown(pAd);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+
+@@ -786,8 +786,8 @@
+ ==========================================================================
+ */
+ VOID AssocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - AssocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -801,8 +801,8 @@
+ ==========================================================================
+ */
+ VOID ReassocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - ReassocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -816,8 +816,8 @@
+ ==========================================================================
+ */
+ VOID DisassocTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - DisassocTimeoutAction\n");
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+@@ -825,30 +825,30 @@
+ }
+
+ VOID InvalidStateWhenAssoc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenAssoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenAssoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+ VOID InvalidStateWhenReassoc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenReassoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenReassoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+ VOID InvalidStateWhenDisassociate(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenDisassoc(state=%d), reset ASSOC state machine\n",
++ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenDisassoc(state=%d), reset ASSOC state machine\n",
+ pAd->Mlme.AssocMachine.CurrState);
+ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_STATE_MACHINE_REJECT);
+@@ -858,15 +858,15 @@
+ ==========================================================================
+ Description:
+ right part of IEEE 802.11/1999 page 374
+- Note:
++ Note:
+ This event should never cause ASSOC state machine perform state
+ transition, and has no relationship with CNTL machine. So we separate
+ this routine as a service outside of ASSOC state transition table.
+ ==========================================================================
+ */
+ VOID Cls3errAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR pAddr)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR pAddr)
+ {
+ MACHDR DisassocHdr;
+ CHAR *OutBuffer = NULL;
+@@ -875,19 +875,19 @@
+ USHORT Reason = REASON_CLS3ERR;
+
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
++ if (NStatus != NDIS_STATUS_SUCCESS)
+ return;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Class 3 Error, Send DISASSOC frame\n");
+ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &DisassocHdr,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &DisassocHdr,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+ pAd->PortCfg.DisassocReason = REASON_CLS3ERR;
+ COPY_MAC_ADDR(&pAd->PortCfg.DisassocSta, pAddr);
+ }
+-
++
+
+diff -Nur rt2500-1.1.0-b4/Module/auth.c rt2500-cvs-2007061011/Module/auth.c
+--- rt2500-1.1.0-b4/Module/auth.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/auth.c 2007-05-06 11:13:44.000000000 +0200
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: auth.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: auth.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -41,7 +41,7 @@
+ Sm - pointer to the auth state machine
+ Note:
+ The state machine looks like this
+-
++
+ AUTH_REQ_IDLE AUTH_WAIT_SEQ2 AUTH_WAIT_SEQ4
+ MT2_MLME_AUTH_REQ mlme_auth_req_action invalid_state_when_auth invalid_state_when_auth
+ MT2_MLME_DEAUTH_REQ mlme_deauth_req_action mlme_deauth_req_action mlme_deauth_req_action
+@@ -52,12 +52,12 @@
+ */
+
+ void AuthStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *Sm,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *Sm,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_REQ_IDLE, AUTH_MACHINE_BASE);
+-
++
+ // the first column
+ StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)MlmeAuthReqAction);
+ // StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_DEAUTH_REQ, (STATE_MACHINE_FUNC)MlmeDeauthReqAction);
+@@ -69,14 +69,14 @@
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_CLS2ERR, (STATE_MACHINE_FUNC)Cls2errAction);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq2Action);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);
+-
++
+ // the third column
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth);
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_DEAUTH_REQ, (STATE_MACHINE_FUNC)MlmeDeauthReqAction);
+ // StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_CLS2ERR, (STATE_MACHINE_FUNC)Cls2errAction);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq4Action);
+ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);
+-
++
+ RTMPInitTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AuthTimeout);
+ }
+
+@@ -90,7 +90,7 @@
+ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AUTH - AuthTimeout\n");
+ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+@@ -103,8 +103,8 @@
+ ==========================================================================
+ */
+ VOID MlmeAuthReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr;
+ USHORT Alg, Seq, Status;
+@@ -121,16 +121,15 @@
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+- else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr, &Timeout, &Alg))
++ else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr, &Timeout, &Alg))
+ {
+- // reset timer
+- RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
++ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+ pAd->Mlme.AuthAux.Addr = Addr;
+ pAd->Mlme.AuthAux.Alg = Alg;
+ pAd->PortCfg.Mauth = FALSE;
+ Seq = 1;
+ Status = MLME_SUCCESS;
+-
++
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if(NStatus != NDIS_STATUS_SUCCESS)
+ {
+@@ -142,18 +141,18 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#1 (Alg=%d)...\n", Alg);
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &AuthHdr,
+- 2, &Alg,
+- 2, &Seq,
+- 2, &Status,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &AuthHdr,
++ 2, &Alg,
++ 2, &Seq,
++ 2, &Status,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+ RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, Timeout);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2;
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "AUTH - MlmeAuthReqAction() sanity check failed. BUG!!!!!\n");
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -167,8 +166,8 @@
+ ==========================================================================
+ */
+ VOID PeerAuthRspAtSeq2Action(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Seq, Status, RemoteStatus, Alg;
+@@ -180,21 +179,21 @@
+ NDIS_STATUS NStatus;
+ ULONG FrameLen = 0;
+
+- if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
++ if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
+ {
+- if (MAC_ADDR_EQUAL(&pAd->Mlme.AuthAux.Addr, &Addr2) && Seq == 2)
++ if (MAC_ADDR_EQUAL(&pAd->Mlme.AuthAux.Addr, &Addr2) && Seq == 2)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status);
+ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+-
+- if (Status == MLME_SUCCESS)
++
++ if (Status == MLME_SUCCESS)
+ {
+- if (pAd->Mlme.AuthAux.Alg == Ndis802_11AuthModeOpen)
++ if (pAd->Mlme.AuthAux.Alg == Ndis802_11AuthModeOpen)
+ {
+ pAd->PortCfg.Mauth = TRUE;
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_SUCCESS);
+- }
++ }
+ else
+ {
+ // 2. shared key, need to be challenged
+@@ -208,7 +207,7 @@
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_FAIL_NO_RESOURCE);
+ return;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#3...\n");
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr2, &pAd->PortCfg.Bssid);
+ AuthHdr.Wep = 1;
+@@ -234,9 +233,9 @@
+ RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2);
+ RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128);
+ RTMPSetICV(pAd, CyperChlgText + 140);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &AuthHdr,
+- CIPHER_TEXT_LEN + 16, CyperChlgText,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &AuthHdr,
++ CIPHER_TEXT_LEN + 16, CyperChlgText,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ #ifdef BIG_ENDIAN
+@@ -245,8 +244,8 @@
+ RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AUTH_TIMEOUT);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4;
+ }
+- }
+- else
++ }
++ else
+ {
+ pAd->PortCfg.AuthFailReason = Status;
+ COPY_MAC_ADDR(&pAd->PortCfg.AuthFailSta, &Addr2);
+@@ -267,29 +266,29 @@
+ ==========================================================================
+ */
+ VOID PeerAuthRspAtSeq4Action(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ USHORT Alg, Seq, Status;
+ CHAR ChlgText[CIPHER_TEXT_LEN];
+
+- if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
++ if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))
+ {
+- if(MAC_ADDR_EQUAL(&(pAd->Mlme.AuthAux.Addr), &Addr2) && Seq == 4)
++ if(MAC_ADDR_EQUAL(&(pAd->Mlme.AuthAux.Addr), &Addr2) && Seq == 4)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#4 to me\n");
+ RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);
+-
+- if(Status == MLME_SUCCESS)
++
++ if(Status == MLME_SUCCESS)
+ {
+ pAd->PortCfg.Mauth = TRUE;
+- }
+- else
++ }
++ else
+ {
+ pAd->PortCfg.AuthFailReason = Status;
+ pAd->PortCfg.AuthFailSta = Addr2;
+- }
++ }
+
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ MlmeCntlConfirm(pAd, MT2_AUTH_CONF, Status);
+@@ -307,8 +306,8 @@
+ ==========================================================================
+ */
+ VOID MlmeDeauthReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DEAUTH_REQ_STRUCT *Info;
+ MACHDR Hdr;
+@@ -329,12 +328,12 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send DE-AUTH request...\n");
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, &Info->Addr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &Hdr,
+- 2, &Info->Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &Hdr,
++ 2, &Info->Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+-
++
+ pAd->PortCfg.DeauthReason = Info->Reason;
+ COPY_MAC_ADDR(&pAd->PortCfg.DeauthSta, &Info->Addr);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -347,8 +346,8 @@
+ ==========================================================================
+ */
+ VOID AuthTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - AuthTimeoutAction\n");
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -361,8 +360,8 @@
+ ==========================================================================
+ */
+ VOID InvalidStateWhenAuth(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - InvalidStateWhenAuth (state=%d), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState);
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+@@ -379,24 +378,24 @@
+ ==========================================================================
+ */
+ VOID Cls2errAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACADDR pAddr)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACADDR pAddr)
+ {
+ MACHDR Hdr;
+ UCHAR *OutBuffer = NULL;
+ NDIS_STATUS NStatus;
+ ULONG FrameLen = 0;
+ USHORT Reason = REASON_CLS2ERR;
+-
++
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+ return;
+
+ DBGPRINT(RT_DEBUG_TRACE, "AUTH - Class 2 error, Send DEAUTH frame...\n");
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, pAddr, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &Hdr,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &Hdr,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+
+diff -Nur rt2500-1.1.0-b4/Module/auth_rsp.c rt2500-cvs-2007061011/Module/auth_rsp.c
+--- rt2500-1.1.0-b4/Module/auth_rsp.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/auth_rsp.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: auth_rsp.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: auth_rsp.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -40,8 +40,8 @@
+ Parameters:
+ Sm - the state machine
+ Note:
+- the state machine looks like the following
+-
++ the state machine looks like the following
++
+ AUTH_RSP_IDLE AUTH_RSP_WAIT_CHAL
+ MT2_AUTH_CHALLENGE_TIMEOUT auth_rsp_challenge_timeout_action auth_rsp_challenge_timeout_action
+ MT2_PEER_AUTH_ODD peer_auth_at_auth_rsp_idle_action peer_auth_at_auth_rsp_wait_action
+@@ -49,9 +49,9 @@
+ ==========================================================================
+ */
+ VOID AuthRspStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTATE_MACHINE Sm,
+- IN STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN PSTATE_MACHINE Sm,
++ IN STATE_MACHINE_FUNC Trans[])
+ {
+ ULONG NOW;
+
+@@ -83,10 +83,10 @@
+ ==========================================================================
+ */
+ VOID AuthRspChallengeTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AUTH_RSP - AuthRspChallengeTimeout \n");
+ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_RSP_STATE_MACHINE, MT2_AUTH_CHALLENGE_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+@@ -98,12 +98,12 @@
+ ==========================================================================
+ */
+ VOID PeerAuthSimpleRspGenAndSend(
+- IN PRTMP_ADAPTER pAd,
+- IN PMACHDR Hdr,
+- IN USHORT Alg,
+- IN USHORT Seq,
+- IN USHORT Reason,
+- IN USHORT Status)
++ IN PRTMP_ADAPTER pAd,
++ IN PMACHDR Hdr,
++ IN USHORT Alg,
++ IN USHORT Seq,
++ IN USHORT Reason,
++ IN USHORT Status)
+ {
+ MACHDR AuthHdr;
+ UINT FrameLen = 0;
+@@ -118,11 +118,11 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "Send AUTH response (seq#2)...\n");
+ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Hdr->Addr2, &pAd->PortCfg.Bssid);
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- sizeof(MACHDR), &AuthHdr,
+- 2, &Alg,
+- 2, &Seq,
+- 2, &Reason,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ sizeof(MACHDR), &AuthHdr,
++ 2, &Alg,
++ 2, &Seq,
++ 2, &Reason,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+@@ -139,8 +139,8 @@
+ ==========================================================================
+ */
+ VOID PeerDeauthAction(
+- IN PRTMP_ADAPTER pAd,
+- IN PMLME_QUEUE_ELEM Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN PMLME_QUEUE_ELEM Elem)
+ {
+ MACADDR Addr2;
+ USHORT Reason;
+diff -Nur rt2500-1.1.0-b4/Module/connect.c rt2500-cvs-2007061011/Module/connect.c
+--- rt2500-1.1.0-b4/Module/connect.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/connect.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: connect.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * Ivo (rt2400) 15th Dec 04 Timing ESSID set
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: connect.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * Ivo (rt2400) 15th Dec 04 Timing ESSID set
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -62,11 +62,11 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+- // Control state machine differs from other state machines, the interface
++ // Control state machine differs from other state machines, the interface
+ // follows the standard interface
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+ }
+@@ -77,9 +77,9 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlMachinePerformAction(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ switch (Elem->MsgType)
+ {
+@@ -94,7 +94,7 @@
+ return;
+ }
+
+- switch(pAd->Mlme.CntlMachine.CurrState)
++ switch(pAd->Mlme.CntlMachine.CurrState)
+ {
+ case CNTL_IDLE:
+ CntlIdleProc(pAd, Elem);
+@@ -105,17 +105,17 @@
+ case CNTL_WAIT_JOIN:
+ CntlWaitJoinProc(pAd, Elem);
+ break;
+-
++
+ // CNTL_WAIT_REASSOC is the only state in CNTL machine that does
+- // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)".
+- // Therefore not protected by NDIS's "only one outstanding OID request"
++ // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)".
++ // Therefore not protected by NDIS's "only one outstanding OID request"
+ // rule. Which means NDIS may SET OID in the middle of ROAMing attempts.
+ // Current approach is to block new SET request at RTMPSetInformation()
+ // when CntlMachine.CurrState is not CNTL_IDLE
+ case CNTL_WAIT_REASSOC:
+ CntlWaitReassocProc(pAd, Elem);
+ break;
+-
++
+ case CNTL_WAIT_START:
+ CntlWaitStartProc(pAd, Elem);
+ break;
+@@ -130,7 +130,7 @@
+ break;
+
+ case CNTL_WAIT_OID_LIST_SCAN:
+- if(Elem->MsgType == MT2_SCAN_CONF)
++ if(Elem->MsgType == MT2_SCAN_CONF)
+ {
+ // Resume TxRing after SCANING complete. We hope the out-of-service time
+ // won't be too long to let upper layer time-out the waiting frames
+@@ -143,9 +143,9 @@
+ if (pAd->MediaState == NdisMediaStateDisconnected)
+ MlmeAutoReconnectLastSSID(pAd);
+ break;
+-
++
+ case CNTL_WAIT_OID_DISASSOC:
+- if (Elem->MsgType == MT2_DISASSOC_CONF)
++ if (Elem->MsgType == MT2_DISASSOC_CONF)
+ {
+ LinkDown(pAd);
+
+@@ -169,11 +169,11 @@
+ ==========================================================================
+ */
+ VOID CntlIdleProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+-
++
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
+ {
+ if (pAd->Mlme.CntlAux.CurrReqIsFromNdis)
+@@ -183,7 +183,7 @@
+ return;
+ }
+
+- switch(Elem->MsgType)
++ switch(Elem->MsgType)
+ {
+ case OID_802_11_DISASSOCIATE:
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+@@ -198,7 +198,7 @@
+ case MT2_MLME_ROAMING_REQ:
+ CntlMlmeRoamingProc(pAd, Elem);
+ break;
+-
++
+ default:
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Illegal message in CntlIdleProc(MsgType=%d)\n",Elem->MsgType);
+ break;
+@@ -220,7 +220,7 @@
+ // for best SCANNING reult;
+ AsicRestoreBbpSensibility(pAd);
+
+- // record current BSS if network is connected.
++ // record current BSS if network is connected.
+ // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS.
+ if (pAd->MediaState == NdisMediaStateConnected) // if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+ {
+@@ -230,19 +230,19 @@
+ memcpy(&CurrBss, &pAd->PortCfg.BssTab.BssEntry[BssIdx], sizeof(BSS_ENTRY));
+
+ // 2003-2-20 reset this RSSI to a low value but not zero. In normal case, the coming SCAN
+- // should return a correct RSSI to overwrite this. If no BEEACON received after SCAN,
++ // should return a correct RSSI to overwrite this. If no BEEACON received after SCAN,
+ // at least we still report a "greater than 0" RSSI since we claim it's CONNECTED.
+ CurrBss.Rssi = 18; // about -82 dB
+ }
+ }
+-
++
+ // clean up previous SCAN result, add current BSS back to table if any
+- BssTableInit(&pAd->PortCfg.BssTab);
++ BssTableInit(&pAd->PortCfg.BssTab);
+ if (BssIdx != BSS_NOT_FOUND)
+ {
+- // DDK Note: If the NIC is associated with a particular BSSID and SSID
+- // that are not contained in the list of BSSIDs generated by this scan, the
+- // BSSID description of the currently associated BSSID and SSID should be
++ // DDK Note: If the NIC is associated with a particular BSSID and SSID
++ // that are not contained in the list of BSSIDs generated by this scan, the
++ // BSSID description of the currently associated BSSID and SSID should be
+ // appended to the list of BSSIDs in the NIC's database.
+ // To ensure this, we append this BSS as the first entry in SCAN result
+ memcpy(&pAd->PortCfg.BssTab.BssEntry[0], &CurrBss, sizeof(BSS_ENTRY));
+@@ -251,7 +251,7 @@
+
+ BroadSsid[0] = '\0';
+ ScanParmFill(pAd, &ScanReq, BroadSsid, 0, BSS_ANY, SCAN_PASSIVE);
+- MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ,
+ sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN;
+ }
+@@ -262,15 +262,15 @@
+ ==========================================================================
+ */
+ VOID CntlOidSsidProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM * Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM * Elem)
+ {
+ NDIS_802_11_SSID *OidSsid = (NDIS_802_11_SSID *)Elem->Msg;
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+ ULONG Now;
+
+- // Step 0.
+- // record the desired SSID and all matching BSSes into CntlAux.SsidBssTab for
++ // Step 0.
++ // record the desired SSID and all matching BSSes into CntlAux.SsidBssTab for
+ // later-on iteration. Sort by RSSI order
+ memcpy(pAd->Mlme.CntlAux.Ssid, OidSsid->Ssid, OidSsid->SsidLength);
+ pAd->Mlme.CntlAux.SsidLen = (UCHAR)OidSsid->SsidLength;
+@@ -286,11 +286,11 @@
+ if (((pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAd->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
+ {
+- // For WPA, WPA-PSK, if the 1x port is not secured, we have to redo
++ // For WPA, WPA-PSK, if the 1x port is not secured, we have to redo
+ // connection process
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+@@ -299,7 +299,7 @@
+ // Config has changed, we have to reconnect the same AP
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP Because config changed...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+@@ -313,24 +313,24 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- }
+- else if (INFRA_ON(pAd))
++ }
++ }
++ else if (INFRA_ON(pAd))
+ {
+ // case 1. active association existent
+ // roaming is done within miniport driver, nothing to do with configuration
+- // utility. so upon a new SET(OID_802_11_SSID) is received, we just
+- // disassociate with the current (or previous) associated AP, if any,
+- // then perform a new association with this new SSID, no matter the
++ // utility. so upon a new SET(OID_802_11_SSID) is received, we just
++ // disassociate with the current (or previous) associated AP, if any,
++ // then perform a new association with this new SSID, no matter the
+ // new/old SSID are the same or npt.
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ }
+ else
+- {
++ {
+ if (ADHOC_ON(pAd))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - drop current ADHOC\n");
+@@ -356,7 +356,7 @@
+ {
+ IterateOnBssTab(pAd);
+ }
+- }
++ }
+ }
+
+ /*
+@@ -365,18 +365,18 @@
+ ==========================================================================
+ */
+ VOID CntlOidRTBssidProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM * Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM * Elem)
+ {
+ ULONG BssIdx;
+ MACADDR *pOidBssid = (MACADDR *)Elem->Msg;
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+ MLME_JOIN_REQ_STRUCT JoinReq;
+-
++
+ COPY_MAC_ADDR(&pAd->Mlme.CntlAux.Bssid, pOidBssid);
+ BssIdx = BssTableSearch(&pAd->PortCfg.BssTab, pOidBssid);
+-
+- if (BssIdx == BSS_NOT_FOUND)
++
++ if (BssIdx == BSS_NOT_FOUND)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n");
+ if (pAd->Mlme.CntlAux.CurrReqIsFromNdis)
+@@ -394,7 +394,7 @@
+
+ // Add SSID into Mlme.CntlAux for site surey joining hidden SSID
+ pAd->Mlme.CntlAux.SsidLen = pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].SsidLen;
+- memcpy(pAd->Mlme.CntlAux.Ssid, pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].Ssid, pAd->Mlme.CntlAux.SsidLen);
++ memcpy(pAd->Mlme.CntlAux.Ssid, pAd->Mlme.CntlAux.SsidBssTab.BssEntry[0].Ssid, pAd->Mlme.CntlAux.SsidLen);
+
+ // 2002-11-26 skip the following checking. i.e. if user wants to re-connect to same AP
+ // we just follow normal procedure. The reason of user doing this may because he/she changed
+@@ -412,15 +412,15 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ }
++ else
+ {
+ if (INFRA_ON(pAd))
+ {
+ // disassoc from current AP first
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP ...\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+@@ -434,7 +434,7 @@
+ pAd->MediaState = NdisMediaStateDisconnected;
+ DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event C!\n");
+ }
+-
++
+ // No active association, join the BSS immediately
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pOidBssid->Octet[0],pOidBssid->Octet[1],pOidBssid->Octet[2],
+@@ -444,27 +444,27 @@
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN;
+ }
+- }
++ }
+ }
+
+ // Roaming is the only external request triggering CNTL state machine
+-// despite of other "SET OID" operation. All "SET OID" related oerations
++// despite of other "SET OID" operation. All "SET OID" related oerations
+ // happen in sequence, because no other SET OID will be sent to this device
+ // until the the previous SET operation is complete (successful o failed).
+ // So, how do we quarantee this ROAMING request won't corrupt other "SET OID"?
+ // or been corrupted by other "SET OID"?
+ VOID CntlMlmeRoamingProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- // TODO:
++ // TODO:
+ // AP in different channel may show lower RSSI than actual value??
+ // should we add a weighting factor to compensate it?
+ DBGPRINT(RT_DEBUG_TRACE,"CNTL - Roaming in CntlAux.RoamTab...\n");
+ BssTableSortByRssi(&pAd->Mlme.CntlAux.RoamTab);
+ pAd->Mlme.CntlAux.RoamIdx=0;
+ IterateOnBssTab2(pAd);
+-
++
+ }
+
+ /*
+@@ -473,17 +473,17 @@
+ ==========================================================================
+ */
+ VOID CntlWaitDisassocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MLME_START_REQ_STRUCT StartReq;
+-
+- if (Elem->MsgType == MT2_DISASSOC_CONF)
++
++ if (Elem->MsgType == MT2_DISASSOC_CONF)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Dis-associate successful\n");
+ LinkDown(pAd);
+
+- // case 1. no matching BSS, and user wants ADHOC, so we just start a new one
++ // case 1. no matching BSS, and user wants ADHOC, so we just start a new one
+ if ((pAd->Mlme.CntlAux.SsidBssTab.BssNr==0) && (pAd->PortCfg.BssType == BSS_INDEP))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n",pAd->Mlme.CntlAux.Ssid);
+@@ -505,16 +505,16 @@
+ ==========================================================================
+ */
+ VOID CntlWaitJoinProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_JOIN_CONF)
++ if (Elem->MsgType == MT2_JOIN_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ // 1. joined an IBSS, we are pretty much done here
+ if (pAd->PortCfg.BssType == BSS_INDEP)
+@@ -524,9 +524,9 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ // 2. joined a new INFRA network, start from authentication
+- else
++ else
+ {
+ // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeShared) ||
+@@ -538,7 +538,7 @@
+ {
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+ }
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH;
+@@ -549,7 +549,7 @@
+ // 3. failed, try next BSS
+ pAd->Mlme.CntlAux.BssIdx++;
+ IterateOnBssTab(pAd);
+- }
++ }
+ }
+ }
+
+@@ -560,18 +560,18 @@
+ ==========================================================================
+ */
+ VOID CntlWaitStartProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Result;
+
+- if (Elem->MsgType == MT2_START_CONF)
++ if (Elem->MsgType == MT2_START_CONF)
+ {
+ memcpy(&Result, Elem->Msg, sizeof(USHORT));
+- if (Result == MLME_SUCCESS)
++ if (Result == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - We have started a new ADHOC network\n");
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->PortCfg.Bssid.Octet[0],
+ pAd->PortCfg.Bssid.Octet[1],
+ pAd->PortCfg.Bssid.Octet[2],
+@@ -601,29 +601,29 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAuthProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_ASSOC_REQ_STRUCT AssocReq;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_AUTH_CONF)
++ if (Elem->MsgType == MT2_AUTH_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH OK\n");
+- AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
++ AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
+ sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC;
+- }
++ }
+ else
+ {
+- // This fail may because of the AP already keep us in its MAC table without
++ // This fail may because of the AP already keep us in its MAC table without
+ // ageing-out. The previous authentication attempt must have let it remove us.
+ // so try Authentication again may help. For D-Link DWL-900AP+ compatibility.
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, try again...\n");
+@@ -638,7 +638,7 @@
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+ }
+
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2;
+@@ -652,26 +652,26 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAuthProc2(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+ MLME_ASSOC_REQ_STRUCT AssocReq;
+ MLME_AUTH_REQ_STRUCT AuthReq;
+
+- if (Elem->MsgType == MT2_AUTH_CONF)
++ if (Elem->MsgType == MT2_AUTH_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH OK\n");
+- AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
++ AssocParmFill(pAd, &AssocReq, &pAd->PortCfg.Bssid, pAd->PortCfg.CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
+ sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC;
+- }
++ }
+ else
+ {
+ if ((pAd->PortCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) &&
+@@ -679,12 +679,12 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, try OPEN system...\n");
+ AuthParmFill(pAd, &AuthReq, &pAd->PortCfg.Bssid, Ndis802_11AuthModeOpen);
+- MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ,
+ sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2;
+ }
+- else
++ else
+ {
+ // not success, try next BSS
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - AUTH FAIL, give up; try next BSS\n");
+@@ -693,7 +693,7 @@
+ IterateOnBssTab(pAd);
+ }
+ }
+- }
++ }
+ }
+
+ /*
+@@ -702,15 +702,15 @@
+ ==========================================================================
+ */
+ VOID CntlWaitAssocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Reason;
+
+- if (Elem->MsgType == MT2_ASSOC_CONF)
++ if (Elem->MsgType == MT2_ASSOC_CONF)
+ {
+ memcpy(&Reason, Elem->Msg, sizeof(USHORT));
+- if (Reason == MLME_SUCCESS)
++ if (Reason == MLME_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Association successful on BSS #%d\n",pAd->Mlme.CntlAux.BssIdx);
+ LinkUp(pAd, BSS_INFRA);
+@@ -718,8 +718,8 @@
+ {
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ }
++ else
+ {
+ // not success, try next BSS
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Association fails on BSS #%d\n",pAd->Mlme.CntlAux.BssIdx);
+@@ -735,21 +735,21 @@
+ ==========================================================================
+ */
+ VOID CntlWaitReassocProc(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ USHORT Result;
+
+- if (Elem->MsgType == MT2_REASSOC_CONF)
++ if (Elem->MsgType == MT2_REASSOC_CONF)
+ {
+ memcpy(&Result, Elem->Msg, sizeof(USHORT));
+- if (Result == MLME_SUCCESS)
++ if (Result == MLME_SUCCESS)
+ {
+ BSS_ENTRY *pBss = &pAd->Mlme.CntlAux.RoamTab.BssEntry[pAd->Mlme.CntlAux.RoamIdx];
+
+ // COPY_MAC_ADDR(&pAd->PortCfg.Bssid, &pBss->Bssid);
+ // AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+-
++
+ // The following steps are supposed to be done after JOIN in normal procedure
+ // But since this RE-ASSOC skips the JOIN procedure, we have to do it after
+ // RE-ASSOC succeeds. If RE-ASSOC fails, then stay at original AP without any change
+@@ -768,14 +768,14 @@
+ pAd->PortCfg.CfpDurRemain = pBss->CfpDurRemaining;
+ pAd->PortCfg.CfpCount = pBss->CfpCount;
+
+- //
++ //
+ // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC
+ //
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Re-assocition successful on BSS #%d\n", pAd->Mlme.CntlAux.RoamIdx);
+ LinkUp(pAd, BSS_INFRA);
+- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
+- else
++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
++ }
++ else
+ {
+ // reassoc failed, try to pick next BSS in the BSS Table
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Re-assocition fails on BSS #%d\n", pAd->Mlme.CntlAux.RoamIdx);
+@@ -792,7 +792,7 @@
+ */
+ VOID LinkUp(
+ IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssType)
++ IN UCHAR BssType)
+ {
+ ULONG Now;
+
+@@ -810,7 +810,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - !!! Set to short preamble!!!\n");
+ MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
+ }
+-
++
+ pAd->PortCfg.BssType = BssType;
+ if (BssType == BSS_INDEP)
+ {
+@@ -856,11 +856,11 @@
+ // NOTE:
+ // the decision to use "RTC/CTS" or "CTS-to-self" protection or not may change dynamically
+ // due to new STA association to the AP. so we have to decide that upon parsing BEACON, not here
+-
++
+ ComposePsPoll(pAd);
+ ComposeNullFrame(pAd);
+ AsicEnableBssSync(pAd);
+-
++
+ // only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode
+ // should wait until at least 2 active nodes in this BSSID.
+ pAd->MediaState = NdisMediaStateConnected;
+@@ -885,7 +885,7 @@
+ ==========================================================================
+ */
+ VOID LinkDown(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - !!! LINK DOWN !!!\n");
+
+@@ -913,7 +913,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event A!\n");
+ BssTableDeleteEntry(&pAd->PortCfg.BssTab, &(pAd->PortCfg.Bssid));
+
+- // restore back to -
++ // restore back to -
+ // 1. long slot (20 us) or short slot (9 us) time
+ // 2. turn on/off RTS/CTS and/or CTS-to-self protection
+ // 3. short preamble
+@@ -970,9 +970,9 @@
+ ==========================================================================
+ */
+ VOID MlmeCntlConfirm(
+- IN PRTMP_ADAPTER pAd,
+- IN ULONG MsgType,
+- IN USHORT Msg)
++ IN PRTMP_ADAPTER pAd,
++ IN ULONG MsgType,
++ IN USHORT Msg)
+ {
+ MlmeEnqueue(&pAd->Mlme.Queue, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg);
+ }
+@@ -983,16 +983,16 @@
+ ==========================================================================
+ */
+ VOID IterateOnBssTab(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_START_REQ_STRUCT StartReq;
+ MLME_JOIN_REQ_STRUCT JoinReq;
+ ULONG BssIdx;
+
+ BssIdx = pAd->Mlme.CntlAux.BssIdx;
+- if (BssIdx < pAd->Mlme.CntlAux.SsidBssTab.BssNr)
++ if (BssIdx < pAd->Mlme.CntlAux.SsidBssTab.BssNr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - Trying BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - Trying BSSID %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[0],
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[1],
+ pAd->Mlme.CntlAux.SsidBssTab.BssEntry[BssIdx].Bssid.Octet[2],
+@@ -1018,12 +1018,12 @@
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - All BSS fail; reply NDIS_STATUS_NOT_ACCEPTED\n");
+ }
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ }
+
+ // for re-association only
+ VOID IterateOnBssTab2(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_REASSOC_REQ_STRUCT ReassocReq;
+ ULONG BssIdx;
+@@ -1034,19 +1034,19 @@
+
+ if (BssIdx < pAd->Mlme.CntlAux.RoamTab.BssNr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "CNTL - try BSS #%d %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "CNTL - try BSS #%d %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ BssIdx, pBss->Bssid.Octet[0],pBss->Bssid.Octet[1],pBss->Bssid.Octet[2],
+ pBss->Bssid.Octet[3],pBss->Bssid.Octet[4],pBss->Bssid.Octet[5]);
+
+ AsicSwitchChannel(pAd, pBss->Channel);
+ AsicLockChannel(pAd, pBss->Channel);
+-
++
+ // reassociate message has the same structure as associate message
+- AssocParmFill(pAd, &ReassocReq, &pBss->Bssid, pBss->CapabilityInfo,
++ AssocParmFill(pAd, &ReassocReq, &pBss->Bssid, pBss->CapabilityInfo,
+ ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ,
+ sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq);
+-
++
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC;
+ }
+ else // no more BSS
+@@ -1055,7 +1055,7 @@
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+- }
++ }
+ }
+
+ /*
+@@ -1064,9 +1064,9 @@
+ ==========================================================================
+ */
+ VOID JoinParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
+- IN ULONG BssIdx)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
++ IN ULONG BssIdx)
+ {
+ JoinReq->BssIdx = BssIdx;
+ }
+@@ -1077,12 +1077,12 @@
+ ==========================================================================
+ */
+ VOID AssocParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
+- IN MACADDR *Addr,
+- IN USHORT CapabilityInfo,
+- IN ULONG Timeout,
+- IN USHORT ListenIntv)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
++ IN MACADDR *Addr,
++ IN USHORT CapabilityInfo,
++ IN ULONG Timeout,
++ IN USHORT ListenIntv)
+ {
+ COPY_MAC_ADDR(&AssocReq->Addr, Addr);
+ // Add mask to support 802.11b mode only
+@@ -1097,12 +1097,12 @@
+ ==========================================================================
+ */
+ VOID ScanParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN UCHAR ScanType)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN UCHAR ScanType)
+ {
+ ScanReq->SsidLen = SsidLen;
+ memcpy(ScanReq->Ssid, Ssid, SsidLen);
+@@ -1116,10 +1116,10 @@
+ ==========================================================================
+ */
+ VOID DisassocParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
+- IN MACADDR *Addr,
+- IN USHORT Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
++ IN MACADDR *Addr,
++ IN USHORT Reason)
+ {
+ COPY_MAC_ADDR(&DisassocReq->Addr, Addr);
+ DisassocReq->Reason = Reason;
+@@ -1131,12 +1131,12 @@
+ ==========================================================================
+ */
+ VOID StartParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_START_REQ_STRUCT *StartReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_START_REQ_STRUCT *StartReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen)
+ {
+- memcpy(StartReq->Ssid, Ssid, SsidLen);
++ memcpy(StartReq->Ssid, Ssid, SsidLen);
+ StartReq->SsidLen = SsidLen;
+ }
+
+@@ -1146,10 +1146,10 @@
+ ==========================================================================
+ */
+ VOID AuthParmFill(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
+- IN MACADDR *Addr,
+- IN USHORT Alg)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
++ IN MACADDR *Addr,
++ IN USHORT Alg)
+ {
+ COPY_MAC_ADDR(&AuthReq->Addr, Addr);
+ AuthReq->Alg = Alg;
+@@ -1187,9 +1187,9 @@
+ ==========================================================================
+ */
+ ULONG MakeIbssBeacon(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+- UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
++ UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
+ DsLen = 1, IbssLen = 2;
+ UCHAR ExtRateIe = IE_EXT_SUPP_RATES, ExtRatesLen;
+ UCHAR ErpIe[3] = {IE_ERP, 1, 0x04};
+@@ -1244,28 +1244,28 @@
+
+ // compose IBSS beacon frame
+ MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Bssid);
+- Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
+- (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
++ Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
++ (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
+ (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);
+ CapabilityInfo = CAP_GENERATE(0, 1, 0, 0, Privacy, (pAd->PortCfg.WindowsTxPreamble == Rt802_11PreambleShort));
+ if (SupportedRatesLen <= 8)
+ {
+ MakeOutgoingFrame(pBeaconFrame, &FrameLen,
+- MAC_HDR_LEN, &BcnHdr,
++ MAC_HDR_LEN, &BcnHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ END_OF_ARGS);
+ }
+@@ -1274,21 +1274,21 @@
+ ExtRatesLen = SupportedRatesLen - 8;
+ SupportedRatesLen = 8;
+ MakeOutgoingFrame(pBeaconFrame, &FrameLen,
+- MAC_HDR_LEN, &BcnHdr,
++ MAC_HDR_LEN, &BcnHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ 3, ErpIe,
+ 1, &ExtRateIe,
+@@ -1301,7 +1301,7 @@
+ {
+ ULONG tmp;
+ UCHAR WpaIe = IE_WPA;
+-
++
+ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) // Tkip
+ {
+ MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp,
+@@ -1325,7 +1325,7 @@
+ RTMPFrameEndianChange(pAd, pBeaconFrame, DIR_WRITE, FALSE);
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, FALSE, CIPHER_NONE, FALSE, FALSE, TRUE, SHORT_RETRY, IFS_NEW_BACKOFF,
++ RTMPWriteTxDescriptor(pTxD, FALSE, CIPHER_NONE, FALSE, FALSE, TRUE, SHORT_RETRY, IFS_NEW_BACKOFF,
+ pAd->PortCfg.MlmeRate, 4, FrameLen, pAd->PortCfg.TxPreambleInUsed, 0);
+
+ DBGPRINT(RT_DEBUG_TRACE, "MakeIbssBeacon (len=%d)\n", FrameLen);
+diff -Nur rt2500-1.1.0-b4/Module/eeprom.c rt2500-cvs-2007061011/Module/eeprom.c
+--- rt2500-1.1.0-b4/Module/eeprom.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/eeprom.c 2007-03-21 05:25:34.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: eeprom.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: eeprom.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -183,7 +183,7 @@
+ RaiseClock(pAd, &x);
+ LowerClock(pAd, &x);
+
+- // output the read_opcode and register number in that order
++ // output the read_opcode and register number in that order
+ ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3);
+ ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum);
+
+diff -Nur rt2500-1.1.0-b4/Module/iwpriv_usage.txt rt2500-cvs-2007061011/Module/iwpriv_usage.txt
+--- rt2500-1.1.0-b4/Module/iwpriv_usage.txt 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/iwpriv_usage.txt 2007-01-09 12:47:14.000000000 +0100
+@@ -1,151 +1,161 @@
+-
+-This file provides some basic examples on the configuration of the driver using standard linux wireless tools. Where possible iwconfig should be used to adjust settings. Some settings are currently not avaiable via iwconfig and these include WPA, for these functions it is currently necessary to use iwpriv.
+-
+-
+-Configuration Examples
+-===================================================================
+--------------------------------------------------------------------------------------------------------
+-Example I: Config STA to link with AP which is OPEN/NONE(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwconfig ra0 key open
+- 3. iwconfig ra0 key off
+- 4. iwconfig ra0 essid "AP's SSID"
+-
+-Example II: Config STA to link with AP which is SHARED/WEP(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwconfig ra0 key restricted
+- 3. iwconfig ra0 Key [1] "s:AP's wep key"
+- 4. iwconfig ra0 key [1]
+- 5. iwconfig ra0 essid "AP's SSID"
+-
+-Example III: Config STA to create/link as adhoc mode
+- 1. iwconfig ra0 mode ad-hoc
+- 2. iwconfig ra0 key off
+- 4. iwconfig ra0 essid "AP's SSID"
+-
+-Example IV: Config STA to link with AP which is WPAPSK/TKIP(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwpriv ra0 set AuthMode=WPAPSK
+- 3. iwpriv ra0 set EncrypType=TKIP
+- 4. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
+- 5. iwconfig ra0 essid "AP's SSID"
+-
+-Example V: Config STA to link with AP which is WPAPSK/AES(Authentication/Encryption)
+- 1. iwconfig ra0 mode managed
+- 2. iwpriv ra0 set AuthMode=WPAPSK
+- 3. iwpriv ra0 set EncrypType=AES
+- 5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
+- 6. iwconfig ra0 essid "AP's SSID"
+-
+-
+-
+-iwpriv
+-=================
+-This is detailed explanation of each parameters for iwpriv.
+-Before reading this document, make sure you already read README.
+-
+--------------------------------------------------------------------------------------------------------
+-USAGE:
+- iwpriv ra0 set [parameters]=[val]
+-
+-where
+-
+-[parameters] [val] range explaination
+------------------ ----------------------- ---------------------------------------------
+-CountryRegion {0~7} Set country region
+- 0: use 1 ~ 11 Channel
+- 1: use 1 ~ 11 Channel
+- 2: use 1 ~ 13 Channel
+- 3: use 10, 11 Channel
+- 4: use 10 ~ 13 Channel
+- 5: use 14 Channel
+- 6: use 1 ~ 14 Channel
+- 7: use 3 ~ 9 Channel
+-
+-WirelessMode {0~2} Set Wireless Mode
+- 0:11b/g mixed, 1:11B only
+-
+-TxRate {0~12} Set TxRate
+- 0:Auto, 1:1Mbps, 2:2Mbps, 3:5.5Mbps, 4:11Mbps,
+- 5:6Mbps, 6:9Mbps, 7:12Mbps, 8:18Mbps, 9:24Mbps,
+- 10:36Mbps, 11:48Mbps, 12:54Mbps
+-
+-BGProtection {0~2} Set 11B/11G Protection
+- 0:Auto, 1:Always on, 2:Always off
+-
+-TxPreamble {0~2} Set TxPreamble
+- 0:Preamble Long, 1:Preamble Short, 2:Auto
+-
+-TxBurst {0,1} Set TxBurst Enable or Disable
+- 0:Disable, 1:Enable
+-
+-TurboRate {0,1} Set TurboRate Enable or Disable
+- 0:Disable, 1:Enable
+-
+-AdhocOfdm {0, 1} Set Adhoc mode tx rate
+- 0: adhere WIFI spec., 1: violate WIFI spec.
+- (802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode)
+- AuthMode {OPEN,SHARED,WPAPSK} Set Authentication mode
+-
+-EncrypType {NONE,WEP,TKIP,AES} Set Encryption Type
+-
+-WPAPSK {8~63 ASCII or 64 HEX characters} WPA Pre-Shared Key
+-
+-ApClient {0,1} Set ApClient mode
+- 0:Disable, 1:Enable
+-
+-iwlist
+-=================
+-This is detailed explanation of each parameters for iwlist.
+-
+--------------------------------------------------------------------------------------------------------
+-
+-iwlist ra0 scanning ; list the result after scanning(site survey)
+-
+-
+-
+-
+-----------------------------------------------------------------------------------------------------------------------------------
+-
+-
+-Deprecated iwpriv
+-=================
+-
+-*** PLEASE DO NOT USE THESE FUNCTIONS, THIS IS FOR HISTORICAL REFERENCE ONLY ***
+-As the configuration utility still uses some iwpriv commands they have not been
+-removed from the driver yet. These commands are likely to dissapear if the utility is
+-updated.
+-
+-** ALL THESE COMMANDS HAVE A IWCONFIG REPLACEMENT, USE IT ****
+-
+-SSID {0~z, less than 32 characters} Set SoftAP SSID
+-
+-Channel {1~14} depends on country region Set Channel
+-
+-RTSThreshold {1~2347} Set RTS Threshold
+-
+-FragThreshold {256~2346} Set Fragment Threshold
+-
+-NetworkType {Infra,Adhoc} Set Network type
+-
+-DefaultKeyID {1~4} Set Default Key ID
+-
+-Key1 {5 ascii characters or Set Key1 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key2 {5 ascii characters or Set Key2 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key3 {5 ascii characters or Set Key3 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
+-
+-Key4 {5 ascii characters or Set Key4 String
+- 10 hex number or
+- 13 ascii characters or
+- 26 hex numbers}
++This file provides some basic examples on the configuration of the
++driver using standard linux wireless tools. Where possible iwconfig
++should be used to adjust settings. Some settings are currently not
++avaiable via iwconfig and these include WPA, for these functions it is
++currently necessary to use iwpriv.
++
++
++Configuration Examples
++======================================================================
++----------------------------------------------------------------------
++Example I: STA with AP using OPEN/NONE(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwconfig ra0 key open
++ 3. iwconfig ra0 key off
++ 4. iwconfig ra0 essid "AP's SSID"
++
++Example II: STA with AP using SHARED/WEP(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwconfig ra0 key restricted
++ 3. iwconfig ra0 Key [1] "s:AP's wep key"
++ 4. iwconfig ra0 key [1]
++ 5. iwconfig ra0 essid "AP's SSID"
++
++Example III: STA using adhoc mode
++ 1. iwconfig ra0 mode ad-hoc
++ 2. iwconfig ra0 key off
++ 4. iwconfig ra0 essid "STA's SSID"
++
++Example IV: STA with AP using WPAPSK/TKIP(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwpriv ra0 set AuthMode=WPAPSK
++ 3. iwpriv ra0 set EncrypType=TKIP
++ 4. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
++ 5. iwconfig ra0 essid "AP's SSID"
++
++Example V: STA with AP using WPAPSK/AES(Authentication/Encryption)
++ 1. iwconfig ra0 mode managed
++ 2. iwpriv ra0 set AuthMode=WPAPSK
++ 3. iwpriv ra0 set EncrypType=AES
++ 5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"
++ 6. iwconfig ra0 essid "AP's SSID"
++
++
++
++iwpriv
++=================
++This is detailed explanation of each parameters for iwpriv.
++Before reading this document, make sure you already read README.
++
++----------------------------------------------------------------------
++USAGE:
++ iwpriv ra0 set [parameters]=[val]
++
++where
++
++[parameters] [val] range explanation
++------------ -------------------- ---------------------
++CountryRegion {0~7} Set country region
++ 0: use 1 ~ 11 Channel
++ 1: use 1 ~ 11 Channel
++ 2: use 1 ~ 13 Channel
++ 3: use 10, 11 Channel
++ 4: use 10 ~ 13 Channel
++ 5: use 14 Channel
++ 6: use 1 ~ 14 Channel
++ 7: use 3 ~ 9 Channel
++
++WirelessMode {0~2} Set Wireless Mode
++ 0:11b/g mixed, 1:11B only
++
++TxRate {0~12} Set TxRate
++ 0:Auto, 1:1Mbps, 2:2Mbps,
++ 3:5.5Mbps, 4:11Mbps, 5:6Mbps,
++ 6:9Mbps, 7:12Mbps, 8:18Mbps,
++ 9:24Mbps, 10:36Mbps,
++ 11:48Mbps, 12:54Mbps
++
++BGProtection {0~2} Set 11B/11G Protection
++ 0:Auto, 1:Always on,
++ 2:Always off
++
++TxPreamble {0~2} Set TxPreamble
++ 0:Preamble Long,
++ 1:Preamble Short,
++ 2:Auto
++
++TxBurst {0,1} Enable/Disable
++ 0:Disable, 1:Enable
++
++TurboRate {0,1} Enable/Disable
++ 0:Disable, 1:Enable
++
++AdhocOfdm {0, 1} Adhoc mode OFDM
++ 0: Disallow 1: Allow
++
++AuthMode {OPEN,SHARED,WPAPSK} Authentication mode
++
++EncrypType {NONE,WEP,TKIP,AES} Encryption Type
++
++WPAPSK {8~63 ASCII or 64 HEX characters}
++ WPA Pre-Shared Key
++
++ApClient {0,1} Set ApClient mode
++ 0:Disable, 1:Enable
++
++iwlist
++=================
++This is detailed explanation of each parameters for iwlist.
++
++----------------------------------------------------------------------
++
++iwlist ra0 scanning; list the result after scanning(site survey)
++
++
++
++
++----------------------------------------------------------------------
++
++
++Deprecated iwpriv
++=================
++
++*** PLEASE DO NOT USE THESE FUNCTIONS, THIS IS FOR HISTORICAL
++ REFERENCE ONLY ***
++As the configuration utility still uses some iwpriv commands they have
++not been removed from the driver yet. These commands are likely to
++dissapear if the utility is updated.
++
++** ALL THESE COMMANDS HAVE A IWCONFIG REPLACEMENT, USE IT ****
++
++SSID {0~z, less than 32 characters} Set SoftAP SSID
++
++Channel {1~14} depends on country region Set Channel
++
++RTSThreshold {1~2347} Set RTS Threshold
++
++FragThreshold {256~2346} Set Fragment Threshold
++
++NetworkType {Infra,Adhoc} Set Network type
++
++DefaultKeyID {1~4} Set Default Key ID
++
++Key1 {5 ascii characters or Set Key1 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key2 {5 ascii characters or Set Key2 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key3 {5 ascii characters or Set Key3 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
++
++Key4 {5 ascii characters or Set Key4 String
++ 10 hex number or
++ 13 ascii characters or
++ 26 hex numbers}
+diff -Nur rt2500-1.1.0-b4/Module/load rt2500-cvs-2007061011/Module/load
+--- rt2500-1.1.0-b4/Module/load 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/load 1970-01-01 01:00:00.000000000 +0100
+@@ -1,3 +0,0 @@
+-/sbin/insmod rt2500.o
+-/sbin/ifconfig ra0 inet 192.168.1.234 up
+-/sbin/route add default gw 192.168.1.1
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/md5.c rt2500-cvs-2007061011/Module/md5.c
+--- rt2500-1.1.0-b4/Module/md5.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/md5.c 2007-05-29 05:49:17.000000000 +0200
+@@ -1,38 +1,38 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
+ * This MD5 code is based on code from Dynamics -- HUT Mobile IP *
+ * Copyright (C) 1998-2001, Dynamics group *
+- ***************************************************************************/
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: md5.c
+- *
++ *
+ * Abstract: contain MD5 and AES cipher algorithm
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * JanL 28th Oct 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * JanL 28th Oct 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -48,7 +48,8 @@
+ * md5_mac() determines the message authentication code by using secure hash
+ * MD5(key | data | key).
+ */
+-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
++void md5_mac(UCHAR *key, ULONG key_len, UCHAR *data, ULONG data_len,
++ UCHAR *mac)
+ {
+ MD5_CTX context;
+
+@@ -71,12 +72,13 @@
+ * hmac_md5() determines the message authentication code using HMAC-MD5.
+ * This implementation is based on the sample code presented in RFC 2104.
+ */
+-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
++void hmac_md5(UCHAR *key, ULONG key_len, UCHAR *data, ULONG data_len,
++ UCHAR *mac)
+ {
+ MD5_CTX context;
+- u8 k_ipad[65]; /* inner padding - key XORd with ipad */
+- u8 k_opad[65]; /* outer padding - key XORd with opad */
+- u8 tk[16];
++ UCHAR k_ipad[65]; /* inner padding - key XORd with ipad */
++ UCHAR k_opad[65]; /* outer padding - key XORd with opad */
++ UCHAR tk[16];
+ int i;
+
+ //assert(key != NULL && data != NULL && mac != NULL);
+@@ -128,25 +130,6 @@
+ MD5Final(mac, &context); /* finish up 2nd pass */
+ }
+
+-
+-/* ===== start - public domain MD5 implementation ===== */
+-/*
+- * This code implements the MD5 message-digest algorithm.
+- * The algorithm is due to Ron Rivest. This code was
+- * written by Colin Plumb in 1993, no copyright is claimed.
+- * This code is in the public domain; do with it what you wish.
+- *
+- * Equivalent code is available from RSA Data Security, Inc.
+- * This code has been tested against that, and is equivalent,
+- * except that you don't need to include two pages of legalese
+- * with every copy.
+- *
+- * To compute the message digest of a chunk of bytes, declare an
+- * MD5Context structure, pass it to MD5Init, call MD5Update as
+- * needed on buffers full of bytes, and then call MD5Final, which
+- * will fill a supplied 16-byte array with the digest.
+- */
+-
+ #ifndef BIG_ENDIAN
+ #define byteReverse(buf, len) /* Nothing */
+ #else
+@@ -160,588 +143,808 @@
+ }
+ #endif
+
++/* ========================== MD5 implementation =========================== */
++// four base functions for MD5
++#define MD5_F1(x, y, z) (((x) & (y)) | ((~x) & (z)))
++#define MD5_F2(x, y, z) (((x) & (z)) | ((y) & (~z)))
++#define MD5_F3(x, y, z) ((x) ^ (y) ^ (z))
++#define MD5_F4(x, y, z) ((y) ^ ((x) | (~z)))
++#define CYCLIC_LEFT_SHIFT(w, s) (((w) << (s)) | ((w) >> (32-(s))))
++
++#define MD5Step(f, w, x, y, z, data, t, s) \
++ ( w += f(x, y, z) + data + t, w = (CYCLIC_LEFT_SHIFT(w, s)) & 0xffffffff, w += x )
++
+ /*
+- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+- * initialization constants.
++ * Function Description:
++ * Initiate MD5 Context satisfied in RFC 1321
++ *
++ * Arguments:
++ * pCtx Pointer to MD5 context
++ *
++ * Return Value:
++ * None
+ */
+-void MD5Init(struct MD5Context *ctx)
++VOID MD5Init(MD5_CTX *pCtx)
+ {
+- ctx->buf[0] = 0x67452301;
+- ctx->buf[1] = 0xefcdab89;
+- ctx->buf[2] = 0x98badcfe;
+- ctx->buf[3] = 0x10325476;
++ pCtx->Buf[0] = 0x67452301;
++ pCtx->Buf[1] = 0xefcdab89;
++ pCtx->Buf[2] = 0x98badcfe;
++ pCtx->Buf[3] = 0x10325476;
+
+- ctx->bits[0] = 0;
+- ctx->bits[1] = 0;
++ pCtx->LenInBitCount[0] = 0;
++ pCtx->LenInBitCount[1] = 0;
+ }
+
+ /*
+- * Update context to reflect the concatenation of another buffer full
+- * of bytes.
++ * Function Description:
++ * Update MD5 Context, allow of an arrary of octets as the next portion
++ * of the message
++ *
++ * Arguments:
++ * pCtx Pointer to MD5 context
++ * pData Pointer to input data
++ * LenInBytes The length of input data (unit: byte)
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called after MD5Init or MD5Update(itself)
+ */
+-void MD5Update(struct MD5Context *ctx, unsigned char *buf, unsigned len)
++VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
+ {
+- u32 t;
++ ULONG TfTimes;
++ ULONG temp;
++ unsigned int i;
+
+- /* Update bitcount */
++ temp = pCtx->LenInBitCount[0];
+
+- t = ctx->bits[0];
+- if ((ctx->bits[0] = t + ((u32) len << 3)) < t)
+- ctx->bits[1]++; /* Carry from low to high */
+- ctx->bits[1] += len >> 29;
+-
+- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+-
+- /* Handle any leading odd-sized chunks */
+-
+- if (t) {
+- unsigned char *p = (unsigned char *) ctx->in + t;
+-
+- t = 64 - t;
+- if (len < t) {
+- memcpy(p, buf, len);
+- return;
+- }
+- memcpy(p, buf, t);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- buf += t;
+- len -= t;
+- }
+- /* Process data in 64-byte chunks */
++ pCtx->LenInBitCount[0] =
++ (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
+
+- while (len >= 64) {
+- memcpy(ctx->in, buf, 64);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- buf += 64;
+- len -= 64;
+- }
++ if (pCtx->LenInBitCount[0] < temp)
++ pCtx->LenInBitCount[1]++; //carry in
++
++ pCtx->LenInBitCount[1] += LenInBytes >> 29;
++
++ // mod 64 bytes
++ temp = (temp >> 3) & 0x3f;
++
++ // process lacks of 64-byte data
++ if (temp) {
++ UCHAR *pAds = (UCHAR *) pCtx->Input + temp;
++
++ if ((temp + LenInBytes) < 64) {
++ memcpy(pAds, (UCHAR *) pData, LenInBytes);
++ return;
++ }
+
+- /* Handle any remaining bytes of data. */
++ memcpy(pAds, (UCHAR *) pData, 64 - temp);
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
+
+- memcpy(ctx->in, buf, len);
++ pData += 64 - temp;
++ LenInBytes -= 64 - temp;
++ } // end of if (temp)
++
++ TfTimes = (LenInBytes >> 6);
++
++ for (i = TfTimes; i > 0; i--) {
++ memcpy(pCtx->Input, (UCHAR *) pData, 64);
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ pData += 64;
++ LenInBytes -= 64;
++ } // end of for
++
++ // buffering lacks of 64-byte data
++ if (LenInBytes)
++ memcpy(pCtx->Input, (UCHAR *) pData, LenInBytes);
+ }
+
+ /*
+- * Final wrapup - pad to 64-byte boundary with the bit pattern
+- * 1 0* (64-bit count of bits processed, MSB-first)
++ * Function Description:
++ * Append padding bits and length of original message in the tail
++ * The message digest has to be completed in the end
++ *
++ * Arguments:
++ * Digest Output of Digest-Message for MD5
++ * pCtx Pointer to MD5 context
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called after MD5Update
+ */
+-void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
++VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
+ {
+- unsigned count;
+- unsigned char *p;
+-
+- /* Compute number of bytes mod 64 */
+- count = (ctx->bits[0] >> 3) & 0x3F;
+-
+- /* Set the first char of padding to 0x80. This is safe since there is
+- always at least one byte free */
+- p = ctx->in + count;
+- *p++ = 0x80;
+-
+- /* Bytes of padding needed to make 64 bytes */
+- count = 64 - 1 - count;
+-
+- /* Pad out to 56 mod 64 */
+- if (count < 8) {
+- /* Two lots of padding: Pad the first block to 64 bytes */
+- memset(p, 0, count);
+- byteReverse(ctx->in, 16);
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+-
+- /* Now fill the next block with 56 bytes */
+- memset(ctx->in, 0, 56);
+- } else {
+- /* Pad block to 56 bytes */
+- memset(p, 0, count - 8);
+- }
+- byteReverse(ctx->in, 14);
++ UCHAR Remainder;
++ UCHAR PadLenInBytes;
++ UCHAR *pAppend = 0;
++ unsigned int i;
++
++ Remainder = (UCHAR) ((pCtx->LenInBitCount[0] >> 3) & 0x3f);
++
++ PadLenInBytes = (Remainder < 56) ? (56 - Remainder) : (120 - Remainder);
++
++ pAppend = (UCHAR *) pCtx->Input + Remainder;
++
++ // padding bits without crossing block(64-byte based) boundary
++ if (Remainder < 56) {
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ PadLenInBytes);
++
++ // add data-length field, from low to high
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> (i << 3)) & 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> (i << 3)) & 0xff);
++ }
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of if
++
++ // padding bits with crossing block(64-byte based) boundary
++ else {
++ // the first block ===
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ (64 - Remainder - 1));
++ PadLenInBytes -= (64 - Remainder - 1);
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ // the second block ===
++ memset((UCHAR *) pCtx->Input, 0, PadLenInBytes);
++
++ // add data-length field
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> (i << 3)) & 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> (i << 3)) & 0xff);
++ }
++
++ byteReverse(pCtx->Input, 16);
++ MD5Transform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of else
++
++ memcpy((UCHAR *) Digest, (ULONG *) pCtx->Buf, 16); // output
++ byteReverse((UCHAR *) Digest, 4);
++ memset(pCtx, 0, sizeof(pCtx)); // memory free
++}
+
+- /* Append length in bits and transform */
+- ((u32 *) ctx->in)[14] = ctx->bits[0];
+- ((u32 *) ctx->in)[15] = ctx->bits[1];
++/*
++ * Function Description:
++ * The central algorithm of MD5, consists of four rounds and sixteen
++ * steps per round
++ *
++ * Arguments:
++ * Buf Buffers of four states (output: 16 bytes)
++ * Mes Input data (input: 64 bytes)
++ *
++ * Return Value:
++ * None
++ *
++ * Note:
++ * Called by MD5Update or MD5Final
++ */
++VOID MD5Transform(ULONG Buf[4], ULONG Mes[16])
++{
++ ULONG Reg[4], Temp;
++ unsigned int i;
+
+- MD5Transform(ctx->buf, (u32 *) ctx->in);
+- byteReverse((unsigned char *) ctx->buf, 4);
+- memcpy(digest, ctx->buf, 16);
+- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
++ static UCHAR LShiftVal[16] = {
++ 7, 12, 17, 22,
++ 5, 9, 14, 20,
++ 4, 11, 16, 23,
++ 6, 10, 15, 21,
++ };
++
++ // [equal to 4294967296*abs(sin(index))]
++ static ULONG MD5Table[64] = {
++ 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
++ 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
++ 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
++ 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
++
++ 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
++ 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
++ 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
++ 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
++
++ 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
++ 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
++ 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
++ 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
++
++ 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
++ 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
++ 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
++ 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
++ };
++
++ for (i = 0; i < 4; i++)
++ Reg[i] = Buf[i];
++
++ // 64 steps in MD5 algorithm
++ for (i = 0; i < 16; i++) {
++ MD5Step(MD5_F1, Reg[0], Reg[1], Reg[2], Reg[3], Mes[i],
++ MD5Table[i], LShiftVal[i & 0x3]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 16; i < 32; i++) {
++ MD5Step(MD5_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(5 * (i & 0xf) + 1) & 0xf], MD5Table[i],
++ LShiftVal[(0x1 << 2) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 32; i < 48; i++) {
++ MD5Step(MD5_F3, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(3 * (i & 0xf) + 5) & 0xf], MD5Table[i],
++ LShiftVal[(0x1 << 3) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++ for (i = 48; i < 64; i++) {
++ MD5Step(MD5_F4, Reg[0], Reg[1], Reg[2], Reg[3],
++ Mes[(7 * (i & 0xf)) & 0xf], MD5Table[i],
++ LShiftVal[(0x3 << 2) + (i & 0x3)]);
++
++ // one-word right shift
++ Temp = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++ }
++
++ // (temporary)output
++ for (i = 0; i < 4; i++)
++ Buf[i] += Reg[i];
+ }
+
+-//#ifndef ASM_MD5
+-#if 1
++/* ========================= SHA-1 implementation ========================== */
++// four base functions for SHA-1
++#define SHA1_F1(b, c, d) (((b) & (c)) | ((~b) & (d)))
++#define SHA1_F2(b, c, d) ((b) ^ (c) ^ (d))
++#define SHA1_F3(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
++
++#define SHA1Step(f, a, b, c, d, e, w, k) \
++ ( e += ( f(b, c, d) + w + k + CYCLIC_LEFT_SHIFT(a, 5)) & 0xffffffff, \
++ b = CYCLIC_LEFT_SHIFT(b, 30) )
+
+-/* The four core functions - F1 is optimized somewhat */
+-
+-/* #define F1(x, y, z) (x & y | ~x & z) */
+-#define F1(x, y, z) (z ^ (x & (y ^ z)))
+-#define F2(x, y, z) F1(z, x, y)
+-#define F3(x, y, z) (x ^ y ^ z)
+-#define F4(x, y, z) (y ^ (x | ~z))
++//Initiate SHA-1 Context satisfied in RFC 3174
++VOID SHAInit(SHA_CTX * pCtx)
++{
++ pCtx->Buf[0] = 0x67452301;
++ pCtx->Buf[1] = 0xefcdab89;
++ pCtx->Buf[2] = 0x98badcfe;
++ pCtx->Buf[3] = 0x10325476;
++ pCtx->Buf[4] = 0xc3d2e1f0;
+
+-/* This is the central step in the MD5 algorithm. */
+-#define MD5STEP(f, w, x, y, z, data, s) \
+- ( w += f(x, y, z) + data, w =( w<<s | w>>(32-s))&0xffffffff, w += x )
++ pCtx->LenInBitCount[0] = 0;
++ pCtx->LenInBitCount[1] = 0;
++}
+
+ /*
+- * The core of the MD5 algorithm, this alters an existing MD5 hash to
+- * reflect the addition of 16 longwords of new data. MD5Update blocks
+- * the data and converts bytes into longwords for this routine.
++ * Function Description:
++ * Update SHA-1 Context, allow of an arrary of octets as the next
++ * portion of the message
++ *
++ * Arguments:
++ * pCtx Pointer to SHA-1 context
++ * pData Pointer to input data
++ * LenInBytes The length of input data (unit: byte)
++ *
++ * Return Value:
++ * error indicate more than pow(2,64) bits of data
++ *
++ * Note:
++ * Called after SHAInit or SHAUpdate(itself)
+ */
+-void MD5Transform(u32 buf[4], u32 in[16])
++UCHAR SHAUpdate(SHA_CTX * pCtx, UCHAR * pData, ULONG LenInBytes)
+ {
+- register u32 a, b, c, d;
++ ULONG TfTimes;
++ ULONG temp1, temp2;
++ unsigned int i;
++ UCHAR err = 1;
++
++ temp1 = pCtx->LenInBitCount[0];
++ temp2 = pCtx->LenInBitCount[1];
++
++ pCtx->LenInBitCount[0] =
++ (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
++ if (pCtx->LenInBitCount[0] < temp1)
++ pCtx->LenInBitCount[1]++; //carry in
++
++ pCtx->LenInBitCount[1] =
++ (ULONG) (pCtx->LenInBitCount[1] + (LenInBytes >> 29));
++ if (pCtx->LenInBitCount[1] < temp2)
++ return (err); //check total length of original data
++
++ // mod 64 bytes
++ temp1 = (temp1 >> 3) & 0x3f;
++
++ // process lacks of 64-byte data
++ if (temp1) {
++ UCHAR *pAds = (UCHAR *) pCtx->Input + temp1;
++
++ if ((temp1 + LenInBytes) < 64) {
++ memcpy(pAds, (UCHAR *) pData, LenInBytes);
++ return (0);
++ }
++
++ memcpy(pAds, (UCHAR *) pData, 64 - temp1);
++ byteReverse((UCHAR *) pCtx->Input, 16);
++
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ pData += 64 - temp1;
++ LenInBytes -= 64 - temp1;
++ } // end of if (temp1)
++
++ TfTimes = (LenInBytes >> 6);
++
++ for (i = TfTimes; i > 0; i--) {
++ memcpy(pCtx->Input, (UCHAR *) pData, 64);
++ byteReverse((UCHAR *) pCtx->Input, 16);
++
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ pData += 64;
++ LenInBytes -= 64;
++ } // end of for
++
++ // buffering lacks of 64-byte data
++ if (LenInBytes)
++ memcpy(pCtx->Input, (UCHAR *) pData, LenInBytes);
+
+- a = buf[0];
+- b = buf[1];
+- c = buf[2];
+- d = buf[3];
+-
+- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+-
+- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+-
+- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+-
+- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+-
+- buf[0] += a;
+- buf[1] += b;
+- buf[2] += c;
+- buf[3] += d;
++ return (0);
+ }
+-#endif
+
+-void SHAInit(SHA_CTX *ctx) {
+- int i;
+-
+- ctx->lenW = 0;
+- ctx->sizeHi = ctx->sizeLo = 0;
+-
+- /* Initialize H with the magic constants (see FIPS180 for constants)
+- */
+- ctx->H[0] = 0x67452301L;
+- ctx->H[1] = 0xefcdab89L;
+- ctx->H[2] = 0x98badcfeL;
+- ctx->H[3] = 0x10325476L;
+- ctx->H[4] = 0xc3d2e1f0L;
+-
+- for (i = 0; i < 80; i++)
+- ctx->W[i] = 0;
+- }
+-
+-#define SHA_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xffffffffL)
+-
+-void SHAHashBlock(SHA_CTX *ctx) {
+- int t;
+- unsigned long A,B,C,D,E,TEMP;
+-
+- for (t = 16; t <= 79; t++)
+- ctx->W[t] = SHA_ROTL(ctx->W[t-3] ^ ctx->W[t-8] ^ ctx->W[t-14] ^ ctx->W[t-16], 1);
+-
+- A = ctx->H[0];
+- B = ctx->H[1];
+- C = ctx->H[2];
+- D = ctx->H[3];
+- E = ctx->H[4];
+-
+- for (t = 0; t <= 19; t++) {
+- TEMP = (SHA_ROTL(A,5) + (((C^D)&B)^D) + E + ctx->W[t] + 0x5a827999L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 20; t <= 39; t++) {
+- TEMP = (SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0x6ed9eba1L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 40; t <= 59; t++) {
+- TEMP = (SHA_ROTL(A,5) + ((B&C)|(D&(B|C))) + E + ctx->W[t] + 0x8f1bbcdcL) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+- for (t = 60; t <= 79; t++) {
+- TEMP = (SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0xca62c1d6L) & 0xffffffffL;
+- E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
+- }
+-
+- ctx->H[0] += A;
+- ctx->H[1] += B;
+- ctx->H[2] += C;
+- ctx->H[3] += D;
+- ctx->H[4] += E;
++// Append padding bits and length of original message in the tail
++// The message digest has to be completed in the end
++VOID SHAFinal(SHA_CTX * pCtx, UCHAR Digest[20])
++{
++ UCHAR Remainder;
++ UCHAR PadLenInBytes;
++ UCHAR *pAppend = 0;
++ unsigned int i;
++
++ Remainder = (UCHAR) ((pCtx->LenInBitCount[0] >> 3) & 0x3f);
++
++ pAppend = (UCHAR *) pCtx->Input + Remainder;
++
++ PadLenInBytes = (Remainder < 56) ? (56 - Remainder) : (120 - Remainder);
++
++ // padding bits without crossing block(64-byte based) boundary
++ if (Remainder < 56) {
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ PadLenInBytes);
++
++ // add data-length field, from high to low
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> ((3 - i) << 3)) &
++ 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> ((3 - i) << 3)) &
++ 0xff);
++ }
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 14);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of if
++
++ // padding bits with crossing block(64-byte based) boundary
++ else {
++ // the first block ===
++ *pAppend = 0x80;
++ PadLenInBytes--;
++
++ memset((UCHAR *) pCtx->Input + Remainder + 1, 0,
++ (64 - Remainder - 1));
++ PadLenInBytes -= (64 - Remainder - 1);
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++
++ // the second block ===
++ memset((UCHAR *) pCtx->Input, 0, PadLenInBytes);
++
++ // add data-length field
++ for (i = 0; i < 4; i++) {
++ pCtx->Input[56 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[1] >> ((3 - i) << 3)) &
++ 0xff);
++ pCtx->Input[60 + i] =
++ (UCHAR) ((pCtx->
++ LenInBitCount[0] >> ((3 - i) << 3)) &
++ 0xff);
++ }
++
++ byteReverse((UCHAR *) pCtx->Input, 16);
++ memset((UCHAR *) pCtx->Input + 64, 0, 16);
++ SHATransform(pCtx->Buf, (ULONG *) pCtx->Input);
++ } // end of else
++
++ //Output, bytereverse
++ for (i = 0; i < 20; i++) {
++ Digest[i] = (UCHAR) (pCtx->Buf[i >> 2] >> 8 * (3 - (i & 0x3)));
++ }
++
++ memset(pCtx, 0, sizeof(pCtx)); // memory free
+ }
+
+-void SHAUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len)
++// The central algorithm of SHA-1, consists of four rounds and
++// twenty steps per round
++VOID SHATransform(ULONG Buf[5], ULONG Mes[20])
+ {
+- int i;
+-
+- /* Read the data into W and process blocks as they get full
+- */
+- for (i = 0; i < len; i++) {
+- ctx->W[ctx->lenW / 4] <<= 8;
+- ctx->W[ctx->lenW / 4] |= (unsigned long)dataIn[i];
+- if ((++ctx->lenW) % 64 == 0) {
+- SHAHashBlock(ctx);
+- ctx->lenW = 0;
+- }
+- ctx->sizeLo += 8;
+- ctx->sizeHi += (ctx->sizeLo < 8);
+- }
++ ULONG Reg[5], Temp;
++ unsigned int i;
++ ULONG W[80];
++
++ static ULONG SHA1Table[4] = { 0x5a827999, 0x6ed9eba1,
++ 0x8f1bbcdc, 0xca62c1d6
++ };
++
++ Reg[0] = Buf[0];
++ Reg[1] = Buf[1];
++ Reg[2] = Buf[2];
++ Reg[3] = Buf[3];
++ Reg[4] = Buf[4];
++
++ //the first octet of a word is stored in the 0th element, bytereverse
++ for (i = 0; i < 16; i++) {
++ W[i] = (Mes[i] >> 24) & 0xff;
++ W[i] |= (Mes[i] >> 8) & 0xff00;
++ W[i] |= (Mes[i] << 8) & 0xff0000;
++ W[i] |= (Mes[i] << 24) & 0xff000000;
++ }
++
++ for (i = 0; i < 64; i++)
++ W[16 + i] =
++ CYCLIC_LEFT_SHIFT(W[i] ^ W[2 + i] ^ W[8 + i] ^ W[13 + i],
++ 1);
++
++ // 80 steps in SHA-1 algorithm
++ for (i = 0; i < 80; i++) {
++ if (i < 20)
++ SHA1Step(SHA1_F1, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[0]);
++
++ else if (i >= 20 && i < 40)
++ SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[1]);
++
++ else if (i >= 40 && i < 60)
++ SHA1Step(SHA1_F3, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[2]);
++
++ else
++ SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3],
++ Reg[4], W[i], SHA1Table[3]);
++
++ // one-word right shift
++ Temp = Reg[4];
++ Reg[4] = Reg[3];
++ Reg[3] = Reg[2];
++ Reg[2] = Reg[1];
++ Reg[1] = Reg[0];
++ Reg[0] = Temp;
++
++ } // end of for-loop
++
++ // (temporary)output
++ for (i = 0; i < 5; i++)
++ Buf[i] += Reg[i];
+ }
+
+-
+-void SHAFinal(SHA_CTX *ctx, unsigned char hashout[20]) {
+- unsigned char pad0x80 = 0x80;
+- unsigned char pad0x00 = 0x00;
+- unsigned char padlen[8];
+- int i;
+-
+- /* Pad with a binary 1 (e.g. 0x80), then zeroes, then length
+- */
+- padlen[0] = (unsigned char)((ctx->sizeHi >> 24) & 255);
+- padlen[1] = (unsigned char)((ctx->sizeHi >> 16) & 255);
+- padlen[2] = (unsigned char)((ctx->sizeHi >> 8) & 255);
+- padlen[3] = (unsigned char)((ctx->sizeHi >> 0) & 255);
+- padlen[4] = (unsigned char)((ctx->sizeLo >> 24) & 255);
+- padlen[5] = (unsigned char)((ctx->sizeLo >> 16) & 255);
+- padlen[6] = (unsigned char)((ctx->sizeLo >> 8) & 255);
+- padlen[7] = (unsigned char)((ctx->sizeLo >> 0) & 255);
+- SHAUpdate(ctx, &pad0x80, 1);
+- while (ctx->lenW != 56)
+- SHAUpdate(ctx, &pad0x00, 1);
+- SHAUpdate(ctx, padlen, 8);
+-
+- /* Output hash
+- */
+- for (i = 0; i < 20; i++) {
+- hashout[i] = (unsigned char)(ctx->H[i / 4] >> 24);
+- ctx->H[i / 4] <<= 8;
+- }
+-
+- /*
+- * Re-initialize the context (also zeroizes contents)
+- */
+- SHAInit(ctx);
+-}
++/* ========================= AES En/Decryption ========================== */
+
+ /* forward S-box */
+-
+-static uint32 FSb[256] =
+-{
+- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
+- 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
+- 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
+- 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
+- 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
+- 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
+- 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
+- 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
+- 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
+- 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
+- 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
+- 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
+- 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
+- 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
+- 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
+- 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
+- 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
++static uint32 FSb[256] = {
++ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
++ 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
++ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
++ 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
++ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
++ 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
++ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
++ 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
++ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
++ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
++ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
++ 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
++ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
++ 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
++ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
++ 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
++ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
++ 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
++ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
++ 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
++ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
++ 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
++ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
++ 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
++ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
++ 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
++ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
++ 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
++ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
++ 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
++ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
++ 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+ };
+
+ /* forward table */
+-
+-#define FT \
++#define FT \
+ \
+- V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \
+- V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \
+- V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \
+- V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \
+- V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \
+- V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \
+- V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \
+- V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \
+- V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \
+- V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \
+- V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \
+- V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \
+- V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \
+- V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \
+- V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \
+- V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \
+- V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \
+- V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \
+- V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \
+- V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \
+- V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \
+- V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \
+- V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \
+- V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \
+- V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \
+- V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \
+- V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \
+- V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \
+- V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \
+- V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \
+- V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \
+- V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \
+- V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \
+- V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \
+- V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \
+- V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \
+- V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \
+- V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \
+- V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \
+- V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \
+- V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \
+- V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \
+- V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \
+- V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \
+- V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \
+- V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \
+- V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \
+- V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \
+- V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \
+- V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \
+- V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \
+- V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \
+- V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \
+- V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \
+- V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \
+- V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \
+- V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \
+- V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \
+- V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \
+- V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \
+- V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \
+- V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \
+- V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \
+- V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A)
++ V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \
++ V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \
++ V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \
++ V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \
++ V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \
++ V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \
++ V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \
++ V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \
++ V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \
++ V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \
++ V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \
++ V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \
++ V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \
++ V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \
++ V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \
++ V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \
++ V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \
++ V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \
++ V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \
++ V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \
++ V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \
++ V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \
++ V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \
++ V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \
++ V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \
++ V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \
++ V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \
++ V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \
++ V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \
++ V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \
++ V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \
++ V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \
++ V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \
++ V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \
++ V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \
++ V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \
++ V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \
++ V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \
++ V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \
++ V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \
++ V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \
++ V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \
++ V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \
++ V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \
++ V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \
++ V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \
++ V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \
++ V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \
++ V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \
++ V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \
++ V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \
++ V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \
++ V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \
++ V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \
++ V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \
++ V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \
++ V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \
++ V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \
++ V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \
++ V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \
++ V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \
++ V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \
++ V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \
++ V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A)
+
+-#define V(a,b,c,d) 0x##a##b##c##d
++#define V(a,b,c,d) 0x##a##b##c##d
+ static uint32 FT0[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##d##a##b##c
++#define V(a,b,c,d) 0x##d##a##b##c
+ static uint32 FT1[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##c##d##a##b
++#define V(a,b,c,d) 0x##c##d##a##b
+ static uint32 FT2[256] = { FT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##b##c##d##a
++#define V(a,b,c,d) 0x##b##c##d##a
+ static uint32 FT3[256] = { FT };
++
+ #undef V
+
+ #undef FT
+
+ /* reverse S-box */
+
+-static uint32 RSb[256] =
+-{
+- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
+- 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
+- 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
+- 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
+- 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
+- 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
+- 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
+- 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
+- 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
+- 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
+- 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
+- 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
+- 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
+- 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
+- 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
+- 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
+- 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
++static uint32 RSb[256] = {
++ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
++ 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
++ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
++ 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
++ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
++ 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
++ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
++ 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
++ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
++ 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
++ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
++ 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
++ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
++ 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
++ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
++ 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
++ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
++ 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
++ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
++ 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
++ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
++ 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
++ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
++ 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
++ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
++ 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
++ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
++ 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
++ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
++ 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
++ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
++ 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+ };
+
+ /* reverse table */
+
+-#define RT \
++#define RT \
+ \
+- V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \
+- V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \
+- V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \
+- V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \
+- V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \
+- V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \
+- V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \
+- V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \
+- V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \
+- V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \
+- V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \
+- V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \
+- V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \
+- V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \
+- V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \
+- V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \
+- V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \
+- V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \
+- V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \
+- V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \
+- V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \
+- V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \
+- V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \
+- V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \
+- V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \
+- V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \
+- V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \
+- V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \
+- V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \
+- V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \
+- V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \
+- V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \
+- V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \
+- V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \
+- V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \
+- V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \
+- V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \
+- V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \
+- V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \
+- V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \
+- V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \
+- V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \
+- V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \
+- V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \
+- V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \
+- V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \
+- V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \
+- V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \
+- V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \
+- V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \
+- V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \
+- V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \
+- V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \
+- V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \
+- V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \
+- V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \
+- V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \
+- V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \
+- V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \
+- V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \
+- V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \
+- V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \
+- V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \
+- V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42)
++ V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \
++ V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \
++ V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \
++ V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \
++ V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \
++ V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \
++ V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \
++ V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \
++ V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \
++ V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \
++ V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \
++ V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \
++ V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \
++ V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \
++ V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \
++ V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \
++ V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \
++ V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \
++ V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \
++ V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \
++ V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \
++ V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \
++ V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \
++ V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \
++ V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \
++ V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \
++ V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \
++ V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \
++ V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \
++ V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \
++ V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \
++ V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \
++ V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \
++ V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \
++ V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \
++ V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \
++ V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \
++ V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \
++ V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \
++ V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \
++ V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \
++ V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \
++ V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \
++ V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \
++ V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \
++ V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \
++ V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \
++ V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \
++ V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \
++ V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \
++ V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \
++ V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \
++ V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \
++ V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \
++ V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \
++ V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \
++ V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \
++ V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \
++ V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \
++ V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \
++ V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \
++ V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \
++ V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \
++ V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42)
+
+-#define V(a,b,c,d) 0x##a##b##c##d
++#define V(a,b,c,d) 0x##a##b##c##d
+ static uint32 RT0[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##d##a##b##c
++#define V(a,b,c,d) 0x##d##a##b##c
+ static uint32 RT1[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##c##d##a##b
++#define V(a,b,c,d) 0x##c##d##a##b
+ static uint32 RT2[256] = { RT };
++
+ #undef V
+
+-#define V(a,b,c,d) 0x##b##c##d##a
++#define V(a,b,c,d) 0x##b##c##d##a
+ static uint32 RT3[256] = { RT };
++
+ #undef V
+
+ #undef RT
+
+ /* round constants */
+
+-static uint32 RCON[10] =
+-{
+- 0x01000000, 0x02000000, 0x04000000, 0x08000000,
+- 0x10000000, 0x20000000, 0x40000000, 0x80000000,
+- 0x1B000000, 0x36000000
++static uint32 RCON[10] = {
++ 0x01000000, 0x02000000, 0x04000000, 0x08000000,
++ 0x10000000, 0x20000000, 0x40000000, 0x80000000,
++ 0x1B000000, 0x36000000
+ };
+
+-/* key schedule tables */
++/* key schedule tables */
+
+ static int KT_init = 1;
+
+@@ -750,451 +953,445 @@
+ static uint32 KT2[256];
+ static uint32 KT3[256];
+
+-/* platform-independant 32-bit integer manipulation macros */
++/* platform-independant 32-bit integer manipulation macros */
++
++#define GET_UINT32(n,b,i) \
++{ \
++ (n) = ( (uint32) (b)[(i) ] << 24 ) \
++ | ( (uint32) (b)[(i) + 1] << 16 ) \
++ | ( (uint32) (b)[(i) + 2] << 8 ) \
++ | ( (uint32) (b)[(i) + 3] ); \
++}
+
+-#define GET_UINT32(n,b,i) \
+-{ \
+- (n) = ( (uint32) (b)[(i) ] << 24 ) \
+- | ( (uint32) (b)[(i) + 1] << 16 ) \
+- | ( (uint32) (b)[(i) + 2] << 8 ) \
+- | ( (uint32) (b)[(i) + 3] ); \
+-}
+-
+-#define PUT_UINT32(n,b,i) \
+-{ \
+- (b)[(i) ] = (uint8) ( (n) >> 24 ); \
+- (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
+- (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
+- (b)[(i) + 3] = (uint8) ( (n) ); \
++#define PUT_UINT32(n,b,i) \
++{ \
++ (b)[(i) ] = (uint8) ( (n) >> 24 ); \
++ (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
++ (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
++ (b)[(i) + 3] = (uint8) ( (n) ); \
+ }
+
+ /* AES key scheduling routine */
+
+-int aes_set_key( aes_context *ctx, uint8 *key, int nbits )
++int aes_set_key(aes_context * ctx, uint8 * key, int nbits)
+ {
+- int i;
+- uint32 *RK, *SK;
+-
+- switch( nbits )
+- {
+- case 128: ctx->nr = 10; break;
+- case 192: ctx->nr = 12; break;
+- case 256: ctx->nr = 14; break;
+- default : return( 1 );
+- }
+-
+- RK = ctx->erk;
+-
+- for( i = 0; i < (nbits >> 5); i++ )
+- {
+- GET_UINT32( RK[i], key, i * 4 );
+- }
+-
+- /* setup encryption round keys */
+-
+- switch( nbits )
+- {
+- case 128:
+-
+- for( i = 0; i < 10; i++, RK += 4 )
+- {
+- RK[4] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[3] >> 24 ) ] );
+-
+- RK[5] = RK[1] ^ RK[4];
+- RK[6] = RK[2] ^ RK[5];
+- RK[7] = RK[3] ^ RK[6];
+- }
+- break;
+-
+- case 192:
+-
+- for( i = 0; i < 8; i++, RK += 6 )
+- {
+- RK[6] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[5] >> 24 ) ] );
+-
+- RK[7] = RK[1] ^ RK[6];
+- RK[8] = RK[2] ^ RK[7];
+- RK[9] = RK[3] ^ RK[8];
+- RK[10] = RK[4] ^ RK[9];
+- RK[11] = RK[5] ^ RK[10];
+- }
+- break;
+-
+- case 256:
+-
+- for( i = 0; i < 7; i++, RK += 8 )
+- {
+- RK[8] = RK[0] ^ RCON[i] ^
+- ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[7] >> 24 ) ] );
+-
+- RK[9] = RK[1] ^ RK[8];
+- RK[10] = RK[2] ^ RK[9];
+- RK[11] = RK[3] ^ RK[10];
+-
+- RK[12] = RK[4] ^
+- ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( RK[11] ) ] );
+-
+- RK[13] = RK[5] ^ RK[12];
+- RK[14] = RK[6] ^ RK[13];
+- RK[15] = RK[7] ^ RK[14];
+- }
+- break;
+- }
+-
+- /* setup decryption round keys */
++ int i;
++ uint32 *RK, *SK;
+
+- if( KT_init )
+- {
+- for( i = 0; i < 256; i++ )
+- {
+- KT0[i] = RT0[ FSb[i] ];
+- KT1[i] = RT1[ FSb[i] ];
+- KT2[i] = RT2[ FSb[i] ];
+- KT3[i] = RT3[ FSb[i] ];
+- }
++ switch (nbits) {
++ case 128:
++ ctx->nr = 10;
++ break;
++ case 192:
++ ctx->nr = 12;
++ break;
++ case 256:
++ ctx->nr = 14;
++ break;
++ default:
++ return (1);
++ }
++
++ RK = ctx->erk;
++
++ for (i = 0; i < (nbits >> 5); i++) {
++ GET_UINT32(RK[i], key, i * 4);
++ }
++
++ /* setup encryption round keys */
++
++ switch (nbits) {
++ case 128:
++
++ for (i = 0; i < 10; i++, RK += 4) {
++ RK[4] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[3] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[3] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[3])] << 8) ^
++ (FSb[(uint8) (RK[3] >> 24)]);
++
++ RK[5] = RK[1] ^ RK[4];
++ RK[6] = RK[2] ^ RK[5];
++ RK[7] = RK[3] ^ RK[6];
++ }
++ break;
++
++ case 192:
++
++ for (i = 0; i < 8; i++, RK += 6) {
++ RK[6] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[5] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[5] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[5])] << 8) ^
++ (FSb[(uint8) (RK[5] >> 24)]);
++
++ RK[7] = RK[1] ^ RK[6];
++ RK[8] = RK[2] ^ RK[7];
++ RK[9] = RK[3] ^ RK[8];
++ RK[10] = RK[4] ^ RK[9];
++ RK[11] = RK[5] ^ RK[10];
++ }
++ break;
++
++ case 256:
++
++ for (i = 0; i < 7; i++, RK += 8) {
++ RK[8] = RK[0] ^ RCON[i] ^
++ (FSb[(uint8) (RK[7] >> 16)] << 24) ^
++ (FSb[(uint8) (RK[7] >> 8)] << 16) ^
++ (FSb[(uint8) (RK[7])] << 8) ^
++ (FSb[(uint8) (RK[7] >> 24)]);
++
++ RK[9] = RK[1] ^ RK[8];
++ RK[10] = RK[2] ^ RK[9];
++ RK[11] = RK[3] ^ RK[10];
++
++ RK[12] = RK[4] ^
++ (FSb[(uint8) (RK[11] >> 24)] << 24) ^
++ (FSb[(uint8) (RK[11] >> 16)] << 16) ^
++ (FSb[(uint8) (RK[11] >> 8)] << 8) ^
++ (FSb[(uint8) (RK[11])]);
++
++ RK[13] = RK[5] ^ RK[12];
++ RK[14] = RK[6] ^ RK[13];
++ RK[15] = RK[7] ^ RK[14];
++ }
++ break;
++ }
++
++ /* setup decryption round keys */
++
++ if (KT_init) {
++ for (i = 0; i < 256; i++) {
++ KT0[i] = RT0[FSb[i]];
++ KT1[i] = RT1[FSb[i]];
++ KT2[i] = RT2[FSb[i]];
++ KT3[i] = RT3[FSb[i]];
++ }
++
++ KT_init = 0;
++ }
++
++ SK = ctx->drk;
++
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++
++ for (i = 1; i < ctx->nr; i++) {
++ RK -= 8;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++
++ *SK++ = KT0[(uint8) (*RK >> 24)] ^
++ KT1[(uint8) (*RK >> 16)] ^
++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)];
++ RK++;
++ }
++
++ RK -= 8;
++
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
++ *SK++ = *RK++;
+
+- KT_init = 0;
+- }
+-
+- SK = ctx->drk;
+-
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+-
+- for( i = 1; i < ctx->nr; i++ )
+- {
+- RK -= 8;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+-
+- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^
+- KT1[ (uint8) ( *RK >> 16 ) ] ^
+- KT2[ (uint8) ( *RK >> 8 ) ] ^
+- KT3[ (uint8) ( *RK ) ]; RK++;
+- }
+-
+- RK -= 8;
+-
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+- *SK++ = *RK++;
+-
+- return( 0 );
++ return (0);
+ }
+
+-/* AES 128-bit block encryption routine */
++/* AES 128-bit block encryption routine */
+
+-void aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] )
++void aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16])
+ {
+- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+
+- RK = ctx->erk;
+- GET_UINT32( X0, input, 0 ); X0 ^= RK[0];
+- GET_UINT32( X1, input, 4 ); X1 ^= RK[1];
+- GET_UINT32( X2, input, 8 ); X2 ^= RK[2];
+- GET_UINT32( X3, input, 12 ); X3 ^= RK[3];
+-
+-#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
+-{ \
+- RK += 4; \
+- \
+- X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y1 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y2 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y3 ) ]; \
+- \
+- X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y2 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y3 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y0 ) ]; \
+- \
+- X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y3 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y0 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y1 ) ]; \
+- \
+- X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \
+- FT1[ (uint8) ( Y0 >> 16 ) ] ^ \
+- FT2[ (uint8) ( Y1 >> 8 ) ] ^ \
+- FT3[ (uint8) ( Y2 ) ]; \
+-}
+-
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */
+-
+- if( ctx->nr > 10 )
+- {
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */
+- }
+-
+- if( ctx->nr > 12 )
+- {
+- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */
+- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */
+- }
+-
+- /* last round */
+-
+- RK += 4;
++ RK = ctx->erk;
++ GET_UINT32(X0, input, 0);
++ X0 ^= RK[0];
++ GET_UINT32(X1, input, 4);
++ X1 ^= RK[1];
++ GET_UINT32(X2, input, 8);
++ X2 ^= RK[2];
++ GET_UINT32(X3, input, 12);
++ X3 ^= RK[3];
++
++#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
++{ \
++ RK += 4; \
++ \
++ X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y1 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y2 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y3 ) ]; \
++ \
++ X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y2 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y3 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y0 ) ]; \
++ \
++ X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y3 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y0 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y1 ) ]; \
++ \
++ X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \
++ FT1[ (uint8) ( Y0 >> 16 ) ] ^ \
++ FT2[ (uint8) ( Y1 >> 8 ) ] ^ \
++ FT3[ (uint8) ( Y2 ) ]; \
++}
+
+- X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y3 ) ] );
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
++
++ if (ctx->nr > 10) {
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
++ }
++
++ if (ctx->nr > 12) {
++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
++ }
++
++ /* last round */
++
++ RK += 4;
++
++ X0 = RK[0] ^ (FSb[(uint8) (Y0 >> 24)] << 24) ^
++ (FSb[(uint8) (Y1 >> 16)] << 16) ^
++ (FSb[(uint8) (Y2 >> 8)] << 8) ^ (FSb[(uint8) (Y3)]);
++
++ X1 = RK[1] ^ (FSb[(uint8) (Y1 >> 24)] << 24) ^
++ (FSb[(uint8) (Y2 >> 16)] << 16) ^
++ (FSb[(uint8) (Y3 >> 8)] << 8) ^ (FSb[(uint8) (Y0)]);
++
++ X2 = RK[2] ^ (FSb[(uint8) (Y2 >> 24)] << 24) ^
++ (FSb[(uint8) (Y3 >> 16)] << 16) ^
++ (FSb[(uint8) (Y0 >> 8)] << 8) ^ (FSb[(uint8) (Y1)]);
++
++ X3 = RK[3] ^ (FSb[(uint8) (Y3 >> 24)] << 24) ^
++ (FSb[(uint8) (Y0 >> 16)] << 16) ^
++ (FSb[(uint8) (Y1 >> 8)] << 8) ^ (FSb[(uint8) (Y2)]);
++
++ PUT_UINT32(X0, output, 0);
++ PUT_UINT32(X1, output, 4);
++ PUT_UINT32(X2, output, 8);
++ PUT_UINT32(X3, output, 12);
++}
+
+- X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y0 ) ] );
++/* AES 128-bit block decryption routine */
+
+- X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y1 ) ] );
++void aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16])
++{
++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+
+- X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^
+- ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^
+- ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^
+- ( FSb[ (uint8) ( Y2 ) ] );
++ RK = ctx->drk;
+
+- PUT_UINT32( X0, output, 0 );
+- PUT_UINT32( X1, output, 4 );
+- PUT_UINT32( X2, output, 8 );
+- PUT_UINT32( X3, output, 12 );
++ GET_UINT32(X0, input, 0);
++ X0 ^= RK[0];
++ GET_UINT32(X1, input, 4);
++ X1 ^= RK[1];
++ GET_UINT32(X2, input, 8);
++ X2 ^= RK[2];
++ GET_UINT32(X3, input, 12);
++ X3 ^= RK[3];
++
++#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
++{ \
++ RK += 4; \
++ \
++ X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y3 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y2 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y1 ) ]; \
++ \
++ X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y0 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y3 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y2 ) ]; \
++ \
++ X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y1 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y0 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y3 ) ]; \
++ \
++ X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \
++ RT1[ (uint8) ( Y2 >> 16 ) ] ^ \
++ RT2[ (uint8) ( Y1 >> 8 ) ] ^ \
++ RT3[ (uint8) ( Y0 ) ]; \
+ }
+
+-/* AES 128-bit block decryption routine */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
++
++ if (ctx->nr > 10) {
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
++ }
++
++ if (ctx->nr > 12) {
++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
++ }
++
++ /* last round */
++
++ RK += 4;
++
++ X0 = RK[0] ^ (RSb[(uint8) (Y0 >> 24)] << 24) ^
++ (RSb[(uint8) (Y3 >> 16)] << 16) ^
++ (RSb[(uint8) (Y2 >> 8)] << 8) ^ (RSb[(uint8) (Y1)]);
++
++ X1 = RK[1] ^ (RSb[(uint8) (Y1 >> 24)] << 24) ^
++ (RSb[(uint8) (Y0 >> 16)] << 16) ^
++ (RSb[(uint8) (Y3 >> 8)] << 8) ^ (RSb[(uint8) (Y2)]);
++
++ X2 = RK[2] ^ (RSb[(uint8) (Y2 >> 24)] << 24) ^
++ (RSb[(uint8) (Y1 >> 16)] << 16) ^
++ (RSb[(uint8) (Y0 >> 8)] << 8) ^ (RSb[(uint8) (Y3)]);
++
++ X3 = RK[3] ^ (RSb[(uint8) (Y3 >> 24)] << 24) ^
++ (RSb[(uint8) (Y2 >> 16)] << 16) ^
++ (RSb[(uint8) (Y1 >> 8)] << 8) ^ (RSb[(uint8) (Y0)]);
++
++ PUT_UINT32(X0, output, 0);
++ PUT_UINT32(X1, output, 4);
++ PUT_UINT32(X2, output, 8);
++ PUT_UINT32(X3, output, 12);
++}
+
+-void aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] )
++void hmac_sha1(unsigned char *text, int text_len, unsigned char *key,
++ int key_len, unsigned char *digest)
+ {
+- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
+-
+- RK = ctx->drk;
+-
+- GET_UINT32( X0, input, 0 ); X0 ^= RK[0];
+- GET_UINT32( X1, input, 4 ); X1 ^= RK[1];
+- GET_UINT32( X2, input, 8 ); X2 ^= RK[2];
+- GET_UINT32( X3, input, 12 ); X3 ^= RK[3];
+-
+-#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
+-{ \
+- RK += 4; \
+- \
+- X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y3 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y2 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y1 ) ]; \
+- \
+- X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y0 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y3 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y2 ) ]; \
+- \
+- X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y1 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y0 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y3 ) ]; \
+- \
+- X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \
+- RT1[ (uint8) ( Y2 >> 16 ) ] ^ \
+- RT2[ (uint8) ( Y1 >> 8 ) ] ^ \
+- RT3[ (uint8) ( Y0 ) ]; \
+-}
+-
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */
+-
+- if( ctx->nr > 10 )
+- {
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */
+- }
+-
+- if( ctx->nr > 12 )
+- {
+- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */
+- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */
+- }
++ SHA_CTX context;
++ unsigned char k_ipad[65]; /* inner padding - key XORd with ipad */
++ unsigned char k_opad[65]; /* outer padding - key XORd with opad */
++ int i;
++
++ /* if key is longer than 64 bytes reset it to key=SHA1(key) */
++ if (key_len > 64) {
++ SHA_CTX tctx;
++
++ SHAInit(&tctx);
++ SHAUpdate(&tctx, key, key_len);
++ SHAFinal(&tctx, key);
++
++ key_len = 20;
++ }
++
++ /*
++ * the HMAC_SHA1 transform looks like:
++ *
++ * SHA1(K XOR opad, SHA1(K XOR ipad, text))
++ *
++ * where K is an n byte key
++ * ipad is the byte 0x36 repeated 64 times
++ * opad is the byte 0x5c repeated 64 times
++ * and text is the data being protected
++ */
++
++ /* start out by storing key in pads */
++ memset(k_ipad, 0, sizeof k_ipad);
++ memset(k_opad, 0, sizeof k_opad);
++ memcpy(k_ipad, key, key_len);
++ memcpy(k_opad, key, key_len);
++
++ /* XOR key with ipad and opad values */
++ for (i = 0; i < 64; i++) {
++ k_ipad[i] ^= 0x36;
++ k_opad[i] ^= 0x5c;
++ }
++
++ /* perform inner SHA1 */
++ SHAInit(&context); /* init context for 1st pass */
++ SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
++ SHAUpdate(&context, text, text_len); /* then text of datagram */
++ SHAFinal(&context, digest); /* finish up 1st pass */
++
++ /* perform outer SHA1 */
++ SHAInit(&context); /* init context for 2nd pass */
++ SHAUpdate(&context, k_opad, 64); /* start with outer pad */
++ SHAUpdate(&context, digest, 20); /* then results of 1st hash */
++ SHAFinal(&context, digest); /* finish up 2nd pass */
++}
+
+- /* last round */
++/*
++* F(P, S, c, i) = U1 xor U2 xor ... Uc
++* U1 = PRF(P, S || Int(i))
++* U2 = PRF(P, U1)
++* Uc = PRF(P, Uc-1)
++*/
+
+- RK += 4;
++void F(char *password, unsigned char *ssid, int ssidlength, int iterations,
++ int count, unsigned char *output)
++{
++ unsigned char digest[36], digest1[SHA_DIGEST_LEN];
++ int i, j;
+
+- X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y1 ) ] );
+-
+- X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y2 ) ] );
+-
+- X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y3 ) ] );
+-
+- X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^
+- ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^
+- ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^
+- ( RSb[ (uint8) ( Y0 ) ] );
+-
+- PUT_UINT32( X0, output, 0 );
+- PUT_UINT32( X1, output, 4 );
+- PUT_UINT32( X2, output, 8 );
+- PUT_UINT32( X3, output, 12 );
+-}
+-
+-void hmac_sha1(unsigned char *text, int text_len, unsigned char *key, int key_len, unsigned char *digest)
+-{
+- SHA_CTX context;
+- unsigned char k_ipad[65]; /* inner padding - key XORd with ipad */
+- unsigned char k_opad[65]; /* outer padding - key XORd with opad */
+- int i;
+-
+- /* if key is longer than 64 bytes reset it to key=SHA1(key) */
+- if (key_len > 64)
+- {
+- SHA_CTX tctx;
+-
+- SHAInit(&tctx);
+- SHAUpdate(&tctx, key, key_len);
+- SHAFinal(&tctx, key);
+-
+- key_len = 20;
+- }
+-
+- /*
+- * the HMAC_SHA1 transform looks like:
+- *
+- * SHA1(K XOR opad, SHA1(K XOR ipad, text))
+- *
+- * where K is an n byte key
+- * ipad is the byte 0x36 repeated 64 times
+- * opad is the byte 0x5c repeated 64 times
+- * and text is the data being protected
+- */
+-
+- /* start out by storing key in pads */
+- memset(k_ipad, 0, sizeof k_ipad);
+- memset(k_opad, 0, sizeof k_opad);
+- memcpy(k_ipad, key, key_len);
+- memcpy(k_opad, key, key_len);
+-
+- /* XOR key with ipad and opad values */
+- for (i = 0; i < 64; i++)
+- {
+- k_ipad[i] ^= 0x36;
+- k_opad[i] ^= 0x5c;
+- }
+-
+- /* perform inner SHA1*/
+- SHAInit(&context); /* init context for 1st pass */
+- SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
+- SHAUpdate(&context, text, text_len); /* then text of datagram */
+- SHAFinal(&context, digest); /* finish up 1st pass */
+-
+- /* perform outer SHA1 */
+- SHAInit(&context); /* init context for 2nd pass */
+- SHAUpdate(&context, k_opad, 64); /* start with outer pad */
+- SHAUpdate(&context, digest, 20); /* then results of 1st hash */
+- SHAFinal(&context, digest); /* finish up 2nd pass */
+-}
++ /* U1 = PRF(P, S || int(i)) */
++ memcpy(digest, ssid, ssidlength);
++ digest[ssidlength] = (unsigned char)((count >> 24) & 0xff);
++ digest[ssidlength + 1] = (unsigned char)((count >> 16) & 0xff);
++ digest[ssidlength + 2] = (unsigned char)((count >> 8) & 0xff);
++ digest[ssidlength + 3] = (unsigned char)(count & 0xff);
++ hmac_sha1(digest, ssidlength + 4, (unsigned char *)password, (int)strlen(password), digest1); // for WPA update
++
++ /* output = U1 */
++ memcpy(output, digest1, SHA_DIGEST_LEN);
++
++ for (i = 1; i < iterations; i++) {
++ /* Un = PRF(P, Un-1) */
++ hmac_sha1(digest1, SHA_DIGEST_LEN, (unsigned char *)password, (int)strlen(password), digest); // for WPA update
++ memcpy(digest1, digest, SHA_DIGEST_LEN);
++
++ /* output = output xor Un */
++ for (j = 0; j < SHA_DIGEST_LEN; j++) {
++ output[j] ^= digest[j];
++ }
++ }
++}
+
+ /*
+-* F(P, S, c, i) = U1 xor U2 xor ... Uc
+-* U1 = PRF(P, S || Int(i))
+-* U2 = PRF(P, U1)
+-* Uc = PRF(P, Uc-1)
+-*/
+-
+-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output)
+-{
+- unsigned char digest[36], digest1[SHA_DIGEST_LEN];
+- int i, j;
+-
+- /* U1 = PRF(P, S || int(i)) */
+- memcpy(digest, ssid, ssidlength);
+- digest[ssidlength] = (unsigned char)((count>>24) & 0xff);
+- digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff);
+- digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff);
+- digest[ssidlength+3] = (unsigned char)(count & 0xff);
+- hmac_sha1(digest, ssidlength+4, (unsigned char*) password, (int) strlen(password), digest1); // for WPA update
+-
+- /* output = U1 */
+- memcpy(output, digest1, SHA_DIGEST_LEN);
+-
+- for (i = 1; i < iterations; i++)
+- {
+- /* Un = PRF(P, Un-1) */
+- hmac_sha1(digest1, SHA_DIGEST_LEN, (unsigned char*) password, (int) strlen(password), digest); // for WPA update
+- memcpy(digest1, digest, SHA_DIGEST_LEN);
+-
+- /* output = output xor Un */
+- for (j = 0; j < SHA_DIGEST_LEN; j++)
+- {
+- output[j] ^= digest[j];
+- }
+- }
+-}
+-/*
+-* password - ascii string up to 63 characters in length
+-* ssid - octet string up to 32 octets
+-* ssidlength - length of ssid in octets
+-* output must be 40 octets in length and outputs 256 bits of key
+-*/
+-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output)
+-{
+- if ((strlen(password) > 63) || (ssidlength > 32))
+- return 0;
+-
+- F(password, ssid, ssidlength, 4096, 1, output);
+- F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]);
+- return 1;
++* password - ascii string up to 63 characters in length
++* ssid - octet string up to 32 octets
++* ssidlength - length of ssid in octets
++* output must be 40 octets in length and outputs 256 bits of key
++*/
++int PasswordHash(char *password, unsigned char *ssid, int ssidlength,
++ unsigned char *output)
++{
++ if ((strlen(password) > 63) || (ssidlength > 32))
++ return 0;
++
++ F(password, ssid, ssidlength, 4096, 1, output);
++ F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]);
++ return 1;
+ }
+diff -Nur rt2500-1.1.0-b4/Module/md5.h rt2500-cvs-2007061011/Module/md5.h
+--- rt2500-1.1.0-b4/Module/md5.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/md5.h 2007-05-29 05:49:17.000000000 +0200
+@@ -1,94 +1,96 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
+ * This MD5 code is based on code from Dynamics -- HUT Mobile IP *
+ * Copyright (C) 1998-2001, Dynamics group *
+- ***************************************************************************/
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: md5.h
+- *
++ *
+ * Abstract: contain MD5 and AES cipher algorithm
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+-#ifndef MD5_H
+-#define MD5_H
++#ifndef __MD5_H__
++#define __MD5_H__
+
+ #define MD5_MAC_LEN 16
+ #define SHA_DIGEST_LEN 20
+
+-struct MD5Context {
+- u32 buf[4];
+- u32 bits[2];
+- u8 in[64];
+-};
++typedef struct _MD5_CTX {
++ ULONG Buf[4]; // buffers of four states
++ UCHAR Input[64]; // input message
++ ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
++} MD5_CTX;
++
++VOID MD5Init(MD5_CTX * pCtx);
++VOID MD5Update(MD5_CTX * pCtx, UCHAR * pData, ULONG LenInBytes);
++VOID MD5Final(UCHAR Digest[16], MD5_CTX * pCtx);
++VOID MD5Transform(ULONG Buf[4], ULONG Mes[16]);
++
++void md5_mac(UCHAR * key, ULONG key_len, UCHAR * data, ULONG data_len,
++ UCHAR * mac);
++void hmac_md5(UCHAR * key, ULONG key_len, UCHAR * data, ULONG data_len,
++ UCHAR * mac);
++
++#endif // __MD5_H__
++
++/******************************************************************************/
++
++VOID SHAInit(SHA_CTX * pCtx);
++UCHAR SHAUpdate(SHA_CTX * pCtx, UCHAR * pData, ULONG LenInBytes);
++VOID SHAFinal(SHA_CTX * pCtx, UCHAR Digest[20]);
++VOID SHATransform(ULONG Buf[5], ULONG Mes[20]);
++
++void hmac_sha1(unsigned char *text, int text_len, unsigned char *key,
++ int key_len, unsigned char *digest);
++void F(char *password, unsigned char *ssid, int ssidlength, int iterations,
++ int count, unsigned char *output);
++int PasswordHash(char *password, unsigned char *ssid, int ssidlength,
++ unsigned char *output);
++
++/******************************************************************************/
++#ifndef _AES_H
++#define _AES_H
+
+-void MD5Init(struct MD5Context *context);
+-void MD5Update(struct MD5Context *context, unsigned char *buf, unsigned len);
+-void MD5Final(unsigned char digest[16], struct MD5Context *context);
+-void MD5Transform(u32 buf[4], u32 in[16]);
+-
+-typedef struct MD5Context MD5_CTX;
+-
+-
+-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
+-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
+-
+-#endif /* MD5_H */
+-
+-#ifndef _AES_H
+-#define _AES_H
+-
+-#ifndef uint8
+-#define uint8 unsigned char
++#ifndef uint8
++#define uint8 unsigned char
+ #endif
+
+-#ifndef uint32
+-#define uint32 unsigned long int
++#ifndef uint32
++#define uint32 unsigned long int
+ #endif
+
+-typedef struct
+-{
+- uint32 erk[64]; /* encryption round keys */
+- uint32 drk[64]; /* decryption round keys */
+- int nr; /* number of rounds */
+-}
+-aes_context;
+-
+-int aes_set_key( aes_context *ctx, uint8 *key, int nbits );
+-void aes_encrypt( aes_context *ctx, uint8 input[16], uint8 output[16] );
+-void aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] );
+-
+-
+-void SHAInit(SHA_CTX *ctx);
+-void SHAUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len);
+-void SHAFinal(SHA_CTX *ctx, unsigned char hashout[20]);
+-void SHAHashBlock(SHA_CTX *ctx);
+-void hmac_sha1(unsigned char *text, int text_len, unsigned char *key, int key_len, unsigned char *digest);
+-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output);
+-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output);
+-
+-#endif /* aes.h */
++typedef struct {
++ uint32 erk[64]; /* encryption round keys */
++ uint32 drk[64]; /* decryption round keys */
++ int nr; /* number of rounds */
++} aes_context;
++
++int aes_set_key(aes_context * ctx, uint8 * key, int nbits);
++void aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16]);
++void aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16]);
+
++#endif /* aes.h */
+diff -Nur rt2500-1.1.0-b4/Module/mlme.c rt2500-cvs-2007061011/Module/mlme.c
+--- rt2500-1.1.0-b4/Module/mlme.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/mlme.c 2007-05-15 21:41:34.000000000 +0200
+@@ -1,54 +1,54 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: mlme.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 8th Dec 04 kmalloc ATOMIC fixes
+- * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- * Ivo (rt2400) 15th Dec 04 Uninitialised timer
++ * RobinC 10th Dec 04 RFMON Support
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * Ivo (rt2400) 15th Dec 04 Uninitialised timer
+ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * BrunoH 3rd Feb 04 Fix for 802.11b adhoc association
+- * JohnC 19th Mar 04 Fixes for quality reporting
++ * JohnC 19th Mar 04 Fixes for quality reporting
+ * MarkW 13th Jun 05 Fix to allow adhoc network creation
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+ #include <stdarg.h>
+
+-// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than
+-// this value, then it's quaranteed capable of operating in 36 mbps TX rate in
++// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than
++// this value, then it's quaranteed capable of operating in 36 mbps TX rate in
+ // clean environment.
+ // TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100
+ CHAR RssiSafeLevelForTxRate[] ={ -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 };
+
+- // 1 2 5.5 11
++ // 1 2 5.5 11
+ UCHAR Phy11BNextRateDownward[] = {RATE_1, RATE_1, RATE_2, RATE_5_5};
+ UCHAR Phy11BNextRateUpward[] = {RATE_2, RATE_5_5, RATE_11, RATE_11};
+
+@@ -68,10 +68,10 @@
+
+ USHORT OldRateUpPER[] = { 40, 40, 40, 40, 30, 30, 30, 30, 20, 20, 10, 10 }; // in percentage
+ USHORT OldRateDownPER[] = { 45, 45, 45, 45, 35, 35, 35, 35, 25, 25, 25, 12 }; // in percentage
+-
++
+ UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100};
+ USHORT RateIdTo500Kbps[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200};
+-
++
+ RTMP_RF_REGS RF2522RegTable[] = {
+ // ch R1 R2 R3(TX0~4=0) R4
+ {1, 0x94002050, 0x940c1fda, 0x94000101, 0},
+@@ -144,10 +144,10 @@
+ {14, 0x94032020, 0x94000d1a, 0x94000101, 0x94000a03}
+ };
+ #define NUM_OF_2524_CHNL (sizeof(RF2524RegTable) / sizeof(RTMP_RF_REGS))
+-
++
+ RTMP_RF_REGS RF2525RegTable[] = {
+ // ch R1 R2 R3(TX0~4=0) R4
+- {1, 0x94022020, 0x94080c9e, 0x94060111, 0x94000a1b}, // {1, 0x94022010, 0x9408062e, 0x94060111, 0x94000a23},
++ {1, 0x94022020, 0x94080c9e, 0x94060111, 0x94000a1b}, // {1, 0x94022010, 0x9408062e, 0x94060111, 0x94000a23},
+ {2, 0x94022020, 0x94080ca2, 0x94060111, 0x94000a1b},
+ {3, 0x94022020, 0x94080ca6, 0x94060111, 0x94000a1b},
+ {4, 0x94022020, 0x94080caa, 0x94060111, 0x94000a1b},
+@@ -157,15 +157,15 @@
+ {8, 0x94022020, 0x94080cba, 0x94060111, 0x94000a1b},
+ {9, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
+ {10, 0x94022020, 0x94080d02, 0x94060111, 0x94000a1b},
+- {11, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b}, // {11, 0x94022010, 0x94080682, 0x94060111, 0x94000a23},
++ {11, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b}, // {11, 0x94022010, 0x94080682, 0x94060111, 0x94000a23},
+ {12, 0x94022020, 0x94080d0a, 0x94060111, 0x94000a1b},
+- {13, 0x94022020, 0x94080d0e, 0x94060111, 0x94000a1b}, // {13, 0x94022010, 0x94080686, 0x94060111, 0x94000a23},
++ {13, 0x94022020, 0x94080d0e, 0x94060111, 0x94000a1b}, // {13, 0x94022010, 0x94080686, 0x94060111, 0x94000a23},
+ {14, 0x94022020, 0x94080d1a, 0x94060111, 0x94000a03}
+ };
+ #define NUM_OF_2525_CHNL (sizeof(RF2525RegTable) / sizeof(RTMP_RF_REGS))
+
+ RTMP_RF_REGS RF2525HBOffsetRegTable[] = {
+- {1, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
++ {1, 0x94022020, 0x94080cbe, 0x94060111, 0x94000a1b},
+ {2, 0x94022020, 0x94080d02, 0x94060111, 0x94000a1b},
+ {3, 0x94022020, 0x94080d06, 0x94060111, 0x94000a1b},
+ {4, 0x94022020, 0x94080d0a, 0x94060111, 0x94000a1b},
+@@ -175,9 +175,9 @@
+ {8, 0x94022020, 0x94080d1a, 0x94060111, 0x94000a1b},
+ {9, 0x94022020, 0x94080d1e, 0x94060111, 0x94000a1b},
+ {10, 0x94022020, 0x94080d22, 0x94060111, 0x94000a1b},
+- {11, 0x94022020, 0x94080d26, 0x94060111, 0x94000a1b},
++ {11, 0x94022020, 0x94080d26, 0x94060111, 0x94000a1b},
+ {12, 0x94022020, 0x94080d2a, 0x94060111, 0x94000a1b},
+- {13, 0x94022020, 0x94080d2e, 0x94060111, 0x94000a1b},
++ {13, 0x94022020, 0x94080d2e, 0x94060111, 0x94000a1b},
+ {14, 0x94022020, 0x94080d3a, 0x94060111, 0x94000a03}
+ };
+
+@@ -195,7 +195,7 @@
+ {8, 0x94022020, 0x94081192, 0x94060111, 0x94000a0b},
+ {9, 0x94022020, 0x94081196, 0x94060111, 0x94000a0b},
+ {10, 0x94022020, 0x9408119a, 0x94060111, 0x94000a0b},
+- {11, 0x94022020, 0x9408119e, 0x94060111, 0x94000a0b},
++ {11, 0x94022020, 0x9408119e, 0x94060111, 0x94000a0b},
+ {12, 0x94022020, 0x940811a2, 0x94060111, 0x94000a0b},
+ {13, 0x94022020, 0x940811a6, 0x94060111, 0x94000a0b},
+ {14, 0x94022020, 0x940811ae, 0x94060111, 0x94000a1b}
+@@ -212,7 +212,7 @@
+ {8, 0x94022010, 0x940808aa, 0x94060111, 0x94000a07},
+ {9, 0x94022010, 0x940808aa, 0x94060111, 0x94000a1b},
+ {10, 0x94022010, 0x940808ae, 0x94060111, 0x94000a07},
+- {11, 0x94022010, 0x940808ae, 0x94060111, 0x94000a1b},
++ {11, 0x94022010, 0x940808ae, 0x94060111, 0x94000a1b},
+ {12, 0x94022010, 0x940808b2, 0x94060111, 0x94000a07},
+ {13, 0x94022010, 0x940808b2, 0x94060111, 0x94000a1b},
+ {14, 0x94022010, 0x940808b6, 0x94060111, 0x94000a23}
+@@ -238,7 +238,7 @@
+ {14, 0x94022020, 0x940011ae, 0x94000101, 0x94000a1b},
+
+ // still lack of MMAC(Japan) ch 34,38,42,46
+-
++
+ {36, 0x94022010, 0x94018896, 0x94000101, 0x94000a1f},
+ {40, 0x94022010, 0x9401889a, 0x94000101, 0x94000a1f},
+ {44, 0x94022010, 0x9401889e, 0x94000101, 0x94000a1f},
+@@ -247,7 +247,7 @@
+ {66, 0x94022010, 0x940188aa, 0x94000101, 0x94000a1f},
+ {60, 0x94022010, 0x940188ae, 0x94000101, 0x94000a1f},
+ {64, 0x94022010, 0x940188b2, 0x94000101, 0x94000a1f},
+-
++
+ {100, 0x94022010, 0x94008802, 0x94000101, 0x94000a0f},
+ {104, 0x94022010, 0x94008806, 0x94000101, 0x94000a0f},
+ {108, 0x94022010, 0x9400880a, 0x94000101, 0x94000a0f},
+@@ -259,7 +259,7 @@
+ {132, 0x94022010, 0x94008822, 0x94000101, 0x94000a0f},
+ {136, 0x94022010, 0x94008826, 0x94000101, 0x94000a0f},
+ {140, 0x94022010, 0x9400882a, 0x94000101, 0x94000a0f},
+-
++
+ {149, 0x94022020, 0x940090a6, 0x94000101, 0x94000a07},
+ {153, 0x94022020, 0x940090ae, 0x94000101, 0x94000a07},
+ {157, 0x94022020, 0x940090b6, 0x94000101, 0x94000a07},
+@@ -270,14 +270,14 @@
+ /*
+ ==========================================================================
+ Description:
+- initialize the MLME task and its data structure (queue, spinlock,
++ initialize the MLME task and its data structure (queue, spinlock,
+ timer, state machines).
+ Return:
+ always return NDIS_STATUS_SUCCESS
+ ==========================================================================
+ */
+ NDIS_STATUS MlmeInit(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+
+@@ -285,8 +285,8 @@
+ return Status;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--> MLME Initialize\n");
+-
+- do
++
++ do
+ {
+ pAd->Mlme.Running = FALSE;
+ spin_lock_init(&pAd->Mlme.TaskLock);
+@@ -298,10 +298,10 @@
+ // init state machines
+ ASSERT(ASSOC_FUNC_SIZE == MAX_ASSOC_MSG * MAX_ASSOC_STATE);
+ AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, pAd->Mlme.AssocFunc);
+-
++
+ ASSERT(AUTH_FUNC_SIZE == MAX_AUTH_MSG * MAX_AUTH_STATE);
+ AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, pAd->Mlme.AuthFunc);
+-
++
+ ASSERT(AUTH_RSP_FUNC_SIZE == MAX_AUTH_RSP_MSG * MAX_AUTH_RSP_STATE);
+ AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, pAd->Mlme.AuthRspFunc);
+
+@@ -310,8 +310,8 @@
+
+ ASSERT(WPA_PSK_FUNC_SIZE == MAX_WPA_PSK_MSG * MAX_WPA_PSK_STATE);
+ WpaPskStateMachineInit(pAd,&pAd->Mlme.WpaPskMachine,pAd->Mlme.WpaPskFunc);
+-
+- // Since we are using switch/case to implement it, the init is different from the above
++
++ // Since we are using switch/case to implement it, the init is different from the above
+ // state machine init
+ MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL);
+
+@@ -332,7 +332,7 @@
+ } while (FALSE);
+
+ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MLME_INITIALIZED);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<-- MLME Initialize\n");
+
+ return Status;
+@@ -347,83 +347,70 @@
+ Mlme has to be initialized, and there are something inside the queue
+ Note:
+ This function is invoked from MPSetInformation and MPReceive;
+- This task guarantee only one MlmeHandler will run.
++ This task guarantee only one MlmeHandler will run.
+ ==========================================================================
+ */
+ VOID MlmeHandler(
+- IN PRTMP_ADAPTER pAd)
+-{
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- schedule_work(&pAd->mlme_work);
+-}
+-
+-VOID MlmeWork(void *vpAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+- PRTMP_ADAPTER pAd = vpAd;
+-#endif
+ MLME_QUEUE_ELEM *Elem = NULL;
+ unsigned long flags;
+- int loops = 0;
+
+ // Only accept MLME and Frame from peer side, no other (control/data) frame should
+ // get into this state machine
+
+- spin_lock_irqsave(&pAd->Mlme.TaskLock,flags);
+- if(pAd->Mlme.Running)
++ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
++ if(pAd->Mlme.Running)
+ {
+- spin_unlock_irqrestore(&pAd->Mlme.TaskLock,flags);
++ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ return;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.Running = TRUE;
+ }
+- spin_unlock_irqrestore(&pAd->Mlme.TaskLock,flags);
++ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
++
++ while (TRUE) {
++ spin_lock_irqsave(&pAd->Mlme.Queue.Lock, flags);
++ if (!MlmeDequeue(&pAd->Mlme.Queue, &Elem)) {
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
++ break;
++ }
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
++
++ if (pAd->PortCfg.BssType == BSS_MONITOR)
++ continue;
+
+- while (MlmeDequeue(&pAd->Mlme.Queue, &Elem))
+- {
+ //From message type, determine which state machine I should drive
+- if (pAd->PortCfg.BssType != BSS_MONITOR)
++ switch (Elem->Machine)
+ {
+- // if dequeue success
+- switch (Elem->Machine)
+- {
+- case ASSOC_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem);
+- break;
+- case AUTH_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem);
+- break;
+- case AUTH_RSP_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem);
+- break;
+- case SYNC_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem);
+- break;
+- case MLME_CNTL_STATE_MACHINE:
+- MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem);
+- break;
+- case WPA_PSK_STATE_MACHINE:
+- StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem);
+- break;
+- default:
+- DBGPRINT(RT_DEBUG_TRACE, "ERROR: Illegal machine in MlmeHandler()\n");
+- break;
+- } // end of switch
++ case ASSOC_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem);
++ break;
++ case AUTH_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem);
++ break;
++ case AUTH_RSP_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem);
++ break;
++ case SYNC_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem);
++ break;
++ case MLME_CNTL_STATE_MACHINE:
++ MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem);
++ break;
++ case WPA_PSK_STATE_MACHINE:
++ StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem);
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_TRACE, "ERROR: Illegal machine in MlmeHandler()\n");
++ break;
++ } // end of switch
+
+- // free MLME element
+- Elem->Occupied = FALSE;
+- Elem->MsgLen = 0;
+-
+- }
+- else
+- {
+- printk(KERN_ERR DRV_NAME "ERROR: empty Elem in MlmeQueue\n");
+- }
+- loops++;
+- if (loops > 50)
+- /* something wrong - avoid locking up the computer solid */
+- break;
++ // free MLME element
++ Elem->Occupied = FALSE;
++ Elem->MsgLen = 0;
+ }
+
+ spin_lock_irqsave(&pAd->Mlme.TaskLock,flags);
+@@ -442,7 +429,7 @@
+ ==========================================================================
+ */
+ VOID MlmeHalt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisReq;
+ MLME_QUEUE_ELEM *MsgElem;
+@@ -455,8 +442,8 @@
+ return;
+
+ DBGPRINT(RT_DEBUG_TRACE, "==> MlmeHalt\n");
+-
+- if (INFRA_ON(pAd) && !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
++
++ if (INFRA_ON(pAd) && !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
+ {
+ COPY_MAC_ADDR(&DisReq.Addr, &pAd->PortCfg.Bssid);
+ DisReq.Reason = REASON_DISASSOC_STA_LEAVING;
+@@ -476,7 +463,7 @@
+ // disable BEACON generation and other BEACON related hardware timers
+ AsicDisableSync(pAd);
+ }
+-
++
+ // Cancel pending timers
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.AssocTimer);
+ RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);
+@@ -496,7 +483,7 @@
+
+ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ udelay(1000);
+-
++
+ MlmeQueueDestroy(&pAd->Mlme.Queue);
+ StateMachineDestroy(&pAd->Mlme.AssocMachine);
+ StateMachineDestroy(&pAd->Mlme.AuthMachine);
+@@ -506,11 +493,11 @@
+ //NdisFreeSpinLock(&pAd->Mlme.Queue.Lock);
+ //NdisFreeSpinLock(&pAd->Mlme.TaskLock);
+ // NdisFreeSpinLock(&pAd->PortCfg.MacTab.Lock);
+-
++
+ MlmeFreeMemoryHandler(pAd); //Free MLME memory handler
+
+ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MLME_INITIALIZED);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<== MlmeHalt\n");
+ kfree(MsgElem);
+ }
+@@ -519,42 +506,33 @@
+ ==========================================================================
+ Description:
+ This routine is executed periodically to -
+- 1. Decide if it's a right time to turn on PwrMgmt bit of all
++ 1. Decide if it's a right time to turn on PwrMgmt bit of all
+ outgoiing frames
+ 2. Calculate ChannelQuality based on statistics of the last
+- period, so that TX rate won't toggling very frequently between a
++ period, so that TX rate won't toggling very frequently between a
+ successful TX and a failed TX.
+- 3. If the calculated ChannelQuality indicated current connection not
++ 3. If the calculated ChannelQuality indicated current connection not
+ healthy, then a ROAMing attempt is tried here.
+ ==========================================================================
+ */
+ #define ADHOC_BEACON_LOST_TIME (10*HZ) // 4 sec
+ VOID MlmePeriodicExec(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ ULONG Now32;
+ CSR15_STRUC Csr15;
+
+- if (pAd->PortCfg.BssType == BSS_MONITOR)
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+- return;
+- }
+-
+- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+- return;
+- }
+-
+- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))
+- {
+- RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
++ if ((pAd->PortCfg.BssType == BSS_MONITOR)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)
++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)
++ ) {
++ RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+ return;
+ }
+
+- // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a
++ // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a
+ // valid indication of the distance between this AP and its clients.
+ if (pAd->MediaState == NdisMediaStateConnected)
+ {
+@@ -568,7 +546,7 @@
+ else
+ pAd->PortCfg.NumOfAvgRssiSample = 0;
+ }
+-
++
+ Now32 = jiffies;
+
+ if (pAd->RalinkCounters.MgmtRingFullCount >= 2)
+@@ -579,7 +557,7 @@
+ {
+ pAd->RalinkCounters.MgmtRingFullCount = 0;
+ }
+-
++
+ if ((pAd->PortCfg.bBlockAssoc == TRUE) && (pAd->PortCfg.LastMicErrorTime + (60 * HZ) < Now32))
+ {
+ pAd->PortCfg.bBlockAssoc = FALSE;
+@@ -600,11 +578,11 @@
+ }
+
+
+-#ifndef WIFI_TEST
++#ifndef WIFI_TEST
+ // danamic tune BBP R17 to find a balance between sensibility and noise isolation
+- // 2003-12-05 For 2560C and before, to avoid collision with MAC ASIC, limit
++ // 2003-12-05 For 2560C and before, to avoid collision with MAC ASIC, limit
+ // BBP R17 tuning to be within 20 seconds after LINK UP. 2560D (R0=4) and
+- // after can always enable R17 tuning
++ // after can always enable R17 tuning
+ if (pAd->PortCfg.Rt2560Version >= RT2560_VER_D)
+ AsicBbpTuning(pAd);
+ else if ((pAd->MediaState == NdisMediaStateConnected) && (pAd->Mlme.PeriodicRound <= 20))
+@@ -642,23 +620,23 @@
+ if (pAd->PortCfg.MicErrCnt >= 3)
+ {
+ MLME_DISASSOC_REQ_STRUCT DisassocReq;
+-
++
+ // disassoc from current AP first
+ DBGPRINT(RT_DEBUG_TRACE, "MLME - disassociate with current AP after sending second continuous EAPOL frame\n");
+ DisassocParmFill(pAd, &DisassocReq, &pAd->PortCfg.Bssid, REASON_MIC_FAILURE);
+- MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
++ MlmeEnqueue(&pAd->Mlme.Queue, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ,
+ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
+
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;
+ pAd->PortCfg.bBlockAssoc = TRUE;
+ }
+-
+- else
++
++ else
+ {
+ // send out a NULL frame every 10 sec. for what??? inform "PwrMgmt" bit?
+ if ((pAd->Mlme.PeriodicRound % 10) == 8)
+ EnqueueNullFrame(pAd, pAd->PortCfg.TxRate);
+-
++
+ if (CQI_IS_BAD(pAd->Mlme.ChannelQuality))
+ {
+ pAd->RalinkCounters.BadCQIAutoRecoveryCount ++;
+@@ -669,7 +647,7 @@
+ else if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) || CQI_IS_POOR(pAd->Mlme.ChannelQuality))
+ {
+ // perform aggresive roaming only when SECURITY OFF or WEP64/128;
+- // WPA and WPA-PSK has no aggresive roaming because re-negotiation
++ // WPA and WPA-PSK has no aggresive roaming because re-negotiation
+ // between 802.1x supplicant and authenticator/AAA server is required
+ // but can't be guaranteed.
+ if (pAd->PortCfg.AuthMode < Ndis802_11AuthModeWPA)
+@@ -686,7 +664,7 @@
+ // minimum BEACON to tell the peer I'm alive.
+ // drawback is that this BEACON won't well align at TBTT boundary.
+ RTMP_IO_READ32(pAd, CSR15, &Csr15.word); // read-n-clear "BcnSent" bit
+- if (Csr15.field.BeaconSent == 0)
++ if (Csr15.field.BeaconSent == 0)
+ EnqueueBeaconFrame(pAd); // software send BEACON
+ }
+ else
+@@ -697,14 +675,14 @@
+ (pAd->PortCfg.MaxDesiredRate > RATE_11) &&
+ ((pAd->PortCfg.Last11bBeaconRxTime + (5 * HZ)) < Now32))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "last 11B peer left, update Tx rates\n");
++ DBGPRINT(RT_DEBUG_TRACE, "last 11B peer left, update Tx rates\n");
+ memcpy(pAd->PortCfg.SupportedRates, pAd->PortCfg.IbssConfig.SupportedRates, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->PortCfg.SupportedRatesLen = pAd->PortCfg.IbssConfig.SupportedRatesLen;
+ MlmeUpdateTxRates(pAd, FALSE);
+ MakeIbssBeacon(pAd); // supported rates changed
+ }
+ }
+-
++
+ #ifndef SINGLE_ADHOC_LINKUP
+ // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState
+ // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can
+@@ -712,7 +690,7 @@
+ if ((pAd->PortCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < Now32) &&
+ (pAd->MediaState == NdisMediaStateConnected))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n");
++ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n");
+
+ pAd->MediaState = NdisMediaStateDisconnected;
+ // clean up previous SCAN result, add current BSS back to table if any
+@@ -731,7 +709,7 @@
+ if ((pAd->PortCfg.BssTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ MLME_SCAN_REQ_STRUCT ScanReq;
+-
++
+ if ((pAd->PortCfg.LastScanTime + 10 * HZ) < Now32)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "CNTL - No matching BSS, start a new scan\n");
+@@ -745,7 +723,7 @@
+ }
+ else if (pAd->PortCfg.BssType == BSS_INDEP) // Quit the forever scan when in a very clean room
+ MlmeAutoRecoverNetwork(pAd);
+- //MlmeAutoReconnectLastSSID(pAd);
++ //MlmeAutoReconnectLastSSID(pAd);
+ }
+ else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)
+ {
+@@ -759,7 +737,7 @@
+ }
+ else
+ MlmeAutoReconnectLastSSID(pAd);
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "pAd->PortCfg.AutoReconnect is TRUE\n");
+ }
+ }
+@@ -772,7 +750,7 @@
+
+ RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
+ }
+-
++
+ VOID MlmeAutoScan(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -783,17 +761,17 @@
+
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+ MlmeHandler(pAd);
+ }
+ }
+-
++
+ VOID MlmeAutoRecoverNetwork(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -808,18 +786,18 @@
+
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_SSID,
+- sizeof(NDIS_802_11_SSID),
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_SSID,
++ sizeof(NDIS_802_11_SSID),
+ &OidSsid);
+ MlmeHandler(pAd);
+ }
+
+ }
+-
++
+ VOID MlmeAutoReconnectLastSSID(
+ IN PRTMP_ADAPTER pAd)
+ {
+@@ -833,12 +811,12 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Driver auto reconnect to last OID_802_11_SSID setting - %s\n", pAd->Mlme.CntlAux.Ssid);
+
+ // We will only try this attemp once, therefore change the AutoReconnect flag afterwards.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
+- MlmeEnqueue(&pAd->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_SSID,
+- sizeof(NDIS_802_11_SSID),
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
++ MlmeEnqueue(&pAd->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_SSID,
++ sizeof(NDIS_802_11_SSID),
+ &OidSsid);
+ MlmeHandler(pAd);
+ }
+@@ -867,17 +845,17 @@
+ for (i = 0; i < pBssTab->BssNr; i++)
+ {
+ pBss = &pBssTab->BssEntry[i];
+-
+- if ((pBssTab->BssEntry[i].LastBeaconRxTime + BEACON_LOST_TIME) < Now32)
++
++ if ((pBssTab->BssEntry[i].LastBeaconRxTime + BEACON_LOST_TIME) < Now32)
+ continue; // AP disappear
+ if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING)
+ continue; // RSSI too weak. forget it.
+ if (MAC_ADDR_EQUAL(&pBssTab->BssEntry[i].Bssid, &pAd->PortCfg.Bssid))
+ continue; // skip current AP
+- if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) && (pAd->PortCfg.LastRssi + RSSI_DELTA > pBss->Rssi))
++ if (CQI_IS_FAIR(pAd->Mlme.ChannelQuality) && (pAd->PortCfg.LastRssi + RSSI_DELTA > pBss->Rssi))
+ continue; // we're still okay, only AP with stronger RSSI is eligible for roaming
+
+- // AP passing all above rules is put into roaming candidate table
++ // AP passing all above rules is put into roaming candidate table
+ memcpy(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY));
+ pRoamTab->BssNr += 1;
+ }
+@@ -889,23 +867,23 @@
+ {
+ // tell CNTL state machine NOT to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by driver itself, not from NDIS.
+- pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+-
++ pAd->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++
+ pAd->RalinkCounters.PoorCQIRoamingCount ++;
+ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - Roaming attempt #%d\n", pAd->RalinkCounters.PoorCQIRoamingCount);
+ MlmeEnqueue(&pAd->Mlme.Queue, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL);
+ MlmeHandler(pAd);
+ }
+ }
+-
++
+ }
+
+ /*
+ ==========================================================================
+ Description:
+- This routine calculates TxPER, RxPER of the past N-sec period. And
+- according to the calculation result, ChannelQuality is calculated here
+- to decide if current AP is still doing the job.
++ This routine calculates TxPER, RxPER of the past N-sec period. And
++ according to the calculation result, ChannelQuality is calculated here
++ to decide if current AP is still doing the job.
+
+ If ChannelQuality is not good, a ROAMing attempt may be tried later.
+ Output:
+@@ -923,11 +901,11 @@
+ //
+ // monitor TX counters change for the past period
+ //
+- TxFailCnt = pAd->WlanCounters.FailedCount.vv.LowPart -
++ TxFailCnt = pAd->WlanCounters.FailedCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.FailedCount.vv.LowPart;
+- TxRetryCnt = pAd->WlanCounters.RetryCount.vv.LowPart -
++ TxRetryCnt = pAd->WlanCounters.RetryCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.RetryCount.vv.LowPart;
+- TxOkCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart -
++ TxOkCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.TransmittedFragmentCount.vv.LowPart;
+ TxCnt = TxOkCnt + TxFailCnt;
+
+@@ -947,16 +925,16 @@
+ pAd->WlanCounters.FCSErrorCount.vv.LowPart += ((Cnt0 & 0x0000ffff) >> 7);
+ if (pAd->WlanCounters.FCSErrorCount.vv.LowPart < OldFcsCount)
+ pAd->WlanCounters.FCSErrorCount.vv.HighPart++;
+-
++
+ // Add FCS error count to private counters
+ OldFcsCount = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart;
+ pAd->RalinkCounters.RealFcsErrCount.vv.LowPart += Cnt0;
+ if (pAd->RalinkCounters.RealFcsErrCount.vv.LowPart < OldFcsCount)
+ pAd->RalinkCounters.RealFcsErrCount.vv.HighPart++;
+-
+- RxOkCnt = pAd->WlanCounters.ReceivedFragmentCount.vv.LowPart -
++
++ RxOkCnt = pAd->WlanCounters.ReceivedFragmentCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.ReceivedFragmentCount.vv.LowPart;
+- RxFailCnt = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart -
++ RxFailCnt = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart -
+ pAd->Mlme.PrevWlanCounters.FCSErrorCount.vv.LowPart;
+ RxCnt = RxOkCnt + RxFailCnt;
+
+@@ -966,8 +944,8 @@
+ //
+ // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER
+ //
+- // This value also decides when all roaming fails (or no roaming candidates at
+- // all), should this STA stay with original AP, or a LinkDown signal
++ // This value also decides when all roaming fails (or no roaming candidates at
++ // all), should this STA stay with original AP, or a LinkDown signal
+ // is indicated to NDIS
+ //
+ if (INFRA_ON(pAd) &&
+@@ -977,7 +955,7 @@
+ // Ignore lost beacon if traffic still goes well
+ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) && (TxOkCnt < 2))
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "BEACON lost for more than %d sec with TxOkCnt=%d, let CQI = 0\n", BEACON_LOST_TIME/HZ, TxOkCnt);
++ DBGPRINT(RT_DEBUG_TRACE, "BEACON lost for more than %d sec with TxOkCnt=%d, let CQI = 0\n", BEACON_LOST_TIME/HZ, TxOkCnt);
+ pAd->Mlme.ChannelQuality = 0;
+ // Lost AP, send disconnect & link down event
+ LinkDown(pAd);
+@@ -986,19 +964,19 @@
+ else
+ {
+ // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0)
+- pAd->Mlme.ChannelQuality = (RSSI_WEIGHTING * pAd->PortCfg.LastRssi +
+- TX_WEIGHTING * (100 - TxPRR) +
++ pAd->Mlme.ChannelQuality = (RSSI_WEIGHTING * pAd->PortCfg.LastRssi +
++ TX_WEIGHTING * (100 - TxPRR) +
+ RX_WEIGHTING* (100 - RxPER)) / 100;
+ if (pAd->Mlme.ChannelQuality >= 100)
+ pAd->Mlme.ChannelQuality = 100;
+ }
+-
++
+ // latch current WLAN counters for next check-for-roaming usage
+ memcpy(&pAd->Mlme.PrevWlanCounters, &pAd->WlanCounters, sizeof(COUNTER_802_11));
+ // make sure copy the real FCS counts into previous mlme counter structure.
+ pAd->Mlme.PrevWlanCounters.FCSErrorCount = pAd->RalinkCounters.RealFcsErrCount;
+-
+- DBGPRINT(RT_DEBUG_INFO, "MMCHK - CQI= %d, (Tx Fail=%d/Retry=%d/Total=%d, Rx Fail=%d/Total=%d, RSSI=%d dbm)\n",
++
++ DBGPRINT(RT_DEBUG_INFO, "MMCHK - CQI= %d, (Tx Fail=%d/Retry=%d/Total=%d, Rx Fail=%d/Total=%d, RSSI=%d dbm)\n",
+ pAd->Mlme.ChannelQuality, TxFailCnt, TxRetryCnt, TxCnt, RxFailCnt, RxCnt, pAd->PortCfg.LastRssi - pAd->PortCfg.RssiToDbm);
+
+ }
+@@ -1006,13 +984,13 @@
+ /*
+ ==========================================================================
+ Description:
+- This routine calculates the acumulated TxPER of eaxh TxRate. And
+- according to the calculation result, change PortCfg.TxRate which
+- is the stable TX Rate we expect the Radio situation could sustained.
++ This routine calculates the acumulated TxPER of eaxh TxRate. And
++ according to the calculation result, change PortCfg.TxRate which
++ is the stable TX Rate we expect the Radio situation could sustained.
+
+- PortCfg.TxRate will change dynamically within {RATE_1/RATE_6, MaxTxRate}
++ PortCfg.TxRate will change dynamically within {RATE_1/RATE_6, MaxTxRate}
+ Output:
+- PortCfg.TxRate -
++ PortCfg.TxRate -
+ NOTE:
+ call this routine every second
+ ==========================================================================
+@@ -1032,9 +1010,9 @@
+ {
+ if (pAd->PortCfg.EnableAutoRateSwitching == FALSE)
+ break;
+-
++
+ // if no traffic in the past 1-sec period, don't change TX rate,
+- // but clear all bad history. because the bad history may affect the next
++ // but clear all bad history. because the bad history may affect the next
+ // Chariot throughput test
+ if (TxTotalCnt == 0)
+ {
+@@ -1043,7 +1021,7 @@
+ memset(pAd->DrsCounters.PER, 0, MAX_LEN_OF_SUPPORTED_RATES);
+ break;
+ }
+-
++
+ // decide the next upgrade rate and downgrade rate, if any
+ if (pAd->PortCfg.PhyMode == PHY_11BG_MIXED)
+ {
+@@ -1062,7 +1040,7 @@
+ }
+ else // PHY_11ABG_MIXED
+ {
+- if (pAd->PortCfg.Channel > 14)
++ if (pAd->PortCfg.Channel > 14)
+ {
+ UpRate = Phy11ANextRateUpward[CurrRate];
+ DownRate = Phy11ANextRateDownward[CurrRate];
+@@ -1081,7 +1059,7 @@
+ if (TxTotalCnt > 15)
+ {
+ TxErrorRatio = ((pAd->DrsCounters.OneSecTxRetryOkCount + pAd->DrsCounters.OneSecTxFailCount) *100) / TxTotalCnt;
+-
++
+ // 2560D and after has implemented ASIC-based OFDM rate switching,
+ // but not 2560C & before. thus software use different PER for rate switching
+ if (pAd->PortCfg.Rt2560Version >= RT2560_VER_D)
+@@ -1106,20 +1084,20 @@
+ fUpgradeQuality = TRUE;
+ if (pAd->DrsCounters.TxQuality[CurrRate])
+ pAd->DrsCounters.TxQuality[CurrRate] --; // quality very good in CurrRate
+-
++
+ if (pAd->DrsCounters.TxRateUpPenalty)
+ pAd->DrsCounters.TxRateUpPenalty --;
+ else if (pAd->DrsCounters.TxQuality[UpRate])
+ pAd->DrsCounters.TxQuality[UpRate] --; // may improve next UP rate's quality
+ }
+-
++
+ }
+-
++
+ // if not enough TX samples, decide by heuristic rules
+ else
+ {
+ TxErrorRatio = 0;
+-
++
+ // Downgrade TX quality upon any TX failure in the past second
+ if (pAd->DrsCounters.OneSecTxFailCount)
+ {
+@@ -1155,22 +1133,22 @@
+
+ if (pAd->DrsCounters.fNoisyEnvironment)
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"DRS(noisy):");
++ DBGPRINT(RT_DEBUG_TRACE,"DRS(noisy):");
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"DRS:");
++ DBGPRINT(RT_DEBUG_TRACE,"DRS:");
+ }
+- DBGPRINT(RT_DEBUG_TRACE, "Qty[%d]=%d PER=%d%% %d-sec, Qty[%d]=%d, Pty=%d\n",
++ DBGPRINT(RT_DEBUG_TRACE, "Qty[%d]=%d PER=%d%% %d-sec, Qty[%d]=%d, Pty=%d\n",
+ RateIdToMbps[CurrRate], pAd->DrsCounters.TxQuality[CurrRate],
+ TxErrorRatio,
+ pAd->DrsCounters.CurrTxRateStableTime,
+ RateIdToMbps[UpRate], pAd->DrsCounters.TxQuality[UpRate],
+ pAd->DrsCounters.TxRateUpPenalty);
+-
++
+ // 2004-3-13 special case: Claim noisy environment
+- // decide if there was a false "rate down" in the past 2 sec due to noisy
+- // environment. if so, we would rather switch back to the higher TX rate.
++ // decide if there was a false "rate down" in the past 2 sec due to noisy
++ // environment. if so, we would rather switch back to the higher TX rate.
+ // criteria -
+ // 1. there's a higher rate available, AND
+ // 2. there was a rate-down happened, AND
+@@ -1179,8 +1157,8 @@
+ if ((UpRate != CurrRate) &&
+ (pAd->DrsCounters.LastSecTxRateChangeAction == 2) &&
+ (TxTotalCnt > 15) && // this line is to prevent the case that not enough TX sample causing PER=0%
+- (pAd->DrsCounters.PER[CurrRate] < 75) &&
+- ((pAd->DrsCounters.PER[CurrRate] > 20) || (pAd->DrsCounters.fNoisyEnvironment)) &&
++ (pAd->DrsCounters.PER[CurrRate] < 75) &&
++ ((pAd->DrsCounters.PER[CurrRate] > 20) || (pAd->DrsCounters.fNoisyEnvironment)) &&
+ ((pAd->DrsCounters.PER[CurrRate]+5) > pAd->DrsCounters.PER[UpRate]))
+ {
+ // we believe this is a noisy environment. better stay at UpRate
+@@ -1218,12 +1196,12 @@
+
+ if (JumpUpRate > pAd->PortCfg.MaxTxRate)
+ JumpUpRate = pAd->PortCfg.MaxTxRate;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"DRS: #### leave Noisy environment ####, RSSI=%d, JumpUpRate=%d\n",
+
+ pAd->PortCfg.AvgRssi - RSSI_TO_DBM_OFFSET, RateIdToMbps[JumpUpRate]);
+
+-
++
+ if (JumpUpRate > CurrRate)
+ {
+ pAd->PortCfg.TxRate = JumpUpRate;
+@@ -1231,15 +1209,15 @@
+ }
+ }
+
+- // we're going to upgrade CurrRate to UpRate at next few seconds,
+- // but before that, we'd better try a NULL frame @ UpRate and
++ // we're going to upgrade CurrRate to UpRate at next few seconds,
++ // but before that, we'd better try a NULL frame @ UpRate and
+ // see if UpRate is stable or not. If this NULL frame fails, it will
+ // downgrade TxQuality[CurrRate], so that STA won't switch to
+ // to UpRate in the next second
+ // 2004-04-07 requested by David Tung - sent test frames only in OFDM rates
+- if (fUpgradeQuality &&
+- INFRA_ON(pAd) &&
+- (UpRate != CurrRate) &&
++ if (fUpgradeQuality &&
++ INFRA_ON(pAd) &&
++ (UpRate != CurrRate) &&
+ (UpRate > RATE_11) &&
+ (pAd->DrsCounters.TxQuality[CurrRate] <= 1) &&
+ (pAd->DrsCounters.TxQuality[UpRate] <= 1))
+@@ -1260,16 +1238,16 @@
+ #endif
+ pAd->PortCfg.TxRate = DownRate;
+ }
+- else if ((pAd->DrsCounters.TxQuality[CurrRate] <= 0) &&
++ else if ((pAd->DrsCounters.TxQuality[CurrRate] <= 0) &&
+ (pAd->DrsCounters.TxQuality[UpRate] <=0) &&
+ (CurrRate != UpRate))
+ {
+ pAd->PortCfg.TxRate = UpRate;
+ }
+-
++
+ }while (FALSE);
+
+-
++
+ // if rate-up happen, clear all bad history of all TX rates
+ if (pAd->PortCfg.TxRate > CurrRate)
+ {
+@@ -1291,7 +1269,7 @@
+ pAd->DrsCounters.TxRateUpPenalty = 2; // add 2 sec penalty
+ else // >= 8 sec
+ pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty
+-
++
+ pAd->DrsCounters.CurrTxRateStableTime = 0;
+ pAd->DrsCounters.LastSecTxRateChangeAction = 2; // rate DOWN
+ pAd->DrsCounters.TxQuality[pAd->PortCfg.TxRate] = 0;
+@@ -1299,7 +1277,7 @@
+ }
+ else
+ pAd->DrsCounters.LastSecTxRateChangeAction = 0; // rate no change
+-
++
+ // reset all OneSecxxx counters
+ pAd->DrsCounters.OneSecTxFailCount = 0;
+ pAd->DrsCounters.OneSecTxOkCount = 0;
+@@ -1309,10 +1287,10 @@
+ /*
+ ==========================================================================
+ Description:
+- This routine is executed periodically inside MlmePeriodicExec() after
++ This routine is executed periodically inside MlmePeriodicExec() after
+ association with an AP.
+ It checks if PortCfg.Psm is consistent with user policy (recorded in
+- PortCfg.WindowsPowerMode). If not, enforce user policy. However,
++ PortCfg.WindowsPowerMode). If not, enforce user policy. However,
+ there're some conditions to consider:
+ 1. we don't support power-saving in ADHOC mode, so Psm=PWR_ACTIVE all
+ the time when Mibss==TRUE
+@@ -1334,7 +1312,7 @@
+ // 4. CNTL state machine is not doing SCANning
+ // 5. no TX SUCCESS event for the past period
+ PowerMode = pAd->PortCfg.WindowsPowerMode;
+-
++
+ if (INFRA_ON(pAd) &&
+ (PowerMode != Ndis802_11PowerModeCAM) &&
+ (pAd->PortCfg.Psm == PWR_ACTIVE) &&
+@@ -1344,21 +1322,21 @@
+ MlmeSetPsmBit(pAd, PWR_SAVE);
+ EnqueueNullFrame(pAd, pAd->PortCfg.TxRate);
+ }
+-
++
+ // latch current count for next-time comparison
+ pAd->Mlme.PrevTxCnt = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart;
+
+ }
+
+ VOID MlmeSetPsmBit(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN USHORT psm)
+ {
+ TXCSR7_STRUC txcsr7;
+-
++
+ txcsr7.word = 0;
+- pAd->PortCfg.Psm = psm;
+-
++ pAd->PortCfg.Psm = psm;
++
+ DBGPRINT(RT_DEBUG_TRACE, "MMCHK - change PSM bit to %d <<<\n", psm);
+ if (psm == PWR_SAVE)
+ {
+@@ -1373,14 +1351,14 @@
+ }
+
+ VOID MlmeSetTxPreamble(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN USHORT TxPreamble)
+ {
+ ULONG Plcp1MCsr = 0x00700400; // 0x13c, ACK/CTS PLCP at 1 Mbps
+ ULONG Plcp2MCsr = 0x00380401; // 0x140, ACK/CTS PLCP at 2 Mbps
+ ULONG Plcp5MCsr = 0x00150402; // 0x144, ACK/CTS PLCP at 5.5 Mbps
+ ULONG Plcp11MCsr = 0x000b8403; // 0x148, ACK/CTS PLCP at 11 Mbps
+-
++
+ if (TxPreamble == Rt802_11PreambleShort)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeSetTxPreamble (= SHORT PREAMBLE)\n");
+@@ -1401,7 +1379,7 @@
+ RTMP_IO_WRITE32(pAd, PLCP5MCSR, Plcp5MCsr);
+ RTMP_IO_WRITE32(pAd, PLCP11MCSR, Plcp11MCsr);
+ }
+-
++
+ VOID MlmeUpdateTxRates(
+ IN PRTMP_ADAPTER pAd,
+ IN BOOLEAN bLinkUp)
+@@ -1436,14 +1414,14 @@
+
+ // 2003-12-10 802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode
+ if ((pAd->PortCfg.BssType == BSS_INDEP) &&
+- (pAd->PortCfg.PhyMode == PHY_11BG_MIXED) &&
++ (pAd->PortCfg.PhyMode == PHY_11BG_MIXED) &&
+ (pAd->PortCfg.AdhocMode == 0) &&
+ (MaxDesire > RATE_11))
+ MaxDesire = RATE_11;
+-
++
+ pAd->PortCfg.MaxDesiredRate = MaxDesire;
+-
+- // Auto rate switching is enabled only if more than one DESIRED RATES are
++
++ // Auto rate switching is enabled only if more than one DESIRED RATES are
+ // specified; otherwise disabled
+ if (num <= 1)
+ pAd->PortCfg.EnableAutoRateSwitching = FALSE;
+@@ -1455,66 +1433,66 @@
+ {
+ switch (pAd->PortCfg.SupportedRates[i] & 0x7f)
+ {
+- case 2: Rate = RATE_1;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0001;
++ case 2: Rate = RATE_1;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0001;
+ break;
+- case 4: Rate = RATE_2;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0002;
++ case 4: Rate = RATE_2;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0002;
+ break;
+- case 11:
+- Rate = RATE_5_5;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0004;
++ case 11:
++ Rate = RATE_5_5;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0004;
+ break;
+- case 22:
+- Rate = RATE_11;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0008;
++ case 22:
++ Rate = RATE_11;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0008;
+ break;
+- case 12:
+- Rate = RATE_6;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0010;
++ case 12:
++ Rate = RATE_6;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0010;
+ break;
+- case 18:
+- Rate = RATE_9;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0020;
++ case 18:
++ Rate = RATE_9;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0020;
+ break;
+- case 24:
+- Rate = RATE_12;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0040;
++ case 24:
++ Rate = RATE_12;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0040;
+ break;
+- case 36:
+- Rate = RATE_18;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0080;
++ case 36:
++ Rate = RATE_18;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0080;
+ break;
+- case 48:
+- Rate = RATE_24;
+-// if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0100;
++ case 48:
++ Rate = RATE_24;
++// if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0100;
+ break;
+- case 72:
+- Rate = RATE_36;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0200;
++ case 72:
++ Rate = RATE_36;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0200;
+ break;
+- case 96:
+- Rate = RATE_48;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0400;
++ case 96:
++ Rate = RATE_48;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0400;
+ break;
+- case 108:
+- Rate = RATE_54;
+- if (pAd->PortCfg.SupportedRates[i] & 0x80)
+- BasicRateBitmap |= 0x0800;
++ case 108:
++ Rate = RATE_54;
++ if (pAd->PortCfg.SupportedRates[i] & 0x80)
++ BasicRateBitmap |= 0x0800;
+ break;
+- default:
+- Rate = RATE_1;
++ default:
++ Rate = RATE_1;
+ break;
+ }
+ if (MaxSupport < Rate) MaxSupport = Rate;
+@@ -1530,7 +1508,7 @@
+ pAd->PortCfg.ExpectedACKRate[i] = CurrBasicRate;
+ DBGPRINT(RT_DEBUG_INFO,"Expected ACK rate[%d] = %d Mbps\n", RateIdToMbps[i], RateIdToMbps[CurrBasicRate]);
+ }
+-
++
+ // max tx rate = min {max desire rate, max supported rate}
+ if (MaxSupport < MaxDesire)
+ pAd->PortCfg.MaxTxRate = MaxSupport;
+@@ -1547,13 +1525,13 @@
+ {
+ if (pAd->PortCfg.Channel > 14)
+ pAd->PortCfg.TxRate = RATE_6; // 802.11a
+- else
++ else
+ {
+ short dbm = pAd->PortCfg.AvgRssi - pAd->PortCfg.RssiToDbm;
+ if (bLinkUp == TRUE && pAd->PortCfg.MaxTxRate >= RATE_24)
+ pAd->PortCfg.TxRate = RATE_24;
+ else
+- pAd->PortCfg.TxRate = pAd->PortCfg.MaxTxRate;
++ pAd->PortCfg.TxRate = pAd->PortCfg.MaxTxRate;
+ if (dbm < -75)
+ pAd->PortCfg.TxRate = RATE_11;
+ else if ((dbm < -70) && (pAd->PortCfg.TxRate > RATE_24))
+@@ -1568,7 +1546,7 @@
+ case PHY_11BG_MIXED:
+ case PHY_11B:
+ pAd->PortCfg.MlmeRate = RATE_2;
+-#ifdef WIFI_TEST
++#ifdef WIFI_TEST
+ pAd->PortCfg.RtsRate = RATE_11;
+ #else
+ pAd->PortCfg.RtsRate = RATE_2;
+@@ -1595,10 +1573,10 @@
+ pAd->PortCfg.RtsRate = RATE_2;
+ break;
+ }
+-
+- DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, Rate Switching =%d)\n",
++
++ DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, Rate Switching =%d)\n",
+ RateIdToMbps[MaxDesire], RateIdToMbps[MaxSupport], RateIdToMbps[pAd->PortCfg.MaxTxRate], pAd->PortCfg.EnableAutoRateSwitching);
+- DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04x)\n",
++ DBGPRINT(RT_DEBUG_TRACE, " MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04x)\n",
+ RateIdToMbps[pAd->PortCfg.TxRate], RateIdToMbps[pAd->PortCfg.RtsRate], BasicRateBitmap);
+ }
+
+@@ -1623,14 +1601,14 @@
+ {
+ ASIC_LED_ACT_OFF(pAd);
+ }
+-
++
+ // Clean up old bss table
+ BssTableInit(&pAd->PortCfg.BssTab);
+ }
+
+ VOID MlmeRadioOn(
+ IN PRTMP_ADAPTER pAd)
+-{
++{
+ // Turn on radio
+ RTMP_IO_WRITE32(pAd, PWRCSR0, 0x3f3b3100);
+
+@@ -1665,12 +1643,12 @@
+ * \post
+ */
+ VOID BssTableInit(
+- IN BSS_TABLE *Tab)
++ IN BSS_TABLE *Tab)
+ {
+ int i;
+
+ Tab->BssNr = 0;
+- for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++)
++ for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++)
+ {
+ memset(&Tab->BssEntry[i], 0, sizeof(BSS_ENTRY));
+ }
+@@ -1678,23 +1656,23 @@
+
+ /*! \brief search the BSS table by SSID
+ * \param p_tab pointer to the bss table
+- * \param ssid SSID string
++ * \param ssid SSID string
+ * \return index of the table, BSS_NOT_FOUND if not in the table
+ * \pre
+ * \post
+ * \note search by sequential search
+ */
+ ULONG BssTableSearch(
+- IN BSS_TABLE *Tab,
+- IN PMACADDR Bssid)
++ IN BSS_TABLE *Tab,
++ IN PMACADDR Bssid)
+ {
+ UCHAR i;
+-
+- for (i = 0; i < Tab->BssNr; i++)
++
++ for (i = 0; i < Tab->BssNr; i++)
+ {
+ //printf("comparing %s and %s\n", p_tab->bss[i].ssid, ssid);
+- if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
+- {
++ if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
++ {
+ return i;
+ }
+ }
+@@ -1702,15 +1680,15 @@
+ }
+
+ VOID BssTableDeleteEntry(
+- IN OUT BSS_TABLE *Tab,
+- IN PMACADDR Bssid)
++ IN OUT BSS_TABLE *Tab,
++ IN PMACADDR Bssid)
+ {
+ UCHAR i, j;
+-
+- for (i = 0; i < Tab->BssNr; i++)
++
++ for (i = 0; i < Tab->BssNr; i++)
+ {
+ //printf("comparing %s and %s\n", p_tab->bss[i].ssid, ssid);
+- if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
++ if (MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid))
+ {
+ for (j = i; j < Tab->BssNr - 1; j++)
+ {
+@@ -1724,36 +1702,63 @@
+
+ UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
++
++static NDIS_802_11_WEP_STATUS setWepStatus(
++ IN USHORT mask, // Peer cipher capability set
++ IN NDIS_802_11_WEP_STATUS WepStatus) // local cipher selection
++{
++ static const unsigned char transtoieee[] = {
++ CIPHER_TYPE_WEP104,0,0,0,CIPHER_TYPE_TKIP,0,CIPHER_TYPE_CCMP,0
++ };
++ static const unsigned char transtondis[] = {
++ Ndis802_11EncryptionDisabled, Ndis802_11WEPEnabled,
++ Ndis802_11Encryption2Enabled, Ndis802_11WEPKeyAbsent,
++ Ndis802_11Encryption3Enabled, Ndis802_11WEPEnabled
++ };
++ NDIS_802_11_WEP_STATUS wepstatus = Ndis802_11WEPDisabled;
++ USHORT suite = transtoieee[WepStatus];
++
++ DBGPRINT(RT_DEBUG_TRACE, " - (%s) mask 0x%04x wepstatus %d ieee %d\n",
++ __FUNCTION__, mask, WepStatus, suite);
++
++ if (suite && (mask & 0x01 << suite)) {
++ wepstatus = transtondis[suite];
++ }
++ return wepstatus;
++
++} /* End setWepStatus () */
++
+ /*! \brief
+- * \param
++ * \param
+ * \return
+ * \pre
+ * \post
+ */
+ VOID BssEntrySet(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_ENTRY *pBss,
+- IN MACADDR *pBssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_ENTRY *pBss,
++ IN MACADDR *pBssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
+ IN BOOLEAN CfExist,
+- IN CF_PARM *pCfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN CF_PARM *pCfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
+- IN PNDIS_802_11_VARIABLE_IEs pVIE)
++ IN USHORT VarIELen, // Length of all saved IEs.
++ IN PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ COPY_MAC_ADDR(&pBss->Bssid, pBssid);
+ // Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID
+- pBss->Hidden = 1;
++ pBss->Hidden = 1;
+ if (SsidLen > 0)
+ {
+ // For hidden SSID AP, it might send beacon with SSID len equal to 0
+@@ -1769,17 +1774,17 @@
+ }
+ pBss->BssType = BssType;
+ pBss->BeaconPeriod = BeaconPeriod;
+- if (BssType == BSS_INFRA)
++ if (BssType == BSS_INFRA)
+ {
+- if (CfExist)
++ if (CfExist)
+ {
+ pBss->CfpCount = pCfParm->CfpCount;
+ pBss->CfpPeriod = pCfParm->CfpPeriod;
+ pBss->CfpMaxDuration = pCfParm->CfpMaxDuration;
+ pBss->CfpDurRemaining = pCfParm->CfpDurRemaining;
+ }
+- }
+- else
++ }
++ else
+ {
+ pBss->AtimWin = AtimWin;
+ }
+@@ -1801,15 +1806,23 @@
+ pBss->FixIEs.Capabilities = CapabilityInfo;
+
+ // New for microsoft Variable IEs
+- if (pVIE->Length != 0)
++ pBss->VarIELen = VarIELen;
++ if (VarIELen != 0)
+ {
+- pBss->VarIELen = pVIE->Length + 2;
+- memcpy(pBss->VarIEs, pVIE, pBss->VarIELen);
+- pBss->WepStatus = BssCipherParse(pBss->VarIEs);
++ memcpy(pBss->VarIEs, pVIE, VarIELen);
++ pBss->CipherCap = BssCipherParse((PBEACON_EID_STRUCT)pBss->VarIEs,
++ VarIELen);
++ if (pBss->CipherCap & (0x01 << CIPHER_TYPE_GRP)) {
++ pBss->WepStatus = setWepStatus(pBss->CipherCap >> 8,
++ pAd->PortCfg.WepStatus);
++ }
++ else {
++ pBss->WepStatus = setWepStatus(pBss->CipherCap,
++ pAd->PortCfg.WepStatus);
++ }
+ }
+ else
+ {
+- pBss->VarIELen = 0;
+ // No SSN ID, if security is on, this is WEP algorithm
+ if (pBss->Privacy)
+ pBss->WepStatus = Ndis802_11WEPEnabled;
+@@ -1817,9 +1830,11 @@
+ else
+ pBss->WepStatus = Ndis802_11WEPDisabled;
+ }
++ DBGPRINT(RT_DEBUG_TRACE, "%s: Ndis WepStatus (Local=%d, Remote=%d)\n",
++ __FUNCTION__, pAd->PortCfg.WepStatus, pBss->WepStatus);
+ }
+
+-/*!
++/*!
+ * \brief insert an entry into the bss table
+ * \param p_tab The BSS table
+ * \param Bssid BSSID
+@@ -1840,17 +1855,17 @@
+ * \note If SSID is identical, the old entry will be replaced by the new one
+ */
+ ULONG BssTableSetEntry(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *Tab,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *Tab,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
+ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+@@ -1858,50 +1873,52 @@
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ ULONG Idx;
++
+ Idx = BssTableSearch(Tab, Bssid);
+- if (Idx == BSS_NOT_FOUND)
++ if (Idx == BSS_NOT_FOUND)
+ {
+ if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE)
+ return BSS_NOT_FOUND;
+-
++
+ Idx = Tab->BssNr;
+ BssEntrySet(pAd, &Tab->BssEntry[Idx], Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
+ CfExist, CfParm, AtimWin, CapabilityInfo, Rates, RatesLen, ExtendedRateIeExist,
+- ChannelNo, Rssi, Noise, TimeStamp, pVIE);
++ ChannelNo, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ Tab->BssNr++;
+- }
++ }
+ else
+ {
+ BssEntrySet(pAd, &Tab->BssEntry[Idx], Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
+ CfExist, CfParm, AtimWin, CapabilityInfo, Rates, RatesLen, ExtendedRateIeExist,
+- ChannelNo, Rssi, Noise, TimeStamp, pVIE);
++ ChannelNo, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ }
+-
++
+ return Idx;
+ }
+
+ VOID BssTableSsidSort(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *OutTab,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *OutTab,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen)
+ {
+ INT i;
+ BssTableInit(OutTab);
+
+- for (i = 0; i < pAd->PortCfg.BssTab.BssNr; i++)
++ for (i = 0; i < pAd->PortCfg.BssTab.BssNr; i++)
+ {
+ BSS_ENTRY *pInBss = &pAd->PortCfg.BssTab.BssEntry[i];
+-
+- if ((pInBss->BssType == pAd->PortCfg.BssType) &&
++
++ if ((pInBss->BssType == pAd->PortCfg.BssType) &&
+ ((pInBss->SsidLen==SsidLen) && RTMPEqualMemory(pInBss->Ssid, Ssid, (ULONG) SsidLen)))
+ {
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+@@ -1911,24 +1928,24 @@
+ // CCX also require not even try to connect it!!
+ if (SsidLen == 0)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
++
+ OutTab->BssNr++;
+ }
+ else if ((pInBss->BssType == pAd->PortCfg.BssType) && (SsidLen == 0))
+ {
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
++
+ OutTab->BssNr++;
+ }
+ #if 0
+@@ -1937,36 +1954,36 @@
+ // Add for hidden SSID. But we have to verify the security suite too.
+ BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
+- // Bss Type matched, SSID matched.
++ // Bss Type matched, SSID matched.
+ // We will check wepstatus for qualification Bss
+ if (pAd->PortCfg.WepStatus != pInBss->WepStatus)
+ continue;
+-
++
+ // copy matching BSS from InTab to OutTab
+ memcpy(pOutBss, pInBss, sizeof(BSS_ENTRY));
+-
+- OutTab->BssNr++;
++
++ OutTab->BssNr++;
+ }
+-#endif
++#endif
+ if (OutTab->BssNr >= MAX_LEN_OF_BSS_TABLE)
+ break;
+-
++
+ }
+-
++
+ BssTableSortByRssi(OutTab);
+ }
+
+ VOID BssTableSortByRssi(
+- IN OUT BSS_TABLE *OutTab)
++ IN OUT BSS_TABLE *OutTab)
+ {
+ INT i, j;
+ BSS_ENTRY TmpBss;
+
+- for (i = 0; i < OutTab->BssNr - 1; i++)
++ for (i = 0; i < OutTab->BssNr - 1; i++)
+ {
+- for (j = i+1; j < OutTab->BssNr; j++)
++ for (j = i+1; j < OutTab->BssNr; j++)
+ {
+- if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi)
++ if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi)
+ {
+ memcpy(&TmpBss, &OutTab->BssEntry[j], sizeof(BSS_ENTRY));
+ memcpy(&OutTab->BssEntry[j], &OutTab->BssEntry[i], sizeof(BSS_ENTRY));
+@@ -1976,34 +1993,178 @@
+ }
+ }
+
+-NDIS_802_11_WEP_STATUS BssCipherParse(
+- IN PUCHAR pCipher)
++/*
++ * ============================================================================
++ * Description:
++ * Scan cipher suite list and return cipher capability set.
++ * ============================================================================
++ */
++static USHORT scan_csl(
++ IN suite_list_t *psl,
++ IN USHORT curtype)
+ {
+- PBEACON_EID_STRUCT pEid;
+- PUCHAR pTmp;
++ USHORT ciphertype = curtype; // Cipher "capability set"
++ int i, j;
++
++ DBGPRINT(RT_DEBUG_TRACE, " - scan %d pair cipher(s)\n", psl->count);
++
++ for (i = 0, j = psl->count; i < j; i++) {
+
+- pEid = (PBEACON_EID_STRUCT) pCipher;
++ if (psl->suite[i].type < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x01 << psl->suite[i].type;
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR, " - invalid pair cipher type %d\n",
++ psl->suite[i].type);
++ }
++ DBGPRINT(RT_DEBUG_TRACE, " - (pair) CipherType now=0x%04x\n",
++ ciphertype);
++ }
++ return ciphertype;
+
+- // Double check sanity information, although it should be done at peer beacon sanity check already.
+- if (pEid->Eid != IE_WPA)
+- return (Ndis802_11WEPDisabled);
+-
+- // Double check Var IE length, it must be no less than 0x16
+- if (pEid->Len < 0x16)
+- return (Ndis802_11WEPDisabled);
+-
+- // Skip OUI, version, and multicast suite
+- // This part should be improved in the future when AP supported multiple cipher suite.
+- // For now, it's OK since almost all APs have fixed cipher suite supported.
+- pTmp = (PUCHAR) pEid->Octet;
+- pTmp += 9;
+-
+- if (*pTmp == 4) // AES
+- return (Ndis802_11Encryption3Enabled);
+- else if (*pTmp == 2) // TKIP
+- return (Ndis802_11Encryption2Enabled);
++} /* End scan_csl () */
++
++USHORT BssCipherParse(
++ IN PBEACON_EID_STRUCT pEid,
++ IN USHORT VarIELen) // Length of all saved IEs.
++{
++ USHORT ciphertype = 0;
++ PBEACON_EID_STRUCT ptEid;
++ USHORT len;
++
++ DBGPRINT(RT_DEBUG_TRACE, "%s: using VarIELen=%d\n", __FUNCTION__, VarIELen);
++
++ // Handle the stinerman problem (a too-short WPA IE followed by
++ // a long-enough WPA IE from an AP), the onishin/dacull problem
++ // (a RSN - WPA2 - IE followed by a WPA1 IE from an AP), and the
++ // holtzmichel problem (a WPA1 IE followed by a WPA2 IE). We end
++ // up using the *last* one we find. This may (or may not) really
++ // be the thing to do. - bb
++ for (ptEid = pEid, len = 0; len < VarIELen;
++ len += ptEid->Len + 2,
++ ptEid = (PBEACON_EID_STRUCT)((UCHAR *)pEid + len)) {
++
++ DBGPRINT(RT_DEBUG_TRACE, " - examining IE=%d, Len=%d\n",
++ ptEid->Eid, ptEid->Len);
++
++ switch (ptEid->Eid) {
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, " - Not a WPA/WPA2 IE=%d, Len=%d\n",
++ ptEid->Eid, ptEid->Len);
++ break;
++
++ case IE_WPA: {
++ #define p ((PRSN_EID_STRUCT)ptEid)
++
++ // Double check Var IE length, it must be no less than 0x16
++ // Silently ignore if not
++ if (ptEid->Len < 0x16) {
++ DBGPRINT(RT_DEBUG_ERROR, " - Len %d too short\n",
++ ptEid->Len);
++ break;
++ }
++ // Skip OUI, version, and multicast suite
++ // This part should be improved in the future when AP
++ // supported multiple cipher suite. For now, it's OK since
++ // almost all APs have fixed cipher suite supported.
++ // (The future is now - bb)
++ if (p->Multicast[3] < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x100 << p->Multicast[3];
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_WPA invalid group cipher %d\n",
++ p->Multicast[3]);
++ }
++ DBGPRINT(RT_DEBUG_TRACE, " - WPA CipherType now=0x%04x\n",
++ ciphertype);
+
+- return (Ndis802_11WEPDisabled);
++ if (p->Length >= sizeof(RSN_EID_STRUCT) -
++ offsetof(RSN_EID_STRUCT, Oui)) {
++ suite_list_p psl = (suite_list_p)((UCHAR *)p +
++ offsetof(RSN_EID_STRUCT, Count));
++
++ if (psl->count * sizeof(suite_sel_t) +
++ offsetof(RSN_EID_STRUCT,Count) -
++ offsetof(RSN_EID_STRUCT,Oui) >
++ p->Length) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - malformed WPA pair cipher count "
++ "(needs %d bytes, %d bytes avail)\n",
++ psl->count*sizeof(suite_sel_t) +
++ offsetof(RSN_EID_STRUCT,Count) -
++ offsetof(RSN_EID_STRUCT,Oui),
++ p->Length);
++ break;
++ }
++ ciphertype = scan_csl(psl, ciphertype);
++ }
++ else {
++ ciphertype |= 0x01; // Indicate use group cipher
++ }
++ #undef p
++ break;
++ }
++ case IE_RSN: { // 802.11i pp. 27 - 32
++ #define p ((rsn_ie_p)ptEid)
++
++ if (p->length == sizeof(p->version)) {
++ ciphertype = 0x01 | 0x100 << CIPHER_TYPE_CCMP;
++ break;
++ }
++ if (p->length >= sizeof(p->version) + sizeof(p->gcsuite)) {
++
++ // Right now, we use the group cipher suite since it
++ // appears (to me, at any rate) that that's what is
++ // being used from the WPA IE.
++ // (SWAG - cf. RSN_EID_STRUCT - is that WPA_IE is RSN_IE
++ // with 4 bytes in front of the version tag. So we
++ // use the group cipher suite ala case IE_WPA above.)
++ // cf. the Holtzmichel problem: Looks like the Sinus 154
++ // Basic 3 includes either 3 pairwise cipher suites, or
++ // 1 pairwise cipher suite, 1 AKM suite, and an RSN
++ // capabilities field, because the len is 20.
++ if (p->gcsuite.type < NUM_CIPHER_TYPES) {
++ ciphertype |= 0x100 << p->gcsuite.type;
++ }
++ else {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid group cipher %d\n",
++ p->gcsuite.type);
++ }
++ DBGPRINT(RT_DEBUG_TRACE,
++ " - (grp) CipherType now=0x%04x\n", ciphertype);
++ }
++ if (p->length > sizeof(p->version) + sizeof(p->gcsuite)) {
++ suite_list_p psl = (suite_list_p)((UCHAR *)p +
++ offsetof(rsn_ie_t, version) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t));
++
++ if (psl->count * sizeof(suite_sel_t) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t) >
++ p->length) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - malformed RSN pair cipher count "
++ "(needs %d bytes, %d bytes avail)\n",
++ psl->count*sizeof(suite_sel_t) +
++ sizeof(ie_version_t) + sizeof(suite_sel_t),
++ p->length);
++ break;
++ }
++ ciphertype = scan_csl(psl, ciphertype);
++ }
++ else {
++ ciphertype |= 0x01; // Indicate use group cipher
++ }
++ #undef p
++ break;
++ } /* End case IE_RSN */
++ } /* End switch EID */
++ } /* End for () */
++
++ DBGPRINT(RT_DEBUG_TRACE, "%s: return CipherType=0x%04x\n",
++ __FUNCTION__, ciphertype);
++ return ciphertype;
+ }
+
+ // ===========================================================================================
+@@ -2017,16 +2178,16 @@
+ * \post
+ */
+ VOID MacAddrRandomBssid(
+- IN PRTMP_ADAPTER pAd,
+- OUT MACADDR *Addr)
++ IN PRTMP_ADAPTER pAd,
++ OUT MACADDR *Addr)
+ {
+ INT i;
+
+- for (i = 0; i < ETH_ALEN; i++)
++ for (i = 0; i < ETH_ALEN; i++)
+ {
+ Addr->Octet[i] = RandomByte(pAd);
+ }
+-
++
+ Addr->Octet[0] = (Addr->Octet[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx
+ }
+
+@@ -2042,12 +2203,12 @@
+ * \note this function initializes the following field
+ */
+ VOID MgtMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PMACHDR Hdr,
+- IN UCHAR Subtype,
+- IN UCHAR ToDs,
+- IN PMACADDR Ds,
+- IN PMACADDR Bssid)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PMACHDR Hdr,
++ IN UCHAR Subtype,
++ IN UCHAR ToDs,
++ IN PMACADDR Ds,
++ IN PMACADDR Bssid)
+ {
+ memset(Hdr, 0, sizeof(MACHDR));
+ Hdr->Type = BTYPE_MGMT;
+@@ -2063,8 +2224,8 @@
+ // ===========================================================================================
+
+ /*!***************************************************************************
+- * This routine build an outgoing frame, and fill all information specified
+- * in argument list to the frame body. The actual frame size is the summation
++ * This routine build an outgoing frame, and fill all information specified
++ * in argument list to the frame body. The actual frame size is the summation
+ * of all arguments.
+ * input params:
+ * Buffer - pointer to a pre-allocated memory segment
+@@ -2073,12 +2234,12 @@
+ * function will FAIL!!!
+ * return:
+ * Size of the buffer
+- * usage:
++ * usage:
+ * MakeOutgoingFrame(Buffer, output_length, 2, &fc, 2, &dur, 6, p_addr1, 6,p_addr2, END_OF_ARGS);
+ ****************************************************************************/
+ ULONG MakeOutgoingFrame(
+- OUT CHAR *Buffer,
+- OUT ULONG *FrameLen, ...)
++ OUT CHAR *Buffer,
++ OUT ULONG *FrameLen, ...)
+ {
+ CHAR *p;
+ int leng;
+@@ -2088,10 +2249,10 @@
+ // calculates the total length
+ TotLeng = 0;
+ va_start(Args, FrameLen);
+- do
++ do
+ {
+ leng = va_arg(Args, int);
+- if (leng == END_OF_ARGS)
++ if (leng == END_OF_ARGS)
+ {
+ break;
+ }
+@@ -2117,7 +2278,7 @@
+ * \note Because this is done only once (at the init stage), no need to be locked
+ */
+ NDIS_STATUS MlmeQueueInit(
+- IN MLME_QUEUE *Queue)
++ IN MLME_QUEUE *Queue)
+ {
+ INT i;
+
+@@ -2127,7 +2288,7 @@
+ Queue->Head = 0;
+ Queue->Tail = 0;
+
+- for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++)
++ for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++)
+ {
+ Queue->Entry[i].Occupied = FALSE;
+ Queue->Entry[i].MsgLen = 0;
+@@ -2150,11 +2311,11 @@
+ * \note The message has to be initialized
+ */
+ BOOLEAN MlmeEnqueue(
+- OUT MLME_QUEUE *Queue,
+- IN ULONG Machine,
+- IN ULONG MsgType,
+- IN ULONG MsgLen,
+- IN VOID *Msg)
++ OUT MLME_QUEUE *Queue,
++ IN ULONG Machine,
++ IN ULONG MsgType,
++ IN ULONG MsgLen,
++ IN VOID *Msg)
+ {
+ INT Tail;
+ unsigned long flags;
+@@ -2164,30 +2325,25 @@
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv mlme frame too large, size = %d \n", MsgLen);
+ return FALSE;
+ }
+-
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (MlmeQueueFull(Queue))
+- {
++
++ spin_lock_irqsave(&Queue->Lock, flags);
++ if (Queue->Num == MAX_LEN_OF_MLME_QUEUE) {
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ printk(KERN_ERR DRV_NAME "MlmeEnqueue full, msg dropped and may corrupt MLME\n");
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ return FALSE;
+ }
+-
+- Tail = Queue->Tail;
+- Queue->Tail++;
++ Tail = Queue->Tail++;
++ Queue->Tail %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num++;
+- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Tail = 0;
+- }
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeEnqueue, num=%d\n",Queue->Num);
+-
++
+ Queue->Entry[Tail].Occupied = TRUE;
+ Queue->Entry[Tail].Machine = Machine;
+ Queue->Entry[Tail].MsgType = MsgType;
+ Queue->Entry[Tail].MsgLen = MsgLen;
+- memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
++ if (Msg != NULL)
++ memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+ return TRUE;
+ }
+
+@@ -2203,14 +2359,14 @@
+ * \post
+ */
+ BOOLEAN MlmeEnqueueForRecv(
+- IN PRTMP_ADAPTER pAd,
+- OUT MLME_QUEUE *Queue,
+- IN ULONG TimeStampHigh,
++ IN PRTMP_ADAPTER pAd,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG TimeStampHigh,
+ IN ULONG TimeStampLow,
+ IN UCHAR Rssi,
+- IN UCHAR Noise,
+- IN ULONG MsgLen,
+- IN VOID *Msg)
++ IN UCHAR Noise,
++ IN ULONG MsgLen,
++ IN VOID *Msg)
+ {
+ INT Tail, Machine;
+ MACFRAME *Fr = (MACFRAME *)Msg;
+@@ -2225,31 +2381,25 @@
+ }
+
+
+- if (!MsgTypeSubst(Fr, &Machine, &MsgType))
++ if (!MsgTypeSubst(Fr, &Machine, &MsgType))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv (drop mgmt->subtype=%d)\n",Fr->Hdr.SubType);
+ return FALSE;
+ }
+
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (MlmeQueueFull(Queue))
+- {
++ spin_lock_irqsave(&Queue->Lock, flags);
++ if (Queue->Num == MAX_LEN_OF_MLME_QUEUE) {
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_ERROR, "MlmeEnqueueForRecv (queue full error) \n");
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ return FALSE;
+ }
+-
+- // OK, we got all the informations, it is time to put things into queue
+- Tail = Queue->Tail;
+- Queue->Tail++;
++ Tail = Queue->Tail++;
++ Queue->Tail %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num++;
+- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Tail = 0;
+- }
+-
++ spin_unlock_irqrestore(&Queue->Lock, flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeEnqueueForRecv, num=%d\n",Queue->Num);
+-
++
++ // OK, we got all the informations, it is time to put things into queue
+ Queue->Entry[Tail].Occupied = TRUE;
+ Queue->Entry[Tail].Machine = Machine;
+ Queue->Entry[Tail].MsgType = MsgType;
+@@ -2258,8 +2408,8 @@
+ Queue->Entry[Tail].TimeStamp.vv.HighPart = TimeStampHigh;
+ Queue->Entry[Tail].Rssi = Rssi;
+ Queue->Entry[Tail].Noise = (Noise > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) Noise);
+- memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
++ if (Msg != NULL)
++ memcpy(Queue->Entry[Tail].Msg, Msg, MsgLen);
+
+ MlmeHandler(pAd);
+
+@@ -2267,6 +2417,7 @@
+ }
+
+ /*! \brief Dequeue a message from the MLME Queue
++ * WARNING: Must be call with Mlme.Queue.Lock held
+ * \param *Queue The MLME Queue
+ * \param *Elem The message dequeued from MLME Queue
+ * \return TRUE if the Elem contains something, FALSE otherwise
+@@ -2274,23 +2425,14 @@
+ * \post
+ */
+ BOOLEAN MlmeDequeue(
+- IN MLME_QUEUE *Queue,
+- OUT MLME_QUEUE_ELEM **Elem)
++ IN MLME_QUEUE *Queue,
++ OUT MLME_QUEUE_ELEM **Elem)
+ {
+- unsigned long flags;
+- spin_lock_irqsave(&(Queue->Lock), flags);
+- if (Queue->Num == 0) {
+- spin_unlock_irqrestore(&(Queue->Lock),flags);
++ if (Queue->Num == 0)
+ return FALSE;
+- }
+- *Elem = &(Queue->Entry[Queue->Head]);
++ *Elem = &Queue->Entry[Queue->Head++];
++ Queue->Head %= MAX_LEN_OF_MLME_QUEUE;
+ Queue->Num--;
+- Queue->Head++;
+- if (Queue->Head == MAX_LEN_OF_MLME_QUEUE)
+- {
+- Queue->Head = 0;
+- }
+- spin_unlock_irqrestore(&(Queue->Lock), flags);
+ DBGPRINT(RT_DEBUG_INFO, "MlmeDequeue, num=%d\n",Queue->Num);
+
+ return TRUE;
+@@ -2308,29 +2450,27 @@
+ DBGPRINT(RT_DEBUG_ERROR, "Failure to initialize mlme.\n");
+ // Continue the reset procedure...
+ }
+-
++
+ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
+- if(pAd->Mlme.Running)
++ if(pAd->Mlme.Running)
+ {
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ return;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.Running = TRUE;
+ }
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+
+ // Remove all Mlme queues elements
+- while (MlmeDequeue(&pAd->Mlme.Queue, &Elem))
+- {
+- //From message type, determine which state machine I should drive
+-
+- // free MLME element
+- Elem->Occupied = FALSE;
+- Elem->MsgLen = 0;
+-
+- }
++ spin_lock_irqsave(&pAd->Mlme.Queue.Lock, flags);
++ while (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) {
++ // free MLME element
++ Elem->Occupied = FALSE;
++ Elem->MsgLen = 0;
++ }
++ spin_unlock_irqrestore(&pAd->Mlme.Queue.Lock, flags);
+
+ // Cancel all timer events
+ // Be careful to cancel new added timer
+@@ -2356,54 +2496,22 @@
+ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
+ pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE;
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+-
++
+ // Remove running state
+ spin_lock_irqsave(&pAd->Mlme.TaskLock, flags);
+ pAd->Mlme.Running = FALSE;
+ spin_unlock_irqrestore(&pAd->Mlme.TaskLock, flags);
+ }
+
+-/*! \brief test if the MLME Queue is empty
+- * \param *Queue The MLME Queue
+- * \return TRUE if the Queue is empty, FALSE otherwise
+- * \pre
+- * \post
+- */
+-BOOLEAN MlmeQueueEmpty(
+- IN MLME_QUEUE *Queue)
+-{
+- BOOLEAN Ans;
+-
+- Ans = (Queue->Num == 0);
+-
+- return Ans;
+-}
+-
+-/*! \brief test if the MLME Queue is full
+- * \param *Queue The MLME Queue
+- * \return TRUE if the Queue is empty, FALSE otherwise
+- * \pre
+- * \post
+- */
+-BOOLEAN MlmeQueueFull(
+- IN MLME_QUEUE *Queue)
+-{
+- BOOLEAN Ans;
+-
+- Ans = (Queue->Num == MAX_LEN_OF_MLME_QUEUE);
+-
+- return Ans;
+-}
+-
+ /*! \brief The destructor of MLME Queue
+- * \param
++ * \param
+ * \return
+ * \pre
+ * \post
+ * \note Clear Mlme Queue, Set Queue->Num to Zero.
+ */
+ VOID MlmeQueueDestroy(
+- IN MLME_QUEUE *Queue)
++ IN MLME_QUEUE *Queue)
+ {
+ unsigned long flags;
+ spin_lock_irqsave(&(Queue->Lock), flags);
+@@ -2422,22 +2530,22 @@
+ * \post
+ */
+ BOOLEAN MsgTypeSubst(
+- IN MACFRAME *Fr,
+- OUT INT *Machine,
+- OUT INT *MsgType)
++ IN MACFRAME *Fr,
++ OUT INT *Machine,
++ OUT INT *MsgType)
+ {
+ USHORT Seq;
+ UCHAR EAPType;
+
+ // The only data type will pass to this function is EAPOL frame
+- if (Fr->Hdr.Type == BTYPE_DATA)
+- {
++ if (Fr->Hdr.Type == BTYPE_DATA)
++ {
+ *Machine = WPA_PSK_STATE_MACHINE;
+ EAPType = *((UCHAR*)Fr + LENGTH_802_11 + LENGTH_802_1_H + 1);
+ return(WpaMsgTypeSubst(EAPType, MsgType));
+ }
+
+- switch (Fr->Hdr.SubType)
++ switch (Fr->Hdr.SubType)
+ {
+ case SUBTYPE_ASSOC_REQ:
+ *Machine = ASSOC_STATE_MACHINE;
+@@ -2478,17 +2586,17 @@
+ case SUBTYPE_AUTH:
+ // get the sequence number from payload 24 Mac Header + 2 bytes algorithm
+ memcpy(&Seq, &Fr->Octet[2], sizeof(USHORT));
+- if (Seq == 1 || Seq == 3)
++ if (Seq == 1 || Seq == 3)
+ {
+ *Machine = AUTH_RSP_STATE_MACHINE;
+ *MsgType = MT2_PEER_AUTH_ODD;
+- }
+- else if (Seq == 2 || Seq == 4)
++ }
++ else if (Seq == 2 || Seq == 4)
+ {
+ *Machine = AUTH_STATE_MACHINE;
+ *MsgType = MT2_PEER_AUTH_EVEN;
+- }
+- else
++ }
++ else
+ {
+ return FALSE;
+ }
+@@ -2510,25 +2618,25 @@
+ // ===========================================================================================
+
+ /*! \brief Initialize the state machine.
+- * \param *S pointer to the state machine
++ * \param *S pointer to the state machine
+ * \param Trans State machine transition function
+- * \param StNr number of states
+- * \param MsgNr number of messages
+- * \param DefFunc default function, when there is invalid state/message combination
+- * \param InitState initial state of the state machine
++ * \param StNr number of states
++ * \param MsgNr number of messages
++ * \param DefFunc default function, when there is invalid state/message combination
++ * \param InitState initial state of the state machine
+ * \param Base StateMachine base, internal use only
+ * \pre p_sm should be a legal pointer
+ * \post
+ */
+
+ VOID StateMachineInit(
+- IN STATE_MACHINE *S,
+- IN STATE_MACHINE_FUNC Trans[],
+- IN ULONG StNr,
+- IN ULONG MsgNr,
+- IN STATE_MACHINE_FUNC DefFunc,
+- IN ULONG InitState,
+- IN ULONG Base)
++ IN STATE_MACHINE *S,
++ IN STATE_MACHINE_FUNC Trans[],
++ IN ULONG StNr,
++ IN ULONG MsgNr,
++ IN STATE_MACHINE_FUNC DefFunc,
++ IN ULONG InitState,
++ IN ULONG Base)
+ {
+ ULONG i, j;
+
+@@ -2538,22 +2646,22 @@
+ S->Base = Base;
+
+ S->TransFunc = Trans;
+-
++
+ // init all state transition to default function
+- for (i = 0; i < StNr; i++)
++ for (i = 0; i < StNr; i++)
+ {
+- for (j = 0; j < MsgNr; j++)
++ for (j = 0; j < MsgNr; j++)
+ {
+ S->TransFunc[i * MsgNr + j] = DefFunc;
+ }
+ }
+-
++
+ // set the starting state
+ S->CurrState = InitState;
+
+ }
+
+-/*! \brief This function fills in the function pointer into the cell in the state machine
++/*! \brief This function fills in the function pointer into the cell in the state machine
+ * \param *S pointer to the state machine
+ * \param St state
+ * \param Msg incoming message
+@@ -2562,20 +2670,20 @@
+ * \post
+ */
+ VOID StateMachineSetAction(
+- IN STATE_MACHINE *S,
+- IN ULONG St,
+- IN ULONG Msg,
+- IN STATE_MACHINE_FUNC Func)
++ IN STATE_MACHINE *S,
++ IN ULONG St,
++ IN ULONG Msg,
++ IN STATE_MACHINE_FUNC Func)
+ {
+ ULONG MsgIdx;
+-
++
+ MsgIdx = Msg - S->Base;
+
+- if (St < S->NrState && MsgIdx < S->NrMsg)
++ if (St < S->NrState && MsgIdx < S->NrMsg)
+ {
+ // boundary checking before setting the action
+ S->TransFunc[St * S->NrMsg + MsgIdx] = Func;
+- }
++ }
+ }
+
+ /*! \brief The destructor of the state machine
+@@ -2583,7 +2691,7 @@
+ * \note doing nothing at this moment, may need to do something if the implementation changed
+ */
+ VOID
+-StateMachineDestroy(IN STATE_MACHINE *S)
++StateMachineDestroy(IN STATE_MACHINE *S)
+ {
+ }
+
+@@ -2594,9 +2702,9 @@
+ * \return None
+ */
+ VOID StateMachinePerformAction(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base]))(pAd, Elem);
+ }
+@@ -2604,14 +2712,14 @@
+ /*
+ ==========================================================================
+ Description:
+- The drop function, when machine executes this, the message is simply
+- ignored. This function does nothing, the message is freed in
++ The drop function, when machine executes this, the message is simply
++ ignored. This function does nothing, the message is freed in
+ StateMachinePerformAction()
+ ==========================================================================
+ */
+ VOID Drop(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ #if 0
+ if ((Elem->MsgType == MT2_PEER_BEACON) ||
+@@ -2622,7 +2730,7 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("Warn:>>Drop Msg=%d<<\n",Elem->MsgType));
+ }
+-#endif
++#endif
+ }
+
+ // ===========================================================================================
+@@ -2635,12 +2743,12 @@
+ ==========================================================================
+ */
+ VOID LfsrInit(
+- IN PRTMP_ADAPTER pAd,
+- IN ULONG Seed)
++ IN PRTMP_ADAPTER pAd,
++ IN ULONG Seed)
+ {
+- if (Seed == 0)
++ if (Seed == 0)
+ pAd->Mlme.ShiftReg = 1;
+- else
++ else
+ pAd->Mlme.ShiftReg = Seed;
+ }
+
+@@ -2650,21 +2758,21 @@
+ ==========================================================================
+ */
+ UCHAR RandomByte(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ ULONG i;
+ UCHAR R, Result;
+
+ R = 0;
+
+- for (i = 0; i < 8; i++)
++ for (i = 0; i < 8; i++)
+ {
+- if (pAd->Mlme.ShiftReg & 0x00000001)
++ if (pAd->Mlme.ShiftReg & 0x00000001)
+ {
+ pAd->Mlme.ShiftReg = ((pAd->Mlme.ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000;
+ Result = 1;
+- }
+- else
++ }
++ else
+ {
+ pAd->Mlme.ShiftReg = pAd->Mlme.ShiftReg >> 1;
+ Result = 0;
+@@ -2681,17 +2789,17 @@
+ ==========================================================================
+ */
+ VOID AsicSwitchChannel(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR Channel)
++ IN PRTMP_ADAPTER pAd,
++ IN UCHAR Channel)
+ {
+ ULONG R3;
+ UCHAR index;
+ int Value;
+
+ // TODO: need to update E2PROM format to add 802.11a channel's TX power calibration values
+- if (Channel <= 14)
++ if (Channel <= 14)
+ R3 = pAd->PortCfg.ChannelTxPower[Channel - 1];
+- else
++ else
+ R3 = pAd->PortCfg.ChannelTxPower[0];
+
+ if (R3 > 31) R3 = 31;
+@@ -2706,10 +2814,10 @@
+ Value = (Value > 31) ? 31 : Value;
+ Value = (Value < 0) ? 0 : Value;
+ R3 = Value;
+-
++
+ // Krellan: Save value for readout to user
+ pAd->PortCfg.TxPowerDriver = R3;
+-
++
+ R3 = R3 << 9; // shift TX power control to correct RF R3 bit position
+
+ switch (pAd->PortCfg.RfType)
+@@ -2772,7 +2880,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_2525:
+ for (index = 0; index < NUM_OF_2525_CHNL; index++)
+ {
+@@ -2800,7 +2908,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_2525E:
+ for (index = 0; index < NUM_OF_2525E_CHNL; index++)
+ {
+@@ -2820,7 +2928,7 @@
+ }
+ }
+ break;
+-
++
+ case RFIC_5222:
+ for (index = 0; index < NUM_OF_5222_CHNL; index++)
+ {
+@@ -2846,12 +2954,12 @@
+ }
+
+ DBGPRINT(RT_DEBUG_INFO, "AsicSwitchChannel(RF=%d) to #%d, TXPwr=%d, R1=0x%08x, R2=0x%08x, R3=0x%08x, R4=0x%08x\n",
+- pAd->PortCfg.RfType,
+- pAd->PortCfg.LatchRfRegs.Channel,
++ pAd->PortCfg.RfType,
++ pAd->PortCfg.LatchRfRegs.Channel,
+ pAd->PortCfg.TxPower,
+- pAd->PortCfg.LatchRfRegs.R1,
+- pAd->PortCfg.LatchRfRegs.R2,
+- pAd->PortCfg.LatchRfRegs.R3,
++ pAd->PortCfg.LatchRfRegs.R1,
++ pAd->PortCfg.LatchRfRegs.R2,
++ pAd->PortCfg.LatchRfRegs.R3,
+ pAd->PortCfg.LatchRfRegs.R4);
+ }
+
+@@ -2865,8 +2973,8 @@
+ ==========================================================================
+ */
+ VOID AsicLockChannel(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR Channel)
++ IN PRTMP_ADAPTER pAd,
++ IN UCHAR Channel)
+ {
+ UCHAR r70;
+ ULONG FcsCnt;
+@@ -2899,14 +3007,14 @@
+ case RFIC_2525E:
+ pAd->PortCfg.LatchRfRegs.R1 &= 0xfffdffff; // RF R1.bit17 "tune_en1" OFF
+ pAd->PortCfg.LatchRfRegs.R3 &= 0xfffffeff; // RF R3.bit8 "tune_en2" OFF
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R1);
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R1);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
+ DBGPRINT(RT_DEBUG_INFO, "AsicRfTuningExec(R1=0x%x,R3=0x%x)\n",pAd->PortCfg.LatchRfRegs.R1,pAd->PortCfg.LatchRfRegs.R3);
+ break;
+-
++
+ case RFIC_2523:
+ pAd->PortCfg.LatchRfRegs.R3 &= 0xfffffeff; // RF R3.bit8 "tune_en2" OFF
+- RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
++ RTMP_RF_IO_WRITE32(pAd, pAd->PortCfg.LatchRfRegs.R3);
+ DBGPRINT(RT_DEBUG_INFO, "AsicRfTuningExec(R3=0x%x)\n",pAd->PortCfg.LatchRfRegs.R3);
+ break;
+
+@@ -2929,16 +3037,16 @@
+ ==========================================================================
+ */
+ VOID AsicAdjustTxPower(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ ULONG R3, Channel, CurrTxPwr;
+ int Value;
+
+ if ((pAd->PortCfg.Channel >= 1) && (pAd->PortCfg.Channel <= 14))
+ Channel = pAd->PortCfg.Channel;
+- else
++ else
+ Channel = 1; // don't have calibration info for 11A, temporarily use Channel 1
+-
++
+ // get TX Power base from E2PROM
+ R3 = pAd->PortCfg.ChannelTxPower[Channel - 1];
+ if (R3 > 31) R3 = 31;
+@@ -2948,7 +3056,7 @@
+ Value = (Value > 31) ? 31 : Value;
+ Value = (Value < 0) ? 0 : Value;
+ R3 = Value;
+-
++
+ // E2PROM setting is calibrated for maximum TX power (i.e. 100%)
+ // We lower TX power here according to the percentage specified from UI
+ if (pAd->PortCfg.TxPowerAuto == TRUE) // AUTO TX POWER control
+@@ -2959,10 +3067,10 @@
+ // low TX power upon very-short distance to AP to solve some vendor's AP RX problem
+ // in this case, no TSSI compensation is required.
+
+- if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
++ if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
+ (pAd->PortCfg.AvgRssi > (pAd->PortCfg.RssiToDbm - RSSI_FOR_LOWEST_TX_POWER)))
+ R3 -= LOWEST_TX_POWER_DELTA;
+- else if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
++ else if ((pAd->DrsCounters.fNoisyEnvironment == FALSE) &&
+ (pAd->PortCfg.AvgRssi > (pAd->PortCfg.RssiToDbm - RSSI_FOR_LOW_TX_POWER)))
+ R3 -= LOW_TX_POWER_DELTA;
+
+@@ -2973,7 +3081,7 @@
+ R3 +=2;
+ if (R3 > 31) R3 = 31;
+ }
+-
++
+ // 2 exclusive rules applied on CCK rates only -
+ // 1. always plus 2 db for CCK
+ // 2. adjust TX Power based on TSSI
+@@ -2986,10 +3094,10 @@
+ R3 += 2; // plus 2 db
+ if (R3 > 31) R3 = 31;
+ }
+-
+- // Auto calibrate Tx AGC if bAutoTxAgc is TRUE and TX rate is CCK,
++
++ // Auto calibrate Tx AGC if bAutoTxAgc is TRUE and TX rate is CCK,
+ // because E2PROM's TSSI reference is valid only in CCK range.
+- else
++ else
+ {
+ UCHAR R1,TxPowerRef, TssiRef;
+
+@@ -3005,7 +3113,7 @@
+ // Need R3 adjustment. However, we have to make sure there is only
+ // plus / minus 5 variation allowed
+ if (TssiRef > R1)
+- {
++ {
+ R3 = (R3 < (ULONG) (TxPowerRef + 5)) ? (R3 + 1) : R3;
+ if (R3 > 31)
+ R3 = 31;
+@@ -3020,7 +3128,7 @@
+ }
+ }
+ }
+-
++
+ }
+ }
+ else // fixed AUTO TX power
+@@ -3035,7 +3143,7 @@
+
+ // Krellan: Save value for readout to user
+ pAd->PortCfg.TxPowerDriver = R3;
+-
++
+ // compare the desired R3.TxPwr value with current R3, if not equal
+ // set new R3.TxPwr
+ CurrTxPwr = (pAd->PortCfg.LatchRfRegs.R3 >> 9) & 0x0000001f;
+@@ -3058,8 +3166,8 @@
+ ==========================================================================
+ */
+ VOID AsicSleepThenAutoWakeup(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT TbttNumToNextWakeUp)
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT TbttNumToNextWakeUp)
+ {
+ CSR20_STRUC Csr20;
+ PWRCSR1_STRUC Pwrcsr1;
+@@ -3067,9 +3175,9 @@
+ // we have decided to SLEEP, so at least do it for a BEACON period.
+ if (TbttNumToNextWakeUp==0)
+ TbttNumToNextWakeUp=1;
+-
++
+ // PWRCSR0 remains untouched
+-
++
+ // set CSR20 for next wakeup
+ Csr20.word = 0;
+ Csr20.field.NumBcnBeforeWakeup = TbttNumToNextWakeUp - 1;
+@@ -3141,17 +3249,17 @@
+ ==========================================================================
+ */
+ VOID AsicSetBssid(
+- IN PRTMP_ADAPTER pAd,
+- IN MACADDR *Bssid)
++ IN PRTMP_ADAPTER pAd,
++ IN MACADDR *Bssid)
+ {
+ ULONG Addr4;
+
+- Addr4 = (ULONG)(Bssid->Octet[0]) |
+- (ULONG)(Bssid->Octet[1] << 8) |
++ Addr4 = (ULONG)(Bssid->Octet[0]) |
++ (ULONG)(Bssid->Octet[1] << 8) |
+ (ULONG)(Bssid->Octet[2] << 16) |
+ (ULONG)(Bssid->Octet[3] << 24);
+ RTMP_IO_WRITE32(pAd, CSR5, Addr4);
+-
++
+ Addr4 = (ULONG)(Bssid->Octet[4]) | (ULONG)(Bssid->Octet[5] << 8);
+ RTMP_IO_WRITE32(pAd, CSR6, Addr4);
+ }
+@@ -3162,7 +3270,7 @@
+ ==========================================================================
+ */
+ VOID AsicDisableSync(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ // TIMECSR_STRUC TimeCsr;
+ DBGPRINT(RT_DEBUG_TRACE, "--->Disable TSF synchronization\n");
+@@ -3174,7 +3282,7 @@
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+ #endif
+
+-#if 0
++#if 0
+ RTMP_IO_READ32(pAd, TIMECSR, &TimeCsr.word);
+
+ // restore to 33 PCI-tick-per-Usec. for 2560a only where PCI-clock is used as TSF timing source
+@@ -3192,7 +3300,7 @@
+ ==========================================================================
+ */
+ VOID AsicEnableBssSync(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ CSR12_STRUC Csr12;
+ CSR13_STRUC Csr13;
+@@ -3201,14 +3309,14 @@
+ BOOLEAN IsApPc;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--->AsicEnableBssSync(INFRA mode)\n");
+-
++
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+-
++
+ Csr12.word = 0;
+ Csr12.field.BeaconInterval = pAd->PortCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU
+ Csr12.field.CfpMaxDuration = pAd->PortCfg.CfpMaxDuration << 4; // ASIC register in units of 1/16 TU
+ RTMP_IO_WRITE32(pAd, CSR12, Csr12.word);
+-
++
+ Csr13.word = 0;
+ Csr13.field.CfpPeriod = pAd->PortCfg.CfpDurRemain << 4; // ASIC register in units of 1/16 TU
+ RTMP_IO_WRITE32(pAd, CSR13, Csr13.word);
+@@ -3218,14 +3326,14 @@
+ Bcncsr1.field.BeaconCwMin = 5;
+ RTMP_IO_WRITE32(pAd, BCNCSR1, Bcncsr1.word);
+
+- IsApPc = (CAP_IS_CF_POLLABLE_ON(pAd->PortCfg.CapabilityInfo) &&
++ IsApPc = (CAP_IS_CF_POLLABLE_ON(pAd->PortCfg.CapabilityInfo) &&
+ CAP_IS_CF_POLL_REQ_ON(pAd->PortCfg.CapabilityInfo));
+ IsApPc = FALSE; // TODO: not support so far
+-
++
+ Csr14.word = 0;
+ Csr14.field.TsfCount = 1;
+ Csr14.field.TsfSync = 1; // sync TSF in INFRASTRUCTURE mode
+- if (IsApPc)
++ if (IsApPc)
+ {
+ Csr14.field.CfpCntPreload = pAd->PortCfg.CfpCount;
+ Csr14.field.Tcfp = 1;
+@@ -3234,13 +3342,13 @@
+ // Csr14.field.TbcnPreload = (pAd->PortCfg.BeaconPeriod - 30) << 4; // TODO: ???? 1 TU ???
+ Csr14.field.Tbcn = 1;
+ RTMP_IO_WRITE32(pAd, CSR14, Csr14.word);
+-
++
+ }
+
+ /*
+ ==========================================================================
+ Description:
+- Note:
++ Note:
+ BEACON frame in shared memory should be built ok before this routine
+ can be called. Otherwise, a garbage frame maybe transmitted out every
+ Beacon period.
+@@ -3254,7 +3362,7 @@
+ CSR14_STRUC Csr14;
+ // BCNCSR_STRUC Bcncsr;
+ BCNCSR1_STRUC Bcncsr1;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "--->AsicEnableIbssSync(ADHOC mode)\n");
+
+ RTMP_IO_WRITE32(pAd, CSR14, 0x00000000);
+@@ -3279,7 +3387,7 @@
+ Bcncsr1.field.Preload = 700; // 24 + ((MAC_HDR_LEN << 4) / RateIdTo500Kbps[pAd->PortCfg.MlmeRate]);
+ }
+ RTMP_IO_WRITE32(pAd, BCNCSR1, Bcncsr1.word);
+-
++
+ Csr14.word = 0;
+ Csr14.field.TsfCount = 1;
+ Csr14.field.TsfSync = 2; // sync TSF in IBSS mode
+@@ -3289,16 +3397,16 @@
+ }
+
+ VOID AsicLedPeriodicExec(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+ ULONG LedCsr = 0x0000461E; // 0x0000461E;
+-
++
+ pAd->PortCfg.LedCntl.fOdd = ! pAd->PortCfg.LedCntl.fOdd;
+
+- if (INFRA_ON(pAd) || ADHOC_ON(pAd))
++ if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+ LedCsr |= 0x00010000; // enable hardwired TX activity LED
+- if (pAd->PortCfg.LedCntl.fOdd && pAd->PortCfg.LedCntl.fRxActivity)
++ if (pAd->PortCfg.LedCntl.fOdd && pAd->PortCfg.LedCntl.fRxActivity)
+ LedCsr |= 0x00020000; // turn on software-based RX activity LED
+ pAd->PortCfg.LedCntl.fRxActivity = FALSE;
+
+@@ -3315,17 +3423,17 @@
+ // pAd->PortCfg.CurrentRxAntenna
+ // 0xff: diversity, 0:antenna A, 1:antenna B
+ VOID AsicSetRxAnt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+-
++
+ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ pAd->PortCfg.RxAnt.AvgRssi[0] = (-95 + 120) << 3; // reset Ant-A's RSSI history
+ pAd->PortCfg.RxAnt.AvgRssi[1] = (-95 + 120) << 3; // reset Ant-B's RSSI history
+
+ pAd->PortCfg.RxAnt.PrimaryInUsed = TRUE;
+-
++
+ if (pAd->PortCfg.CurrentRxAntenna == 0xff) // Diversity
+ {
+ pAd->PortCfg.RxAnt.PrimaryRxAnt = 1; // assume ant-B
+@@ -3344,7 +3452,7 @@
+
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - set RxAnt=%d, primary=%d, second=%d\n",
+ pAd->PortCfg.CurrentRxAntenna, pAd->PortCfg.RxAnt.PrimaryRxAnt, pAd->PortCfg.RxAnt.SecondaryRxAnt);
+-
++
+ // use primary antenna
+ RTMP_IO_READ32(pAd, BBPCSR1, &Bbpcsr1);
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+@@ -3352,34 +3460,34 @@
+ if (pAd->PortCfg.RxAnt.PrimaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+ {
+ TxValue = (TxValue & 0xFC) | 0x02;
+- RxValue = 0x1e;
++ RxValue = 0x1e;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00020002;
+ }
+ RTMP_IO_WRITE32(pAd, BBPCSR1, Bbpcsr1);
+ //RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, BBP_Tx_Configure, TxValue);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, BBP_Rx_Configure, RxValue);
+-
++
+ }
+
+ // switch to secondary RxAnt for a while to collect it's average RSSI
+-// also set a timeout routine to DO the actual evaluation. If evaluation
++// also set a timeout routine to DO the actual evaluation. If evaluation
+ // result shows a much better RSSI using secondary RxAnt, then a official
+ // RX antenna switch is performed.
+ VOID AsicEvaluateSecondaryRxAnt(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+
+ if (pAd->PortCfg.CurrentRxAntenna != 0xff)
+ return;
+-
++
+ pAd->PortCfg.RxAnt.PrimaryInUsed = FALSE;
+ pAd->PortCfg.RxAnt.FirstPktArrivedWhenEvaluate = FALSE;
+ pAd->PortCfg.RxAnt.RcvPktNumWhenEvaluate = 0;
+@@ -3387,16 +3495,16 @@
+ // pAd->PortCfg.RxAnt.AvgRssi[pAd->PortCfg.RxAnt.SecondaryRxAnt] = 0;
+
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - evaluate Ant #%d\n", pAd->PortCfg.RxAnt.SecondaryRxAnt);
+-
++
+ // temporarily switch to secondary antenna
+ RxValue = pAd->PortCfg.BbpWriteLatch[BBP_Rx_Configure];
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+ RTMP_IO_READ32(pAd, BBPCSR1, &Bbpcsr1);
+-
++
+ if (pAd->PortCfg.RxAnt.SecondaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+@@ -3411,7 +3519,7 @@
+
+ // a one-shot timer to end the evalution
+ if (pAd->MediaState == NdisMediaStateConnected)
+- RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 150);
++ RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 150);
+ else
+ RTMPSetTimer(pAd, &pAd->PortCfg.RxAnt.RxAntDiversityTimer, 300);
+ }
+@@ -3419,17 +3527,17 @@
+ // this timeout routine collect AvgRssi[SecondaryRxAnt] and decide if
+ // SecondaryRxAnt is much better than PrimaryRxAnt
+ VOID AsicRxAntEvalTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - AsicRxAntEvalTimeout, \n");
+ // Do nothing if the driver is starting halt state.
+ // This might happen when timer already been fired before cancel timer with mlmehalt
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
+ return;
+-
++
+ if (pAd->PortCfg.RxAnt.PrimaryInUsed == TRUE)
+
+ return;
+@@ -3445,7 +3553,7 @@
+ pAd->PortCfg.RxAnt.PrimaryRxAnt = pAd->PortCfg.RxAnt.SecondaryRxAnt;
+ pAd->PortCfg.RxAnt.SecondaryRxAnt = temp;
+ pAd->PortCfg.LastAvgRssi = (pAd->PortCfg.RxAnt.AvgRssi[pAd->PortCfg.RxAnt.SecondaryRxAnt] >> 3) - pAd->PortCfg.RssiToDbm;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"AntDiv - Switch to Ant #%d, RSSI[0,1]=<%d, %d>\n",
+ pAd->PortCfg.RxAnt.PrimaryRxAnt, pAd->PortCfg.RxAnt.AvgRssi[0], pAd->PortCfg.RxAnt.AvgRssi[1]);
+ }
+@@ -3453,7 +3561,7 @@
+ {
+ UCHAR RxValue, TxValue;
+ ULONG Bbpcsr1;
+-
++
+ // end of evaluation, swicth back to primary antenna
+ RxValue = pAd->PortCfg.BbpWriteLatch[BBP_Rx_Configure];
+ TxValue = pAd->PortCfg.BbpWriteLatch[BBP_Tx_Configure];
+@@ -3461,7 +3569,7 @@
+ if (pAd->PortCfg.RxAnt.PrimaryRxAnt == 0) // ant-A
+ {
+ TxValue = (TxValue & 0xFC) | 0x00;
+- RxValue = 0x1c;
++ RxValue = 0x1c;
+ Bbpcsr1 = (Bbpcsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else // ant-B
+@@ -3491,7 +3599,7 @@
+ */
+ VOID AsicSetSlotTime(
+ IN PRTMP_ADAPTER pAd,
+- IN BOOLEAN UseShortSlotTime)
++ IN BOOLEAN UseShortSlotTime)
+ {
+ CSR11_STRUC Csr11;
+ CSR18_STRUC Csr18;
+@@ -3499,7 +3607,7 @@
+ UCHAR PhyMode;
+
+ pAd->PortCfg.ShortSlotInUsed = UseShortSlotTime;
+-
++
+ PhyMode = pAd->PortCfg.PhyMode;
+ if (PhyMode == PHY_11ABG_MIXED)
+ {
+@@ -3527,7 +3635,7 @@
+ else
+ Csr19.field.EIFS = 60; // roughly = SIFS + ACK @6Mbps
+ RTMP_IO_WRITE32(pAd, CSR19, Csr19.word);
+-
++
+ #if 1
+ // force using short SLOT time for FAE to demo performance only
+ if (pAd->PortCfg.EnableTxBurst == 1)
+@@ -3543,7 +3651,7 @@
+ ==========================================================================
+ Description:
+ This routine is used for 2560a only where 2560a still use non-accurate
+- PCI-clock as TSF 1-usec source. we have to dynamically change tick-per-usec
++ PCI-clock as TSF 1-usec source. we have to dynamically change tick-per-usec
+ to avoid ADHOC synchronization issue with SYMBOL 11b card
+ ==========================================================================
+ */
+@@ -3575,7 +3683,7 @@
+ /*
+ ==========================================================================
+ Description:
+- danamic tune BBP R17 to find a balance between sensibility and
++ danamic tune BBP R17 to find a balance between sensibility and
+ noise isolation
+ ==========================================================================
+ */
+@@ -3586,13 +3694,13 @@
+ UCHAR R17;
+ ULONG FalseCcaUpperThreshold = pAd->PortCfg.BbpTuning.FalseCcaUpperThreshold << 7;
+ int dbm = pAd->PortCfg.AvgRssi - pAd->PortCfg.RssiToDbm;
+-
++
+ if ((! pAd->PortCfg.BbpTuningEnable) || (pAd->PortCfg.BbpTuning.VgcDelta==0))
+ return;
+-
++
+ R17 = pAd->PortCfg.BbpWriteLatch[17];
+
+- if ((pAd->PortCfg.Rt2560Version >= RT2560_VER_D) &&
++ if ((pAd->PortCfg.Rt2560Version >= RT2560_VER_D) &&
+ (pAd->MediaState == NdisMediaStateConnected))
+ {
+ // Rule 0.
+@@ -3609,7 +3717,7 @@
+ return;
+ }
+ // Rule 1. "special big-R17 for short-distance" when not SCANNING
+- else if ((dbm >= RSSI_FOR_LOW_SENSIBILITY) &&
++ else if ((dbm >= RSSI_FOR_LOW_SENSIBILITY) &&
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ if (R17 != BBP_R17_LOW_SENSIBILITY)
+@@ -3621,7 +3729,7 @@
+ return;
+ }
+ // Rule 2. "special mid-R17 for mid-distance" when not SCANNING
+- else if ((dbm >= RSSI_FOR_MID_SENSIBILITY) &&
++ else if ((dbm >= RSSI_FOR_MID_SENSIBILITY) &&
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+ {
+ if (R17 != BBP_R17_MID_SENSIBILITY)
+@@ -3632,7 +3740,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "RSSI = %d dbm, fixed R17 at 0x%x\n", dbm, R17);
+ return;
+ }
+- // Rule 3. leave "short or mid-distance" condition, restore R17 to the
++ // Rule 3. leave "short or mid-distance" condition, restore R17 to the
+ // dynamic tuning range <E2PROM-6, BBP_R17_DYNAMIC_UP_BOUND>
+ else if (R17 >= BBP_R17_MID_SENSIBILITY)
+ {
+@@ -3642,13 +3750,13 @@
+ return;
+ }
+ }
+-
++
+ // Rule 3. otherwise, R17 is currenly in dyanmic tuning range: <E2PROM-6, BBP_R17_DYNAMIC_UP_BOUND>.
+ // Keep dynamic tuning based on False CCA conter
+-
++
+ RTMP_IO_READ32(pAd, CNT3, &Value);
+ pAd->PrivateInfo.CCAErrCnt = (Value & 0x0000ffff);
+- DBGPRINT(RT_DEBUG_INFO, "CCA flase alarm = %d, Avg RSSI= %d dbm\n",
++ DBGPRINT(RT_DEBUG_INFO, "CCA flase alarm = %d, Avg RSSI= %d dbm\n",
+ pAd->PrivateInfo.CCAErrCnt, dbm);
+
+ if ((pAd->PrivateInfo.CCAErrCnt > FalseCcaUpperThreshold) &&
+@@ -3697,7 +3805,7 @@
+
+ Return Value:
+ None
+-
++
+ Note:
+
+ ========================================================================
+@@ -3714,7 +3822,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "==> MlmeFreeMemory\n");
+ spin_lock(&pAd->MemLock);
+ if (pAd->Mlme.MemHandler.MemRunning)
+- {
++ {
+ //Mlme memory handler is busy.
+ //Move it to the Pending array for later free
+ pAd->Mlme.MemHandler.MemFreePending[pAd->Mlme.MemHandler.PendingCount++] = (PULONG) AllocVa;
+@@ -3738,7 +3846,7 @@
+ while (pMlmeMemoryStruct)
+ {
+ if (pMlmeMemoryStruct->AllocVa == (PVOID) pAd->Mlme.MemHandler.MemFreePending[Index])
+- {
++ {
+ //Found virtual address in the in-used link list
+ //Remove it from the memory in-used link list, and move it to the unused link list
+ if (pPrevious == NULL)
+@@ -3865,7 +3973,7 @@
+ pAd->Mlme.MemHandler.MemRunning = FALSE;
+ spin_unlock(&pAd->MemLock);
+
+- DBGPRINT(RT_DEBUG_INFO, "<== MlmeFreeMemory [IN:%d][UN:%d][Pending:%d]\n",
++ DBGPRINT(RT_DEBUG_INFO, "<== MlmeFreeMemory [IN:%d][UN:%d][Pending:%d]\n",
+ pAd->Mlme.MemHandler.InUseCount, pAd->Mlme.MemHandler.UnUseCount, pAd->Mlme.MemHandler.PendingCount);
+ }
+
+@@ -3883,7 +3991,7 @@
+ NDIS_STATUS_SUCCESS
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_RESOURCES
+-
++
+ Note:
+
+ ========================================================================
+@@ -3911,7 +4019,7 @@
+ }
+
+ if (pAd->Mlme.MemHandler.pUnUseHead == NULL)
+- { //There are no available memory for caller use
++ { //There are no available memory for caller use
+ Status = NDIS_STATUS_RESOURCES;
+ pAd->Mlme.MemHandler.MemRunning = FALSE;
+ spin_unlock(&pAd->MemLock);
+@@ -3963,7 +4071,7 @@
+ Return Value:
+ NDIS_STATUS_SUCCESS
+ NDIS_STATUS_RESOURCES
+-
++
+ Note:
+
+ ========================================================================
+@@ -3994,7 +4102,7 @@
+ //
+ if (Number > MAX_MLME_HANDLER_MEMORY)
+ Number = MAX_MLME_HANDLER_MEMORY;
+-
++
+ for (i = 0; i < Number; i++)
+ {
+ //Allocate a nonpaged memory for link list use.
+diff -Nur rt2500-1.1.0-b4/Module/mlme.h rt2500-cvs-2007061011/Module/mlme.h
+--- rt2500-1.1.0-b4/Module/mlme.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/mlme.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,43 +1,43 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: mlme.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * John 28th Aug 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * John 28th Aug 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __MLME_H__
+ #define __MLME_H__
+
+ #include "oid.h"
+
+-// maximum supported capability information -
++// maximum supported capability information -
+ // ESS, IBSS, Privacy, Short Preamble, Short Slot
+ #define SUPPORTED_CAPABILITY_INFO 0x0433
+
+@@ -61,7 +61,7 @@
+
+ #define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm
+ #define RSSI_FOR_MID_TX_POWER 55 // -55 db is considered mid-distance
+-#define RSSI_FOR_LOW_TX_POWER 45 // -45 db is considered very short distance and
++#define RSSI_FOR_LOW_TX_POWER 45 // -45 db is considered very short distance and
+ // eligible to use a lower TX power
+ #define RSSI_FOR_LOWEST_TX_POWER 30
+ #define MID_TX_POWER_DELTA 0 // -3 db from full TX power upon mid-distance to AP
+@@ -212,7 +212,7 @@
+ #define TX_FER_TOO_HIGH(TxFER) ((TxFER) > 15) // consider rate down if FER>15%
+ #define TX_FER_VERY_LOW(TxFER) ((TxFER) < 7) // consider rate up if FER<7%
+ #define FAIR_FER 10 // any value between TOO_HIGH and VERY_LOW
+-#define DRS_TX_QUALITY_WORST_BOUND 3
++#define DRS_TX_QUALITY_WORST_BOUND 3
+ #define DRS_PENALTY 8
+
+ // Ralink timer control block
+@@ -329,13 +329,14 @@
+ USHORT CfpDurRemaining;
+ UCHAR SsidLen;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+-
++
+ ULONG LastBeaconRxTime; // OS's timestamp
+
+ // New for microsoft WPA support
++ USHORT CipherCap; // Pair (0:7), Group (8:15) cipher cap
+ NDIS_802_11_FIXED_IEs FixIEs;
+ NDIS_802_11_WEP_STATUS WepStatus;
+- UCHAR VarIELen; // Length of next VIE include EID & Length
++ USHORT VarIELen; // Length of all saved IEs.
+ UCHAR VarIEs[MAX_VIE_LEN];
+ } BSS_ENTRY, *PBSS_ENTRY;
+
+@@ -384,7 +385,7 @@
+ ULONG BssIdx;
+ ULONG RoamIdx;
+ BOOLEAN CurrReqIsFromNdis; // TRUE - then we should call NdisMSetInformationComplete()
+- // FALSE - req is from driver itself.
++ // FALSE - req is from driver itself.
+ // no NdisMSetInformationComplete() is required
+ } CNTL_AUX, *PCNTL_AUX;
+
+@@ -394,7 +395,7 @@
+ USHORT CapabilityInfo;
+ USHORT ListenIntv;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+- UCHAR SsidLen;
++ UCHAR SsidLen;
+ RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer;
+ } ASSOC_AUX, *PASSOC_AUX;
+
+@@ -482,10 +483,10 @@
+ typedef struct PACKED _BEACON_EID_STRUCT {
+ UCHAR Eid;
+ UCHAR Len;
+- CHAR Octet[1];
++ UCHAR Octet[1];
+ } BEACON_EID_STRUCT,*PBEACON_EID_STRUCT;
+
+-// New for WPA cipher suite
++// New for WPA cipher suite
+ typedef struct PACKED _RSN_EID_STRUCT {
+ UCHAR Eid;
+ UCHAR Length;
+@@ -497,6 +498,98 @@
+ UCHAR Oui[4];
+ } Unicast[1];
+ } RSN_EID_STRUCT, *PRSN_EID_STRUCT;
++#define MIN_WPA_KEYDATA_LEN (4 + sizeof(ie_version_t) + sizeof(suite_sel_t) + \
++ 2*sizeof(suite_list_t))
++
++
++/* Country Information Element (802.11d pp. 4, 5) */
++
++typedef struct country_subelement {
++ unsigned char first_chan,
++ num_chans;
++ signed char max_tx_pwr; // in dBm
++} PACKED country_subelement_t, *country_subelement_p;
++
++typedef struct country_string { // (all alpha)
++ UCHAR co[2]; // ISO/IEC 3166-1 country code
++ UCHAR env; // ' '/'O'/'I' - 802.11d pp. 19
++} PACKED country_string_t, *country_string_p;
++
++typedef struct country_ie {
++ UCHAR eid;
++ UCHAR length;
++ country_string_t cs;
++ country_subelement_t chans[1];
++ UCHAR pad[0]; // may or may not be present
++} PACKED country_ie_t, *country_ie_p;
++
++
++/* WPA2 (cf. 802.11i pp. 27 ff.) */
++
++// access
++#define wtohs(x) (le16_to_cpu(x))// sic (802.11 is "native" little-endian)
++#define htows(x) (cpu_to_le16(x))// i.e. opposite of internet byte order
++
++// primitives
++typedef USHORT ie_version_t;
++typedef USHORT ie_count_t;
++typedef UCHAR ie_oui_t[3]; // Organizationally Unique Identifier
++typedef UCHAR pmkid_t[16], *pmkid_p;// 802.11i pp. 76
++
++typedef struct rsncap {
++#ifdef BIG_ENDIAN
++ USHORT Reserved:10;
++ USHORT GTKSAReplayCounter:2; // 0/2/4/16 replay counters
++ USHORT PTKSAReplayCounter:2;
++ USHORT NoPairwise:1; // WEP key 0 and pairwise key n/a
++ USHORT PreAuth:1; // AP STA supports pre-authentication
++#else
++ USHORT PreAuth:1; // AP STA supports pre-authentication
++ USHORT NoPairwise:1; // WEP key 0 and pairwise key n/a
++ USHORT PTKSAReplayCounter:2;
++ USHORT GTKSAReplayCounter:2; // 0/2/4/16 replay counters
++ USHORT Reserved:10;
++#endif
++} PACKED rsncap_t, *rsncap_p;
++
++typedef struct suite_sel {
++ ie_oui_t oui;
++ UCHAR type;
++} PACKED suite_sel_t, *suite_sel_p;
++
++/* Cipher suite selectors - 802.11i pp. 28, 29 */
++#define CIPHER_TYPE_GRP 0
++#define CIPHER_TYPE_WEP40 1
++#define CIPHER_TYPE_TKIP 2
++#define CIPHER_TYPE_RES 3
++#define CIPHER_TYPE_CCMP 4
++#define CIPHER_TYPE_WEP104 5
++#define NUM_CIPHER_TYPES 6
++
++/* Authentication and Key Management suite selectors - 802.11i pp. 30 */
++#define AKM_TYPE_802_1X 1
++#define AKM_TYPE_PSK 2
++
++typedef struct suite_list {
++ ie_count_t count;
++ suite_sel_t suite[1];
++} PACKED suite_list_t, *suite_list_p;
++
++typedef struct pmkid_list {
++ ie_count_t count;
++ pmkid_t list[1];
++} PACKED pmkid_list_t, *pmkid_list_p;
++
++typedef struct rsn_ie {
++ UCHAR eid;
++ UCHAR length;
++ ie_version_t version;
++
++ // Optional fields
++ suite_sel_t gcsuite; // Group Cipher Suite
++} PACKED rsn_ie_t, *rsn_ie_p;
++#define MIN_RSN_KEYDATA_LEN (sizeof(ie_version_t) + sizeof(suite_sel_t) + \
++ 2*sizeof(suite_list_t))
+
+ extern UCHAR RateIdToMbps[];
+ extern USHORT RateIdTo500Kbps[];
+diff -Nur rt2500-1.1.0-b4/Module/oid.h rt2500-cvs-2007061011/Module/oid.h
+--- rt2500-1.1.0-b4/Module/oid.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/oid.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: oid.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * RobinC 10th Dec 04 RFMON Support
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * RobinC 10th Dec 04 RFMON Support
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #ifndef _OID_H_
+ #define _OID_H_
+@@ -56,7 +57,8 @@
+ #define RTPRIV_IOCTL_BBP SIOCIWFIRSTPRIV + 0x03
+ #define RTPRIV_IOCTL_MAC SIOCIWFIRSTPRIV + 0x05
+ #define RTPRIV_IOCTL_E2P SIOCIWFIRSTPRIV + 0x07
+-#define RTPRIV_IOCTL_RFMONTX SIOCIWFIRSTPRIV + 0x0D
++#define RTPRIV_IOCTL_SET_RFMONTX SIOCIWFIRSTPRIV + 0x0C
++#define RTPRIV_IOCTL_GET_RFMONTX SIOCIWFIRSTPRIV + 0x0D
+
+ #define OID_GET_SET_TOGGLE 0x8000
+
+@@ -168,8 +170,8 @@
+ // Added new types for OFDM 5G and 2.4G
+ typedef enum _NDIS_802_11_NETWORK_TYPE
+ {
+- Ndis802_11FH,
+- Ndis802_11DS,
++ Ndis802_11FH,
++ Ndis802_11DS,
+ Ndis802_11OFDM5,
+ Ndis802_11OFDM24,
+ Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound
+@@ -199,7 +201,7 @@
+ typedef struct _NDIS_802_11_CONFIGURATION_FH
+ {
+ ULONG Length; // Length of structure
+- ULONG HopPattern; // As defined by 802.11, MSB set
++ ULONG HopPattern; // As defined by 802.11, MSB set
+ ULONG HopSet; // to one if non-802.11
+ ULONG DwellTime; // units are Kusec
+ } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
+@@ -237,7 +239,7 @@
+ typedef struct _NDIS_802_11_KEY
+ {
+ ULONG Length; // Length of this structure
+- ULONG KeyIndex;
++ ULONG KeyIndex;
+ ULONG KeyLength; // length of key in bytes
+ NDIS_802_11_MAC_ADDRESS BSSID;
+ NDIS_802_11_KEY_RSC KeyRSC;
+@@ -247,8 +249,8 @@
+ typedef struct _NDIS_802_11_REMOVE_KEY
+ {
+ ULONG Length; // Length of this structure
+- ULONG KeyIndex;
+- NDIS_802_11_MAC_ADDRESS BSSID;
++ ULONG KeyIndex;
++ NDIS_802_11_MAC_ADDRESS BSSID;
+ } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
+
+ typedef struct PACKED _NDIS_802_11_WEP
+@@ -285,7 +287,7 @@
+ typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates
+ typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates
+
+-typedef struct PACKED _NDIS_802_11_SSID
++typedef struct PACKED _NDIS_802_11_SSID
+ {
+ ULONG SsidLength; // length of SSID field below, in bytes;
+ // this can be zero.
+@@ -338,14 +340,14 @@
+ NDIS_WLAN_BSSID_EX Bssid[1];
+ } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
+
+-typedef struct _NDIS_802_11_FIXED_IEs
++typedef struct _NDIS_802_11_FIXED_IEs
+ {
+ UCHAR Timestamp[8];
+ USHORT BeaconInterval;
+ USHORT Capabilities;
+ } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
+
+-typedef struct _NDIS_802_11_VARIABLE_IEs
++typedef struct _NDIS_802_11_VARIABLE_IEs
+ {
+ UCHAR ElementID;
+ UCHAR Length; // Number of bytes in data field
+@@ -428,7 +430,7 @@
+ NDIS_802_11_STATUS_INDICATION Status;
+ NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
+ } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
+-
++
+ typedef struct _NDIS_802_11_TEST
+ {
+ ULONG Length;
+diff -Nur rt2500-1.1.0-b4/Module/rt2560.h rt2500-cvs-2007061011/Module/rt2560.h
+--- rt2500-1.1.0-b4/Module/rt2560.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rt2560.h 2007-03-21 05:25:34.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt2560.h
+- *
++ *
+ * Abstract: RT2560 ASIC related definition & structures
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ ***************************************************************************/
+
+ #ifndef __RT2560_H__
+ #define __RT2560_H__
+@@ -370,10 +370,10 @@
+
+ // Word 5
+ ULONG Eiv;
+-
++
+ // Word 6-9
+ UCHAR Key[16];
+-
++
+ // Word 10 - 11 Reserved, not necessary to put into the structure.
+ #ifdef BIG_ENDIAN
+ ULONG Rsv2:31;
+@@ -676,7 +676,7 @@
+ #endif
+ } field;
+ ULONG word;
+-} CSR11_STRUC, *PCSR11_STRUC;
++} CSR11_STRUC, *PCSR11_STRUC;
+
+ //
+ // CSR12: Synchronization configuration register 0
+@@ -869,7 +869,7 @@
+ // =================================================================================
+
+ //
+-// TXCSR0 <0x0060> : TX Control Register
++// TXCSR0 <0x0060> : TX Control Register
+ //
+ typedef union _TXCSR0_STRUC {
+ struct {
+@@ -880,13 +880,13 @@
+ ULONG KickAtim:1; // Kick ATIM ring
+ ULONG KickTx:1; // Kick Tx ring
+ #else
+- ULONG KickTx:1; // Kick Tx ring
++ ULONG KickTx:1; // Kick Tx ring
+ ULONG KickAtim:1; // Kick ATIM ring
+ ULONG KickPrio:1; // Kick priority ring
+ ULONG Abort:1; // Abort all transmit related ring operation
+ ULONG Rsvd:28;
+ #endif
+- } field;
++ } field;
+ ULONG word;
+ } TXCSR0_STRUC, *PTXCSR0_STRUC;
+
+@@ -1184,7 +1184,7 @@
+ ULONG BbpDesireState:2;
+ ULONG SetState:1;
+ #else
+- ULONG SetState:1;
++ ULONG SetState:1;
+ ULONG BbpDesireState:2;
+ ULONG RfDesireState:2;
+ ULONG BbpCurrState:2;
+@@ -1304,13 +1304,13 @@
+ #ifdef BIG_ENDIAN
+ ULONG Rsvd:15;
+ ULONG WriteControl:1; // 1: Write BBP, 0: Read BBP
+- ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
++ ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
+ ULONG RegNum:7; // Selected BBP register
+ ULONG Value:8; // Register value to program into BBP
+ #else
+ ULONG Value:8; // Register value to program into BBP
+ ULONG RegNum:7; // Selected BBP register
+- ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
++ ULONG Busy:1; // 1: ASIC is busy execute BBP programming.
+ ULONG WriteControl:1; // 1: Write BBP, 0: Read BBP
+ ULONG Rsvd:15;
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rt2x00debug.h rt2500-cvs-2007061011/Module/rt2x00debug.h
+--- rt2500-1.1.0-b4/Module/rt2x00debug.h 1970-01-01 01:00:00.000000000 +0100
++++ rt2500-cvs-2007061011/Module/rt2x00debug.h 2007-02-20 20:02:18.000000000 +0100
+@@ -0,0 +1,76 @@
++/*
++ Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
++ <http://rt2x00.serialmonkey.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.
++ */
++
++/*
++ Module: rt2x00debug
++ Abstract: Data structures for the rt2x00debug module.
++ Supported chipsets: RT2460, RT2560, RT2570,
++ rt2561, rt2561s, rt2661 & rt2573.
++ */
++
++typedef void (debug_access_t)(void *dev, const unsigned long word, void *data);
++
++struct rt2x00debug_reg {
++ debug_access_t *read;
++ debug_access_t *write;
++
++ unsigned int word_size;
++ unsigned int length;
++};
++
++struct rt2x00debug {
++ /*
++ * Name of the interface.
++ */
++ char intf_name[16];
++
++ /*
++ * Reference to the modules structure.
++ */
++ struct module *owner;
++
++ /*
++ * Driver module information
++ */
++ char *mod_name;
++ char *mod_version;
++
++ /*
++ * Register access information.
++ */
++ struct rt2x00debug_reg reg_csr;
++ struct rt2x00debug_reg reg_eeprom;
++ struct rt2x00debug_reg reg_bbp;
++
++ /*
++ * Pointer to driver structure where
++ * this debugfs entry belongs to.
++ */
++ void *dev;
++
++ /*
++ * Pointer to rt2x00debug private data,
++ * individual driver should not touch this.
++ */
++ void *priv;
++};
++
++extern int rt2x00debug_register(struct rt2x00debug *debug);
++extern void rt2x00debug_deregister(struct rt2x00debug *debug);
+diff -Nur rt2500-1.1.0-b4/Module/rt_config.h rt2500-cvs-2007061011/Module/rt_config.h
+--- rt2500-1.1.0-b4/Module/rt_config.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rt_config.h 2007-06-10 18:35:24.000000000 +0200
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt_config.h
+- *
++ *
+ * Abstract: Central header file for all includes
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 21st Dec 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 21st Dec 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RT_CONFIG_H__
+ #define __RT_CONFIG_H__
+@@ -39,14 +39,14 @@
+ #define NIC_DEVICE_NAME "RT2500STA"
+
+ #define DRV_NAME "rt2500"
+-#define DRV_VERSION "1.1.0 BETA4"
+-#define DRV_RELDATE "2006/06/18"
++#define DRV_VERSION "1.1.0 CVS"
++#define DRV_RELDATE "2007061011"
+ #define DRV_VERSION_MAJOR 1
+-#define DRV_VERSION_MINOR 1
++#define DRV_VERSION_MINOR 1
+ #define DRV_VERSION_SUB 0
+-#define DRV_BUILD_YEAR 2006
+-#define DRV_BUILD_MONTH 06
+-#define DRV_BUILD_DAY 18
++#define DRV_BUILD_YEAR 2007
++#define DRV_BUILD_MONTH 05
++#define DRV_BUILD_DAY 13
+
+ /* Operational parameters that are set at compile time. */
+ #if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
+@@ -55,7 +55,6 @@
+ #error You must compile this driver with "-O".
+ #endif
+
+-#include <linux/config.h> //can delete
+ #include <linux/module.h>
+ #include <linux/version.h>
+ #include <linux/kernel.h>
+@@ -71,7 +70,6 @@
+ #include <linux/skbuff.h>
+ #include <linux/init.h> //can delete
+ #include <linux/delay.h> // can delete
+-#include <linux/ethtool.h>
+ #include <linux/wireless.h>
+ #include <linux/proc_fs.h>
+ #include <linux/delay.h>
+@@ -90,9 +88,9 @@
+
+ // The type definition has to be placed before including rt2460.h
+ #ifndef ULONG
+-#define CHAR char
++#define CHAR signed char
+ #define INT int
+-#define SHORT int
++#define SHORT short
+ #define UINT u32
+ #define ULONG u32
+ #define USHORT u16
+@@ -144,6 +142,7 @@
+ #include "rtmp_type.h"
+ #include "rtmp_def.h"
+ #include "rt2560.h"
++#include "rt2x00debug.h"
+ #include "rtmp.h"
+ #include "mlme.h"
+ #include "oid.h"
+@@ -156,7 +155,7 @@
+ RT2560A = 0,
+ };
+
+-#ifdef RTMP_EMBEDDED
++#if 1 //#ifdef RTMP_EMBEDDED
+ #undef GFP_KERNEL
+ #define GFP_KERNEL (GFP_DMA | GFP_ATOMIC)
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rtmp.h rt2500-cvs-2007061011/Module/rtmp.h
+--- rt2500-1.1.0-b4/Module/rtmp.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp.h 2007-06-08 20:09:53.000000000 +0200
+@@ -1,43 +1,44 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rt_config.h
+- *
++ *
+ * Abstract: Central header file for all includes
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 21st Dec 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 21st Dec 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * Flavio (rt2400) 8th Dec 04 Elegant irqreturn_t handling
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+- * MarkW (rt2400) 15th Dec 04 Spinlock fix
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW (rt2400) 15th Dec 04 Spinlock fix
+ * Ivo (rt2400) 15th Dec 04 Debug level switching
+ * GregorG 29th Mar 05 Big endian fixes
+- ***************************************************************************/
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #ifndef __RTMP_H__
+ #define __RTMP_H__
+@@ -62,6 +63,13 @@
+ #endif /*(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) */
+ #endif /* pci_name */
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22))
++#define pci_module_init pci_register_driver
++#endif
++
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
++#define skb_reset_mac_header(skb) (skb->mac.raw = skb->data)
++#endif
+
+ // Krellan: Limit range of user TxPower settings from -31 to +0 dBm.
+ // We could accept -31 to +31 dBm, relative to 0 dBm which is defined
+@@ -87,21 +95,40 @@
+ //
+ // MACRO for debugging information
+ //
+-extern int debug;
+ #ifdef RT2500_DBG
+-#define DBGPRINT(Level, fmt, args...) \
+- if(debug){printk(Level DRV_NAME ": " fmt, ## args);}
++extern VOID rt2500_setdbg(long);
++extern INT rt2500_dbgprint(int, const char *, ...);
++#define DBGPRINT(mask, fmt, args...) \
++ (rt2500_dbgprint(mask, KERN_DEBUG DRV_NAME ": " fmt, ## args))
++
++/* Do not enclose in parentheses ()! */
++#define DBGENTER DBGPRINT(RT_DEBUG_TRACE, "==> %s\n", __FUNCTION__)
++#define DBGRETURN DBGPRINT(RT_DEBUG_TRACE, "<== %s\n", __FUNCTION__)
++
++#define DBGHEXSTR(level, prefix, src, len) \
++ { \
++ char buf[128]; /* allows 64 bytes/512 bits */ \
++ int i, j; \
++ unsigned char *p; \
++ \
++ if (len > 0) { \
++ j = len < sizeof(buf)/2? len: sizeof(buf)/2 - 1; \
++ \
++ for (p = (unsigned char *)(src), i = 0; i < j; i++) { \
++ sprintf(&buf[i*2], "%02x", *p++); \
++ } \
++ DBGPRINT(level, prefix "%s\n", buf); \
++ } \
++ }
+ #else
++#define DBGENTER
++#define DBGRETURN
+ #define DBGPRINT(Level, fmt, args...) \
+ while(0){}
++#define DBGHEXSTR(level, prefix, src, len) \
++ while(0){}
+ #endif
+
+-//
+-// spin_lock enhanced for Nested spin lock
+-//
+-
+-extern unsigned long IrqFlags;
+-
+ // Assert MACRO to make sure program running
+ //
+ #undef ASSERT
+@@ -145,12 +172,12 @@
+ // ULONG Register_Offset,
+ // ULONG Value)
+ //
+-#ifdef RTMP_EMBEDDED
++#if 0 //#ifdef RTMP_EMBEDDED
+ #define RTMP_IO_READ32(_A, _R, _pV) (*_pV = PCIMemRead32(__mem_pci(_A->CSRBaseAddress+_R)))
+ #define RTMP_IO_WRITE32(_A, _R, _V) (PCIMemWrite32(__mem_pci(_A->CSRBaseAddress+_R),_V))
+ #else
+-#define RTMP_IO_READ32(_A, _R, _pV) (*_pV = readl( (void*) (_A->CSRBaseAddress + _R) ) )
+-#define RTMP_IO_WRITE32(_A, _R, _V) (writel(_V, (void*) (_A->CSRBaseAddress + _R) ) )
++#define RTMP_IO_READ32(_A, _R, _pV) (*_pV = readl((void*)(_A->CSRBaseAddress + _R) ) )
++#define RTMP_IO_WRITE32(_A, _R, _V) (writel(_V, (void*)(_A->CSRBaseAddress + _R) ) )
+ #endif
+
+ //
+@@ -363,7 +390,7 @@
+ ULONG RxRingErrCount;
+ ULONG EncryptCount;
+ ULONG KickTxCount;
+- ULONG TxRingErrCount;
++ ULONG TxRingErrCount;
+ LARGE_INTEGER RealFcsErrCount;
+ } COUNTER_RALINK, *PCOUNTER_RALINK;
+
+@@ -400,10 +427,10 @@
+ typedef struct _WPA_KEY {
+ UCHAR KeyLen; // Key length for each key, 0: entry is invalid
+ UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
+- UCHAR RxMic[8];
+- UCHAR TxMic[8];
++ UCHAR RxMic[8]; // Message Integrity Code
++ UCHAR TxMic[8]; // MIC
+ NDIS_802_11_MAC_ADDRESS BssId; // For pairwise key only
+- UCHAR TxTsc[6]; // 48bit TSC value
++ UCHAR TxTsc[6]; // 48bit TKIP Sequence Counter value
+ UCHAR RxTsc[6]; // 48bit TSC value
+ UCHAR Type; // Indicate Pairwise / Group
+ } WPA_KEY, *PWPA_KEY;
+@@ -413,7 +440,7 @@
+ {
+ union
+ {
+- struct
++ struct
+ {
+ UCHAR rc0;
+ UCHAR rc1;
+@@ -436,38 +463,36 @@
+ UCHAR Byte;
+ } CONTROL;
+ } field;
+-
++
+ ULONG word;
+ } IV16;
+-
++
+ ULONG IV32;
+ } TKIP_IV, *PTKIP_IV;
+ #endif
+
+-typedef struct _IV_CONTROL_
++typedef struct PACKED _IV_CONTROL_
+ {
+- union
+- {
+- struct
+- {
++ union PACKED {
++ struct PACKED {
+ #ifdef BIG_ENDIAN
+- ULONG KeyID:2;
+- ULONG ExtIV:1;
+- ULONG Rsvd:5;
+- ULONG rc2:8;
+- ULONG rc1:8;
+- ULONG rc0:8;
++ ULONG KeyID:2;
++ ULONG ExtIV:1;
++ ULONG Rsvd:5;
++ ULONG rc2:8;
++ ULONG rc1:8;
++ ULONG rc0:8;
+ #else
+- ULONG rc0:8;
+- ULONG rc1:8;
+- ULONG rc2:8;
+- ULONG Rsvd:5;
+- ULONG ExtIV:1;
+- ULONG KeyID:2;
++ ULONG rc0:8;
++ ULONG rc1:8;
++ ULONG rc2:8;
++ ULONG Rsvd:5;
++ ULONG ExtIV:1;
++ ULONG KeyID:2;
+ #endif
+- }field;
+- ULONG word;
+- }IV16;
++ }field;
++ ULONG word;
++ }IV16;
+
+ ULONG IV32;
+ } TKIP_IV, *PTKIP_IV;
+@@ -499,7 +524,7 @@
+
+ typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
+ BOOLEAN PrimaryInUsed;
+- BOOLEAN FirstPktArrivedWhenEvaluate;
++ BOOLEAN FirstPktArrivedWhenEvaluate;
+ UCHAR PrimaryRxAnt; // 0:Ant-A, 1:Ant-B
+ UCHAR SecondaryRxAnt; // 0:Ant-A, 1:Ant-B
+ UCHAR CurrentRxAnt; // 0:Ant-A, 1:Ant-B
+@@ -535,7 +560,7 @@
+
+ NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
+ NDIS_802_11_WEP_STATUS WepStatus;
+-
++
+ // MIB:ieee802dot11.dot11smt(1).dot11WEPDefaultKeysTable(3)
+ WEP_KEY SharedKey[SHARE_KEY_NO]; // Keep for backward compatiable
+ WPA_KEY PairwiseKey[PAIRWISE_KEY_NO];
+@@ -566,8 +591,8 @@
+ // MIB:ieee802dot11.dot11mac(2).dot11OperationTable(1)
+ USHORT RtsThreshold; // in units of BYTE
+ USHORT FragmentThreshold;
+- BOOLEAN bFragmentZeroDisable; // Microsoft use 0 as disable
+-
++ BOOLEAN bFragmentZeroDisable; // Microsoft use 0 as disable
++
+ // MIB:ieee802dot11.dot11phy(4).dot11PhyAntennaTable(2)
+ UCHAR CurrentTxAntenna;
+ UCHAR CurrentRxAntenna;
+@@ -582,19 +607,19 @@
+ UCHAR TxPowerDriver; // Driver's last TxPower setting written to hardware, in raw units
+ int TxPowerUser; // User's desired fixed TxPower setting, in dBm
+ BOOLEAN TxPowerAuto; // 1 - enable auto TxPower; 0 - fixed
+-
++
+ // MIB:ieee802dot11.dot11phy(4).dot11PhyDSSSTable(5)
+ UCHAR Channel; // current (I)BSS channel used in the station
+ UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
+-
++
+ // MIB:ieee802dot11.dot11phy(4).dot11AntennasListTable(8)
+ BOOLEAN AntennaSupportTx;
+ BOOLEAN AntennaSupportRx;
+ BOOLEAN AntennaSupportDiversityRx;
+
+ // Use user changed MAC
+- BOOLEAN bLocalAdminMAC;
+-
++ BOOLEAN bLocalAdminMAC;
++
+ // MIB:ieee802dot11.dot11phy(4).dot11SupportedDataRatesTxTable(9)
+ // MIB:ieee802dot11.dot11phy(4).dot11SupportedDataRatesRxTable(10)
+ UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES]; // Supported rates
+@@ -661,7 +686,7 @@
+ UCHAR ChannelList[MAX_LEN_OF_CHANNELS]; // list all supported channels for site survey
+ UCHAR ChannelListNum; // number of channel in ChannelList[]
+ BOOLEAN bShowHiddenSSID;
+-
++
+ // configuration to be used when this STA starts a new ADHOC network
+ IBSS_CONFIG IbssConfig;
+
+@@ -679,7 +704,7 @@
+ UCHAR LedMode;
+ RALINK_TIMER_STRUCT RfTuningTimer;
+ STA_WITH_ETHER_BRIDGE StaWithEtherBridge;
+-
++
+ // New for WPA, windows want us to to keep association information and
+ // Fixed IEs from last association response
+ NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
+@@ -700,7 +725,7 @@
+ ULONG BGProtectionInUsed; // 0: not in-used, 1: in-used
+ ULONG ShortSlotInUsed; // 0: not in-used, 1: in-used
+ USHORT TxPreambleInUsed; // Rt802_11PreambleLong, Rt802_11PreambleShort
+-
++
+ // PCI clock adjustment round
+ UCHAR PciAdjustmentRound;
+
+@@ -718,8 +743,8 @@
+
+
+ ULONG SystemErrorBitmap; // b0: E2PROM version error
+-
+- // This soft Rx Antenna Diversity mechanism is used only when user set
++
++ // This soft Rx Antenna Diversity mechanism is used only when user set
+ // RX Antenna = DIVERSITY ON
+ SOFT_RX_ANT_DIVERSITY RxAnt;
+
+@@ -753,13 +778,13 @@
+ STATE_MACHINE_FUNC CntlFunc[CNTL_FUNC_SIZE], AssocFunc[ASSOC_FUNC_SIZE];
+ STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE], AuthRspFunc[AUTH_RSP_FUNC_SIZE];
+ STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE], WpaPskFunc[WPA_PSK_FUNC_SIZE];
+-
++
+ ASSOC_AUX AssocAux;
+ AUTH_AUX AuthAux;
+ AUTH_RSP_AUX AuthRspAux;
+ SYNC_AUX SyncAux;
+ CNTL_AUX CntlAux;
+-
++
+ COUNTER_802_11 PrevWlanCounters;
+ ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
+
+@@ -770,7 +795,7 @@
+ UINT ShiftReg;
+ PSPOLL_FRAME PsFr;
+ MACHDR NullFr;
+-
++
+ RALINK_TIMER_STRUCT PeriodicTimer;
+ ULONG PeriodicRound;
+ ULONG PrevTxCnt;
+@@ -849,7 +874,7 @@
+ typedef struct PACKED _TUPLE_CACHE {
+ BOOLEAN Valid;
+ MACADDR MAC;
+- USHORT Sequence;
++ USHORT Sequence;
+ USHORT Frag;
+ } TUPLE_CACHE, *PTUPLE_CACHE;
+
+@@ -872,7 +897,7 @@
+ typedef struct PACKED _TKIP_KEY_INFO {
+ UINT nBytesInM; // # bytes in M for MICKEY
+ ULONG IV16;
+- ULONG IV32;
++ ULONG IV32;
+ ULONG K0; // for MICKEY Low
+ ULONG K1; // for MICKEY Hig
+ ULONG L; // Current state for MICKEY
+@@ -937,12 +962,14 @@
+ //
+ typedef struct _RTMP_ADAPTER
+ {
+- char nickn[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
++ char nickn[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
+ int chip_id;
+
+ unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use
+ // NdisReadRegisterXx or NdisWriteRegisterXx
+
++ struct rt2x00debug debug;
++
+ // configuration
+ UCHAR PermanentAddress[ETH_ALEN]; // Factory default MAC address
+ UCHAR CurrentAddress[ETH_ALEN]; // User changed MAC address
+@@ -958,7 +985,7 @@
+ struct ring_desc BeaconRing; // Beacon Ring, only one
+
+ MGMT_STRUC MgmtRing[MGMT_RING_SIZE]; // management ring size
+-
++
+ ULONG CurRxIndex; // Next RxD read pointer
+ ULONG CurDecryptIndex; // Next RxD decrypt read pointer
+ ULONG CurTxIndex; // Next TxD write pointer
+@@ -985,17 +1012,17 @@
+ struct sk_buff_head TxSwQueue0; // Tx software priority queue 0 mapped to 0.1
+ struct sk_buff_head TxSwQueue1; // Tx software priority queue 1 mapped to 2.3
+ struct sk_buff_head TxSwQueue2; // Tx software priority queue 2 mapped to 4.5
+- struct sk_buff_head TxSwQueue3;
++ struct sk_buff_head TxSwQueue3;
+
+ USHORT Sequence; // Current sequence number
+
+ TUPLE_CACHE TupleCache[MAX_CLIENT]; // Maximum number of tuple caches, only useful in Ad-Hoc
+ UCHAR TupleCacheLastUpdateIndex; // 0..MAX_CLIENT-1
+ FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
+-
++
+ // For MiniportTransferData
+ PUCHAR pRxData; // Pointer to current RxRing offset / fragment frame offset
+-
++
+ // Counters for 802.3 & generic.
+ // Add 802.11 specific counters later
+ COUNTER_802_3 Counters; // 802.3 counters
+@@ -1021,11 +1048,11 @@
+ BOOLEAN bAcceptBroadcast;
+ BOOLEAN bAcceptAllMulticast;
+ BOOLEAN bAcceptPromiscuous;
+-
++
+ // Control to check Tx hang
+ BOOLEAN bTxBusy;
+ //PQUEUE_ENTRY FirstEntryInQueue; // The first packet in Tx queue
+-
++
+ // Control disconnect / connect event generation
+ ULONG LinkDownTime;
+ ULONG LastRxRate;
+@@ -1044,7 +1071,7 @@
+
+ BOOLEAN bNetDeviceStopQueue;
+ BOOLEAN NeedSwapToLittleEndian;
+-
++
+ #if WIRELESS_EXT >= 12
+ struct iw_statistics iw_stats;
+ #endif
+@@ -1054,9 +1081,6 @@
+ ATE_INFO ate;
+ #endif //#ifdef RALINK_ATE
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- struct work_struct mlme_work;
+-#endif
+ } RTMP_ADAPTER, *PRTMP_ADAPTER;
+
+ //
+@@ -1064,10 +1088,9 @@
+ //
+ typedef struct _SHA_CTX
+ {
+- ULONG H[5];
+- ULONG W[80];
+- INT lenW;
+- ULONG sizeHi, sizeLo;
++ ULONG Buf[5]; // buffers of five states
++ UCHAR Input[80]; // input message
++ ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
+ } SHA_CTX;
+
+ //
+@@ -1085,7 +1108,7 @@
+ IN PRTMP_ADAPTER pAd)
+ {
+ // 0xFF37 : Txdone & Rxdone, 0xFF07: Txdonw, Rxdone, PrioDone, AtimDone,
+- RTMP_IO_WRITE32(pAd, CSR8, 0xFE14);
++ RTMP_IO_WRITE32(pAd, CSR8, 0xFE14);
+ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
+ }
+
+@@ -1096,10 +1119,16 @@
+ INT RT2500_close(
+ IN struct net_device *net_dev);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+ irqreturn_t RTMPIsr(
+- IN INT irq,
+- IN VOID *dev_instance,
++ IN INT irq,
++ IN VOID *dev_instance,
+ IN struct pt_regs *rgs);
++#else
++irqreturn_t RTMPIsr(
++ IN INT irq,
++ IN VOID *dev_instance);
++#endif
+
+ VOID RT2500_timer(
+ IN unsigned long data);
+@@ -1108,16 +1137,16 @@
+ IN struct net_device *net_dev);
+
+ INT RTMPSendPackets(
+- IN struct sk_buff *skb,
++ IN struct sk_buff *skb,
+ IN struct net_device *net_dev);
+
+ INT RT2500_probe(
+- IN struct pci_dev *pPci_Dev,
++ IN struct pci_dev *pPci_Dev,
+ IN const struct pci_device_id *ent);
+
+ INT RT2500_ioctl(
+- IN struct net_device *net_dev,
+- IN OUT struct ifreq *rq,
++ IN struct net_device *net_dev,
++ IN OUT struct ifreq *rq,
+ IN INT cmd);
+
+ VOID RTMPRingCleanUp(
+@@ -1179,7 +1208,7 @@
+ INT RTMPGetKeyParameter(
+ IN PUCHAR section,
+ IN PCHAR key,
+- OUT PCHAR dest,
++ OUT PCHAR dest,
+ IN INT destsize,
+ IN PCHAR buffer);
+
+@@ -1187,7 +1216,7 @@
+ IN PRTMP_ADAPTER pAd);
+
+ #define RTMPEqualMemory(p1,p2,n) (memcmp((p1),(p2),(n)) == 0)
+-
++
+ ULONG RTMPCompareMemory(
+ IN PVOID pSrc1,
+ IN PVOID pSrc2,
+@@ -1244,7 +1273,7 @@
+ NDIS_STATUS RTMPSendPacket(
+ IN PRTMP_ADAPTER pAdapter,
+ IN struct sk_buff *skb);
+-
++
+ //VOID RTMPDeQueuePacket(
+ // IN PRTMP_ADAPTER pAdapter,
+ // IN PQUEUE_HEADER pQueue);
+@@ -1320,8 +1349,8 @@
+ IN UCHAR TxRate);
+
+ NDIS_STATUS RTMPApplyPacketFilter(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PRXD_STRUC pRxD,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PRXD_STRUC pRxD,
+ IN PHEADER_802_11 pHeader);
+
+ struct sk_buff_head* RTMPCheckTxSwQueue(
+@@ -1329,20 +1358,20 @@
+ OUT UCHAR *AccessCategory);
+
+ VOID RTMPReportMicError(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PWPA_KEY pWpaKey);
+ //
+ // Private routines in rtmp_wep.c
+ //
+ VOID RTMPInitWepEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN UCHAR KeyId,
+- IN UCHAR KeyLen,
++ IN UCHAR KeyLen,
+ IN PUCHAR pDest);
+
+ VOID RTMPEncryptData(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDest,
+ IN UINT Len);
+@@ -1366,7 +1395,7 @@
+
+ VOID ARCFOUR_DECRYPT(
+ IN PARCFOURCONTEXT Ctx,
+- IN PUCHAR pDest,
++ IN PUCHAR pDest,
+ IN PUCHAR pSrc,
+ IN UINT Len);
+
+@@ -1394,18 +1423,18 @@
+ IN PRTMP_ADAPTER pAd);
+
+ VOID AsicSwitchChannel(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN UCHAR Channel);
+
+ VOID AsicLockChannel(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Channel) ;
+
+ VOID AsicRfTuningExec(
+ IN unsigned long data);
+
+ VOID AsicSleepThenAutoWakeup(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT TbttNumToNextWakeUp);
+
+ VOID AsicForceSleep(
+@@ -1415,7 +1444,7 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID AsicSetBssid(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MACADDR *Bssid);
+
+ VOID AsicDisableSync(
+@@ -1453,16 +1482,16 @@
+ IN PRTMP_ADAPTER pAd);
+
+ VOID MacAddrRandomBssid(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ OUT PMACADDR Addr);
+
+ VOID MgtMacHeaderInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT PMACHDR Hdr,
+- IN UCHAR Subtype,
+- IN UCHAR ToDs,
+-// IN UCHAR AddrType,
+- IN PMACADDR Ds,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT PMACHDR Hdr,
++ IN UCHAR Subtype,
++ IN UCHAR ToDs,
++// IN UCHAR AddrType,
++ IN PMACADDR Ds,
+ IN PMACADDR Bssid);
+
+ VOID MlmeRadioOff(
+@@ -1475,66 +1504,69 @@
+ IN BSS_TABLE *Tab);
+
+ ULONG BssTableSearch(
+- IN BSS_TABLE *Tab,
++ IN BSS_TABLE *Tab,
+ IN PMACADDR Bssid);
+
+ VOID BssTableDeleteEntry(
+- IN OUT BSS_TABLE *Tab,
++ IN OUT BSS_TABLE *Tab,
+ IN PMACADDR Bssid);
+
+ VOID BssEntrySet(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT BSS_ENTRY *Bss,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
++ IN PRTMP_ADAPTER pAdapter,
++ OUT BSS_ENTRY *Bss,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
+ IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ ULONG BssTableSetEntry(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT BSS_TABLE *Tab,
+- IN MACADDR *Bssid,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN USHORT BeaconPeriod,
+- IN BOOLEAN CfExist,
+- IN CF_PARM *CfParm,
+- IN USHORT AtimWin,
+- IN USHORT CapabilityInfo,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ OUT BSS_TABLE *Tab,
++ IN MACADDR *Bssid,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN USHORT BeaconPeriod,
++ IN BOOLEAN CfExist,
++ IN CF_PARM *CfParm,
++ IN USHORT AtimWin,
++ IN USHORT CapabilityInfo,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist,
+ IN UCHAR Channel,
+ IN UCHAR Rssi,
+ IN UCHAR Noise,
+ IN LARGE_INTEGER TimeStamp,
++ IN USHORT VarIELen, // Length of all saved IEs.
+ IN PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ VOID BssTableSsidSort(
+- IN PRTMP_ADAPTER pAd,
+- OUT BSS_TABLE *OutTab,
+- IN CHAR Ssid[],
++ IN PRTMP_ADAPTER pAd,
++ OUT BSS_TABLE *OutTab,
++ IN CHAR Ssid[],
+ IN UCHAR SsidLen);
+
+ VOID BssTableSortByRssi(
+ IN OUT BSS_TABLE *OutTab);
+
+-NDIS_802_11_WEP_STATUS BssCipherParse(
+- IN PUCHAR pCipher);
++USHORT BssCipherParse(
++ IN PBEACON_EID_STRUCT pEid,
++ IN USHORT VarIELen); // Length of all saved IEs.
+
+ NDIS_STATUS MlmeQueueInit(
+ IN MLME_QUEUE *Queue);
+@@ -1543,70 +1575,64 @@
+ IN MLME_QUEUE *Queue);
+
+ BOOLEAN MlmeEnqueue(
+- OUT MLME_QUEUE *Queue,
+- IN ULONG Machine,
+- IN ULONG MsgType,
+- IN ULONG MsgLen,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG Machine,
++ IN ULONG MsgType,
++ IN ULONG MsgLen,
+ IN VOID *Msg);
+
+ BOOLEAN MlmeEnqueueForRecv(
+- IN PRTMP_ADAPTER pAdapter,
+- OUT MLME_QUEUE *Queue,
+- IN ULONG TimeStampHigh,
+- IN ULONG TimeStampLow,
+- IN UCHAR Rssi,
++ IN PRTMP_ADAPTER pAdapter,
++ OUT MLME_QUEUE *Queue,
++ IN ULONG TimeStampHigh,
++ IN ULONG TimeStampLow,
++ IN UCHAR Rssi,
+ IN UCHAR Noise,
+- IN ULONG MsgLen,
++ IN ULONG MsgLen,
+ IN PVOID Msg);
+
+ BOOLEAN MlmeDequeue(
+- IN MLME_QUEUE *Queue,
++ IN MLME_QUEUE *Queue,
+ OUT MLME_QUEUE_ELEM **Elem);
+
+ VOID MlmeRestartStateMachine(
+ IN PRTMP_ADAPTER pAd);
+
+-BOOLEAN MlmeQueueEmpty(
+- IN MLME_QUEUE *Queue);
+-
+-BOOLEAN MlmeQueueFull(
+- IN MLME_QUEUE *Queue);
+-
+ BOOLEAN MsgTypeSubst(
+- IN MACFRAME *Fr,
+- OUT INT *Machine,
++ IN MACFRAME *Fr,
++ OUT INT *Machine,
+ OUT INT *MsgType);
+
+ VOID StateMachineInit(
+- IN STATE_MACHINE *Sm,
+- IN STATE_MACHINE_FUNC Trans[],
+- IN ULONG StNr,
+- IN ULONG MsgNr,
+- IN STATE_MACHINE_FUNC DefFunc,
+- IN ULONG InitState,
++ IN STATE_MACHINE *Sm,
++ IN STATE_MACHINE_FUNC Trans[],
++ IN ULONG StNr,
++ IN ULONG MsgNr,
++ IN STATE_MACHINE_FUNC DefFunc,
++ IN ULONG InitState,
+ IN ULONG Base);
+
+ VOID StateMachineSetAction(
+- IN STATE_MACHINE *S,
+- IN ULONG St,
+- ULONG Msg,
++ IN STATE_MACHINE *S,
++ IN ULONG St,
++ ULONG Msg,
+ IN STATE_MACHINE_FUNC F);
+
+ VOID StateMachinePerformAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Drop(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID StateMachineDestroy(
+ IN STATE_MACHINE *Sm);
+
+ VOID AssocStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *Sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID ReassocTimeout(
+@@ -1620,43 +1646,43 @@
+
+ //----------------------------------------------
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeAssocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeReassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeDisassocReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAssocRspAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerReassocRspAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerDisassocAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID DisassocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID AssocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ReassocTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Cls3errAction(
+@@ -1682,60 +1708,60 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID AssocPostProc(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MACADDR *Addr2,
+- IN USHORT CapabilityInfo,
+- IN USHORT Aid,
+- IN UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN MACADDR *Addr2,
++ IN USHORT CapabilityInfo,
++ IN USHORT Aid,
++ IN UCHAR Rates[],
+ IN UCHAR RatesLen,
+ IN BOOLEAN ExtendedRateIeExist);
+
+ VOID AuthStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PSTATE_MACHINE sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PSTATE_MACHINE sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID AuthTimeout(
+ IN unsigned long data);
+
+ VOID MlmeAuthReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthRspAtSeq2Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthRspAtSeq4Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID AuthTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID Cls2errAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PMACADDR pAddr);
+
+ VOID MlmeDeauthReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenAuth(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ //VOID MlmeDeauthReqProc(
+-// IN PRTMP_ADAPTER pAdapter,
+-// IN MACADDR *Addr,
++// IN PRTMP_ADAPTER pAdapter,
++// IN MACADDR *Addr,
+ // IN USHORT Reason);
+
+ //=============================================
+
+ VOID AuthRspStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PSTATE_MACHINE Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PSTATE_MACHINE Sm,
+ IN STATE_MACHINE_FUNC Trans[]);
+
+
+@@ -1743,34 +1769,34 @@
+ IN unsigned long data);
+
+ VOID AuthRspChallengeTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthAtAuthRspIdleAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthAtAuthRspWaitAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerDeauthAction(
+- IN PRTMP_ADAPTER pAdaptor,
++ IN PRTMP_ADAPTER pAdaptor,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerAuthSimpleRspGenAndSend(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PMACHDR Hdr,
+- IN USHORT Alg,
+- IN USHORT Seq,
+- IN USHORT Reason,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PMACHDR Hdr,
++ IN USHORT Alg,
++ IN USHORT Seq,
++ IN USHORT Reason,
+ IN USHORT Status);
+
+ //========================================
+
+ VOID SyncStateMachineInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *Sm,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *Sm,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID BeaconTimeout(
+@@ -1783,23 +1809,23 @@
+ IN unsigned long data);
+
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenScan(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenJoin(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID InvalidStateWhenStart(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID EnqueueProbeRequest(
+@@ -1808,61 +1834,61 @@
+ //=========================================
+
+ VOID MlmeCntlInit(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID MlmeCntlMachinePerformAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAdapter,
++ IN STATE_MACHINE *S,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlIdleProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlOidScanProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlOidSsidProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM * Elem);
+
+ VOID CntlOidRTBssidProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlMlmeRoamingProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitDisassocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitJoinProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitReassocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitStartProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAuthProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAuthProc2(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID CntlWaitAssocProc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID LinkUp(
+@@ -1873,8 +1899,8 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID MlmeCntlConfirm(
+- IN PRTMP_ADAPTER pAdapter,
+- IN ULONG MsgType,
++ IN PRTMP_ADAPTER pAdapter,
++ IN ULONG MsgType,
+ IN USHORT Msg);
+
+ VOID IterateOnBssTab(
+@@ -1884,42 +1910,42 @@
+ IN PRTMP_ADAPTER pAdapter);;
+
+ VOID JoinParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
+ IN ULONG BssIdx);
+
+ VOID AssocParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
+- IN MACADDR *Addr,
+- IN USHORT CapabilityInfo,
+- IN ULONG Timeout,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
++ IN MACADDR *Addr,
++ IN USHORT CapabilityInfo,
++ IN ULONG Timeout,
+ IN USHORT ListenIntv);
+
+ VOID ScanParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
+- IN CHAR Ssid[],
+- IN UCHAR SsidLen,
+- IN UCHAR BssType,
+- IN UCHAR ScanType);
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
++ IN CHAR Ssid[],
++ IN UCHAR SsidLen,
++ IN UCHAR BssType,
++ IN UCHAR ScanType);
+
+ VOID DisassocParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
+- IN MACADDR *Addr,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
++ IN MACADDR *Addr,
+ IN USHORT Reason);
+
+ VOID StartParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_START_REQ_STRUCT *StartReq,
+- IN CHAR Ssid[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_START_REQ_STRUCT *StartReq,
++ IN CHAR Ssid[],
+ IN UCHAR SsidLen);
+
+ VOID AuthParmFill(
+- IN PRTMP_ADAPTER pAdapter,
+- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
+- IN MACADDR *Addr,
++ IN PRTMP_ADAPTER pAdapter,
++ IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
++ IN MACADDR *Addr,
+ IN USHORT Alg);
+
+ VOID EnqueuePsPoll(
+@@ -1933,39 +1959,39 @@
+ IN UCHAR TxRate);
+
+ VOID MlmeJoinReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID MlmeStartReqAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ScanTimeoutAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID BeaconTimeoutAtJoinAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeaconAtScanAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeaconAtJoinAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID PeerProbeReqAction(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID ScanNextChannel(
+@@ -1975,142 +2001,143 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ BOOLEAN MlmeScanReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT UCHAR *BssType,
+- OUT CHAR ssid[],
+- OUT UCHAR *SsidLen,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT UCHAR *BssType,
++ OUT CHAR ssid[],
++ OUT UCHAR *SsidLen,
+ OUT UCHAR *ScanType);
+
+ BOOLEAN PeerBeaconAndProbeRspSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT MACADDR *Bssid,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *BssType,
+- OUT USHORT *BeaconPeriod,
+- OUT UCHAR *Channel,
+- OUT LARGE_INTEGER *Timestamp,
+- OUT BOOLEAN *CfExist,
+- OUT CF_PARM *Cf,
+- OUT USHORT *AtimWin,
+- OUT USHORT *CapabilityInfo,
+- OUT UCHAR Rate[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT MACADDR *Bssid,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *BssType,
++ OUT USHORT *BeaconPeriod,
++ OUT UCHAR *Channel,
++ OUT LARGE_INTEGER *Timestamp,
++ OUT BOOLEAN *CfExist,
++ OUT CF_PARM *Cf,
++ OUT USHORT *AtimWin,
++ OUT USHORT *CapabilityInfo,
++ OUT UCHAR Rate[],
+ OUT UCHAR *RateLen,
+ OUT BOOLEAN *ExtendedRateIeExist,
+ OUT UCHAR *Erp,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *MessageToMe,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *MessageToMe,
+ OUT UCHAR *Legacy,
+ OUT UCHAR SupRate[],
+ OUT UCHAR *SupRateLen,
+ OUT UCHAR ExtRate[],
+ OUT UCHAR *ExtRateLen,
++ OUT USHORT *VarIELen, // Length of all saved IEs.
+ OUT PNDIS_802_11_VARIABLE_IEs pVIE);
+
+ //BOOLEAN JoinParmSanity(
+-// IN PRTMP_ADAPTER pAdapter,
+-// IN VOID *Msg,
+-// IN ULONG MsgLen,
++// IN PRTMP_ADAPTER pAdapter,
++// IN VOID *Msg,
++// IN ULONG MsgLen,
+ // OUT ULONG *BssIdx,
+-// OUT UCHAR SupportedRates[],
++// OUT UCHAR SupportedRates[],
+ // OUT UCHAR *SupportedRatesLen);
+
+ BOOLEAN MlmeAssocReqSanity(
+ IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *ApAddr,
+- OUT USHORT *CapabilityInfo,
+- OUT ULONG *Timeout,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *ApAddr,
++ OUT USHORT *CapabilityInfo,
++ OUT ULONG *Timeout,
+ OUT USHORT *ListenIntv);
+
+ BOOLEAN MlmeAuthReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT ULONG *Timeout,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT ULONG *Timeout,
+ OUT USHORT *Alg);
+
+ BOOLEAN MlmeStartReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT CHAR Ssid[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT CHAR Ssid[],
+ OUT UCHAR *Ssidlen);
+
+ BOOLEAN PeerAuthSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT USHORT *Alg,
+- OUT USHORT *Seq,
+- OUT USHORT *Status,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT USHORT *Alg,
++ OUT USHORT *Seq,
++ OUT USHORT *Status,
+ OUT CHAR ChlgText[]);
+
+ BOOLEAN PeerAssocRspSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *CapabilityInfo,
+- OUT USHORT *Status,
+- OUT USHORT *Aid,
+- OUT UCHAR Rates[],
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *CapabilityInfo,
++ OUT USHORT *Status,
++ OUT USHORT *Aid,
++ OUT UCHAR Rates[],
+ OUT UCHAR *RatesLen,
+ OUT BOOLEAN *ExtendedRateIeExist);
+
+ BOOLEAN PeerDisassocSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
+ OUT USHORT *Reason);
+
+ BOOLEAN PeerDeauthSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
+ OUT USHORT *Reason);
+
+ BOOLEAN PeerProbeReqSanity(
+- IN PRTMP_ADAPTER pAdapter,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
++ IN PRTMP_ADAPTER pAdapter,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
+ OUT MACADDR *Addr2,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen);
+-// OUT UCHAR Rates[],
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen);
++// OUT UCHAR Rates[],
+ // OUT UCHAR *RatesLen);
+
+ BOOLEAN GetTimBit(
+- IN CHAR *Ptr,
+- IN USHORT Aid,
+- OUT UCHAR *TimLen,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
++ IN CHAR *Ptr,
++ IN USHORT Aid,
++ OUT UCHAR *TimLen,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
+ OUT UCHAR *MessageToMe);
+
+ BOOLEAN GetLegacy(
+- IN CHAR *Ptr,
++ IN CHAR *Ptr,
+ OUT UCHAR *Legacy);
+
+ ULONG MakeOutgoingFrame(
+- OUT CHAR *Buffer,
++ OUT CHAR *Buffer,
+ OUT ULONG *Length, ...);
+
+ VOID LfsrInit(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Seed);
+
+ UCHAR RandomByte(
+@@ -2129,26 +2156,26 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID MlmeCheckForRoaming(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now32);
+
+ VOID MlmeCheckDynamicTxRateSwitching(
+ IN PRTMP_ADAPTER pAd);
+
+ VOID MlmeCheckChannelQuality(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now);
+
+ VOID MlmeCheckForPsmChange(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG Now32);
+
+ VOID MlmeSetPsmBit(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT psm);
+
+ VOID MlmeSetTxPreamble(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN USHORT TxPreamble);
+
+ VOID MlmeUpdateTxRates(
+@@ -2214,7 +2241,7 @@
+
+ VOID EWEN(
+ IN PRTMP_ADAPTER pAd);
+-
++
+ USHORT RTMP_EEPROM_READ16(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset);
+@@ -2223,16 +2250,16 @@
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Data);
+-
++
+ UCHAR ChannelSanity(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel);
+
+ //
+ // Prototypes of function definition in rtmp_tkip.c
+ //
+ VOID RTMPInitTkipEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pTKey,
+ IN UCHAR KeyId,
+ IN PUCHAR pTA,
+@@ -2242,14 +2269,14 @@
+ OUT PULONG pIV32);
+
+ VOID RTMPInitMICEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN PUCHAR pDA,
+ IN PUCHAR pSA,
+ IN PUCHAR pMICKey);
+
+ BOOLEAN RTMPTkipCompareMICValue(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDA,
+ IN PUCHAR pSA,
+@@ -2272,12 +2299,12 @@
+ IN PUCHAR pMICKey,
+ IN UINT Len);
+
+-VOID RTMPTkipAppend(
+- IN PTKIP_KEY_INFO pTkip,
++VOID RTMPTkipAppend(
++ IN PTKIP_KEY_INFO pTkip,
+ IN PUCHAR pSrc,
+ IN UINT nBytes);
+
+-VOID RTMPTkipGetMIC(
++VOID RTMPTkipGetMIC(
+ IN PTKIP_KEY_INFO pTkip);
+
+ NDIS_STATUS RTMPWPAAddKeyProc(
+@@ -2292,7 +2319,7 @@
+ IN PRTMP_ADAPTER pAdapter);
+
+ VOID RTMPSetPhyMode(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN ULONG phymode);
+
+ VOID RTMPSetDesiredRates(
+@@ -2313,102 +2340,102 @@
+ // Prototypes of function definition for *iwpriv* in rtmp_info.c
+ //
+ INT Set_CountryRegion_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_SSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WirelessMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_AdhocModeRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Channel_Proc(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR
+ arg);
+
+ #ifdef RT2500_DBG
+ INT Set_Debug_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+ #endif
+
+ INT Set_BGProtection_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxPreamble_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_StaWithEtherBridge_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_RTSThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_FragThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TxBurst_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_TurboRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_NetworkType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+-
++
+ INT Set_AuthMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_EncrypType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_DefaultKeyID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key1_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key2_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key3_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_Key4_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WPAPSK_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_WPANONE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ VOID RTMPIoctlBBP(
+@@ -2425,10 +2452,14 @@
+ IN struct iwreq *wrq);
+ #endif
+
+-int RTMPIoctlRFMONTX(
+- IN OUT PRTMP_ADAPTER pAdapter,
++int RTMPIoctlSetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq);
+
++int RTMPIoctlGetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
++ OUT struct iwreq *wrq);
++
+ //
+ // prototype in wpa.c
+ //
+@@ -2437,31 +2468,31 @@
+ OUT ULONG *MsgType);
+
+ VOID WpaPskStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
+ OUT STATE_MACHINE_FUNC Trans[]);
+
+ VOID WpaEAPOLKeyAction(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaPairMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaPairMsg3Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem);
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaGroupMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN MLME_QUEUE_ELEM *Elem);
+
+ VOID WpaMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PHEADER_802_11 Hdr,
+- IN UCHAR wep,
+- IN PMACADDR pAddr1);
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PHEADER_802_11 Hdr,
++ IN UCHAR wep,
++ IN PMACADDR pAddr1);
+
+ VOID WpaHardEncrypt(
+ IN PRTMP_ADAPTER pAdapter,
+@@ -2495,15 +2526,15 @@
+ IN UINT len);
+
+ VOID GenRandom(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ OUT UCHAR *random);
+
+-VOID AES_GTK_KEY_UNWRAP(
++VOID AES_GTK_KEY_UNWRAP(
+ IN UCHAR *key,
+ OUT UCHAR *plaintext,
+ IN UCHAR *ciphertext);
+
+-ULONG RTMPTkipGetUInt32(
++ULONG RTMPTkipGetUInt32(
+ IN PUCHAR pMICKey);
+
+ char * rtstrstr(
+@@ -2512,39 +2543,39 @@
+
+ #ifdef RALINK_ATE
+ INT Set_ATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_DA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_SA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_BSSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_CHANNEL_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_POWER_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_LENGTH_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_COUNT_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ INT Set_ATE_TX_RATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg);
+
+ VOID RTMPStationStop(
+@@ -2559,11 +2590,15 @@
+
+ #ifdef BIG_ENDIAN
+ VOID RTMPFrameEndianChange(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR pData,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR pData,
+ IN ULONG Dir,
+ IN BOOLEAN FromRxDoneInt);
+
++VOID WriteBackToDescriptor(IN PUCHAR Dest,
++ IN PUCHAR Src,
++ IN BOOLEAN DoEncrypt, IN ULONG DescriptorType);
++
+ VOID RTMPDescriptorEndianChange(
+ IN PUCHAR pData,
+ IN ULONG DescriptorType);
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_data.c rt2500-cvs-2007061011/Module/rtmp_data.c
+--- rt2500-1.1.0-b4/Module/rtmp_data.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_data.c 2007-06-08 20:09:53.000000000 +0200
+@@ -1,42 +1,42 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_data.c
+- *
++ *
+ * Abstract: Data path subroutines
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
+ * John 25th Feb 03 Modify for rt2560
+- * MarkW 8th Dec 04 Baseline code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * MarkW 19th Feb 05 Fixes to incoming byte count
+ * GregorG 29th Mar 05 Big endian fixes
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -46,12 +46,12 @@
+
+ static UCHAR IPX[] = {0x81, 0x37};
+ static UCHAR APPLE_TALK[] = {0x80, 0xf3};
+-static UCHAR PlcpSignal[12] = {
++static UCHAR PlcpSignal[12] = {
+ 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */ // see BBP spec
+ 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */ // see IEEE802.11a-1999 p.14
+ 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ }; // see IEEE802.11a-1999 p.14
+ static UINT _11G_RATES[12] = { 0, 0, 0, 0, 6, 9, 12, 18, 24, 36, 48, 54 };
+-
++
+ #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _RxAnt, _rssi) \
+ { \
+ USHORT AvgRssi; \
+@@ -84,16 +84,16 @@
+
+ Routine Description:
+ Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound
+-
++
+ Arguments:
+ pRxD Pointer to the Rx descriptor
+-
++
+ Return Value:
+ NDIS_STATUS_SUCCESS No err
+ NDIS_STATUS_FAILURE Error
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ inline NDIS_STATUS RTMPCheckRxDescriptor(
+@@ -102,7 +102,7 @@
+ // Phy errors
+ if (pRxD->PhyErr)
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // CRC errors
+ if (pRxD->Crc)
+ return(NDIS_STATUS_FAILURE);
+@@ -120,15 +120,15 @@
+
+ Routine Description:
+ Endian conversion of Tx/Rx descriptor .
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pData Pointer to Tx/Rx descriptor
+ DescriptorType Direction of the frame
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+ Call this function when read or update descriptor
+ ========================================================================
+@@ -143,12 +143,26 @@
+ *(ULONG *)pData = SWAP32(*(ULONG *)pData); // Byte 0; this must be swapped last
+ }
+
++VOID WriteBackToDescriptor(IN PUCHAR Dest,
++ IN PUCHAR Src,
++ IN BOOLEAN DoEncrypt, IN ULONG DescriptorType)
++{
++ PULONG p1, p2;
++ UCHAR i;
++
++ p1 = ((PULONG) Dest) + 1;
++ p2 = ((PULONG) Src) + 1;
++ for (i = 1; i < RING_DESCRIPTOR_SIZE / 4; i++)
++ *p1++ = *p2++;
++ *(PULONG) Dest = *(PULONG) Src;
++}
++
+ /*
+ ========================================================================
+
+ Routine Description:
+ Endian conversion of all kinds of 802.11 frames .
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pData Pointer to the 802.11 frame structure
+@@ -157,14 +171,14 @@
+
+ Return Value:
+ None
+-
++
+ Note:
+ Call this function when read or update buffer data
+ ========================================================================
+ */
+ VOID RTMPFrameEndianChange(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PUCHAR pData,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR pData,
+ IN ULONG Dir,
+ IN BOOLEAN FromRxDoneInt)
+ {
+@@ -182,7 +196,7 @@
+
+ // swab 16 bit fields - Duration/ID field
+ *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
+-
++
+ // swab 16 bit fields - Sequence Control field
+ *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
+
+@@ -210,7 +224,7 @@
+ // swab 16 bit fields - Status Code field
+ pMacHdr += 2;
+ *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
+-
++
+ // swab 16 bit fields - AID field
+ pMacHdr += 2;
+ *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
+@@ -271,6 +285,7 @@
+ *(USHORT *)pData = SWAP16(*(USHORT *)pData);
+ }
+ }
++
+ #endif
+
+ /*
+@@ -353,14 +368,14 @@
+ pAdapter->RalinkCounters.RxRingErrCount++;
+ break;
+ }
+-
++
+ #ifdef RALINK_ATE
+ if(pAdapter->ate.Mode == ATE_RXFRAME)
+ {
+ bDropFrame = TRUE;
+ }
+ #endif //#ifdef RALINK_ATE
+-
++
+ // Point to Rx ring buffer where stores the real data frame
+ pData = (PUCHAR) (pAdapter->RxRing[pAdapter->CurRxIndex].va_data_addr);
+ // Cast to 802.11 header for flags checking
+@@ -372,11 +387,11 @@
+
+ // Check for all RxD errors
+ Status = RTMPCheckRxDescriptor(pRxD);
+-
++
+ // Apply packet filtering rule based on microsoft requirements.
+ if (Status == NDIS_STATUS_SUCCESS)
+ Status = RTMPApplyPacketFilter(pAdapter, pRxD, pHeader);
+-
++
+ // Add receive counters
+ if (Status == NDIS_STATUS_SUCCESS)
+ {
+@@ -394,7 +409,7 @@
+ // Increase general counters
+ pAdapter->Counters.RxErrors++;
+ }
+-
++
+ // Check for retry bit, if this bit is on, search the cache with SA & sequence
+ // as index, if matched, discard this frame, otherwise, update cache
+ // This check only apply to unicast data & management frames
+@@ -453,7 +468,7 @@
+ bDropFrame = TRUE;
+ break;
+ }
+-
++
+ // Drop frame from AP while we are in Ad-hoc mode or not associated
+ if (pHeader->Controlhead.Frame.FrDs)
+ {
+@@ -471,11 +486,11 @@
+ bDropFrame = TRUE;
+ break;
+ }
+-
++
+ // Good data frame appears, increase the counters
+ INC_COUNTER(pAdapter->WlanCounters.ReceivedFragmentCount);
+- pAdapter->RalinkCounters.ReceivedByteCount += pRxD->DataByteCnt;
+-
++ pAdapter->RalinkCounters.ReceivedByteCount += pRxD->DataByteCnt;
++
+ // Process Multicast data frame
+ if (pRxD->Mcast)
+ {
+@@ -486,18 +501,18 @@
+
+ // Init WPA Key to NULL
+ pWpaKey = (PWPA_KEY) NULL;
+-
++
+ // Find the WPA key, either Group or Pairwise Key
+ if ((pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pHeader->Controlhead.Frame.Wep))
+ {
+ INT idx;
+-
++
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (pRxD->Bcast || pRxD->Mcast)
+ {
+-
++
+ idx = (*(pData + 3) & 0xc0) >> 6;
+- if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
++ if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
+ ((INFRA_ON(pAdapter) && (NdisEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))) ||
+ (ADHOC_ON(pAdapter) && (NdisEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6)))))
+ {
+@@ -520,15 +535,15 @@
+ break;
+ }
+ }
+-#if 1
++#if 1
+ // Use default Group Key if there is no Pairwise key present
+ if ((pWpaKey == NULL) && (pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
+ pWpaKey->Type = GROUP_KEY;
+ DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key\n");
+ }
+-#endif
++#endif
+ }
+ }
+
+@@ -542,16 +557,16 @@
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
+-
++ }
++
+ // Filter out Bcast frame which AP relayed for us
+ if (pHeader->Controlhead.Frame.FrDs && RTMPEqualMemory(&pHeader->Addr3, pAdapter->CurrentAddress, 6))
+ {
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
+-
++ }
++
+ // WEP encrypted frame
+ if (pHeader->Controlhead.Frame.Wep)
+ {
+@@ -560,27 +575,27 @@
+ {
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+- memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++ memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 5)
+ pRxD->CipherAlg = CIPHER_WEP64;
+ else
+- pRxD->CipherAlg = CIPHER_WEP128;
++ pRxD->CipherAlg = CIPHER_WEP128;
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL)) // TKIP
+ {
+ UCHAR Eiv_Tmp[4];
+-
++
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ // Swap EIV byte order, due to ASIC's bug.
+ Eiv_Tmp[0] = *(pData + 7);
+ Eiv_Tmp[1] = *(pData + 6);
+ Eiv_Tmp[2] = *(pData + 5);
+- Eiv_Tmp[3] = *(pData + 4);
++ Eiv_Tmp[3] = *(pData + 4);
+ memcpy((PUCHAR) &pRxD->Eiv, Eiv_Tmp, 4); //Get WEP EIV
+ // Copy TA into RxD
+ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_TKIP;
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL)) // AES
+@@ -588,9 +603,9 @@
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ memcpy((PUCHAR) &pRxD->Eiv, (pData + 4), 4); //Get WEP EIV
+ // Copy TA into RxD
+- memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
++ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_AES;
+ }
+ else
+@@ -606,17 +621,17 @@
+ pRxD->CipherAlg = CIPHER_NONE;
+ }
+ }
+-
++
+ // Begin process unicast to me frame
+ else if (pRxD->U2M || pAdapter->bAcceptPromiscuous == TRUE)
+ {
+- // Send PS-Poll for AP to send next data frame
++ // Send PS-Poll for AP to send next data frame
+ if ((pHeader->Controlhead.Frame.MoreData) && INFRA_ON(pAdapter) && (pAdapter->PortCfg.Psm == PWR_SAVE))
+ {
+ EnqueuePsPoll(pAdapter);
+ DBGPRINT(RT_DEBUG_TRACE, "Sending PS-POLL\n");
+ }
+-
++
+ //
+ // Begin frame processing
+ //
+@@ -634,11 +649,11 @@
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+- memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++ memcpy(pRxD->Key, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 5)
+ pRxD->CipherAlg = CIPHER_WEP64;
+ else
+- pRxD->CipherAlg = CIPHER_WEP128;
++ pRxD->CipherAlg = CIPHER_WEP128;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+ (pHeader->Frag == 0))
+@@ -659,18 +674,18 @@
+ if (pHeader->Controlhead.Frame.Wep)
+ {
+ UCHAR Eiv_Tmp[4];
+-
++
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ // Swap EIV byte order, due to ASIC's bug.
+ Eiv_Tmp[0] = *(pData + 7);
+ Eiv_Tmp[1] = *(pData + 6);
+ Eiv_Tmp[2] = *(pData + 5);
+- Eiv_Tmp[3] = *(pData + 4);
++ Eiv_Tmp[3] = *(pData + 4);
+ memcpy((PUCHAR) &pRxD->Eiv, Eiv_Tmp, 4); //Get WEP EIV
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+ // Copy TA into RxD
+ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_TKIP;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+@@ -694,9 +709,9 @@
+ memcpy((PUCHAR) &pRxD->Iv, pData, 4); //Get WEP IV
+ memcpy((PUCHAR) &pRxD->Eiv, (pData + 4), 4); //Get WEP EIV
+ // Copy TA into RxD
+- memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
++ memcpy(pRxD->TA, &pHeader->Controlhead.Addr2, 6);
+ KeyIdx = (*(pData + 3) & 0xc0) >> 6;
+- memcpy(pRxD->Key, pWpaKey->Key, 16);
++ memcpy(pRxD->Key, pWpaKey->Key, 16);
+ pRxD->CipherAlg = CIPHER_AES;
+ }
+ else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
+@@ -719,7 +734,7 @@
+ Status = NDIS_STATUS_FAILURE;
+ bDropFrame = TRUE;
+ break;
+- }
++ }
+ else // Not encryptrd frames
+ {
+ pRxD->CipherAlg = CIPHER_NONE;
+@@ -756,13 +771,14 @@
+ pRxD->Drop = 0;
+ pRxD->IvOffset = LENGTH_802_11;
+ }
+-
++
+ pRxD->CipherOwner = DESC_OWN_NIC;
+
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pHeader, DIR_WRITE, TRUE);
+ RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
+- *pDestRxD = RxD;
++ //*pDestRxD = RxD;
++ WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, TRUE, TYPE_RXD);
+ #endif
+
+ pAdapter->CurRxIndex++;
+@@ -771,9 +787,9 @@
+ pAdapter->CurRxIndex = 0;
+ }
+ Count++;
+-
++
+ pAdapter->RalinkCounters.RxCount ++;
+-
++
+ } while (Count < MAX_RX_PROCESS);
+
+ // Kick Decrypt Control Register, based on ASIC's implementation
+@@ -810,10 +826,10 @@
+ #endif
+ UCHAR Count;
+ unsigned long irqflag;
+-
++
+ // Make sure Tx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++
+ Count = 0;
+ do
+ {
+@@ -832,22 +848,22 @@
+ }
+
+ RTMPHardTransmitDone(
+- pAdapter,
+- pTxD,
++ pAdapter,
++ pTxD,
+ pAdapter->TxRing[pAdapter->NextTxDoneIndex].FrameType);
+-
++
+ // It might happend with no Ndis packet to indicate back to upper layer
+ // Clear for NdisSendComplete request
+ pTxD->Valid = FALSE;
+-
++
+ // Increase Total transmit byte counter after real data sent out
+ pAdapter->RalinkCounters.TransmittedByteCount += pTxD->DataByteCnt;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+-
++
+ pAdapter->NextTxDoneIndex++;
+ if (pAdapter->NextTxDoneIndex >= TX_RING_SIZE)
+ {
+@@ -885,16 +901,16 @@
+
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+-
++
+ if(pAdapter->bNetDeviceStopQueue)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "NetDevice start queue!!!\n\n");
+ pAdapter->bNetDeviceStopQueue = FALSE;
+ netif_start_queue(pAdapter->net_dev);
+ }
+-
++
+ // Some Tx ring resource freed, check for pending send frame for hard transmit
+- if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
++ if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS)))
+ {
+@@ -932,10 +948,10 @@
+ UCHAR Count;
+ PMGMT_STRUC pMgmt;
+ unsigned long irqflag;
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+-
++ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
++
+ Count = 0;
+ do
+ {
+@@ -957,16 +973,16 @@
+ #endif
+ break;
+ }
+-
++
+ // No need to put in reply for MLME
+ RTMPHardTransmitDone(
+- pAdapter,
+- pTxD,
++ pAdapter,
++ pTxD,
+ pAdapter->PrioRing[pAdapter->NextPrioDoneIndex].FrameType);
+-
++
+ // It might happend with no Ndis packet to indicate back to upper layer
+- pTxD->Valid = FALSE;
+-
++ pTxD->Valid = FALSE;
++
+ // Increase Total transmit byte counter after real data sent out
+ pAdapter->RalinkCounters.TransmittedByteCount += pTxD->DataByteCnt;
+
+@@ -983,11 +999,11 @@
+ } while (++Count < MAX_TX_PROCESS);
+
+ // Make sure to release Prio ring resource
+- spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
+-
++ spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))
+ return;
+-
++
+
+ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+ if (pAdapter->PushMgmtIndex != pAdapter->PopMgmtIndex)
+@@ -1008,7 +1024,7 @@
+ }
+ }
+ }
+- }
++ }
+ spin_unlock_irqrestore(&pAdapter->PrioRingLock, irqflag);
+ }
+
+@@ -1033,12 +1049,12 @@
+ {
+ // PTXD_STRUC pTxD;
+ // UCHAR Count;
+-
++
+ // Make sure Atim ring resource won't be used by other threads
+ //spin_lock_irqsave(&pAdapter->AtimRingLock);
+-
++
+ // Did not support ATIM, remove everything.
+-
++
+ // Make sure to release Atim ring resource
+ //spin_unlock_irqrestore(&pAdapter->AtimRingLock);
+ }
+@@ -1083,10 +1099,10 @@
+ ULONG i;
+ struct sk_buff *skb;
+ unsigned long irqflag;
+-
++
+ // Make sure Rx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->RxRingLock, irqflag);
+-
++
+ RTMP_IO_READ32(pAdapter, SECCSR0, &RegValue);
+ HwDecryptIndex = RegValue - pAdapter->RxRing[0].pa_addr;
+ do_div(HwDecryptIndex, RING_DESCRIPTOR_SIZE);
+@@ -1104,11 +1120,11 @@
+ pRxD = &RxD;
+ RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
+ #endif
+-
++
+ // In case of false alarm or processed at last instance
+ if ((pRxD->Owner != DESC_OWN_HOST) || (pRxD->CipherOwner != DESC_OWN_HOST))
+ break;
+-
++
+ // Point to Rx ring buffer where stores the real data frame
+ pData = (PUCHAR) (pAdapter->RxRing[pAdapter->CurDecryptIndex].va_data_addr);
+ // Cast to 802.11 header for flags checking
+@@ -1117,15 +1133,18 @@
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pHeader, DIR_READ, FALSE);
+ #endif
+- // Driver will check the decrypt algorithm and decide whether this ICV is true or not
++ // Driver will check the decrypt algorithm and decide whether this ICV is true or not
+ if ((pRxD->IcvError == 1) && (pRxD->CipherAlg == CIPHER_NONE))
+ pRxD->IcvError = 0;
+-
++
+ // Since we already process header at RxDone interrupt, there is no need to proces
+ // header sanity again, the only thing we have to check is icv_err bit
+- if (pRxD->IcvError == 1)
++ //if (pRxD->IcvError == 1)
++ if ((pRxD->IcvError == 1) && (pRxD->CipherAlg != CIPHER_NONE))
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Rx DecryptDone - ICV error (len %d)\n", pRxD->DataByteCnt);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "Rx DecryptDone - ICV error (CipherAlg=%d) (len %d)\n",
++ pRxD->CipherAlg, pRxD->DataByteCnt);
+ pRxD->Drop =1; // Drop frame with icv error
+ }
+ // Saved data pointer for management frame which will pass to MLME block
+@@ -1135,7 +1154,7 @@
+ {
+ struct sk_buff *skb;
+ wlan_ng_prism2_header *ph;
+-
++
+ if ((skb = __dev_alloc_skb(2048, GFP_DMA|GFP_ATOMIC)) != NULL)
+ {
+ if (pAdapter->PortCfg.MallowRFMONTx == TRUE)
+@@ -1196,12 +1215,12 @@
+
+ skb->dev = pAdapter->net_dev;
+ memcpy(skb_put(skb, pRxD->DataByteCnt), pData, pRxD->DataByteCnt);
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+ skb->pkt_type = PACKET_OTHERHOST;
+ skb->protocol = htons(ETH_P_802_2);
+ skb->ip_summed = CHECKSUM_NONE;
+ netif_rx(skb);
+- }
++ }
+ pRxD->Drop = 1;
+ }
+
+@@ -1211,7 +1230,7 @@
+ // The total available payload should exclude 24-byte 802.11 Header
+ // If Security is enabled, IV, EIV, ICV size is excluded by ASIC
+ PacketSize = (USHORT) pRxD->DataByteCnt - LENGTH_802_11;
+-
++
+ // Find the WPA key, either Group or Pairwise Key
+ // Although the data has been decrypted by ASIC,
+ // driver has to calculate the RxMIC which required the key.
+@@ -1221,7 +1240,7 @@
+ if ((pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pHeader->Controlhead.Frame.Wep))
+ {
+ INT idx;
+-
++
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (pRxD->Bcast || pRxD->Mcast)
+ {
+@@ -1231,7 +1250,7 @@
+ #else
+ idx = (pRxD->Iv & 0xc0000000) >> 30;
+ #endif
+- if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
++ if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) &&
+ ((INFRA_ON(pAdapter) && (NdisEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))) ||
+ (ADHOC_ON(pAdapter) && (NdisEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6)))))
+ {
+@@ -1254,22 +1273,22 @@
+ break;
+ }
+ }
+-#if 1
++#if 1
+ // Use default Group Key if there is no Pairwise key present
+ if ((pWpaKey == NULL) && (pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
+ pWpaKey->Type = GROUP_KEY;
+ DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key\n");
+ }
+-#endif
++#endif
+ }
+
+ // If there is no WPA key matched, this frame should be dropped
+ if (pWpaKey == NULL)
+ pRxD->Drop = 1;
+ }
+-
++
+ //
+ // Start of main loop to parse receiving frames.
+ // The sequence will be Type first, then subtype...
+@@ -1287,10 +1306,10 @@
+ pSrcMac = (PUCHAR) &(pHeader->Addr3);
+ else
+ pSrcMac = (PUCHAR) &(pHeader->Controlhead.Addr2);
+-
++
+ // Process Broadcast & Multicast data frame
+ if (pRxD->Bcast || pRxD->Mcast)
+- {
++ {
+ // For TKIP frame, calculate the MIC value
+ if (pRxD->CipherAlg == CIPHER_TKIP)
+ {
+@@ -1302,7 +1321,7 @@
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // Minus MIC length
+ PacketSize -= 8;
+ if (RTMPTkipCompareMICValue(
+@@ -1313,7 +1332,7 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+@@ -1329,21 +1348,17 @@
+ // Rx TSC has done one full cycle, since re-key is done by transmitter
+ // We did not do anything for Rx path
+ }
+-
++
+ // build 802.3 header and decide if remove the 8-byte LLC/SNAP encapsulation
+ CONVERT_TO_802_3(Header802_3, pDestMac, pSrcMac, pData, PacketSize);
+-
++
+ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE; // for RX ACTIVITY LED
+
+ // For miniportTransferData
+ pAdapter->pRxData = pData;
+-
++
+ // Acknolwdge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(PacketSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(PacketSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); // 16 byte align the IP header
+@@ -1354,10 +1369,10 @@
+ pAdapter->net_dev->last_rx = jiffies;
+ pAdapter->stats.rx_packets++;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "!!! Broadcast Ethenet rx Indicated !!!\n");
+ }
+-
++
+ // Begin process unicast to me frame
+ else if (pRxD->U2M || pAdapter->bAcceptPromiscuous == TRUE)
+ {
+@@ -1383,12 +1398,12 @@
+ else if (pRxD->BBR0 == 110)
+ pAdapter->LastRxRate = 3;
+ }
+-
++
+ if (pHeader->Frag == 0) // First or Only fragment
+ {
+ // For TKIP frame, calculate the MIC value
+ if ((pHeader->Controlhead.Frame.MoreFrag == FALSE) &&
+- (pRxD->CipherAlg == CIPHER_TKIP) &&
++ (pRxD->CipherAlg == CIPHER_TKIP) &&
+ (pHeader->Controlhead.Frame.Wep))
+ {
+ if (pWpaKey == NULL)
+@@ -1407,17 +1422,17 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+ }
+-
++
+ pAdapter->FragFrame.Flags &= 0xFFFFFFFE;
+-
++
+ // Check for encapsulation other than RFC1042 & Bridge tunnel
+- if ((!RTMPEqualMemory(SNAP_802_1H, pData, 6)) &&
++ if ((!RTMPEqualMemory(SNAP_802_1H, pData, 6)) &&
+ (!RTMPEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)))
+ {
+ LLC_Len[0] = PacketSize / 256;
+@@ -1427,13 +1442,13 @@
+ else
+ {
+ char *pProto = pData + 6;
+-
++
+ // Remove 802.11 H header & reconstruct 802.3 header
+ // pData += (LENGTH_802_1_H - LENGTH_802_3_TYPE);
+ // Check for EAPOL frame when driver supplicant enabled
+ // TODO: It is not strickly correct. There is no fragment handling. It might damage driver
+ // TODO: But for WPAPSK, it's not likely fragment on EAPOL frame will happen
+- if (RTMPEqualMemory(EAPOL, pProto, 2) && ((pAdapter->PortCfg.WpaState != SS_NOTUSE)))
++ if (RTMPEqualMemory(EAPOL, pProto, 2) && ((pAdapter->PortCfg.WpaState != SS_NOTUSE)))
+ {
+ RTMP_IO_READ32(pAdapter, CSR17, &High32TSF); // TSF value
+ RTMP_IO_READ32(pAdapter, CSR16, &Low32TSF); // TSF vlaue
+@@ -1441,16 +1456,16 @@
+ // Enqueue this frame to MLME engine
+ MlmeEnqueueForRecv(
+ pAdapter,
+- &pAdapter->Mlme.Queue,
+- High32TSF,
++ &pAdapter->Mlme.Queue,
++ High32TSF,
+ Low32TSF,
+- (UCHAR)pRxD->BBR1, (UCHAR)pAdapter->PortCfg.LastR17Value,
+- PacketSize,
+- pManage);
++ (UCHAR)pRxD->BBR1, (UCHAR)pAdapter->PortCfg.LastR17Value,
++ PacketSize,
++ pManage);
+ break;
+ }
+
+- if ((RTMPEqualMemory(IPX, pProto, 2) || RTMPEqualMemory(APPLE_TALK, pProto, 2)) &&
++ if ((RTMPEqualMemory(IPX, pProto, 2) || RTMPEqualMemory(APPLE_TALK, pProto, 2)) &&
+ RTMPEqualMemory(SNAP_802_1H, pData, 6))
+ {
+ // preserved the LLC/SNAP filed
+@@ -1468,21 +1483,17 @@
+ pAdapter->FragFrame.Flags |= 0x01;
+ }
+ }
+-
++
+ // One & The only fragment
+ if (pHeader->Controlhead.Frame.MoreFrag == FALSE)
+ {
+ // For miniportTransferData
+ pAdapter->pRxData = pData;
+-
++
+ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE; // for RX ACTIVITY LED
+
+ // Acknowledge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(PacketSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(PacketSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); // 16 byte align the IP header
+@@ -1499,7 +1510,7 @@
+
+ // Increase general counters
+ pAdapter->Counters.GoodReceives++;
+-
++
+ }
+ // First fragment of fragmented frames
+ else
+@@ -1516,7 +1527,7 @@
+ else
+ {
+ // No LLC-SNAP header in except the first fragment frame
+-
++
+ if ((pHeader->Sequence != pAdapter->FragFrame.Sequence) ||
+ (pHeader->Frag != (pAdapter->FragFrame.LastFrag + 1)))
+ {
+@@ -1525,7 +1536,7 @@
+ memset(&pAdapter->FragFrame, 0, sizeof(FRAGMENT_FRAME));
+ Status = NDIS_STATUS_FAILURE;
+ break;
+- }
++ }
+ else if ((pAdapter->FragFrame.RxSize + PacketSize) > MAX_FRAME_SIZE)
+ {
+ // Fragment frame is too large, it exeeds the maximum frame size.
+@@ -1535,12 +1546,12 @@
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // concatenate this fragment into the re-assembly buffer
+ memcpy(&pAdapter->FragFrame.Buffer[LENGTH_802_3 + pAdapter->FragFrame.RxSize], pData, PacketSize);
+ pAdapter->FragFrame.RxSize += PacketSize;
+ pAdapter->FragFrame.LastFrag = pHeader->Frag; // Update fragment number
+-
++
+ // Last fragment
+ if (pHeader->Controlhead.Frame.MoreFrag == FALSE)
+ {
+@@ -1555,7 +1566,7 @@
+ }
+ // Minus MIC length
+ pAdapter->FragFrame.RxSize -= 8;
+-
++
+ if (pAdapter->FragFrame.Flags & 0x00000001)
+ {
+ // originally there's an LLC/SNAP field in the first fragment
+@@ -1563,9 +1574,9 @@
+ // this LLC/SNAP field upon calculating TKIP MIC
+ // Copy LLC data to the position in front of real data for MIC calculation
+ memcpy(&pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H],
+- pAdapter->FragFrame.Header_LLC,
++ pAdapter->FragFrame.Header_LLC,
+ LENGTH_802_1_H);
+- pData = (PUCHAR) &pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H];
++ pData = (PUCHAR) &pAdapter->FragFrame.Buffer[LENGTH_802_3 - LENGTH_802_1_H];
+ PacketSize = (USHORT)pAdapter->FragFrame.RxSize + LENGTH_802_1_H;
+ //cketSize = (USHORT)pAdapter->FragFrame.RxSize + 8;
+ }
+@@ -1583,29 +1594,25 @@
+ pWpaKey->RxMic,
+ PacketSize) == FALSE)
+ {
+- DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error 2\n");
++ DBGPRINT(RT_DEBUG_ERROR,"Rx MIC Value error 2\n");
+ RTMPReportMicError(pAdapter, pWpaKey);
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+-
++
+ // TODO:
+ // Getting RxTSC from Rx descriptor
+- }
++ }
+
+ // for RX ACTIVITY LED
+- pAdapter->PortCfg.LedCntl.fRxActivity = TRUE;
++ pAdapter->PortCfg.LedCntl.fRxActivity = TRUE;
+
+ // For miniportTransferData
+ pAdapter->pRxData = &pAdapter->FragFrame.Buffer[LENGTH_802_3];
+
+ memcpy(pAdapter->FragFrame.Buffer, pAdapter->FragFrame.Header802_3, LENGTH_802_3);
+ // Acknowledge upper layer the received frame
+-#ifdef RTMP_EMBEDDED
+ if ((skb = __dev_alloc_skb(pAdapter->FragFrame.RxSize + LENGTH_802_3 + 2, GFP_DMA|GFP_ATOMIC)) != NULL)
+-#else
+- if ((skb = dev_alloc_skb(pAdapter->FragFrame.RxSize + LENGTH_802_3 + 2)) != NULL)
+-#endif
+ {
+ skb->dev = pAdapter->net_dev;
+ skb_reserve(skb, 2); /* 16 byte align the IP header */
+@@ -1619,7 +1626,7 @@
+
+ // Increase general counters
+ pAdapter->Counters.GoodReceives++;
+-
++
+ // Clear Fragment frame contents
+ memset(&pAdapter->FragFrame, 0, sizeof(FRAGMENT_FRAME));
+ DBGPRINT(RT_DEBUG_INFO, "!!! Frame with Fragment Indicated !!!\n");
+@@ -1627,42 +1634,42 @@
+ }
+ }
+ break;
+-
++
+ case BTYPE_MGMT:
+ // Read required regsiter for MLME engine
+ RTMP_IO_READ32(pAdapter, CSR17, &High32TSF); // TSF value
+ RTMP_IO_READ32(pAdapter, CSR16, &Low32TSF); // TSF vlaue
+-
++
+ // Enqueue this frame to MLME engine
+ MlmeEnqueueForRecv(
+ pAdapter,
+- &pAdapter->Mlme.Queue,
+- High32TSF,
++ &pAdapter->Mlme.Queue,
++ High32TSF,
+ Low32TSF,
+ (UCHAR)pRxD->BBR1,
+- (UCHAR)pAdapter->PortCfg.LastR17Value,
+- pRxD->DataByteCnt,
+- pManage);
++ (UCHAR)pAdapter->PortCfg.LastR17Value,
++ pRxD->DataByteCnt,
++ pManage);
+ break;
+-
++
+ case BTYPE_CNTL:
+ // Ignore ???
+ break;
+-
++
+ default :
+ break;
+ }
+ }
+-
++
+ pAdapter->CurDecryptIndex++;
+ if (pAdapter->CurDecryptIndex >= RX_RING_SIZE)
+ {
+ pAdapter->CurDecryptIndex = 0;
+ }
+ Count++;
+-
++
+ pAdapter->RalinkCounters.DecryptCount ++;
+-
++
+ // Clear Cipherowner bit & Rx Owner bit for all drop & non-drop frames
+ pRxD->CipherOwner = DESC_OWN_HOST;
+ pRxD->Owner = DESC_OWN_NIC;
+@@ -1673,7 +1680,7 @@
+ }
+ //} while (Count < RX_RING_SIZE);
+ //} while (pAdapter->CurDecryptIndex != HwDecryptIndex);
+-
++
+ // Make sure to release Rx ring resource
+ spin_unlock_irqrestore(&pAdapter->RxRingLock, irqflag);
+ }
+@@ -1706,10 +1713,10 @@
+ ULONG RegValue;
+ ULONGLONG HwEncryptIndex;
+ unsigned long irqflag;
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
++
+ RTMP_IO_READ32(pAdapter, SECCSR1, &RegValue);
+ HwEncryptIndex = RegValue - pAdapter->TxRing[0].pa_addr;
+ do_div(HwEncryptIndex, RING_DESCRIPTOR_SIZE);
+@@ -1749,17 +1756,18 @@
+ *pTmp = Eiv_Tmp[3];
+ *(pTmp + 1) = Eiv_Tmp[2];
+ *(pTmp + 2) = Eiv_Tmp[1];
+- *(pTmp + 3) = Eiv_Tmp[0];
++ *(pTmp + 3) = Eiv_Tmp[0];
+ }
+ // Sanity Check, CurTxIndex should equal to NextEncryptDoneIndex
+ // ASSERT(pAdapter->CurTxIndex == pAdapter->NextEncryptDoneIndex);
+-
++
+ pTxD->Valid = TRUE;
+ pTxD->Owner = DESC_OWN_NIC;
+
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
++ //*pDestTxD = TxD;
++ WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
+ #endif
+
+ pAdapter->NextEncryptDoneIndex++;
+@@ -1778,9 +1786,9 @@
+
+ // Kick Tx Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, TXCSR0, 0x1);
+-
++
+ // Make sure to release Tx ring resource
+- spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ }
+
+ /*
+@@ -1854,7 +1862,7 @@
+ INC_COUNTER(pAdapter->WlanCounters.RTSSuccessCount);
+ pTxD->RTS = 0;
+ }
+-
++
+ // Increase general counters
+ pAdapter->Counters.GoodTransmits++;
+ INC_COUNTER(pAdapter->WlanCounters.TransmittedFragmentCount);
+@@ -1865,22 +1873,22 @@
+ pAdapter->DrsCounters.OneSecTxOkCount ++;
+ }
+ break;
+-
++
+ case SUCCESS_WITH_RETRY: // Success with some retry
+ // DBGPRINT(RT_DEBUG_INFO, "TX Success with retry(=%d)<<<\n",pTxD->RetryCount);
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.RetryCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+ INC_COUNTER(pAdapter->WlanCounters.TransmittedFragmentCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.GoodTransmits++;
+-
++
+ if (pTxD->RetryCount > 1)
+ {
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.MultipleRetryCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.MoreCollisions++;
+ }
+@@ -1889,7 +1897,7 @@
+ // Increase general counters
+ pAdapter->Counters.OneCollision++;
+ }
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSSuccessCount);
+@@ -1901,7 +1909,7 @@
+ {
+ if (pTxD->TxRate > pAdapter->PortCfg.TxRate)
+ {
+- // DRS - must be NULL frame retried @ UpRate; downgrade
++ // DRS - must be NULL frame retried @ UpRate; downgrade
+ // TxQuality[UpRate] so that not upgrade TX rate
+ pAdapter->DrsCounters.TxQuality[pTxD->TxRate] += 2;
+ if (pAdapter->DrsCounters.TxQuality[pTxD->TxRate] > DRS_TX_QUALITY_WORST_BOUND)
+@@ -1917,10 +1925,10 @@
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.FailedCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+@@ -1932,7 +1940,7 @@
+ {
+ if (pTxD->TxRate > pAdapter->PortCfg.TxRate)
+ {
+- // DRS - must be NULL frame failed @ UpRate; downgrade
++ // DRS - must be NULL frame failed @ UpRate; downgrade
+ // TxQuality[UpRate] so that not upgrade TX rate
+ pAdapter->DrsCounters.TxQuality[pTxD->TxRate] = DRS_TX_QUALITY_WORST_BOUND;
+ }
+@@ -1942,35 +1950,35 @@
+ }
+ }
+ break;
+-
++
+ case FAIL_INVALID:
+ // DBGPRINT(RT_DEBUG_WARN, ("TX Failed (INVALID)<<<\n"));
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+ pTxD->RTS = 0;
+ }
+- break;
+-
++ break;
++
+ case FAIL_OTHER:
+ default:
+ // DBGPRINT(RT_DEBUG_ERROR, ("TX Failed (other=%d)<<<\n",pTxD->TxResult));
+ // Increase 802.11 counters
+ INC_COUNTER(pAdapter->WlanCounters.FailedCount);
+ INC_COUNTER(pAdapter->WlanCounters.ACKFailureCount);
+-
++
+ // Increase general counters
+ pAdapter->Counters.TxErrors++;
+-
++
+ if (pTxD->RTS)
+ {
+ INC_COUNTER(pAdapter->WlanCounters.RTSFailureCount);
+ pTxD->RTS = 0;
+ }
+- break;
++ break;
+ }
+ }
+
+@@ -1980,19 +1988,19 @@
+ Routine Description:
+ API for MLME to transmit management frame to AP (BSS Mode)
+ or station (IBSS Mode)
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ Buffer Pointer to memory of outgoing frame
+ Length Size of outgoing management frame
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_PENDING
+ NDIS_STATUS_SUCCESS
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS MiniportMMRequest(
+@@ -2001,28 +2009,28 @@
+ IN ULONG Length)
+ {
+ PMGMT_STRUC pMgmt;
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+ unsigned long irqflag;
+
+ DBGPRINT(RT_DEBUG_INFO, "---> MiniportMMRequest\n");
+ // Check management ring free avaliability
+ pMgmt = (PMGMT_STRUC) &pAdapter->MgmtRing[pAdapter->PushMgmtIndex];
+-
++
+ // This management cell has been occupied
+- if (pMgmt->Valid == TRUE)
++ if (pMgmt->Valid == TRUE)
+ {
+ // No Management ring buffer avaliable
+ MlmeFreeMemory(pAdapter, pBuffer);
+- Status = NDIS_STATUS_FAILURE;
++ Status = NDIS_STATUS_FAILURE;
+ DBGPRINT(RT_DEBUG_WARN, "<--- MiniportMMRequest (error:: MgmtRing full)\n");
+ pAdapter->RalinkCounters.MgmtRingFullCount++;
+ return (Status);
+ }
+-
++
+ // Insert this request into software managemnet ring
+ if (pBuffer)
+ {
+- pMgmt->pBuffer = pBuffer;
++ pMgmt->pBuffer = pBuffer;
+ pMgmt->Length = Length;
+ pMgmt->Valid = TRUE;
+ pAdapter->PushMgmtIndex++;
+@@ -2031,19 +2039,19 @@
+ {
+ pAdapter->PushMgmtIndex = 0;
+ }
+- }
++ }
+ else
+ {
+ // Null pBuffer, no need to free memory buffer.
+ // This should not happen
+ DBGPRINT(RT_DEBUG_WARN, "<--- MiniportMMRequest (error:: NULL msg)\n");
+- Status = NDIS_STATUS_FAILURE;
++ Status = NDIS_STATUS_FAILURE;
+ return (Status);
+ }
+-
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))
+ return (Status);
+-
++
+ // Check Free priority queue
+ spin_lock_irqsave(&pAdapter->PrioRingLock, irqflag);
+ if (RTMPFreeDescriptorRequest(pAdapter, PRIO_RING, 1) == NDIS_STATUS_SUCCESS)
+@@ -2076,21 +2084,21 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware transmit function
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pBuffer Pointer to memory of outgoing frame
+ Length Size of outgoing management frame
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_PENDING
+ NDIS_STATUS_SUCCESS
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID MlmeHardTransmit(
+@@ -2103,15 +2111,15 @@
+ PTXD_STRUC pDestTxD;
+ TXD_STRUC TxD;
+ #endif
+- PUCHAR pDest;
++ PUCHAR pDest;
+ PHEADER_802_11 pHeader_802_11;
+ BOOLEAN AckRequired, InsertTimestamp;
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "MlmeHardTransmit\n");
+-
++
+ // Make sure Prio ring resource won't be used by other threads
+-
+- pDest = (PUCHAR) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_data_addr;
++
++ pDest = (PUCHAR) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->PrioRing[pAdapter->CurPrioIndex].va_addr;
+ #else
+@@ -2120,7 +2128,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if (pTxD->Owner == DESC_OWN_NIC)
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -2138,10 +2146,10 @@
+ // The buffer shouldn't be NULL
+ return;
+ }
+-
+- // outgoing frame always wakeup PHY to prevent frame lost
++
++ // outgoing frame always wakeup PHY to prevent frame lost
+ AsicForceWakeup(pAdapter);
+-
++
+ pHeader_802_11 = (PHEADER_802_11) pBuffer;
+ pHeader_802_11->Controlhead.Frame.PwrMgt = 0; // (pAdapter->PortCfg.Psm == PWR_SAVE);
+ InsertTimestamp = FALSE;
+@@ -2175,7 +2183,7 @@
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pBuffer, DIR_WRITE, FALSE);
+ #endif
+ memcpy(pDest, pBuffer, Length);
+-
++
+ // Initialize Priority Descriptor
+ // For inter-frame gap, the number is for this frame and next frame
+ // For MLME rate, we will fix as 2Mb to match other vendor's implement
+@@ -2193,28 +2201,28 @@
+ {
+ pAdapter->CurPrioIndex = 0;
+ }
+-
++
+ // Kick priority ring transmit
+ RTMP_IO_WRITE32(pAdapter,TXCSR0,0x4);
+-
++
+ // Make sure to release Prio ring resource
+-}
++}
+ /*
+ ========================================================================
+
+ Routine Description:
+ This routine is used to en-queue outgoing packets when
+ there is no enough shread memory
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pPacket Pointer to send packet
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPSendPacket(
+@@ -2225,51 +2233,42 @@
+ UINT AllowFragSize;
+ UCHAR NumberOfFrag;
+ UCHAR RTSRequired;
+- NDIS_STATUS Status = NDIS_STATUS_FAILURE;
+- UCHAR PsMode;
+-
++
+ struct sk_buff_head *pTxQueue = NULL;
+ ULONG Priority;
+ UCHAR AccessCategory;
+ unsigned long irqflag;
+-
+- DBGPRINT(RT_DEBUG_INFO, "<==== RTMPSendPacket\n");
+
+- // Init priority value
+- Priority = 0;
+- AccessCategory = 0;
+-
+- if (skb)
+- {
+- Priority = skb->priority;
+- // 802.11e/d4.4 June, 2003
+- if (Priority <=2)
+- AccessCategory = 0;
+- else if (Priority == 3)
+- AccessCategory = 1;
+- else if (Priority <= 5)
+- AccessCategory = 2;
+- else
+- AccessCategory = 3;
+- DBGPRINT(RT_DEBUG_INFO, "Priority = %d, AC = %d\n", Priority, AccessCategory);
+- }
++ DBGPRINT(RT_DEBUG_INFO, "====> RTMPSendPacket\n");
++
++ if (skb == NULL)
++ return NDIS_STATUS_SUCCESS;
++
++ Priority = skb->priority;
++ // 802.11e/d4.4 June, 2003
++ if (Priority <=2)
++ AccessCategory = 0;
++ else if (Priority == 3)
++ AccessCategory = 1;
++ else if (Priority <= 5)
++ AccessCategory = 2;
++ else
++ AccessCategory = 3;
++ DBGPRINT(RT_DEBUG_INFO, "Priority = %d, AC = %d\n", Priority,
++ AccessCategory);
+
+ // For TKIP, MIC value is treated as payload, it might be fragmented through
+ // different MPDUs.
+ if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
+- {
+ skb->data_len += 8;
+- }
+
+ pVirtualAddress = (PVOID)skb->data;
+
+ // Check for virtual address allocation, it might fail !!!
+ if (pVirtualAddress == NULL)
+- {
+- // Resourece is low, system did not allocation virtual address
++ // Resource is low, system did not allocate virtual address
+ // return NDIS_STATUS_FAILURE directly to upper layer
+- return (Status);
+- }
++ return NDIS_STATUS_FAILURE;
+
+ // Store Ethernet MAC address when APClinet mode on
+ if ((pAdapter->PortCfg.StaWithEtherBridge.Enable)
+@@ -2296,7 +2295,7 @@
+ pAdapter->CurrentAddress[3] = StaMacReg0.field.Byte3;
+ pAdapter->CurrentAddress[4] = StaMacReg1.field.Byte4;
+ pAdapter->CurrentAddress[5] = StaMacReg1.field.Byte5;
+-
++
+ RTMP_IO_WRITE32(pAdapter, CSR3, StaMacReg0.word);
+ RTMP_IO_WRITE32(pAdapter, CSR4, StaMacReg1.word);
+
+@@ -2304,7 +2303,7 @@
+ pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[0],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[1],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[2],
+ pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[3],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[4],pAdapter->PortCfg.StaWithEtherBridge.EtherMacAddr.Octet[5]);
+ }
+-
++
+ //
+ // Check for multicast or broadcast (First byte of DA)
+ //
+@@ -2322,37 +2321,30 @@
+ NumberOfFrag = ((skb->data_len - LENGTH_802_3 + LENGTH_802_1_H) / AllowFragSize) + 1;
+ // Minus 1 if the size just match to allowable fragment size
+ if (((skb->data_len - LENGTH_802_3 + LENGTH_802_1_H) % AllowFragSize) == 0)
+- {
+ NumberOfFrag--;
+- }
+ }
+
+- // Check for requirement of RTS
++ // Check for requirement of RTS
+ if (NumberOfFrag > 1)
+- {
+ // If multiple fragment required, RTS is required only for the first fragment
+ // if the fragment size large than RTS threshold
+ RTSRequired = (pAdapter->PortCfg.FragmentThreshold > pAdapter->PortCfg.RtsThreshold) ? 1 : 0;
+- }
+ else
+- {
+ RTSRequired = (skb->data_len > pAdapter->PortCfg.RtsThreshold) ? 1 : 0;
+- }
+- DBGPRINT(RT_DEBUG_INFO, "Number of fragments include RTS :%d\n", NumberOfFrag + RTSRequired);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Number of fragments include RTS :%d\n",
++ NumberOfFrag + RTSRequired);
++
++ // RTS/CTS may also be required in order to protect OFDM frame
++ if ((pAdapter->PortCfg.TxRate >= RATE_FIRST_OFDM_RATE) && pAdapter->PortCfg.BGProtectionInUsed)
++ RTSRequired = 1;
+
+- // RTS/CTS may also be required in order to protect OFDM frame
+- if ((pAdapter->PortCfg.TxRate >= RATE_FIRST_OFDM_RATE) && pAdapter->PortCfg.BGProtectionInUsed)
+- RTSRequired = 1;
+-
+ // Save framnet number to Ndis packet reserved field
+ RTMP_SET_PACKET_FRAGMENTS(skb, NumberOfFrag);
+
+ // Save RTS requirement to Ndis packet reserved field
+ RTMP_SET_PACKET_RTS(skb, RTSRequired);
+
+- // Make sure SendTxWait queue resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+-
+ // Select the right priority queue
+ // There should be no else statement since it should always fall within 0-3
+ if (AccessCategory== 0)
+@@ -2363,56 +2355,49 @@
+ pTxQueue = &pAdapter->TxSwQueue2;
+ else if (AccessCategory== 3)
+ pTxQueue = &pAdapter->TxSwQueue3;
+-
++
+ //
+ // For infrastructure mode, enqueue this frame immediately to sendwaitqueue
+ // For Ad-hoc mode, check the DA power state, then decide which queue to enqueue
+ //
+- if (INFRA_ON(pAdapter))
+- {
+- // In infrastructure mode, simply enqueue the packet into Tx waiting queue.
+- DBGPRINT(RT_DEBUG_INFO, "Infrastructure -> Enqueue one frame\n");
+-
+- // Enqueue Ndis packet to end of Tx wait queue
+- skb_queue_tail(pTxQueue, skb);
+- Status = NDIS_STATUS_SUCCESS;
+- }
+- else
+- {
+- // In IBSS mode, power state of destination should be considered.
+- PsMode = PWR_ACTIVE; // Faked
+- if (PsMode == PWR_ACTIVE)
+- {
+- DBGPRINT(RT_DEBUG_INFO,"Ad-Hoc -> Enqueue one frame\n");
+-
++ if (INFRA_ON(pAdapter)) {
++ // In infrastructure mode, simply enqueue the packet into Tx waiting queue.
++ DBGPRINT(RT_DEBUG_INFO,
++ "<=== RTMPSendPacket Infrastructure -> Enqueue one frame\n");
+ // Enqueue Ndis packet to end of Tx wait queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb_queue_tail(pTxQueue, skb);
+- Status = NDIS_STATUS_SUCCESS;
+- }
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
++ return NDIS_STATUS_SUCCESS;
+ }
+-
++ // Ad-hoc mode (power state of destination might be considered).
++ DBGPRINT(RT_DEBUG_INFO,
++ "<=== RTMPSendPacket Ad-Hoc -> Enqueue one frame\n");
++ // Enqueue Ndis packet to end of Tx wait queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ skb_queue_tail(pTxQueue, skb);
+ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+- return (Status);
++ return NDIS_STATUS_SUCCESS;
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- To do the enqueue operation and extract the first item of waiting
+- list. If a number of available shared memory segments could meet
++ To do the enqueue operation and extract the first item of waiting
++ list. If a number of available shared memory segments could meet
+ the request of extracted item, the extracted item will be fragmented
+ into shared memory segments.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pQueue Pointer to Waiting Queue
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPDeQueuePacket(
+@@ -2424,69 +2409,64 @@
+ struct sk_buff_head *pQueue;
+ UCHAR AccessCategory;
+ struct sk_buff *skb;
+- unsigned long irqflag;
+-
+- // Make sure SendTxWait queue resource won't be used by other threads
+- spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ unsigned long irqflag;
+
+- while (Count < MAX_TX_PROCESS)
+- // Check queue before dequeue
+- // while ((pQueue->Head != NULL) && (Count < MAX_TX_PROCESS))
+- {
++ while (Count < MAX_TX_PROCESS) {
+ // Reset is in progress, stop immediately
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS))
+ break;
+
+ pQueue = RTMPCheckTxSwQueue(pAdapter, &AccessCategory);
+ if(!pQueue)
+- break;
++ break;
+
+ // Dequeue the first entry from head of queue list
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb = skb_dequeue(pQueue);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+
+ if(!skb)
+- break;
++ break;
+
+ // RTS or CTS-to-self for B/G protection mode has been set already.
+- // There is no need to re-do it here.
++ // There is no need to re-do it here.
+ // Total fragment required = number of fragment + RST if required
+ FragmentRequired = RTMP_GET_PACKET_FRAGMENTS(skb) + RTMP_GET_PACKET_RTS(skb);
+-
+- if (RTMPFreeDescriptorRequest(pAdapter, TX_RING, FragmentRequired) == NDIS_STATUS_SUCCESS)
+- {
+- // Avaliable ring descriptors are enough for this frame
+- // Call hard transmit
+- Status = RTMPHardEncrypt(pAdapter, skb, FragmentRequired, pAdapter->PortCfg.EnableTxBurst, AccessCategory);
+
+- if (Status == NDIS_STATUS_FAILURE)
+- {
+- // Packet failed due to various Ndis Packet error
+- dev_kfree_skb_irq(skb);
+- break;
+- }
+- else if (Status == NDIS_STATUS_RESOURCES)
+- {
+- // Not enough free tx ring, it might happen due to free descriptor inquery might be not correct
+- // It also might change to NDIS_STATUS_FAILURE to simply drop the frame
+- // Put the frame back into head of queue
+- skb_queue_head(pQueue, skb);
+- break;
+- }
+- Count++;
+- }
+- else
+- {
++ if (RTMPFreeDescriptorRequest(pAdapter, TX_RING,
++ FragmentRequired) != NDIS_STATUS_SUCCESS) {
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
+ skb_queue_head(pQueue, skb);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+ pAdapter->PrivateInfo.TxRingFullCnt++;
+- DBGPRINT(RT_DEBUG_INFO,"RTMPDequeuePacket --> Not enough free Tx Ring descriptor (CurEncryptIndex=%d,CurTxIndex=%d, NextTxDoneIndex=%d)!!!\n",
+- pAdapter->CurEncryptIndex, pAdapter->CurTxIndex, pAdapter->NextTxDoneIndex);
++ DBGPRINT(RT_DEBUG_INFO,
++ "RTMPDequeuePacket --> Not enough free Tx Ring descriptor (CurEncryptIndex=%d,CurTxIndex=%d, NextTxDoneIndex=%d)!!!\n",
++ pAdapter->CurEncryptIndex,
++ pAdapter->CurTxIndex,
++ pAdapter->NextTxDoneIndex);
+ break;
+ }
++ // Available ring descriptors are enough for this frame
++ // Call hard transmit
++ Status = RTMPHardEncrypt(pAdapter, skb, FragmentRequired, pAdapter->PortCfg.EnableTxBurst, AccessCategory);
++ if (Status == NDIS_STATUS_FAILURE) {
++ // Packet failed due to various Ndis Packet error
++ dev_kfree_skb_irq(skb);
++ break;
++ } else if (Status == NDIS_STATUS_RESOURCES) {
++ // Not enough free tx ring, it might happen due to free descriptor inquery might be not correct
++ // It also might change to NDIS_STATUS_FAILURE to simply drop the frame
++ // Put the frame back into head of queue
++ spin_lock_irqsave(&pAdapter->TxSwQueueLock, irqflag);
++ skb_queue_head(pQueue, skb);
++ spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
++ break;
++ }
++
++ Count++;
+ }
+
+- // Release TxSwQueue0 resources
+- spin_unlock_irqrestore(&pAdapter->TxSwQueueLock, irqflag);
+-}
++}
+
+ /*
+ ========================================================================
+@@ -2494,17 +2474,17 @@
+ Routine Description:
+ This subroutine will scan through releative ring descriptor to find
+ out avaliable free ring descriptor and compare with request size.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ RingType Selected Ring
+-
++
+ Return Value:
+ NDIS_STATUS_FAILURE Not enough free descriptor
+ NDIS_STATUS_SUCCESS Enough free descriptor
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPFreeDescriptorRequest(
+@@ -2557,18 +2537,18 @@
+ {
+ Index = 0;
+ }
+-
++
+ } while (FreeNumber < NumberRequired); // Quit here ! Free number is enough !
+-
++
+ if (FreeNumber >= NumberRequired)
+ {
+ Status = NDIS_STATUS_SUCCESS;
+ }
+-
++
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ break;
+-
++
+ case PRIO_RING:
+ Index = pAdapter->CurPrioIndex;
+ do
+@@ -2581,7 +2561,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ // While Owner bit is NIC, obviously ASIC still need it.
+ // If valid bit is TRUE, indicate that TxDone has not process yet
+ // We should not use it until TxDone finish cleanup job
+@@ -2594,26 +2574,26 @@
+ {
+ break;
+ }
+-
++
+ Index++;
+ if (Index >= PRIO_RING_SIZE) // Wrap around issue
+ {
+ Index = 0;
+ }
+-
++
+ } while (FreeNumber < NumberRequired); // Quit here ! Free number is enough !
+-
++
+ if (FreeNumber >= NumberRequired)
+ {
+ Status = NDIS_STATUS_SUCCESS;
+ }
+-
++
+ break;
+
+ default:
+ break;
+ }
+-
++
+ return (Status);
+ }
+
+@@ -2631,7 +2611,7 @@
+ TXD_STRUC TxD;
+ #endif
+ unsigned long irqflag;
+-
++
+ if (pBuffer == NULL)
+ {
+ return;
+@@ -2642,19 +2622,19 @@
+ MlmeFreeMemory(pAdapter, pBuffer);
+ return;
+ }
+-
++
+ // WPA 802.1x secured port control
+- if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+- (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
++ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
+ {
+ MlmeFreeMemory(pAdapter, pBuffer);
+ return;
+- }
+-
++ }
++
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+
+- // outgoing frame always wakeup PHY to prevent frame lost and
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ AsicForceWakeup(pAdapter);
+ #if 0
+@@ -2664,13 +2644,13 @@
+ DBGPRINT(RT_DEBUG_TRACE,("Drop Null frame due to Tx queue not empty!\n"));
+ }
+ else
+-#endif
++#endif
+ {
+ // Make sure Tx ring resource won't be used by other threads
+ spin_lock_irqsave(&pAdapter->TxRingLock, irqflag);
+-
++
+ // Get the Tx Ring descriptor & Dma Buffer address
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -2679,11 +2659,11 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_HOST) && (pTxD->CipherOwn == DESC_OWN_HOST) && (pTxD->Valid == FALSE))
+ {
+ HEADER_802_11 *pHeader_802_11;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[TxRate]);
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, (PUCHAR)pBuffer, DIR_WRITE, FALSE);
+@@ -2693,14 +2673,14 @@
+
+ pHeader_802_11 = (PHEADER_802_11) pDest;
+ pHeader_802_11->Controlhead.Frame.PwrMgt = (pAdapter->PortCfg.Psm == PWR_SAVE);
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ pTxD = pDestTxD;
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, FALSE, FALSE, LONG_RETRY, IFS_BACKOFF,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, FALSE, FALSE, LONG_RETRY, IFS_BACKOFF,
+ TxRate, 4, Length, pAdapter->PortCfg.TxPreambleInUsed, 0);
+
+ // Increase & maintain Tx Ring Index
+@@ -2709,13 +2689,13 @@
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+-
++
+ pAdapter->RalinkCounters.EncryptCount++;
+
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
+- }
++
++ }
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ }
+ MlmeFreeMemory(pAdapter, pBuffer);
+@@ -2725,20 +2705,20 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware encryption before really
+ sent out to air.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to outgoing Ndis frame
+ NumberOfFrag Number of fragment required
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPHardEncrypt(
+@@ -2794,7 +2774,7 @@
+ if (pAdapter->PortCfg.BssType == BSS_MONITOR && pAdapter->PortCfg.MallowRFMONTx == TRUE)
+ {
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_DATA;
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ memcpy(pDest,skb->data,skb->len);
+@@ -2812,25 +2792,25 @@
+ FrameGap = IFS_SIFS;
+ else
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+-
+- // outgoing frame always wakeup PHY to prevent frame lost and
++
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ if (pAdapter->PortCfg.Psm == PWR_SAVE)
+ {
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ }
+ AsicForceWakeup(pAdapter);
+-
++
+ // Sequence Number is identical for all fragments belonged to the same frame
+ // Sequence is 0 - 4095
+ pAdapter->Sequence = ((pAdapter->Sequence) + 1) & (MAX_SEQ_NUMBER);
+-
++
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+
+ pVirtualAddress = skb->data;
+ NdisBufferLength = skb->len;
+-
++
+ if ((*((PUCHAR) pVirtualAddress) & 0x01) != 0) // Multicast or Broadcast
+ {
+ INC_COUNTER(pAdapter->WlanCounters.MulticastTransmittedFrameCount);
+@@ -2843,7 +2823,7 @@
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_FAILURE);
+ }
+-
++
+ //
+ // Start making 802.11 frame header
+ //
+@@ -2855,14 +2835,14 @@
+ memcpy(&Header_802_11.Addr3, (PUCHAR) pVirtualAddress, ETH_ALEN);
+ Header_802_11.Controlhead.Frame.ToDs = 1;
+ }
+- else
++ else
+ {
+ // Address 1 - DA, Address 2 - this STA, Address 3 - BSSID
+ memcpy(&Header_802_11.Controlhead.Addr1, (PUCHAR) pVirtualAddress, ETH_ALEN);
+ memcpy(&Header_802_11.Addr3, &pAdapter->PortCfg.Bssid, ETH_ALEN);
+ }
+ memcpy(&Header_802_11.Controlhead.Addr2, pAdapter->CurrentAddress, ETH_ALEN);
+-
++
+ Header_802_11.Sequence = pAdapter->Sequence; // Sequence number
+ Header_802_11.Controlhead.Frame.Type = BTYPE_DATA; // Frame type
+ Header_802_11.Controlhead.Frame.PwrMgt = (pAdapter->PortCfg.Psm == PWR_SAVE);
+@@ -2878,9 +2858,9 @@
+ }
+ else
+ EAPOLFrame = FALSE;
+-
++
+ // WPA 802.1x secured port control
+- if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ if (((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ ((pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) || (pAdapter->PortCfg.MicErrCnt >= 2)) &&
+ (EAPOLFrame == FALSE))
+@@ -2889,28 +2869,28 @@
+ // Make sure to release Tx ring resource
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_FAILURE);
+- }
+-
++ }
++
+ MICFrag = FALSE; // Flag to indicate MIC shall spread into two MPDUs
+ Encapped = FALSE;
+ pEncap = NULL;
+-
++
+ pSrc = (PUCHAR) pVirtualAddress;
+ Protocol = *(pSrc + 12) * 256 + *(pSrc + 13);
+ if (Protocol > 1500) // CHeck for LLC encaped
+ {
+ pEncap = SNAP_802_1H;
+ Encapped = TRUE;
+- if (RTMPEqualMemory(IPX, pSrc + 12, 2) ||
++ if (RTMPEqualMemory(IPX, pSrc + 12, 2) ||
+ RTMPEqualMemory(APPLE_TALK, pSrc + 12, 2))
+ {
+ pEncap = SNAP_BRIDGE_TUNNEL;
+ }
+ }
+
+- if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) &&
++ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) &&
+ (pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+- EncryptionOverhead = 8; // WEP: IV + ICV
++ EncryptionOverhead = 8; // WEP: IV + ICV
+ else if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
+ EncryptionOverhead = 12; // TKIP: IV + EIV + ICV, MIC already added to TotalPacketLength
+ else if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
+@@ -2925,11 +2905,11 @@
+ {
+ PCONTROL_HEADER pControlHeader;
+ ULONG NextFragSize;
+-
++
+ // RTS-protected frame should use LONG_RETRY (=4), other frames use SHORT_RETRY (=7)
+ RetryMode = LONG_RETRY;
+-
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -2938,7 +2918,7 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -2961,11 +2941,11 @@
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+-
++
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_RESOURCES);
+ }
+-
++
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_CNTL;
+ pControlHeader = (PCONTROL_HEADER) pDest;
+ memset(pControlHeader, 0, sizeof(CONTROL_HEADER));
+@@ -2987,27 +2967,32 @@
+ }
+ pControlHeader->Duration = 2 * (pAdapter->PortCfg.Dsifs)
+ + RTMPCalcDuration(pAdapter, pAdapter->PortCfg.TxRate, NextFragSize + EncryptionOverhead)
+- + AckDuration;
++ + AckDuration;
+
+ // Write Tx descriptor
+ // Don't kick tx start until all frames are prepared
+ // RTS has to set more fragment bit for fragment burst
+- // RTS did not encrypt
++ // RTS did not encrypt
+ if (pAdapter->PortCfg.BGProtectionInUsed == 1)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,"Making CTS-to-self Frame\n");
+- pControlHeader->Frame.Subtype = SUBTYPE_CTS;
++ pControlHeader->Frame.Subtype = SUBTYPE_CTS;
+ memcpy(&pControlHeader->Addr1, pAdapter->CurrentAddress, ETH_ALEN);
+
+ #ifdef BIG_ENDIAN
+- RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader, DIR_WRITE, FALSE);
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
+- pTxD = pDestTxD;
++ // Write Tx descriptor
++ // Don't kick tx start until all frames are prepared
++ // CTS has to set more fragment bit for fragment burst
++ // CTS did not encrypt
++ // CTS-to-self will never receive ACK
++ RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader,
++ DIR_WRITE, FALSE);
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ *pDestTxD = TxD;
++ pTxD = pDestTxD;
+ #endif
+
+-
+-#ifdef WIFI_TEST
++#ifdef WIFI_TEST
+ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, FALSE, FALSE, FALSE, SHORT_RETRY,
+ FrameGap, pAdapter->PortCfg.RtsRate, 4, 10, Rt802_11PreambleShort,
+ AccessCategory);
+@@ -3019,42 +3004,51 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Making RTS Frame\n");
+- pControlHeader->Frame.Subtype = SUBTYPE_RTS;
+- if (INFRA_ON(pAdapter))
+- memcpy(&pControlHeader->Addr1, &pAdapter->PortCfg.Bssid, ETH_ALEN);
+- else
+- memcpy(&pControlHeader->Addr1, (PUCHAR) pVirtualAddress, ETH_ALEN);
+- memcpy(&pControlHeader->Addr2, pAdapter->CurrentAddress, ETH_ALEN);
++ DBGPRINT(RT_DEBUG_TRACE,"Making RTS Frame\n");
++ pControlHeader->Frame.Subtype = SUBTYPE_RTS;
++ if (INFRA_ON(pAdapter))
++ memcpy(&pControlHeader->Addr1,
++ &pAdapter->PortCfg.Bssid, ETH_ALEN);
++ else
++ memcpy(&pControlHeader->Addr1,
++ (PUCHAR) pVirtualAddress, ETH_ALEN);
++ memcpy(&pControlHeader->Addr2,
++ pAdapter->CurrentAddress, ETH_ALEN);
++
++ // Write Tx descriptor
++ // Don't kick tx start until all frames are prepared
++ // RTS has to set more fragment bit for fragment burst
++ // RTS did not encrypt
++ pTxD->RTS = 1;
+ #ifdef BIG_ENDIAN
+- RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader, DIR_WRITE, FALSE);
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
+- pTxD = pDestTxD;
++ RTMPFrameEndianChange(pAdapter, (PUCHAR)pControlHeader,
++ DIR_WRITE, FALSE);
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ *pDestTxD = TxD;
++ pTxD = pDestTxD;
+ #endif
+ RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, TRUE, TRUE, FALSE, SHORT_RETRY,
+ FrameGap, pAdapter->PortCfg.RtsRate, 4, sizeof(CONTROL_HEADER),
+ pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+- pTxD->RTS = 1;
+ }
+-
++
+ FrameGap = IFS_SIFS; // Init frame gap for coming data after RTS
+ NumberRequired--;
+-
++
+ // Increase & maintain Tx Ring Index
+ pAdapter->CurEncryptIndex++;
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+- pAdapter->RalinkCounters.EncryptCount++;
++ pAdapter->RalinkCounters.EncryptCount++;
+ }
+
+ // Find the WPA key, either Group or Pairwise Key
+ if (pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA)
+ {
+ INT idx;
+-
++
+ pWpaKey = (PWPA_KEY) NULL;
+ // First lookup the DA, if it's a group address, use GROUP key
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01)
+@@ -3101,17 +3095,17 @@
+ {
+ // Get the Tx Ring descriptor & Dma Buffer address
+ #ifndef BIG_ENDIAN
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ pOriginDest = pDest;
+ pDestTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ TxD = *pDestTxD;
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+@@ -3127,12 +3121,14 @@
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
+ pTxD->Valid = FALSE;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pDestTxD = TxD;
++ //*pDestTxD = TxD;
++ WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, FALSE,
++ TYPE_RXD);
+ #endif
+-
++
+ pAdapter->RalinkCounters.TxRingErrCount++;
+ spin_unlock_irqrestore(&pAdapter->TxRingLock, irqflag);
+ return (NDIS_STATUS_RESOURCES);
+@@ -3144,7 +3140,7 @@
+ Header_802_11.Frag = 0; // Start of fragment burst / Single Frame
+ else
+ Header_802_11.Frag++; // Rest of fragmented frames.
+-
++
+ // Maximum allowable payload with one ring buffer, bound by fragment size
+ FreeFragSize = pAdapter->PortCfg.FragmentThreshold - LENGTH_CRC;
+
+@@ -3155,12 +3151,12 @@
+ {
+ ULONG NextFragSize;
+ Header_802_11.Controlhead.Frame.MoreFrag = 1;
+-
++
+ if (NumberRequired == 2)
+ NextFragSize = RemainSize - pAdapter->PortCfg.FragmentThreshold + LENGTH_802_11 + LENGTH_802_11 + LENGTH_CRC;
+ else
+ NextFragSize = pAdapter->PortCfg.FragmentThreshold;
+-
++
+ Header_802_11.Controlhead.Duration = 3 * pAdapter->PortCfg.Dsifs
+ + 2 * AckDuration
+ + RTMPCalcDuration(pAdapter, pAdapter->PortCfg.TxRate, NextFragSize + EncryptionOverhead);
+@@ -3168,7 +3164,7 @@
+ else // this is the last or only fragment
+ {
+ Header_802_11.Controlhead.Frame.MoreFrag = 0;
+-
++
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01) // multicast/broadcast
+ Header_802_11.Controlhead.Duration = 0;
+ else
+@@ -3183,7 +3179,7 @@
+ Header_802_11.Controlhead.Frame.Wep = 1;
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL))
+ Header_802_11.Controlhead.Frame.Wep = 1;
+-
++
+ //
+ // Copy 802.11 header to Tx ring buffer
+ //
+@@ -3191,12 +3187,15 @@
+ pDest += sizeof(Header_802_11);
+ FreeFragSize -= sizeof(Header_802_11);
+
+- DBGPRINT(RT_DEBUG_TRACE,"pWpaKey = %s\n", pWpaKey == NULL ? "NULL" : "not NULL");
++ DBGPRINT(RT_DEBUG_INFO, "pWpaKey = %s\n",
++ pWpaKey == NULL ? "NULL" : "not NULL");
+
+ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) && (EAPOLFrame == FALSE) &&
+ (pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
+ {
+- DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11Encryption1Enabled::DefaultKeyId = %d\n", pAdapter->PortCfg.DefaultKeyId);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption1Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
+ // Prepare IV, IV offset, Key for Hardware encryption
+ RTMPInitWepEngine(
+ pAdapter,
+@@ -3216,12 +3215,14 @@
+ memcpy(
+ pTxD->Key,
+ pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key,
+- pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen);
++ pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen);
+ }
+ else if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
+ {
+ INT i = 0;
+- DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11Encryption2Enabled::DefaultKeyId = %d\n", pAdapter->PortCfg.DefaultKeyId);
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption2Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
+ // Prepare 8 bytes TKIP encapsulation for MPDU
+ {
+ TKIP_IV tkipIv;
+@@ -3232,31 +3233,20 @@
+ tkipIv.IV16.field.rc2 = *pWpaKey->TxTsc;
+ tkipIv.IV16.field.ExtIV = 1;// 0: non-extended IV, 1: extended IV
+ tkipIv.IV16.field.KeyID = pAdapter->PortCfg.DefaultKeyId;
+- tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
+-#if 0 //jett, 2004-1222 ------------------
+-#if BIG_ENDIAN == TRUE
+- pTxD->Iv = (tkipIv.IV16.field.rc0 << 24) | (tkipIv.IV16.field.rc1 << 16) | (tkipIv.IV16.field.rc2 << 8) | (tkipIv.IV16.field.CONTROL.Byte);
+-#endif
+-
+-#ifdef RTMP_EMBEDDED
+- pTxD->Iv = (tkipIv.IV16.field.CONTROL.Byte << 24) | (tkipIv.IV16.field.rc2 << 16) | (tkipIv.IV16.field.rc1 << 8) | (tkipIv.IV16.field.rc0);
+-#else
+- pTxD->Iv = tkipIv.IV16.word;
+-#endif
+-#else //----------------------------------
++ //tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ memcpy(&tkipIv.IV32, &pWpaKey->TxTsc[2], 4);
+ #ifdef BIG_ENDIAN
+- pTxD->Iv = SWAP32(tkipIv.IV16.word);
++ pTxD->Iv = SWAP32(tkipIv.IV16.word);
+ #else
+- pTxD->Iv = tkipIv.IV16.word;
++ pTxD->Iv = tkipIv.IV16.word;
+ #endif
+-#endif //----------------------------------
+
+ *((PUCHAR) &pTxD->Eiv) = *((PUCHAR) &tkipIv.IV32 + 3);
+ *((PUCHAR) &pTxD->Eiv + 1) = *((PUCHAR) &tkipIv.IV32 + 2);
+ *((PUCHAR) &pTxD->Eiv + 2) = *((PUCHAR) &tkipIv.IV32 + 1);
+ *((PUCHAR) &pTxD->Eiv + 3) = *((PUCHAR) &tkipIv.IV32);
+ }
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -3264,13 +3254,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+ // Copy TKey
+ memcpy(pTxD->Key, pWpaKey->Key, 16);
+-
++
+ // Set Cipher suite
+ CipherAlg = CIPHER_TKIP;
+ }
+@@ -3279,15 +3269,20 @@
+ INT i;
+ PUCHAR pTmp;
+
++ DBGPRINT(RT_DEBUG_INFO,
++ "Ndis802_11Encryption3Enabled::DefaultKeyId = %d\n",
++ pAdapter->PortCfg.DefaultKeyId);
++
+ i = 0;
+ pTmp = (PUCHAR) &Iv16;
+ *pTmp = pWpaKey->TxTsc[0];
+ *(pTmp + 1) = pWpaKey->TxTsc[1];
+ *(pTmp + 2) = 0;
+ *(pTmp + 3) = (pAdapter->PortCfg.DefaultKeyId << 6) | 0x20;
+-
+- Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
+-
++
++ //Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
++ memcpy(&Iv32, &pWpaKey->TxTsc[2], 4);
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -3300,7 +3295,7 @@
+ // TODO: TSC has done one full cycle, do re-keying stuff follow specs
+ // Should send a special event microsoft defined to request re-key
+ }
+-
++
+ memcpy(&pTxD->Iv, &Iv16, 4); // Copy IV
+ memcpy(&pTxD->Eiv, &Iv32, 4); // Copy EIV
+ pTxD->IvOffset = LENGTH_802_11; // Set IV offset
+@@ -3308,8 +3303,11 @@
+ CipherAlg = CIPHER_AES; // Set Cipher suite
+ }
+ else
++ {
++ DBGPRINT(RT_DEBUG_TRACE,"Ndis802_11EncryptionDisabled\n");
+ CipherAlg = CIPHER_NONE;
+-
++ }
++
+ //
+ // Only the first fragment required LLC-SNAP header !!!
+ //
+@@ -3332,7 +3330,7 @@
+ pSrc = (PUCHAR) pVirtualAddress;
+ memcpy(pDest, pSrc + 12, 2);
+ pDest += 2;
+-
++
+ // Exclude 802.3 header size, we will recalculate the size at
+ // the end of fragment preparation.
+ NdisBufferLength -= LENGTH_802_3;
+@@ -3346,11 +3344,11 @@
+ // Calculate MSDU MIC Value
+ RTMPCalculateMICValue(pAdapter, skb, pEncap, 0, pWpaKey);
+ }
+-
++
+ pSrc = (PUCHAR) pVirtualAddress + LENGTH_802_3;
+ NdisBufferLength -= LENGTH_802_3;
+ }
+-
++
+ // Start copying payload
+ BytesCopied = 0;
+ do
+@@ -3375,23 +3373,25 @@
+ pDest += NdisBufferLength;
+ FreeFragSize -= NdisBufferLength;
+ }
+-
++
+ // No more buffer descriptor
+ // Add MIC value if needed
+- if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) &&
++ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) &&
+ (MICFrag == FALSE) &&
+ (pWpaKey != NULL))
+ {
+- INT i;
+-
+ NdisBufferLength = 8; // Set length to MIC length
+- DBGPRINT(RT_DEBUG_INFO, "Calculated TX MIC value =");
+- for (i = 0; i < 8; i++)
+- {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PrivateInfo.Tx.MIC[i]);
+- }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+-
++ DBGPRINT(RT_DEBUG_INFO,
++ "--- TX MIC=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
++ pAdapter->PrivateInfo.Tx.MIC[0],
++ pAdapter->PrivateInfo.Tx.MIC[1],
++ pAdapter->PrivateInfo.Tx.MIC[2],
++ pAdapter->PrivateInfo.Tx.MIC[3],
++ pAdapter->PrivateInfo.Tx.MIC[4],
++ pAdapter->PrivateInfo.Tx.MIC[5],
++ pAdapter->PrivateInfo.Tx.MIC[6],
++ pAdapter->PrivateInfo.Tx.MIC[7]);
++
+ if (FreeFragSize >= NdisBufferLength)
+ {
+ memcpy(pDest, pAdapter->PrivateInfo.Tx.MIC, NdisBufferLength);
+@@ -3413,7 +3413,7 @@
+ }
+ }
+ } while (FALSE); // End of copying payload
+-
++
+ // Real packet size, No 802.1H header for fragments except the first one.
+ if ((StartOfFrame == TRUE) && (Encapped == TRUE))
+ {
+@@ -3425,7 +3425,7 @@
+ }
+
+ RemainSize = RemainSize - BytesCopied;
+-
++
+ if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) && (Header_802_11.Controlhead.Frame.Wep == 1))
+ {
+ // IV + ICV which ASIC added after encryption done
+@@ -3441,7 +3441,7 @@
+ // IV + EIV + HW MIC
+ TxSize += 16;
+ }
+-
++
+ // Prepare Tx descriptors before kicking tx.
+ // The BBP register index in Tx descriptor has to be configured too.
+ #ifdef BIG_ENDIAN
+@@ -3453,12 +3453,12 @@
+ if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01)
+ {
+ // Multicast, retry bit is off
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, FALSE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, FALSE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, TxSize, pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+ }
+ else
+ {
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, TxSize, pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+ }
+
+@@ -3467,23 +3467,23 @@
+ StartOfFrame = FALSE;
+ FrameGap = IFS_SIFS;
+ NumberRequired--;
+-
++
+ // Increase & maintain Tx Ring Index
+ pAdapter->CurEncryptIndex++;
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+ }
+-
++
+ pAdapter->RalinkCounters.EncryptCount++;
+-
++
+ } while (NumberRequired > 0);
+
+ skip_packet_handling:
+-
++
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
++
+ // Acknowledge protocol send complete of pending packet.
+ dev_kfree_skb_irq(skb);
+
+@@ -3497,19 +3497,19 @@
+ ========================================================================
+
+ Routine Description:
+- Calculates the duration which is required to transmit out frames
++ Calculates the duration which is required to transmit out frames
+ with given size and specified rate.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ Rate Transmit rate
+ Size Frame size in units of byte
+-
++
+ Return Value:
+ Duration number in units of usec
+
+ Note:
+-
++
+ ========================================================================
+ */
+ USHORT RTMPCalcDuration(
+@@ -3525,7 +3525,7 @@
+ Duration = 96; // 72+24 preamble+plcp
+ else
+ Duration = 192; // 144+48 preamble+plcp
+-
++
+ Duration += (USHORT)((Size << 4) / RateIdTo500Kbps[Rate]);
+ if ((Size << 4) % RateIdTo500Kbps[Rate])
+ Duration ++;
+@@ -3537,18 +3537,18 @@
+ if ((11 + Size * 4) % RateIdTo500Kbps[Rate])
+ Duration += 4;
+ }
+-
++
+ return (USHORT)Duration;
+-
++
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- Calculates the duration which is required to transmit out frames
++ Calculates the duration which is required to transmit out frames
+ with given size and specified rate.
+-
++
+ Arguments:
+ pTxD Pointer to transmit descriptor
+ Ack Setting for Ack requirement bit
+@@ -3560,10 +3560,10 @@
+ Length Frame length
+ TxPreamble Short or Long preamble when using CCK rates
+ AccessCategory - 0-3, according to 802.11e/d4.4 June/2003
+-
++
+ Return Value:
+ None
+-
++
+ ========================================================================
+ */
+ VOID RTMPWriteTxDescriptor(
+@@ -3624,7 +3624,7 @@
+ pTxD->Aifs = 2;
+ break;
+ }
+-
++
+ if (Rate < RATE_FIRST_OFDM_RATE)
+ pTxD->Ofdm = 0;
+ else
+@@ -3671,7 +3671,7 @@
+ pTxD->PlcpLengthHigh = Length / 64; // high 6-bit of total byte count
+ pTxD->PlcpLengthLow = Length % 64; // low 6-bit of total byte count
+ }
+-
++
+ if (DoEncrypt == TRUE) // Do encryption only
+ {
+ pTxD->Owner = DESC_OWN_HOST;
+@@ -3687,8 +3687,10 @@
+ pTxD->Owner = DESC_OWN_NIC;
+ }
+ #ifdef BIG_ENDIAN
+- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+- *pSourceTxD = *pTxD;
++ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
++ //*pSourceTxD = *pTxD;
++ WriteBackToDescriptor((PUCHAR) pSourceTxD, (PUCHAR) pTxD, FALSE,
++ TYPE_TXD);
+ #endif
+ }
+
+@@ -3697,17 +3699,17 @@
+
+ Routine Description:
+ Search tuple cache for receive duplicate frame from unicast frames.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pHeader 802.11 header of receiving frame
+-
++
+ Return Value:
+ TRUE found matched tuple cache
+ FALSE no matched found
+
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPSearchTupleCache(
+@@ -3720,12 +3722,12 @@
+ {
+ if (pAdapter->TupleCache[Index].Valid == FALSE)
+ continue;
+-
++
+ if (RTMPEqualMemory(&pAdapter->TupleCache[Index].MAC, &pHeader->Controlhead.Addr2, 6) &&
+ (pAdapter->TupleCache[Index].Sequence == pHeader->Sequence) &&
+ (pAdapter->TupleCache[Index].Frag == pHeader->Frag))
+ {
+-// DBGPRINT(RT_DEBUG_TRACE,("DUPCHECK - duplicate frame hit entry %d\n", Index));
++// DBGPRINT(RT_DEBUG_TRACE,("DUPCHECK - duplicate frame hit entry %d\n", Index));
+ return (TRUE);
+ }
+ }
+@@ -3737,16 +3739,16 @@
+
+ Routine Description:
+ Update tuple cache for new received unicast frames.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pHeader 802.11 header of receiving frame
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPUpdateTupleCache(
+@@ -3765,7 +3767,7 @@
+ pAdapter->TupleCache[Index].Frag = pHeader->Frag;
+ pAdapter->TupleCache[Index].Valid = TRUE;
+ pAdapter->TupleCacheLastUpdateIndex = Index;
+- DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - Add Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - Add Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+ Index, pAdapter->TupleCache[Index].MAC.Octet[0], pAdapter->TupleCache[Index].MAC.Octet[1],
+ pAdapter->TupleCache[Index].MAC.Octet[2], pAdapter->TupleCache[Index].MAC.Octet[3],
+ pAdapter->TupleCache[Index].MAC.Octet[4], pAdapter->TupleCache[Index].MAC.Octet[5]);
+@@ -3794,7 +3796,7 @@
+ pAdapter->TupleCache[Index].Sequence = pHeader->Sequence;
+ pAdapter->TupleCache[Index].Frag = pHeader->Frag;
+ pAdapter->TupleCache[Index].Valid = TRUE;
+- DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - replace Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ DBGPRINT(RT_DEBUG_INFO,"DUPCHECK - replace Entry %d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+ Index, pAdapter->TupleCache[Index].MAC.Octet[0], pAdapter->TupleCache[Index].MAC.Octet[1],
+ pAdapter->TupleCache[Index].MAC.Octet[2], pAdapter->TupleCache[Index].MAC.Octet[3],
+ pAdapter->TupleCache[Index].MAC.Octet[4], pAdapter->TupleCache[Index].MAC.Octet[5]);
+@@ -3806,15 +3808,15 @@
+
+ Routine Description:
+ Suspend MSDU transmission
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSuspendMsduTransmission(
+@@ -3829,15 +3831,15 @@
+
+ Routine Description:
+ Resume MSDU transmission
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPResumeMsduTransmission(
+@@ -3863,40 +3865,40 @@
+ Routine Description:
+ Apply packet filter policy, return NDIS_STATUS_FAILURE if this frame
+ should be dropped.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pRxD Pointer to the Rx descriptor
+ pHeader Pointer to the 802.11 frame header
+-
++
+ Return Value:
+ NDIS_STATUS_SUCCESS Accept frame
+ NDIS_STATUS_FAILURE Drop Frame
+-
++
+ Note:
+ Maganement frame should bypass this filtering rule.
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPApplyPacketFilter(
+- IN PRTMP_ADAPTER pAdapter,
+- IN PRXD_STRUC pRxD,
++ IN PRTMP_ADAPTER pAdapter,
++ IN PRXD_STRUC pRxD,
+ IN PHEADER_802_11 pHeader)
+ {
+ UCHAR i;
+-
++
+ // 0. Management frame should bypass all these filtering rules.
+ if (pHeader->Controlhead.Frame.Type == BTYPE_MGMT)
+ {
+ return(NDIS_STATUS_SUCCESS);
+ }
+-
++
+ // 0.1 Drop all Rx frames if MIC countermeasures kicks in
+ if (pAdapter->PortCfg.MicErrCnt >= 2)
+ {
+ return(NDIS_STATUS_FAILURE);
+ }
+-
++
+ // 1. Drop unicast to me packet if NDIS_PACKET_TYPE_DIRECTED is FALSE
+ if (pRxD->U2M)
+ {
+@@ -3905,7 +3907,7 @@
+ return(NDIS_STATUS_FAILURE);
+ }
+ }
+-
++
+ // 2. Drop broadcast packet if NDIS_PACKET_TYPE_BROADCAST is FALSE
+ else if (pRxD->Bcast)
+ {
+@@ -3914,7 +3916,7 @@
+ return(NDIS_STATUS_FAILURE);
+ }
+ }
+-
++
+ // 3. Drop multicast packet if NDIS_PACKET_TYPE_ALL_MULTICAST is false
+ // and NDIS_PACKET_TYPE_MULTICAST is false.
+ // If NDIS_PACKET_TYPE_MULTICAST is true, but NDIS_PACKET_TYPE_ALL_MULTICAST is false.
+@@ -3964,8 +3966,8 @@
+ {
+ return(NDIS_STATUS_FAILURE);
+ }
+-
+- return(NDIS_STATUS_SUCCESS);
++
++ return(NDIS_STATUS_SUCCESS);
+ }
+
+ /*
+@@ -3973,15 +3975,15 @@
+
+ Routine Description:
+ Check and fine the packet waiting in SW queue with highest priority
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ pQueue Pointer to Waiting Queue
+
+ Note:
+-
++
+ ========================================================================
+ */
+ struct sk_buff_head* RTMPCheckTxSwQueue(
+@@ -4019,20 +4021,20 @@
+
+ Routine Description:
+ Process MIC error indication and record MIC error timer.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pWpaKey Pointer to the WPA key structure
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPReportMicError(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PWPA_KEY pWpaKey)
+ {
+ ULONG Now;
+@@ -4044,7 +4046,7 @@
+
+ // 0. Set Status to indicate auth error
+ Report.Status.StatusType = Ndis802_11StatusType_Authentication;
+-
++
+ // 1. Check for Group or Pairwise MIC error
+ if (pWpaKey->Type == PAIRWISE_KEY)
+ Report.Request.Flags = NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR;
+@@ -4069,13 +4071,13 @@
+ if ((pAdapter->PortCfg.LastMicErrorTime + (60 * HZ)) < Now)
+ {
+ // Update Last MIC error time, this did not violate two MIC errors within 60 seconds
+- pAdapter->PortCfg.LastMicErrorTime = Now;
++ pAdapter->PortCfg.LastMicErrorTime = Now;
+ }
+ else
+ {
+- pAdapter->PortCfg.LastMicErrorTime = Now;
++ pAdapter->PortCfg.LastMicErrorTime = Now;
+ // Violate MIC error counts, MIC countermeasures kicks in
+- pAdapter->PortCfg.MicErrCnt++;
++ pAdapter->PortCfg.MicErrCnt++;
+ // We shall block all reception
+ // We shall clean all Tx ring and disassoicate from AP after next EAPOL frame
+ RTMPRingCleanUp(pAdapter, TX_RING);
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_def.h rt2500-cvs-2007061011/Module/rtmp_def.h
+--- rt2500-1.1.0-b4/Module/rtmp_def.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_def.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_def.h
+- *
++ *
+ * Abstract: Miniport related definition header
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 1st Aug 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 1st Aug 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RTMP_DEF_H__
+ #define __RTMP_DEF_H__
+@@ -38,11 +38,12 @@
+ //
+ // Debug information verbosity: lower values indicate higher urgency
+ //
+-#define RT_DEBUG_ERROR KERN_ERR
+-#define RT_DEBUG_WARN KERN_WARNING
+-#define RT_DEBUG_TRACE KERN_NOTICE
+-#define RT_DEBUG_INFO KERN_INFO
+-#define RT_DEBUG_LOUD KERN_DEBUG
++#define RT_DEBUG_OFF 0
++#define RT_DEBUG_ERROR 1
++#define RT_DEBUG_WARN 2
++#define RT_DEBUG_TRACE 4
++#define RT_DEBUG_INFO 8
++#define RT_DEBUG_LOUD 16
+
+ //
+ // update the driver version number every time you release a new driver
+@@ -190,8 +191,8 @@
+ #define HASH_TABLE_SIZE 256
+ #define MAX_LEN_OF_MLME_BUFFER 1024
+ #define MAX_FRAME_LEN 2338
+-#define MAX_VIE_LEN 128 // New for WPA cipher suite variable IE sizes.
+-#define MAX_MLME_HANDLER_MEMORY 20 //each them cantains MAX_LEN_OF_MLME_BUFFER size
++#define MAX_VIE_LEN 257 // sum of WPAx IEs
++#define MAX_MLME_HANDLER_MEMORY 20 //each them cantains MAX_LEN_OF_MLME_BUFFER size
+ #define MAX_INI_BUFFER_SIZE 1024
+
+ #define MAX_TX_POWER_LEVEL 100 /* mW */
+@@ -265,7 +266,7 @@
+ #define MLME_SUCCESS 0
+ #define MLME_UNSPECIFY_FAIL 1
+ #define MLME_CANNOT_SUPPORT_CAP 10
+-#define MLME_REASSOC_DENY_ASSOC_EXIST 11
++#define MLME_REASSOC_DENY_ASSOC_EXIST 11
+ #define MLME_ASSOC_DENY_OUT_SCOPE 12
+ #define MLME_ALG_NOT_SUPPORT 13
+ #define MLME_SEQ_NR_OUT_OF_SEQUENCE 14
+@@ -317,7 +318,7 @@
+
+ #define MT2_MLME_ASSOC_REQ 0
+ #define MT2_MLME_REASSOC_REQ 1
+-#define MT2_MLME_DISASSOC_REQ 2
++#define MT2_MLME_DISASSOC_REQ 2
+ #define MT2_PEER_DISASSOC_REQ 3
+ #define MT2_PEER_ASSOC_REQ 4
+ #define MT2_PEER_ASSOC_RSP 5
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_info.c rt2500-cvs-2007061011/Module/rtmp_info.c
+--- rt2500-1.1.0-b4/Module/rtmp_info.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_info.c 2007-05-31 22:45:43.000000000 +0200
+@@ -1,49 +1,50 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_info.c
+- *
+- * Abstract: IOCTL related subroutines
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * RoryC 3rd Jan 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract: IOCTL related subroutines
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * RoryC 3rd Jan 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * RobinC 10th Dec 04 RFMON Support
+- * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
++ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 15th Dec 04 Removed debug iwpriv
+ * RobinC 16th Dec 04 Fix for range values
+ * RobinC 16th Dec 04 support ifpreup scripts
+ * RobinC 17th Dec 04 Link Quality reporting
+ * MarkW 17th Dec 04 iwconfig frequency fix
+- * MarkW 17th Dec 04 Monitor mode through iwconfig
++ * MarkW 17th Dec 04 Monitor mode through iwconfig
+ * MarkW 22nd Dec 04 RSSI reporting for iwlist scanning
+ * MarkW 31st Jan 05 if pre-up fix for RaConfig
+ * LuisCorreia 23rd Feb 05 fix unknown IOCTL's
+ * MarkW 9th Mar 05 Quality reporting in scan for current
+ * MarkW 9th Jun 05 Fix channel change for ADHOC mode
+- ***************************************************************************/
++ * RomainB 31st Dec 06 RFMON getter
++ ***************************************************************************/
+
+ #include "rt_config.h"
+ #include <net/iw_handler.h>
+@@ -154,7 +155,7 @@
+ }
+
+ struct iw_priv_args privtab[] = {
+-{ RTPRIV_IOCTL_SET,
++{ RTPRIV_IOCTL_SET,
+ IW_PRIV_TYPE_CHAR | 1024, 0,
+ "set"},
+ { RTPRIV_IOCTL_BBP,
+@@ -166,9 +167,12 @@
+ { RTPRIV_IOCTL_E2P,
+ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,
+ "e2p"},
+-{ RTPRIV_IOCTL_RFMONTX,
+- IW_PRIV_TYPE_INT | 2, IW_PRIV_TYPE_CHAR | sizeof (char),
+- "rfmontx"}
++{ RTPRIV_IOCTL_SET_RFMONTX,
++ IW_PRIV_TYPE_INT | 2, 0,
++ "rfmontx"},
++{ RTPRIV_IOCTL_GET_RFMONTX,
++ 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
++ "get_rfmontx"}
+ };
+
+ static struct {
+@@ -198,6 +202,9 @@
+ {"Key4", Set_Key4_Proc},
+ {"WPAPSK", Set_WPAPSK_Proc},
+ {"WPANONE", Set_WPANONE_Proc},
++#ifdef RT2500_DBG
++ {"Debug", Set_Debug_Proc},
++#endif
+
+ #ifdef RALINK_ATE
+ {"ATE", Set_ATE_Proc }, // set ATE Mode to: STOP, TXCONT, TXCARR, TXFRAME, RXFRAME
+@@ -233,7 +240,13 @@
+ u16 val;
+ int i,chan;
+
+- DBGPRINT(RT_DEBUG_TRACE,"0. rtusb_ioctl_giwrange\n");
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++
++ DBGPRINT(RT_DEBUG_TRACE,"0. rt_ioctl_giwrange\n");
+ data->length = sizeof(struct iw_range);
+ memset(range, 0, sizeof(struct iw_range));
+
+@@ -266,7 +279,7 @@
+ {
+ range->freq[val].i = chan;
+ MAP_CHANNEL_ID_TO_KHZ(range->freq[val].i, range->freq[val].m);
+- range->freq[val].m*=100;
++ range->freq[val].m*=100;
+ range->freq[val].e = 1;
+ val++;
+ }
+@@ -335,8 +348,8 @@
+ char *this_char;
+ char *value;
+ int Status;
+-
+- while ((this_char = strsep(&extra, ",")) != NULL)
++
++ while ((this_char = strsep(&extra, ",")) != NULL)
+ {
+ if (!*this_char)
+ continue;
+@@ -349,8 +362,8 @@
+
+ for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++)
+ {
+- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
+- {
++ if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
++ {
+ if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value))
+ { //FALSE:Set private failed then return Invalid argument
+ Status = -EINVAL;
+@@ -382,6 +395,13 @@
+ PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ int Status = NDIS_STATUS_SUCCESS;
+ BOOLEAN StateMachineTouched = FALSE;
++
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ return 0;
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_MLME_INITIALIZED))
+@@ -390,7 +410,7 @@
+ Now = jiffies;
+
+ if ((pAdapter->MediaState == NdisMediaStateConnected) &&
+- ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)
+ )
+@@ -413,15 +433,17 @@
+ pAdapter->PortCfg.IgnoredScanNumber = 0;
+ pAdapter->PortCfg.LastScanTime = Now;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+
+ Status = NDIS_STATUS_SUCCESS;
+ StateMachineTouched = TRUE;
+ }while(0);
++ if(StateMachineTouched) // Upper layer sent a MLME-related operations
++ MlmeHandler(pAdapter);
+ return 0;
+ }
+ int
+@@ -437,7 +459,19 @@
+ char *current_val;
+ struct iw_event iwe;
+
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++ //check if the interface is down
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
++ DBGPRINT(RT_DEBUG_TRACE, "INFO::Network is down!\n");
++ return -ENETDOWN;
++ }
++ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)){
++ /*
++ * Still scanning, indicate the caller should try again.
++ */
++ DBGPRINT(RT_DEBUG_TRACE, "%s: still scanning\n", __FUNCTION__);
++ return -EAGAIN;
++ }
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ if (current_ev >= end_buf)
+ break;
+@@ -511,25 +545,25 @@
+ iwe.u.qual.qual = pAdapter->Mlme.ChannelQuality;
+ else
+ iwe.u.qual.qual = 0;
+- iwe.u.qual.level = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
++ iwe.u.qual.level = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
+ iwe.u.qual.noise = pAdapter->PortCfg.BssTab.BssEntry[i].Noise;
+- //iwe.u.qual.noise = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value); // // noise level (dBm)
++ //iwe.u.qual.noise = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value); // // noise level (dBm)
+
+- current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_QUAL_LEN);
++ current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_QUAL_LEN);
+
+
+ //================================
+ memset(&iwe, 0, sizeof(iwe));
+ }
+ data->length = current_ev - extra;
+- DBGPRINT(RT_DEBUG_TRACE,"rtusb_ioctl_giwscan. %d BSS returned\n",pAdapter->PortCfg.BssTab.BssNr);
++ DBGPRINT(RT_DEBUG_TRACE,"rt_ioctl_giwscan. %d BSS returned\n",pAdapter->PortCfg.BssTab.BssNr);
+ return 0;
+ }
+ #endif
+ static const iw_handler rt_handler[] =
+ {
+ (iw_handler) NULL, /* SIOCSIWCOMMIT */
+- (iw_handler) NULL, /* SIOCGIWNAME 1 */
++ (iw_handler) NULL, /* SIOCGIWNAME 1 */
+ (iw_handler) NULL, /* SIOCSIWNWID */
+ (iw_handler) NULL, /* SIOCGIWNWID */
+ (iw_handler) NULL, /* SIOCSIWFREQ */
+@@ -641,9 +675,11 @@
+ }
+ break;
+ case OID_802_11_BSSID_LIST_SCAN:
++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_MLME_INITIALIZED))
++ break;
+ Now = jiffies;
+- TxTotalCnt = pAdapter->DrsCounters.OneSecTxOkCount +
+- pAdapter->DrsCounters.OneSecTxRetryOkCount +
++ TxTotalCnt = pAdapter->DrsCounters.OneSecTxOkCount +
++ pAdapter->DrsCounters.OneSecTxRetryOkCount +
+ pAdapter->DrsCounters.OneSecTxFailCount;
+ DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_BSSID_LIST_SCAN, TxCnt = %d \n", TxTotalCnt);
+ // For XP WZC, we will allow scan every 10 times, roughly 10 minutes.
+@@ -657,9 +693,9 @@
+ pAdapter->PortCfg.IgnoredScanNumber++;
+ break;
+ }
+-
++
+ if ((pAdapter->MediaState == NdisMediaStateConnected) &&
+- ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
++ ((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||
+ (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) &&
+ (pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)
+ )
+@@ -682,10 +718,10 @@
+ pAdapter->PortCfg.IgnoredScanNumber = 0;
+ pAdapter->PortCfg.LastScanTime = Now;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID_LIST_SCAN,
+- 0,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID_LIST_SCAN,
++ 0,
+ NULL);
+
+ Status = NDIS_STATUS_SUCCESS;
+@@ -710,13 +746,13 @@
+ {
+ MlmeRestartStateMachine(pAdapter);
+ DBGPRINT(RT_DEBUG_TRACE, "!!! MLME busy, reset MLME state machine !!!\n");
+- }
++ }
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid
+@@ -746,11 +782,11 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID,
+ sizeof(NDIS_802_11_MAC_ADDRESS),
+ (VOID *)&Bssid);
+ Status = NDIS_STATUS_SUCCESS;
+@@ -906,7 +942,7 @@
+ }
+ break;
+ case OID_802_11_AUTHENTICATION_MODE:
+- if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
++ if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
+ Status = -EINVAL;
+ else
+ {
+@@ -941,7 +977,7 @@
+ Status = -EINVAL;
+ break;
+ }
+- if (BssType == Ndis802_11IBSS)
++ if (BssType == Ndis802_11IBSS)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_INDEP)
+ {
+@@ -951,7 +987,7 @@
+ pAdapter->PortCfg.BssType = BSS_INDEP;
+ DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (AD-HOC)\n");
+ }
+- else if (BssType == Ndis802_11Infrastructure)
++ else if (BssType == Ndis802_11Infrastructure)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_INFRA)
+ {
+@@ -1028,7 +1064,7 @@
+ break;
+ }
+ // save user's policy here, but not change PortCfg.Psm immediately
+- if (PowerMode == Ndis802_11PowerModeCAM)
++ if (PowerMode == Ndis802_11PowerModeCAM)
+ {
+ // clear PSM bit immediately
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+@@ -1037,7 +1073,7 @@
+ pAdapter->PortCfg.WindowsPowerMode = PowerMode;
+ pAdapter->PortCfg.WindowsBatteryPowerMode = PowerMode;
+ }
+- else if (PowerMode == Ndis802_11PowerModeMAX_PSP)
++ else if (PowerMode == Ndis802_11PowerModeMAX_PSP)
+ {
+ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
+ // to exclude certain situations.
+@@ -1048,7 +1084,7 @@
+ pAdapter->PortCfg.RecvDtim = TRUE; // FALSE;
+ pAdapter->PortCfg.DefaultListenCount = 5;
+ }
+- else if (PowerMode == Ndis802_11PowerModeFast_PSP)
++ else if (PowerMode == Ndis802_11PowerModeFast_PSP)
+ {
+ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
+ // to exclude certain situations.
+@@ -1236,6 +1272,8 @@
+ Status = -EOPNOTSUPP;
+ break;
+ }
++ if(StateMachineTouched) // Upper layer sent a MLME-related operations
++ MlmeHandler(pAdapter);
+
+ return Status;
+ }
+@@ -1305,8 +1343,8 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_BSSID_LIST (%d BSS returned)\n",pAdapter->PortCfg.BssTab.BssNr);
+ // Claculate total buffer size required
+ BssBufSize = sizeof(ULONG);
+-
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ // Align pointer to 4 bytes boundary.
+ Padding = 4 - (pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen & 0x0003);
+@@ -1328,13 +1366,13 @@
+ memset(pBuf, 0, BssBufSize);
+ pBssidList = (PNDIS_802_11_BSSID_LIST_EX) pBuf;
+ pBssidList->NumberOfItems = pAdapter->PortCfg.BssTab.BssNr;
+-
++
+ // Calculate total buffer length
+ BssLen = 4; // Consist of NumberOfItems
+ // Point to start of NDIS_WLAN_BSSID_EX
+ // pPtr = pBuf + sizeof(ULONG);
+ pPtr = (PUCHAR) &pBssidList->Bssid[0];
+- for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
++ for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++)
+ {
+ pBss = (PNDIS_WLAN_BSSID_EX) pPtr;
+ memcpy(&pBss->MacAddress, &pAdapter->PortCfg.BssTab.BssEntry[i].Bssid, ETH_ALEN);
+@@ -1348,7 +1386,7 @@
+ memcpy(pBss->Ssid.Ssid, pAdapter->PortCfg.BssTab.BssEntry[i].Ssid, pAdapter->PortCfg.BssTab.BssEntry[i].SsidLen);
+ }
+ pBss->Privacy = pAdapter->PortCfg.BssTab.BssEntry[i].Privacy;
+- pBss->Rssi = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - pAdapter->PortCfg.RssiToDbm;
++ pBss->Rssi = pAdapter->PortCfg.BssTab.BssEntry[i].Rssi - pAdapter->PortCfg.RssiToDbm;
+ pBss->NetworkTypeInUse = Ndis802_11DS;
+ pBss->Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);
+ pBss->Configuration.BeaconPeriod = pAdapter->PortCfg.BssTab.BssEntry[i].BeaconPeriod;
+@@ -1356,7 +1394,7 @@
+
+ MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.BssTab.BssEntry[i].Channel, pBss->Configuration.DSConfig);
+
+- if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == BSS_INFRA)
++ if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == BSS_INFRA)
+ pBss->InfrastructureMode = Ndis802_11Infrastructure;
+ else
+ pBss->InfrastructureMode = Ndis802_11IBSS;
+@@ -1370,12 +1408,12 @@
+ {
+ pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs);
+ memcpy(pBss->IEs, &pAdapter->PortCfg.BssTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs));
+- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs);
++ pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs);
+ }
+ else
+ {
+ pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen;
+- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs);
++ pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs);
+ memcpy(pBss->IEs, &pAdapter->PortCfg.BssTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs));
+ memcpy(pPtr, pAdapter->PortCfg.BssTab.BssEntry[i].VarIEs, pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen);
+ pPtr += pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen;
+@@ -1385,7 +1423,7 @@
+ if (Padding == 4)
+ Padding = 0;
+ pPtr += Padding;
+- pBss->Length = sizeof(NDIS_WLAN_BSSID_EX) - 4 + sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen + Padding;
++ pBss->Length = sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs) + pAdapter->PortCfg.BssTab.BssEntry[i].VarIELen + Padding;
+ BssLen += pBss->Length;
+ }
+ wrq->u.data.length = BssLen;
+@@ -1451,11 +1489,11 @@
+ wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION);
+ if(copy_to_user(wrq->u.data.pointer, &Configuration, wrq->u.data.length))
+ Status = -EFAULT;
+- DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,Channel=%d) \n",
++ DBGPRINT(RT_DEBUG_TRACE, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,Channel=%d) \n",
+ Configuration.BeaconPeriod, Configuration.ATIMWindow, pAdapter->PortCfg.Channel);
+ break;
+ case OID_802_11_RSSI:
+- ulInfo = pAdapter->PortCfg.LastRssi - pAdapter->PortCfg.RssiToDbm;
++ ulInfo = pAdapter->PortCfg.LastRssi - pAdapter->PortCfg.RssiToDbm;
+ wrq->u.data.length = sizeof(ulInfo);
+ if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))
+ Status = -EFAULT;
+@@ -1484,7 +1522,7 @@
+ Statistics.FrameDuplicateCount.QuadPart = pAdapter->WlanCounters.FrameDuplicateCount.QuadPart;
+ Statistics.ReceivedFragmentCount.QuadPart = pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart;
+ Statistics.MulticastReceivedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastReceivedFrameCount.QuadPart;
+-#ifdef RT2500_DBG
++#ifdef RT2500_DBG
+ Statistics.FCSErrorCount = pAdapter->RalinkCounters.RealFcsErrCount;
+ #else
+ Statistics.FCSErrorCount.QuadPart = pAdapter->WlanCounters.FCSErrorCount.QuadPart;
+@@ -1611,8 +1649,8 @@
+ }
+
+ INT RT2500_ioctl(
+- IN struct net_device *net_dev,
+- IN OUT struct ifreq *rq,
++ IN struct net_device *net_dev,
++ IN OUT struct ifreq *rq,
+ IN INT cmd)
+ {
+ PRTMP_ADAPTER pAdapter= net_dev->priv;
+@@ -1624,16 +1662,17 @@
+ NDIS_802_11_RTS_THRESHOLD RtsThresh;
+ NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
+ NDIS_802_11_MAC_ADDRESS Bssid;
+- INT Status = NDIS_STATUS_SUCCESS;
++ INT Status = NDIS_STATUS_SUCCESS;
+ USHORT subcmd;
+ BOOLEAN StateMachineTouched = FALSE;
+ int i, chan = -1, index = 0, len = 0;
++ ULONG Length;
+
+
+ switch(cmd) {
+ case SIOCGIWNAME:
+ DBGPRINT(RT_DEBUG_TRACE, "IOCTL::SIOCGIWNAME\n");
+- strcpy(wrq->u.name, "RT2500 Wireless"); //Less then 16 bytes.
++ strcpy(wrq->u.name, "RT2500 Wireless"); //Less then 16 bytes.
+ break;
+ case SIOCSIWESSID: //Set ESSID
+ erq = &wrq->u.essid;
+@@ -1646,30 +1685,36 @@
+ break;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
++ Length = erq->length - 1; // minux null character.
++#else
++ Length = erq->length;
++#endif
++
+ if(RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ {
+- if (copy_from_user(Ssid.Ssid, erq->pointer, (erq->length - 1)))
++ if (copy_from_user(Ssid.Ssid, erq->pointer, Length))
+ {
+ Status = -EFAULT;
+ break;
+ }
+- Ssid.SsidLength = erq->length - 1; //minus null character.
++ Ssid.SsidLength = Length;
+ }else{
+ // This SEEMS to be needed to actual work RobinC when iface
+ // is down
+- if (copy_from_user(pAdapter->PortCfg.Ssid, erq->pointer, (erq->length - 1)))
++ if (copy_from_user(pAdapter->PortCfg.Ssid, erq->pointer, Length))
+ {
+ Status = -EFAULT;
+ break;
+ }
+- pAdapter->PortCfg.SsidLen = erq->length - 1; //minus null character.
++ pAdapter->PortCfg.SsidLen = Length;
+
+- memcpy(pAdapter->Mlme.CntlAux.Ssid, pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);
+- pAdapter->Mlme.CntlAux.SsidLen = pAdapter->PortCfg.SsidLen;
++ memcpy(pAdapter->Mlme.CntlAux.Ssid, pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);
++ pAdapter->Mlme.CntlAux.SsidLen = pAdapter->PortCfg.SsidLen;
+ }
+ }
+ else
+- Ssid.SsidLength = 0; // ANY ssid
++ Ssid.SsidLength = 0; // ANY ssid
+
+ pSsid = &Ssid;
+
+@@ -1686,10 +1731,10 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid
+@@ -1708,7 +1753,7 @@
+ Status = -EFAULT;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCGIWESSID (Len=%d, ssid=%s...)\n", erq->length, pAdapter->PortCfg.Ssid);
+ break;
+- case SIOCGIWNWID: // get network id
++ case SIOCGIWNWID: // get network id
+ Status = -EOPNOTSUPP;
+ break;
+ case SIOCSIWNWID: // set network id (the cell)
+@@ -1717,14 +1762,14 @@
+ case SIOCSIWFREQ: // set channel/frequency (Hz)
+ frq = &wrq->u.freq;
+ if((frq->e == 0) && (frq->m <= 1000))
+- chan = frq->m; // Setting by channel number
++ chan = frq->m; // Setting by channel number
+ else
+- MAP_KHZ_TO_CHANNEL_ID( (frq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G,
++ MAP_KHZ_TO_CHANNEL_ID( (frq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G,
+ pAdapter->PortCfg.IbssConfig.Channel = chan;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->PortCfg.IbssConfig.Channel);
+ if(RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE) && (pAdapter->PortCfg.BssType == BSS_MONITOR || pAdapter->PortCfg.BssType == BSS_INDEP))
+ {
+- pAdapter->PortCfg.Channel = chan;
++ pAdapter->PortCfg.Channel = chan;
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+ }
+@@ -1822,7 +1867,7 @@
+ if(wrq->u.encoding.pointer)
+ {
+ wrq->u.encoding.length = pAdapter->PortCfg.SharedKey[index].KeyLen;
+- if(copy_to_user(wrq->u.encoding.pointer,
++ if(copy_to_user(wrq->u.encoding.pointer,
+ pAdapter->PortCfg.SharedKey[index].Key,
+ pAdapter->PortCfg.SharedKey[index].KeyLen))
+ Status = -EFAULT;
+@@ -1843,14 +1888,15 @@
+ len = WEP_LARGE_KEY_LEN;
+
+ memset(pAdapter->PortCfg.SharedKey[index].Key, 0x00, MAX_LEN_OF_KEY);
+- if(copy_from_user(pAdapter->PortCfg.SharedKey[index].Key,
++ if(copy_from_user(pAdapter->PortCfg.SharedKey[index].Key,
+ wrq->u.encoding.pointer, len)){
+ Status = -EINVAL;
+ break;
+ }
+ pAdapter->PortCfg.SharedKey[index].KeyLen = len <= WEP_SMALL_KEY_LEN ? WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN;
+ }
+- pAdapter->PortCfg.DefaultKeyId = (UCHAR) index;
++ else
++ pAdapter->PortCfg.DefaultKeyId = (UCHAR) index;
+ if (wrq->u.encoding.flags & IW_ENCODE_DISABLED)
+ pAdapter->PortCfg.WepStatus = Ndis802_11WEPDisabled;
+ else
+@@ -1858,7 +1904,7 @@
+
+ if (wrq->u.encoding.flags & IW_ENCODE_RESTRICTED)
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeShared;
+- if (wrq->u.encoding.flags & IW_ENCODE_OPEN)
++ if (wrq->u.encoding.flags & IW_ENCODE_OPEN)
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen;
+
+ if(pAdapter->PortCfg.WepStatus == Ndis802_11WEPDisabled)
+@@ -1905,11 +1951,11 @@
+
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
+- OID_802_11_BSSID,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
++ OID_802_11_BSSID,
+ sizeof(NDIS_802_11_MAC_ADDRESS),
+ (VOID *)&Bssid);
+ Status = NDIS_STATUS_SUCCESS;
+@@ -1928,13 +1974,13 @@
+ BssType = Ndis802_11Infrastructure;
+ wrq->u.mode = IW_MODE_INFRA;
+ }
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ else if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+ {
+ BssType = Ndis802_11Monitor;
+ wrq->u.mode = IW_MODE_MONITOR;
+ }
+-#endif
++#endif
+ else
+ {
+ BssType = Ndis802_11AutoUnknown;
+@@ -1963,7 +2009,7 @@
+ pAdapter->PortCfg.BssType = BSS_INFRA;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWMODE (INFRA)\n");
+ }
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ else if (wrq->u.mode == IW_MODE_MONITOR)
+ {
+ if (pAdapter->PortCfg.BssType != BSS_MONITOR)
+@@ -1974,7 +2020,7 @@
+ pAdapter->PortCfg.BssType = BSS_MONITOR;
+ DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCSIWMODE (MONITOR)\n");
+ }
+-#endif
++#endif
+ else
+ {
+ Status = -ENOSYS;
+@@ -1999,7 +2045,7 @@
+ }
+ else
+ {
+- pAdapter->net_dev->type = 1;
++ pAdapter->net_dev->type = 1;
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
+ }
+ }
+@@ -2013,23 +2059,23 @@
+ Status = -EOPNOTSUPP;
+ break;
+ case SIOCGIWTXPOW: //get transmit power (dBm)
+-#if WIRELESS_EXT >= 17
++#if WIRELESS_EXT >= 17
+ // Krellan: Get TxPower in dBm now, not percentage
+ {
+ ULONG R3;
+ UCHAR Channel = pAdapter->PortCfg.Channel;
+-
++
+ // Krellan: This code comes from AsicSwitchChannel(),
+ // as we must know the channel we are currently on,
+ // in order to get the correct EEPROM-recommended
+ // value to establish as 0 dBm.
+- if (Channel <= 14)
++ if (Channel <= 14)
+ R3 = pAdapter->PortCfg.ChannelTxPower[Channel - 1];
+- else
++ else
+ R3 = pAdapter->PortCfg.ChannelTxPower[0];
+
+ if (R3 > 31) R3 = 31;
+-
++
+ wrq->u.txpower.value = pAdapter->PortCfg.TxPowerDriver - R3;
+ wrq->u.txpower.flags = IW_TXPOW_DBM;
+ wrq->u.txpower.fixed = !(pAdapter->PortCfg.TxPowerAuto);
+@@ -2061,7 +2107,7 @@
+ else
+ {
+ Value = wrq->u.txpower.value;
+-
++
+ if (Value < MIN_TXPOWER_DBM || Value > MAX_TXPOWER_DBM)
+ {
+ Status = -EINVAL;
+@@ -2107,14 +2153,14 @@
+ break;
+
+ case RTPRIV_IOCTL_SET:
+- {
++ {
+ char *this_char;
+ char *value;
+
+ if( !access_ok(VERIFY_READ, wrq->u.data.pointer, wrq->u.data.length) )
+ break;
+
+- while ((this_char = strsep((char**)&wrq->u.data.pointer, ",")) != NULL)
++ while ((this_char = strsep((char**)&wrq->u.data.pointer, ",")) != NULL)
+ {
+ if (!*this_char)
+ continue;
+@@ -2127,8 +2173,8 @@
+
+ for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++)
+ {
+- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
+- {
++ if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)
++ {
+ if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value))
+ { //FALSE:Set private failed then return Invalid argument
+ Status = -EINVAL;
+@@ -2161,8 +2207,12 @@
+ break;
+ #endif
+
+- case RTPRIV_IOCTL_RFMONTX:
+- Status = RTMPIoctlRFMONTX(pAdapter, wrq);
++ case RTPRIV_IOCTL_SET_RFMONTX:
++ Status = RTMPIoctlSetRFMONTX(pAdapter, wrq);
++ break;
++
++ case RTPRIV_IOCTL_GET_RFMONTX:
++ Status = RTMPIoctlGetRFMONTX(pAdapter, wrq);
+ break;
+
+ default:
+@@ -2181,7 +2231,7 @@
+ UCHAR BCAST[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Add WPA key process
+
+@@ -2193,7 +2243,7 @@
+ NDIS_SUCCESS Add key successfully
+
+ Note:
+-
++
+ ========================================================================
+ */
+ NDIS_STATUS RTMPWPAAddKeyProc(
+@@ -2228,7 +2278,7 @@
+ // 1. KeyIdx must be 0, otherwise, return NDIS_STATUS_INVALID_DATA
+ if (KeyIdx != 0)
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // 2. Check bTx, it must be true, otherwise, return NDIS_STATUS_INVALID_DATA
+ if (bTxKey == FALSE)
+ return(NDIS_STATUS_FAILURE);
+@@ -2236,7 +2286,7 @@
+ // 3. If BSSID is not all 0xff, return NDIS_STATUS_INVALID_DATA
+ if (NdisEqualMemory(pKey->BSSID, BCAST, 6))
+ return(NDIS_STATUS_FAILURE);
+-
++
+ // 4. Selct RxMic / TxMic based on Supp / Authenticator
+ if (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPANone)
+ {
+@@ -2277,16 +2327,16 @@
+ // 6. Check RxTsc
+ if (bKeyRSC == TRUE)
+ {
+- memcpy(&pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, &pKey->KeyRSC, 6);
++ memcpy(&pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, &pKey->KeyRSC, 6);
+ }
+ else
+ {
+- memset(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, 0, 6);
++ memset(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc, 0, 6);
+ }
+
+ // 7. Copy information into Pairwise Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.PairwiseKey[PairwiseIdx].KeyLen = 16;
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].KeyLen = 16;
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key, &pKey->KeyMaterial, 16);
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic, pRxMic, 8);
+ memcpy(pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic, pTxMic, 8);
+@@ -2300,36 +2350,43 @@
+ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxTsc[5] = 0;
+ Status = NDIS_STATUS_SUCCESS;
+
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Key = ");
++#ifdef RT2500_DBG
++ printk("Pairwise Key (Index-%d) = ", PairwiseIdx);
+ for (i = 0; i < 16; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].Key[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Rx MIC Key = ");
++ printk("\n");
++ printk("PairwiseKey Rx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Tx MIC Key = ");
++ printk("\n");
++ printk("PairwiseKey Tx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].TxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP RxTSC = ");
++ printk("\n");
++ printk("RxTSC = ");
+ for (i = 0; i < 6; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc[i]);
++ printk("%02x:",
++ pAdapter->PortCfg.PairwiseKey[PairwiseIdx].RxTsc[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
+- pKey->BSSID[0],pKey->BSSID[1],pKey->BSSID[2],pKey->BSSID[3],pKey->BSSID[4],pKey->BSSID[5]);
+-
++ printk("\n");
++ printk("BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
++ pKey->BSSID[0], pKey->BSSID[1], pKey->BSSID[2],
++ pKey->BSSID[3], pKey->BSSID[4], pKey->BSSID[5]);
++#endif
+ }
+ else // Group Key
+ {
++ DBGPRINT(RT_DEBUG_TRACE, "Ready to set Group key\n");
+ // 1. Check BSSID, if not current BSSID or Bcast, return NDIS_STATUS_INVALID_DATA
+ if ((!NdisEqualMemory(&pKey->BSSID, &BCAST, 6)) &&
+ (!NdisEqualMemory(&pKey->BSSID, &pAdapter->PortCfg.Bssid, 6)))
+@@ -2374,7 +2431,7 @@
+
+ // 6. Copy information into Group Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.GroupKey[KeyIdx].KeyLen = 16;
++ pAdapter->PortCfg.GroupKey[KeyIdx].KeyLen = 16;
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].Key, &pKey->KeyMaterial, 16);
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].RxMic, pRxMic, 8);
+ memcpy(pAdapter->PortCfg.GroupKey[KeyIdx].TxMic, pTxMic, 8);
+@@ -2397,33 +2454,35 @@
+ memcpy(pAdapter->PortCfg.SharedKey[KeyIdx].Key, &pKey->KeyMaterial, pKey->KeyLength);
+ }
+
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Key = ");
++#ifdef RT2500_DBG
++ printk("GroupKey Key (Index-%d) = ", KeyIdx);
+ for (i = 0; i < 16; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].Key[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].Key[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Rx MIC Key = ");
++ printk("\n");
++ printk("GroupKey Rx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxMic[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP Tx MIC Key = ");
++ printk("\n");
++ printk("GroupKey Tx MIC Key = ");
+ for (i = 0; i < 8; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].TxMic[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].TxMic[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "TKIP RxTSC = ");
++ printk("\n");
++ printk("RxTSC = ");
+ for (i = 0; i < 6; i++)
+ {
+- DBGPRINT(RT_DEBUG_INFO, "%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxTsc[i]);
++ printk("%02x:", pAdapter->PortCfg.GroupKey[KeyIdx].RxTsc[i]);
+ }
+- DBGPRINT(RT_DEBUG_INFO, "\n");
+- DBGPRINT(RT_DEBUG_INFO, "BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
+- pKey->BSSID[0],pKey->BSSID[1],pKey->BSSID[2],pKey->BSSID[3],pKey->BSSID[4],pKey->BSSID[5]);
+-
++ printk("\n");
++ printk("BSSID:%02x:%02x:%02x:%02x:%02x:%02x \n",
++ pKey->BSSID[0], pKey->BSSID[1], pKey->BSSID[2],
++ pKey->BSSID[3], pKey->BSSID[4], pKey->BSSID[5]);
++#endif
+ }
+ return (Status);
+ }
+@@ -2499,7 +2558,7 @@
+ break;
+ }
+ }
+-
++
+ }
+ // c. If no pairwise supported, delete Group Key 0.
+ // The will be false since we do support pairwise keys.
+@@ -2545,7 +2604,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPWPARemoveAllKeys(
+@@ -2562,7 +2621,7 @@
+ {
+ pAdapter->PortCfg.PairwiseKey[i].KeyLen = 0;
+ }
+-
++
+ for (i = 0; i < GROUP_KEY_NO; i++)
+ {
+ pAdapter->PortCfg.GroupKey[i].KeyLen = 0;
+@@ -2578,7 +2637,7 @@
+ Arguments:
+ pAdapter Pointer to our adapter
+ phmode
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetPhyMode(
+@@ -2586,7 +2645,7 @@
+ IN ULONG phymode)
+ {
+ INT i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"RTMPSetPhyMode(=%d)\n", phymode);
+
+ // the selected phymode must be supported by the RF IC encoded in E2PROM
+@@ -2611,7 +2670,7 @@
+ if (i == pAdapter->PortCfg.ChannelListNum)
+ pAdapter->PortCfg.IbssConfig.Channel = FirstChannel(pAdapter);
+ pAdapter->PortCfg.Channel = pAdapter->PortCfg.IbssConfig.Channel;
+-
++
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+
+@@ -2859,7 +2918,7 @@
+ // Changing DesiredRate may affect the MAX TX rate we used to TX frames out
+ MlmeUpdateTxRates(pAdapter, FALSE);
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Country Region
+@@ -2868,7 +2927,7 @@
+ ==========================================================================
+ */
+ INT Set_CountryRegion_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG region;
+@@ -2886,7 +2945,7 @@
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set SSID
+@@ -2895,7 +2954,7 @@
+ ==========================================================================
+ */
+ INT Set_SSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ NDIS_802_11_SSID Ssid, *pSsid=NULL;
+@@ -2904,8 +2963,8 @@
+
+
+ /* Protect against oops if net is down, this will not work with if-preup
+- use iwconfig properly */
+- printk("'iwpriv <dev> set essid' is deprecated, please use 'iwconfg <dev> essid' instead\n");
++ use iwconfig properly */
++ printk("'iwpriv <dev> set essid' is deprecated, please use 'iwconfg <dev> essid' instead\n");
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ return FALSE;
+
+@@ -2916,8 +2975,8 @@
+ Ssid.SsidLength = strlen(arg);
+ pSsid = &Ssid;
+
+-
+-
++
++
+ if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE)
+ {
+ MlmeRestartStateMachine(pAdapter);
+@@ -2925,10 +2984,10 @@
+ }
+ // tell CNTL state machine to call NdisMSetInformationComplete() after completing
+ // this request, because this request is initiated by NDIS.
+- pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
++ pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;
+
+- MlmeEnqueue(&pAdapter->Mlme.Queue,
+- MLME_CNTL_STATE_MACHINE,
++ MlmeEnqueue(&pAdapter->Mlme.Queue,
++ MLME_CNTL_STATE_MACHINE,
+ OID_802_11_SSID,
+ sizeof(NDIS_802_11_SSID),
+ (VOID *)pSsid);
+@@ -2944,7 +3003,7 @@
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Wireless Mode
+@@ -2953,26 +3012,24 @@
+ ==========================================================================
+ */
+ INT Set_WirelessMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG WirelessMode;
+ int success = TRUE;
+
+ WirelessMode = simple_strtol(arg, 0, 10);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_WirelessMode_Proc::(=%d)\n", WirelessMode);
+
+ if ((WirelessMode == PHY_11BG_MIXED) || (WirelessMode == PHY_11B) ||
+ (WirelessMode == PHY_11A) || (WirelessMode == PHY_11ABG_MIXED))
+- {
+ RTMPSetPhyMode(pAdapter, WirelessMode);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_WirelessMode_Proc::(=%d)\n", WirelessMode);
+- }
+ else
+ success = FALSE;
+
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxRate
+@@ -2981,7 +3038,7 @@
+ ==========================================================================
+ */
+ INT Set_TxRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TxRate;
+@@ -2996,7 +3053,7 @@
+ RTMPSetDesiredRates(pAdapter, (LONG) (rate_mapping[TxRate-1] * 1000000));
+ return success;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set AdhocMode support Rate can or can not exceed 11Mbps against WiFi spec.
+@@ -3005,7 +3062,7 @@
+ ==========================================================================
+ */
+ INT Set_AdhocModeRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG AdhocMode;
+@@ -3017,13 +3074,13 @@
+ else if (AdhocMode == 0)
+ pAdapter->PortCfg.AdhocMode = 0;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_AdhocModeRate_Proc::(AdhocMode=%d)\n", pAdapter->PortCfg.AdhocMode);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Channel
+@@ -3032,7 +3089,7 @@
+ ==========================================================================
+ */
+ INT Set_Channel_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int success = TRUE;
+@@ -3051,7 +3108,32 @@
+
+ return success;
+ }
+-/*
++/*
++ ==========================================================================
++ Description:
++ For Debug information
++ Return:
++ TRUE if all parameters are OK, FALSE otherwise
++ ==========================================================================
++*/
++#ifdef RT2500_DBG
++INT Set_Debug_Proc(
++ IN PRTMP_ADAPTER pAdapter,
++ IN PUCHAR arg)
++
++{
++ DBGPRINT(RT_DEBUG_TRACE, "**************************************************************\n");
++ DBGPRINT(RT_DEBUG_TRACE, "==> Set_Debug_Proc arg=%s\n", arg);
++ //To do here.
++
++ rt2500_setdbg(simple_strtoul(arg, 0, 0));
++
++ DBGPRINT(RT_DEBUG_TRACE, "<== Set_Debug_Proc\n");
++ DBGPRINT(RT_DEBUG_TRACE, "**************************************************************\n");
++ return TRUE;
++}
++#endif
++/*
+ ==========================================================================
+ Description:
+ Set 11B/11G Protection
+@@ -3060,7 +3142,7 @@
+ ==========================================================================
+ */
+ INT Set_BGProtection_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+
+ {
+@@ -3074,15 +3156,15 @@
+ break;
+ case 2: //Always OFF
+ pAdapter->PortCfg.UseBGProtection = 2;
+- break;
+- default: //Invalid argument
++ break;
++ default: //Invalid argument
+ return FALSE;
+ }
+ DBGPRINT(RT_DEBUG_TRACE, "Set_BGProtection_Proc::(BGProtection=%d)\n", pAdapter->PortCfg.UseBGProtection);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set StaWithEtherBridge function on/off
+@@ -3091,7 +3173,7 @@
+ ==========================================================================
+ */
+ INT Set_StaWithEtherBridge_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+
+ {
+@@ -3103,14 +3185,14 @@
+ case 1: //On
+ pAdapter->PortCfg.StaWithEtherBridge.Enable = TRUE;
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ return FALSE;
+ }
+ DBGPRINT(RT_DEBUG_TRACE, "Set_StaWithEtherBridge_Proc::(StaWithEtherBridge=%d)\n", pAdapter->PortCfg.StaWithEtherBridge.Enable);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxPreamble
+@@ -3119,7 +3201,7 @@
+ ==========================================================================
+ */
+ INT Set_TxPreamble_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ RT_802_11_PREAMBLE Preamble;
+@@ -3138,7 +3220,7 @@
+ pAdapter->PortCfg.WindowsTxPreamble = Preamble;
+ MlmeSetTxPreamble(pAdapter, Rt802_11PreambleLong);
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ return FALSE;
+ }
+
+@@ -3146,7 +3228,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set RTS Threshold
+@@ -3155,15 +3237,15 @@
+ ==========================================================================
+ */
+ INT Set_RTSThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+-
+-
++
++
+ {
+ NDIS_802_11_RTS_THRESHOLD RtsThresh;
+
+- printk("'iwpriv <dev> set RTSThreshold' is deprecated, please use 'iwconfg <dev> rts' instead\n");
+-
++ printk("'iwpriv <dev> set RTSThreshold' is deprecated, please use 'iwconfg <dev> rts' instead\n");
++
+ RtsThresh = simple_strtol(arg, 0, 10);
+
+ if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))
+@@ -3176,7 +3258,7 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAdapter->PortCfg.RtsThreshold);
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Fragment Threshold
+@@ -3185,14 +3267,14 @@
+ ==========================================================================
+ */
+ INT Set_FragThreshold_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
+
+- printk("'iwpriv <dev> set FragThreshold' is deprecated, please use 'iwconfg <dev> frag' instead\n");
+-
+-
++ printk("'iwpriv <dev> set FragThreshold' is deprecated, please use 'iwconfg <dev> frag' instead\n");
++
++
+ FragThresh = simple_strtol(arg, 0, 10);
+
+ if ( (FragThresh >= MIN_FRAG_THRESHOLD) && (FragThresh <= MAX_FRAG_THRESHOLD))
+@@ -3200,7 +3282,7 @@
+ else if (FragThresh == 0)
+ pAdapter->PortCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ if (pAdapter->PortCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)
+ pAdapter->PortCfg.bFragmentZeroDisable = TRUE;
+@@ -3211,7 +3293,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TxBurst
+@@ -3220,7 +3302,7 @@
+ ==========================================================================
+ */
+ INT Set_TxBurst_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TxBurst;
+@@ -3232,13 +3314,13 @@
+ else if (TxBurst == 0)
+ pAdapter->PortCfg.EnableTxBurst = FALSE;
+ else
+- return FALSE; //Invalid argument
+-
++ return FALSE; //Invalid argument
++
+ DBGPRINT(RT_DEBUG_TRACE, "Set_TxBurst_Proc::(TxBurst=%d)\n", pAdapter->PortCfg.EnableTxBurst);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set TurboRate Enable or Disable
+@@ -3247,7 +3329,7 @@
+ ==========================================================================
+ */
+ INT Set_TurboRate_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG TurboRate;
+@@ -3259,13 +3341,13 @@
+ else if (TurboRate == 0)
+ pAdapter->PortCfg.EnableTurboRate = FALSE;
+ else
+- return FALSE; //Invalid argument
+-
++ return FALSE; //Invalid argument
++
+ DBGPRINT(RT_DEBUG_TRACE, "Set_TurboRate_Proc::(TurboRate=%d)\n", pAdapter->PortCfg.EnableTurboRate);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Short Slot Time Enable or Disable
+@@ -3274,7 +3356,7 @@
+ ==========================================================================
+ */
+ INT Set_ShortSlot_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG ShortSlot;
+@@ -3286,14 +3368,14 @@
+ else if (ShortSlot == 0)
+ pAdapter->PortCfg.UseShortSlotTime = FALSE;
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAdapter->PortCfg.UseShortSlotTime);
+
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Network Type(Infrastructure/Adhoc mode)
+@@ -3302,17 +3384,17 @@
+ ==========================================================================
+ */
+ INT Set_NetworkType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+
+- printk("'iwpriv <dev> set NetworkType' is deprecated, please use 'iwconfg <dev> mode' instead\n");
+-
++ printk("'iwpriv <dev> set NetworkType' is deprecated, please use 'iwconfg <dev> mode' instead\n");
++
+ if (strcmp(arg, "Adhoc") == 0)
+ pAdapter->PortCfg.BssType = BSS_INDEP;
+ else //Default Infrastructure mode
+ pAdapter->PortCfg.BssType = BSS_INFRA;
+-
++
+ // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key
+ pAdapter->PortCfg.WpaState = SS_NOTUSE;
+
+@@ -3321,7 +3403,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Authentication mode
+@@ -3330,7 +3412,7 @@
+ ==========================================================================
+ */
+ INT Set_AuthMode_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ if ((strcmp(arg, "OPEN") == 0) || (strcmp(arg, "open") == 0))
+@@ -3344,7 +3426,7 @@
+ else if ((strcmp(arg, "WPANONE") == 0) || (strcmp(arg, "wpanone") == 0))
+ pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeWPANone;
+ else
+- return FALSE;
++ return FALSE;
+
+ pAdapter->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+
+@@ -3353,7 +3435,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Encryption Type
+@@ -3362,7 +3444,7 @@
+ ==========================================================================
+ */
+ INT Set_EncrypType_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ if ((strcmp(arg, "NONE") == 0) || (strcmp(arg, "none") == 0))
+@@ -3380,7 +3462,7 @@
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set Default Key ID
+@@ -3389,24 +3471,24 @@
+ ==========================================================================
+ */
+ INT Set_DefaultKeyID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG KeyIdx;
+-
+- printk("'iwpriv <dev> set DefaultKeyID' is deprecated, please use 'iwconfg <dev> key' instead\n");
+-
++
++ printk("'iwpriv <dev> set DefaultKeyID' is deprecated, please use 'iwconfg <dev> key' instead\n");
++
+ KeyIdx = simple_strtol(arg, 0, 10);
+ if((KeyIdx >= 1 ) && (KeyIdx <= 4))
+ pAdapter->PortCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1 );
+ else
+- return FALSE; //Invalid argument
++ return FALSE; //Invalid argument
+
+ DBGPRINT(RT_DEBUG_TRACE, "Set_DefaultKeyID_Proc::(DefaultKeyID=%d)\n", pAdapter->PortCfg.DefaultKeyId);
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY1
+@@ -3415,22 +3497,22 @@
+ ==========================================================================
+ */
+ INT Set_Key1_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key1' is deprecated, please use 'iwconfg <dev> key [1] ' instead\n");
+-
++ printk("'iwpriv <dev> set Key1' is deprecated, please use 'iwconfg <dev> key [1] ' instead\n");
++
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+ {
+ case 5: //wep 40 Ascii type
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
++ memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 10: //wep 40 Hex type
+ for(i=0; i < KeyLen; i++)
+@@ -3440,12 +3522,12 @@
+ }
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+ AtoH(arg, pAdapter->PortCfg.SharedKey[0].Key, KeyLen / 2);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
+ break;
+ case 13: //wep 104 Ascii type
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
++ memcpy(pAdapter->PortCfg.SharedKey[0].Key, arg, KeyLen);
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+ for(i=0; i < KeyLen; i++)
+@@ -3455,16 +3537,16 @@
+ }
+ pAdapter->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+ AtoH(arg, pAdapter->PortCfg.SharedKey[0].Key, KeyLen / 2);
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
+- DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::Invalid argument (=%s)\n", arg);
++ default: //Invalid argument
++ DBGPRINT(RT_DEBUG_TRACE, "Set_Key1_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY2
+@@ -3473,15 +3555,15 @@
+ ==========================================================================
+ */
+ INT Set_Key2_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key2' is deprecated, please use 'iwconfg <dev> key [2] ' instead\n");
++ printk("'iwpriv <dev> set Key2' is deprecated, please use 'iwconfg <dev> key [2] ' instead\n");
++
+
+-
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+@@ -3503,7 +3585,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAdapter->PortCfg.SharedKey[1].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[1].Key, arg, KeyLen);
++ memcpy(pAdapter->PortCfg.SharedKey[1].Key, arg, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -3516,14 +3598,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[1].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key2_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY3
+@@ -3532,13 +3614,13 @@
+ ==========================================================================
+ */
+ INT Set_Key3_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key3' is deprecated, please use 'iwconfg <dev> key [3] ' instead\n");
++ printk("'iwpriv <dev> set Key3' is deprecated, please use 'iwconfg <dev> key [3] ' instead\n");
+
+ KeyLen = strlen(arg);
+
+@@ -3574,14 +3656,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[2].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key3_Proc::(Key3=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key3_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WEP KEY4
+@@ -3590,21 +3672,21 @@
+ ==========================================================================
+ */
+ INT Set_Key4_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ int KeyLen;
+ int i;
+
+- printk("'iwpriv <dev> set Key4' is deprecated, please use 'iwconfg <dev> key [4] ' instead\n");
+-
++ printk("'iwpriv <dev> set Key4' is deprecated, please use 'iwconfg <dev> key [4] ' instead\n");
++
+ KeyLen = strlen(arg);
+
+ switch (KeyLen)
+ {
+ case 5: //wep 40 Ascii type
+ pAdapter->PortCfg.SharedKey[3].KeyLen = KeyLen;
+- memcpy(pAdapter->PortCfg.SharedKey[3].Key, arg, KeyLen);
++ memcpy(pAdapter->PortCfg.SharedKey[3].Key, arg, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii");
+ break;
+ case 10: //wep 40 Hex type
+@@ -3632,14 +3714,14 @@
+ AtoH(arg, pAdapter->PortCfg.SharedKey[3].Key, KeyLen / 2);
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex");
+ break;
+- default: //Invalid argument
++ default: //Invalid argument
+ DBGPRINT(RT_DEBUG_TRACE, "Set_Key4_Proc::Invalid argument (=%s)\n", arg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WPA PSK key
+@@ -3648,7 +3730,7 @@
+ ==========================================================================
+ */
+ INT Set_WPAPSK_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ UCHAR keyMaterial[40];
+@@ -3670,16 +3752,16 @@
+
+ memcpy(&pAdapter->PortCfg.PskKey.Key, &keyMaterial, 32);
+ }
+-
++
+ // Use RaConfig as PSK agent.
+ // Start STA supplicant state machine
+ pAdapter->PortCfg.WpaState = SS_START;
+-
++
+ return TRUE;
+ }
+
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set WPA NONE key
+@@ -3689,7 +3771,7 @@
+ */
+
+ INT Set_WPANONE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ UCHAR keyMaterial[40];
+@@ -3700,17 +3782,17 @@
+ DBGPRINT(RT_DEBUG_TRACE, "Set failed!!(WPANONE=%s), WPANONE key-string required 8 ~ 64 characters \n", arg);
+ return FALSE;
+ }
+-
++
+ if (strlen(arg) == 64)
+ {
+- AtoH(arg, pAdapter->PortCfg.PskKey.Key, 32);
++ AtoH(arg, keyMaterial, 32);
+ }
+ else
+ {
+ PasswordHash((char *)arg, pAdapter->Mlme.CntlAux.Ssid, pAdapter->Mlme.CntlAux.SsidLen, keyMaterial);
+-
+- memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32);
+ }
++ memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32);
++
+ // Use RaConfig as PSK agent.
+ // Start STA supplicant state machine
+ pAdapter->PortCfg.WpaState = SS_START;
+@@ -3718,7 +3800,7 @@
+ //-----------------------------------------------------------------------------
+ // pasted from "RTMPWPAAddKeyProc(...)"
+ // major on Group Key only.
+-
++
+ // Group Key
+ {
+ // 3. Set as default Tx Key if bTxKey is TRUE
+@@ -3733,10 +3815,10 @@
+
+ // 6. Copy information into Group Key structure.
+ // pKey->KeyLength will include TxMic and RxMic, therefore, we use 16 bytes hardcoded.
+- pAdapter->PortCfg.GroupKey[0].KeyLen = 16;
+- memcpy(pAdapter->PortCfg.GroupKey[0].Key, (PUCHAR)(keyMaterial) + 0, 16);
+- memcpy(pAdapter->PortCfg.GroupKey[0].RxMic, (PUCHAR)(keyMaterial) + 16, 8);
+- memcpy(pAdapter->PortCfg.GroupKey[0].TxMic, (PUCHAR)(keyMaterial) + 16, 8);
++ pAdapter->PortCfg.GroupKey[0].KeyLen = 16;
++ memcpy(pAdapter->PortCfg.GroupKey[0].Key, &keyMaterial[0], 16);
++ memcpy(pAdapter->PortCfg.GroupKey[0].RxMic, &keyMaterial[16], 8);
++ memcpy(pAdapter->PortCfg.GroupKey[0].TxMic, &keyMaterial[16], 8);
+ memcpy(pAdapter->PortCfg.GroupKey[0].BssId, &pAdapter->PortCfg.Bssid, 6);
+
+ // Init TxTsc to one based on WiFi WPA specs
+@@ -3754,7 +3836,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write BBP
+@@ -3766,7 +3848,7 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 bbp ==> read all BBP
+ 2.) iwpriv ra0 bbp 1,2,10,32 ==> raed BBP where ID=1,2,10,32
+ 3.) iwpriv ra0 bbp 1=10,17=3E ==> write BBP R1=0x10, R17=0x3E
+@@ -3887,9 +3969,9 @@
+ kfree(arg);
+ }
+
+-int RTMPIoctlRFMONTX(
++int RTMPIoctlSetRFMONTX(
+ IN PRTMP_ADAPTER pAdapter,
+- IN OUT struct iwreq *wrq)
++ IN struct iwreq *wrq)
+ {
+ char *pvalue;
+ char value;
+@@ -3898,7 +3980,7 @@
+ {
+ pvalue = wrq->u.data.pointer;
+ value = *pvalue;
+-
++
+ if (value == 1)
+ {
+ pAdapter->PortCfg.MallowRFMONTx = TRUE;
+@@ -3912,18 +3994,19 @@
+ else return -EINVAL;
+ }
+
+- /* Display the state. Use "value" to indicate it. */
+- value = pAdapter->PortCfg.MallowRFMONTx == TRUE ? '1'
+- : '0';
+- wrq->u.data.length = sizeof (char);
+-
+- if (copy_to_user (wrq->u.data.pointer, &value, wrq->u.data.length))
+- DBGPRINT (RT_DEBUG_ERROR, "RTMPIoctlRFMONTX - copy to user failure.\n");
++ return 0;
++}
+
++int RTMPIoctlGetRFMONTX(
++ IN PRTMP_ADAPTER pAdapter,
++ OUT struct iwreq *wrq)
++{
++ *(int *) wrq->u.name = pAdapter->PortCfg.MallowRFMONTx == TRUE ? 1 : 0;
+ return 0;
++
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write MAC
+@@ -3935,13 +4018,13 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 mac 0 ==> read MAC where Addr=0x0
+ 2.) iwpriv ra0 mac 0=12 ==> write MAC where Addr=0x0, value=12
+ ==========================================================================
+ */
+ VOID RTMPIoctlMAC(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq)
+ {
+ char *this_char;
+@@ -3996,7 +4079,7 @@
+ {
+ this_char[4-k+j] = this_char[j];
+ }
+-
++
+ while(k < 4)
+ this_char[3-k++]='0';
+ this_char[4]='\0';
+@@ -4061,7 +4144,7 @@
+ {
+ temp2[8-k+j] = temp2[j];
+ }
+-
++
+ while(k < 8)
+ temp2[7-k++]='0';
+ temp2[8]='\0';
+@@ -4074,7 +4157,7 @@
+ macValue = *temp*256*256*256 + temp[1]*256*256 + temp[2]*256 + temp[3];
+
+ DBGPRINT(RT_DEBUG_TRACE, "macAddr=%02x, macValue=0x%x\n", macAddr, macValue);
+-
++
+ RTMP_IO_WRITE32(pAdapter, macAddr, macValue);
+ sprintf(msg+strlen(msg), "[0x%02X]:%02X ", macAddr, macValue);
+ count++;
+@@ -4093,7 +4176,7 @@
+ wrq->u.data.length = strlen(msg);
+ if(copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
+ DBGPRINT(RT_DEBUG_ERROR, "RTMPIoctlMAC - copy to user failure.\n");
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<==RTMPIoctlMAC\n");
+
+ kfree(msg);
+@@ -4102,7 +4185,7 @@
+
+ #ifdef RALINK_ATE
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Read / Write E2PROM
+@@ -4114,13 +4197,13 @@
+ None
+
+ Note:
+- Usage:
++ Usage:
+ 1.) iwpriv ra0 e2p 0 ==> read E2PROM where Addr=0x0
+ 2.) iwpriv ra0 e2p 0=1234 ==> write E2PROM where Addr=0x0, value=1234
+ ==========================================================================
+ */
+ VOID RTMPIoctlE2PROM(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq)
+ {
+ char *this_char;
+@@ -4136,7 +4219,7 @@
+
+ msg = kmalloc(1024, GFP_KERNEL);
+ arg = kmalloc(255, GFP_KERNEL);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==>RTMPIoctlE2PROM\n");
+ memset(msg, 0x00, 1024);
+ memset(arg, 0x00, 255);
+@@ -4178,7 +4261,7 @@
+ {
+ this_char[4-k+j] = this_char[j];
+ }
+-
++
+ while(k < 4)
+ this_char[3-k++]='0';
+ this_char[4]='\0';
+@@ -4186,7 +4269,7 @@
+ if(strlen(this_char) == 4)
+ {
+ AtoH(this_char, temp, 4);
+- eepAddr = *temp*256 + temp[1];
++ eepAddr = *temp*256 + temp[1];
+ if (eepAddr < 0xFFFF)
+ {
+ eepValue = RTMP_EEPROM_READ16(pAdapter, eepAddr);
+@@ -4243,7 +4326,7 @@
+ {
+ temp2[4-k+j] = temp2[j];
+ }
+-
++
+ while(k < 4)
+ temp2[3-k++]='0';
+ temp2[4]='\0';
+@@ -4255,7 +4338,7 @@
+ eepValue = *temp*256 + temp[1];
+
+ DBGPRINT(RT_DEBUG_TRACE, "eepAddr=%02x, eepValue=0x%x\n", eepAddr, eepValue);
+-
++
+ RTMP_EEPROM_WRITE16(pAdapter, eepAddr, eepValue);
+ sprintf(msg+strlen(msg), "[0x%02X]:%02X ", eepAddr, eepValue);
+ count++;
+@@ -4269,18 +4352,19 @@
+ if(strlen(msg) == 1)
+ sprintf(msg+strlen(msg), "===>Error command format!");
+
+- // Copy the information into the user buffer
+- DBGPRINT(RT_DEBUG_TRACE, "copy to user [msg=%s]\n", *msg);
++ // Copy the information into the user buffer
++ DBGPRINT(RT_DEBUG_TRACE, "copy to user [msg=%s]\n", *msg);
+ wrq->u.data.length = strlen(msg);
+- copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
+-
++ if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
++ DBGPRINT(RT_DEBUG_ERROR, "RTMPIoctlE2PROM - copy to user failure.\n");
++
+ DBGPRINT(RT_DEBUG_TRACE, "<==RTMPIoctlE2PROM\n");
+
+ kfree(msg);
+ kfree(arg);
+ }
+
+-UCHAR TempletFrame[24] = {0x08,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; // 802.11 MAC Header, Type:Data, Length:24bytes
++UCHAR TempletFrame[24] = {0x08,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; // 802.11 MAC Header, Type:Data, Length:24bytes
+
+ /*
+ ==========================================================================
+@@ -4297,7 +4381,7 @@
+ ==========================================================================
+ */
+ INT Set_ATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ USHORT BbpData;
+@@ -4305,7 +4389,7 @@
+ PTXD_STRUC pTxD;
+ PUCHAR pDest;
+ UINT i, j;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_Proc (arg = %s)\n", arg);
+
+ mdelay(5);
+@@ -4321,8 +4405,8 @@
+ BbpData = 0;
+ MacData &= 0xFBFFFFFF;
+
+- if (!strcmp(arg, "STASTOP"))
+- {
++ if (!strcmp(arg, "STASTOP"))
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: STASTOP\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4333,11 +4417,11 @@
+ LinkDown(pAdapter);
+ AsicEnableBssSync(pAdapter);
+ netif_stop_queue(pAdapter->net_dev);
+- RTMPStationStop(pAdapter);
++ RTMPStationStop(pAdapter);
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0xffffffff); // Stop Rx
+ }
+- else if (!strcmp(arg, "STASTART"))
+- {
++ else if (!strcmp(arg, "STASTART"))
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: STASTART\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4350,9 +4434,9 @@
+ RTMPStationStart(pAdapter);
+ }
+ else if (!strcmp(arg, "TXCONT")) // Continuous Tx
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: TXCONT\n");
+-
++
+ pAdapter->ate.Mode = ATE_TXCONT;
+
+ BbpData |= 0x80;
+@@ -4427,7 +4511,7 @@
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+ }
+ else if (!strcmp(arg, "TXFRAME")) // Tx Frames --------------------------------------
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: TXFRAME(Count=%d)\n", pAdapter->ate.TxCount);
+ pAdapter->ate.Mode = ATE_TXFRAME;
+
+@@ -4435,7 +4519,7 @@
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, 63, BbpData);
+
+ pAdapter->ate.TxDoneCount = 0;
+-
++
+ for (i = 0; (i < TX_RING_SIZE) && (i < pAdapter->ate.TxCount); i++)
+ {
+ pTxD = (PTXD_STRUC)pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+@@ -4467,7 +4551,7 @@
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+ }
+ else if (!strcmp(arg, "RXFRAME")) // Rx Frames --------------------------------------
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: RXFRAME\n");
+
+ RTMP_IO_WRITE32(pAdapter, MACCSR1, MacData);
+@@ -4475,23 +4559,23 @@
+
+ pAdapter->ate.Mode = ATE_RXFRAME;
+ pAdapter->ate.TxDoneCount = pAdapter->ate.TxCount;
+-
++
+ RTMP_IO_WRITE32(pAdapter, TXCSR0, 0x08); // Abort Tx
+ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x56); // Start Rx
+ }
+ else
+- {
++ {
+ DBGPRINT(RT_DEBUG_TRACE, "ATE: Invalid arg!\n");
+ return FALSE;
+ }
+
+ mdelay(5);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_Proc\n");
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR1=DA for TxFrames Return:
+@@ -4499,21 +4583,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_DA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_DA_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr1[i++], 2);
+@@ -4521,14 +4605,14 @@
+
+ if(i != 6)
+ return FALSE; //Invalid
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr1[0], pAdapter->ate.Addr1[1], pAdapter->ate.Addr1[2], pAdapter->ate.Addr1[3], pAdapter->ate.Addr1[4], pAdapter->ate.Addr1[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_DA_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR2=SA for TxFrames Return:
+@@ -4536,21 +4620,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_SA_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_SA_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr2[i++], 2);
+@@ -4561,11 +4645,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr2[0], pAdapter->ate.Addr2[1], pAdapter->ate.Addr2[2], pAdapter->ate.Addr2[3], pAdapter->ate.Addr2[4], pAdapter->ate.Addr2[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_SA_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE ADDR3=BSSID for TxFrames Return:
+@@ -4573,21 +4657,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_BSSID_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ char *value;
+ int i;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_BSSID_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
+ return FALSE;
+
+- for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
++ for (i=0, value = strtok(arg,":"); value; value = strtok(NULL,":"))
+ {
+- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
++ if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
+ return FALSE; //Invalid
+
+ AtoH(value, &pAdapter->ate.Addr3[i++], 2);
+@@ -4598,11 +4682,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "DA=%2X:%2X:%2X:%2X:%2X:%2X\n", pAdapter->ate.Addr3[0], pAdapter->ate.Addr3[1], pAdapter->ate.Addr3[2], pAdapter->ate.Addr3[3], pAdapter->ate.Addr3[4], pAdapter->ate.Addr3[5]);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_BSSID_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Channel Return:
+@@ -4610,11 +4694,11 @@
+ ==========================================================================
+ */
+ INT Set_ATE_CHANNEL_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_CHANNEL_Proc (arg = %s)\n", arg);
+-
++
+ pAdapter->ate.Channel = simple_strtol(arg, 0, 10);
+ if((pAdapter->ate.Channel < 1) || (pAdapter->ate.Channel > 14))
+ {
+@@ -4623,11 +4707,11 @@
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_CHANNEL_Proc (ATE Channel = %d)\n", pAdapter->ate.Channel);
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Power Return:
+@@ -4635,14 +4719,14 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_POWER_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ ULONG R3;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_POWER_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxPower = simple_strtol(arg, 0, 10);
+
+ if(pAdapter->ate.TxPower >= 32)
+@@ -4659,11 +4743,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxPower = %d\n", pAdapter->ate.TxPower);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_POWER_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Length Return:
+@@ -4671,12 +4755,12 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_LENGTH_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_LENGTH_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxLength = simple_strtol(arg, 0, 10);
+
+ if((pAdapter->ate.TxLength < 24) || (pAdapter->ate.TxLength > 1500))
+@@ -4687,11 +4771,11 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxLength = %d\n", pAdapter->ate.TxLength);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_LENGTH_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Count Return:
+@@ -4699,21 +4783,21 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_COUNT_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_COUNT_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxCount = simple_strtol(arg, 0, 10);
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxCount = %d\n", pAdapter->ate.TxCount);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_COUNT_Proc\n");
+-
++
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Set ATE Tx Rate
+@@ -4722,12 +4806,12 @@
+ ==========================================================================
+ */
+ INT Set_ATE_TX_RATE_Proc(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR arg)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "==> Set_ATE_TX_RATE_Proc\n");
+ DBGPRINT(RT_DEBUG_TRACE, "arg=%s\n", arg);
+-
++
+ pAdapter->ate.TxRate = simple_strtol(arg, 0, 10);
+
+ if(pAdapter->ate.TxRate > RATE_54)
+@@ -4738,7 +4822,7 @@
+
+ DBGPRINT(RT_DEBUG_TRACE, "TxRate = %d\n", pAdapter->ate.TxRate);
+ DBGPRINT(RT_DEBUG_TRACE, "<== Set_ATE_TX_RATE_Proc\n");
+-
++
+ return TRUE;
+ }
+
+@@ -4758,7 +4842,7 @@
+ RTMPCancelTimer(&pAd->PortCfg.RfTuningTimer);
+ if (pAd->PortCfg.LedMode == LED_MODE_TXRX_ACTIVITY)
+ RTMPCancelTimer(&pAd->PortCfg.LedCntl.BlinkTimer);
+- RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
++ RTMPCancelTimer(&pAd->PortCfg.RxAnt.RxAntDiversityTimer);
+ DBGPRINT(RT_DEBUG_TRACE, "<== RTMPStationStop\n");
+ }
+
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_init.c rt2500-cvs-2007061011/Module/rtmp_init.c
+--- rt2500-1.1.0-b4/Module/rtmp_init.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_init.c 2007-05-06 11:13:43.000000000 +0200
+@@ -1,40 +1,40 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_init.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 1st Aug 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 1st Aug 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * LuisCorreia 15th Feb 05 Added Yann's patch for radio hw
+ * MarkW 12th Jul 05 Disabled all but CAM Power modes
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -84,9 +84,9 @@
+ // {PSCSR2, 0x00023f20}, // 0xd0
+ {PSCSR2, 0x00020002}, // 0xd0
+ {PSCSR3, 0x00000002}, // 0xd4
+- {TIMECSR, 0x00003f21}, // 0xDC, to slower down our 1-us tick
++ {TIMECSR, 0x00003f21}, // 0xDC, to slower down our 1-us tick
+ {CSR9, 0x00000780}, // 0x24
+- {CSR11, 0x07041483}, // 0x2C, lrc=7, src=4, slot=20us, CWmax=2^8, CWmax=2^3
++ {CSR11, 0x07041483}, // 0x2C, lrc=7, src=4, slot=20us, CWmax=2^8, CWmax=2^3
+ {CSR18, 0x00140000}, // SIFS=10us - TR switch time, PIFS=SIFS+20us
+ {CSR19, 0x016C0028}, // DIFS=SIFS+2*20us, EIFS=364us
+ {CNT3, 0x00000000}, // Backoff_CCA_Th, RX_&_TX_CCA_Th
+@@ -105,17 +105,17 @@
+ {ARTCSR1, 0x1d21252d}, // 0x150, alexsu : OFDM ACK/CTS payload consumed time for 18/12/9/6 mbps
+ {ARTCSR2, 0x1919191d}, // 0x154, alexsu : OFDM ACK/CTS payload consumed time for 54/48/36/24 mbps
+
+- {RXCSR0, 0xffffffff}, // 0x80
++ {RXCSR0, 0xffffffff}, // 0x80
+ {RXCSR3, 0xb3aab3af}, // 0x90. RT2530 BBP 51:RSSI, R42:OFDM rate, R47:CCK SIGNAL
+ {PCICSR, 0x000003b8}, // 0x8c, alexsu : PCI control register
+ {PWRCSR0, 0x3f3b3100}, // 0xC4
+ {GPIOCSR, 0x0000ff00}, // 0x120, GPIO default value
+ {TESTCSR, 0x000000f0}, // 0x138, Test CSR, make sure it's running at normal mode
+- {PWRCSR1, 0x000001ff}, // 0xd8
++ {PWRCSR1, 0x000001ff}, // 0xd8
+ {MACCSR0, 0x00213223}, // 0xE0, Enable Tx dribble mode - 2003/10/22:Gary
+ {MACCSR1, 0x00235518}, // 0xE4, Disable Rx Reset, tx dribble count, 2x30x16 = 960n,
+ {MACCSR2, 0x00000040}, // 0x0134, 64*33ns = 2us
+- {RALINKCSR, 0x9a009a11}, // 0xE8
++ {RALINKCSR, 0x9a009a11}, // 0xE8
+ {CSR7, 0xffffffff}, // 0x1C, Clear all pending interrupt source
+ {LEDCSR, 0x00001E46}, // default both LEDs off
+ {BBPCSR1, 0x82188200}, // for 2560+2522
+@@ -155,7 +155,7 @@
+
+ DBGPRINT(RT_DEBUG_INFO, "--> RTMPAllocDMAMemory\n");
+
+- // 1. Allocate Tx Ring DMA descriptor and buffer memory
++ // 1. Allocate Tx Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -165,14 +165,14 @@
+
+ // Zero init ring descriptors
+ memset(ring, 0, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE));
+-
++
+ // Allocate Ring data DMA blocks
+ ring_data = pci_alloc_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE), &ring_data_dma);
+-
++
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- printk(KERN_ERR DRV_NAME "Could not allocate DMA ring buffer memory.\n");
++ printk(KERN_ERR DRV_NAME "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_txring;
+ }
+
+@@ -185,7 +185,7 @@
+ pAd->TxRing[index].pa_addr = ring_dma;
+ ring += RING_DESCRIPTOR_SIZE;
+ ring_dma += RING_DESCRIPTOR_SIZE;
+-
++
+ // Init Tx DMA buffer
+ pAd->TxRing[index].data_size = TX_BUFFER_SIZE;
+ pAd->TxRing[index].va_data_addr = ring_data;
+@@ -207,7 +207,7 @@
+ index, (unsigned long)pAd->TxRing[index].va_data_addr, (UINT)pAd->TxRing[index].pa_data_addr, pAd->TxRing[index].data_size);
+ }
+
+- // 2. Allocate Prio Ring DMA descriptor and buffer memory
++ // 2. Allocate Prio Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -224,7 +224,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_prioring;
+ }
+
+@@ -259,7 +259,7 @@
+ index, (unsigned long)pAd->PrioRing[index].va_data_addr, (UINT)pAd->PrioRing[index].pa_data_addr, pAd->PrioRing[index].data_size);
+ }
+
+- // 3. Allocate Atim Ring DMA descriptor and buffer memory
++ // 3. Allocate Atim Ring DMA descriptor and buffer memory
+ // Allocate Ring descriptors DMA block
+ ring = pci_alloc_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE), &ring_dma);
+ if (!ring) {
+@@ -276,7 +276,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_atimring;
+ }
+
+@@ -328,7 +328,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE), ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_rxring;
+ }
+
+@@ -386,7 +386,7 @@
+ // If failed, release ring descriptors DMA block & exit
+ if (!ring_data) {
+ pci_free_consistent(pAd->pPci_Dev, RING_DESCRIPTOR_SIZE, ring, ring_dma);
+- DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
++ DBGPRINT(RT_DEBUG_ERROR, "Could not allocate DMA ring buffer memory.\n");
+ goto err_out_allocate_beaconring;
+ }
+
+@@ -418,28 +418,28 @@
+
+ err_out_allocate_beaconring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
+ pAd->RxRing[0].va_data_addr, pAd->RxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->RxRing[0].va_addr, pAd->RxRing[0].pa_addr);
+ err_out_allocate_rxring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
+ pAd->AtimRing[0].va_data_addr, pAd->AtimRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->AtimRing[0].va_addr, pAd->AtimRing[0].pa_addr);
+ err_out_allocate_atimring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
+ pAd->PrioRing[0].va_data_addr, pAd->PrioRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->PrioRing[0].va_addr, pAd->PrioRing[0].pa_addr);
+ err_out_allocate_prioring:
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
+ pAd->TxRing[0].va_data_addr, pAd->TxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+@@ -472,35 +472,35 @@
+ DBGPRINT(RT_DEBUG_INFO, "--> RTMPFreeDMAMemory\n");
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * TX_BUFFER_SIZE),
+ pAd->TxRing[0].va_data_addr, pAd->TxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (TX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->TxRing[0].va_addr, pAd->TxRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * PRIO_BUFFER_SIZE),
+ pAd->PrioRing[0].va_data_addr, pAd->PrioRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (PRIO_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->PrioRing[0].va_addr, pAd->PrioRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * ATIM_BUFFER_SIZE),
+ pAd->AtimRing[0].va_data_addr, pAd->AtimRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (ATIM_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->AtimRing[0].va_addr, pAd->AtimRing[0].pa_addr);
+-
++
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RX_BUFFER_SIZE),
+ pAd->RxRing[0].va_data_addr, pAd->RxRing[0].pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (RX_RING_SIZE * RING_DESCRIPTOR_SIZE),
+ pAd->RxRing[0].va_addr, pAd->RxRing[0].pa_addr);
+
+ // Free data DMA blocks first, the start address is the same as TxRing first DMA data block
+- pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * BEACON_BUFFER_SIZE),
++ pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * BEACON_BUFFER_SIZE),
+ pAd->BeaconRing.va_data_addr, pAd->BeaconRing.pa_data_addr);
+ // Free ring descriptor second, the start address is the same as TxRing first elment
+ pci_free_consistent(pAd->pPci_Dev, (BEACON_RING_SIZE * RING_DESCRIPTOR_SIZE),
+@@ -582,7 +582,7 @@
+ CSR4_STRUC StaMacReg1;
+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+
+- //
++ //
+ // Read MAC address from CSR3 & CSR4, these CSRs reflects real value
+ // stored with EEPROM.
+ //
+@@ -618,7 +618,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID NICReadEEPROMParameters(
+@@ -637,7 +637,7 @@
+ RTMP_IO_READ32(pAdapter, CSR21, &data);
+
+ if(data & 0x20)
+- pAdapter->EEPROMAddressNum = 6;
++ pAdapter->EEPROMAddressNum = 6;
+ else
+ pAdapter->EEPROMAddressNum = 8;
+
+@@ -655,7 +655,7 @@
+ for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++)
+ {
+ value = RTMP_EEPROM_READ16(pAdapter, EEPROM_BBP_BASE_OFFSET + i*2);
+-
++
+ pAdapter->EEPROMDefaultValue[i] = value;
+ }
+
+@@ -707,13 +707,13 @@
+ // Disable TxAgc if the value is not right
+ if ((pAdapter->PortCfg.ChannelTssiRef[i * 2] == 0xff) ||
+ (pAdapter->PortCfg.ChannelTssiRef[i * 2 + 1] == 0xff))
+- pAdapter->PortCfg.bAutoTxAgc = FALSE;
++ pAdapter->PortCfg.bAutoTxAgc = FALSE;
+ }
+-
++
+ // Tx Tssi delta offset 0x24
+ Power.word = RTMP_EEPROM_READ16(pAdapter, EEPROM_TSSI_DELTA_OFFSET);
+ pAdapter->PortCfg.ChannelTssiDelta = Power.field.Byte0;
+-
++
+ #endif
+
+ //CountryRegion byte offset = 0x35
+@@ -734,11 +734,11 @@
+ pAdapter->PortCfg.RssiToDbm = 0x79;
+ }
+ else
+- {
++ {
+ //pAdapter->PortCfg.R17Dec = 0x79 - Power.field.Byte0;
+ pAdapter->PortCfg.RssiToDbm = Power.field.Byte0;
+ }
+-
++
+
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICReadEEPROMParameters\n");
+ }
+@@ -769,11 +769,11 @@
+ EEPROM_NIC_CONFIG2_STRUC NicConfig2;
+
+ DBGPRINT(RT_DEBUG_TRACE, "--> NICInitAsicFromEEPROM\n");
+-
++
+ for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++)
+ {
+ value = pAdapter->EEPROMDefaultValue[i];
+-
++
+ if((value != 0xFFFF) && (value != 0))
+ {
+ data = value | 0x18000;
+@@ -802,12 +802,12 @@
+ // Tx antenna select
+ if(Antenna.field.TxDefaultAntenna == 1) // Antenna A
+ {
+- TxValue = (TxValue & 0xFC) | 0x00;
++ TxValue = (TxValue & 0xFC) | 0x00;
+ BbpCsr1 = (BbpCsr1 & 0xFFFCFFFC) | 0x00000000;
+ }
+ else if(Antenna.field.TxDefaultAntenna == 2) // Antenna B
+ {
+- TxValue = (TxValue & 0xFC) | 0x02;
++ TxValue = (TxValue & 0xFC) | 0x02;
+ BbpCsr1 = (BbpCsr1 & 0xFFFCFFFC) | 0x00020002;
+ }
+ else // diverity - start from Antenna B
+@@ -818,12 +818,12 @@
+
+ // Rx antenna select
+ if(Antenna.field.RxDefaultAntenna == 1) // Antenna A
+- RxValue = (RxValue & 0xFC) | 0x00;
++ RxValue = (RxValue & 0xFC) | 0x00;
+ else if(Antenna.field.RxDefaultAntenna == 2) // Antenna B
+- RxValue = (RxValue & 0xFC) | 0x02;
++ RxValue = (RxValue & 0xFC) | 0x02;
+ else // Antenna Diversity
+- RxValue = (RxValue & 0xFC) | 0x02;
+-
++ RxValue = (RxValue & 0xFC) | 0x02;
++
+ // RT5222 needs special treatment to swap TX I/Q
+ if (pAdapter->PortCfg.RfType == RFIC_5222)
+ {
+@@ -831,13 +831,13 @@
+ TxValue |= 0x04; // TX I/Q flip
+ }
+ // RT2525E need to flip TX I/Q but not RX I/Q
+- else if (pAdapter->PortCfg.RfType == RFIC_2525E)
++ else if (pAdapter->PortCfg.RfType == RFIC_2525E)
+ {
+ BbpCsr1 |= 0x00040004;
+ TxValue |= 0x04; // TX I/Q flip
+ RxValue &= 0xfb; // RX I/Q no flip
+ }
+-
++
+ // Change to match microsoft definition, 0xff: diversity, 0: A, 1: B
+ pAdapter->PortCfg.CurrentTxAntenna--;
+ pAdapter->PortCfg.CurrentRxAntenna--;
+@@ -845,7 +845,7 @@
+ RTMP_IO_WRITE32(pAdapter, BBPCSR1, BbpCsr1);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, BBP_Tx_Configure, TxValue);
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, BBP_Rx_Configure, RxValue);
+-
++
+ // 2003-12-16 software-based RX antenna diversity
+ // pAdapter->PortCfg.CurrentRxAntenna = 0xff; // Diversity ON
+ AsicSetRxAnt(pAdapter);
+@@ -869,7 +869,7 @@
+ if (0 && Antenna.field.HardwareRadioControl == 1)
+ {
+ pAdapter->PortCfg.bHardwareRadio = TRUE;
+-
++
+ // Read GPIO pin0 as Hardware controlled radio state
+ RTMP_IO_READ32(pAdapter, GPIOCSR, &data);
+ if ((data & 0x01) == 0)
+@@ -886,8 +886,8 @@
+ }
+ }
+ else
+- pAdapter->PortCfg.bHardwareRadio = FALSE;
+-
++ pAdapter->PortCfg.bHardwareRadio = FALSE;
++
+ NicConfig2.word = pAdapter->EEPROMDefaultValue[1];
+ if (NicConfig2.word == 0xffff)
+ NicConfig2.word = 0; // empty E2PROM, use default
+@@ -906,7 +906,7 @@
+ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAdapter, 17, r17);
+
+ // 2004-2-2 per David's request, lower R17 low-bound for very good quality NIC
+- pAdapter->PortCfg.VgcLowerBound -= 6;
++ pAdapter->PortCfg.VgcLowerBound -= 6;
+ DBGPRINT(RT_DEBUG_TRACE,"R17 tuning enable=%d, R17=0x%02x, range=<0x%02x, 0x%02x>\n",
+ pAdapter->PortCfg.BbpTuningEnable, r17, pAdapter->PortCfg.VgcLowerBound, pAdapter->PortCfg.BbpTuning.VgcUpperBound);
+ }
+@@ -916,7 +916,6 @@
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM\n");
+ }
+
+-extern VOID MlmeWork(void *vpAd);
+
+ void NICInitializeAdapter(IN PRTMP_ADAPTER pAdapter)
+ {
+@@ -938,7 +937,7 @@
+ TxCSR2.field.TxDSize = RING_DESCRIPTOR_SIZE;
+ TxCSR2.field.NumTxD = TX_RING_SIZE;
+ TxCSR2.field.NumAtimD = ATIM_RING_SIZE;
+- TxCSR2.field.NumPrioD = PRIO_RING_SIZE;
++ TxCSR2.field.NumPrioD = PRIO_RING_SIZE;
+ RTMP_IO_WRITE32(pAdapter, TXCSR2, TxCSR2.word);
+
+ // Write TXCSR3 register
+@@ -961,22 +960,19 @@
+ RxCSR1.field.RxDSize = RING_DESCRIPTOR_SIZE;
+ RxCSR1.field.NumRxD = RX_RING_SIZE;
+ RTMP_IO_WRITE32(pAdapter, RXCSR1, RxCSR1.word);
+-
++
+ // Write RXCSR2 register
+ Value = pAdapter->RxRing[0].pa_addr;
+ RTMP_IO_WRITE32(pAdapter, RX_RING_BASE_REG, Value);
+
+ // Write CSR1 for host ready
+- // Move Host reay to end of ASIC initialization
++ // Move Host reay to end of ASIC initialization
+ // to ensure no Rx will perform before ASIC init
+ // RTMP_IO_WRITE32(pAdapter, CSR1, 0x4);
+
+ // Initialze ASIC for TX & Rx operation
+ NICInitializeAsic(pAdapter);
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+- INIT_WORK(&pAdapter->mlme_work, MlmeWork, (void*)pAdapter);
+-#endif
+ DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAdapter\n");
+ }
+
+@@ -1036,13 +1032,13 @@
+ else if (pAdapter->bAcceptPromiscuous == TRUE)
+ {
+ // Register bits with "drop unicast not to me disabled"
+- RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x6e);
++ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x6e);
+ }
+ else
+ {
+ // Standard default register bits.
+- RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
+- }
++ RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x7e);
++ }
+
+ // Clear old FCS jitter before init ASIC
+ RTMP_IO_READ32(pAdapter, CNT0, &Index);
+@@ -1172,10 +1168,10 @@
+ // Init send data structures and related parameters
+ NICInitTransmit(pAdapter);
+
+- NICInitializeAdapter(pAdapter);
++ NICInitializeAdapter(pAdapter);
+ NICInitAsicFromEEPROM(pAdapter);
+
+- // Switch to current channel, since during reset process, the connection should remains on.
++ // Switch to current channel, since during reset process, the connection should remains on.
+ AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+ AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+ }
+@@ -1200,7 +1196,7 @@
+ {
+ if(ptr == buffer)
+ return TRUE;
+- else if (ptr > buffer)
++ else if (ptr > buffer)
+ {
+ while (ptr > buffer)
+ {
+@@ -1252,7 +1248,7 @@
+ }
+ else
+ return NULL;
+-}
++}
+ /**
+ * strstr - Find the first substring in a %NUL terminated string
+ * @s1: The string to be searched
+@@ -1261,7 +1257,7 @@
+ char * rtstrstr(const char * s1,const char * s2)
+ {
+ int l1, l2;
+-
++
+ l2 = strlen(s2);
+ if (!l2)
+ return (char *) s1;
+@@ -1283,7 +1279,7 @@
+ Arguments:
+ section the key of the secion
+ key Pointer to key string
+- dest Pointer to destination
++ dest Pointer to destination
+ destsize The datasize of the destination
+ buffer Pointer to the buffer to start find the key
+
+@@ -1298,7 +1294,7 @@
+ INT RTMPGetKeyParameter(
+ IN PUCHAR section,
+ IN PCHAR key,
+- OUT PCHAR dest,
++ OUT PCHAR dest,
+ IN INT destsize,
+ IN PCHAR buffer)
+ {
+@@ -1354,7 +1350,7 @@
+ break;
+ }
+
+- len = strlen(ptr);
++ len = strlen(ptr);
+ memset(dest, 0x00, destsize);
+ strncpy(dest, ptr, len >= destsize ? destsize: len);
+
+@@ -1409,7 +1405,7 @@
+ src = PROFILE_PATH;
+
+ // Save uid and gid used for filesystem access.
+- // Set user and group to 0 (root)
++ // Set user and group to 0 (root)
+ orgfsuid = current->fsuid;
+ orgfsgid = current->fsgid;
+ current->fsuid=current->fsgid = 0;
+@@ -1426,7 +1422,7 @@
+ else
+ {
+ /* The object must have a read method */
+- if (srcf->f_op && srcf->f_op->read)
++ if (srcf->f_op && srcf->f_op->read)
+ {
+ memset(buffer, 0x00, MAX_INI_BUFFER_SIZE);
+ retval=srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos);
+@@ -1502,7 +1498,7 @@
+ if (ChannelSanity(pAd, Channel) == TRUE)
+ {
+ pAd->PortCfg.Channel = Channel;
+- // If default profile in Registry is an ADHOC network, driver should use the specified channel
++ // If default profile in Registry is an ADHOC network, driver should use the specified channel
+ // number when starting IBSS the first time, because RaConfig is passive and will not set this
+ // via OID_802_11_CONFIGURATION upon driver bootup.
+ pAd->PortCfg.IbssConfig.Channel = pAd->PortCfg.Channel;
+@@ -1571,7 +1567,7 @@
+
+ if((ulInfo > 0) && (ulInfo <= MAX_RTS_THRESHOLD))
+ pAd->PortCfg.RtsThreshold = (USHORT)ulInfo;
+- else
++ else
+ pAd->PortCfg.RtsThreshold = MAX_RTS_THRESHOLD;
+
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(RTSThreshold=%d)\n", __FUNCTION__, pAd->PortCfg.RtsThreshold);
+@@ -1650,7 +1646,7 @@
+ {
+ DBGPRINT(RT_DEBUG_INFO, "MAX_PSP power mode not available - defaulting to CAM\n");
+ }
+- else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0)
++ else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0)
+ || (strcmp(tmpbuf, "FAST_PSP") == 0))
+ {
+ DBGPRINT(RT_DEBUG_INFO, "FAST_PSP power mode not available - defaulting to CAM\n");
+@@ -1763,7 +1759,7 @@
+ break;
+ }
+ }
+-
++
+ if (bIsHex)
+ {
+ pAd->PortCfg.SharedKey[0].KeyLen = KeyLen / 2 ;
+@@ -1773,7 +1769,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[0].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[0].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[0].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key1=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1821,7 +1817,7 @@
+ break;
+ }
+ }
+-
++
+ if (bIsHex)
+ {
+ pAd->PortCfg.SharedKey[1].KeyLen = KeyLen / 2 ;
+@@ -1831,7 +1827,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[1].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[1].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[1].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key2=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1889,7 +1885,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[2].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[2].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[2].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key3=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -1947,7 +1943,7 @@
+ break;
+ case 13: //wep 104 Ascii type
+ pAd->PortCfg.SharedKey[3].KeyLen = KeyLen;
+- memcpy(pAd->PortCfg.SharedKey[3].Key, tmpbuf, KeyLen);
++ memcpy(pAd->PortCfg.SharedKey[3].Key, tmpbuf, KeyLen);
+ DBGPRINT(RT_DEBUG_TRACE, "%s::(Key4=%s and type=%s)\n", __FUNCTION__, tmpbuf, "Ascii");
+ break;
+ case 26: //wep 104 Hex type
+@@ -2023,10 +2019,10 @@
+ {
+ case TX_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->NextTxDoneIndex].va_addr;
+-
++
+ pTxD->Owner = DESC_OWN_HOST;
+ pTxD->Valid = FALSE;
+
+@@ -2036,7 +2032,7 @@
+ {
+ pAdapter->NextTxDoneIndex = 0;
+ }
+-
++
+ } while (Count < TX_RING_SIZE); // We have to scan all TX ring
+
+ // Check for packet in send tx wait waiting queue
+@@ -2047,7 +2043,7 @@
+
+ case PRIO_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pTxD = (PTXD_STRUC) pAdapter->PrioRing[pAdapter->NextPrioDoneIndex].va_addr;
+
+@@ -2085,7 +2081,7 @@
+
+ case RX_RING:
+ // We have to clean all descriptos in case some error happened with reset
+- do
++ do
+ {
+ pRxD = (PRXD_STRUC) pAdapter->RxRing[pAdapter->CurRxIndex].va_addr;
+
+@@ -2101,7 +2097,7 @@
+
+ } while (Count < RX_RING_SIZE); // We have to scan all Rx Ring
+ break;
+-
++
+ default:
+ break;
+
+@@ -2172,10 +2168,10 @@
+ {
+ UINT i;
+
+- DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n");
++ DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n");
+
+ pAdapter->PortCfg.UseBGProtection = 0; // 0: AUTO
+-
++
+ pAdapter->PortCfg.CapabilityInfo = 0x0000;
+ pAdapter->PortCfg.Psm = PWR_ACTIVE;
+ pAdapter->PortCfg.BeaconPeriod = 100; // in mSec
+@@ -2207,7 +2203,7 @@
+ pAdapter->PortCfg.LastMicErrorTime = 0;
+ pAdapter->PortCfg.MicErrCnt = 0;
+ pAdapter->PortCfg.bBlockAssoc = FALSE;
+- pAdapter->PortCfg.WpaState = SS_NOTUSE;
++ pAdapter->PortCfg.WpaState = SS_NOTUSE;
+
+ pAdapter->PortCfg.RtsThreshold = 2347;
+ pAdapter->PortCfg.FragmentThreshold = 2346;
+@@ -2261,7 +2257,7 @@
+ pAdapter->PortCfg.PhyMode = 0xff;
+ // RTMPSetPhyMode(pAdapter, PHY_11BG_MIXED); // default in 11BG mixed mode
+ // pAdapter->PortCfg.Channel = FirstChannel(pAdapter);
+- pAdapter->PortCfg.Dsifs = 10; // in units of usec
++ pAdapter->PortCfg.Dsifs = 10; // in units of usec
+ pAdapter->PortCfg.TxPreambleInUsed = Rt802_11PreambleLong; // use Long preamble on TX by defaut
+
+ // user desired power mode
+@@ -2274,7 +2270,7 @@
+ pAdapter->bAcceptMulticast = FALSE;
+ pAdapter->bAcceptBroadcast = TRUE;
+ pAdapter->bAcceptAllMulticast = TRUE;
+-
++
+ // parameters to be used when this STA starts a new ADHOC network
+ pAdapter->PortCfg.IbssConfig.BeaconPeriod = 100;
+ pAdapter->PortCfg.IbssConfig.AtimWin = 0;
+@@ -2363,8 +2359,8 @@
+ char *srcptr;
+ PUCHAR destTemp;
+
+- srcptr = src;
+- destTemp = (PUCHAR) dest;
++ srcptr = src;
++ destTemp = (PUCHAR) dest;
+
+ while(destlen--)
+ {
+@@ -2376,7 +2372,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init timer objects
+
+@@ -2390,7 +2386,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPInitTimer(
+@@ -2406,7 +2402,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init timer objects
+
+@@ -2418,7 +2414,7 @@
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetTimer(
+@@ -2434,7 +2430,7 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Cancel timer objects
+
+@@ -2446,14 +2442,15 @@
+
+ Note:
+ Reset NIC to initial state AS IS system boot up time.
+-
++
+ ========================================================================
+ */
+ VOID RTMPCancelTimer(
+ IN PRALINK_TIMER_STRUCT pTimer)
+ {
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,27))
+- del_timer_sync(&pTimer->TimerObj);
++ if (timer_pending(&pTimer->TimerObj))
++ del_timer_sync(&pTimer->TimerObj);
+ #else
+ del_timer(&pTimer->TimerObj);
+ #endif
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_main.c rt2500-cvs-2007061011/Module/rtmp_main.c
+--- rt2500-1.1.0-b4/Module/rtmp_main.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_main.c 2007-05-29 05:49:17.000000000 +0200
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_main.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 25th Nov 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 25th Nov 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW (rt2400) 8th Dec 04 Promisc mode support
+ * Flavio (rt2400) 8th Dec 04 Elegant irqreturn_t handling
+ * Flavio (rt2400) 8th Dec 04 Remove local alloc_netdev
+@@ -45,26 +45,24 @@
+ * Tor Petterson 19th Apr 05 Power management: Suspend and Resume
+ * MarkW 15th Jul 05 Disable File Config under 4KSTACK
+ * IvD 15th Jul 05 Support File Config with 4KSTACK
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-unsigned long IrqFlags;
+-
+ // Global static variable, Debug level flag
+ // Don't hide this behind debug define. There should be as little difference between debug and no-debug as possible.
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+-int debug = 0; /* Default is off. */
++static int debug = 0; /* Default is off. */
+ MODULE_PARM(debug, "i");
+-MODULE_PARM_DESC(debug, "Enable level: accepted values: 1 to switch debug on, 0 to switch debug off.");
++MODULE_PARM_DESC(debug, "Debug mask: n selects filter, 0 for none");
+
+ static char *ifname = NULL ;
+ MODULE_PARM(ifname, "s");
+ MODULE_PARM_DESC(ifname, "Network device name (default ra%d)");
+ #else
+-int debug = 0; /* Default is off. */
++static int debug = 0; /* Default is off. */
+ module_param(debug, int, 0);
+-MODULE_PARM_DESC(debug, "Enable level: accepted values: 1 to switch debug on, 0 to switch debug off.");
++MODULE_PARM_DESC(debug, "Debug mask: n selects filter, 0 for none");
+
+ static char *ifname = NULL ;
+ module_param(ifname, charp, 0);
+@@ -79,78 +77,130 @@
+
+ extern const struct iw_handler_def rt2500_iw_handler_def;
+
++#ifdef RT2500_DBG
++VOID rt2500_setdbg(long mask)
++{
++ debug = mask;
++}
++INT rt2500_dbgprint(int mask, const char *fmt, ...)
++{
++ if(mask & debug) {
++ va_list args;
++ int i;
++
++ va_start(args, fmt);
++
++ //http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.9
++ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9))
++ i = vprintk(fmt, args);
++
++ #else
++ // Stack is safe because data is buffered before control returns
++ char printk_buf[160]; // Longest observed line is 147 chars.
++
++ vsnprintf(printk_buf, sizeof(printk_buf), fmt, args);
++ i = printk(printk_buf);
++ #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9)) */
++
++ va_end(args);
++ return i;
++ }
++ return 0;
++}
++#endif
++
++#ifdef RT2X00DEBUGFS
+ /*
+ * Register layout information.
+ */
+ #define CSR_REG_BASE 0x0000
+ #define CSR_REG_SIZE 0x0174
+ #define EEPROM_BASE 0x0000
+-#define EEPROM_SIZE 0x01ff
++#define EEPROM_SIZE 0x0200
++#define BBP_SIZE 0x0040
+
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+-static void
+-rt2x00_get_drvinfo(struct net_device *net_dev,
+- struct ethtool_drvinfo *drvinfo)
++static void rt2500pci_read_csr(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
++ RTMP_ADAPTER *pAd = dev;
+
+- strcpy(drvinfo->driver, NIC_DEVICE_NAME);
+- strcpy(drvinfo->version, DRV_VERSION);
+- strcpy(drvinfo->bus_info, pci_name(pAd->pPci_Dev));
++ RTMP_IO_READ32(pAd, CSR_REG_BASE + (word * sizeof(u32)), (u32*)data);
+ }
+
+-static int
+-rt2x00_get_regs_len(struct net_device *net_dev)
++static void rt2500pci_write_csr(void *dev, const unsigned long word,
++ void *data)
+ {
+- return CSR_REG_SIZE;
++ RTMP_ADAPTER *pAd = dev;
++
++ RTMP_IO_WRITE32(pAd, word, *((u32*)data));
+ }
+
+-static void
+-rt2x00_get_regs(struct net_device *net_dev,
+- struct ethtool_regs *regs, void *data)
++static void rt2500pci_read_eeprom(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
+- unsigned int counter;
++ RTMP_ADAPTER *pAd = dev;
+
+- regs->len = CSR_REG_SIZE;
++ *((u16*)data) = RTMP_EEPROM_READ16(pAd, word * sizeof(u16));
++}
+
+- for (counter = 0; counter < CSR_REG_SIZE; counter += sizeof(u32)) {
+- RTMP_IO_READ32(pAd, CSR_REG_BASE + counter, (u32*)data);
+- data += sizeof(u32);
+- }
++static void rt2500pci_write_eeprom(void *dev, const unsigned long word,
++ void *data)
++{
++ /* DANGEROUS, DON'T DO THIS! */
+ }
+
+-static int
+-rt2x00_get_eeprom_len(struct net_device *net_dev)
++static void rt2500pci_read_bbp(void *dev, const unsigned long word,
++ void *data)
+ {
+- return EEPROM_SIZE;
++ RTMP_ADAPTER *pAd = dev;
++
++ RTMP_BBP_IO_READ32_BY_REG_ID(pAd, word, ((u8*)data));
+ }
+
+-static int
+-rt2x00_get_eeprom(struct net_device *net_dev,
+- struct ethtool_eeprom *eeprom, u8 *data)
++static void rt2500pci_write_bbp(void *dev, const unsigned long word,
++ void *data)
+ {
+- PRTMP_ADAPTER pAd = net_dev->priv;
+- unsigned int counter;
++ RTMP_ADAPTER *pAd = dev;
+
+- for (counter = eeprom->offset; counter < eeprom->len; counter += sizeof(u16)) {
+- u16 value = RTMP_EEPROM_READ16(pAd, CSR_REG_BASE + counter);
+- memcpy(data, &value, sizeof(u16));
+- data += sizeof(u16);
+- }
++ RTMP_BBP_IO_WRITE32_BY_REG_ID(pAd, word, *((u8*)data));
++}
+
+- return 0;
++static void rt2500pci_open_debugfs(RTMP_ADAPTER *pAd)
++{
++ struct rt2x00debug *debug = &pAd->debug;
++
++ debug->owner = THIS_MODULE;
++ debug->mod_name = DRV_NAME;
++ debug->mod_version = DRV_VERSION;
++ debug->reg_csr.read = rt2500pci_read_csr;
++ debug->reg_csr.write = rt2500pci_write_csr;
++ debug->reg_csr.word_size = sizeof(u32);
++ debug->reg_csr.length = CSR_REG_SIZE;
++ debug->reg_eeprom.read = rt2500pci_read_eeprom;
++ debug->reg_eeprom.write = rt2500pci_write_eeprom;
++ debug->reg_eeprom.word_size = sizeof(u16);
++ debug->reg_eeprom.length = EEPROM_SIZE;
++ debug->reg_bbp.read = rt2500pci_read_bbp;
++ debug->reg_bbp.write = rt2500pci_write_bbp;
++ debug->reg_bbp.word_size = sizeof(u8);
++ debug->reg_bbp.length = BBP_SIZE;
++ debug->dev = pAd;
++
++ snprintf(debug->intf_name, sizeof(debug->intf_name),
++ "%s", pAd->net_dev->name);
++
++ if (rt2x00debug_register(debug))
++ printk(KERN_ERR "Failed to register debug handler.\n");
+ }
+
+-static struct ethtool_ops rt2x00_ethtool_ops = {
+- .get_drvinfo = rt2x00_get_drvinfo,
+- .get_regs_len = rt2x00_get_regs_len,
+- .get_regs = rt2x00_get_regs,
+- .get_link = ethtool_op_get_link,
+- .get_eeprom_len = rt2x00_get_eeprom_len,
+- .get_eeprom = rt2x00_get_eeprom,
+-};
+-#endif
++static void rt2500pci_close_debugfs(RTMP_ADAPTER *pAd)
++{
++ rt2x00debug_deregister(&pAd->debug);
++}
++#else /* RT2X00DEBUGFS */
++static inline void rt2500pci_open_debugfs(RTMP_ADAPTER *pAd){}
++static inline void rt2500pci_close_debugfs(RTMP_ADAPTER *pAd){}
++#endif /* RT2X00DEBUGFS */
+
+ static INT __devinit RT2500_init_one (
+ IN struct pci_dev *pPci_Dev,
+@@ -158,6 +208,7 @@
+ {
+ INT rc;
+
++ if (debug) {} // shuts up compiler when RT2500_DBG not defined
+ // wake up and enable device
+ if (pci_enable_device (pPci_Dev))
+ {
+@@ -176,7 +227,7 @@
+ // PCI device probe & initialization function
+ //
+ INT __devinit RT2500_probe(
+- IN struct pci_dev *pPci_Dev,
++ IN struct pci_dev *pPci_Dev,
+ IN const struct pci_device_id *ent)
+ {
+ struct net_device *net_dev;
+@@ -194,7 +245,7 @@
+
+ // alloc_etherdev() will set net_dev->name
+ net_dev = alloc_etherdev(sizeof(RTMP_ADAPTER));
+- if (net_dev == NULL)
++ if (net_dev == NULL)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "init_ethernet failed\n");
+ goto err_out;
+@@ -204,9 +255,8 @@
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+ SET_NETDEV_DEV(net_dev, &(pPci_Dev->dev));
+- SET_ETHTOOL_OPS(net_dev, &rt2x00_ethtool_ops);
+ #endif
+-
++
+ if (pci_request_regions(pPci_Dev, print_name))
+ goto err_out_free_netdev;
+
+@@ -215,10 +265,10 @@
+
+ // map physical address to virtual address for accessing register
+ csr_addr = (unsigned long) ioremap(pci_resource_start(pPci_Dev, 0), pci_resource_len(pPci_Dev, 0));
+- if (!csr_addr)
++ if (!csr_addr)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "ioremap failed for device %s, region 0x%X @ 0x%lX\n",
+- print_name, (ULONG)pci_resource_len(pPci_Dev, 0), pci_resource_start(pPci_Dev, 0));
++ DBGPRINT(RT_DEBUG_TRACE, "ioremap failed for device %s, region 0x%X @ 0x%X\n",
++ print_name, (ULONG)pci_resource_len(pPci_Dev, 0), (ULONG)pci_resource_start(pPci_Dev, 0));
+ goto err_out_free_res;
+ }
+
+@@ -233,7 +283,7 @@
+
+ // Read MAC address
+ NICReadAdapterInfo(pAd);
+-
++
+ RTMP_IO_READ32(pAd, CSR3, &StaMacReg0.word);
+ RTMP_IO_READ32(pAd, CSR4, &StaMacReg1.word);
+ net_dev->dev_addr[0] = StaMacReg0.field.Byte0;
+@@ -256,13 +306,13 @@
+ #if WIRELESS_EXT < 17
+ net_dev->get_wireless_stats = RT2500_get_wireless_stats;
+ #endif
+- net_dev->wireless_handlers = (struct iw_handler_def *) &rt2500_iw_handler_def;
++ net_dev->wireless_handlers = (struct iw_handler_def *) &rt2500_iw_handler_def;
+ #endif
+
+ net_dev->set_multicast_list = RT2500_set_rx_mode;
+ net_dev->do_ioctl = RT2500_ioctl;
+ net_dev->set_mac_address = rt2500_set_mac_address;
+-
++
+
+ // register_netdev() will call dev_alloc_name() for us
+ // TODO: Remove the following line to keep the default eth%d name
+@@ -284,8 +334,8 @@
+ if (Status != NDIS_STATUS_SUCCESS)
+ goto err_out_unmap;
+
+- DBGPRINT(RT_DEBUG_TRACE, "%s: at 0x%lx, VA 0x%lx, IRQ %d. \n",
+- net_dev->name, pci_resource_start(pPci_Dev, 0), (unsigned long)csr_addr, pPci_Dev->irq);
++ DBGPRINT(RT_DEBUG_TRACE, "%s: at 0x%x, VA 0x%lx, IRQ %d. \n",
++ net_dev->name, (ULONG)pci_resource_start(pPci_Dev, 0), (unsigned long)csr_addr, pPci_Dev->irq);
+
+ // Set driver data
+ pci_set_drvdata(pPci_Dev, net_dev);
+@@ -295,15 +345,17 @@
+ // All this occurs while the net iface is down
+ // iwconfig can then be used to configure card BEFORE
+ // ifconfig ra0 up is applied.
+- // Note the RT2500STA.dat file will still overwrite settings
++ // Note the RT2500STA.dat file will still overwrite settings
+ // but it is useful for the settings iwconfig doesn't let you at
+- PortCfgInit(pAd);
++ PortCfgInit(pAd);
+
+ MlmeQueueInit(&pAd->Mlme.Queue); // (never fails)
+
+ // Build channel list for default physical mode
+ BuildChannelList(pAd);
+
++ rt2500pci_open_debugfs(pAd);
++
+ return 0;
+
+ err_out_unmap:
+@@ -447,7 +499,7 @@
+
+ if (pAdapter->PortCfg.BssType == BSS_MONITOR && pAdapter->PortCfg.MallowRFMONTx != TRUE)
+ {
+- dev_kfree_skb_irq(skb);
++ dev_kfree_skb_irq(skb);
+ return 0;
+ }
+
+@@ -465,7 +517,7 @@
+ // This function has to manage NdisSendComplete return call within its routine
+ // NdisSendComplete will acknowledge upper layer in two steps.
+ // 1. Within Packet Enqueue, set the NDIS_STATUS_PENDING
+- // 2. Within TxRingTxDone / PrioRingTxDone call NdisSendComplete with final status
++ // 2. Within TxRingTxDone / PrioRingTxDone call NdisSendComplete with final status
+ // initial skb->data_len=0, we will use this variable to store data size when fragment(in TKIP)
+ // and skb->len is actual data len
+ skb->data_len = skb->len;
+@@ -482,7 +534,7 @@
+ // There are two place calling dequeue for TX ring.
+ // 1. Here, right after queueing the frame.
+ // 2. At the end of TxRingTxDone service routine.
+- if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
++ if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF)) &&
+ (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS)))
+ {
+@@ -504,7 +556,7 @@
+ Arguments:
+ irq interrupt line
+ dev_instance Pointer to net_device
+- rgs store process's context before entering ISR,
++ rgs store process's context before entering ISR,
+ this parameter is just for debug purpose.
+
+ Return Value:
+@@ -514,10 +566,16 @@
+
+ ========================================================================
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+ irqreturn_t RTMPIsr(
+- IN INT irq,
+- IN VOID *dev_instance,
++ IN INT irq,
++ IN VOID *dev_instance,
+ IN struct pt_regs *rgs)
++#else
++irqreturn_t RTMPIsr(
++ IN INT irq,
++ IN VOID *dev_instance)
++#endif
+ {
+ struct net_device *net_dev = dev_instance;
+ PRTMP_ADAPTER pAdapter = net_dev->priv;
+@@ -643,29 +701,29 @@
+ if(!is_valid_ether_addr(&mac->sa_data[0]))
+ return -EINVAL;
+
+-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20))
+ BUG_ON(net_dev->addr_len != ETH_ALEN);
+-#endif
+-
++#endif
++
+ memcpy(net_dev->dev_addr, mac->sa_data, ETH_ALEN);
+ memcpy(pAd->CurrentAddress, mac->sa_data, ETH_ALEN);
+-
++
+ memset(&set_mac, 0x00, sizeof(INT));
+ set_mac = (net_dev->dev_addr[0]) |
+ (net_dev->dev_addr[1] << 8) |
+ (net_dev->dev_addr[2] << 16) |
+ (net_dev->dev_addr[3] << 24);
+-
++
+ RTMP_IO_WRITE32(pAd, CSR3, set_mac);
+-
++
+ memset(&set_mac, 0x00, sizeof(INT));
+ set_mac = (net_dev->dev_addr[4]) |
+ (net_dev->dev_addr[5] << 8);
+-
++
+ RTMP_IO_WRITE32(pAd, CSR4, set_mac);
+-
++
+ printk(KERN_INFO "***rt2x00***: Info - Mac address changed to: %02x:%02x:%02x:%02x:%02x:%02x.\n", net_dev->dev_addr[0], net_dev->dev_addr[1], net_dev->dev_addr[2], net_dev->dev_addr[3], net_dev->dev_addr[4], net_dev->dev_addr[5]);
+-
++
+ return 0;
+ }
+
+@@ -697,11 +755,13 @@
+
+ pAd->iw_stats.status = 0; // Status - device dependent for now
+
+- pAd->iw_stats.qual.qual = pAd->Mlme.ChannelQuality;//pAd->Mlme.RoamCqi; // link quality (%retries, SNR, %missed beacons or better...)
+- pAd->iw_stats.qual.level = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET; // signal level (dBm)
+-
++ pAd->iw_stats.qual.qual = pAd->Mlme.ChannelQuality;// link quality (%retries, SNR, %missed beacons or better...)
++ pAd->iw_stats.qual.level = abs(pAd->PortCfg.LastRssi); // signal level (dBm)
++ pAd->iw_stats.qual.level += 256 - RSSI_TO_DBM_OFFSET;
++
+ pAd->iw_stats.qual.noise = (pAd->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAd->PortCfg.LastR17Value); // // noise level (dBm)
+- pAd->iw_stats.qual.updated = 3; // Flags to know if updated
++ pAd->iw_stats.qual.noise += 256 - 143;
++ pAd->iw_stats.qual.updated = 1; // Flags to know if updated
+
+ pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid
+ pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe
+@@ -791,7 +851,7 @@
+ IN struct net_device *net_dev)
+ {
+ RTMP_ADAPTER *pAd;
+- pAd = net_dev->priv;
++ pAd = net_dev->priv;
+ if (pAd->PortCfg.BssType == BSS_MONITOR)
+ {
+ RTMP_IO_WRITE32(pAd, RXCSR0, 0x46);
+@@ -808,7 +868,7 @@
+ pAd->bAcceptPromiscuous = FALSE;
+ RTMP_IO_WRITE32(pAd, RXCSR0, 0x7e);
+ DBGPRINT(RT_DEBUG_TRACE, "rt2500 acknowledge MONITOR/PROMISC off\n");
+- }
++ }
+
+ }
+
+@@ -867,7 +927,9 @@
+ IN struct pci_dev *pPci_Dev)
+ {
+ struct net_device *net_dev = pci_get_drvdata(pPci_Dev);
+- // RTMP_ADAPTER *pAd = net_dev->priv;
++ RTMP_ADAPTER *pAd = netdev_priv(net_dev);
++
++ rt2500pci_close_debugfs(pAd);
+
+ // Free Ring buffers
+ RTMPFreeDMAMemory(net_dev->priv);
+@@ -915,7 +977,7 @@
+
+ if(pAdapter->PortCfg.bRadio)
+ MlmeRadioOff(pAdapter);
+-
++
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14))
+ printk(KERN_NOTICE "%s: got suspend request (state %d)\n",
+ dev->name, state);
+@@ -944,7 +1006,11 @@
+ PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ int status;
+
+- pci_enable_device(pdev);
++ // FIXME: code should process error case correctly
++ if (pci_enable_device(pdev)) {
++ printk(KERN_ERR "rt2500: could not resume from suspend");
++ return -EIO;
++ }
+
+ printk(KERN_NOTICE "%s: got resume request\n", dev->name);
+
+@@ -991,7 +1057,7 @@
+ suspend: rt2500_suspend,
+ resume: rt2500_resume,
+ #endif /* CONFIG_PM */
+-#if LINUX_VERSION_CODE >= 0x20412 || BIG_ENDIAN == TRUE || RTMP_EMBEDDED == TRUE
++#if LINUX_VERSION_CODE >= 0x20412 || BIG_ENDIAN == TRUE
+ remove: __devexit_p(RT2500_remove_one),
+ #else
+ remove: __devexit(RT2500_remove_one),
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_tkip.c rt2500-cvs-2007061011/Module/rtmp_tkip.c
+--- rt2500-1.1.0-b4/Module/rtmp_tkip.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_tkip.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,125 +1,125 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_tkip.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulW 25th Feb 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulW 25th Feb 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-// Rotation functions on 32 bit values
++// Rotation functions on 32 bit values
+ #define ROL32( A, n ) ( ((A) << (n)) | ( ((A)>>(32-(n))) ) )
+-#define ROR32( A, n ) ROL32( (A), 32-(n) )
++#define ROR32( A, n ) ROL32( (A), 32-(n) )
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Convert from UCHAR[] to ULONG in a portable way
+-
++ Convert from UCHAR[] to ULONG in a portable way
++
+ Arguments:
+ pMICKey pointer to MIC Key
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+-ULONG RTMPTkipGetUInt32(
++ULONG RTMPTkipGetUInt32(
+ IN PUCHAR pMICKey)
+-{
+- ULONG res = 0;
++{
++ ULONG res = 0;
+ int i;
+-
+- for (i = 0; i < 4; i++)
+- {
+- res |= (*pMICKey++) << (8 * i);
++
++ for (i = 0; i < 4; i++)
++ {
++ res |= (*pMICKey++) << (8 * i);
+ }
+
+- return res;
+-}
++ return res;
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Convert from ULONG to UCHAR[] in a portable way
+-
++ Convert from ULONG to UCHAR[] in a portable way
++
+ Arguments:
+ pDst pointer to destination for convert ULONG to UCHAR[]
+ val the value for convert
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPTkipPutUInt32(
+ IN OUT PUCHAR pDst,
+- IN ULONG val)
+-{
++ IN ULONG val)
++{
+ int i;
+-
+- for(i = 0; i < 4; i++)
+- {
+- *pDst++ = (UCHAR) val;
+- val >>= 8;
+- }
+-}
++
++ for(i = 0; i < 4; i++)
++ {
++ *pDst++ = (UCHAR) val;
++ val >>= 8;
++ }
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Calculate the MIC Value.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to source data for Calculate MIC Value
+ Len Indicate the length of the source data
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+-VOID RTMPTkipAppend(
+- IN PTKIP_KEY_INFO pTkip,
++VOID RTMPTkipAppend(
++ IN PTKIP_KEY_INFO pTkip,
+ IN PUCHAR pSrc,
+- IN UINT nBytes)
++ IN UINT nBytes)
+ {
+ register ULONG M, L, R, nBytesInM;
+
+@@ -128,7 +128,7 @@
+ R = pTkip->R;
+ nBytesInM = pTkip->nBytesInM;
+ M = pTkip->M;
+-
++
+ // Alignment case
+ if((nBytesInM == 0) && ((((unsigned long)pSrc) & 0x3) == 0))
+ {
+@@ -141,7 +141,7 @@
+ #endif
+ pSrc += 4;
+ nBytes -= 4;
+-
++
+ L ^= M;
+ R ^= ROL32( L, 17 );
+ L += R;
+@@ -154,7 +154,7 @@
+ }
+ nBytesInM = 0;
+ M = 0;
+-
++
+ while(nBytes > 0)
+ {
+ M |= (*pSrc << (8* nBytesInM));
+@@ -162,7 +162,7 @@
+ nBytesInM++;
+ pSrc++;
+ nBytes--;
+-
++
+ if( nBytesInM >= 4 )
+ {
+ L ^= M;
+@@ -186,10 +186,10 @@
+ {
+ M |= (*pSrc << (8* nBytesInM));
+ nBytesInM++;
+-
++
+ pSrc++;
+ nBytes--;
+-
++
+ if( nBytesInM >= 4 )
+ {
+ L ^= M;
+@@ -207,23 +207,23 @@
+ }
+ }
+ }
+-
++
+ // load data from register to memory
+ pTkip->M = M;
+ pTkip->nBytesInM = nBytesInM;
+ pTkip->L = L;
+ pTkip->R = R;
+-}
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Get the MIC Value.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+
+@@ -231,7 +231,7 @@
+ the MIC Value is store in pAdapter->PrivateInfo.MIC
+ ========================================================================
+ */
+-VOID RTMPTkipGetMIC(
++VOID RTMPTkipGetMIC(
+ IN PTKIP_KEY_INFO pTkip)
+ {
+ static unsigned char Last[] = {"\x5a\x00\x00\x00\x00\x00\x00\x00"};
+@@ -242,14 +242,14 @@
+ // The appendByte function has already computed the result.
+ RTMPTkipPutUInt32(pTkip->MIC, pTkip->L);
+ RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R);
+-}
++}
+
+ /*
+ ========================================================================
+
+ Routine Description:
+ Compare MIC value of received MSDU
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the received Plain text data
+@@ -257,13 +257,13 @@
+ pSA Pointer to SA address
+ pMICKey pointer to MIC Key
+ Len the length of the received plain text data exclude MIC value
+-
++
+ Return Value:
+ TRUE MIC value matched
+ FALSE MIC value mismatched
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPTkipCompareMICValue(
+@@ -288,19 +288,19 @@
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pSA, 6);
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, Priority, 4);
+-
++
+ // Calculate MIC value from plain text data
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pSrc, Len);
+
+ // Get MIC value from decrypted plain data
+ RTMPTkipGetMIC(&pAdapter->PrivateInfo.Rx);
+-
++
+ // Move MIC value from MSDU, this steps should move to data path.
+ // Since the MIC value might cross MPDUs.
+ if(!NdisEqualMemory(pAdapter->PrivateInfo.Rx.MIC, pSrc + Len, 8))
+ {
+ INT i;
+-
++
+ DBGPRINT(RT_DEBUG_ERROR, "! TKIP MIC Error !\n"); //MIC error.
+ DBGPRINT(RT_DEBUG_INFO, "Orig MIC value ="); //MIC error.
+ for (i = 0; i < 8; i++)
+@@ -324,7 +324,7 @@
+
+ Routine Description:
+ Compare MIC value of received MSDU
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pLLC LLC header
+@@ -333,13 +333,13 @@
+ pSA Pointer to SA address
+ pMICKey pointer to MIC Key
+ Len the length of the received plain text data exclude MIC value
+-
++
+ Return Value:
+ TRUE MIC value matched
+ FALSE MIC value mismatched
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPTkipCompareMICValueWithLLC(
+@@ -352,13 +352,13 @@
+ IN UINT Len)
+ {
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
+-
++
+ // Init MIC value calculation and reset the message
+ pAdapter->PrivateInfo.Rx.L = RTMPTkipGetUInt32(pMICKey);
+ pAdapter->PrivateInfo.Rx.R = RTMPTkipGetUInt32(pMICKey + 4);
+ pAdapter->PrivateInfo.Rx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Rx.M = 0;
+-
++
+ // DA
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Rx, pDA, 6);
+ // SA
+@@ -405,20 +405,20 @@
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware transmit function
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to Ndis Packet for MIC calculation
+ pEncap Pointer to LLC encap data
+ LenEncap Total encap length, might be 0 which indicates no encap
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPCalculateMICValue(
+@@ -430,21 +430,21 @@
+ {
+ PUCHAR pSrc;
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
+-
++
+ pSrc = (PUCHAR) skb->data;
+-
++
+ // Init MIC value calculation and reset the message
+ pAdapter->PrivateInfo.Tx.L = RTMPTkipGetUInt32(pWpaKey->TxMic);
+ pAdapter->PrivateInfo.Tx.R = RTMPTkipGetUInt32(pWpaKey->TxMic + 4);
+ pAdapter->PrivateInfo.Tx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Tx.M = 0;
+-
++
+ // DA & SA field
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc, 12);
+-
++
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, Priority, 4);
+-
++
+ if (LenEncap > 0)
+ {
+ // LLC encapsulation
+@@ -454,7 +454,7 @@
+ }
+ else
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc + 14, skb->len - 14);
+-
++
+ // Compute the final MIC Value
+ RTMPTkipGetMIC(&pAdapter->PrivateInfo.Tx);
+ }
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_type.h rt2500-cvs-2007061011/Module/rtmp_type.h
+--- rt2500-1.1.0-b4/Module/rtmp_type.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_type.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,36 +1,36 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
+
+- /***************************************************************************
++ /***************************************************************************
+ * Module Name: rtmp_type.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulL 2md Jan 03 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulL 2md Jan 03 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __RTMP_TYPE_H__
+ #define __RTMP_TYPE_H__
+diff -Nur rt2500-1.1.0-b4/Module/rtmp_wep.c rt2500-cvs-2007061011/Module/rtmp_wep.c
+--- rt2500-1.1.0-b4/Module/rtmp_wep.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/rtmp_wep.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,40 +1,40 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: rtmp_wep.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * PaulW 28th Sep 02 Initial code
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: rtmp_wep.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * PaulW 28th Sep 02 Initial code
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-ULONG FCSTAB_32[256] =
++ULONG FCSTAB_32[256] =
+ {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+ 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+@@ -56,57 +56,57 @@
+ 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+ 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+-};
++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
++ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
++ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
++ 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
++ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
++ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
++ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
++ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
++ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
++ 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
++ 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
++ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
++ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
++ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
++ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
++ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
++ 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
++ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
++ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
++ 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
++ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
++ 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
++ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
++ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
++ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
++ 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
++ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
++ 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
++ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
++ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
++ 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
++ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
++ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
++ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
++ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
++ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
++ 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
++ 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
++ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
++ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
++};
+
+ UCHAR WEPKEY[] = {
+ //IV
+- 0x00, 0x11, 0x22,
++ 0x00, 0x11, 0x22,
+ //WEP KEY
+- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC
++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC
+ };
+
+
+@@ -114,27 +114,27 @@
+ ========================================================================
+
+ Routine Description:
+- Init WEP function.
+-
++ Init WEP function.
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pKey Pointer to the WEP KEY
+ KeyId WEP Key ID
+ KeyLen the length of WEP KEY
+ pDest Pointer to the destination which Encryption data will store in.
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPInitWepEngine(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pKey,
+ IN UCHAR KeyId,
+- IN UCHAR KeyLen,
++ IN UCHAR KeyLen,
+ IN OUT PUCHAR pDest)
+ {
+ UINT i;
+@@ -146,32 +146,32 @@
+ WEPKEY[i] = RandomByte(pAdapter); //Call mlme RandomByte() function.
+ ARCFOUR_INIT(&pAdapter->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV)
+
+- memcpy(pDest, WEPKEY, 3); //Append Init Vector
+- *(pDest+3) = (KeyId << 6); //Append KEYID
+-
++ memcpy(pDest, WEPKEY, 3); //Append Init Vector
++ *(pDest+3) = (KeyId << 6); //Append KEYID
++
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Encrypt transimitted data
+-
++ Encrypt transimitted data
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the transimitted source data that will be encrypt
+ pDest Pointer to the destination where entryption data will be store in.
+ Len Indicate the length of the source data
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPEncryptData(
+- IN PRTMP_ADAPTER pAdapter,
++ IN PRTMP_ADAPTER pAdapter,
+ IN PUCHAR pSrc,
+ IN PUCHAR pDest,
+ IN UINT Len)
+@@ -184,19 +184,19 @@
+ ========================================================================
+
+ Routine Description:
+- Decrypt received data
+-
++ Decrypt received data
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ pSrc Pointer to the received data
+ Len the length of the received data
+-
++
+ Return Value:
+ TRUE Decrypt WEP data success
+ FALSE Decrypt WEP data failed
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ BOOLEAN RTMPDecryptData(
+@@ -209,12 +209,12 @@
+ UCHAR KeyIdx;
+
+ memcpy(WEPKEY, pSrc, 3); //Get WEP IV
+-
++
+ KeyIdx = (*(pSrc + 3) & 0xc0) >> 6;
+ if (pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen == 0)
+ return (FALSE);
+-
+- memcpy(WEPKEY + 3, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
++
++ memcpy(WEPKEY + 3, pAdapter->PortCfg.SharedKey[KeyIdx].Key, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen);
+ ARCFOUR_INIT(&pAdapter->PrivateInfo.WEPCONTEXT, WEPKEY, pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen + 3);
+ ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, pSrc, pSrc + 4, Len - 4);
+ memcpy(&trailfcs, pSrc + Len - 8, 4);
+@@ -236,18 +236,18 @@
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Encryption Algorithm "ARCFOUR" initialize
+-
++ The Stream Cipher Encryption Algorithm "ARCFOUR" initialize
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+ pKey Pointer to the WEP KEY
+ KeyLen Indicate the length fo the WEP KEY
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_INIT(
+@@ -260,7 +260,7 @@
+ UINT stateindex;
+ PUCHAR state;
+ UINT counter;
+-
++
+ state = Ctx->STATE;
+ Ctx->X = 0;
+ Ctx->Y = 0;
+@@ -284,16 +284,16 @@
+ ========================================================================
+
+ Routine Description:
+- Get bytes from ARCFOUR CONTEXT (S-BOX)
+-
++ Get bytes from ARCFOUR CONTEXT (S-BOX)
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+-
++
+ Return Value:
+- UCHAR - the value of the ARCFOUR CONTEXT (S-BOX)
+-
++ UCHAR - the value of the ARCFOUR CONTEXT (S-BOX)
++
+ Note:
+-
++
+ ========================================================================
+ */
+ UCHAR ARCFOUR_BYTE(
+@@ -303,7 +303,7 @@
+ UINT y;
+ UCHAR sx, sy;
+ PUCHAR state;
+-
++
+ state = Ctx->STATE;
+ x = (Ctx->X + 1) & 0xff;
+ sx = state[x];
+@@ -315,31 +315,31 @@
+ state[x] = sy;
+
+ return(state[(sx + sy) & 0xff]);
+-
++
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Decryption Algorithm
+-
++ The Stream Cipher Decryption Algorithm
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+- pDest Pointer to the Destination
++ pDest Pointer to the Destination
+ pSrc Pointer to the Source data
+ Len Indicate the length of the Source data
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_DECRYPT(
+ IN PARCFOURCONTEXT Ctx,
+- IN PUCHAR pDest,
++ IN PUCHAR pDest,
+ IN PUCHAR pSrc,
+ IN UINT Len)
+ {
+@@ -353,19 +353,19 @@
+ ========================================================================
+
+ Routine Description:
+- The Stream Cipher Encryption Algorithm
+-
++ The Stream Cipher Encryption Algorithm
++
+ Arguments:
+ Ctx Pointer to ARCFOUR CONTEXT (SBOX)
+- pDest Pointer to the Destination
++ pDest Pointer to the Destination
+ pSrc Pointer to the Source data
+ Len Indicate the length of the Source dta
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID ARCFOUR_ENCRYPT(
+@@ -385,17 +385,17 @@
+
+ Routine Description:
+ Calculate a new FCS given the current FCS and the new data.
+-
++
+ Arguments:
+ Fcs the original FCS value
+ Cp pointer to the data which will be calculate the FCS
+ Len the length of the data
+-
++
+ Return Value:
+ ULONG - FCS 32 bits
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ ULONG RTMP_CALC_FCS32(
+@@ -406,24 +406,24 @@
+ while (Len--)
+ Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]);
+
+- return (Fcs);
+-}
++ return (Fcs);
++}
+
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Get last FCS and encrypt it to the destination
+-
++ Get last FCS and encrypt it to the destination
++
+ Arguments:
+- pDest Pointer to the Destination
+-
++ pDest Pointer to the Destination
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID RTMPSetICV(
+@@ -431,11 +431,11 @@
+ IN PUCHAR pDest)
+ {
+ pAdapter->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */
+-
++
+ #ifdef BIG_ENDIAN
+ pAdapter->PrivateInfo.FCSCRC32 = SWAP32(pAdapter->PrivateInfo.FCSCRC32);
+ #endif
+-
++
+ ARCFOUR_ENCRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAdapter->PrivateInfo.FCSCRC32, 4);
+ }
+
+diff -Nur rt2500-1.1.0-b4/Module/sanity.c rt2500-cvs-2007061011/Module/sanity.c
+--- rt2500-1.1.0-b4/Module/sanity.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/sanity.c 2007-03-21 05:25:35.000000000 +0100
+@@ -1,41 +1,42 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: sanity.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: sanity.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+-UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
++static const UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
++static const ie_oui_t wpa2_oui = {0x00, 0x0f, 0xac}; // 802.11i pp. 28, 30
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -44,13 +45,13 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeScanReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT UCHAR *BssType,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *ScanType)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT UCHAR *BssType,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *ScanType)
+ {
+ MLME_SCAN_REQ_STRUCT *Info;
+
+@@ -61,16 +62,16 @@
+ *ScanType = Info->ScanType;
+
+ if ((*BssType == BSS_INFRA || *BssType == BSS_INDEP || *BssType == BSS_ANY) &&
+- (*ScanType == SCAN_ACTIVE || *ScanType == SCAN_PASSIVE))
++ (*ScanType == SCAN_ACTIVE || *ScanType == SCAN_PASSIVE))
+ return TRUE;
+- else
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeScanReqSanity fail - wrong BssType or ScanType\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -79,16 +80,16 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeStartReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen)
+ {
+ MLME_START_REQ_STRUCT *Info;
+
+ Info = (MLME_START_REQ_STRUCT *)(Msg);
+-
++
+ if (Info->SsidLen > MAX_LEN_OF_SSID)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeStartReqSanity fail - wrong SSID length\n");
+@@ -101,7 +102,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -110,13 +111,13 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeAssocReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *ApAddr,
+- OUT USHORT *CapabilityInfo,
+- OUT ULONG *Timeout,
+- OUT USHORT *ListenIntv)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *ApAddr,
++ OUT USHORT *CapabilityInfo,
++ OUT ULONG *Timeout,
++ OUT USHORT *ListenIntv)
+ {
+ MLME_ASSOC_REQ_STRUCT *Info;
+
+@@ -129,7 +130,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -138,12 +139,12 @@
+ ==========================================================================
+ */
+ BOOLEAN MlmeAuthReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT ULONG *Timeout,
+- OUT USHORT *Alg)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT ULONG *Timeout,
++ OUT USHORT *Alg)
+ {
+ MLME_AUTH_REQ_STRUCT *Info;
+
+@@ -152,18 +153,18 @@
+ *Timeout = Info->Timeout;
+ *Alg = Info->Alg;
+
+- if ((*Alg == Ndis802_11AuthModeShared || *Alg == Ndis802_11AuthModeOpen) && !MAC_ADDR_IS_GROUP(*Addr))
++ if ((*Alg == Ndis802_11AuthModeShared || *Alg == Ndis802_11AuthModeOpen) && !MAC_ADDR_IS_GROUP(*Addr))
+ {
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "MlmeAuthReqSanity fail - wrong algorithm\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -172,16 +173,16 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerAssocRspSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *CapabilityInfo,
+- OUT USHORT *Status,
+- OUT USHORT *Aid,
+- OUT UCHAR Rates[],
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *CapabilityInfo,
++ OUT USHORT *Status,
++ OUT USHORT *Aid,
++ OUT UCHAR Rates[],
+ OUT UCHAR *RatesLen,
+- OUT BOOLEAN *ExtendedRateIeExist)
++ OUT BOOLEAN *ExtendedRateIeExist)
+ {
+ CHAR IeType, *Ptr;
+ MACFRAME *Fr = (MACFRAME *)Msg;
+@@ -195,7 +196,7 @@
+ // Mask out unnecessary capability information
+ *CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+
+- if (*Status == MLME_SUCCESS)
++ if (*Status == MLME_SUCCESS)
+ {
+ memcpy(Aid, &Fr->Octet[4], 2);
+ *Aid = (*Aid) & 0x3fff; // AID is low 14-bit
+@@ -207,8 +208,8 @@
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity fail - wrong SupportedRates IE\n");
+ return FALSE;
+- }
+- else
++ }
++ else
+ memcpy(Rates, &Fr->Octet[8], *RatesLen);
+
+ // many AP implement proprietary IEs in non-standard order, we'd better
+@@ -235,7 +236,7 @@
+ }
+ break;
+ default:
+- DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity - ignore unrecognized EID = %d\n", eid_ptr->Eid);
++ DBGPRINT(RT_DEBUG_TRACE, "PeerAssocRspSanity - ignore unrecognized EID=%d (Len=%d)\n", eid_ptr->Eid, eid_ptr->Len);
+ break;
+ }
+
+@@ -247,7 +248,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -256,11 +257,11 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerDisassocSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *Reason)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -270,7 +271,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -279,11 +280,11 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerDeauthSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT USHORT *Reason)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT USHORT *Reason)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -293,7 +294,7 @@
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -302,14 +303,14 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerAuthSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr,
+- OUT USHORT *Alg,
+- OUT USHORT *Seq,
+- OUT USHORT *Status,
+- CHAR *ChlgText)
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr,
++ OUT USHORT *Alg,
++ OUT USHORT *Seq,
++ OUT USHORT *Status,
++ CHAR *ChlgText)
+ {
+ MACFRAME *Fr = (MACFRAME *)Msg;
+
+@@ -318,43 +319,43 @@
+ memcpy(Seq, &Fr->Octet[2], 2);
+ memcpy(Status, &Fr->Octet[4], 2);
+
+- if (*Alg == Ndis802_11AuthModeOpen)
++ if (*Alg == Ndis802_11AuthModeOpen)
+ {
+- if (*Seq == 1 || *Seq == 2)
++ if (*Seq == 1 || *Seq == 2)
+ {
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong Seg#\n");
+ return FALSE;
+ }
+- }
+- else if (*Alg == Ndis802_11AuthModeShared)
++ }
++ else if (*Alg == Ndis802_11AuthModeShared)
+ {
+- if (*Seq == 1 || *Seq == 4)
++ if (*Seq == 1 || *Seq == 4)
+ {
+ return TRUE;
+- }
+- else if (*Seq == 2 || *Seq == 3)
++ }
++ else if (*Seq == 2 || *Seq == 3)
+ {
+ memcpy(ChlgText, &Fr->Octet[8], CIPHER_TEXT_LEN);
+ return TRUE;
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong Seg#\n");
+ return FALSE;
+ }
+- }
+- else
++ }
++ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerAuthSanity fail - wrong algorithm\n");
+ return FALSE;
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -363,14 +364,14 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerProbeReqSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
+ OUT MACADDR *Addr2,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen)
+-// OUT UCHAR Rates[],
+-// OUT UCHAR *RatesLen)
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen)
++// OUT UCHAR Rates[],
++// OUT UCHAR *RatesLen)
+ {
+ UCHAR Idx;
+ UCHAR RateLen;
+@@ -379,27 +380,27 @@
+
+ COPY_MAC_ADDR(Addr2, &Fr->Hdr.Addr2);
+
+- if ((Fr->Octet[0] != IE_SSID) || (Fr->Octet[1] > MAX_LEN_OF_SSID))
++ if ((Fr->Octet[0] != IE_SSID) || (Fr->Octet[1] > MAX_LEN_OF_SSID))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerProbeReqSanity fail - wrong SSID IE(Type=%d,Len=%d)\n",Fr->Octet[0],Fr->Octet[1]);
+ return FALSE;
+- }
+-
++ }
++
+ *SsidLen = Fr->Octet[1];
+ memcpy(Ssid, &Fr->Octet[2], *SsidLen);
+
+-#if 1
++#if 1
+ Idx = *SsidLen + 2;
+
+ // -- get supported rates from payload and advance the pointer
+ IeType = Fr->Octet[Idx];
+ RateLen = Fr->Octet[Idx + 1];
+- if (IeType != IE_SUPP_RATES)
++ if (IeType != IE_SUPP_RATES)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "PeerProbeReqSanity fail - wrong SupportRates IE(Type=%d,Len=%d)\n",Fr->Octet[Idx],Fr->Octet[Idx+1]);
+ return FALSE;
+ }
+- else
++ else
+ {
+ if ((pAd->PortCfg.AdhocMode == 2) && (RateLen < 8))
+ return (FALSE);
+@@ -408,7 +409,95 @@
+ return TRUE;
+ }
+
+-/*
++static inline void handle_country_ie(
++ country_ie_p p)
++{
++ int i;
++
++ DBGPRINT(RT_DEBUG_INFO,
++ " - IE_COUNTRY (ID=%d) (Len=%d) "
++ "(string=\"%c%c:%c\")\n",
++ p->eid, p->length, p->cs.co[0], p->cs.co[1], p->cs.env);
++
++ // drop malformed elements
++ if (p->length & 1 || p->length < 6) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid length\n");
++ return;
++ }
++ for (i = 0; i < offsetof(country_string_t, env); i++) {
++ if (p->cs.co[i] < 'A' || p->cs.co[i] > 'z') {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid co fld\n");
++ return;
++ }
++ }
++ if (p->cs.env != ' ' && p->cs.env != 'O' && p->cs.env != 'I') {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY invalid env field\n");
++ return;
++ }
++ if (p->length % 3 && *(char *)((char *)p + p->length + 1) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_COUNTRY pad non-null\n");
++ return;
++ }
++#ifdef RT2500_DBG
++ {
++ int num_subelements = p->length/3 - 1;
++ country_subelement_p sep = p->chans;
++ for (i = 0; i < num_subelements; i++, sep++)
++ {
++ DBGPRINT(RT_DEBUG_INFO,
++ " - Band %d First chan=%d, Num chans=%d, Max Tx Pwr=%d\n",
++ i, sep->first_chan, sep->num_chans, sep->max_tx_pwr);
++ }
++ }
++#endif /* RT2500_DBG */
++ /* TODO */
++
++} /* End handle_country_ie () */
++
++static inline int handle_rsn_ie(
++ rsn_ie_p p,
++ PNDIS_802_11_VARIABLE_IEs pVIE)
++{
++ DBGPRINT(RT_DEBUG_INFO,
++ " - IE_RSN (ID=%d, Len=%d)\n",
++ p->eid, p->length);
++
++ // drop malformed elements
++ if (p->length < 2 || p->length & 1) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid length\n");
++ return 0;
++ }
++ if (wtohs(p->version) != 1) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid version %d\n",
++ p->version);
++ return 0;
++ }
++ if (p->length >= 6) { // group cipher suite
++ if (!RTMPEqualMemory(&p->gcsuite.oui, wpa2_oui, sizeof(wpa2_oui)))
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN invalid oui "
++ "%02x %02x %02x\n",
++ p->gcsuite.oui[0], p->gcsuite.oui[1], p->gcsuite.oui[2]);
++ return 0;
++ }
++ }
++ // Copy to pVIE which will report to microsoft bssid list.
++ pVIE->ElementID = p->eid;
++ pVIE->Length = p->length;
++ memcpy(pVIE->data, &p->version, p->length);
++
++ return (p->length + 2);
++
++} /* End handle_rsn_ie () */
++
++/*
+ ==========================================================================
+ Description:
+ MLME message sanity check
+@@ -417,47 +506,56 @@
+ ==========================================================================
+ */
+ BOOLEAN PeerBeaconAndProbeRspSanity(
+- IN PRTMP_ADAPTER pAd,
+- IN VOID *Msg,
+- IN ULONG MsgLen,
+- OUT MACADDR *Addr2,
+- OUT MACADDR *Bssid,
+- OUT CHAR Ssid[],
+- OUT UCHAR *SsidLen,
+- OUT UCHAR *BssType,
+- OUT USHORT *BeaconPeriod,
+- OUT UCHAR *Channel,
+- OUT LARGE_INTEGER *Timestamp,
+- OUT BOOLEAN *CfExist,
+- OUT CF_PARM *CfParm,
+- OUT USHORT *AtimWin,
+- OUT USHORT *CapabilityInfo,
+- OUT UCHAR Rate[],
++ IN PRTMP_ADAPTER pAd,
++ IN VOID *Msg,
++ IN ULONG MsgLen,
++ OUT MACADDR *Addr2,
++ OUT MACADDR *Bssid,
++ OUT CHAR Ssid[],
++ OUT UCHAR *SsidLen,
++ OUT UCHAR *BssType,
++ OUT USHORT *BeaconPeriod,
++ OUT UCHAR *Channel,
++ OUT LARGE_INTEGER *Timestamp,
++ OUT BOOLEAN *CfExist,
++ OUT CF_PARM *CfParm,
++ OUT USHORT *AtimWin,
++ OUT USHORT *CapabilityInfo,
++ OUT UCHAR Rate[],
+ OUT UCHAR *RateLen,
+ OUT BOOLEAN *ExtendedRateIeExist,
+ OUT UCHAR *Erp,
+- OUT UCHAR *DtimCount,
+- OUT UCHAR *DtimPeriod,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *MessageToMe,
++ OUT UCHAR *DtimCount,
++ OUT UCHAR *DtimPeriod,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *MessageToMe,
+ OUT UCHAR *Legacy,
+ OUT UCHAR SupRate[],
+ OUT UCHAR *SupRateLen,
+ OUT UCHAR ExtRate[],
+ OUT UCHAR *ExtRateLen,
+- OUT PNDIS_802_11_VARIABLE_IEs pVIE)
++ OUT USHORT *VarIELen, // Length of all saved IEs.
++ OUT PNDIS_802_11_VARIABLE_IEs pVIE)
+ {
+ CHAR *Ptr, TimLen;
+ MACFRAME *Fr;
+ PBEACON_EID_STRUCT eid_ptr;
+ UCHAR SubType;
+ UCHAR Sanity;
++ UCHAR VarIE[MAX_VIE_LEN];
++
++ // armor against buffer overflow
++ UCHAR *vielim = &VarIE[MAX_VIE_LEN];
++ NDIS_802_11_VARIABLE_IEs *ptVIE = (PNDIS_802_11_VARIABLE_IEs)VarIE;
++
++ DBGPRINT(RT_DEBUG_TRACE,"===> %s\n", __FUNCTION__);
+
+ // Add for 3 necessary EID field check
+ Sanity = 0;
+
+ *ExtendedRateIeExist = FALSE;
+ *Erp = 0;
++ *VarIELen = 0;
+
+ Fr = (MACFRAME *)Msg;
+
+@@ -481,40 +579,48 @@
+ // get capability info from payload and advance the pointer
+ memcpy(CapabilityInfo, Ptr, 2);
+ Ptr += 2;
+- if (CAP_IS_ESS_ON(*CapabilityInfo))
++ DBGPRINT(RT_DEBUG_INFO, " - CapabilityInfo=0x%.2x\n", *CapabilityInfo);
++ if (CAP_IS_ESS_ON(*CapabilityInfo))
+ {
+ *BssType = BSS_INFRA;
+- }
+- else
++ }
++ else
+ {
+ *BssType = BSS_INDEP;
+ }
+
+ // Mask out unnecessary capability information
+ *CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+-
++
+ eid_ptr = (PBEACON_EID_STRUCT) Ptr;
+
+ // get variable fields from payload and advance the pointer
+ while(((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen))
+ {
++ DBGPRINT(RT_DEBUG_INFO, " - IE #%d len=%d\n",
++ eid_ptr->Eid, eid_ptr->Len);
+ switch(eid_ptr->Eid)
+ {
+ case IE_SSID:
+- // Already has one SSID EID in this beacon, ignore the second one
++ // Already have one SSID EID in this beacon, ignore second one
+ if (Sanity & 0x1)
+ break;
+ if(eid_ptr->Len <= MAX_LEN_OF_SSID)
+ {
+ memcpy(Ssid, eid_ptr->Octet, eid_ptr->Len);
+- memset(Ssid + eid_ptr->Len,0,1);
++ if (eid_ptr->Len < MAX_LEN_OF_SSID)
++ memset(Ssid + eid_ptr->Len,0,1);
+ *SsidLen = eid_ptr->Len;
+ Sanity |= 0x1;
+- //DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - ESSID=%s Len=%d\n",Ssid,eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_INFO, " - SSID=%s Len=%d\n",
++ Ssid, eid_ptr->Len);
++ DBGHEXSTR(RT_DEBUG_INFO, " - SSID(hex)=",
++ Ssid, eid_ptr->Len);
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - bad IE_SSID len=%d\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+@@ -546,13 +652,15 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_SUPP_RATES (len=%d)\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+
+ case IE_FH_PARM:
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n");
++ DBGPRINT(RT_DEBUG_INFO, " - (IE_FH_PARM) \n");
+ break;
+
+ case IE_DS_PARM:
+@@ -561,14 +669,18 @@
+ *Channel = *eid_ptr->Octet;
+ if (ChannelSanity(pAd, *Channel) == 0)
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (ch=%d)\n",*Channel);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_DS_PARM (ch=%d)\n",
++ __FUNCTION__, *Channel);
+ return FALSE;
+ }
+ Sanity |= 0x4;
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n",eid_ptr->Len);
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<=== %s - wrong IE_DS_PARM (len=%d)\n",
++ __FUNCTION__, eid_ptr->Len);
+ return FALSE;
+ }
+ break;
+@@ -581,7 +693,8 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n");
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - wrong IE_CF_PARM\n",
++ __FUNCTION__);
+ return FALSE;
+ }
+ break;
+@@ -593,7 +706,8 @@
+ }
+ else
+ {
+- DBGPRINT(RT_DEBUG_TRACE, "PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n");
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s - wrong IE_IBSS_PARM\n",
++ __FUNCTION__);
+ return FALSE;
+ }
+ break;
+@@ -605,18 +719,45 @@
+ }
+ break;
+
++ case IE_COUNTRY:
++ handle_country_ie((country_ie_p)eid_ptr);
++ break;
++
+ // New for WPA
+ case IE_WPA:
+- // Check the OUI version, filter out non-standard usage
+- if (RTMPEqualMemory(eid_ptr->Octet, WPA_OUI, 4))
+- {
+- // Copy to pVIE which will report to microsoft bssid list.
+- pVIE->ElementID = eid_ptr->Eid;
+- pVIE->Length = eid_ptr->Len;
+- memcpy(pVIE->data, eid_ptr->Octet, eid_ptr->Len);
+- }
+- DBGPRINT(RT_DEBUG_INFO, "PeerBeaconAndProbeRspSanity - Receive IE_WPA\n");
+- break;
++ if (vielim >= (UCHAR *)ptVIE + eid_ptr->Len + 2)
++ {
++ // ptVIE will report to microsoft bssid list.
++ ptVIE->ElementID = eid_ptr->Eid;
++ ptVIE->Length = eid_ptr->Len;
++ memcpy(ptVIE->data, eid_ptr->Octet, eid_ptr->Len);
++ ptVIE = (PNDIS_802_11_VARIABLE_IEs)((UCHAR *)ptVIE +
++ ptVIE->Length + 2);
++ DBGPRINT(RT_DEBUG_INFO, " - OUI (%02x:%02x:%02x:%02x)\n",
++ eid_ptr->Octet[0], eid_ptr->Octet[1],
++ eid_ptr->Octet[2], eid_ptr->Octet[3]);
++ }
++ else
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_WPA rcv area needs %d bytes: has %d left\n",
++ eid_ptr->Len + 2, vielim - (UCHAR *)ptVIE);
++ }
++ break;
++
++ case IE_RSN:
++ if (vielim >= (UCHAR *)ptVIE + eid_ptr->Len + 2)
++ {
++ ptVIE = (PNDIS_802_11_VARIABLE_IEs)((UCHAR *)ptVIE +
++ handle_rsn_ie((rsn_ie_p)eid_ptr, ptVIE));
++ }
++ else
++ {
++ DBGPRINT(RT_DEBUG_ERROR,
++ " - IE_RSN rcv area needs %d bytes: has %d left\n",
++ eid_ptr->Len + 2, vielim - (UCHAR *)ptVIE);
++ }
++ break;
+
+ case IE_EXT_SUPP_RATES:
+ // concatenate all extended rates to Rates[] and RateLen
+@@ -654,15 +795,20 @@
+ *Erp = (UCHAR)eid_ptr->Octet[0];
+ }
+ break;
+-
++
+ default:
+- DBGPRINT(RT_DEBUG_INFO, "PeerBeaconAndProbeRspSanity - unrecognized EID = %d\n", eid_ptr->Eid);
++ DBGPRINT(RT_DEBUG_ERROR, " - EID=%d (Len=%d) unrecognized\n",
++ eid_ptr->Eid, eid_ptr->Len);
+ break;
+ }
+-
++
+ eid_ptr = (PBEACON_EID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len);
+ }
+-
++ if ((UCHAR *)ptVIE > VarIE) {
++ int vielen = (UCHAR *)ptVIE - VarIE;
++ *VarIELen = vielen;
++ memcpy(pVIE, VarIE, vielen);
++ }
+
+ // in 802.11a band, AP may skip this DS IE in their BEACON
+ if ((pAd->PortCfg.Channel > 14) && ((Sanity & 0x04)==0))
+@@ -670,7 +816,8 @@
+ *Channel = pAd->PortCfg.Channel;
+ Sanity |= 0x04;
+ }
+-
++
++ DBGPRINT(RT_DEBUG_TRACE, "<=== %s: Sanity=0x%02x\n", __FUNCTION__, Sanity);
+ if (Sanity != 0x7)
+ {
+ DBGPRINT(RT_DEBUG_WARN, "PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity);
+@@ -683,19 +830,19 @@
+
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ BOOLEAN GetTimBit(
+- IN CHAR *Ptr,
+- IN USHORT Aid,
+- OUT UCHAR *TimLen,
+- OUT UCHAR *BcastFlag,
+- OUT UCHAR *DtimCount,
++ IN CHAR *Ptr,
++ IN USHORT Aid,
++ OUT UCHAR *TimLen,
++ OUT UCHAR *BcastFlag,
++ OUT UCHAR *DtimCount,
+ OUT UCHAR *DtimPeriod,
+- OUT UCHAR *MessageToMe)
++ OUT UCHAR *MessageToMe)
+ {
+ UCHAR BitCntl, N1, N2, MyByte, MyBit;
+ CHAR *IdxPtr;
+@@ -717,11 +864,11 @@
+ IdxPtr++;
+ BitCntl = *IdxPtr;
+
+- if ((*DtimCount == 0) && (BitCntl & 0x01))
++ if ((*DtimCount == 0) && (BitCntl & 0x01))
+ *BcastFlag = TRUE;
+- else
++ else
+ *BcastFlag = FALSE;
+-
++
+ #if 1
+ // Parse Partial Virtual Bitmap from TIM element
+ N1 = BitCntl & 0xfe; // N1 is the first bitmap byte#
+@@ -738,10 +885,10 @@
+
+ //if (*IdxPtr)
+ // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr));
+-
++
+ if (*IdxPtr & (0x01 << MyBit))
+ *MessageToMe = TRUE;
+- else
++ else
+ *MessageToMe = FALSE;
+ }
+ #else
+@@ -760,15 +907,15 @@
+ * \post
+ */
+ BOOLEAN GetLegacy(
+- IN CHAR *Ptr,
+- OUT UCHAR *Legacy)
++ IN CHAR *Ptr,
++ OUT UCHAR *Legacy)
+ {
+ *Legacy = 0;
+ return TRUE;
+ }
+
+ UCHAR ChannelSanity(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel)
+ {
+ UCHAR index;
+@@ -780,52 +927,52 @@
+ }
+ return 0;
+
+-#if 0
++#if 0
+ switch (pAd->PortCfg.CountryRegion)
+ {
+ case REGION_FCC: // 1 - 11
+ if ((channel > 0) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_IC: // 1 -11
+ if ((channel > 0) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_ETSI: // 1 - 13
+ if ((channel > 0) && (channel < 14))
+ return 1;
+ break;
+-
++
+ case REGION_SPAIN: // 10 - 11
+ if ((channel > 9) && (channel < 12))
+ return 1;
+ break;
+-
++
+ case REGION_FRANCE: // 10 -13
+ if ((channel > 9) && (channel < 14))
+ return 1;
+ break;
+-
++
+ case REGION_MKK: // 14
+- if (channel == 14)
++ if (channel == 14)
+ return 1;
+ break;
+-
++
+ case REGION_MKK1: // 1 - 14
+ if ((channel > 0) && (channel < 15))
+ return 1;
+ break;
+-
++
+ case REGION_ISRAEL: // 3 - 9
+ if ((channel > 2) && (channel < 10))
+ return 1;
+ break;
+-
++
+ default: // Error
+- return 0;
+- }
++ return 0;
++ }
+ return (0);
+-#endif
++#endif
+ }
+diff -Nur rt2500-1.1.0-b4/Module/sync.c rt2500-cvs-2007061011/Module/sync.c
+--- rt2500-1.1.0-b4/Module/sync.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/sync.c 2007-05-15 21:41:35.000000000 +0200
+@@ -1,37 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: sync.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: sync.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
+ * MarkW 10th Dec 04 Rolled in Ralink 1.4.5.0
+ * MarkW 5th Jun 05 Fix no-SSID broadcasting assoc.
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -59,7 +59,7 @@
+ /*
+ ==========================================================================
+ Description:
+- The sync state machine,
++ The sync state machine,
+ Parameters:
+ Sm - pointer to the state machine
+ Note:
+@@ -93,9 +93,9 @@
+ ==========================================================================
+ */
+ VOID SyncStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *Sm,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *Sm,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, (STATE_MACHINE_FUNC)Drop, SYNC_IDLE, SYNC_MACHINE_BASE);
+
+@@ -105,7 +105,7 @@
+ StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)MlmeStartReqAction);
+ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeacon);
+ // StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_RSP, (STATE_MACHINE_FUNC)PeerBeacon);
+- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction);
++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction);
+
+ //column 2
+ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan);
+@@ -127,14 +127,14 @@
+ RTMPInitTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ScanTimeout);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Becaon timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID BeaconTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+@@ -143,30 +143,30 @@
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ATIM timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID AtimTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE,"SYNC - AtimTimeout \n");
+ MlmeEnqueue(&pAd->Mlme.Queue, SYNC_STATE_MACHINE, MT2_ATIM_TIMEOUT, 0, NULL);
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan timeout handler, executed in timer thread
+ ==========================================================================
+ */
+ VOID ScanTimeout(
+- IN unsigned long data)
++ IN unsigned long data)
+ {
+ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)data;
+
+@@ -175,15 +175,15 @@
+ MlmeHandler(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME SCAN req state machine procedure
+ ==========================================================================
+ */
+ VOID MlmeScanReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType;
+ ULONG Now;
+@@ -192,13 +192,13 @@
+ RTMPSuspendMsduTransmission(pAd);
+
+ // first check the parameter sanity
+- if (MlmeScanReqSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &BssType,
+- Ssid,
+- &SsidLen,
+- &ScanType))
++ if (MlmeScanReqSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &BssType,
++ Ssid,
++ &SsidLen,
++ &ScanType))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - MlmeScanReqAction\n");
+ Now = jiffies;
+@@ -212,12 +212,12 @@
+ pAd->Mlme.SyncAux.ScanType = ScanType;
+ pAd->Mlme.SyncAux.SsidLen = SsidLen;
+ memcpy(pAd->Mlme.SyncAux.Ssid, Ssid, SsidLen);
+-
++
+ // start from the first channel
+ pAd->Mlme.SyncAux.Channel = FirstChannel(pAd);
+ ScanNextChannel(pAd);
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "SYNC - MlmeScanReqAction() sanity check fail. BUG!!!\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+@@ -225,15 +225,15 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME JOIN req state machine procedure
+ ==========================================================================
+ */
+ VOID MlmeJoinReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ BSS_ENTRY *pBss;
+ MLME_JOIN_REQ_STRUCT *Info = (MLME_JOIN_REQ_STRUCT *)(Elem->Msg);
+@@ -255,7 +255,7 @@
+ AsicSwitchChannel(pAd, pBss->Channel);
+ AsicLockChannel(pAd, pBss->Channel);
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Switch to channel %d, SSID %s \n", pBss->Channel, pAd->Mlme.SyncAux.Ssid);
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x ...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x ...\n",
+ pAd->Mlme.SyncAux.Bssid.Octet[0], pAd->Mlme.SyncAux.Bssid.Octet[1],
+ pAd->Mlme.SyncAux.Bssid.Octet[2], pAd->Mlme.SyncAux.Bssid.Octet[3],
+ pAd->Mlme.SyncAux.Bssid.Octet[4], pAd->Mlme.SyncAux.Bssid.Octet[5]);
+@@ -264,17 +264,17 @@
+ pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON;
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ MLME START Request state machine procedure, starting an IBSS
+ ==========================================================================
+ */
+ VOID MlmeStartReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen;
++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen;
+
+ // New for WPA security suites
+ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+@@ -293,20 +293,20 @@
+ TimeStamp.vv.LowPart = 0;
+ TimeStamp.vv.HighPart = 0;
+
+- if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen))
++ if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen))
+ {
+ // reset all the timers
+ RTMPCancelTimer(&pAd->Mlme.SyncAux.ScanTimer);
+ RTMPCancelTimer(&pAd->Mlme.SyncAux.BeaconTimer);
+
+- // PortCfg.PrivacyInvoked should have been set via OID_802_11_WEP_STATUS.
++ // PortCfg.PrivacyInvoked should have been set via OID_802_11_WEP_STATUS.
+ // pAd->PortCfg.PrivacyInvoked = FALSE;
+
+- memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
++ memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
+ pAd->PortCfg.SsidLen = SsidLen;
+ pAd->PortCfg.BssType = BSS_INDEP;
+- Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
+- (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
++ Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
++ (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
+ (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);
+ pAd->PortCfg.CapabilityInfo = CAP_GENERATE(0,1,0,0,Privacy, (pAd->PortCfg.WindowsTxPreamble == Rt802_11PreambleShort));
+ pAd->PortCfg.BeaconPeriod = pAd->PortCfg.IbssConfig.BeaconPeriod;
+@@ -328,7 +328,7 @@
+
+ // generate a radom number as BSSID
+ MacAddrRandomBssid(pAd, &pAd->PortCfg.Bssid);
+- AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
++ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+
+@@ -341,17 +341,17 @@
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+ Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &pAd->PortCfg.Bssid,
+- Ssid, SsidLen, pAd->PortCfg.BssType, pAd->PortCfg.BeaconPeriod,
+- CfExist, &CfParm, pAd->PortCfg.AtimWin, pAd->PortCfg.CapabilityInfo,
++ Ssid, SsidLen, pAd->PortCfg.BssType, pAd->PortCfg.BeaconPeriod,
++ CfExist, &CfParm, pAd->PortCfg.AtimWin, pAd->PortCfg.CapabilityInfo,
+ pAd->PortCfg.SupportedRates, pAd->PortCfg.SupportedRatesLen, TRUE,
+- pAd->PortCfg.Channel, Elem->Rssi, TimeStamp, pVIE);
++ pAd->PortCfg.Channel, Elem->Rssi, TimeStamp, 0, pVIE);
+ }
+ #endif
+
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_START_CONF, (USHORT)MLME_SUCCESS);
+- }
+- else
++ }
++ else
+ {
+ printk(KERN_ERR DRV_NAME "SYNC - MlmeStartReqAction() sanity check fail. BUG!!!\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+@@ -359,18 +359,18 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ peer sends beacon back when scanning
+ ==========================================================================
+ */
+ VOID PeerBeaconAtScanAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+- UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen,
++ UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, Rates[MAX_LEN_OF_SUPPORTED_RATES], RatesLen,
+ SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe, Legacy;
+ CF_PARM CfParm;
+ USHORT BeaconPeriod, AtimWin, CapabilityInfo;
+@@ -383,54 +383,55 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00);
+ Fr = (MACFRAME *) Elem->Msg;
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+- pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid, Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &CfParm,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid, Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &CfParm,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ ULONG Idx;
+ UCHAR Rssi = 0;
+ UCHAR Noise = 0;
+
+ // This correct im-proper RSSI indication during SITE SURVEY issue.
+- // Always report bigger RSSI during SCANNING when receiving multiple BEACONs from the same AP.
+- // This case happens because BEACONs come from adjacent channels, so RSSI become weaker as we
++ // Always report bigger RSSI during SCANNING when receiving multiple BEACONs from the same AP.
++ // This case happens because BEACONs come from adjacent channels, so RSSI become weaker as we
+ // switch to more far away channels.
+ Idx = BssTableSearch(&pAd->PortCfg.BssTab, &Bssid);
+ if (Idx != BSS_NOT_FOUND)
+- {
++ {
+ Rssi = pAd->PortCfg.BssTab.BssEntry[Idx].Rssi;
+ Noise = pAd->PortCfg.BssTab.BssEntry[Idx].Noise;
+ }
+@@ -445,25 +446,25 @@
+
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+- BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen, BssType,
+- BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo, Rates,
+- RatesLen, ExtendedRateIeExist, Channel, Rssi, Noise, TimeStamp, pVIE);
++ BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen, BssType,
++ BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo, Rates,
++ RatesLen, ExtendedRateIeExist, Channel, Rssi, Noise, TimeStamp, VarIELen, pVIE);
+ }
+ // sanity check fail, ignored
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ When waiting joining the (I)BSS, beacon received from external
+ ==========================================================================
+ */
+ VOID PeerBeaconAtJoinAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, RatesLen, MessageToMe,
++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, RatesLen, MessageToMe,
+ Rates[MAX_LEN_OF_SUPPORTED_RATES], DtimCount, DtimPeriod, BcastFlag, Legacy;
+ LARGE_INTEGER TimeStamp;
+ USHORT BeaconPeriod, AtimWin, CapabilityInfo;
+@@ -474,46 +475,48 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+ pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid,
+- Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &Cf,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid,
++ Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &Cf,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ // Disqualify 11b only adhoc when we are in 11g only adhoc mode
+ if ((BssType == BSS_INDEP) && (pAd->PortCfg.AdhocMode == 2) && (RatesLen < 12))
+ return;
+-
++
+ if (MAC_ADDR_EQUAL(&pAd->Mlme.SyncAux.Bssid, &Bssid))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - receive desired BEACON at JoinWaitBeacon...\n");
+@@ -522,7 +525,7 @@
+ // Update RSSI to prevent No signal display when cards first initialized
+ pAd->PortCfg.LastRssi = Elem->Rssi;
+ pAd->PortCfg.AvgRssi = Elem->Rssi;
+-
++
+ if (pAd->Mlme.SyncAux.SsidLen > 0)
+ {
+ memcpy(pAd->PortCfg.Ssid, pAd->Mlme.SyncAux.Ssid, pAd->Mlme.SyncAux.SsidLen);
+@@ -533,7 +536,7 @@
+ memcpy(pAd->PortCfg.Ssid, Ssid, SsidLen);
+ pAd->PortCfg.SsidLen = SsidLen;
+ }
+-
++
+ COPY_MAC_ADDR(&pAd->PortCfg.Bssid, &Bssid);
+ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+
+@@ -620,22 +623,22 @@
+ {
+ pAd->PortCfg.ExtRateLen = 0;
+ }
+-
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP's SupportedRatesLen=%d, set STA's SupportedRateLen=%d\n",
++
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP's SupportedRatesLen=%d, set STA's SupportedRateLen=%d\n",
+ RatesLen, pAd->PortCfg.SupportedRatesLen);
+-
++
+ // Mask out unnecessary capability information
+ CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;
+-
++
+ // Check for 802.11g information, if 802.11 b/g mixed mode.
+ // We can't support its short preamble for now.
+ pAd->PortCfg.CapabilityInfo = CapabilityInfo;
+
+- if ((BssType == BSS_INDEP) && (CAP_IS_IBSS_ON(CapabilityInfo)))
++ if ((BssType == BSS_INDEP) && (CAP_IS_IBSS_ON(CapabilityInfo)))
+ {
+ pAd->PortCfg.AtimWin = AtimWin;
+- }
+- else if (BssType == BSS_INFRA)
++ }
++ else if (BssType == BSS_INFRA)
+ {
+ pAd->PortCfg.CfpPeriod = Cf.CfpPeriod;
+ pAd->PortCfg.CfpMaxDuration = Cf.CfpMaxDuration;
+@@ -650,19 +653,19 @@
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_SUCCESS);
+ }
+ // not to me BEACON, ignored
+- }
++ }
+ // sanity check fail, ignore this frame
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ receive BEACON from peer
+ ==========================================================================
+ */
+ VOID PeerBeacon(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Bssid, Addr2;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+@@ -679,7 +682,8 @@
+ UCHAR SupRateLen, ExtRateLen;
+
+ // New for WPA security suites
+- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
++ USHORT VarIELen; // Length of all saved IEs.
++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
+ NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
+
+ if (!INFRA_ON(pAd) && !ADHOC_ON(pAd))
+@@ -688,35 +692,36 @@
+ // Init Variable IE structure
+ pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
+ pVIE->Length = 0;
+- if (PeerBeaconAndProbeRspSanity(pAd,
+- Elem->Msg,
+- Elem->MsgLen,
+- &Addr2,
+- &Bssid,
+- Ssid,
+- &SsidLen,
+- &BssType,
+- &BeaconPeriod,
+- &Channel,
+- &TimeStamp,
+- &CfExist,
+- &CfParm,
+- &AtimWin,
+- &CapabilityInfo,
+- Rates,
++ if (PeerBeaconAndProbeRspSanity(pAd,
++ Elem->Msg,
++ Elem->MsgLen,
++ &Addr2,
++ &Bssid,
++ Ssid,
++ &SsidLen,
++ &BssType,
++ &BeaconPeriod,
++ &Channel,
++ &TimeStamp,
++ &CfExist,
++ &CfParm,
++ &AtimWin,
++ &CapabilityInfo,
++ Rates,
+ &RatesLen,
+ &ExtendedRateIeExist,
+ &Erp,
+- &DtimCount,
+- &DtimPeriod,
+- &BcastFlag,
+- &MessageToMe,
++ &DtimCount,
++ &DtimPeriod,
++ &BcastFlag,
++ &MessageToMe,
+ &Legacy,
+ SupRate,
+ &SupRateLen,
+ ExtRate,
+ &ExtRateLen,
+- pVIE))
++ &VarIELen,
++ pVIE))
+ {
+ BOOLEAN is_my_bssid, is_my_ssid;
+ ULONG Bssidx, Now;
+@@ -732,7 +737,7 @@
+ return;
+
+ //
+- // Housekeeping "SsidBssTab" table for later-on ROAMing usage.
++ // Housekeeping "SsidBssTab" table for later-on ROAMing usage.
+ //
+ Bssidx = BssTableSearch(&pAd->Mlme.CntlAux.SsidBssTab, &Bssid);
+ if (Bssidx == BSS_NOT_FOUND)
+@@ -743,24 +748,24 @@
+ return;
+ if (!RTMPEqualMemory(pAd->PortCfg.Ssid, pAd->Mlme.CntlAux.Ssid, pAd->PortCfg.SsidLen))
+ return;
+-
++
+ // discover new AP of this network, create BSS entry
+- Bssidx = BssTableSetEntry(pAd, &pAd->Mlme.CntlAux.SsidBssTab, &Bssid, Ssid, SsidLen,
+- BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
+- Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, pVIE);
++ Bssidx = BssTableSetEntry(pAd, &pAd->Mlme.CntlAux.SsidBssTab, &Bssid, Ssid, SsidLen,
++ BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
++ Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, VarIELen, pVIE);
+
+ if (Bssidx == BSS_NOT_FOUND) // return if BSS table full
+- return;
++ return;
+
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - New AP added to SsidBssTab[%d], RSSI=%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
+- Bssidx, Elem->Rssi, Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - New AP added to SsidBssTab[%d], RSSI=%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
++ Bssidx, Elem->Rssi, Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
+ Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5]);
+ }
+
+ // if the ssid matched & bssid unmatched, we should select the bssid with large value.
+ // This might happened when two STA start at the same time
+- if (is_my_ssid && (! is_my_bssid) && ADHOC_ON(pAd))
+- {
++ if (is_my_ssid && (! is_my_bssid) && ADHOC_ON(pAd)
++ && (BssType == BSS_INDEP)) {
+ INT i;
+ // Add to safe guard adhoc wep status mismatch
+ if (pAd->PortCfg.WepStatus != pAd->Mlme.CntlAux.SsidBssTab.BssEntry[Bssidx].WepStatus)
+@@ -773,7 +778,7 @@
+ {
+ AsicDisableSync(pAd);
+ memcpy(&pAd->PortCfg.Bssid, &Bssid, 6);
+- AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
++ AsicSetBssid(pAd, &pAd->PortCfg.Bssid);
+ MakeIbssBeacon(pAd);
+ AsicEnableIbssSync(pAd);
+ break;
+@@ -781,9 +786,9 @@
+ }
+ }
+
+- DBGPRINT(RT_DEBUG_INFO, "SYNC - PeerBeacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%02x\n",
+- Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
+- Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5],
++ DBGPRINT(RT_DEBUG_INFO, "SYNC - PeerBeacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%02x\n",
++ Bssid.Octet[0], Bssid.Octet[1], Bssid.Octet[2],
++ Bssid.Octet[3], Bssid.Octet[4], Bssid.Octet[5],
+ DtimCount, DtimPeriod, Elem->Rssi);
+
+ Now = jiffies;
+@@ -793,24 +798,24 @@
+
+ //
+ // BEACON from my BSSID - either IBSS or INFRA network
+- //
++ //
+ if (is_my_bssid)
+ {
+- // 2002/12/06 - patch Abocom AP bug, which forgets to set "Privacy" bit in
+- // AssocRsp even though this bit is ON in Beacon. So we update according
++ // 2002/12/06 - patch Abocom AP bug, which forgets to set "Privacy" bit in
++ // AssocRsp even though this bit is ON in Beacon. So we update according
+ // to following Beacon frame.
+ // pAd->PortCfg.PrivacyInvoked = CAP_IS_PRIVACY_ON(CapabilityInfo);
+-
++
+ pAd->PortCfg.LastBeaconRxTime = Now;
+ #if 1
+ // at least one 11b peer joined. downgrade the MaxTxRate to 11Mbps
+ // after last 11b peer left for several seconds, we'll auto switch back to 11G rate
+ // in MlmePeriodicExec()
+- if (ADHOC_ON(pAd) && (RatesLen <= 4))
++ if (ADHOC_ON(pAd) && (RatesLen <= 4))
+ {
+ // this timestamp is for MlmePeriodicExec() to check if all 11B peers have left
+ pAd->PortCfg.Last11bBeaconRxTime = Now;
+-
++
+ if (pAd->PortCfg.MaxTxRate > RATE_11)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - 11b peer joined. down-grade to 11b TX rates \n");
+@@ -828,22 +833,22 @@
+ (pAd->PortCfg.LastRssi < pAd->PortCfg.RssiTrigger))
+ {
+ // NDIS_802_11_RSSI Dbm = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET;
+- // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, less than threshold %d dBm\n",
++ // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, less than threshold %d dBm\n",
+ // Dbm, pAd->PortCfg.RssiTrigger - RSSI_TO_DBM_OFFSET);
+ }
+ else if ((pAd->PortCfg.RssiTriggerMode == RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD) &&
+ (pAd->PortCfg.LastRssi > pAd->PortCfg.RssiTrigger))
+ {
+ // NDIS_802_11_RSSI Dbm = pAd->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET;
+- // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, greater than threshold %d dBm\n",
++ // DBGPRINT(RT_DEBUG_TRACE, "SYNC - NdisMIndicateStatus *** RSSI %d dBm, greater than threshold %d dBm\n",
+ // Dbm, pAd->PortCfg.RssiTrigger - RSSI_TO_DBM_OFFSET);
+ }
+
+ if (INFRA_ON(pAd)) // && (pAd->PortCfg.PhyMode == PHY_11BG_MIXED))
+ {
+ BOOLEAN bUseShortSlot, bUseBGProtection;
+-
+- // decide to use/change to -
++
++ // decide to use/change to -
+ // 1. long slot (20 us) or short slot (9 us) time
+ // 2. turn on/off RTS/CTS and/or CTS-to-self protection
+ // 3. short preamble
+@@ -867,7 +872,7 @@
+ }
+
+ // only INFRASTRUCTURE mode support power-saving feature
+- if (INFRA_ON(pAd) && (pAd->PortCfg.Psm == PWR_SAVE))
++ if (INFRA_ON(pAd) && (pAd->PortCfg.Psm == PWR_SAVE))
+ {
+ // 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL
+ // 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE
+@@ -882,17 +887,17 @@
+ else if (BcastFlag && (DtimCount == 0) && pAd->PortCfg.RecvDtim)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - AP backlog broadcast/multicast, stay AWAKE\n");
+- }
++ }
+ else if ((RTMPFreeDescriptorRequest(pAd, TX_RING, TX_RING_SIZE) != NDIS_STATUS_SUCCESS) ||
+ (RTMPFreeDescriptorRequest(pAd, PRIO_RING, PRIO_RING_SIZE) != NDIS_STATUS_SUCCESS))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - outgoing frame in TxRing/PrioRing, stay AWAKE\n");
+ }
+- else
++ else
+ {
+ USHORT NextDtim = DtimCount;
+
+- if (NextDtim == 0)
++ if (NextDtim == 0)
+ NextDtim = DtimPeriod;
+
+ TbttNumToNextWakeUp = pAd->PortCfg.DefaultListenCount;
+@@ -906,20 +911,21 @@
+
+ #ifndef SINGLE_ADHOC_LINKUP
+ // At least another peer in this IBSS, declare MediaState as CONNECTED
+- if (ADHOC_ON(pAd) && (pAd->MediaState == NdisMediaStateDisconnected))
+- {
++ if (ADHOC_ON(pAd)
++ && (pAd->MediaState == NdisMediaStateDisconnected)
++ && (BssType == BSS_INDEP)) {
+ pAd->MediaState = NdisMediaStateConnected;
+
+ // 2003/03/12 - john
+ // Make sure this entry in "PortCfg.BssTab" table, thus complies to Microsoft's policy that
+- // "site survey" result should always include the current connected network.
++ // "site survey" result should always include the current connected network.
+ //
+ Bssidx = BssTableSearch(&pAd->PortCfg.BssTab, &Bssid);
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+- Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen,
+- BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
+- Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, pVIE);
++ Bssidx = BssTableSetEntry(pAd, &pAd->PortCfg.BssTab, &Bssid, Ssid, SsidLen,
++ BssType, BeaconPeriod, CfExist, &CfParm, AtimWin, CapabilityInfo,
++ Rates, RatesLen, ExtendedRateIeExist, Channel, Elem->Rssi, Elem->Noise, TimeStamp, VarIELen, pVIE);
+ }
+ }
+ #endif
+@@ -929,15 +935,15 @@
+ // sanity check fail, ignore this frame
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Receive PROBE REQ from remote peer when operating in IBSS mode
+ ==========================================================================
+ */
+ VOID PeerProbeReqAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ MACADDR Addr2;
+ CHAR Ssid[MAX_LEN_OF_SSID];
+@@ -947,13 +953,13 @@
+ UCHAR *OutBuffer = NULL;
+ ULONG FrameLen = 0;
+ LARGE_INTEGER FakeTimestamp;
+- UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
++ UCHAR SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES,
+ DsLen = 1, IbssLen = 2;
+ UCHAR SupportedRatesLen;
+ UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
+ UCHAR ExtRateIe = IE_EXT_SUPP_RATES, ExtRatesLen;
+ UCHAR ErpIe[3] = {IE_ERP, 1, 0};
+-
++
+ if (! ADHOC_ON(pAd))
+ return;
+
+@@ -962,8 +968,8 @@
+ if ((SsidLen == 0) || RTMPEqualMemory(Ssid, pAd->PortCfg.Ssid, (ULONG) SsidLen))
+ {
+ CSR15_STRUC Csr15;
+-
+- // we should respond a ProbeRsp only when we're the last BEACON transmitter
++
++ // we should respond a ProbeRsp only when we're the last BEACON transmitter
+ // in this ADHOC network.
+ RTMP_IO_READ32(pAd, CSR15, &Csr15.word);
+ if (Csr15.field.BeaconSent == 0)
+@@ -1016,28 +1022,28 @@
+ return;
+
+ pAd->PortCfg.AtimWin = 0; // ??????
+- DBGPRINT(RT_DEBUG_TRACE, "SYNC - Send PROBE_RSP to %02x:%02x:%02x:%02x:%02x:%02x...\n",
++ DBGPRINT(RT_DEBUG_TRACE, "SYNC - Send PROBE_RSP to %02x:%02x:%02x:%02x:%02x:%02x...\n",
+ Addr2.Octet[0],Addr2.Octet[1],Addr2.Octet[2],Addr2.Octet[3],Addr2.Octet[4],Addr2.Octet[5] );
+ MgtMacHeaderInit(pAd, &ProbeRspHdr, SUBTYPE_PROBE_RSP, 0, &Addr2, &pAd->PortCfg.Bssid);
+
+ if (SupportedRatesLen <= 8)
+ {
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &ProbeRspHdr,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &ProbeRspHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &pAd->PortCfg.CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ END_OF_ARGS);
+ }
+@@ -1045,22 +1051,22 @@
+ {
+ ExtRatesLen = SupportedRatesLen - 8;
+ SupportedRatesLen = 8;
+- MakeOutgoingFrame(OutBuffer, &FrameLen,
+- MAC_HDR_LEN, &ProbeRspHdr,
++ MakeOutgoingFrame(OutBuffer, &FrameLen,
++ MAC_HDR_LEN, &ProbeRspHdr,
+ TIMESTAMP_LEN, &FakeTimestamp,
+ 2, &pAd->PortCfg.BeaconPeriod,
+ 2, &pAd->PortCfg.CapabilityInfo,
+- 1, &SsidIe,
+- 1, &pAd->PortCfg.SsidLen,
++ 1, &SsidIe,
++ 1, &pAd->PortCfg.SsidLen,
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+- 1, &SuppIe,
++ 1, &SuppIe,
+ 1, &SupportedRatesLen,
+- SupportedRatesLen, SupportedRates,
+- 1, &DsIe,
+- 1, &DsLen,
++ SupportedRatesLen, SupportedRates,
++ 1, &DsIe,
++ 1, &DsLen,
+ 1, &pAd->PortCfg.Channel,
+- 1, &IbssIe,
+- 1, &IbssLen,
++ 1, &IbssIe,
++ 1, &IbssLen,
+ 2, &pAd->PortCfg.AtimWin,
+ 3, ErpIe,
+ 1, &ExtRateIe,
+@@ -1073,7 +1079,7 @@
+ {
+ ULONG tmp;
+ UCHAR WpaIe = IE_WPA;
+-
++
+ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) // Tkip
+ {
+ MakeOutgoingFrame(OutBuffer + FrameLen, &tmp,
+@@ -1092,43 +1098,43 @@
+ END_OF_ARGS);
+ FrameLen += tmp;
+ }
+- }
++ }
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+ }
+ }
+
+ VOID BeaconTimeoutAtJoinAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "SYNC - BeaconTimeoutAtJoinAction\n");
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_REJ_TIMEOUT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan timeout procedure. basically add channel index by 1 and rescan
+ ==========================================================================
+ */
+ VOID ScanTimeoutAction(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ pAd->Mlme.SyncAux.Channel = NextChannel(pAd, pAd->Mlme.SyncAux.Channel);
+ ScanNextChannel(pAd);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Scan next channel
+ ==========================================================================
+ */
+ VOID ScanNextChannel(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ MACHDR Hdr;
+ UCHAR SsidIe = IE_SSID, SuppRateIe = IE_SUPP_RATES;
+@@ -1138,36 +1144,36 @@
+ ULONG FrameLen = 0;
+ UCHAR SsidLen = 0;
+
+- if (pAd->Mlme.SyncAux.Channel == 0)
++ if (pAd->Mlme.SyncAux.Channel == 0)
+ {
+ DBGPRINT(RT_DEBUG_INFO, "SYNC - End of SCAN, restore to channel %d\n",pAd->PortCfg.Channel);
+ AsicSwitchChannel(pAd, pAd->PortCfg.Channel);
+ AsicLockChannel(pAd, pAd->PortCfg.Channel);
+-
++
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_SUCCESS);
+- }
+- else
++ }
++ else
+ {
+ AsicSwitchChannel(pAd, pAd->Mlme.SyncAux.Channel);
+
+- // Total SCAN time still limits within 3 sec (DDK constraint).
++ // Total SCAN time still limits within 3 sec (DDK constraint).
+ // TODO: We need more intelligent rules here to further improve out-of-service issue.
+ // e.g. temporary stop copying NDIS packet to TxRing until SCAN complete
+ // if (INFRA_ON(pAd) || ADHOC_ON(pAd))
+
+ // We need to shorten active scan time in order for WZC connect issue
+- if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
+- RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ACTIVE_SCAN_TIME);
++ if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
++ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, ACTIVE_SCAN_TIME);
+ else if (pAd->PortCfg.PhyMode == PHY_11ABG_MIXED)
+- RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MIN_CHANNEL_TIME);
++ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MIN_CHANNEL_TIME);
+ else
+ RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer, MAX_CHANNEL_TIME);
+
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_PROBE_REQ, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Broadcast);
+ // There is no need to send broadcast probe request if active scan is in effect.
+ // The same rulr should apply to passive scan also.
+- if (pAd->Mlme.SyncAux.ScanType == SCAN_PASSIVE)
++ if (pAd->Mlme.SyncAux.ScanType == SCAN_PASSIVE)
+ {
+ // Send the first probe request with empty SSID
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+@@ -1184,15 +1190,15 @@
+ MakeOutgoingFrame(OutBuffer, &FrameLen,
+ sizeof(MACHDR), (UCHAR*)&Hdr,
+ 1, &SsidIe,
+- 1, &SsidLen,
++ 1, &SsidLen,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+-
++
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+- else if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
++ else if (pAd->Mlme.SyncAux.ScanType == SCAN_ACTIVE)
+ {
+ // Allocate another for probe scan with SSID
+ NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer2); //Get an unused nonpaged memory
+@@ -1212,9 +1218,9 @@
+ SsidLen, pAd->PortCfg.Ssid,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+-
++
+ MiniportMMRequest(pAd, OutBuffer2, FrameLen);
+
+ DBGPRINT(RT_DEBUG_INFO, "SYNC - send active ProbeReq @ channel=%d with essid=%s\n", pAd->Mlme.SyncAux.Channel, pAd->PortCfg.Ssid);
+@@ -1224,55 +1230,55 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenScan(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "AYNC - InvalidStateWhenScan(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenJoin(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "InvalidStateWhenJoin(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_JOIN_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID InvalidStateWhenStart(
+- IN PRTMP_ADAPTER pAd,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAd,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, "InvalidStateWhenStart(state=%d). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState);
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_START_CONF, MLME_STATE_MACHINE_REJECT);
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+ */
+ VOID EnqueuePsPoll(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS NState;
+ PSPOLL_FRAME *PsFr;
+@@ -1291,10 +1297,10 @@
+ // driver force send out a BEACON frame to cover ADHOC mode BEACON starving issue
+ // that is, in ADHOC mode, driver guarantee itself can send out at least a BEACON
+ // per a specified duration, even the peer's clock is faster than us and win all the
+-// hardware-based BEACON TX oppertunity.
++// hardware-based BEACON TX oppertunity.
+ // we may remove this software feature once 2560 IC fix this problem in ASIC.
+ VOID EnqueueBeaconFrame(
+- IN PRTMP_ADAPTER pAd)
++ IN PRTMP_ADAPTER pAd)
+ {
+ NDIS_STATUS NState;
+ PTXD_STRUC pTxD = (PTXD_STRUC)pAd->BeaconRing.va_addr;
+@@ -1313,10 +1319,10 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+- Send out a NULL frame to AP. The prpose is to inform AP this client
++ Send out a NULL frame to AP. The prpose is to inform AP this client
+ current PSM bit.
+ NOTE:
+ This routine should only be used in infrastructure mode.
+@@ -1324,7 +1330,7 @@
+ */
+ VOID EnqueueNullFrame(
+ IN PRTMP_ADAPTER pAd,
+- IN UCHAR TxRate)
++ IN UCHAR TxRate)
+ {
+ NDIS_STATUS NState;
+ MACHDR *NullFr;
+@@ -1339,7 +1345,7 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ ==========================================================================
+@@ -1359,7 +1365,7 @@
+ if (NState == NDIS_STATUS_SUCCESS)
+ {
+ MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_PROBE_REQ, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Broadcast);
+-
++
+ // this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse
+ MakeOutgoingFrame(OutBuffer, &FrameLen,
+ sizeof(MACHDR), &Hdr,
+@@ -1368,13 +1374,13 @@
+ pAd->PortCfg.SsidLen, pAd->PortCfg.Ssid,
+ 1, &SuppRateIe,
+ 1, &pAd->PortCfg.SupportedRatesLen,
+- pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
++ pAd->PortCfg.SupportedRatesLen, pAd->PortCfg.SupportedRates,
+ END_OF_ARGS);
+ MiniportMMRequest(pAd, OutBuffer, FrameLen);
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ Update PortCfg->ChannelList[] according to 1) Country Region 2) RF IC type,
+@@ -1464,7 +1470,7 @@
+ }
+
+ pAd->PortCfg.ChannelListNum = index;
+- DBGPRINT(RT_DEBUG_TRACE,"country code=%d, RFIC=%d, PHY mode=%d, support %d channels\n",
++ DBGPRINT(RT_DEBUG_TRACE,"country code=%d, RFIC=%d, PHY mode=%d, support %d channels\n",
+ pAd->PortCfg.CountryRegion, pAd->PortCfg.RfType, pAd->PortCfg.PhyMode, pAd->PortCfg.ChannelListNum);
+ for (i=0;i<index;i++)
+ {
+@@ -1472,10 +1478,10 @@
+ }
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+- This routine return the first channel number according to the country
++ This routine return the first channel number according to the country
+ code selection and RF IC selection (signal band or dual band). It is called
+ whenever driver need to start a site survey of all supported channels.
+ Return:
+@@ -1488,7 +1494,7 @@
+ return pAd->PortCfg.ChannelList[0];
+ }
+
+-/*
++/*
+ ==========================================================================
+ Description:
+ This routine returns the next channel number. This routine is called
+@@ -1500,12 +1506,12 @@
+ ==========================================================================
+ */
+ UCHAR NextChannel(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ IN UCHAR channel)
+ {
+ int i;
+ UCHAR next_channel = 0;
+-
++
+ for (i = 0; i < (pAd->PortCfg.ChannelListNum - 1); i++)
+ if (channel == pAd->PortCfg.ChannelList[i])
+ {
+diff -Nur rt2500-1.1.0-b4/Module/unload rt2500-cvs-2007061011/Module/unload
+--- rt2500-1.1.0-b4/Module/unload 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/unload 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2 +0,0 @@
+-/sbin/ifconfig ra0 down
+-/sbin/rmmod rt2500
+\ Kein Zeilenumbruch am Dateiende.
+diff -Nur rt2500-1.1.0-b4/Module/wpa.c rt2500-cvs-2007061011/Module/wpa.c
+--- rt2500-1.1.0-b4/Module/wpa.c 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/wpa.c 2007-05-15 21:41:35.000000000 +0200
+@@ -1,37 +1,37 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: wpa.c
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * JanL 22nd Jul 03 Initial code
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: wpa.c
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * JanL 22nd Jul 03 Initial code
+ * PaulL 28th Nov 03 Modify for supplicant
+ * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++ ***************************************************************************/
+
+ #include "rt_config.h"
+
+@@ -47,6 +47,7 @@
+ };
+ UCHAR CipherWpaPskTkipLen = (sizeof(CipherWpaPskTkip) / sizeof(UCHAR));
+
++// Needed for APs using WPA1 IEs (#221) to indicate CCMP encryption
+ UCHAR CipherWpaPskAes[] = {
+ 0xDD, 0x16, // RSN IE
+ 0x00, 0x50, 0xf2, 0x01, // oui
+@@ -59,16 +60,19 @@
+ };
+ UCHAR CipherWpaPskAesLen = (sizeof(CipherWpaPskAes) / sizeof(UCHAR));
+
++static UCHAR MSOUI[] = {0x00, 0x50, 0xf2, 0x01}; // Microsoft OUI
++static UCHAR WGOUI[] = {0x00, 0x0f, 0xac}; // 802.11i Working Group OUI
++
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Classify WPA EAP message type
+
+ Arguments:
+ EAPType Value of EAP message type
+ MsgType Internal Message definition for MLME state machine
+-
++
+ Return Value:
+ TRUE Found appropriate message type
+ FALSE No appropriate message type
+@@ -76,12 +80,12 @@
+ Note:
+ All these constants are defined in wpa.h
+ For supplicant, there is only EAPOL Key message avaliable
+-
++
+ ========================================================================
+ */
+ BOOLEAN WpaMsgTypeSubst(
+ IN UCHAR EAPType,
+- OUT ULONG *MsgType)
++ OUT ULONG *MsgType)
+ {
+ switch (EAPType)
+ {
+@@ -102,23 +106,23 @@
+ break;
+ default:
+ DBGPRINT(RT_DEBUG_INFO, "WpaMsgTypeSubst : return FALSE; \n");
+- return FALSE;
+- }
++ return FALSE;
++ }
+ return TRUE;
+ }
+
+-/*
++/*
+ ==========================================================================
+- Description:
++ Description:
+ association state machine init, including state transition and timer init
+- Parameters:
++ Parameters:
+ S - pointer to the association state machine
+ ==========================================================================
+ */
+ VOID WpaPskStateMachineInit(
+- IN PRTMP_ADAPTER pAd,
+- IN STATE_MACHINE *S,
+- OUT STATE_MACHINE_FUNC Trans[])
++ IN PRTMP_ADAPTER pAd,
++ IN STATE_MACHINE *S,
++ OUT STATE_MACHINE_FUNC Trans[])
+ {
+ StateMachineInit(S, (STATE_MACHINE_FUNC*)Trans, MAX_WPA_PSK_STATE, MAX_WPA_PSK_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PSK_IDLE, WPA_MACHINE_BASE);
+ StateMachineSetAction(S, WPA_PSK_IDLE, EAP_MSG_TYPE_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction);
+@@ -127,10 +131,10 @@
+ /*
+ ==========================================================================
+ Description:
+- This is state machine function.
+- When receiving EAPOL packets which is for 802.1x key management.
+- Use both in WPA, and WPAPSK case.
+- In this function, further dispatch to different functions according to the received packet. 3 categories are :
++ This is state machine function.
++ When receiving EAPOL packets which is for 802.1x key management.
++ Use both in WPA, and WPAPSK case.
++ In this function, further dispatch to different functions according to the received packet. 3 categories are :
+ 1. normal 4-way pairwisekey and 2-way groupkey handshake
+ 2. MIC error (Countermeasures attack) report packet from STA.
+ 3. Request for pairwise/group key update from STA
+@@ -138,13 +142,13 @@
+ ==========================================================================
+ */
+ VOID WpaEAPOLKeyAction(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ INT MsgType;
+ UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY];
+ PKEY_DESCRIPTER pKeyDesc;
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "-----> WpaEAPOLKeyAction\n");
+ // Get 802.11 header first
+ pKeyDesc = (PKEY_DESCRIPTER) &Elem->Msg[(LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H)];
+@@ -153,9 +157,12 @@
+ *(USHORT *)((UCHAR *)pKeyDesc+1) = SWAP16(*(USHORT *)((UCHAR *)pKeyDesc+1));
+ #endif
+ // Sanity check, this should only happen in WPA-PSK mode
+- if (pAdapter->PortCfg.AuthMode != Ndis802_11AuthModeWPAPSK)
++ if (pAdapter->PortCfg.AuthMode != Ndis802_11AuthModeWPAPSK) {
++ DBGPRINT(RT_DEBUG_TRACE,
++ "<----- WpaEAPOLKeyAction - AuthMode (%d) != WPPSK\n",
++ pAdapter->PortCfg.AuthMode);
+ return;
+-
++ }
+ // 0. Debug print all bit information
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Key Description Version %d\n", pKeyDesc->KeyInfo.KeyDescVer);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Key Type %d\n", pKeyDesc->KeyInfo.KeyType);
+@@ -167,7 +174,7 @@
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Error %d\n", pKeyDesc->KeyInfo.Error);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo Request %d\n", pKeyDesc->KeyInfo.Request);
+ DBGPRINT(RT_DEBUG_INFO, "KeyInfo DL %d\n", pKeyDesc->KeyInfo.DL);
+-
++
+ // 1. Check EAPOL frame version and type
+ if ((Elem->Msg[LENGTH_802_11+LENGTH_802_1_H] != EAPOL_VER) || (pKeyDesc->Type != RSN_KEY_DESC))
+ {
+@@ -190,9 +197,18 @@
+ // First validate replay counter, only accept message with larger replay counter
+ // Let equal pass, some AP start with all zero replay counter
+ memset(ZeroReplay, 0, LEN_KEY_DESC_REPLAY);
+- if ((RTMPCompareMemory(pKeyDesc->ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) &&
+- (RTMPCompareMemory(pKeyDesc->ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0))
++ if ((RTMPCompareMemory(pKeyDesc->ReplayCounter,
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) &&
++ (RTMPCompareMemory(pKeyDesc->ReplayCounter,
++ ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) {
++ DBGPRINT(RT_DEBUG_TRACE, "<----- %s: Replay count error\n",
++ __FUNCTION__);
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP replay = ",
++ pKeyDesc->ReplayCounter, LEN_KEY_DESC_REPLAY);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our replay = ",
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ return;
++ }
+
+ // Classify message Type, either pairwise message 1, 3, or group message 1 for supplicant
+ MsgType = EAPOL_MSG_INVALID;
+@@ -228,12 +244,13 @@
+ {
+ MsgType = EAPOL_GROUP_MSG_1;
+ DBGPRINT(RT_DEBUG_TRACE, "Receive EAPOL Key Group Message 1\n");
+- }
+-
++ } else
++ DBGPRINT(RT_DEBUG_TRACE, "Receive INVALID EAPOL Key Message\n");
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)((UCHAR *)pKeyDesc+1) = SWAP16(*(USHORT *)((UCHAR *)pKeyDesc+1));
+ #endif
+-
++
+ // We will assume link is up (assoc suceess and port not secured).
+ // All state has to be able to process message from previous state
+ switch (pAdapter->PortCfg.WpaState)
+@@ -245,7 +262,7 @@
+ pAdapter->PortCfg.WpaState = SS_WAIT_MSG_3;
+ }
+ break;
+-
++
+ case SS_WAIT_MSG_3:
+ if (MsgType == EAPOL_PAIR_MSG_1)
+ {
+@@ -258,7 +275,7 @@
+ pAdapter->PortCfg.WpaState = SS_WAIT_GROUP;
+ }
+ break;
+-
++
+ case SS_WAIT_GROUP: // When doing group key exchange
+ case SS_FINISH: // This happened when update group key
+ if (MsgType == EAPOL_PAIR_MSG_1)
+@@ -281,34 +298,34 @@
+ pAdapter->PortCfg.WpaState = SS_FINISH;
+ }
+ break;
+-
++
+ default:
+- break;
++ break;
+ }
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "<----- WpaEAPOLKeyAction\n");
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Pairwise key 4-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaPairMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR PTK[80];
+@@ -321,39 +338,39 @@
+ UCHAR EAPHEAD[8] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,0x88,0x8e};
+ PEAPOL_PACKET pMsg1;
+ EAPOL_PACKET Packet;
+- UCHAR Mic[16];
+-
++ UCHAR Mic[16];
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg1Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Save Data Length to pDesc for receiving packet, then put in outgoing frame Data Len fields.
+ pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+-
++
+ // Process message 1 from authenticator
+ // Key must be Pairwise key, already verified at callee.
+ // 1. Save Replay counter, it will use to verify message 3 and construct message 2
+- memcpy(pAdapter->PortCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ // 2. Save ANonce
+ memcpy(pAdapter->PortCfg.ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE);
+-
++
+ // TSNonce <--- SNonce
+ // Generate random SNonce
+- GenRandom(pAdapter, pAdapter->PortCfg.SNonce);
++ GenRandom(pAdapter, pAdapter->PortCfg.SNonce);
+
+ // TPTK <--- Calc PTK(ANonce, TSNonce)
+- WpaCountPTK(pAdapter->PortCfg.PskKey.Key,
++ WpaCountPTK(pAdapter->PortCfg.PskKey.Key,
+ pAdapter->PortCfg.ANonce,
+- pAdapter->PortCfg.Bssid.Octet,
+- pAdapter->PortCfg.SNonce,
+- pAdapter->CurrentAddress,
+- PTK,
+- LEN_PTK);
++ pAdapter->PortCfg.Bssid.Octet,
++ pAdapter->PortCfg.SNonce,
++ pAdapter->CurrentAddress,
++ PTK,
++ LEN_PTK);
+
+ // Save key to PTK entry
+ memcpy(pAdapter->PortCfg.PTK, PTK, LEN_PTK);
+-
++
+ // =====================================
+ // Use Priority Ring & MiniportMMRequest
+ // =====================================
+@@ -364,7 +381,7 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero message 2 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+@@ -399,17 +416,17 @@
+ memcpy(Packet.KeyDesc.KeyNonce, pAdapter->PortCfg.SNonce, LEN_KEY_DESC_NONCE);
+
+ // 5. Key Replay Count
+- memcpy(Packet.KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+-
++ memcpy(Packet.KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(Packet.KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(Packet.KeyDesc.KeyInfo)));
+ #endif
+-
++
+ // Send EAPOL(0, 1, 0, 0, 0, K, 0, TSNonce, 0, MIC(TPTK), 0)
+- // Out buffer for transmitting message 2
++ // Out buffer for transmitting message 2
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+- if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ if (NStatus != NDIS_STATUS_SUCCESS)
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -423,7 +440,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -433,12 +450,12 @@
+ DBGPRINT(RT_DEBUG_INFO, " PMK = ");
+ for (i = 0; i < 16; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PskKey.Key[i]);
+-
++
+ DBGPRINT(RT_DEBUG_INFO, "\n PTK = ");
+ for (i = 0; i < 64; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PTK[i]);
+ DBGPRINT(RT_DEBUG_INFO, "\n FrameLen = %d\n", FrameLen);
+-
++
+ hmac_md5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, Mic);
+ }
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+@@ -446,36 +463,202 @@
+ FrameLen = 0;
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+ // Send using priority queue
+ MiniportMMRequest(pAdapter, OutBuffer, FrameLen);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg1Action <-----\n");
+ }
+
+ /*
++ ========================================================================
++
++ Description:
++ Check the information element packaged in the KeyData field of the
++ EAPOL packet. At least one of the AP's offerings in each of
++
++ 1) the group cipher suite
++ 2) the pairwise master key cipher(s), and
++ 3) the authentication and key management suite
++
++ need to match the configuration for the corresponding attribute
++ in the driver.
++
++ Arguments:
++ pAd Pointer to our adapter
++ pie Pointer to the "logical" IE
++ pie_len Value of the real IE length field.
++ poui Pointer to the WPA1/WPA2 OUI
++
++ Return Value:
++ 0 -> OK: At least one of the offerings in each category
++ matches what is configured in the driver.
++
++ Note:
++ On entry, it is known that the length of the RSN IE is consistent
++ with the length specification of the EAPOL KeyData field, and that
++ the IE is at least long enough to contain one group cipher suite
++ selection, one PMK cipher suite selection,
++ and one AKM suite selection.
++ ========================================================================
++*/
++static int checkEAPIE(
++ IN RTMP_ADAPTER *pAd,
++ IN rsn_ie_t *pie, // (not really, if we're WPA 1)
++ IN u8 pie_len, // ... so we provide the length separately.
++ IN ie_oui_t *poui)
++{
++ suite_list_t *suite_list_p;
++ suite_sel_t *suite_sel_p;
++ int i, j;
++ int needs = 7;
++ suite_sel_t *limit = (suite_sel_t *)((void *)pie + pie_len + 2);
++
++ if (wtohs(pie->version) != 1) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid ver %d (sb 1)\n",
++ wtohs(pie->version));
++ return needs;
++ }
++ if (memcmp(pie->gcsuite.oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid Grp Cipher OUI %02x:%02x:%02x\n",
++ pie->gcsuite.oui[0], pie->gcsuite.oui[1], pie->gcsuite.oui[2]);
++ return needs;
++ }
++ switch (pie->gcsuite.type) {
++ case CIPHER_TYPE_WEP40:
++ case CIPHER_TYPE_WEP104:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled)
++ needs &= 6;
++ break;
++ case CIPHER_TYPE_TKIP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
++ needs &= 6;
++ break;
++ case CIPHER_TYPE_CCMP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
++ needs &= 6;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid Grp Cipher Type %d\n",
++ pie->gcsuite.type);
++ return needs;
++ } /* End switch (group cipher suite type) */
++
++ suite_list_p = (suite_list_t *)((void *)&pie->gcsuite+sizeof(suite_sel_t));
++
++ // Search the PMK list
++ for (suite_sel_p = suite_list_p->suite,
++ i = 0, j = wtohs(suite_list_p->count);
++ suite_sel_p + 1 <= limit && i < j;
++ suite_sel_p++, i++) {
++ if (memcmp(suite_sel_p->oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher OUI "
++ "%02x:%02x:%02x\n",
++ suite_sel_p->oui[0], suite_sel_p->oui[1],
++ suite_sel_p->oui[2]);
++ break; // Keep going. We may also have a valid one.
++ }
++ switch (suite_sel_p->type) {
++ case CIPHER_TYPE_WEP40:
++ case CIPHER_TYPE_WEP104:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled)
++ needs &= 5;
++ break;
++ case CIPHER_TYPE_TKIP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)
++ needs &= 5;
++ break;
++ case CIPHER_TYPE_CCMP:
++ if (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
++ needs &= 5;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher Type %d\n",
++ suite_sel_p->type);
++ break; // Keep going. We may also have a valid one.
++ } /* End switch (PMK type) */
++ } /* End search PMK list */
++
++ if (suite_sel_p >= limit && i < j) {
++ DBGPRINT(RT_DEBUG_ERROR, "Too many PMK suites in EAPOL pkt "
++ "(have %d, room for %d) (need=%d)\n",
++ j, i, needs);
++ return needs;
++ }
++ if (j == 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Zero count PMK list in EAPOL pkt "
++ "(need=%d)\n", needs);
++ return needs;
++ }
++
++ suite_list_p = (suite_list_t *)suite_sel_p;
++
++ //Search the Authentication and Key Management (AKM) list
++ for (suite_sel_p = suite_list_p->suite,
++ i = 0, j = wtohs(suite_list_p->count);
++ suite_sel_p + 1 <= limit && i < j;
++ suite_sel_p++, i++) {
++ if (memcmp(suite_sel_p->oui, poui, sizeof(ie_oui_t)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid AKM OUI %02x:%02x:%02x\n",
++ suite_sel_p->oui[0], suite_sel_p->oui[1],
++ suite_sel_p->oui[2]);
++ break; // Keep going. We may also have a valid one.
++ }
++ switch (suite_sel_p->type) {
++ case AKM_TYPE_802_1X:
++ if (pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPA)
++ needs &= 3;
++ break;
++ case AKM_TYPE_PSK:
++ if (pAd->PortCfg.AuthMode >= Ndis802_11AuthModeWPAPSK)
++ needs &= 3;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "Invalid PMK Cipher Type %d\n",
++ suite_sel_p->type);
++ break; // Keep going. We may also have a valid one.
++ } /* End switch (AKM type) */
++ } /* End search AKM list */
++
++ if (suite_sel_p >= limit && i < j) {
++ DBGPRINT(RT_DEBUG_ERROR, "Too many AKM suites in EAPOL pkt "
++ "(have %d, room for %d) (need=%d)\n",
++ j, i, needs);
++ return needs; // NB. May still have met all needs.
++ }
++ if (j == 0) {
++ DBGPRINT(RT_DEBUG_ERROR, "Zero count AKM list in EAPOL pkt "
++ "(need=%d)\n", needs);
++ return needs;
++ }
++
++ return needs;
++
++} /* End checkEAPIE () */
++
++/*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Pairwise key 4-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaPairMsg3Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR *OutBuffer = NULL;
+@@ -487,46 +670,74 @@
+ UCHAR EAPHEAD[8] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,0x88,0x8e};
+ EAPOL_PACKET Packet;
+ PEAPOL_PACKET pMsg3;
+- PUCHAR pTmp;
+- UCHAR Mic[16], OldMic[16];
++ UCHAR Mic[16], OldMic[16];
+ NDIS_802_11_KEY PeerKey;
+-
+-
++
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg3Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Process message 3 frame.
+ pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
++ #define pie ((rsn_ie_t *)(void *)pMsg3->KeyDesc.KeyData)
++ if (wtohs(pie->length) + 2 != pMsg3->KeyDesc.KeyDataLen[1]) {
++ DBGPRINT(RT_DEBUG_ERROR, "RSN IE len %d != KeyDataLen %d)\n",
++ pie->length + 2, pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ else {
++ switch (pie->eid) {
++ case IE_RSN:
++ if (wtohs(pie->length) < MIN_RSN_KEYDATA_LEN) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "RSN IE msg 3 too short (sb >= %d, is %d)\n",
++ MIN_RSN_KEYDATA_LEN, wtohs(pie->length));
++ DBGHEXSTR(RT_DEBUG_ERROR, "KeyData ",
++ pMsg3->KeyDesc.KeyData,
++ pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ if (checkEAPIE(pAdapter, pie, pie->length,
++ (ie_oui_t *)WGOUI) != 0) return;
++ break;
++ case IE_WPA:
++ #undef pie
++ #define pie ((RSN_EID_STRUCT *)(void *)pMsg3->KeyDesc.KeyData)
++ if (wtohs(pie->Length) < MIN_WPA_KEYDATA_LEN) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WPA IE msg 3 too short (sb >= %d, is %d)\n",
++ MIN_WPA_KEYDATA_LEN, wtohs(pie->Length));
++ DBGHEXSTR(RT_DEBUG_ERROR, "KeyData ",
++ pMsg3->KeyDesc.KeyData,
++ pMsg3->KeyDesc.KeyDataLen[1]);
++ return;
++ }
++ if (memcmp(pie->Oui, MSOUI, sizeof(pie->Oui)) != 0) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ "Invalid WPA 1 OUI %02x:%02x:%02x:%02x\n",
++ pie->Oui[0], pie->Oui[1], pie->Oui[2], pie->Oui[3]);
++ return;
++ }
++ if (checkEAPIE(pAdapter, (rsn_ie_t *)&pie->Oui[2], pie->Length,
++ (ie_oui_t *)MSOUI) != 0) return;
++ break;
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, "RSN IE type %d invalid)\n",
++ pie->Eid);
++ return;
++ } /* End switch (element ID) */
++ } /* End if (packet length sane) */
++ #undef pie
++
++ DBGPRINT(RT_DEBUG_TRACE, "RSN IE matched msg 3 of 4-way handshake "
++ "KeyDataLen=%d)\n",
++ pMsg3->KeyDesc.KeyDataLen[1]);
+
+- // 1. Verify RSN IE & cipher type match
+- if (pAdapter->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)
+- {
+- if (pMsg3->KeyDesc.KeyInfo.KeyDescVer != 2)
+- return;
+- pTmp = (PUCHAR) &CipherWpaPskAes;
+- }
+- else // TKIP
+- {
+- if (pMsg3->KeyDesc.KeyInfo.KeyDescVer != 1)
+- return;
+- pTmp = (PUCHAR) &CipherWpaPskTkip;
+- }
+-
+- // Fix compatibility issue, when AP append nonsense data after auth mode with different size.
+- // We should qualify this kind of RSN as acceptable
+- if (!NdisEqualMemory((PUCHAR) &pMsg3->KeyDesc.KeyData[2], pTmp + 2, CipherWpaPskTkipLen - 2))
+- {
+- DBGPRINT(RT_DEBUG_ERROR, " RSN IE mismatched msg 3 of 4-way handshake!!!!!!!!!! \n");
+- return;
+- }
+- else
+- DBGPRINT(RT_DEBUG_TRACE, " RSN IE matched in msg 3 of 4-way handshake!!!!!!!!!! \n");
+-
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
+@@ -539,7 +750,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1((PUCHAR) pMsg3, pMsg3->Len[1] + 4, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -547,7 +758,7 @@
+ {
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, (PUCHAR) pMsg3, pMsg3->Len[1] + 4, Mic);
+ }
+-
++
+ if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, " MIC Different in msg 3 of 4-way handshake!!!!!!!!!! \n");
+@@ -556,17 +767,32 @@
+ else
+ DBGPRINT(RT_DEBUG_TRACE, " MIC VALID in msg 3 of 4-way handshake!!!!!!!!!! \n");
+
+- // 3. Check Replay Counter, it has to be larger than last one. No need to be exact one larger
+- if (RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter, pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1)
++ // 3. Check Replay Counter, it has to be larger than last one.
++ // No need to be exact one larger
++ if (RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter,
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) {
++ DBGPRINT(RT_DEBUG_TRACE, " Replay count error\n");
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP replay = ",
++ pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our replay = ",
++ pAdapter->PortCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ return;
+-
++ }
+ // Update new replay counter
+- memcpy(pAdapter->PortCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter,
++ LEN_KEY_DESC_REPLAY);
+
+ // 4. Double check ANonce
+- if (!NdisEqualMemory(pAdapter->PortCfg.ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE))
++ if (!NdisEqualMemory(pAdapter->PortCfg.ANonce, pMsg3->KeyDesc.KeyNonce,
++ LEN_KEY_DESC_NONCE)) {
++ DBGPRINT(RT_DEBUG_TRACE, " Nonce error\n");
++ DBGHEXSTR(RT_DEBUG_TRACE, " AP Nonce = ",
++ pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE);
++ DBGHEXSTR(RT_DEBUG_TRACE, " our Nonce = ",
++ pAdapter->PortCfg.ANonce, LEN_KEY_DESC_NONCE);
+ return;
+-
++ }
++
+ // 5. Construct Message 4
+ // =====================================
+ // Use Priority Ring & MiniportMMRequest
+@@ -578,22 +804,22 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero message 4 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+ Packet.Type = EAPOLKey;
+ Packet.Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field
+-
++
+ //
+ // Message 4 as EAPOL-Key(0,1,0,0,0,P,0,0,MIC,0)
+ //
+ Packet.KeyDesc.Type = RSN_KEY_DESC;
+-
++
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(pMsg3->KeyDesc.KeyInfo)));
+ #endif
+-
++
+ // Key descriptor version and appropriate RSN IE
+ Packet.KeyDesc.KeyInfo.KeyDescVer = pMsg3->KeyDesc.KeyInfo.KeyDescVer;
+
+@@ -603,16 +829,16 @@
+ // KeyMic field presented
+ Packet.KeyDesc.KeyInfo.KeyMic = 1;
+
+- // Key Replay count
+- memcpy(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ // Key Replay count
++ memcpy(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+ #ifdef BIG_ENDIAN
+ *(USHORT *)&Packet.KeyDesc.KeyInfo = SWAP16(*(USHORT *)&Packet.KeyDesc.KeyInfo);
+ #endif
+
+- // Out buffer for transmitting message 4
++ // Out buffer for transmitting message 4
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -626,7 +852,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -637,10 +863,10 @@
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+
+ FrameLen = 0;
+-
++
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+@@ -651,38 +877,38 @@
+ // 7. Update PTK
+ memset(&PeerKey, 0, sizeof(PeerKey));
+ PeerKey.Length = sizeof(PeerKey);
+- PeerKey.KeyIndex = 0xe0000000;
++ PeerKey.KeyIndex = 0xe0000000;
+ PeerKey.KeyLength = 16;
+ memcpy(PeerKey.BSSID, pAdapter->PortCfg.Bssid.Octet, 6);
+ memcpy(&PeerKey.KeyRSC, pMsg3->KeyDesc.KeyRsc, LEN_KEY_DESC_RSC);
+ memcpy(PeerKey.KeyMaterial, &pAdapter->PortCfg.PTK[32], 32);
+ // Call Add peer key function
+ RTMPWPAAddKeyProc(pAdapter, &PeerKey);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaPairMsg3Action <-----\n");
+ }
+
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Process Group key 2-way handshaking
+
+ Arguments:
+ pAdapter Pointer to our adapter
+ Elem Message body
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaGroupMsg1Action(
+- IN PRTMP_ADAPTER pAdapter,
+- IN MLME_QUEUE_ELEM *Elem)
++ IN PRTMP_ADAPTER pAdapter,
++ IN MLME_QUEUE_ELEM *Elem)
+ {
+ PHEADER_802_11 pHeader;
+ UCHAR *OutBuffer = NULL;
+@@ -697,12 +923,12 @@
+ UCHAR Mic[16], OldMic[16];
+ UCHAR GTK[32], Key[32];
+ NDIS_802_11_KEY GroupKey;
+-
+-
++
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaGroupMsg1Action ----->\n");
+-
++
+ pHeader = (PHEADER_802_11) Elem->Msg;
+-
++
+ // Process Group message 1 frame.
+ pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H];
+
+@@ -712,7 +938,7 @@
+ return;
+
+ // Update new replay counter
+- memcpy(pAdapter->PortCfg.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++ memcpy(pAdapter->PortCfg.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ // 2. Verify MIC is valid
+ // Save the MIC and replace with zero
+@@ -722,7 +948,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1((PUCHAR) pGroup, pGroup->Len[1] + 4, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -730,7 +956,7 @@
+ {
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, (PUCHAR) pGroup, pGroup->Len[1] + 4, Mic);
+ }
+-
++
+ if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, " MIC Different in group msg 1 of 2-way handshake!!!!!!!!!! \n");
+@@ -749,12 +975,12 @@
+ if (pGroup->KeyDesc.KeyInfo.KeyDescVer != 2)
+ return;
+ // Decrypt AES GTK
+- AES_GTK_KEY_UNWRAP(&pAdapter->PortCfg.PTK[16], GTK, pGroup->KeyDesc.KeyData);
++ AES_GTK_KEY_UNWRAP(&pAdapter->PortCfg.PTK[16], GTK, pGroup->KeyDesc.KeyData);
+ }
+ else // TKIP
+ {
+ INT i;
+-
++
+ if (pGroup->KeyDesc.KeyInfo.KeyDescVer != 1)
+ return;
+ // Decrypt TKIP GTK
+@@ -766,9 +992,9 @@
+ for (i = 0; i < 256; i++)
+ ARCFOUR_BYTE(&pAdapter->PrivateInfo.WEPCONTEXT);
+ // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not
+- ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, GTK, pGroup->KeyDesc.KeyData, 32);
++ ARCFOUR_DECRYPT(&pAdapter->PrivateInfo.WEPCONTEXT, GTK, pGroup->KeyDesc.KeyData, 32);
+ }
+-
++
+ // 4. Construct Group Message 2
+ pAdapter->Sequence = ((pAdapter->Sequence) + 1) & (MAX_SEQ_NUMBER);
+ WpaMacHeaderInit(pAdapter, &Header_802_11, 1, &pAdapter->PortCfg.Bssid);
+@@ -777,18 +1003,18 @@
+ AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
+ AckDuration = RTMPCalcDuration(pAdapter, AckRate, 14);
+ Header_802_11.Controlhead.Duration = pAdapter->PortCfg.Dsifs + AckDuration;
+-
++
+ // Zero Group message 1 body
+ memset(&Packet, 0, sizeof(Packet));
+ Packet.Version = EAPOL_VER;
+ Packet.Type = EAPOLKey;
+ Packet.Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field
+-
++
+ //
+ // Group Message 2 as EAPOL-Key(1,0,0,0,G,0,0,MIC,0)
+ //
+ Packet.KeyDesc.Type = RSN_KEY_DESC;
+-
++
+ // Key descriptor version and appropriate RSN IE
+ Packet.KeyDesc.KeyInfo.KeyDescVer = pGroup->KeyDesc.KeyInfo.KeyDescVer;
+
+@@ -800,18 +1026,18 @@
+
+ // Secure bit is 1
+ Packet.KeyDesc.KeyInfo.Secure = 1;
+-
+- // Key Replay count
+- memcpy(Packet.KeyDesc.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
++
++ // Key Replay count
++ memcpy(Packet.KeyDesc.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+ #ifdef BIG_ENDIAN
+ *(USHORT *)(&(Packet.KeyDesc.KeyInfo)) = SWAP16(*(USHORT *)(&(Packet.KeyDesc.KeyInfo)));
+ #endif
+
+- // Out buffer for transmitting group message 2
++ // Out buffer for transmitting group message 2
+ NStatus = MlmeAllocateMemory(pAdapter, (PVOID)&OutBuffer); //Get an unused nonpaged memory
+ if (NStatus != NDIS_STATUS_SUCCESS)
+- return;
++ return;
+
+ // Prepare EAPOL frame for MIC calculation
+ // Be careful, only EAPOL frame is counted for MIC calculation
+@@ -825,7 +1051,7 @@
+ {
+ // AES
+ UCHAR digest[80];
+-
++
+ HMAC_SHA1(OutBuffer, FrameLen, pAdapter->PortCfg.PTK, LEN_EAP_MICK, digest);
+ memcpy(Mic, digest, LEN_KEY_DESC_MIC);
+ }
+@@ -836,15 +1062,15 @@
+ for (i = 0; i < 64; i++)
+ DBGPRINT(RT_DEBUG_INFO, "%2x-", pAdapter->PortCfg.PTK[i]);
+ DBGPRINT(RT_DEBUG_INFO, "\n FrameLen = %d\n", FrameLen);
+-
++
+ hmac_md5(pAdapter->PortCfg.PTK, LEN_EAP_MICK, OutBuffer, FrameLen, Mic);
+ }
+ memcpy(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
+
+- FrameLen = 0;
++ FrameLen = 0;
+ // Make Transmitting frame
+ MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Header_802_11,
+- sizeof(EAPHEAD), EAPHEAD,
++ sizeof(EAPHEAD), EAPHEAD,
+ Packet.Len[1] + 4, &Packet,
+ END_OF_ARGS);
+
+@@ -853,72 +1079,72 @@
+
+ // 6 Free allocated memory
+ MlmeFreeMemory(pAdapter, OutBuffer);
+-
++
+ // 6. Update GTK
+ memset(&GroupKey, 0, sizeof(GroupKey));
+ GroupKey.Length = sizeof(GroupKey);
+- GroupKey.KeyIndex = 0x20000000 | pGroup->KeyDesc.KeyInfo.KeyIndex;
++ GroupKey.KeyIndex = 0x20000000 | pGroup->KeyDesc.KeyInfo.KeyIndex;
+ GroupKey.KeyLength = 16;
+ memcpy(GroupKey.BSSID, pAdapter->PortCfg.Bssid.Octet, 6);
+ memcpy(GroupKey.KeyMaterial, GTK, 32);
+ // Call Add peer key function
+ RTMPWPAAddKeyProc(pAdapter, &GroupKey);
+-
++
+ DBGPRINT(RT_DEBUG_TRACE, "WpaGroupMsg1Action <-----\n");
+ }
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Init WPA MAC header
+
+ Arguments:
+ pAdapter Pointer to our adapter
+-
++
+ Return Value:
+ None
+-
++
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaMacHeaderInit(
+- IN PRTMP_ADAPTER pAd,
+- IN OUT PHEADER_802_11 Hdr,
+- IN UCHAR wep,
+- IN PMACADDR pAddr1)
++ IN PRTMP_ADAPTER pAd,
++ IN OUT PHEADER_802_11 Hdr,
++ IN UCHAR wep,
++ IN PMACADDR pAddr1)
+ {
+ memset(Hdr, 0, sizeof(HEADER_802_11));
+- Hdr->Controlhead.Frame.Type = BTYPE_DATA;
++ Hdr->Controlhead.Frame.Type = BTYPE_DATA;
+ Hdr->Controlhead.Frame.ToDs = 1;
+ if (wep == 1)
+ Hdr->Controlhead.Frame.Wep = 1;
+-
++
+ // Addr1: DA, Addr2: BSSID, Addr3: SA
+ COPY_MAC_ADDR(&Hdr->Controlhead.Addr1, pAddr1);
+ COPY_MAC_ADDR(&Hdr->Controlhead.Addr2, &pAd->CurrentAddress);
+ COPY_MAC_ADDR(&Hdr->Addr3, &pAd->PortCfg.Bssid);
+- Hdr->Sequence = pAd->Sequence;
++ Hdr->Sequence = pAd->Sequence;
+ }
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Copy frame from waiting queue into relative ring buffer and set
++ Copy frame from waiting queue into relative ring buffer and set
+ appropriate ASIC register to kick hardware encryption before really
+ sent out to air.
+-
++
+ Arguments:
+ pAdapter Pointer to our adapter
+ PNDIS_PACKET Pointer to outgoing Ndis frame
+ NumberOfFrag Number of fragment required
+-
++
+ Return Value:
+ None
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaHardEncrypt(
+@@ -938,38 +1164,58 @@
+ #endif
+ ULONG Iv16;
+ ULONG Iv32;
+- PWPA_KEY pWpaKey;
++ PWPA_KEY pWpaKey = NULL;
+ UCHAR RetryMode = SHORT_RETRY;
+ static UCHAR Priority[4] = {"\x00\x00\x00\x00"};
++ INT idx;
++ PHEADER_802_11 pHeader;
++ unsigned long flags;
+
+ // Make sure Tx ring resource won't be used by other threads
+- spin_lock_irq(&pAdapter->TxRingLock);
++ spin_lock_irqsave(&pAdapter->TxRingLock, flags);
+
+ FrameGap = IFS_BACKOFF; // Default frame gap mode
+-
+- // outgoing frame always wakeup PHY to prevent frame lost and
++
++ // outgoing frame always wakeup PHY to prevent frame lost and
+ // turn off PSM bit to improve performance
+ if (pAdapter->PortCfg.Psm == PWR_SAVE)
+ {
+ MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+ }
+ AsicForceWakeup(pAdapter);
+-
++
+ pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_DATA;
+
+ pSrc = pPacket; // Point to start of MSDU
+-
++
++#if 0
+ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.PairwiseKey[0];
+ pWpaKey->Type = PAIRWISE_KEY;
++#else
++ pHeader = (PHEADER_802_11) pSrc;
++
++ for (idx = 0; idx < PAIRWISE_KEY_NO; idx++) {
++ if ((memcmp(&pHeader->Controlhead.Addr1,
++ pAdapter->PortCfg.PairwiseKey[idx].BssId, 6) == 0)
++ && (pAdapter->PortCfg.PairwiseKey[idx].KeyLen != 0)) {
++ pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.PairwiseKey[idx];
++ pWpaKey->Type = PAIRWISE_KEY;
++ DBGPRINT(RT_DEBUG_TRACE,
++ "WpaHardEncrypt:(U) Tx Use Pairwise Key(%d)\n", idx);
++ break;
++ }
++ }
++#endif
+ if (pWpaKey == NULL)
+ {
+ // No pairwise key, this should not happen
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ DBGPRINT(RT_DEBUG_ERROR, "WpaHardEncrypt: No pairwise key!!!!!\n");
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+-
++
+ // Get the Tx Ring descriptor & Dma Buffer address
+- pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
++ pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;
+ #ifndef BIG_ENDIAN
+ pTxD = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+ #else
+@@ -979,14 +1225,16 @@
+ pTxD = &TxD;
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ #endif
+-
++
+ if ((pTxD->Owner == DESC_OWN_NIC) || (pTxD->CipherOwn == DESC_OWN_NIC))
+ {
+ // Descriptor owned by NIC. No descriptor avaliable
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WpaHardEncrypt: Descriptor ownedby NIC. No descriptor available!!!!!!\n");
+ pAdapter->RalinkCounters.TxRingErrCount++;
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+ if (pTxD->Valid == TRUE)
+@@ -995,17 +1243,19 @@
+ // This should not happen since caller guaranteed.
+ // Make sure to release Tx ring resource
+ pTxD->Valid = FALSE;
+-
++
+ #ifdef BIG_ENDIAN
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+ *pDestTxD = TxD;
+ #endif
+
++ DBGPRINT(RT_DEBUG_ERROR,
++ "WpaHardEncrypt: Ndis packet of last round did not cleared!!!!!\n");
+ pAdapter->RalinkCounters.TxRingErrCount++;
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ return;
+ }
+-
++
+ // Copy whole frame to Tx ring buffer
+ memcpy(pDest, pPacket, Len);
+ pDest += Len;
+@@ -1026,16 +1276,21 @@
+ tkipIv.IV16.field.Rsvd = 0;
+ tkipIv.IV16.field.ExtIV = 1;// 0: non-extended IV, 1: extended IV
+ tkipIv.IV16.field.KeyID = 0;
+- tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ //tkipIv.IV32 = *(PULONG)(pWpaKey->TxTsc + 2);
++ memcpy(&tkipIv.IV32, &pWpaKey->TxTsc[2], 4);
+
++#ifdef BIG_ENDIAN
++ pTxD-Iv = SWAP32(tipIv.IV16.word);
++#else
+ pTxD->Iv = tkipIv.IV16.word;
++#endif
+
+ *((PUCHAR) &pTxD->Eiv) = *((PUCHAR) &tkipIv.IV32 + 3);
+ *((PUCHAR) &pTxD->Eiv + 1) = *((PUCHAR) &tkipIv.IV32 + 2);
+ *((PUCHAR) &pTxD->Eiv + 2) = *((PUCHAR) &tkipIv.IV32 + 1);
+ *((PUCHAR) &pTxD->Eiv + 3) = *((PUCHAR) &tkipIv.IV32);
+ }
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -1043,13 +1298,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+ // Copy TKey
+ memcpy(pTxD->Key, pWpaKey->Key, 16);
+-
++
+ // Set Cipher suite
+ CipherAlg = CIPHER_TKIP;
+
+@@ -1059,10 +1314,10 @@
+ pAdapter->PrivateInfo.Tx.R = RTMPTkipGetUInt32(pWpaKey->TxMic + 4);
+ pAdapter->PrivateInfo.Tx.nBytesInM = 0;
+ pAdapter->PrivateInfo.Tx.M = 0;
+-
++
+ // DA & SA field
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, pSrc + 4, 12);
+-
++
+ // Priority + 3 bytes of 0
+ RTMPTkipAppend(&pAdapter->PrivateInfo.Tx, Priority, 4);
+
+@@ -1086,9 +1341,9 @@
+ *(pTmp + 1) = pWpaKey->TxTsc[1];
+ *(pTmp + 2) = 0;
+ *(pTmp + 3) = 0x20;
+-
++
+ Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
+-
++
+ // Increase TxTsc value for next transmission
+ while (++pWpaKey->TxTsc[i] == 0x0)
+ {
+@@ -1096,13 +1351,13 @@
+ if (i == 6)
+ break;
+ }
+-
++
+ // Copy IV
+ memcpy(&pTxD->Iv, &Iv16, 4);
+-
++
+ // Copy EIV
+ memcpy(&pTxD->Eiv, &Iv32, 4);
+-
++
+ // Set IV offset
+ pTxD->IvOffset = LENGTH_802_11;
+
+@@ -1111,11 +1366,11 @@
+
+ // Set Cipher suite
+ CipherAlg = CIPHER_AES;
+-
++
+ // IV + EIV + HW MIC
+ Len += 16;
+- }
+-
++ }
++
+ #ifdef BIG_ENDIAN
+ RTMPFrameEndianChange(pAdapter, pOriginDest, DIR_WRITE, FALSE);
+ RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
+@@ -1123,7 +1378,7 @@
+ pTxD = pDestTxD;
+ #endif
+
+- RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
++ RTMPWriteTxDescriptor(pTxD, TRUE, CipherAlg, TRUE, FALSE, FALSE, RetryMode, FrameGap,
+ pAdapter->PortCfg.TxRate, 4, Len, pAdapter->PortCfg.TxPreambleInUsed, 0);
+
+ // Increase & maintain Tx Ring Index
+@@ -1131,28 +1386,28 @@
+ if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+ {
+ pAdapter->CurEncryptIndex = 0;
+- }
+- pAdapter->RalinkCounters.EncryptCount++;
+-
++ }
++ pAdapter->RalinkCounters.EncryptCount++;
++
+ // Kick Encrypt Control Register at the end of all ring buffer preparation
+ RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
+-
++
+ // Make sure to release Tx ring resource
+- spin_unlock_irq(&pAdapter->TxRingLock);
++ spin_unlock_irqrestore(&pAdapter->TxRingLock, flags);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- SHA1 function
++ SHA1 function
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID HMAC_SHA1(
+@@ -1167,8 +1422,8 @@
+ UCHAR k_opad[65]; /* outer padding - key XORd with opad */
+ INT i;
+
+- // if key is longer than 64 bytes reset it to key=SHA1(key)
+- if (key_len > 64)
++ // if key is longer than 64 bytes reset it to key=SHA1(key)
++ if (key_len > 64)
+ {
+ SHA_CTX tctx;
+ SHAInit(&tctx);
+@@ -1181,20 +1436,20 @@
+ memcpy(k_ipad, key, key_len);
+ memcpy(k_opad, key, key_len);
+
+- // XOR key with ipad and opad values
+- for (i = 0; i < 64; i++)
+- {
++ // XOR key with ipad and opad values
++ for (i = 0; i < 64; i++)
++ {
+ k_ipad[i] ^= 0x36;
+ k_opad[i] ^= 0x5c;
+ }
+
+- // perform inner SHA1
++ // perform inner SHA1
+ SHAInit(&context); /* init context for 1st pass */
+ SHAUpdate(&context, k_ipad, 64); /* start with inner pad */
+ SHAUpdate(&context, text, text_len); /* then text of datagram */
+ SHAFinal(&context, digest); /* finish up 1st pass */
+
+- //perform outer SHA1
++ //perform outer SHA1
+ SHAInit(&context); /* init context for 2nd pass */
+ SHAUpdate(&context, k_opad, 64); /* start with outer pad */
+ SHAUpdate(&context, digest, 20); /* then results of 1st hash */
+@@ -1203,17 +1458,17 @@
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+- PRF function
++ PRF function
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+ 802.1i Annex F.9
+-
++
+ ========================================================================
+ */
+ VOID PRF(
+@@ -1230,7 +1485,7 @@
+ UCHAR input[1024];
+ INT currentindex = 0;
+ INT total_len;
+-
++
+ memcpy(input, prefix, prefix_len);
+ input[prefix_len] = 0;
+ memcpy(&input[prefix_len + 1], data, data_len);
+@@ -1242,22 +1497,22 @@
+ HMAC_SHA1(input, total_len, key, key_len, &output[currentindex]);
+ currentindex += 20;
+ input[total_len - 1]++;
+- }
++ }
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Count TPTK from PMK
+
+ Arguments:
+-
++
+ Return Value:
+ Output Store the TPTK
+
+ Note:
+-
++
+ ========================================================================
+ */
+ VOID WpaCountPTK(
+@@ -1268,11 +1523,11 @@
+ IN UCHAR *SA,
+ OUT UCHAR *output,
+ IN UINT len)
+-{
++{
+ UCHAR concatenation[76];
+ UINT CurrPos = 0;
+ UCHAR temp[32];
+- UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ',
++ UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ',
+ 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n'};
+
+ memset(temp, 0, sizeof(temp));
+@@ -1281,52 +1536,52 @@
+ if (RTMPCompareMemory(SA, AA, 6) == 1)
+ memcpy(concatenation, AA, 6);
+ else
+- memcpy(concatenation, SA, 6);
++ memcpy(concatenation, SA, 6);
+ CurrPos += 6;
+
+ // Get larger address
+ if (RTMPCompareMemory(SA, AA, 6) == 1)
+ memcpy(&concatenation[CurrPos], SA, 6);
+ else
+- memcpy(&concatenation[CurrPos], AA, 6);
++ memcpy(&concatenation[CurrPos], AA, 6);
+ CurrPos += 6;
+
+ // Get smaller address
+- if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
++ if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
+ memcpy(&concatenation[CurrPos], SNonce, 32);
+- else
++ else
+ memcpy(&concatenation[CurrPos], ANonce, 32);
+ CurrPos += 32;
+
+ // Get larger address
+- if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
++ if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
+ memcpy(&concatenation[CurrPos], ANonce, 32);
+- else
++ else
+ memcpy(&concatenation[CurrPos], SNonce, 32);
+ CurrPos += 32;
+-
++
+ PRF(PMK, LEN_MASTER_KEY, Prefix, 22, concatenation, 76 , output, len);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Misc function to Generate random number
+
+ Arguments:
+-
++
+ Return Value:
+
+ Note:
+ 802.1i Annex F.9
+-
++
+ ========================================================================
+ */
+ VOID GenRandom(
+- IN PRTMP_ADAPTER pAd,
++ IN PRTMP_ADAPTER pAd,
+ OUT UCHAR *random)
+-{
++{
+ INT i, curr;
+ UCHAR local[80], KeyCounter[32];
+ UCHAR result[80];
+@@ -1337,9 +1592,9 @@
+ memset(local, 0, 80);
+ memset(KeyCounter, 0, 32);
+ memcpy(local, pAd->CurrentAddress, ETH_ALEN);
+-
++
+ for (i = 0; i < 32; i++)
+- {
++ {
+ curr = ETH_ALEN;
+ CurrentTime = jiffies;
+ memcpy(local, pAd->CurrentAddress, ETH_ALEN);
+@@ -1348,29 +1603,29 @@
+ curr += sizeof(CurrentTime);
+ memcpy(&local[curr], result, 32);
+ curr += 32;
+- memcpy(&local[curr], &i, 2);
++ memcpy(&local[curr], &i, 2);
+ curr += 2;
+- PRF(KeyCounter, 32, prefix,12, local, curr, result, 32);
++ PRF(KeyCounter, 32, prefix,12, local, curr, result, 32);
+ }
+- memcpy(random, result, 32);
++ memcpy(random, result, 32);
+ }
+
+ /*
+ ========================================================================
+-
++
+ Routine Description:
+ Misc function to decrypt AES body
+-
++
+ Arguments:
+-
++
+ Return Value:
+-
++
+ Note:
+ This function references to RFC 3394 for aes key unwrap algorithm.
+-
++
+ ========================================================================
+ */
+-VOID AES_GTK_KEY_UNWRAP(
++VOID AES_GTK_KEY_UNWRAP(
+ IN UCHAR *key,
+ OUT UCHAR *plaintext,
+ IN UCHAR *ciphertext)
+@@ -1381,7 +1636,7 @@
+ INT num_blocks = 2;
+ INT j;
+ aes_context aesctx;
+-
++
+ // Initialize
+ // A = C[0]
+ memcpy(A, ciphertext, 8);
+@@ -1391,7 +1646,7 @@
+ memcpy(R2, &ciphertext[16], 8);
+
+ aes_set_key(&aesctx, key, 128);
+-
++
+ for (j = 5; j >= 0; j--)
+ {
+ xor = num_blocks * j + 2;
+@@ -1401,7 +1656,7 @@
+ aes_decrypt(&aesctx, BIN, BOUT);
+ memcpy(A, &BOUT[0], 8);
+ memcpy(R2, &BOUT[8], 8);
+-
++
+ xor = num_blocks * j + 1;
+ memcpy(BIN, A, 8);
+ BIN[7] = A[7] ^ xor;
+diff -Nur rt2500-1.1.0-b4/Module/wpa.h rt2500-cvs-2007061011/Module/wpa.h
+--- rt2500-1.1.0-b4/Module/wpa.h 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/Module/wpa.h 2007-03-21 05:25:35.000000000 +0100
+@@ -1,35 +1,35 @@
+-/***************************************************************************
+- * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
+- * *
+- * Licensed under the GNU GPL *
+- * Original code supplied under license from RaLink Inc, 2004. *
+- ***************************************************************************/
+-
+- /***************************************************************************
+- * Module Name: wpa.h
+- *
+- * Abstract:
+- *
+- * Revision History:
+- * Who When What
+- * -------- ----------- -----------------------------
+- * MarkW 8th Dec 04 Baseline code
+- ***************************************************************************/
++/***************************************************************************
++ * RT2400/RT2500 SourceForge Project - http://rt2x00.serialmonkey.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. *
++ * *
++ * Licensed under the GNU GPL *
++ * Original code supplied under license from RaLink Inc, 2004. *
++ ***************************************************************************/
++
++ /***************************************************************************
++ * Module Name: wpa.h
++ *
++ * Abstract:
++ *
++ * Revision History:
++ * Who When What
++ * -------- ----------- -----------------------------
++ * MarkW 8th Dec 04 Baseline code
++ ***************************************************************************/
+
+ #ifndef __WPA_H__
+ #define __WPA_H__
+@@ -57,7 +57,7 @@
+ #define DESC_TYPE_AES 2
+ #define RSN_KEY_DESC 0xfe
+
+-#define LEN_MASTER_KEY 32
++#define LEN_MASTER_KEY 32
+
+ // EAPOL EK, MK
+ #define LEN_EAP_EK 16
+@@ -131,7 +131,7 @@
+ UCHAR KeyRsc[LEN_KEY_DESC_RSC];
+ UCHAR KeyId[LEN_KEY_DESC_ID];
+ UCHAR KeyMic[LEN_KEY_DESC_MIC];
+- UCHAR KeyDataLen[2];
++ UCHAR KeyDataLen[2];
+ UCHAR KeyData[MAX_LEN_OF_RSNIE];
+ } KEY_DESCRIPTER, *PKEY_DESCRIPTER;
+
+diff -Nur rt2500-1.1.0-b4/THANKS rt2500-cvs-2007061011/THANKS
+--- rt2500-1.1.0-b4/THANKS 2006-06-17 22:12:58.000000000 +0200
++++ rt2500-cvs-2007061011/THANKS 2007-05-05 19:48:18.000000000 +0200
+@@ -8,6 +8,7 @@
+ * Mark Wallis - mwallis@serialmonkey.com
+ * Robin Cornelius - robin@cornelius.demon.co.uk
+ * Gertjan van Wingerde - gwingerde@users.sourceforge.net
++* Olivier Cornu - o.cornu@gmail.com
+
+ And Special thanks to those that have contributed to the project
+
diff --git a/abs/core/rt2500/kernel-2.6.24.patch b/abs/core/rt2500/kernel-2.6.24.patch
new file mode 100644
index 0000000..113573f
--- /dev/null
+++ b/abs/core/rt2500/kernel-2.6.24.patch
@@ -0,0 +1,20 @@
+--- rt2500-1.1.0-b4/Module/rtmp_main.c~ 2008-01-25 11:13:14.000000000 +0100
++++ rt2500-1.1.0-b4/Module/rtmp_main.c 2008-01-25 11:17:57.000000000 +0100
+@@ -251,8 +251,6 @@
+ goto err_out;
+ }
+
+- SET_MODULE_OWNER(net_dev);
+-
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+ SET_NETDEV_DEV(net_dev, &(pPci_Dev->dev));
+ #endif
+@@ -392,7 +390,7 @@
+ NICDisableInterrupt(pAd);
+ }
+
+- status = request_irq(pAd->pPci_Dev->irq, &RTMPIsr, SA_SHIRQ, net_dev->name, net_dev);
++ status = request_irq(pAd->pPci_Dev->irq, &RTMPIsr, IRQF_SHARED, net_dev->name, net_dev);
+ if (status)
+ {
+ goto out_module_put;
diff --git a/abs/core/rt2500/rt2500.install b/abs/core/rt2500/rt2500.install
new file mode 100644
index 0000000..c242f1b
--- /dev/null
+++ b/abs/core/rt2500/rt2500.install
@@ -0,0 +1,26 @@
+# arg 1: the new package version
+post_install()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+post_remove()
+{
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/rt2x00-rt61-fw/PKGBUILD b/abs/core/rt2x00-rt61-fw/PKGBUILD
new file mode 100644
index 0000000..ef65031
--- /dev/null
+++ b/abs/core/rt2x00-rt61-fw/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=rt2x00-rt61-fw
+pkgver=1.2
+pkgrel=2
+pkgdesc="Firmware for the rt2x00 wireless drivers"
+arch=(i686 x86_64)
+url="http://www.ralinktech.com/ralink/Home/Support/Linux.html"
+license=('RALINK')
+source=(http://www.ralinktech.com.tw/data/RT61_Firmware_V${pkgver}.zip)
+
+build() {
+ cd $startdir/src/RT61_Firmware_V${pkgver}
+ mkdir -p $startdir/pkg/lib/firmware
+ install -m644 rt2* $startdir/pkg/lib/firmware || return 1
+}
+md5sums=('d4c690c93b470bc9a681297c2adc6281')
diff --git a/abs/core/rt2x00-rt71w-fw/PKGBUILD b/abs/core/rt2x00-rt71w-fw/PKGBUILD
new file mode 100644
index 0000000..5736755
--- /dev/null
+++ b/abs/core/rt2x00-rt71w-fw/PKGBUILD
@@ -0,0 +1,17 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=rt2x00-rt71w-fw
+pkgver=1.8
+pkgrel=2
+pkgdesc="Firmware for the rt2x00 wireless drivers"
+arch=(i686 x86_64)
+url="http://www.ralinktech.com/ralink/Home/Support/Linux.html"
+license=('RALINK')
+source=(http://www.ralinktech.com.tw/data/RT71W_Firmware_V${pkgver}.zip)
+
+build() {
+ cd $startdir/src/RT71W_Firmware_V${pkgver}
+ install -Dm644 rt73.bin $startdir/pkg/lib/firmware/rt73.bin || return 1
+}
+md5sums=('1e7a5dc574e0268574fcda3fd5cf52f7')
diff --git a/abs/core/run-parts/PKGBUILD b/abs/core/run-parts/PKGBUILD
new file mode 100644
index 0000000..efa4c4f
--- /dev/null
+++ b/abs/core/run-parts/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 8620 2008-08-14 09:04:04Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=run-parts
+pkgver=2.30
+pkgrel=1
+pkgdesc='run-parts from the debianutils package'
+arch=('i686' 'x86_64')
+url='http://packages.qa.debian.org/d/debianutils.html'
+license=('GPL')
+depends=('glibc')
+source=("http://ftp.debian.org/debian/pool/main/d/debianutils/debianutils_${pkgver}.tar.gz")
+md5sums=('7fdd5f8395162d8728d4b79e97b9819e')
+
+build() {
+ cd $srcdir/debianutils-$pkgver
+ ./configure --prefix=/usr
+ make
+
+ install -D -m755 run-parts $pkgdir/usr/bin/run-parts
+ install -D -m644 run-parts.8 $pkgdir/usr/share/man/man8/run-parts.8
+}
diff --git a/abs/core/runit/PKGBUILD b/abs/core/runit/PKGBUILD
new file mode 100755
index 0000000..4065ae6
--- /dev/null
+++ b/abs/core/runit/PKGBUILD
@@ -0,0 +1,69 @@
+pkgname=runit
+pkgver=1.8.0
+pkgrel=51
+pkgdesc="A replacement for sysvinit, and other init schemes, with service supervision"
+url="http://smarden.org/runit/"
+license="BSD"
+depends=('glibc' 'util-linux' 'initscripts' )
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=runit.install
+source=(http://smarden.org/runit/$pkgname-$pkgver.tar.gz add_service.sh remove_service.sh halt.script reboot.script poweroff.script)
+arch=('i686')
+
+build() {
+ cd $startdir/src/admin/$pkgname-$pkgver/src
+ echo "${CC:-gcc} ${CFLAGS:--Os}" > conf-cc
+ echo "${LD:-gcc -s}" > conf-ld
+ make || return 1
+ ./compile svwaitdown.c
+ ./load svwaitdown unix.a byte.a time.a
+ ./compile svwaitup.c
+ ./load svwaitup unix.a byte.a time.a
+ ./compile utmpset.c
+ ./load utmpset unix.a byte.a
+
+
+
+
+ install -d $startdir/pkg/sbin/
+ install -d $startdir/pkg/usr/man/man8
+ install -m0755 $startdir/src/add_service.sh $startdir/pkg/sbin
+ install -m0755 $startdir/src/remove_service.sh $startdir/pkg/sbin
+ install -m0755 $startdir/src/reboot.script $startdir/pkg/sbin
+ install -m0755 $startdir/src/halt.script $startdir/pkg/sbin
+install -m0755 $startdir/src/poweroff.script $startdir/pkg/sbin
+
+ for i in `cat ../package/commands`; do
+ install -m0755 $i $startdir/pkg/sbin/
+ done
+ install -m0755 svwaitup $startdir/pkg/sbin/
+ install -m0755 svwaitdown $startdir/pkg/sbin/
+ install -m0644 ../man/*.8 $startdir/pkg/usr/man/man8
+ rsync -a --exclude=.svn $startdir/runitscripts $startdir/src
+ #cp -rp $startdir/runitscripts $startdir/src/
+
+ cd $startdir/src/runitscripts
+
+ install -d $startdir/pkg/etc/
+ install -d $startdir/pkg/etc/runit/
+ install -d $startdir/pkg/var/service
+
+ #install -d $startdir/pkg/etc/runit/runsvdir
+ #install -d $startdir/pkg/etc/runit/runsvdir/default
+ #ln -s default $startdir/pkg/etc/runit/runsvdir/current
+
+ install -m0700 1 2 3 ctrlaltdel $startdir/pkg/etc/runit
+
+ install -m0755 reboot-runit halt-runit logger $startdir/pkg/sbin
+
+ install -d $startdir/pkg/etc/sv
+ rsync -a --exclude=.svn services/* $startdir/pkg/etc/sv
+ #cp -R services/* $startdir/pkg/etc/sv
+ cd $startdir
+ install -d $startdir/pkg/usr/bin
+ install -m0755 fbd $startdir/pkg/usr/bin/fbd
+
+}
diff --git a/abs/core/runit/add_service.sh b/abs/core/runit/add_service.sh
new file mode 100755
index 0000000..237af13
--- /dev/null
+++ b/abs/core/runit/add_service.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -d $SCRIPT_DIR/$1 ]
+then
+ if [ -d $SERVICE_DIR/$1 ]
+ then
+ echo "$1 is already present"
+ else
+ ln -s $SCRIPT_DIR/$1 $SERVICE_DIR/$1
+ echo "adding $1"
+ fi
+else
+ echo "couldn't find $SCRIPT_DIR/$1"
+fi
diff --git a/abs/core/runit/halt.script b/abs/core/runit/halt.script
new file mode 100755
index 0000000..b49ed7c
--- /dev/null
+++ b/abs/core/runit/halt.script
@@ -0,0 +1,16 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+if [ x$1 = x-w ]
+then
+ /sbin/halt-init -w
+ exit 0
+fi
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/halt-runit $@
+else
+ /sbin/halt-init $@
+fi
+
diff --git a/abs/core/runit/poweroff.script b/abs/core/runit/poweroff.script
new file mode 100755
index 0000000..99779eb
--- /dev/null
+++ b/abs/core/runit/poweroff.script
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/halt-runit $@
+else
+ /sbin/poweroff.init $@
+fi
+
diff --git a/abs/core/runit/reboot.script b/abs/core/runit/reboot.script
new file mode 100755
index 0000000..fcce679
--- /dev/null
+++ b/abs/core/runit/reboot.script
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+INIT=`ps -p 1 -o comm=`
+chvt 1
+if [ x$INIT = xrunit ]
+then
+ /sbin/reboot-runit $@
+else
+ /sbin/reboot.init $@
+fi
+
diff --git a/abs/core/runit/remove_service.sh b/abs/core/runit/remove_service.sh
new file mode 100755
index 0000000..16c7ecf
--- /dev/null
+++ b/abs/core/runit/remove_service.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+SERVICE_DIR=/var/service
+SCRIPT_DIR=/etc/sv
+if [ -e $SERVICE_DIR/$1 ]
+then
+ rm $SERVICE_DIR/$1
+ echo "removing $1"
+fi
diff --git a/abs/core/runit/runit.install b/abs/core/runit/runit.install
new file mode 100755
index 0000000..4652368
--- /dev/null
+++ b/abs/core/runit/runit.install
@@ -0,0 +1,57 @@
+# arg 1: the new package version
+
+pre_install () {
+if [ ! -f /sbin/halt-init ]
+then
+ mv /sbin/halt /sbin/halt-init
+ rm -f /sbin/reboot
+ rm -f /sbin/poweroff
+fi
+
+}
+
+pre_upgrade () {
+if [ ! -f /sbin/halt-init ]
+then
+ mv /sbin/halt /sbin/halt-init
+ rm -f /sbin/reboot
+ rm -f /sbin/poweroff
+fi
+
+}
+
+post_install () {
+
+ mkdir /var/service
+ ln -s /etc/sv/tty* /var/service
+ servicelist="acpid cron frontend lircd ntpd alsa-utils avahi dbus portmap sshd"
+ for i in $servicelist
+ do
+ ln -s /etc/sv/$i /var/service/$i
+ done
+
+ ln -s /sbin/halt.script /sbin/halt
+ ln -s /sbin/reboot.script /sbin/reboot
+ ln -s /sbin/poweroff.script /sbin/poweroff
+ ln -s /sbin/halt-init /sbin/reboot.init
+ ln -s /sbin/halt-init /sbin/poweroff.init
+
+
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+
+post_upgrade(){
+ ln -s /sbin/halt.script /sbin/halt
+ ln -s /sbin/reboot.script /sbin/reboot
+ ln -s /sbin/poweroff.script /sbin/poweroff
+ ln -s /sbin/halt-init /sbin/reboot.init
+ ln -s /sbin/halt-init /sbin/poweroff.init
+
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/runit/runitscripts/1 b/abs/core/runit/runitscripts/1
new file mode 100755
index 0000000..748930f
--- /dev/null
+++ b/abs/core/runit/runitscripts/1
@@ -0,0 +1,14 @@
+#!/bin/bash
+/etc/rc.sysinit
+hostname `cat /etc/hostname`
+/sbin/sysctl -p 2>/dev/null >/dev/null
+#/usr/bin/load-modules-mythvantage.sh
+rm /etc/dhcpc/dhcpcd*.pid 2>/dev/null
+rm -f /etc/sv/frontend/.runtime/* 2>/dev/null
+rm -f /etc/runit/reboot 2>/dev/null
+/etc/net/scripts/network.init start 2>/var/log/network.init.error >/var/log/network.init
+/usr/sbin/ethtool -s eth0 wol g 2>/dev/null
+/usr/sbin/ethtool -s eth1 wol g 2>/dev/null
+/usr/sbin/ethtool -s eth2 wol g 2>/dev/null
+
+#/bin/su mythtv -c /usr/bin/grabkey.py 2>/dev/null 1>/devn/null &
diff --git a/abs/core/runit/runitscripts/2 b/abs/core/runit/runitscripts/2
new file mode 100755
index 0000000..079b644
--- /dev/null
+++ b/abs/core/runit/runitscripts/2
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+PATH=/bin:/sbin:/usr/bin:/usr/sbin
+
+#runsvchdir default >/dev/null
+
+exec env - PATH=$PATH \
+runsvdir -P /var/service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'
diff --git a/abs/core/runit/runitscripts/3 b/abs/core/runit/runitscripts/3
new file mode 100755
index 0000000..0fa3abc
--- /dev/null
+++ b/abs/core/runit/runitscripts/3
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+export PREVLEVEL=3
+/etc/rc.shutdown
diff --git a/abs/core/runit/runitscripts/ctrlaltdel b/abs/core/runit/runitscripts/ctrlaltdel
new file mode 100755
index 0000000..2550d3c
--- /dev/null
+++ b/abs/core/runit/runitscripts/ctrlaltdel
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+PATH=/bin:/usr/bin
+MSG="System is going down in 10 seconds..."
+
+# echo 'disabled.' ; exit
+touch /etc/runit/stopit
+chmod 100 /etc/runit/stopit && echo "$MSG" | wall
+/bin/sleep 10
diff --git a/abs/core/runit/runitscripts/halt-runit b/abs/core/runit/runitscripts/halt-runit
new file mode 100755
index 0000000..7c07b05
--- /dev/null
+++ b/abs/core/runit/runitscripts/halt-runit
@@ -0,0 +1,2 @@
+#!/bin/sh
+runit-init 0
diff --git a/abs/core/runit/runitscripts/logger b/abs/core/runit/runitscripts/logger
new file mode 100755
index 0000000..6888f6f
--- /dev/null
+++ b/abs/core/runit/runitscripts/logger
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+svname=$( cd .. && basename $( pwd ) )
+if [ ! -d /var/log/$svname ]
+then
+ mkdir /var/log/$svname
+ chown root.root /var/log/$svname
+ chmod 700 /var/log/$svname
+fi
+
+exec /sbin/svlogd -tt /var/log/$svname
diff --git a/abs/core/runit/runitscripts/reboot-runit b/abs/core/runit/runitscripts/reboot-runit
new file mode 100755
index 0000000..be831ec
--- /dev/null
+++ b/abs/core/runit/runitscripts/reboot-runit
@@ -0,0 +1,2 @@
+#!/bin/sh
+runit-init 6
diff --git a/abs/core/runit/runitscripts/services/Xvfb/finish b/abs/core/runit/runitscripts/services/Xvfb/finish
new file mode 100755
index 0000000..14cd831
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/Xvfb/finish
@@ -0,0 +1,12 @@
+#!/bin/bash
+. /etc/profile
+VIRTUAL_DISPLAY=":50"
+Xvfb_parm="$VIRTUAL_DISPLAY -screen 0 800x600x16"
+pid=`ps -eaf | grep Xvfb | grep $VIRTUAL_DISPLAY | awk '{print $2}'`
+ if [ $pid ]
+ then
+ kill -9 $pid
+# echo $pid
+fi
+rm -f /tmp/.X${VIRTUAL_DISPLAY}-lock
+
diff --git a/abs/core/runit/runitscripts/services/Xvfb/run b/abs/core/runit/runitscripts/services/Xvfb/run
new file mode 100755
index 0000000..823916d
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/Xvfb/run
@@ -0,0 +1,5 @@
+#!/bin/bash
+. /etc/profile
+VIRTUAL_DISPLAY=":50"
+Xvfb_parm="$VIRTUAL_DISPLAY -screen 0 800x600x16"
+Xvfb $Xvfb_parm
diff --git a/abs/core/runit/runitscripts/services/acpid/run b/abs/core/runit/runitscripts/services/acpid/run
new file mode 100755
index 0000000..daf9859
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/acpid/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/acpid -f -c /etc/acpi/events 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/alsa-utils/finish b/abs/core/runit/runitscripts/services/alsa-utils/finish
new file mode 100755
index 0000000..d6f3897
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/alsa-utils/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+sv down alsa-utils
diff --git a/abs/core/runit/runitscripts/services/alsa-utils/run b/abs/core/runit/runitscripts/services/alsa-utils/run
new file mode 100755
index 0000000..17f5f99
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/alsa-utils/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /etc/rc.d/alsa start
diff --git a/abs/core/runit/runitscripts/services/apache/run b/abs/core/runit/runitscripts/services/apache/run
new file mode 100755
index 0000000..130d870
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/apache/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/local/apache/bin/httpd -DNO_DETACH
diff --git a/abs/core/runit/runitscripts/services/avahi/run b/abs/core/runit/runitscripts/services/avahi/run
new file mode 100755
index 0000000..323d242
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/avahi/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/avahi-daemon >/dev/null 2>/dev/null
+
diff --git a/abs/core/runit/runitscripts/services/cron/run b/abs/core/runit/runitscripts/services/cron/run
new file mode 100755
index 0000000..99dc014
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/cron/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/crond -f >/dev/null 2>/dev/null
diff --git a/abs/core/runit/runitscripts/services/dbus/run b/abs/core/runit/runitscripts/services/dbus/run
new file mode 100755
index 0000000..872ca77
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/dbus/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/bin/dbus-daemon --system --nofork 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/dnsmasq/run b/abs/core/runit/runitscripts/services/dnsmasq/run
new file mode 100755
index 0000000..451dda4
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/dnsmasq/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/dnsmasq -k >/dev/null 2>/dev/null
+
diff --git a/abs/core/runit/runitscripts/services/evrouter/finish b/abs/core/runit/runitscripts/services/evrouter/finish
new file mode 100755
index 0000000..0dd33de
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/evrouter/finish
@@ -0,0 +1,4 @@
+#!/bin/bash
+. /etc/profile
+DISPLAY=localhost:50 evrouter -q
+rm -rf /tmp/.evrouter*
diff --git a/abs/core/runit/runitscripts/services/evrouter/run b/abs/core/runit/runitscripts/services/evrouter/run
new file mode 100755
index 0000000..1d7389a
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/evrouter/run
@@ -0,0 +1,5 @@
+#!/bin/bash
+. /etc/profile
+sv start Xvfb
+su mythtv -c "DISPLAY=localhost:50 evrouter -c /etc/evrouter.cfg -f /dev/input/event*"
+
diff --git a/abs/core/runit/runitscripts/services/frontend/finish b/abs/core/runit/runitscripts/services/frontend/finish
new file mode 100755
index 0000000..e1e3e00
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/frontend/finish
@@ -0,0 +1,30 @@
+#!/bin/bash
+exec 2>&1
+grep -q nox /proc/cmdline
+STATUS=$?
+ if [ $STATUS = 0 ]
+ then
+ chvt 2
+else
+
+chvt 1
+if [ ! -d /etc/sv/frontend/.runtime ]
+then
+ 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 ]
+then
+ sv stop frontend
+ rm -f /etc/sv/frontend/.runtime/*
+ echo "Frontend is not able to start, disabling it"
+fi
+fi
diff --git a/abs/core/runit/runitscripts/services/frontend/log/run b/abs/core/runit/runitscripts/services/frontend/log/run
new file mode 100755
index 0000000..463045f
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/frontend/log/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+. /etc/systemconfig
+ /usr/bin/logger -p local6.info -t mythfrontend
+
diff --git a/abs/core/runit/runitscripts/services/frontend/run b/abs/core/runit/runitscripts/services/frontend/run
new file mode 100755
index 0000000..b59fc63
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/frontend/run
@@ -0,0 +1,10 @@
+#!/bin/sh
+exec 2>&1
+ grep -q nox /proc/cmdline
+ STATUS=$?
+ if [ $STATUS = 0 ]
+ then
+ sv down frontend
+ exit 0
+ fi
+/usr/bin/openvt -fwc 6 -- /bin/su - mythtv -c /usr/bin/startx >& /dev/null
diff --git a/abs/core/runit/runitscripts/services/gpm/run b/abs/core/runit/runitscripts/services/gpm/run
new file mode 100755
index 0000000..361fc43
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/gpm/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+. /etc/sysconfig/mouse
+exec gpm -D -m $MDEVICE -t $PROTOCOL
diff --git a/abs/core/runit/runitscripts/services/hal/run b/abs/core/runit/runitscripts/services/hal/run
new file mode 100755
index 0000000..f1362b2
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/hal/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+sv waitup dbus 2>/dev/null 1>/dev/null
+exec /usr/sbin/hald --daemon=no --use-syslog 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/hobbit-client/run b/abs/core/runit/runitscripts/services/hobbit-client/run
new file mode 100755
index 0000000..e45173d
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/hobbit-client/run
@@ -0,0 +1,68 @@
+#!/bin/sh
+#----------------------------------------------------------------------------#
+# Hobbit client bootup script. #
+# #
+# This invokes hobbitlaunch, which in turn runs the Hobbit client and any #
+# extensions configured. #
+# #
+# Copyright (C) 2005-2006 Henrik Storner <henrik@hswn.dk> #
+# "status" section (C) Scott Smith 2006 #
+# #
+# This program is released under the GNU General Public License (GPL), #
+# version 2. See the file "COPYING" for details. #
+# #
+#----------------------------------------------------------------------------#
+#
+# $Id: runclient.sh,v 1.13 2006/07/14 21:25:19 henrik Rel $
+
+# Default settings for this client
+MACHINEDOTS="`uname -n`" # This systems hostname
+BBOSTYPE="`uname -s | tr '[A-Z]' '[a-z]'`" # This systems operating system in lowercase
+BBOSSCRIPT="hobbitclient-$BBOSTYPE.sh"
+
+# Commandline mods for the defaults
+while test "$1" != ""
+do
+ case "$1" in
+ --hostname=*)
+ MACHINEDOTS="`echo $1 | sed -e 's/--hostname=//'`"
+ ;;
+ --os=*)
+ BBOSTYPE="`echo $1 | sed -e 's/--os=//' | tr '[A-Z]' '[a-z]'`"
+ ;;
+ --class=*)
+ CONFIGCLASS="`echo $1 | sed -e 's/--class=//' | tr '[A-Z]' '[a-z]'`"
+ ;;
+ --help)
+ echo "Usage: $0 [--hostname=CLIENTNAME] [--os=rhel3|linux22] [--class=CLASSNAME] start|stop"
+ exit 0
+ ;;
+ start)
+ CMD=$1
+ ;;
+ stop)
+ CMD=$1
+ ;;
+ restart)
+ CMD=$1
+ ;;
+ status)
+ CMD=$1
+ ;;
+ esac
+
+ shift
+done
+
+OLDDIR="`pwd`"
+cd "`dirname $0`"
+HOBBITCLIENTHOME="/data/srv/hobbit/client"
+cd "$OLDDIR"
+
+MACHINE="`echo $MACHINEDOTS | sed -e 's/\./,/g'`"
+
+export MACHINE MACHINEDOTS BBOSTYPE BBOSSCRIPT HOBBITCLIENTHOME CONFIGCLASS
+
+
+su nobody -c "$HOBBITCLIENTHOME/bin/hobbitlaunch --config=$HOBBITCLIENTHOME/etc/clientlaunch.cfg --log=$HOBBITCLIENTHOME/logs/clientlaunch.log --pidfile=$HOBBITCLIENTHOME/logs/clientlaunch.$MACHINEDOTS.pid --no-daemon"
+
diff --git a/abs/core/runit/runitscripts/services/hobbit/run b/abs/core/runit/runitscripts/services/hobbit/run
new file mode 100755
index 0000000..24ad9fe
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/hobbit/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec su nobody -c "/data/srv/hobbit/server/bin/hobbitlaunch --config=/data/srv/hobbit/server/etc/hobbitlaunch.cfg --env=/data/srv/hobbit/server/etc/hobbitserver.cfg --log=/var/log/hobbit/hobbitlaunch.log --pidfile=/var/log/hobbit/hobbitlaunch.pid --no-daemon"
diff --git a/abs/core/runit/runitscripts/services/lcdd/run b/abs/core/runit/runitscripts/services/lcdd/run
new file mode 100755
index 0000000..df71bf8
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/lcdd/run
@@ -0,0 +1,9 @@
+#!/bin/sh
+. /etc/systemconfig
+exec 2>&1
+if [ x$LCDtype = xxosd ]
+then
+ DISPLAY=127.0.0.1:0 /usr/sbin/LCDd -f -c /etc/LCDd.conf 2>/dev/null >/dev/null
+else
+ exec /usr/sbin/LCDd -f -c /etc/LCDd.conf 2>/dev/null >/dev/null
+fi
diff --git a/abs/core/runit/runitscripts/services/lighttpd/run b/abs/core/runit/runitscripts/services/lighttpd/run
new file mode 100755
index 0000000..70cb0a5
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/lighttpd/run
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
diff --git a/abs/core/runit/runitscripts/services/lircd/finish b/abs/core/runit/runitscripts/services/lircd/finish
new file mode 100755
index 0000000..3545b07
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/lircd/finish
@@ -0,0 +1,12 @@
+#!/bin/bash
+killall -9 lircd
+rm -f /var/run/lirc*.pid
+touch /etc/sv/lircd/.runtime/`date +%s`
+numfiles=`/usr/bin/file_time_offset.py -s4 -d/etc/sv/lircd/.runtime `
+if [ $numfiles -gt 3 ]
+then
+ rm -f /etc/sv/lircd/.runtime/*
+ ls -la /etc/sv/lircd/.runtime/*
+ sv stop lircd
+ echo "lircd is not able to start, disabling it"
+fi
diff --git a/abs/core/runit/runitscripts/services/lircd/run b/abs/core/runit/runitscripts/services/lircd/run
new file mode 100755
index 0000000..4457b37
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/lircd/run
@@ -0,0 +1,39 @@
+#!/bin/bash
+exec 2>&1
+run_lircd2=false
+. /etc/systemconfig
+function imon_detect {
+if [ -e /dev/lirc_imon ]
+then
+lircd2_cmd="/usr/sbin/lircd -d /dev/lirc_imon --output=/dev/lircd --pidfile=/var/run/lircd2.pid --connect=localhost:8765"
+run_lircd2=true
+fi
+}
+
+
+
+case $ReceiverType in
+ Serial)
+ /usr/bin/setserial /dev/$ReceiverSerialport uart none
+ /sbin/modprobe lirc_serial
+ DEVICE=`ls /dev/lirc[0-9] 2>/dev/null |sort |sed '/./,$!d'|head -n 1 `
+ imon_detect
+ ;;
+ Usb-imon)
+ DEVICE=/dev/lirc_imon
+ ;;
+
+ *)
+
+ DEVICE=`ls /dev/lirc[0-9] 2>/dev/null |sort |sed '/./,$!d'|head -n 1 `
+ imon_detect
+ ;;
+esac
+
+if [ "$run_lircd2" = "true" ]
+then
+ $lircd2_cmd 2>/dev/null 1>/dev/null
+ exec /usr/sbin/lircd -n -d $DEVICE --output /dev/lircd1 --listen 2>/dev/null 1>/dev/null
+else
+ exec /usr/sbin/lircd -n -d $DEVICE 2>/dev/null 1>/dev/null
+fi
diff --git a/abs/core/runit/runitscripts/services/mysql/run b/abs/core/runit/runitscripts/services/mysql/run
new file mode 100755
index 0000000..569230e
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/mysql/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+exec 2>&1
+
+MYSQLD_ROOT="/data/srv/mysql"
+# source application-specific settings
+[ -f /etc/conf.d/mysqld ] && . /etc/conf.d/mysqld
+if [ ! `egrep '^mysql:' /etc/group` ]; then
+ stat_busy "Adding mysql group"
+ groupadd -g 89 mysql
+ stat_done
+fi
+if [ ! `egrep '^mysql:' /etc/passwd` ]; then
+ stat_busy "Adding mysql user"
+ useradd -u 89 -g mysql -d $MYSQLD_ROOT -s /bin/false mysql
+ [ -d $MYSQLD_ROOT ] && chown -R mysql.mysql $MYSQLD_ROOT
+ stat_done
+fi
+
+if [ ! -d $MYSQLD_ROOT ]; then
+ mkdir $MYSQLD_ROOT
+ /usr/bin/mysql_install_db --datadir=$MYSQLD_ROOT --user=mysql
+ chown -R mysql.mysql $MYSQLD_ROOT
+fi
+
+if [ ! -e /var/log/mysqld.log ]; then
+ touch /var/log/mysqld.log
+ chown mysql /var/log/mysqld.log
+fi
+exec /usr/sbin/mysqld -u mysql 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/mythbackend/log/run b/abs/core/runit/runitscripts/services/mythbackend/log/run
new file mode 100755
index 0000000..6ed5184
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/mythbackend/log/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+ /usr/bin/logger -p local7.info -t mythbackend
+
diff --git a/abs/core/runit/runitscripts/services/mythbackend/run b/abs/core/runit/runitscripts/services/mythbackend/run
new file mode 100755
index 0000000..b33e2e4
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/mythbackend/run
@@ -0,0 +1,25 @@
+#!/bin/sh
+exec 2>&1
+. /etc/profile
+. /etc/systemconfig
+export HOME=/root
+if [ ! x$SystemType = xSlave_backend ]
+then
+ sv start mysql > /dev/null 2>/dev/null
+ #run mythfilldatabase
+ /usr/MythVantage/bin/initial_db_run &
+fi
+mkfifo /tmp/mbefifo >/dev/null 2>/dev/null
+echo "Starting mythbackend"
+# if [ -f /tmp/debug ]
+# then
+# echo "using gbd/debug"
+# gdb /usr/bin/mythbackend -x $MV_ROOT/mbegdbcommands.txt
+# bash -c "osdClient.pl localhost 5000 'Restart gdb mbe :::SYS' "&
+# mv gdb.txt /data/home/mythtv/gdb.txt.mythbackend
+# chown mythtv:mythtv /data/home/mythtv/gdb.txt.mythbackend
+# sleep 10
+#
+# else
+ exec /usr/bin/mythbackend
+# fi
diff --git a/abs/core/runit/runitscripts/services/ncid/run b/abs/core/runit/runitscripts/services/ncid/run
new file mode 100755
index 0000000..8a90707
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/ncid/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+sv start ncidd
+exec /usr/bin/ncid --no-gui --all --call-prog --program /usr/bin/ncid.py 127.0.0.1 3333
+
diff --git a/abs/core/runit/runitscripts/services/ncidd/run b/abs/core/runit/runitscripts/services/ncidd/run
new file mode 100755
index 0000000..6b032db
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/ncidd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/ncidd -D 2>&1
diff --git a/abs/core/runit/runitscripts/services/netfs/finish b/abs/core/runit/runitscripts/services/netfs/finish
new file mode 100755
index 0000000..43be94c
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/netfs/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+sv down netfs
diff --git a/abs/core/runit/runitscripts/services/netfs/run b/abs/core/runit/runitscripts/services/netfs/run
new file mode 100755
index 0000000..f2c0813
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/netfs/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec 2>&1
+sv start portmap
+/etc/rc.d/netfs start
+
diff --git a/abs/core/runit/runitscripts/services/nfsd/run b/abs/core/runit/runitscripts/services/nfsd/run
new file mode 100755
index 0000000..6610fe9
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/nfsd/run
@@ -0,0 +1,22 @@
+#!/bin/bash
+exec 2>&1
+
+# Make sure the statd daemon is up
+# (the statd service must ensure portmap is running first)
+svwaitup /var/service/nfslock >/dev/null 2>/dev/null
+
+source /etc/conf.d/nfsd
+
+# Re-export all directories in /etc/exports
+/usr/sbin/exportfs -ra > /dev/null 2>/dev/null
+
+# start some nfsd threads
+/usr/sbin/rpc.nfsd -p ${NFSD_OPTS} >/dev/null 2>/dev/null
+
+# since we are running kernel 2.6 we should also
+# mount the nfsd virtual filesystem
+/bin/mount -t nfsd none /proc/fs/nfsd >/dev/null 2>/dev/null
+
+# Start the rpc.mountd daemon
+exec /usr/sbin/rpc.mountd --foreground >/dev/null 2>/dev/null
+
diff --git a/abs/core/runit/runitscripts/services/nfslock/run b/abs/core/runit/runitscripts/services/nfslock/run
new file mode 100755
index 0000000..0ec6f75
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/nfslock/run
@@ -0,0 +1,4 @@
+#!/bin/bash
+exec 2>&1
+sv start portmap >/dev/null 2>/dev/null
+/usr/sbin/rpc.statd -F >/dev/null 2>/dev/null
diff --git a/abs/core/runit/runitscripts/services/nmbd/run b/abs/core/runit/runitscripts/services/nmbd/run
new file mode 100755
index 0000000..9aa27ec
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/nmbd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec nmbd -F -S -d1 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/ntpd/run b/abs/core/runit/runitscripts/services/ntpd/run
new file mode 100755
index 0000000..97302f1
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/ntpd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+ntpdate pool.ntp.org
+exec ntpd -n -p /var/run/ntpd.pid
diff --git a/abs/core/runit/runitscripts/services/oss/finish b/abs/core/runit/runitscripts/services/oss/finish
new file mode 100755
index 0000000..f929f39
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/oss/finish
@@ -0,0 +1,4 @@
+#!/bin/sh
+exec 2>&1
+sv down oss
+
diff --git a/abs/core/runit/runitscripts/services/oss/run b/abs/core/runit/runitscripts/services/oss/run
new file mode 100755
index 0000000..687de8f
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/oss/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+rm -f /usr/lib/oss/starting
+#exec /etc/rc.d/alsa-utils start all
+exec /usr/sbin/soundon
+
diff --git a/abs/core/runit/runitscripts/services/portmap/run b/abs/core/runit/runitscripts/services/portmap/run
new file mode 100755
index 0000000..561d65b
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/portmap/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /sbin/portmap -d >/dev/null 2>/dev/null
diff --git a/abs/core/runit/runitscripts/services/smbd/run b/abs/core/runit/runitscripts/services/smbd/run
new file mode 100755
index 0000000..af77dcb
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/smbd/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec smbd -F -S -d3 2>/dev/null >/dev/null
diff --git a/abs/core/runit/runitscripts/services/sshd/run b/abs/core/runit/runitscripts/services/sshd/run
new file mode 100755
index 0000000..0dd16ef
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/sshd/run
@@ -0,0 +1,8 @@
+#!/bin/bash
+exec 2>&1
+
+[ -f /etc/ssh/ssh_host_key ] || { /usr/bin/ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_rsa_key ] || { /usr/bin/ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key >/dev/null; }
+ [ -f /etc/ssh/ssh_host_dsa_key ] || { /usr/bin/ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key >/dev/null; }
+
+exec /usr/sbin/sshd -D >/dev/null 2>/dev/null
diff --git a/abs/core/runit/runitscripts/services/syslog-ng/run b/abs/core/runit/runitscripts/services/syslog-ng/run
new file mode 100755
index 0000000..eb56ace
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/syslog-ng/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+exec 2>&1
+exec /usr/sbin/syslog-ng -F
diff --git a/abs/core/runit/runitscripts/services/tty2/run b/abs/core/runit/runitscripts/services/tty2/run
new file mode 100755
index 0000000..3782aed
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/tty2/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /sbin/agetty 38400 vc/2 linux
diff --git a/abs/core/runit/runitscripts/services/tty3/run b/abs/core/runit/runitscripts/services/tty3/run
new file mode 100755
index 0000000..ce66b0d
--- /dev/null
+++ b/abs/core/runit/runitscripts/services/tty3/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /sbin/agetty 38400 vc/3 linux
diff --git a/abs/core/scrnsaverproto/PKGBUILD b/abs/core/scrnsaverproto/PKGBUILD
new file mode 100644
index 0000000..0e1ba02
--- /dev/null
+++ b/abs/core/scrnsaverproto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 5568 2008-07-18 20:51:46Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=scrnsaverproto
+pkgver=1.1.0
+pkgrel=2
+pkgdesc="X11 Screen Saver extension wire protocol"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('5d551850e6f4acdf49a13f4eb3a5bbfa')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${pkgdir} install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/sdl/PKGBUILD b/abs/core/sdl/PKGBUILD
new file mode 100644
index 0000000..be6508a
--- /dev/null
+++ b/abs/core/sdl/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=sdl
+pkgver=1.2.13
+pkgrel=1
+pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard"
+arch=(i686 x86_64)
+license=('LGPL')
+depends=('glibc' 'libxext' 'libxrender' 'libx11')
+options=('!libtool')
+makedepends=('alsa-lib' 'esd' 'mesa')
+source=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz)
+url="http://www.libsdl.org"
+md5sums=('c6660feea2a6834de10bc71b2f8e4d88')
+
+build() {
+ cd ${startdir}/src/SDL-${pkgver}
+ ./configure --prefix=/usr --disable-nasm --enable-alsa --enable-esd --with-x
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
diff --git a/abs/core/sdparm/PKGBUILD b/abs/core/sdparm/PKGBUILD
new file mode 100644
index 0000000..d6b7155
--- /dev/null
+++ b/abs/core/sdparm/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Roman Kyrylych <Roman.Kyrylych@gmail.com>
+# Contributor: grimi@poczta.fm
+
+pkgname=sdparm
+pkgver=1.02
+pkgrel=2
+pkgdesc="An utility similar to hdparm but for SCSI devices"
+arch=('i686' 'x86_64')
+url="http://sg.torque.net/sg/sdparm.html"
+groups=('base')
+license=('BSD')
+depends=('glibc')
+source=("http://sg.torque.net/sg/p/$pkgname-$pkgver.tgz")
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -Dm644 COPYING $startdir/pkg/usr/share/licenses/sdparm/COPYING
+}
diff --git a/abs/core/sed/PKGBUILD b/abs/core/sed/PKGBUILD
new file mode 100644
index 0000000..787464b
--- /dev/null
+++ b/abs/core/sed/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=sed
+pkgver=4.1.5
+pkgrel=12
+pkgdesc="GNU stream editor"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/sed"
+license=('GPL')
+groups=('base')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/pub/gnu/sed/$pkgname-$pkgver.tar.gz)
+md5sums=('7a1cbbbb3341287308e140bd4834c3ba')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=
+ make || return 1
+ make prefix=$startdir/pkg/usr install
+ mv $startdir/pkg/usr/bin $startdir/pkg/
+}
diff --git a/abs/core/sg3_utils/PKGBUILD b/abs/core/sg3_utils/PKGBUILD
new file mode 100644
index 0000000..1da9b0e
--- /dev/null
+++ b/abs/core/sg3_utils/PKGBUILD
@@ -0,0 +1,18 @@
+pkgname=sg3_utils
+pkgver=1.27
+pkgrel=1
+pkgdesc="Generic SCSI utilities"
+arch=(i686 x86_64)
+url="http://sg.torque.net/sg/sg3_utils.html"
+license=('GPL' 'custom:BSD')
+depends=('glibc')
+options=('!libtool')
+source=(http://www.mythvantage.com/src/${pkgname}-${pkgver}.tgz)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+ install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
+}
diff --git a/abs/core/shadow/PKGBUILD b/abs/core/shadow/PKGBUILD
new file mode 100644
index 0000000..20f7e65
--- /dev/null
+++ b/abs/core/shadow/PKGBUILD
@@ -0,0 +1,88 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+
+pkgname=shadow
+pkgver=4.0.18.2
+pkgrel=11
+pkgdesc="Shadow password file utilities"
+arch=(i686 x86_64)
+url='http://pkg-shadow.alioth.debian.org/'
+license=('custom')
+groups=('base')
+backup=(etc/login.defs
+ etc/pam.d/{chage,login,passwd,shadow,useradd,usermod,userdel}
+ etc/pam.d/{chpasswd,newusers,groupadd,groupdel,groupmod}
+ etc/pam.d/{chfn,chgpasswd,groupmems,chsh}
+ etc/default/useradd)
+depends=('pam')
+source=(ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/shadow-$pkgver.tar.bz2
+ login passwd useradd login.defs adduser shadow.cron.daily
+ useradd-default.patch xstrdup.patch shadow-4.0.18.2-useradd-fix-1.patch)
+options=(!libtool)
+install='shadow.install'
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ patch -Np1 -i ../xstrdup.patch || return 1
+ patch -Np1 -i ../shadow-4.0.18.2-useradd-fix-1.patch || return 1
+ # patch etc/default/useradd for Arch defaults - Tom K
+ patch -Np1 -i ../useradd-default.patch || return 1
+
+ # supress etc/pam.d/*, we provide our own
+ sed -i '/^SUBDIRS/s/pam.d//' etc/Makefile.in
+
+ ./configure \
+ --prefix=/usr --libdir=/usr/lib \
+ --mandir=/usr/man --sysconfdir=/etc \
+ --enable-shared --with-libpam --without-selinux
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+
+ # license
+ install -v -D -m644 COPYING $startdir/pkg/usr/share/licenses/shadow/COPYING
+
+ # interactive useradd
+ install -v -D -m755 ../adduser $startdir/pkg/usr/sbin/adduser
+
+ # cron job
+ install -v -D -m744 ../shadow.cron.daily $startdir/pkg/etc/cron.daily/shadow
+
+ # login.defs
+ install -v -D -m644 ../login.defs $startdir/pkg/etc/login.defs
+
+ # PAM config
+ local file
+ for file in login passwd; do
+ install -v -D -m644 ../$file $startdir/pkg/etc/pam.d/$file
+ done
+ # we use the 'useradd' PAM file for other similar utilities
+ for file in chage chpasswd chfn chsh groupadd groupdel groupmod \
+ newusers shadow useradd usermod userdel; do
+ install -v -D -m644 ../useradd $startdir/pkg/etc/pam.d/$file
+ done
+ # add leftover pam files
+ for i in chgpasswd groupmems; do
+ install -v -D -m644 etc/pam.d/$i $startdir/pkg/etc/pam.d/$i
+ done
+
+ cd $startdir/pkg
+
+ # Remove su - using su from coreutils instead
+ rm -v bin/su
+ find usr/man -name 'su.1' -exec rm -v {} \;
+
+ # Move shared libs to /lib
+ mkdir -pv lib
+ mv -v usr/lib/libshadow.so.* lib/
+ ln -svf ../../lib/libshadow.so.0 usr/lib/libshadow.so
+}
+md5sums=('b900467e5c60c78b6d84b0353d1769d5'
+ '0aa429de6773ebcdf89db80165379cc6'
+ 'b84204ab731bd02dca49d0637d44ebec'
+ 'a31374fef2cba0ca34dfc7078e2969e4'
+ '3699bed31154051c0508a890d6d95027'
+ '6ce67e423ee19c87ae64f661310b2408'
+ '1d64b4113e1d402746d9dd65f28a2c6f'
+ '1e49ee3b5b96b47782b22237b95c4bc2'
+ '576c00b284b9c180667a56c6cd326f0c'
+ '5c0b58c8bee13a57244ec783a8194970')
diff --git a/abs/core/shadow/adduser b/abs/core/shadow/adduser
new file mode 100644
index 0000000..a5d7fd4
--- /dev/null
+++ b/abs/core/shadow/adduser
@@ -0,0 +1,399 @@
+#!/bin/bash
+#
+# Copyright 1995 Hrvoje Dogan, Croatia.
+# Copyright 2002, 2003, 2004 Stuart Winter, West Midlands, England, UK.
+# Copyright 2004 Slackware Linux, Inc., Concord, CA, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+##########################################################################
+# Program: /usr/sbin/adduser
+# Purpose: Interactive front end to /usr/sbin/useradd for Slackware Linux
+# Author : Stuart Winter <stuart@polplex.co.uk>
+# Based on the original Slackware adduser by Hrvoje Dogan
+# with modifications by Patrick Volkerding
+# Version: 1.09
+##########################################################################
+# Usage..: adduser [<new_user_name>]
+##########################################################################
+# History #
+###########
+# v1.09 - 07/06/04
+# * Added standard Slackware script licence to the head of this file.
+# v1.08 - 25/04/04
+# * Disallow user names that begin with a numeric because useradd
+# (from shadow v4.03) does not allow them. <sw>
+# v1.07 - 07/03/03
+# * When supplying a null string for the uid (meaning 'Choose next available'),
+# if there were file names in the range 'a-z' in the pwd then the
+# egrep command considered these files rather than the null string.
+# The egrep expression is now in quotes.
+# Reported & fixed by Vadim O. Ustiansky <sw>
+# v1.06 - 31/03/03
+# * Ask to chown user.group the home directory if it already exists.
+# This helps reduce later confusion when adding users whose home dir
+# already exists (mounted partition for example) and is owned
+# by a user other than the user to which the directory is being
+# assigned as home. Default is not to chown.
+# Brought to my attention by mRgOBLIN. <sw>
+# v1.05 - 04/01/03
+# * Advise & prevent users from creating logins with '.' characters
+# in the user name. <sw>
+# * Made pending account creation info look neater <sw>
+# v1.04 - 09/06/02
+# * Catered for shadow-4.0.3's 'useradd' binary that no longer
+# will let you create a user that has any uppercase chars in it
+# This was reported on the userlocal.org forums
+# by 'xcp' - thanks. <sw,pjv>
+# v1.03 - 20/05/02
+# * Support 'broken' (null lines in) /etc/passwd and
+# /etc/group files <sw>
+# * For recycling UIDs (default still 'off'), we now look in
+# /etc/login.defs for the UID_MIN value and use it
+# If not found then default to 1000 <sw>
+# v1.02 - 10/04/02
+# * Fix user-specified UID bug. <pjv>
+# v1.01 - 23/03/02
+# * Match Slackware indenting style, simplify. <pjv>
+# v1.00 - 22/03/02
+# * Created
+#######################################################################
+
+# Path to files
+pfile=/etc/passwd
+gfile=/etc/group
+sfile=/etc/shells
+
+# Paths to binaries
+useradd=/usr/sbin/useradd
+chfn=/usr/bin/chfn
+passwd=/usr/bin/passwd
+
+# Defaults
+defhome=/home
+defshell=/bin/bash
+defgroup=users
+
+# Determine what the minimum UID is (for UID recycling)
+# (we ignore it if it's not at the beginning of the line (i.e. commented out with #))
+export recycleUIDMIN="$(grep ^UID_MIN /etc/login.defs | awk '{print $2}' 2>/dev/null)"
+# If we couldn't find it, set it to the default of 1000
+if [ -z "$recycleUIDMIN" ]; then
+ export recycleUIDMIN=1000 # this is the default from Slackware's /etc/login.defs
+fi
+
+
+# This setting enables the 'recycling' of older unused UIDs.
+# When you userdel a user, it removes it from passwd and shadow but it will
+# never get used again unless you specify it expliticly -- useradd (appears to) just
+# look at the last line in passwd and increment the uid. I like the idea of
+# recycling uids but you may have very good reasons not to (old forgotten
+# confidential files still on the system could then be owned by this new user).
+# We'll set this to no because this is what the original adduser shell script
+# did and it's what users expect.
+recycleuids=no
+
+# Function to read keyboard input.
+# bash1 is broken (even ash will take read -ep!), so we work around
+# it (even though bash1 is no longer supported on Slackware).
+function get_input() {
+ local output
+ if [ "`echo $BASH_VERSION | cut -b1`" = "1" ]; then
+ echo -n "${1} " >&2 # fudge for use with bash v1
+ read output
+ else # this should work with any other /bin/sh
+ read -ep "${1} " output
+ fi
+ echo $output
+}
+
+# Function to display the account info
+function display () {
+ local goose
+ goose="$(echo $2 | cut -d ' ' -f 2-)" # lop off the prefixed argument useradd needs
+ echo -n "$1 "
+ # If it's null then display the 'other' information
+ if [ -z "$goose" -a ! -z "$3" ]; then
+ echo "$3"
+ else
+ echo "$goose"
+ fi
+}
+
+# Function to check whether groups exist in the /etc/group file
+function check_group () {
+ local got_error group
+ if [ ! -z "$@" ]; then
+ for group in $@ ; do
+ local uid_not_named="" uid_not_num=""
+ grep -v "$^" $gfile | awk -F: '{print $1}' | grep "^${group}$" >/dev/null 2>&1 || uid_not_named=yes
+ grep -v "$^" $gfile | awk -F: '{print $3}' | grep "^${group}$" >/dev/null 2>&1 || uid_not_num=yes
+ if [ ! -z "$uid_not_named" -a ! -z "$uid_not_num" ]; then
+ echo "- Group '$group' does not exist"
+ got_error=yes
+ fi
+ done
+ fi
+ # Return exit code of 1 if at least one of the groups didn't exist
+ if [ ! -z "$got_error" ]; then
+ return 1
+ fi
+}
+
+#: Read the login name for the new user :#
+#
+# Remember that most Mail Transfer Agents are case independant, so having
+# 'uSer' and 'user' may cause confusion/things to break. Because of this,
+# useradd from shadow-4.0.3 no longer accepts usernames containing uppercase,
+# and we must reject them, too.
+
+# Set the login variable to the command line param
+echo
+LOGIN="$1"
+needinput=yes
+while [ ! -z $needinput ]; do
+ if [ -z "$LOGIN" ]; then
+ while [ -z "$LOGIN" ]; do LOGIN="$(get_input "Login name for new user []:")" ; done
+ fi
+ grep "^${LOGIN}:" $pfile >/dev/null 2>&1 # ensure it's not already used
+ if [ $? -eq 0 ]; then
+ echo "- User '$LOGIN' already exists; please choose another"
+ unset LOGIN
+ elif [ ! -z "$( echo $LOGIN | grep "^[0-9]" )" ]; then
+ echo "- User names cannot begin with a number; please choose another"
+ unset LOGIN
+ elif [ ! "$LOGIN" = "`echo $LOGIN | tr A-Z a-z`" ]; then # useradd does not allow uppercase
+ echo "- User '$LOGIN' contains illegal characters (uppercase); please choose another"
+ unset LOGIN
+ elif [ ! -z "$( echo $LOGIN | grep '\.' )" ]; then
+ echo "- User '$LOGIN' contains illegal characters (period/dot); please choose another"
+ unset LOGIN
+ else
+ unset needinput
+ fi
+done
+
+# Display the user name passed from the shell if it hasn't changed
+if [ "$1" = "$LOGIN" ]; then
+ echo "Login name for new user: $LOGIN"
+fi
+
+#: Get the UID for the user & ensure it's not already in use :#
+#
+# Whilst we _can_ allow users with identical UIDs, it's not a 'good thing' because
+# when you change password for the uid, it finds the first match in /etc/passwd
+# which isn't necessarily the correct user
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ _UID="$(get_input "User ID ('UID') [ defaults to next available ]:")"
+ grep -v "^$" $pfile | awk -F: '{print $3}' | grep "^${_UID}$" >/dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "- That UID is already in use; please choose another"
+ elif [ ! -z "$(echo $_UID | egrep '[A-Za-z]')" ]; then
+ echo "- UIDs are numerics only"
+ else
+ unset needinput
+ fi
+done
+# If we were given a UID, then syntax up the variable to pass to useradd
+if [ ! -z "$_UID" ]; then
+ U_ID="-u ${_UID}"
+else
+ # Will we be recycling UIDs?
+ if [ "$recycleuids" = "yes" ]; then
+ U_ID="-u $(awk -F: '{uid[$3]=1} END { for (i=ENVIRON["recycleUIDMIN"];i in uid;i++);print i}' $pfile)"
+ fi
+fi
+
+#: Get the initial group for the user & ensure it exists :#
+#
+# We check /etc/group for both the text version and the group ID number
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ GID="$(get_input "Initial group [ ${defgroup} ]:")"
+ check_group "$GID"
+ if [ $? -gt 0 ]; then
+ echo "- Please choose another"
+ else
+ unset needinput
+ fi
+done
+# Syntax the variable ready for useradd
+if [ -z "$GID" ]; then
+ GID="-g ${defgroup}"
+else
+ GID="-g ${GID}"
+fi
+
+#: Get additional groups for the user :#
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ AGID="$(get_input "Additional groups (comma separated) []:")"
+ AGID="$(echo "$AGID" | tr -d ' ' | tr , ' ')" # fix up for parsing
+ if [ ! -z "$AGID" ]; then
+ check_group "$AGID" # check all groups at once (treated as N # of params)
+ if [ $? -gt 0 ]; then
+ echo "- Please re-enter the group(s)"
+ else
+ unset needinput # we found all groups specified
+ AGID="-G $(echo "$AGID" | tr ' ' ,)"
+ fi
+ else
+ unset needinput # we don't *have* to have additional groups
+ fi
+done
+
+#: Get the new user's home dir :#
+#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ HME="$(get_input "Home directory [ ${defhome}/${LOGIN} ]")"
+ if [ -z "$HME" ]; then
+ HME="${defhome}/${LOGIN}"
+ fi
+ # Warn the user if the home dir already exists
+ if [ -d "$HME" ]; then
+ echo "- Warning: '$HME' already exists !"
+ getyn="$(get_input " Do you wish to change the home directory path ? (Y/n) ")"
+ if [ "$(echo $getyn | grep -i "n")" ]; then
+ unset needinput
+ # You're most likely going to only do this if you have the dir *mounted* for this user's $HOME
+ getyn="$(get_input " Do you want to chown $LOGIN.$( echo $GID | awk '{print $2}') $HME ? (y/N) ")"
+ if [ "$(echo $getyn | grep -i "y")" ]; then
+ CHOWNHOMEDIR=$HME # set this to the home directory
+ fi
+ fi
+ else
+ unset needinput
+ fi
+done
+HME="-d ${HME}"
+
+#: Get the new user's shell :#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ unset got_error
+ SHL="$(get_input "Shell [ ${defshell} ]")"
+ if [ -z "$SHL" ]; then
+ SHL="${defshell}"
+ fi
+ # Warn the user if the shell doesn't exist in /etc/shells or as a file
+ if [ -z "$(grep "^${SHL}$" $sfile)" ]; then
+ echo "- Warning: ${SHL} is not in ${sfile} (potential problem using FTP)"
+ got_error=yes
+ fi
+ if [ ! -f "$SHL" ]; then
+ echo "- Warning: ${SHL} does not exist as a file"
+ got_error=yes
+ fi
+ if [ ! -z "$got_error" ]; then
+ getyn="$(get_input " Do you wish to change the shell ? (Y/n) ")"
+ if [ "$(echo $getyn | grep -i "n")" ]; then
+ unset needinput
+ fi
+ else
+ unset needinput
+ fi
+done
+SHL="-s ${SHL}"
+
+#: Get the expiry date :#
+echo
+needinput=yes
+while [ ! -z "$needinput" ]; do
+ EXP="$(get_input "Expiry date (YYYY-MM-DD) []:")"
+ if [ ! -z "$EXP" ]; then
+ # Check to see whether the expiry date is in the valid format
+ if [ -z "$(echo "$EXP" | grep "^[[:digit:]]\{4\}[-]\?[[:digit:]]\{2\}[-]\?[[:digit:]]\{2\}$")" ]; then
+ echo "- That is not a valid expiration date"
+ else
+ unset needinput
+ EXP="-e ${EXP}"
+ fi
+ else
+ unset needinput
+ fi
+done
+
+# Display the info about the new impending account
+echo
+echo "New account will be created as follows:"
+echo
+echo "---------------------------------------"
+display "Login name.......: " "$LOGIN"
+display "UID..............: " "$_UID" "[ Next available ]"
+display "Initial group....: " "$GID"
+display "Additional groups: " "$AGID" "[ None ]"
+display "Home directory...: " "$HME"
+display "Shell............: " "$SHL"
+display "Expiry date......: " "$EXP" "[ Never ]"
+echo
+
+echo "This is it... if you want to bail out, hit Control-C. Otherwise, press"
+echo "ENTER to go ahead and make the account."
+read junk
+
+echo
+echo "Creating new account..."
+echo
+echo
+
+# Add the account to the system
+CMD="$useradd "$HME" -m "$EXP" "$U_ID" "$GID" "$AGID" "$SHL" "$LOGIN""
+$CMD
+
+if [ $? -gt 0 ]; then
+ echo "- Error running useradd command -- account not created!"
+ echo "(cmd: $CMD)"
+ exit 1
+fi
+
+# chown the home dir ? We can only do this once the useradd has
+# completed otherwise the user name doesn't exist.
+if [ ! -z "${CHOWNHOMEDIR}" ]; then
+ chown "$LOGIN"."$( echo $GID | awk '{print $2}')" "${CHOWNHOMEDIR}"
+fi
+
+# Set the finger information
+$chfn "$LOGIN"
+if [ $? -gt 0 ]; then
+ echo "- Warning: an error occurred while setting finger information"
+fi
+
+# Set a password
+$passwd "$LOGIN"
+if [ $? -gt 0 ]; then
+ echo "* WARNING: An error occured while setting the password for"
+ echo " this account. Please manually investigate this *"
+ exit 1
+fi
+
+echo
+echo
+echo "Account setup complete."
+exit 0
+
diff --git a/abs/core/shadow/chage b/abs/core/shadow/chage
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core/shadow/chage
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core/shadow/chsh b/abs/core/shadow/chsh
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core/shadow/chsh
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core/shadow/login b/abs/core/shadow/login
new file mode 100644
index 0000000..5d4ceeb
--- /dev/null
+++ b/abs/core/shadow/login
@@ -0,0 +1,18 @@
+#%PAM-1.0
+auth required pam_securetty.so
+auth requisite pam_nologin.so
+auth required pam_unix.so nullok
+auth required pam_tally.so onerr=succeed file=/var/log/faillog
+# use this to lockout accounts for 10 minutes after 3 failed attempts
+#auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
+account required pam_access.so
+account required pam_time.so
+account required pam_unix.so
+#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
+#password required pam_unix.so md5 shadow use_authtok
+session required pam_unix.so
+session required pam_env.so
+session required pam_motd.so
+session required pam_limits.so
+session optional pam_mail.so dir=/var/spool/mail standard
+session optional pam_lastlog.so
diff --git a/abs/core/shadow/login.defs b/abs/core/shadow/login.defs
new file mode 100644
index 0000000..9b1fab0
--- /dev/null
+++ b/abs/core/shadow/login.defs
@@ -0,0 +1,212 @@
+#
+# /etc/login.defs - Configuration control definitions for the login package.
+#
+# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.
+# If unspecified, some arbitrary (and possibly incorrect) value will
+# be assumed. All other items are optional - if not specified then
+# the described action or option will be inhibited.
+#
+# Comment lines (lines beginning with "#") and blank lines are ignored.
+#
+# Modified for Linux. --marekm
+
+#
+# Delay in seconds before being allowed another attempt after a login failure
+#
+FAIL_DELAY 3
+
+#
+# Enable display of unknown usernames when login failures are recorded.
+#
+LOG_UNKFAIL_ENAB no
+
+#
+# Enable logging of successful logins
+#
+LOG_OK_LOGINS no
+
+#
+# Enable "syslog" logging of su activity - in addition to sulog file logging.
+# SYSLOG_SG_ENAB does the same for newgrp and sg.
+#
+SYSLOG_SU_ENAB yes
+SYSLOG_SG_ENAB yes
+
+#
+# If defined, either full pathname of a file containing device names or
+# a ":" delimited list of device names. Root logins will be allowed only
+# upon these devices.
+#
+CONSOLE /etc/securetty
+#CONSOLE console:tty01:tty02:tty03:tty04
+
+#
+# If defined, all su activity is logged to this file.
+#
+#SULOG_FILE /var/log/sulog
+
+#
+# If defined, file which maps tty line to TERM environment parameter.
+# Each line of the file is in a format something like "vt100 tty01".
+#
+#TTYTYPE_FILE /etc/ttytype
+
+#
+# If defined, the command name to display when running "su -". For
+# example, if this is defined as "su" then a "ps" will display the
+# command is "-su". If not defined, then "ps" would display the
+# name of the shell actually being run, e.g. something like "-sh".
+#
+SU_NAME su
+
+#
+# *REQUIRED*
+# Directory where mailboxes reside, _or_ name of file, relative to the
+# home directory. If you _do_ define both, MAIL_DIR takes precedence.
+# QMAIL_DIR is for Qmail
+#
+#QMAIL_DIR Maildir
+MAIL_DIR /var/spool/mail
+
+#
+# If defined, file which inhibits all the usual chatter during the login
+# sequence. If a full pathname, then hushed mode will be enabled if the
+# user's name or shell are found in the file. If not a full pathname, then
+# hushed mode will be enabled if the file exists in the user's home directory.
+#
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE /etc/hushlogins
+
+#
+# *REQUIRED* The default PATH settings, for superuser and normal users.
+#
+# (they are minimal, add the rest in the shell startup files)
+ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ENV_PATH PATH=/bin:/usr/bin
+
+#
+# Terminal permissions
+#
+# TTYGROUP Login tty will be assigned this group ownership.
+# TTYPERM Login tty will be set to this permission.
+#
+# If you have a "write" program which is "setgid" to a special group
+# which owns the terminals, define TTYGROUP to the group number and
+# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
+# TTYPERM to either 622 or 600.
+#
+TTYGROUP tty
+TTYPERM 0600
+
+#
+# Login configuration initializations:
+#
+# ERASECHAR Terminal ERASE character ('\010' = backspace).
+# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
+# UMASK Default "umask" value.
+#
+# The ERASECHAR and KILLCHAR are used only on System V machines.
+# The ULIMIT is used only if the system supports it.
+# (now it works with setrlimit too; ulimit is in 512-byte units)
+#
+# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
+#
+ERASECHAR 0177
+KILLCHAR 025
+UMASK 077
+
+#
+# Password aging controls:
+#
+# PASS_MAX_DAYS Maximum number of days a password may be used.
+# PASS_MIN_DAYS Minimum number of days allowed between password changes.
+# PASS_WARN_AGE Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_WARN_AGE 7
+
+#
+# Min/max values for automatic uid selection in useradd
+#
+UID_MIN 1000
+UID_MAX 60000
+
+#
+# Min/max values for automatic gid selection in groupadd
+#
+GID_MIN 100
+GID_MAX 60000
+
+#
+# Max number of login retries if password is bad
+#
+LOGIN_RETRIES 5
+
+#
+# Max time in seconds for login
+#
+LOGIN_TIMEOUT 60
+
+#
+# Which fields may be changed by regular users using chfn - use
+# any combination of letters "frwh" (full name, room number, work
+# phone, home phone). If not defined, no changes are allowed.
+# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
+#
+CHFN_RESTRICT rwh
+
+#
+# List of groups to add to the user's supplementary group set
+# when logging in on the console (as determined by the CONSOLE
+# setting). Default is none.
+#
+# Use with caution - it is possible for users to gain permanent
+# access to these groups, even when not logged in on the console.
+# How to do it is left as an exercise for the reader...
+#
+#CONSOLE_GROUPS floppy:audio:cdrom
+
+#
+# Should login be allowed if we can't cd to the home directory?
+# Default in no.
+#
+DEFAULT_HOME yes
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD /usr/sbin/userdel_local
+
+#
+# When prompting for password without echo, getpass() can optionally
+# display a random number (in the range 1 to GETPASS_ASTERISKS) of '*'
+# characters for each character typed. This feature is designed to
+# confuse people looking over your shoulder when you enter a password :-).
+# Also, the new getpass() accepts both Backspace (8) and Delete (127)
+# keys to delete previous character (to cope with different terminal
+# types), Control-U to delete all characters, and beeps when there are
+# no more characters to delete, or too many characters entered.
+#
+# Setting GETPASS_ASTERISKS to 1 results in more traditional behaviour -
+# exactly one '*' displayed for each character typed.
+#
+# Setting GETPASS_ASTERISKS to 0 disables the '*' characters (Backspace,
+# Delete, Control-U and beep continue to work as described above).
+#
+# Setting GETPASS_ASTERISKS to -1 reverts to the traditional getpass()
+# without any new features. This is the default.
+#
+#GETPASS_ASTERISKS 1
+
+#
+# Enable setting of the umask group bits to be the same as owner bits
+# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+# the same as gid, and username is the same as the primary group name.
+#
+# This also enables userdel to remove user groups if no members exist.
+#
+USERGROUPS_ENAB yes
+
diff --git a/abs/core/shadow/passwd b/abs/core/shadow/passwd
new file mode 100644
index 0000000..1ffd1bd
--- /dev/null
+++ b/abs/core/shadow/passwd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
+#password required pam_unix.so md5 shadow use_authtok
+password required pam_unix.so md5 shadow nullok
diff --git a/abs/core/shadow/shadow b/abs/core/shadow/shadow
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core/shadow/shadow
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core/shadow/shadow-4.0.18.2-useradd-fix-1.patch b/abs/core/shadow/shadow-4.0.18.2-useradd-fix-1.patch
new file mode 100644
index 0000000..d35580d
--- /dev/null
+++ b/abs/core/shadow/shadow-4.0.18.2-useradd-fix-1.patch
@@ -0,0 +1,26 @@
+# DIY Linux Patch
+Date: 2007-11-08
+Author: Greg Schafer <gschafer@zip.com.au>
+Origin: Modelled on the same upstream fix for usermod.
+Maker: Greg Schafer <gschafer@zip.com.au>
+Upstream Status: Submitted, applied.
+Description: Fix -g problems in useradd.
+
+diff -Naur shadow-4.0.18.2.orig/src/useradd.c shadow-4.0.18.2/src/useradd.c
+--- shadow-4.0.18.2.orig/src/useradd.c 2007-10-07 14:36:51.000000000 +0000
++++ shadow-4.0.18.2/src/useradd.c 2007-11-08 06:33:32.433004367 +0000
+@@ -204,12 +204,8 @@
+ char *errptr;
+
+ gid = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || gid < 0) {
+- fprintf (stderr,
+- _("%s: invalid numeric argument '%s'\n"), Prog,
+- grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && gid >= 0)
++ return getgrgid (gid);
+ return getgrnam (grname);
+ }
+
diff --git a/abs/core/shadow/shadow-UID_GID.patch b/abs/core/shadow/shadow-UID_GID.patch
new file mode 100644
index 0000000..759b73e
--- /dev/null
+++ b/abs/core/shadow/shadow-UID_GID.patch
@@ -0,0 +1,34 @@
+--- shadow-4.0.18.1.orig/src/useradd.c 2006-08-25 11:57:00.202525241 +0200
++++ shadow-4.0.18.1/src/useradd.c 2006-08-25 11:57:26.106735752 +0200
+@@ -206,11 +206,8 @@
+ char *errptr;
+
+ gid = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || gid < 0) {
+- fprintf (stderr,
+- _("%s: invalid numeric argument '%s'\n"), Prog, grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && gid >= 0)
++ return getgrgid (gid);
+ return getgrnam (grname);
+ }
+
+Index: shadow-4.0.18.1/src/usermod.c
+===================================================================
+--- shadow-4.0.18.1.orig/src/usermod.c 2006-08-25 11:57:18.938677504 +0200
++++ shadow-4.0.18.1/src/usermod.c 2006-08-25 11:57:26.114735817 +0200
+@@ -167,11 +167,8 @@
+ char *errptr;
+
+ val = strtol (grname, &errptr, 10);
+- if (*errptr || errno == ERANGE || val < 0) {
+- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+- grname);
+- exit (E_BAD_ARG);
+- }
++ if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && val >= 0)
++ return getgrgid (val);
+ return getgrnam (grname);
+ }
+ \ No newline at end of file
diff --git a/abs/core/shadow/shadow.cron.daily b/abs/core/shadow/shadow.cron.daily
new file mode 100755
index 0000000..1931a79
--- /dev/null
+++ b/abs/core/shadow/shadow.cron.daily
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Verify integrity of password and group files
+/usr/sbin/pwck -r
+/usr/sbin/grpck -r
+
diff --git a/abs/core/shadow/shadow.install b/abs/core/shadow/shadow.install
new file mode 100644
index 0000000..881a67b
--- /dev/null
+++ b/abs/core/shadow/shadow.install
@@ -0,0 +1,11 @@
+post_upgrade() {
+ # fix gshadow
+ if [ "$(grpck -r)" ]; then
+ echo "Fixing gshadow file ..."
+ while :; do echo "y"; done | grpck
+ fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/shadow/useradd b/abs/core/shadow/useradd
new file mode 100644
index 0000000..a7bf8a4
--- /dev/null
+++ b/abs/core/shadow/useradd
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
+password required pam_permit.so
diff --git a/abs/core/shadow/useradd-default.patch b/abs/core/shadow/useradd-default.patch
new file mode 100644
index 0000000..9b5a08e
--- /dev/null
+++ b/abs/core/shadow/useradd-default.patch
@@ -0,0 +1,14 @@
+--- shadow-4.0.18.1/etc/useradd 2003-05-07 15:04:53.000000000 +0100
++++ shadow-4.0.18.1/etc/useradd.default 2007-11-27 22:06:56.000000000 +0000
+@@ -1,8 +1,8 @@
+ # useradd defaults file
+-GROUP=1000
+-HOME=/home/users
++# Modified for Arch Linux
++GROUP=100
++HOME=/home
+ INACTIVE=-1
+ EXPIRE=
+ SHELL=/bin/bash
+ SKEL=/etc/skel
+-CREATE_MAIL_SPOOL=yes
diff --git a/abs/core/shadow/xstrdup.patch b/abs/core/shadow/xstrdup.patch
new file mode 100644
index 0000000..90d0dd1
--- /dev/null
+++ b/abs/core/shadow/xstrdup.patch
@@ -0,0 +1,9 @@
+--- shadow-4.0.18.2/libmisc/xmalloc.c 2007-10-07 12:47:22.000000000 +0100
++++ shadow-4.0.18.2/libmisc/xmalloc.c.new 2007-11-27 22:43:05.000000000 +0000
+@@ -27,5 +27,6 @@
+
+ char *xstrdup (const char *str)
+ {
++ if(str == NULL) return NULL;
+ return strcpy (xmalloc (strlen (str) + 1), str);
+ }
diff --git a/abs/core/smbclient/PKGBUILD b/abs/core/smbclient/PKGBUILD
new file mode 100644
index 0000000..b7eb349
--- /dev/null
+++ b/abs/core/smbclient/PKGBUILD
@@ -0,0 +1,58 @@
+# $Id: PKGBUILD 3859 2008-07-01 17:10:34Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=smbclient
+pkgver=3.0.31
+# 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.0.31
+pkgrel=2
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+arch=(i686 x86_64)
+url="http://www.samba.org"
+license=('GPL')
+options=(!makeflags)
+depends=('popt' 'libldap' 'libcap' 'heimdal>=1.2-1' 'db>=4.7')
+source=(http://us1.samba.org/samba/ftp/samba-${_realver}.tar.gz)
+md5sums=('165abaf4522c70031d9a76fbb638ca06')
+
+build() {
+ cd ${startdir}/src/samba-${_realver}/source
+
+ ./configure --prefix=/usr --with-smbmount --with-fhs --with-pam \
+ --with-datadir=/usr/share --with-configdir=/etc/samba \
+ --with-lockdir=/var/run/samba --with-ads --with-acl-support \
+ --localstatedir=/var
+ make proto bin/smbclient libsmbclient \
+ bin/rpcclient bin/smbspool bin/smbtree \
+ bin/smbcacls bin/smbcquotas bin/smbmount bin/smbmnt bin/smbget \
+ bin/smbumount bin/net bin/nmblookup || return 1
+ mkdir -p ${startdir}/pkg/usr/bin ${startdir}/pkg/sbin
+ install -m755 bin/* ${startdir}/pkg/usr/bin/
+ install -m755 script/smbtar ${startdir}/pkg/usr/bin/
+ ln -sf /usr/bin/smbmount ${startdir}/pkg/sbin/mount.smbfs
+ ln -sf /usr/bin/smbumount ${startdir}/pkg/sbin/umount.smbfs
+ mkdir -p ${startdir}/pkg/usr/lib/cups/backend
+ ln -sf /usr/bin/smbspool ${startdir}/pkg/usr/lib/cups/backend/smb
+
+ mkdir -p ${startdir}/pkg/usr/lib/samba
+ mv ${startdir}/pkg/usr/bin/libsmbclient.* ${startdir}/pkg/usr/lib/samba/
+ ln -sf samba/libsmbclient.so ${startdir}/pkg/usr/lib/libsmbclient.so
+ ln -sf samba/libsmbclient.so ${startdir}/pkg/usr/lib/libsmbclient.so.0
+ mkdir -p ${startdir}/pkg/usr/include
+ install -m644 include/libsmbclient.h ${startdir}/pkg/usr/include/
+
+ gcc -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -o ${startdir}/pkg/sbin/mount.cifs client/mount.cifs.c
+ gcc -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -o ${startdir}/pkg/sbin/umount.cifs client/umount.cifs.c
+
+ mkdir -p ${startdir}/pkg/usr/share/man/man{1,7,8}
+ for man in smbmnt smbmount smbspool \
+ smbumount umount.cifs mount.cifs net; do
+ install -m644 ../docs/manpages/${man}.8 ${startdir}/pkg/usr/share/man/man8/
+ done
+ for man in rpcclient smbcacls smbclient smbcquotas smbget \
+ smbtree smbtar nmblookup; do
+ install -m644 ../docs/manpages/${man}.1 ${startdir}/pkg/usr/share/man/man1/
+ done
+ install -m644 ../docs/manpages/libsmbclient.7 ${startdir}/pkg/usr/share/man/man7/
+}
diff --git a/abs/core/smbclient/heimdal.patch b/abs/core/smbclient/heimdal.patch
new file mode 100644
index 0000000..d116d3e
--- /dev/null
+++ b/abs/core/smbclient/heimdal.patch
@@ -0,0 +1,33 @@
+Submitted By: Randy McMurchy <randy_at_linuxfromscratch_dot_org>
+Date: 2005-09-21
+Initial Package Version: 3.0.20
+Upstream Status: Not submitted (it is not an upstream Samba issue)
+Origin: Randy McMurchy
+Description: Fixes an issue if you have Heimdal installed as
+ Heimdal uses reserved C++ words and the Samba headers
+ now look for these conflicts. This patch comments out
+ the check for C++ reserved words. Heimdal is aware of
+ the issue
+
+$LastChangedBy: randy $
+$Date: 2005/11/17 12:32:28 $
+
+
+--- samba-3.0.20-orig/source/include/includes.h 2005-07-28 13:19:49.000000000 +0000
++++ samba-3.0.20/source/include/includes.h 2005-09-04 13:45:01.000000000 +0000
+@@ -25,6 +25,7 @@
+ #include "config.h"
+ #endif
+
++/*
+ #ifndef __cplusplus
+ #define class #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #define private #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+@@ -36,6 +37,7 @@
+ #define delete #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #define friend #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
+ #endif
++*/
+
+ #include "local.h"
+
diff --git a/abs/core/squashfs-tools/PKGBUILD b/abs/core/squashfs-tools/PKGBUILD
new file mode 100644
index 0000000..dd17001
--- /dev/null
+++ b/abs/core/squashfs-tools/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 3162 2008-06-20 23:18:11Z simo $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Original TU: Jeff Mickey <j@codemac.net>
+# Contributor: ciccio.a
+
+pkgname=squashfs-tools
+pkgver=3.3
+_realver=3.3
+pkgrel=1
+pkgdesc="Tools for squashfs, a highly compressed read-only filesystem for Linux."
+url="http://squashfs.sourceforge.net"
+license="GPL"
+arch=('i686' 'x86_64')
+depends=('zlib' 'glibc')
+source=(http://easynews.dl.sourceforge.net/sourceforge/squashfs/squashfs$_realver.tar.gz)
+md5sums=('62d3ff7c067a5aa82f57711b3a4ab86a')
+
+build()
+{
+ cd $startdir/src/squashfs$_realver/$pkgname
+ make || return 1
+ mkdir -p $startdir/pkg/sbin
+ cp -a mksquashfs unsquashfs $startdir/pkg/sbin
+}
diff --git a/abs/core/sudo/PKGBUILD b/abs/core/sudo/PKGBUILD
new file mode 100644
index 0000000..9c1f93d
--- /dev/null
+++ b/abs/core/sudo/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 4889 2008-07-13 03:16:13Z eric $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=sudo
+pkgver=1.6.9p17
+pkgrel=1
+pkgdesc="Give certain users the ability to run some commands as root"
+arch=(i686 x86_64)
+url="http://www.sudo.ws/sudo/"
+# 2 separate licenses apply, custom and ISC, each covering part of the software
+license=('custom' 'ISC')
+depends=('glibc' 'pam')
+backup=('etc/sudoers' 'etc/pam.d/sudo')
+source=(ftp://ftp.sudo.ws/pub/sudo/$pkgname-$pkgver.tar.gz sudo.pam)
+md5sums=('b0d01b0c3d55076a47f06f70811be083' '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
+options=('!libtool' '!makeflags')
+md5sums=('60daf18f28e2c1eb7641c4408e244110'
+ '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver || return 1
+
+ ./configure --prefix=/usr --with-pam --libexecdir=/usr/lib \
+ --with-env-editor --with-all-insults --with-logfac=auth || return 1
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 $startdir/src/sudo.pam $startdir/pkg/etc/pam.d/sudo \
+ || return 1
+
+ #install the license
+ install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/sudo/LICENSE \
+ || return 1
+}
diff --git a/abs/core/sudo/sudo.pam b/abs/core/sudo/sudo.pam
new file mode 100644
index 0000000..4e586cd
--- /dev/null
+++ b/abs/core/sudo/sudo.pam
@@ -0,0 +1,3 @@
+#%PAM-1.0
+auth required pam_unix.so
+auth required pam_nologin.so
diff --git a/abs/core/sysfsutils/PKGBUILD b/abs/core/sysfsutils/PKGBUILD
new file mode 100644
index 0000000..7d4861d
--- /dev/null
+++ b/abs/core/sysfsutils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=sysfsutils
+pkgver=2.1.0
+pkgrel=13
+pkgdesc="System Utilities Based on Sysfs"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://linux-diag.sourceforge.net/Sysfsutils.html"
+groups=('base')
+depends=('glibc')
+source=(http://downloads.sourceforge.net/sourceforge/linux-diag/$pkgname-$pkgver.tar.gz)
+md5sums=('14e7dcd0436d2f49aa403f67e1ef7ddc')
+
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg/ install
+
+ cd "$startdir"/pkg
+ mkdir -v lib
+ mv -v usr/lib/libsysfs.so.2* lib/
+ ln -svf ../../lib/libsysfs.so.2 usr/lib/libsysfs.so
+
+ #libtoolslay
+ find $startdir/pkg -name '*.la' -exec rm {} \;
+}
+
diff --git a/abs/core/syslinux/PKGBUILD b/abs/core/syslinux/PKGBUILD
new file mode 100644
index 0000000..406f72d
--- /dev/null
+++ b/abs/core/syslinux/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Contributor: lowercase
+# Maintainer: Dale Blount <dale@archlinux.org>
+pkgname=syslinux
+pkgver=3.60
+pkgrel=1
+arch=('i686' 'x86_64')
+pkgdesc="a boot loader for the Linux operating system which operates off an MS-DOS/Windows FAT filesystem."
+url="http://syslinux.org"
+license=(GPL)
+depends=('mtools' 'glibc')
+makedepends=(nasm perl)
+conflicts=()
+replaces=()
+backup=()
+install=
+source=(http://www.kernel.org/pub/linux/utils/boot/syslinux/$pkgname-$pkgver.tar.bz2)
+md5sums=('96e11c6baa87a937b0726b07d687cb7b')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ make SBINDIR=$startdir/pkg/usr/sbin BINDIR=$startdir/pkg/usr/bin LIBDIR=$startdir/pkg/usr/lib INCDIR=$startdir/pkg/usr/include MANDIR=$startdir/pkg/usr/share/man install
+ install -m755 mkdiskimage $startdir/pkg/usr/bin || return 1
+}
diff --git a/abs/core/syslog-ng/PKGBUILD b/abs/core/syslog-ng/PKGBUILD
new file mode 100644
index 0000000..3e5b473
--- /dev/null
+++ b/abs/core/syslog-ng/PKGBUILD
@@ -0,0 +1,31 @@
+# $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
+pkgdesc="Next-generation syslogd with advanced networking and filtering capabilities"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+url="http://www.balabit.com/network-security/syslog-ng/"
+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 \
+ syslog-ng.conf syslog-ng.logrotate syslog-ng)
+md5sums=('2d4232f7167c2b4f48794e4f8f80e863' 'ee95af3a4f969f3759e477289305c8c6'\
+ '9714c7479119922b55a7992677ebecb5' '9bd98250cfa49e13fa3fa731b6040549')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var/lib/syslog-ng --enable-tcp-wrapper \
+ --disable-spoof-source
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ install -d $startdir/pkg/var/lib/syslog-ng
+ install -D -m644 ../syslog-ng.conf $startdir/pkg/etc/syslog-ng.conf
+ install -D -m644 ../syslog-ng.logrotate $startdir/pkg/etc/logrotate.d/syslog-ng
+ install -D -m755 ../syslog-ng $startdir/pkg/etc/rc.d/syslog-ng
+}
diff --git a/abs/core/syslog-ng/syslog-ng b/abs/core/syslog-ng/syslog-ng
new file mode 100755
index 0000000..f9d14c7
--- /dev/null
+++ b/abs/core/syslog-ng/syslog-ng
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/syslog-ng`
+case "$1" in
+ start)
+ stat_busy "Starting Syslog-NG"
+ [ -z "$PID" ] && /usr/sbin/syslog-ng
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon syslog-ng
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Syslog-NG"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /var/run/syslog-ng.pid
+# Removing stale syslog-ng.persist file. It's new location, as of 2.0.6-1, is /var/lib/syslog-ng/
+ rm -f /var/syslog-ng.persist
+ rm_daemon syslog-ng
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/syslog-ng/syslog-ng.conf b/abs/core/syslog-ng/syslog-ng.conf
new file mode 100644
index 0000000..d941b6a
--- /dev/null
+++ b/abs/core/syslog-ng/syslog-ng.conf
@@ -0,0 +1,91 @@
+#
+# /etc/syslog-ng.conf
+#
+
+options {
+ sync (0);
+ time_reopen (10);
+ log_fifo_size (1000);
+ long_hostnames(off);
+ use_dns (no);
+ use_fqdn (no);
+ create_dirs (no);
+ keep_hostname (yes);
+ perm(0640);
+ group("log");
+};
+
+source src {
+ unix-stream("/dev/log");
+ internal();
+ file("/proc/kmsg");
+};
+
+destination authlog { file("/var/log/auth.log"); };
+destination syslog { file("/var/log/syslog.log"); };
+destination cron { file("/var/log/crond.log"); };
+destination daemon { file("/var/log/daemon.log"); };
+destination kernel { file("/var/log/kernel.log"); };
+destination lpr { file("/var/log/lpr.log"); };
+destination user { file("/var/log/user.log"); };
+destination uucp { file("/var/log/uucp.log"); };
+destination mail { file("/var/log/mail.log"); };
+destination news { file("/var/log/news.log"); };
+destination ppp { file("/var/log/ppp.log"); };
+destination debug { file("/var/log/debug.log"); };
+destination messages { file("/var/log/messages.log"); };
+destination errors { file("/var/log/errors.log"); };
+destination everything { file("/var/log/everything.log"); };
+destination iptables { file("/var/log/iptables.log"); };
+destination acpid { file("/var/log/acpid.log"); };
+destination console { usertty("root"); };
+
+# Log everything to vc12
+destination console_all { file("/dev/vc/12"); };
+
+filter f_auth { facility(auth); };
+filter f_authpriv { facility(auth, authpriv); };
+filter f_syslog { program(syslog-ng); };
+filter f_cron { facility(cron); };
+filter f_daemon { facility(daemon); };
+filter f_kernel { facility(kern) and not filter(f_iptables); };
+filter f_lpr { facility(lpr); };
+filter f_mail { facility(mail); };
+filter f_news { facility(news); };
+filter f_user { facility(user); };
+filter f_uucp { facility(cron); };
+filter f_news { facility(news); };
+filter f_ppp { facility(local2); };
+filter f_debug { not facility(auth, authpriv, news, mail); };
+filter f_messages { level(info..warn) and not facility(auth, authpriv, mail, news, cron) and not program(syslog-ng) and not filter(f_iptables); };
+filter f_everything { level(debug..emerg) and not facility(auth, authpriv); };
+filter f_emergency { level(emerg); };
+filter f_info { level(info); };
+filter f_notice { level(notice); };
+filter f_warn { level(warn); };
+filter f_crit { level(crit); };
+filter f_err { level(err); };
+filter f_iptables { match("IN=.*OUT="); };
+filter f_acpid { match("acpid"); };
+
+log { source(src); filter(f_acpid); destination(acpid); flags(final); };
+log { source(src); filter(f_authpriv); destination(authlog); };
+log { source(src); filter(f_syslog); destination(syslog); };
+log { source(src); filter(f_cron); destination(cron); };
+log { source(src); filter(f_daemon); destination(daemon); };
+log { source(src); filter(f_kernel); destination(kernel); };
+log { source(src); filter(f_lpr); destination(lpr); };
+log { source(src); filter(f_mail); destination(mail); };
+log { source(src); filter(f_news); destination(news); };
+log { source(src); filter(f_ppp); destination(ppp); };
+log { source(src); filter(f_user); destination(user); };
+log { source(src); filter(f_uucp); destination(uucp); };
+#log { source(src); filter(f_debug); destination(debug); };
+log { source(src); filter(f_messages); destination(messages); };
+log { source(src); filter(f_err); destination(errors); };
+log { source(src); filter(f_emergency); destination(console); };
+log { source(src); filter(f_everything); destination(everything); };
+log { source(src); filter(f_iptables); destination(iptables); };
+
+# Log everything to vc12
+#log { source(src); destination(console_all); };
diff --git a/abs/core/syslog-ng/syslog-ng.logrotate b/abs/core/syslog-ng/syslog-ng.logrotate
new file mode 100644
index 0000000..75da1b0
--- /dev/null
+++ b/abs/core/syslog-ng/syslog-ng.logrotate
@@ -0,0 +1,7 @@
+/var/log/messages.log /var/log/auth.log /var/log/mail.log /var/log/kernel.log /var/log/errors.log /var/log/daemon.log /var/log/user.log /var/log/iptables.log /var/log/everything.log /var/log/syslog.log /var/log/acpid.log {
+ missingok
+ sharedscripts
+ postrotate
+ /bin/kill -HUP `cat /var/run/syslog-ng.pid 2>/dev/null` 2> /dev/null || true
+ endscript
+}
diff --git a/abs/core/sysvinit/PKGBUILD b/abs/core/sysvinit/PKGBUILD
new file mode 100644
index 0000000..2a32da9
--- /dev/null
+++ b/abs/core/sysvinit/PKGBUILD
@@ -0,0 +1,26 @@
+pkgname=sysvinit
+pkgver=2.86
+pkgrel=11
+pkgdesc="Linux System V Init"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+depends=('shadow' 'util-linux' 'coreutils' 'glibc' 'awk')
+source=(ftp://ftp.cistron.nl/pub/people/miquels/$pkgname/$pkgname-$pkgver.tar.gz halt-init.patch)
+md5sums=('7d5d61c026122ab791ac04c8a84db967')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ cp src/init.c src/init.c.backup
+ cp $startdir/src/halt-init.patch src/
+ patch -p0 < src/halt-init.patch
+ sed 's/\(.*\)\(Sending processes\)\(.*\)/\1\2 started by init\3/' \
+ src/init.c > tmp~
+ mv tmp~ src/init.c
+ mkdir -p $startdir/pkg/bin $startdir/pkg/sbin
+ mkdir -p $startdir/pkg/usr/bin
+ mkdir -p $startdir/pkg/usr/man/man5 $startdir/pkg/usr/man/man8
+ mkdir -p $startdir/pkg/usr/man/man1 $startdir/pkg/usr/include
+ make -C src || return 1
+ make -C src MANDIR=/usr/man ROOT=$startdir/pkg install
+}
diff --git a/abs/core/sysvinit/halt-init.patch b/abs/core/sysvinit/halt-init.patch
new file mode 100644
index 0000000..3c61e0f
--- /dev/null
+++ b/abs/core/sysvinit/halt-init.patch
@@ -0,0 +1,17 @@
+--- src/halt.c.orig 2008-08-30 17:25:02.000000000 +0000
++++ src/halt.c 2008-08-30 18:10:29.000000000 +0000
+@@ -186,6 +186,14 @@
+ if (!strcmp(progname, "reboot")) do_reboot = 1;
+ if (!strcmp(progname, "poweroff")) do_poweroff = 1;
+
++ if (!strcmp(progname, "reboot.init")) do_reboot = 1;
++ if (!strcmp(progname, "poweroff.init")) do_poweroff = 1;
++
++ fprintf(stderr, "%d: do_reboot \n ", do_reboot);
++ fprintf(stderr, "%d: do_poweroff \n ", do_poweroff);
++ //fprintf(stderr, "%s: \n", progname);
++ //do_nothing = 1;
++
+ /*
+ * Get flags
+ */
diff --git a/abs/core/taglib/PKGBUILD b/abs/core/taglib/PKGBUILD
new file mode 100644
index 0000000..4b38645
--- /dev/null
+++ b/abs/core/taglib/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=taglib
+pkgver=1.5
+pkgrel=1
+pkgdesc="library for reading and editing the meta-data of several popular audio formats."
+arch=('i686' 'x86_64')
+url="http://ktown.kde.org/~wheeler/taglib.html"
+license=('GPL2')
+depends=('zlib' 'gcc-libs')
+makedepends=('cmake' 'pkgconfig')
+# svn snapshot: svn co svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib
+source=(http://ktown.kde.org/~wheeler/files/src/taglib-$pkgver.tar.gz
+ #ftp://ftp.archlinux.org/other/kde/$pkgname-$pkgver.tar.bz2
+ #http://belnet.dl.sourceforge.net/sourceforge/soprano/soprano-1.97.1-beta4.tar.bz2
+ )
+options=(!libtool)
+
+build() {
+ # start building
+ cd $startdir/src/$pkgname-$pkgver
+
+ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
+ make VERBOSE=1 || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+}
+
+md5sums=('7b557dde7425c6deb7bbedd65b4f2717')
diff --git a/abs/core/tar/PKGBUILD b/abs/core/tar/PKGBUILD
new file mode 100644
index 0000000..a22d455
--- /dev/null
+++ b/abs/core/tar/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 1082 2008-04-29 16:11:13Z andyrtr $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=tar
+pkgver=1.20
+pkgrel=11
+pkgdesc="Utility used to store, backup, and transport files"
+arch=('i686' 'x86_64')
+license=('GPL3')
+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
+ ./configure --prefix=/usr --libexecdir=/usr/lib/tar --bindir=/bin
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../tar.1 $startdir/pkg/usr/share/man/man1/tar.1
+}
diff --git a/abs/core/tar/tar.1 b/abs/core/tar/tar.1
new file mode 100644
index 0000000..f7de1ec
--- /dev/null
+++ b/abs/core/tar/tar.1
@@ -0,0 +1,376 @@
+.\" @(#)tar.1 1.11.1 93/19/22 PJV;
+.TH TAR 1 "22 September 1993"
+.SH NAME
+tar \- The GNU version of the tar archiving utility
+.SH SYNOPSIS
+.B tar
+[
+.B \-
+]
+.B A --catenate --concatenate \||\| c --create \||\| d --diff --compare \||\| r --append \||\| t --list \||\| u --update \||\| x -extract --get
+[
+.B --atime-preserve
+]
+[
+.B -b, --block-size N
+]
+[
+.B -B, --read-full-blocks
+]
+[
+.B -C, --directory DIR
+]
+[
+.B --checkpoint
+]
+[
+.B -f, --file [HOSTNAME:]F
+]
+[
+.B --force-local
+]
+[
+.B -F, --info-script F --new-volume-script F
+]
+[
+.B -G, --incremental
+]
+[
+.B -g, --listed-incremental F
+]
+[
+.B -h, --dereference
+]
+[
+.B -i, --ignore-zeros
+]
+[
+.B -j, --bzip2
+]
+[
+.B --ignore-failed-read
+]
+[
+.B -k, --keep-old-files
+]
+[
+.B -K, --starting-file F
+]
+[
+.B -l, --one-file-system
+]
+[
+.B -L, --tape-length N
+]
+[
+.B -m, --modification-time
+]
+[
+.B -M, --multi-volume
+]
+[
+.B -N, --after-date DATE, --newer DATE
+]
+[
+.B -o, --old-archive, --portability
+]
+[
+.B -O, --to-stdout
+]
+[
+.B -p, --same-permissions, --preserve-permissions
+]
+[
+.B -P, --absolute-names
+]
+[
+.B --preserve
+]
+[
+.B -R, --record-number
+]
+[
+.B --remove-files
+]
+[
+.B -s, --same-order, --preserve-order
+]
+[
+.B --same-owner
+]
+[
+.B --numeric-owner
+]
+[
+.B -S, --sparse
+]
+[
+.B -T, --files-from F
+]
+[
+.B --null
+]
+[
+.B --totals
+]
+[
+.B -v, --verbose
+]
+[
+.B -V, --label NAME
+]
+[
+.B --version
+]
+[
+.B -w, --interactive, --confirmation
+]
+[
+.B -W, --verify
+]
+[
+.B --exclude=FILE
+]
+[
+.B -X, --exclude-from FILE
+]
+[
+.B -Z, --compress, --uncompress
+]
+[
+.B -z, --gzip, --ungzip
+]
+[
+.B --use-compress-program PROG
+]
+[
+.B --block-compress
+]
+[
+.B --rsh-command=CMD
+]
+[
+.B -[0-7][lmh]
+]
+.TP
+.I filename1 [ filename2, ... filenameN ]
+.TP
+.I directory1 [ directory2, ...directoryN ]
+.SH DESCRIPTION
+.LP
+This manual page documents the GNU version of
+.B tar
+, an archiving program designed to store and extract files from
+an archive file known as a
+.IR tarfile.
+A
+.IR tarfile
+may be made on a tape drive, however, it is also common
+to write a
+.IR tarfile
+to a normal file.
+The first argument to
+.B tar
+must be one of the options:
+.BR Acdrtux ,
+followed by any optional functions.
+The final arguments to
+.B tar
+are the names of the files or directories which should be archived. The use
+of a directory name always implies that the subdirectories below should be
+included in the archive.
+.SH EXAMPLES
+.TP
+.B tar -xvvf foo.tar
+extract foo.tar
+.TP
+.B tar -xvvzf foo.tar.gz
+extract gzipped foo.tar.gz
+.TP
+.B tar -cvvf foo.tar foo/
+tar contents of folder foo in foo.tar
+.SH "FUNCTION LETTERS"
+.TP
+.B One of the following options must be used:
+.TP
+.B -A, --catenate, --concatenate
+append tar files to an archive
+.TP
+.B -c, --create
+create a new archive
+.TP
+.B -d, --diff, --compare
+find differences between archive and file system
+.TP
+.B --delete
+delete from the archive (not for use on mag tapes!)
+.TP
+.B -r, --append
+append files to the end of an archive
+.TP
+.B -t, --list
+list the contents of an archive
+.TP
+.B -u, --update
+only append files that are newer than copy in archive
+.TP
+.B -x, --extract, --get
+extract files from an archive
+.SH "OTHER OPTIONS"
+.TP
+.B --atime-preserve
+don't change access times on dumped files
+.TP
+.B -b, --block-size N
+block size of Nx512 bytes (default N=20)
+.TP
+.B -B, --read-full-blocks
+reblock as we read (for reading 4.2BSD pipes)
+.TP
+.B -C, --directory DIR
+change to directory DIR
+.TP
+.B --checkpoint
+print directory names while reading the archive
+.TP
+.B -f, --file [HOSTNAME:]F
+use archive file or device F (default "-", meaning stdin/stdout)
+.TP
+.B --force-local
+archive file is local even if has a colon
+.TP
+.B -F, --info-script F --new-volume-script F
+run script at end of each tape (implies -M)
+.TP
+.B -G, --incremental
+create/list/extract old GNU-format incremental backup
+.TP
+.B -g, --listed-incremental F
+create/list/extract new GNU-format incremental backup
+.TP
+.B -h, --dereference
+don't dump symlinks; dump the files they point to
+.TP
+.B -i, --ignore-zeros
+ignore blocks of zeros in archive (normally mean EOF)
+.TP
+.B -j, --bzip2
+filter archive through bzip2, use to decompress .bz2 files
+.TP
+.B --ignore-failed-read
+don't exit with non-zero status on unreadable files
+.TP
+.B -k, --keep-old-files
+keep existing files; don't overwrite them from archive
+.TP
+.B -K, --starting-file F
+begin at file F in the archive
+.TP
+.B -l, --one-file-system
+stay in local file system when creating an archive
+.TP
+.B -L, --tape-length N
+change tapes after writing N*1024 bytes
+.TP
+.B -m, --modification-time
+don't extract file modified time
+.TP
+.B -M, --multi-volume
+create/list/extract multi-volume archive
+.TP
+.B -N, --after-date DATE, --newer DATE
+only store files newer than DATE
+.TP
+.B -o, --old-archive, --portability
+write a V7 format archive, rather than ANSI format
+.TP
+.B -O, --to-stdout
+extract files to standard output
+.TP
+.B -p, --same-permissions, --preserve-permissions
+extract all protection information
+.TP
+.B -P, --absolute-paths
+don't strip leading `/'s from file names
+.TP
+.B --preserve
+like -p -s
+.TP
+.B -R, --record-number
+show record number within archive with each message
+.TP
+.B --remove-files
+remove files after adding them to the archive
+.TP
+.B -s, --same-order, --preserve-order
+list of names to extract is sorted to match archive
+.TP
+.B --same-owner
+create extracted files with the same ownership
+.TP
+.B --numeric-owner
+always use numbers for user/group names
+.TP
+.B -S, --sparse
+handle sparse files efficiently
+.TP
+.B -T, --files-from F
+get names to extract or create from file F
+.TP
+.B --null
+-T reads null-terminated names, disable -C
+.TP
+.B --totals
+print total bytes written with --create
+.TP
+.B -v, --verbose
+verbosely list files processed
+.TP
+.B -V, --label NAME
+create archive with volume name NAME
+.TP
+.B --version
+print tar program version number
+.TP
+.B -w, --interactive, --confirmation
+ask for confirmation for every action
+.TP
+.B -W, --verify
+attempt to verify the archive after writing it
+.TP
+.B --exclude=FILE
+exclude file FILE
+.TP
+.B -X, --exclude-from FILE
+exclude files listed in FILE
+.TP
+.B -Z, --compress, --uncompress
+filter the archive through compress
+.TP
+.B -z, --gzip, --ungzip
+filter the archive through gzip
+.TP
+.B --use-compress-program PROG
+filter the archive through PROG (which must accept -d)
+.TP
+.B --block-compress
+block the output of compression program for tapes
+.TP
+.B --rsh-command=CMD
+Use remote COMMAND instead of `rsh'. This option exists so that
+people who use something other than the standard `rsh' (e.g., a
+Kerberized `rsh') can access a remote device.
+.TP
+.B -[0-7][lmh]
+specify drive and density
+.SH BUGS
+.LP
+The GNU folks, in general, abhor man pages, and create info documents instead.
+The maintainer of tar falls into this category. This man page is neither
+complete, nor current, and was included in the Debian Linux packaging of tar
+entirely to reduce the frequency with which the lack of a man page gets
+reported as a bug in our defect tracking system.
+
+If you really want to understand tar, then you should run info and read the
+tar info pages, or use the info mode in emacs.
+
diff --git a/abs/core/tcl/ChangeLog b/abs/core/tcl/ChangeLog
new file mode 100644
index 0000000..313bd98
--- /dev/null
+++ b/abs/core/tcl/ChangeLog
@@ -0,0 +1,10 @@
+2008-08-16 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-1 :
+ new upstream release
+ FHS man directory
+
+2008-07-01 Allan McRae <allan@archlinux.org>
+
+ * 8.5.3-1 :
+ new upstream release.
diff --git a/abs/core/tcl/PKGBUILD b/abs/core/tcl/PKGBUILD
new file mode 100644
index 0000000..ec911bb
--- /dev/null
+++ b/abs/core/tcl/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 8742 2008-08-16 05:01:49Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=tcl
+pkgver=8.5.4
+pkgrel=1
+pkgdesc="The Tcl scripting language"
+arch=('i686' 'x86_64')
+license=('custom')
+depends=(glibc)
+source=(http://downloads.sourceforge.net/sourceforge/tcl/tcl${pkgver}-src.tar.gz)
+url="http://tcl.sourceforge.net/"
+md5sums=('15032a6a43f3bfbe9223b95186849472')
+
+build() {
+ cd ${srcdir}/tcl${pkgver}/unix
+
+ if [ "$CARCH" = "x86_64" ]; then
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --enable-64bit
+ else
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --disable-64bit
+ fi
+
+ make || return 1
+ make INSTALL_ROOT=${pkgdir} install install-private-headers
+ ln -sf tclsh8.5 ${pkgdir}/usr/bin/tclsh
+ # install license
+ install -Dm644 ../license.terms ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+
+ # remove buildroot traces / fixes #3602
+ sed -i \
+ -e "s,^TCL_BUILD_LIB_SPEC='-L.*/unix,TCL_BUILD_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TCL_SRC_DIR='.*',TCL_SRC_DIR='/usr/include'," \
+ -e "s,^TCL_BUILD_STUB_LIB_SPEC='-L.*/unix,TCL_BUILD_STUB_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TCL_BUILD_STUB_LIB_PATH='.*/unix,TCL_BUILD_STUB_LIB_PATH='/usr/lib," \
+ -e "s,^TCL_LIB_FILE='libtcl8.5..TCL_DBGX..so',TCL_LIB_FILE=\"libtcl8.5\$\{TCL_DBGX\}.so\"," \
+ -e "s,^TCL_CC_SEARCH_FLAGS='\(.*\)',TCL_CC_SEARCH_FLAGS='\1:/usr/lib'," \
+ -e "s,^TCL_LD_SEARCH_FLAGS='\(.*\)',TCL_LD_SEARCH_FLAGS='\1:/usr/lib'," \
+ ${pkgdir}/usr/lib/tclConfig.sh
+}
diff --git a/abs/core/tcp_wrappers/PKGBUILD b/abs/core/tcp_wrappers/PKGBUILD
new file mode 100644
index 0000000..5612e23
--- /dev/null
+++ b/abs/core/tcp_wrappers/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=tcp_wrappers
+pkgver=7.6
+pkgrel=17
+pkgdesc="Monitors and Controls incoming TCP connections"
+arch=(i686 x86_64)
+url="ftp://ftp.porcupine.org/pub/security/index.html"
+license=('custom')
+groups=('base')
+backup=(etc/hosts.allow etc/hosts.deny)
+depends=('bash' 'glibc')
+source=(ftp://ftp.porcupine.org/pub/security/${pkgname}_$pkgver.tar.gz \
+ hosts.allow hosts.deny try-from.8 safe_finger.8 gcc340.patch \
+ shared_lib_plus_plus-1.patch)
+md5sums=('e6fa25f71226d090f34de3f6b122fb5a' '32cfeeed797161034f62bb45f3167baa'\
+ 'a0ee30f6aeaca241c4d44f7c177eca6b' '4a8f40f9a69f0848df92b232072e8561'\
+ '1a6d7b11abb1fd69ace775d02a1c72cf' '19c3badd4fbee547eb9de61ed93691af'\
+ 'e39dc7e099b741b6d2b1799a56ab77af')
+
+build() {
+ cd $startdir/src/${pkgname}_$pkgver
+ patch -Np1 -i ../gcc340.patch || return 1
+ patch -Np1 -i ../shared_lib_plus_plus-1.patch || return 1
+ make REAL_DAEMON_DIR=/usr/sbin STYLE=-DSYS_ERRLIST_DEFINED linux || return 1
+ # dumb makefile
+ mkdir -p $startdir/pkg/usr/{include,lib,sbin}
+ mkdir -p $startdir/pkg/usr/share/man/man{3,5,8}
+ make DESTDIR=$startdir/pkg install
+ install -D -m644 ../hosts.allow $startdir/pkg/etc/hosts.allow
+ install -D -m644 ../hosts.deny $startdir/pkg/etc/hosts.deny
+ # install license
+ mkdir -p $startdir/pkg/usr/share/licenses/$pkgname
+ install -m644 DISCLAIMER $startdir/pkg/usr/share/licenses/$pkgname/license.txt
+}
diff --git a/abs/core/tcp_wrappers/gcc340.patch b/abs/core/tcp_wrappers/gcc340.patch
new file mode 100644
index 0000000..d0a2750
--- /dev/null
+++ b/abs/core/tcp_wrappers/gcc340.patch
@@ -0,0 +1,11 @@
+diff -Naur tcp_wrappers_7.6-orig/scaffold.c tcp_wrappers_7.6/scaffold.c
+--- tcp_wrappers_7.6-orig/scaffold.c 1997-03-21 10:27:24.000000000 -0800
++++ tcp_wrappers_7.6/scaffold.c 2004-05-07 19:44:50.000000000 -0700
+@@ -25,7 +25,6 @@
+ #define INADDR_NONE (-1) /* XXX should be 0xffffffff */
+ #endif
+
+-extern char *malloc();
+
+ /* Application-specific. */
+
diff --git a/abs/core/tcp_wrappers/hosts.allow b/abs/core/tcp_wrappers/hosts.allow
new file mode 100644
index 0000000..e5c035d
--- /dev/null
+++ b/abs/core/tcp_wrappers/hosts.allow
@@ -0,0 +1,5 @@
+#
+# /etc/hosts.allow
+#
+
+# End of file
diff --git a/abs/core/tcp_wrappers/hosts.deny b/abs/core/tcp_wrappers/hosts.deny
new file mode 100644
index 0000000..efcce18
--- /dev/null
+++ b/abs/core/tcp_wrappers/hosts.deny
@@ -0,0 +1,7 @@
+#
+# /etc/hosts.deny
+#
+
+ALL: ALL: DENY
+
+# End of file
diff --git a/abs/core/tcp_wrappers/safe_finger.8 b/abs/core/tcp_wrappers/safe_finger.8
new file mode 100644
index 0000000..875616b
--- /dev/null
+++ b/abs/core/tcp_wrappers/safe_finger.8
@@ -0,0 +1,34 @@
+.TH SAFE_FINGER 8 "21th June 1997" Linux "Linux Programmer's Manual"
+.SH NAME
+safe_finger \- finger client wrapper that protects against nasty stuff
+from finger servers
+.SH SYNOPSIS
+.B safe_finger [finger_options]
+.SH DESCRIPTION
+The
+.B safe_finger
+command protects against nasty stuff from finger servers. Use this
+program for automatic reverse finger probes from the
+.B tcp_wrapper
+.B (tcpd)
+, not the raw finger command. The
+.B safe_finger
+command makes sure that the finger client is not run with root
+privileges. It also runs the finger client with a defined PATH
+environment.
+.B safe_finger
+will also protect you from problems caused by the output of some
+finger servers. The problem: some programs may react to stuff in
+the first column. Other programs may get upset by thrash anywhere
+on a line. File systems may fill up as the finger server keeps
+sending data. Text editors may bomb out on extremely long lines.
+The finger server may take forever because it is somehow wedged.
+.B safe_finger
+takes care of all this badness.
+.SH SEE ALSO
+.BR hosts_access (5),
+.BR hosts_options (5),
+.BR tcpd (8)
+.SH AUTHOR
+Wietse Venema, Eindhoven University of Technology, The Netherlands.
+
diff --git a/abs/core/tcp_wrappers/shared_lib_plus_plus-1.patch b/abs/core/tcp_wrappers/shared_lib_plus_plus-1.patch
new file mode 100644
index 0000000..89b0b0c
--- /dev/null
+++ b/abs/core/tcp_wrappers/shared_lib_plus_plus-1.patch
@@ -0,0 +1,1025 @@
+diff -Naur tcp_wrappers_7.6/Makefile tcp_wrappers_7.6.gimli/Makefile
+--- tcp_wrappers_7.6/Makefile 1997-03-21 12:27:21.000000000 -0600
++++ tcp_wrappers_7.6.gimli/Makefile 2002-07-15 16:07:21.000000000 -0500
+@@ -1,5 +1,10 @@
++GLIBC=$(shell grep -s -c __GLIBC__ /usr/include/features.h)
++
+ # @(#) Makefile 1.23 97/03/21 19:27:20
+
++# unset the HOSTNAME environment variable
++HOSTNAME =
++
+ what:
+ @echo
+ @echo "Usage: edit the REAL_DAEMON_DIR definition in the Makefile then:"
+@@ -19,7 +24,7 @@
+ @echo " generic (most bsd-ish systems with sys5 compatibility)"
+ @echo " 386bsd aix alpha apollo bsdos convex-ultranet dell-gcc dgux dgux543"
+ @echo " dynix epix esix freebsd hpux irix4 irix5 irix6 isc iunix"
+- @echo " linux machten mips(untested) ncrsvr4 netbsd next osf power_unix_211"
++ @echo " linux gnu machten mips(untested) ncrsvr4 netbsd next osf power_unix_211"
+ @echo " ptx-2.x ptx-generic pyramid sco sco-nis sco-od2 sco-os5 sinix sunos4"
+ @echo " sunos40 sunos5 sysv4 tandem ultrix unicos7 unicos8 unixware1 unixware2"
+ @echo " uts215 uxp"
+@@ -43,8 +48,8 @@
+ # Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx
+ #REAL_DAEMON_DIR=/usr/etc
+ #
+-# SysV.4 Solaris 2.x OSF AIX
+-#REAL_DAEMON_DIR=/usr/sbin
++# SysV.4 Solaris 2.x OSF AIX Linux
++REAL_DAEMON_DIR=/usr/sbin
+ #
+ # BSD 4.4
+ #REAL_DAEMON_DIR=/usr/libexec
+@@ -141,10 +146,21 @@
+ LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= NETGROUP= TLI= \
+ EXTRA_CFLAGS=-DSYS_ERRLIST_DEFINED VSYSLOG= all
+
++ifneq ($(GLIBC),0)
++MYLIB=-lnsl
++endif
++
+ linux:
+ @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
+- LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
+- NETGROUP= TLI= EXTRA_CFLAGS="-DBROKEN_SO_LINGER" all
++ LIBS=$(MYLIB) RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
++ NETGROUP=-DNETGROUP TLI= VSYSLOG= BUGS= all \
++ EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DHAVE_WEAKSYMS -D_REENTRANT"
++
++gnu:
++ @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
++ LIBS=$(MYLIB) RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
++ NETGROUP=-DNETGROUP TLI= VSYSLOG= BUGS= all \
++ EXTRA_CFLAGS="-DHAVE_STRERROR -DHAVE_WEAKSYMS -D_REENTRANT"
+
+ # This is good for many SYSV+BSD hybrids with NIS, probably also for HP-UX 7.x.
+ hpux hpux8 hpux9 hpux10:
+@@ -391,7 +407,7 @@
+ # the ones provided with this source distribution. The environ.c module
+ # implements setenv(), getenv(), and putenv().
+
+-AUX_OBJ= setenv.o
++#AUX_OBJ= setenv.o
+ #AUX_OBJ= environ.o
+ #AUX_OBJ= environ.o strcasecmp.o
+
+@@ -454,7 +470,8 @@
+ # host name aliases. Compile with -DSOLARIS_24_GETHOSTBYNAME_BUG to work
+ # around this. The workaround does no harm on other Solaris versions.
+
+-BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK
++BUGS =
++#BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK
+ #BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DINET_ADDR_BUG
+ #BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DSOLARIS_24_GETHOSTBYNAME_BUG
+
+@@ -464,7 +481,7 @@
+ # If your system supports NIS or YP-style netgroups, enable the following
+ # macro definition. Netgroups are used only for host access control.
+ #
+-#NETGROUP= -DNETGROUP
++NETGROUP= -DNETGROUP
+
+ ###############################################################
+ # System dependencies: whether or not your system has vsyslog()
+@@ -491,7 +508,7 @@
+ # Uncomment the next definition to turn on the language extensions
+ # (examples: allow, deny, banners, twist and spawn).
+ #
+-#STYLE = -DPROCESS_OPTIONS # Enable language extensions.
++STYLE = -DPROCESS_OPTIONS # Enable language extensions.
+
+ ################################################################
+ # Optional: Changing the default disposition of logfile records
+@@ -514,7 +531,7 @@
+ #
+ # The LOG_XXX names below are taken from the /usr/include/syslog.h file.
+
+-FACILITY= LOG_MAIL # LOG_MAIL is what most sendmail daemons use
++FACILITY= LOG_DAEMON # LOG_MAIL is what most sendmail daemons use
+
+ # The syslog priority at which successful connections are logged.
+
+@@ -610,7 +627,7 @@
+ # Paranoid mode implies hostname lookup. In order to disable hostname
+ # lookups altogether, see the next section.
+
+-PARANOID= -DPARANOID
++#PARANOID= -DPARANOID
+
+ ########################################
+ # Optional: turning off hostname lookups
+@@ -623,7 +640,7 @@
+ # In order to perform selective hostname lookups, disable paranoid
+ # mode (see previous section) and comment out the following definition.
+
+-HOSTNAME= -DALWAYS_HOSTNAME
++#HOSTNAME= -DALWAYS_HOSTNAME
+
+ #############################################
+ # Optional: Turning on host ADDRESS checking
+@@ -649,28 +666,46 @@
+ # source-routed traffic in the kernel. Examples: 4.4BSD derivatives,
+ # Solaris 2.x, and Linux. See your system documentation for details.
+ #
+-# KILL_OPT= -DKILL_IP_OPTIONS
++KILL_OPT= -DKILL_IP_OPTIONS
+
+ ## End configuration options
+ ############################
+
+ # Protection against weird shells or weird make programs.
+
++CC = gcc
+ SHELL = /bin/sh
+-.c.o:; $(CC) $(CFLAGS) -c $*.c
++.c.o:; $(CC) $(CFLAGS) -o $*.o -c $*.c
++
++SOMAJOR = 0
++SOMINOR = 7.6
++
++LIB = libwrap.a
++SHLIB = shared/libwrap.so.$(SOMAJOR).$(SOMINOR)
++SHLIBSOMAJ= shared/libwrap.so.$(SOMAJOR)
++SHLIBSO = shared/libwrap.so
++SHLIBFLAGS = -Lshared -lwrap
+
+-CFLAGS = -O -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \
++shared/%.o: %.c
++ $(CC) $(CFLAGS) $(SHCFLAGS) -c $< -o $@
++
++CFLAGS = -O2 -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \
+ $(BUGS) $(SYSTYPE) $(AUTH) $(UMASK) \
+ -DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" $(STYLE) $(KILL_OPT) \
+ -DSEVERITY=$(SEVERITY) -DRFC931_TIMEOUT=$(RFC931_TIMEOUT) \
+ $(UCHAR) $(TABLES) $(STRINGS) $(TLI) $(EXTRA_CFLAGS) $(DOT) \
+ $(VSYSLOG) $(HOSTNAME)
+
++SHLINKFLAGS = -shared -Xlinker -soname -Xlinker libwrap.so.$(SOMAJOR) -lc $(LIBS)
++SHCFLAGS = -fPIC -shared -D_REENTRANT
++
+ LIB_OBJ= hosts_access.o options.o shell_cmd.o rfc931.o eval.o \
+ hosts_ctl.o refuse.o percent_x.o clean_exit.o $(AUX_OBJ) \
+ $(FROM_OBJ) fix_options.o socket.o tli.o workarounds.o \
+ update.o misc.o diag.o percent_m.o myvsyslog.o
+
++SHLIB_OBJ= $(addprefix shared/, $(LIB_OBJ));
++
+ FROM_OBJ= fromhost.o
+
+ KIT = README miscd.c tcpd.c fromhost.c hosts_access.c shell_cmd.c \
+@@ -684,46 +719,80 @@
+ refuse.c tcpdchk.8 setenv.c inetcf.c inetcf.h scaffold.c \
+ scaffold.h tcpdmatch.8 README.NIS
+
+-LIB = libwrap.a
+-
+-all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk
++all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk $(LIB)
+
+ # Invalidate all object files when the compiler options (CFLAGS) have changed.
+
+ config-check:
+ @set +e; test -n "$(REAL_DAEMON_DIR)" || { make; exit 1; }
+- @set +e; echo $(CFLAGS) >/tmp/cflags.$$$$ ; \
+- if cmp cflags /tmp/cflags.$$$$ ; \
+- then rm /tmp/cflags.$$$$ ; \
+- else mv /tmp/cflags.$$$$ cflags ; \
++ @set +e; echo $(CFLAGS) >cflags.new ; \
++ if cmp cflags cflags.new ; \
++ then rm cflags.new ; \
++ else mv cflags.new cflags ; \
+ fi >/dev/null 2>/dev/null
++ @if [ ! -d shared ]; then mkdir shared; fi
+
+ $(LIB): $(LIB_OBJ)
+ rm -f $(LIB)
+ $(AR) $(ARFLAGS) $(LIB) $(LIB_OBJ)
+ -$(RANLIB) $(LIB)
+
+-tcpd: tcpd.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ tcpd.o $(LIB) $(LIBS)
++$(SHLIB): $(SHLIB_OBJ)
++ rm -f $(SHLIB)
++ $(CC) -o $(SHLIB) $(SHLINKFLAGS) $(SHLIB_OBJ)
++ ln -s $(notdir $(SHLIB)) $(SHLIBSOMAJ)
++ ln -s $(notdir $(SHLIBSOMAJ)) $(SHLIBSO)
++
++tcpd: tcpd.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ tcpd.o $(SHLIBFLAGS)
+
+-miscd: miscd.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ miscd.o $(LIB) $(LIBS)
++miscd: miscd.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ miscd.o $(SHLIBFLAGS)
+
+-safe_finger: safe_finger.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ safe_finger.o $(LIB) $(LIBS)
++safe_finger: safe_finger.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ safe_finger.o $(SHLIBFLAGS)
+
+ TCPDMATCH_OBJ = tcpdmatch.o fakelog.o inetcf.o scaffold.o
+
+-tcpdmatch: $(TCPDMATCH_OBJ) $(LIB)
+- $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(LIB) $(LIBS)
++tcpdmatch: $(TCPDMATCH_OBJ) $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(SHLIBFLAGS)
+
+-try-from: try-from.o fakelog.o $(LIB)
+- $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(LIB) $(LIBS)
++try-from: try-from.o fakelog.o $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(SHLIBFLAGS)
+
+ TCPDCHK_OBJ = tcpdchk.o fakelog.o inetcf.o scaffold.o
+
+-tcpdchk: $(TCPDCHK_OBJ) $(LIB)
+- $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(LIB) $(LIBS)
++tcpdchk: $(TCPDCHK_OBJ) $(SHLIB)
++ $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(SHLIBFLAGS)
++
++install: install-lib install-bin install-dev
++
++install-lib:
++ install -o root -g root -m 0755 $(SHLIB) ${DESTDIR}/usr/lib/
++ ln -sf $(notdir $(SHLIB)) ${DESTDIR}/usr/lib/$(notdir $(SHLIBSOMAJ))
++ ln -sf $(notdir $(SHLIBSOMAJ)) ${DESTDIR}/usr/lib/$(notdir $(SHLIBSO))
++
++install-bin:
++ install -o root -g root -m 0755 tcpd ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 tcpdchk ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 tcpdmatch ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 try-from ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0755 safe_finger ${DESTDIR}/usr/sbin/
++ install -o root -g root -m 0644 tcpd.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 tcpdchk.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 try-from.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 tcpdmatch.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 safe_finger.8 ${DESTDIR}/usr/share/man/man8/
++ install -o root -g root -m 0644 hosts_access.5 ${DESTDIR}/usr/share/man/man5/
++ install -o root -g root -m 0644 hosts_options.5 ${DESTDIR}/usr/share/man/man5/
++
++install-dev:
++ install -o root -g root -m 0644 hosts_access.3 ${DESTDIR}/usr/share/man/man3/
++ install -o root -g root -m 0644 tcpd.h ${DESTDIR}/usr/include/
++ install -o root -g root -m 0644 $(LIB) ${DESTDIR}/usr/lib/
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/hosts_ctl.3
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/request_init.3
++ ln -sf hosts_access.3 ${DESTDIR}/usr/share/man/man3/request_set.3
+
+ shar: $(KIT)
+ @shar $(KIT)
+@@ -739,7 +808,8 @@
+
+ clean:
+ rm -f tcpd miscd safe_finger tcpdmatch tcpdchk try-from *.[oa] core \
+- cflags
++ cflags libwrap*.so*
++ rm -rf shared
+
+ tidy: clean
+ chmod -R a+r .
+@@ -885,5 +955,6 @@
+ update.o: mystdarg.h
+ update.o: tcpd.h
+ vfprintf.o: cflags
++weak_symbols.o: tcpd.h
+ workarounds.o: cflags
+ workarounds.o: tcpd.h
+diff -Naur tcp_wrappers_7.6/fix_options.c tcp_wrappers_7.6.gimli/fix_options.c
+--- tcp_wrappers_7.6/fix_options.c 1997-04-07 19:29:19.000000000 -0500
++++ tcp_wrappers_7.6.gimli/fix_options.c 2002-01-07 08:50:19.000000000 -0600
+@@ -35,7 +35,12 @@
+ #ifdef IP_OPTIONS
+ unsigned char optbuf[BUFFER_SIZE / 3], *cp;
+ char lbuf[BUFFER_SIZE], *lp;
++#if !defined(__GLIBC__)
+ int optsize = sizeof(optbuf), ipproto;
++#else /* __GLIBC__ */
++ size_t optsize = sizeof(optbuf);
++ int ipproto;
++#endif /* __GLIBC__ */
+ struct protoent *ip;
+ int fd = request->fd;
+ unsigned int opt;
+diff -Naur tcp_wrappers_7.6/hosts_access.3 tcp_wrappers_7.6.gimli/hosts_access.3
+--- tcp_wrappers_7.6/hosts_access.3 1996-02-11 10:01:27.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.3 2002-01-07 08:50:19.000000000 -0600
+@@ -3,7 +3,7 @@
+ hosts_access, hosts_ctl, request_init, request_set \- access control library
+ .SH SYNOPSIS
+ .nf
+-#include "tcpd.h"
++#include <tcpd.h>
+
+ extern int allow_severity;
+ extern int deny_severity;
+diff -Naur tcp_wrappers_7.6/hosts_access.5 tcp_wrappers_7.6.gimli/hosts_access.5
+--- tcp_wrappers_7.6/hosts_access.5 1995-01-30 12:51:47.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.5 2002-01-07 08:50:19.000000000 -0600
+@@ -8,9 +8,9 @@
+ impatient reader is encouraged to skip to the EXAMPLES section for a
+ quick introduction.
+ .PP
+-An extended version of the access control language is described in the
+-\fIhosts_options\fR(5) document. The extensions are turned on at
+-program build time by building with -DPROCESS_OPTIONS.
++The extended version of the access control language is described in the
++\fIhosts_options\fR(5) document. \fBNote that this language supersedes
++the meaning of \fIshell_command\fB as documented below.\fR
+ .PP
+ In the following text, \fIdaemon\fR is the the process name of a
+ network daemon process, and \fIclient\fR is the name and/or address of
+@@ -40,7 +40,7 @@
+ character. This permits you to break up long lines so that they are
+ easier to edit.
+ .IP \(bu
+-Blank lines or lines that begin with a `#\' character are ignored.
++Blank lines or lines that begin with a `#' character are ignored.
+ This permits you to insert comments and whitespace so that the tables
+ are easier to read.
+ .IP \(bu
+@@ -69,26 +69,33 @@
+ .SH PATTERNS
+ The access control language implements the following patterns:
+ .IP \(bu
+-A string that begins with a `.\' character. A host name is matched if
++A string that begins with a `.' character. A host name is matched if
+ the last components of its name match the specified pattern. For
+-example, the pattern `.tue.nl\' matches the host name
+-`wzv.win.tue.nl\'.
++example, the pattern `.tue.nl' matches the host name
++`wzv.win.tue.nl'.
+ .IP \(bu
+-A string that ends with a `.\' character. A host address is matched if
++A string that ends with a `.' character. A host address is matched if
+ its first numeric fields match the given string. For example, the
+-pattern `131.155.\' matches the address of (almost) every host on the
++pattern `131.155.' matches the address of (almost) every host on the
+ Eind\%hoven University network (131.155.x.x).
+ .IP \(bu
+-A string that begins with an `@\' character is treated as an NIS
++A string that begins with an `@' character is treated as an NIS
+ (formerly YP) netgroup name. A host name is matched if it is a host
+ member of the specified netgroup. Netgroup matches are not supported
+ for daemon process names or for client user names.
+ .IP \(bu
+-An expression of the form `n.n.n.n/m.m.m.m\' is interpreted as a
+-`net/mask\' pair. A host address is matched if `net\' is equal to the
+-bitwise AND of the address and the `mask\'. For example, the net/mask
+-pattern `131.155.72.0/255.255.254.0\' matches every address in the
+-range `131.155.72.0\' through `131.155.73.255\'.
++An expression of the form `n.n.n.n/m.m.m.m' is interpreted as a
++`net/mask' pair. A host address is matched if `net' is equal to the
++bitwise AND of the address and the `mask'. For example, the net/mask
++pattern `131.155.72.0/255.255.254.0' matches every address in the
++range `131.155.72.0' through `131.155.73.255'.
++.IP \(bu
++A string that begins with a `/' character is treated as a file
++name. A host name or address is matched if it matches any host name
++or address pattern listed in the named file. The file format is
++zero or more lines with zero or more host name or address patterns
++separated by whitespace. A file name pattern can be used anywhere
++a host name or address pattern can be used.
+ .SH WILDCARDS
+ The access control language supports explicit wildcards:
+ .IP ALL
+@@ -115,19 +122,19 @@
+ .ne 6
+ .SH OPERATORS
+ .IP EXCEPT
+-Intended use is of the form: `list_1 EXCEPT list_2\'; this construct
++Intended use is of the form: `list_1 EXCEPT list_2'; this construct
+ matches anything that matches \fIlist_1\fR unless it matches
+ \fIlist_2\fR. The EXCEPT operator can be used in daemon_lists and in
+ client_lists. The EXCEPT operator can be nested: if the control
+-language would permit the use of parentheses, `a EXCEPT b EXCEPT c\'
+-would parse as `(a EXCEPT (b EXCEPT c))\'.
++language would permit the use of parentheses, `a EXCEPT b EXCEPT c'
++would parse as `(a EXCEPT (b EXCEPT c))'.
+ .br
+ .ne 6
+ .SH SHELL COMMANDS
+ If the first-matched access control rule contains a shell command, that
+ command is subjected to %<letter> substitutions (see next section).
+ The result is executed by a \fI/bin/sh\fR child process with standard
+-input, output and error connected to \fI/dev/null\fR. Specify an `&\'
++input, output and error connected to \fI/dev/null\fR. Specify an `&'
+ at the end of the command if you do not want to wait until it has
+ completed.
+ .PP
+@@ -159,7 +166,7 @@
+ .IP %u
+ The client user name (or "unknown").
+ .IP %%
+-Expands to a single `%\' character.
++Expands to a single `%' character.
+ .PP
+ Characters in % expansions that may confuse the shell are replaced by
+ underscores.
+@@ -243,9 +250,9 @@
+ less trustworthy. It is possible for an intruder to spoof both the
+ client connection and the IDENT lookup, although doing so is much
+ harder than spoofing just a client connection. It may also be that
+-the client\'s IDENT server is lying.
++the client's IDENT server is lying.
+ .PP
+-Note: IDENT lookups don\'t work with UDP services.
++Note: IDENT lookups don't work with UDP services.
+ .SH EXAMPLES
+ The language is flexible enough that different types of access control
+ policy can be expressed with a minimum of fuss. Although the language
+@@ -285,7 +292,7 @@
+ .br
+ ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
+ .PP
+-The first rule permits access from hosts in the local domain (no `.\'
++The first rule permits access from hosts in the local domain (no `.'
+ in the host name) and from members of the \fIsome_netgroup\fP
+ netgroup. The second rule permits access from all hosts in the
+ \fIfoobar.edu\fP domain (notice the leading dot), with the exception of
+@@ -322,8 +329,8 @@
+ /etc/hosts.deny:
+ .in +3
+ .nf
+-in.tftpd: ALL: (/some/where/safe_finger -l @%h | \\
+- /usr/ucb/mail -s %d-%h root) &
++in.tftpd: ALL: (/usr/sbin/safe_finger -l @%h | \\
++ /usr/bin/mail -s %d-%h root) &
+ .fi
+ .PP
+ The safe_finger command comes with the tcpd wrapper and should be
+@@ -349,7 +356,7 @@
+ capacity of an internal buffer; when an access control rule is not
+ terminated by a newline character; when the result of %<letter>
+ expansion would overflow an internal buffer; when a system call fails
+-that shouldn\'t. All problems are reported via the syslog daemon.
++that shouldn't. All problems are reported via the syslog daemon.
+ .SH FILES
+ .na
+ .nf
+diff -Naur tcp_wrappers_7.6/hosts_access.c tcp_wrappers_7.6.gimli/hosts_access.c
+--- tcp_wrappers_7.6/hosts_access.c 1997-02-11 19:13:23.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_access.c 2002-01-07 08:50:19.000000000 -0600
+@@ -240,6 +240,26 @@
+ }
+ }
+
++/* hostfile_match - look up host patterns from file */
++
++static int hostfile_match(path, host)
++char *path;
++struct hosts_info *host;
++{
++ char tok[BUFSIZ];
++ int match = NO;
++ FILE *fp;
++
++ if ((fp = fopen(path, "r")) != 0) {
++ while (fscanf(fp, "%s", tok) == 1 && !(match = host_match(tok, host)))
++ /* void */ ;
++ fclose(fp);
++ } else if (errno != ENOENT) {
++ tcpd_warn("open %s: %m", path);
++ }
++ return (match);
++}
++
+ /* host_match - match host name and/or address against pattern */
+
+ static int host_match(tok, host)
+@@ -267,6 +287,8 @@
+ tcpd_warn("netgroup support is disabled"); /* not tcpd_jump() */
+ return (NO);
+ #endif
++ } else if (tok[0] == '/') { /* /file hack */
++ return (hostfile_match(tok, host));
+ } else if (STR_EQ(tok, "KNOWN")) { /* check address and name */
+ char *name = eval_hostname(host);
+ return (STR_NE(eval_hostaddr(host), unknown) && HOSTNAME_KNOWN(name));
+diff -Naur tcp_wrappers_7.6/hosts_options.5 tcp_wrappers_7.6.gimli/hosts_options.5
+--- tcp_wrappers_7.6/hosts_options.5 1994-12-28 10:42:29.000000000 -0600
++++ tcp_wrappers_7.6.gimli/hosts_options.5 2002-01-07 08:50:19.000000000 -0600
+@@ -58,12 +58,12 @@
+ Execute, in a child process, the specified shell command, after
+ performing the %<letter> expansions described in the hosts_access(5)
+ manual page. The command is executed with stdin, stdout and stderr
+-connected to the null device, so that it won\'t mess up the
++connected to the null device, so that it won't mess up the
+ conversation with the client host. Example:
+ .sp
+ .nf
+ .ti +3
+-spawn (/some/where/safe_finger -l @%h | /usr/ucb/mail root) &
++spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &
+ .fi
+ .sp
+ executes, in a background child process, the shell command "safe_finger
+diff -Naur tcp_wrappers_7.6/options.c tcp_wrappers_7.6.gimli/options.c
+--- tcp_wrappers_7.6/options.c 1996-02-11 10:01:32.000000000 -0600
++++ tcp_wrappers_7.6.gimli/options.c 2002-01-07 08:50:19.000000000 -0600
+@@ -473,6 +473,9 @@
+ #ifdef LOG_CRON
+ "cron", LOG_CRON,
+ #endif
++#ifdef LOG_FTP
++ "ftp", LOG_FTP,
++#endif
+ #ifdef LOG_LOCAL0
+ "local0", LOG_LOCAL0,
+ #endif
+diff -Naur tcp_wrappers_7.6/percent_m.c tcp_wrappers_7.6.gimli/percent_m.c
+--- tcp_wrappers_7.6/percent_m.c 1994-12-28 10:42:37.000000000 -0600
++++ tcp_wrappers_7.6.gimli/percent_m.c 2002-01-07 08:50:19.000000000 -0600
+@@ -13,7 +13,7 @@
+ #include <string.h>
+
+ extern int errno;
+-#ifndef SYS_ERRLIST_DEFINED
++#if !defined(SYS_ERRLIST_DEFINED) && !defined(HAVE_STRERROR)
+ extern char *sys_errlist[];
+ extern int sys_nerr;
+ #endif
+@@ -29,11 +29,15 @@
+
+ while (*bp = *cp)
+ if (*cp == '%' && cp[1] == 'm') {
++#ifdef HAVE_STRERROR
++ strcpy(bp, strerror(errno));
++#else
+ if (errno < sys_nerr && errno > 0) {
+ strcpy(bp, sys_errlist[errno]);
+ } else {
+ sprintf(bp, "Unknown error %d", errno);
+ }
++#endif
+ bp += strlen(bp);
+ cp += 2;
+ } else {
+diff -Naur tcp_wrappers_7.6/rfc931.c tcp_wrappers_7.6.gimli/rfc931.c
+--- tcp_wrappers_7.6/rfc931.c 1995-01-02 09:11:34.000000000 -0600
++++ tcp_wrappers_7.6.gimli/rfc931.c 2002-01-07 08:50:19.000000000 -0600
+@@ -33,7 +33,7 @@
+
+ int rfc931_timeout = RFC931_TIMEOUT;/* Global so it can be changed */
+
+-static jmp_buf timebuf;
++static sigjmp_buf timebuf;
+
+ /* fsocket - open stdio stream on top of socket */
+
+@@ -62,7 +62,7 @@
+ static void timeout(sig)
+ int sig;
+ {
+- longjmp(timebuf, sig);
++ siglongjmp(timebuf, sig);
+ }
+
+ /* rfc931 - return remote user name, given socket structures */
+@@ -99,7 +99,7 @@
+ * Set up a timer so we won't get stuck while waiting for the server.
+ */
+
+- if (setjmp(timebuf) == 0) {
++ if (sigsetjmp(timebuf,1) == 0) {
+ signal(SIGALRM, timeout);
+ alarm(rfc931_timeout);
+
+diff -Naur tcp_wrappers_7.6/safe_finger.8 tcp_wrappers_7.6.gimli/safe_finger.8
+--- tcp_wrappers_7.6/safe_finger.8 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/safe_finger.8 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,34 @@
++.TH SAFE_FINGER 8 "21th June 1997" Linux "Linux Programmer's Manual"
++.SH NAME
++safe_finger \- finger client wrapper that protects against nasty stuff
++from finger servers
++.SH SYNOPSIS
++.B safe_finger [finger_options]
++.SH DESCRIPTION
++The
++.B safe_finger
++command protects against nasty stuff from finger servers. Use this
++program for automatic reverse finger probes from the
++.B tcp_wrapper
++.B (tcpd)
++, not the raw finger command. The
++.B safe_finger
++command makes sure that the finger client is not run with root
++privileges. It also runs the finger client with a defined PATH
++environment.
++.B safe_finger
++will also protect you from problems caused by the output of some
++finger servers. The problem: some programs may react to stuff in
++the first column. Other programs may get upset by thrash anywhere
++on a line. File systems may fill up as the finger server keeps
++sending data. Text editors may bomb out on extremely long lines.
++The finger server may take forever because it is somehow wedged.
++.B safe_finger
++takes care of all this badness.
++.SH SEE ALSO
++.BR hosts_access (5),
++.BR hosts_options (5),
++.BR tcpd (8)
++.SH AUTHOR
++Wietse Venema, Eindhoven University of Technology, The Netherlands.
++
+diff -Naur tcp_wrappers_7.6/safe_finger.c tcp_wrappers_7.6.gimli/safe_finger.c
+--- tcp_wrappers_7.6/safe_finger.c 1994-12-28 10:42:42.000000000 -0600
++++ tcp_wrappers_7.6.gimli/safe_finger.c 2002-01-07 08:50:19.000000000 -0600
+@@ -26,21 +26,24 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <pwd.h>
++#include <syslog.h>
+
+ extern void exit();
+
+ /* Local stuff */
+
+-char path[] = "PATH=/bin:/usr/bin:/usr/ucb:/usr/bsd:/etc:/usr/etc:/usr/sbin";
++char path[] = "PATH=/bin:/usr/bin:/sbin:/usr/sbin";
+
+ #define TIME_LIMIT 60 /* Do not keep listinging forever */
+ #define INPUT_LENGTH 100000 /* Do not keep listinging forever */
+ #define LINE_LENGTH 128 /* Editors can choke on long lines */
+ #define FINGER_PROGRAM "finger" /* Most, if not all, UNIX systems */
+ #define UNPRIV_NAME "nobody" /* Preferred privilege level */
+-#define UNPRIV_UGID 32767 /* Default uid and gid */
++#define UNPRIV_UGID 65534 /* Default uid and gid */
+
+ int finger_pid;
++int allow_severity = SEVERITY;
++int deny_severity = LOG_WARNING;
+
+ void cleanup(sig)
+ int sig;
+diff -Naur tcp_wrappers_7.6/scaffold.c tcp_wrappers_7.6.gimli/scaffold.c
+--- tcp_wrappers_7.6/scaffold.c 1997-03-21 12:27:24.000000000 -0600
++++ tcp_wrappers_7.6.gimli/scaffold.c 2002-01-07 08:50:19.000000000 -0600
+@@ -180,10 +180,12 @@
+
+ /* ARGSUSED */
+
+-void rfc931(request)
+-struct request_info *request;
++void rfc931(rmt_sin, our_sin, dest)
++struct sockaddr_in *rmt_sin;
++struct sockaddr_in *our_sin;
++char *dest;
+ {
+- strcpy(request->user, unknown);
++ strcpy(dest, unknown);
+ }
+
+ /* check_path - examine accessibility */
+diff -Naur tcp_wrappers_7.6/socket.c tcp_wrappers_7.6.gimli/socket.c
+--- tcp_wrappers_7.6/socket.c 1997-03-21 12:27:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/socket.c 2002-01-07 08:50:19.000000000 -0600
+@@ -76,7 +76,11 @@
+ {
+ static struct sockaddr_in client;
+ static struct sockaddr_in server;
++#if !defined (__GLIBC__)
+ int len;
++#else /* __GLIBC__ */
++ size_t len;
++#endif /* __GLIBC__ */
+ char buf[BUFSIZ];
+ int fd = request->fd;
+
+@@ -224,7 +228,11 @@
+ {
+ char buf[BUFSIZ];
+ struct sockaddr_in sin;
++#if !defined(__GLIBC__)
+ int size = sizeof(sin);
++#else /* __GLIBC__ */
++ size_t size = sizeof(sin);
++#endif /* __GLIBC__ */
+
+ /*
+ * Eat up the not-yet received datagram. Some systems insist on a
+diff -Naur tcp_wrappers_7.6/tcpd.8 tcp_wrappers_7.6.gimli/tcpd.8
+--- tcp_wrappers_7.6/tcpd.8 1996-02-21 09:39:16.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpd.8 2002-01-07 08:50:19.000000000 -0600
+@@ -94,7 +94,7 @@
+ .PP
+ The example assumes that the network daemons live in /usr/etc. On some
+ systems, network daemons live in /usr/sbin or in /usr/libexec, or have
+-no `in.\' prefix to their name.
++no `in.' prefix to their name.
+ .SH EXAMPLE 2
+ This example applies when \fItcpd\fR expects that the network daemons
+ are left in their original place.
+@@ -110,26 +110,26 @@
+ becomes:
+ .sp
+ .ti +5
+-finger stream tcp nowait nobody /some/where/tcpd in.fingerd
++finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd
+ .sp
+ .fi
+ .PP
+ The example assumes that the network daemons live in /usr/etc. On some
+ systems, network daemons live in /usr/sbin or in /usr/libexec, the
+-daemons have no `in.\' prefix to their name, or there is no userid
++daemons have no `in.' prefix to their name, or there is no userid
+ field in the inetd configuration file.
+ .PP
+ Similar changes will be needed for the other services that are to be
+-covered by \fItcpd\fR. Send a `kill -HUP\' to the \fIinetd\fR(8)
++covered by \fItcpd\fR. Send a `kill -HUP' to the \fIinetd\fR(8)
+ process to make the changes effective. AIX users may also have to
+-execute the `inetimp\' command.
++execute the `inetimp' command.
+ .SH EXAMPLE 3
+ In the case of daemons that do not live in a common directory ("secret"
+ or otherwise), edit the \fIinetd\fR configuration file so that it
+ specifies an absolute path name for the process name field. For example:
+ .nf
+ .sp
+- ntalk dgram udp wait root /some/where/tcpd /usr/local/lib/ntalkd
++ ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
+ .sp
+ .fi
+ .PP
+diff -Naur tcp_wrappers_7.6/tcpd.h tcp_wrappers_7.6.gimli/tcpd.h
+--- tcp_wrappers_7.6/tcpd.h 1996-03-19 09:22:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpd.h 2002-01-07 08:50:19.000000000 -0600
+@@ -4,6 +4,25 @@
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+
++#ifndef _TCPWRAPPERS_TCPD_H
++#define _TCPWRAPPERS_TCPD_H
++
++/* someone else may have defined this */
++#undef __P
++
++/* use prototypes if we have an ANSI C compiler or are using C++ */
++#if defined(__STDC__) || defined(__cplusplus)
++#define __P(args) args
++#else
++#define __P(args) ()
++#endif
++
++/* Need definitions of struct sockaddr_in and FILE. */
++#include <netinet/in.h>
++#include <stdio.h>
++
++__BEGIN_DECLS
++
+ /* Structure to describe one communications endpoint. */
+
+ #define STRING_LENGTH 128 /* hosts, users, processes */
+@@ -25,10 +44,10 @@
+ char pid[10]; /* access via eval_pid(request) */
+ struct host_info client[1]; /* client endpoint info */
+ struct host_info server[1]; /* server endpoint info */
+- void (*sink) (); /* datagram sink function or 0 */
+- void (*hostname) (); /* address to printable hostname */
+- void (*hostaddr) (); /* address to printable address */
+- void (*cleanup) (); /* cleanup function or 0 */
++ void (*sink) __P((int)); /* datagram sink function or 0 */
++ void (*hostname) __P((struct host_info *)); /* address to printable hostname */
++ void (*hostaddr) __P((struct host_info *)); /* address to printable address */
++ void (*cleanup) __P((struct request_info *)); /* cleanup function or 0 */
+ struct netconfig *config; /* netdir handle */
+ };
+
+@@ -61,25 +80,30 @@
+ /* Global functions. */
+
+ #if defined(TLI) || defined(PTX) || defined(TLI_SEQUENT)
+-extern void fromhost(); /* get/validate client host info */
++extern void fromhost __P((struct request_info *)); /* get/validate client host info */
+ #else
+ #define fromhost sock_host /* no TLI support needed */
+ #endif
+
+-extern int hosts_access(); /* access control */
+-extern void shell_cmd(); /* execute shell command */
+-extern char *percent_x(); /* do %<char> expansion */
+-extern void rfc931(); /* client name from RFC 931 daemon */
+-extern void clean_exit(); /* clean up and exit */
+-extern void refuse(); /* clean up and exit */
+-extern char *xgets(); /* fgets() on steroids */
+-extern char *split_at(); /* strchr() and split */
+-extern unsigned long dot_quad_addr(); /* restricted inet_addr() */
++extern void shell_cmd __P((char *)); /* execute shell command */
++extern char *percent_x __P((char *, int, char *, struct request_info *)); /* do %<char> expansion */
++extern void rfc931 __P((struct sockaddr_in *, struct sockaddr_in *, char *)); /* client name from RFC 931 daemon */
++extern void clean_exit __P((struct request_info *)); /* clean up and exit */
++extern void refuse __P((struct request_info *)); /* clean up and exit */
++extern char *xgets __P((char *, int, FILE *)); /* fgets() on steroids */
++extern char *split_at __P((char *, int)); /* strchr() and split */
++extern unsigned long dot_quad_addr __P((char *)); /* restricted inet_addr() */
+
+ /* Global variables. */
+
++#ifdef HAVE_WEAKSYMS
++extern int allow_severity __attribute__ ((weak)); /* for connection logging */
++extern int deny_severity __attribute__ ((weak)); /* for connection logging */
++#else
+ extern int allow_severity; /* for connection logging */
+ extern int deny_severity; /* for connection logging */
++#endif
++
+ extern char *hosts_allow_table; /* for verification mode redirection */
+ extern char *hosts_deny_table; /* for verification mode redirection */
+ extern int hosts_access_verbose; /* for verbose matching mode */
+@@ -92,9 +116,14 @@
+ */
+
+ #ifdef __STDC__
++extern int hosts_access(struct request_info *request);
++extern int hosts_ctl(char *daemon, char *client_name, char *client_addr,
++ char *client_user);
+ extern struct request_info *request_init(struct request_info *,...);
+ extern struct request_info *request_set(struct request_info *,...);
+ #else
++extern int hosts_access();
++extern int hosts_ctl();
+ extern struct request_info *request_init(); /* initialize request */
+ extern struct request_info *request_set(); /* update request structure */
+ #endif
+@@ -117,27 +146,31 @@
+ * host_info structures serve as caches for the lookup results.
+ */
+
+-extern char *eval_user(); /* client user */
+-extern char *eval_hostname(); /* printable hostname */
+-extern char *eval_hostaddr(); /* printable host address */
+-extern char *eval_hostinfo(); /* host name or address */
+-extern char *eval_client(); /* whatever is available */
+-extern char *eval_server(); /* whatever is available */
++extern char *eval_user __P((struct request_info *)); /* client user */
++extern char *eval_hostname __P((struct host_info *)); /* printable hostname */
++extern char *eval_hostaddr __P((struct host_info *)); /* printable host address */
++extern char *eval_hostinfo __P((struct host_info *)); /* host name or address */
++extern char *eval_client __P((struct request_info *)); /* whatever is available */
++extern char *eval_server __P((struct request_info *)); /* whatever is available */
+ #define eval_daemon(r) ((r)->daemon) /* daemon process name */
+ #define eval_pid(r) ((r)->pid) /* process id */
+
+ /* Socket-specific methods, including DNS hostname lookups. */
+
+-extern void sock_host(); /* look up endpoint addresses */
+-extern void sock_hostname(); /* translate address to hostname */
+-extern void sock_hostaddr(); /* address to printable address */
++/* look up endpoint addresses */
++extern void sock_host __P((struct request_info *));
++/* translate address to hostname */
++extern void sock_hostname __P((struct host_info *));
++/* address to printable address */
++extern void sock_hostaddr __P((struct host_info *));
++
+ #define sock_methods(r) \
+ { (r)->hostname = sock_hostname; (r)->hostaddr = sock_hostaddr; }
+
+ /* The System V Transport-Level Interface (TLI) interface. */
+
+ #if defined(TLI) || defined(PTX) || defined(TLI_SEQUENT)
+-extern void tli_host(); /* look up endpoint addresses etc. */
++extern void tli_host __P((struct request_info *)); /* look up endpoint addresses etc. */
+ #endif
+
+ /*
+@@ -178,7 +211,7 @@
+ * behavior.
+ */
+
+-extern void process_options(); /* execute options */
++extern void process_options __P((char *, struct request_info *)); /* execute options */
+ extern int dry_run; /* verification flag */
+
+ /* Bug workarounds. */
+@@ -217,3 +250,7 @@
+ #define strtok my_strtok
+ extern char *my_strtok();
+ #endif
++
++__END_DECLS
++
++#endif /* tcpd.h */
+diff -Naur tcp_wrappers_7.6/tcpdchk.c tcp_wrappers_7.6.gimli/tcpdchk.c
+--- tcp_wrappers_7.6/tcpdchk.c 1997-02-11 19:13:25.000000000 -0600
++++ tcp_wrappers_7.6.gimli/tcpdchk.c 2002-01-07 08:50:19.000000000 -0600
+@@ -350,6 +350,8 @@
+ {
+ if (pat[0] == '@') {
+ tcpd_warn("%s: daemon name begins with \"@\"", pat);
++ } else if (pat[0] == '/') {
++ tcpd_warn("%s: daemon name begins with \"/\"", pat);
+ } else if (pat[0] == '.') {
+ tcpd_warn("%s: daemon name begins with dot", pat);
+ } else if (pat[strlen(pat) - 1] == '.') {
+@@ -382,6 +384,8 @@
+ {
+ if (pat[0] == '@') { /* @netgroup */
+ tcpd_warn("%s: user name begins with \"@\"", pat);
++ } else if (pat[0] == '/') {
++ tcpd_warn("%s: user name begins with \"/\"", pat);
+ } else if (pat[0] == '.') {
+ tcpd_warn("%s: user name begins with dot", pat);
+ } else if (pat[strlen(pat) - 1] == '.') {
+@@ -402,8 +406,13 @@
+ static int check_host(pat)
+ char *pat;
+ {
++ char buf[BUFSIZ];
+ char *mask;
+ int addr_count = 1;
++ FILE *fp;
++ struct tcpd_context saved_context;
++ char *cp;
++ char *wsp = " \t\r\n";
+
+ if (pat[0] == '@') { /* @netgroup */
+ #ifdef NO_NETGRENT
+@@ -422,6 +431,21 @@
+ tcpd_warn("netgroup support disabled");
+ #endif
+ #endif
++ } else if (pat[0] == '/') { /* /path/name */
++ if ((fp = fopen(pat, "r")) != 0) {
++ saved_context = tcpd_context;
++ tcpd_context.file = pat;
++ tcpd_context.line = 0;
++ while (fgets(buf, sizeof(buf), fp)) {
++ tcpd_context.line++;
++ for (cp = strtok(buf, wsp); cp; cp = strtok((char *) 0, wsp))
++ check_host(cp);
++ }
++ tcpd_context = saved_context;
++ fclose(fp);
++ } else if (errno != ENOENT) {
++ tcpd_warn("open %s: %m", pat);
++ }
+ } else if (mask = split_at(pat, '/')) { /* network/netmask */
+ if (dot_quad_addr(pat) == INADDR_NONE
+ || dot_quad_addr(mask) == INADDR_NONE)
+diff -Naur tcp_wrappers_7.6/try-from.8 tcp_wrappers_7.6.gimli/try-from.8
+--- tcp_wrappers_7.6/try-from.8 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/try-from.8 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,28 @@
++.TH TRY-FROM 8 "21th June 1997" Linux "Linux Programmer's Manual"
++.SH NAME
++try-from \- test program for the tcp_wrapper
++.SH SYNOPSIS
++.B try-from
++.SH DESCRIPTION
++The
++.B try-from
++command can be called via a remote shell command to find out
++if the hostname and address are properly recognized
++by the
++.B tcp_wrapper
++library, if username lookup works, and (SysV only) if the TLI
++on top of IP heuristics work. Diagnostics are reported through
++.BR syslog (3)
++and redirected to stderr.
++
++Example:
++
++rsh host /some/where/try-from
++
++.SH SEE ALSO
++.BR hosts_access (5),
++.BR hosts_options (5),
++.BR tcpd (8)
++.SH AUTHOR
++Wietse Venema, Eindhoven University of Technology, The Netherlands.
++
+diff -Naur tcp_wrappers_7.6/weak_symbols.c tcp_wrappers_7.6.gimli/weak_symbols.c
+--- tcp_wrappers_7.6/weak_symbols.c 1969-12-31 18:00:00.000000000 -0600
++++ tcp_wrappers_7.6.gimli/weak_symbols.c 2002-01-07 08:50:19.000000000 -0600
+@@ -0,0 +1,11 @@
++ /*
++ * @(#) weak_symbols.h 1.5 99/12/29 23:50
++ *
++ * Author: Anthony Towns <ajt@debian.org>
++ */
++
++#ifdef HAVE_WEAKSYMS
++#include <syslog.h>
++int deny_severity = LOG_WARNING;
++int allow_severity = SEVERITY;
++#endif
+diff -Naur tcp_wrappers_7.6/workarounds.c tcp_wrappers_7.6.gimli/workarounds.c
+--- tcp_wrappers_7.6/workarounds.c 1996-03-19 09:22:26.000000000 -0600
++++ tcp_wrappers_7.6.gimli/workarounds.c 2002-01-07 08:50:19.000000000 -0600
+@@ -163,7 +163,11 @@
+ int fix_getpeername(sock, sa, len)
+ int sock;
+ struct sockaddr *sa;
++#if !defined(__GLIBC__)
+ int *len;
++#else /* __GLIBC__ */
++size_t *len;
++#endif /* __GLIBC__ */
+ {
+ int ret;
+ struct sockaddr_in *sin = (struct sockaddr_in *) sa;
diff --git a/abs/core/tcp_wrappers/try-from.8 b/abs/core/tcp_wrappers/try-from.8
new file mode 100644
index 0000000..9c8f305
--- /dev/null
+++ b/abs/core/tcp_wrappers/try-from.8
@@ -0,0 +1,28 @@
+.TH TRY-FROM 8 "21th June 1997" Linux "Linux Programmer's Manual"
+.SH NAME
+try-from \- test program for the tcp_wrapper
+.SH SYNOPSIS
+.B try-from
+.SH DESCRIPTION
+The
+.B try-from
+command can be called via a remote shell command to find out
+if the hostname and address are properly recognized
+by the
+.B tcp_wrapper
+library, if username lookup works, and (SysV only) if the TLI
+on top of IP heuristics work. Diagnostics are reported through
+.BR syslog (3)
+and redirected to stderr.
+
+Example:
+
+rsh host /some/where/try-from
+
+.SH SEE ALSO
+.BR hosts_access (5),
+.BR hosts_options (5),
+.BR tcpd (8)
+.SH AUTHOR
+Wietse Venema, Eindhoven University of Technology, The Netherlands.
+
diff --git a/abs/core/tiacx-firmware/PKGBUILD b/abs/core/tiacx-firmware/PKGBUILD
new file mode 100644
index 0000000..d16c818
--- /dev/null
+++ b/abs/core/tiacx-firmware/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=tiacx-firmware
+pkgver=2
+pkgrel=1
+pkgdesc="Firmware for Texas Instruments ACX100/ACX111 wireless chips."
+arch=('i686' 'x86_64')
+url="http://acx100.sourceforge.net/"
+license=('MPL')
+install=tiacx-firmware.install
+source=(http://www.kazer.org/acx-firmware-20060207.tar.bz2)
+
+build() {
+ mkdir -p $startdir/pkg/usr/share
+ cp -r fw $startdir/pkg/usr/share/tiacx
+ find $startdir/pkg -type d -exec chmod 755 {} \;
+ find $startdir/pkg -type f -exec chmod 644 {} \;
+}
+md5sums=('b8efea38c2c598190604dfa297cc9675')
diff --git a/abs/core/tiacx-firmware/tiacx-firmware.install b/abs/core/tiacx-firmware/tiacx-firmware.install
new file mode 100644
index 0000000..b1ebb62
--- /dev/null
+++ b/abs/core/tiacx-firmware/tiacx-firmware.install
@@ -0,0 +1,22 @@
+post_install() {
+ cat << 'EOM'
+
+ ==>
+ ==> PLEASE NOTE:
+ ==> The firmware files for ACX100/111 devices are installed in
+ ==> /usr/share/tiacx. Please identify the correct file(s) for your
+ ==> device and copy them to /lib/firmware.
+ ==>
+ ==> See http://acx100.sourceforge.net/wiki/Firmware for details.
+ ==>
+
+EOM
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/tiacx/PKGBUILD b/abs/core/tiacx/PKGBUILD
new file mode 100644
index 0000000..d1bffc7
--- /dev/null
+++ b/abs/core/tiacx/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 5944 2008-07-21 20:26:41Z thomas $
+# Maintainer: James Rayner <iphitus@gmail.com>
+
+pkgname=tiacx
+pkgver=20080210
+pkgrel=6
+pkgdesc="OpenSource module for Texas Instruments ACX100/ACX111 wireless chips. For stock arch 2.6 kernel"
+arch=(i686 x86_64)
+url="http://acx100.sourceforge.net/"
+license=('MPL')
+depends=('wireless_tools' 'kernel26>=2.6.26-1' 'kernel26<2.6.27' 'tiacx-firmware')
+install=acx.install
+source=(http://downloads.sourceforge.net/sourceforge/acx100/acx-$pkgver.tar.bz2)
+md5sums=('7d5ce3215708e4e9f95cf567a9ee3a12')
+
+_kernver=2.6.26-ARCH
+
+build() {
+ cd $startdir/src/acx-$pkgver
+ make -C /lib/modules/${_kernver}/build M=`pwd` || return 1
+ install -D acx.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless/tiacx/acx.ko
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+}
diff --git a/abs/core/tiacx/acx.install b/abs/core/tiacx/acx.install
new file mode 100644
index 0000000..09a0d0d
--- /dev/null
+++ b/abs/core/tiacx/acx.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -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.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/tk/ChangeLog b/abs/core/tk/ChangeLog
new file mode 100644
index 0000000..83abeb6
--- /dev/null
+++ b/abs/core/tk/ChangeLog
@@ -0,0 +1,16 @@
+2008-08-20 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-2 :
+ Remove xproto compatibility patch as no longer needed
+
+2008-08-16 Allan McRae <allan@archlinux.org>
+
+ * 8.5.4-1 :
+ new upstream release
+ FHS man pages
+
+2008-07-01 Allan McRae <allan@archlinux.org>
+
+ * 8.5.3-1 :
+ new upstream release
+ added patch for xproto-7.0.13 compatibility
diff --git a/abs/core/tk/PKGBUILD b/abs/core/tk/PKGBUILD
new file mode 100644
index 0000000..80299e6
--- /dev/null
+++ b/abs/core/tk/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 9873 2008-08-20 08:29:04Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=tk
+pkgver=8.5.4
+pkgrel=2
+pkgdesc="A windowing toolkit for use with tcl"
+arch=('i686' 'x86_64')
+url="http://tcl.sourceforge.net/"
+license=('custom')
+depends=("tcl=${pkgver}" 'libxss' 'libxft')
+source=(http://downloads.sourceforge.net/sourceforge/tcl/tk${pkgver}-src.tar.gz)
+md5sums=('a6aee7653566ec0b7c4b0f4c24a96f20')
+
+build() {
+ cd ${srcdir}/tk${pkgver}/unix
+ if [ "$CARCH" = "x86_64" ]; then
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --enable-64bit
+ else
+ ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --disable-64bit
+ fi
+
+ make
+ make INSTALL_ROOT=${pkgdir} install install-private-headers
+ ln -sf wish8.5 ${pkgdir}/usr/bin/wish
+ # install license
+ install -Dm644 ../license.terms ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+
+ # remove buildroot traces / fixes #3602
+ sed -i \
+ -e "s,^TK_BUILD_LIB_SPEC='-L.*/unix,TK_BUILD_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TK_SRC_DIR='.*',TK_SRC_DIR='/usr/include'," \
+ -e "s,^TK_BUILD_STUB_LIB_SPEC='-L.*/unix,TK_BUILD_STUB_LIB_SPEC='-L/usr/lib," \
+ -e "s,^TK_BUILD_STUB_LIB_PATH='.*/unix,TK_BUILD_STUB_LIB_PATH='/usr/lib," \
+ ${pkgdir}/usr/lib/tkConfig.sh
+}
diff --git a/abs/core/trapproto/PKGBUILD b/abs/core/trapproto/PKGBUILD
new file mode 100644
index 0000000..0744d52
--- /dev/null
+++ b/abs/core/trapproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=trapproto
+pkgver=3.4.3
+pkgrel=1
+pkgdesc="X11 Trap extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(http://xorg.freedesktop.org/releases/individual/proto/${pkgname}-$pkgver.tar.bz2)
+md5sums=('3b713239e5e6b269b31cb665563358df')
+sha1sums=('b108aa39a7bfde530d5cd347fda7c58770d5b8da')
+
+build() {
+ cd $startdir/src/${pkgname}-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/ttf-dejavu/ChangeLog b/abs/core/ttf-dejavu/ChangeLog
new file mode 100644
index 0000000..5c02e9f
--- /dev/null
+++ b/abs/core/ttf-dejavu/ChangeLog
@@ -0,0 +1,9 @@
+2008-07-29 Alexander Fehr <pizzapunk gmail com>
+
+ * ttf-dejavu-2.26-1:
+ New upstream release.
+ New maintainer.
+ Renamed ttf.install to ttf-dejavu.install.
+ Added -s option to fc-cache in install file.
+ Removed install message.
+ Added ChangeLog.
diff --git a/abs/core/ttf-dejavu/PKGBUILD b/abs/core/ttf-dejavu/PKGBUILD
new file mode 100644
index 0000000..5cbbecc
--- /dev/null
+++ b/abs/core/ttf-dejavu/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 7356 2008-07-31 01:07:11Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+# Contributor: Michal Krenek <mikos@sg1.cz>
+
+pkgname=ttf-dejavu
+pkgver=2.26
+pkgrel=1
+pkgdesc="Font family based on the Bitstream Vera Fonts with a wider range of characters"
+arch=('i686' 'x86_64')
+url="http://dejavu.sourceforge.net/"
+license=('custom')
+depends=('fontconfig' 'xorg-fonts-encodings')
+install=ttf-dejavu.install
+source=(http://downloads.sourceforge.net/dejavu/dejavu-fonts-ttf-$pkgver.tar.bz2)
+md5sums=('bff450e8c1b3c9a3f38294ac44d81adc')
+
+build() {
+ cd "$srcdir/dejavu-fonts-ttf-$pkgver"
+
+ mkdir -p "$pkgdir/usr/share/fonts/TTF" || return 1
+ install -m644 ttf/*.ttf "$pkgdir/usr/share/fonts/TTF" || return 1
+
+ install -D -m644 LICENSE "$pkgdir/usr/share/licenses/ttf-dejavu/LICENSE" || return 1
+}
diff --git a/abs/core/ttf-dejavu/ttf-dejavu.install b/abs/core/ttf-dejavu/ttf-dejavu.install
new file mode 100644
index 0000000..18666d2
--- /dev/null
+++ b/abs/core/ttf-dejavu/ttf-dejavu.install
@@ -0,0 +1,13 @@
+post_install() {
+ fc-cache -fs
+ mkfontscale usr/share/fonts/TTF
+ mkfontdir usr/share/fonts/TTF
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/abs/core/tzdata/Makefile.patch b/abs/core/tzdata/Makefile.patch
new file mode 100644
index 0000000..e88f9d9
--- /dev/null
+++ b/abs/core/tzdata/Makefile.patch
@@ -0,0 +1,140 @@
+diff -Naur src/Makefile src-p/Makefile
+--- src/Makefile 2007-08-20 16:47:41.000000000 +0200
++++ src-p/Makefile 2007-10-02 04:07:44.000000000 +0200
+@@ -34,17 +34,17 @@
+
+ # Everything gets put in subdirectories of. . .
+
+-TOPDIR= /usr/local
++TOPDIR= $(DESTDIR)/usr
+
+ # "Compiled" time zone information is placed in the "TZDIR" directory
+ # (and subdirectories).
+ # Use an absolute path name for TZDIR unless you're just testing the software.
+
+-TZDIR= $(TOPDIR)/etc/zoneinfo
++TZDIR= $(TOPDIR)/share/zoneinfo
+
+ # The "tzselect", "zic", and "zdump" commands get installed in. . .
+
+-ETCDIR= $(TOPDIR)/etc
++SBINDIR= $(TOPDIR)/sbin
+
+ # If you "make INSTALL", the "date" command gets installed in. . .
+
+@@ -52,7 +52,7 @@
+
+ # Manual pages go in subdirectories of. . .
+
+-MANDIR= $(TOPDIR)/man
++MANDIR= $(TOPDIR)/share/man
+
+ # Library functions are put in an archive in LIBDIR.
+
+@@ -83,7 +83,7 @@
+
+ # Non-default libraries needed to link.
+ # Add -lintl if you want to use `gettext' on Solaris.
+-LDLIBS=
++LDLIBS=$(LDFLAGS)
+
+ # Add the following to the end of the "CFLAGS=" line as needed.
+ # -Dconst= if `const' does not work (SunOS 4.x cc, OSF1 V5.0 cc)
+@@ -211,7 +211,7 @@
+ # before the first Monday in January when a "%V" format is used and January 1
+ # falls on a Friday, Saturday, or Sunday.
+
+-CFLAGS=
++CFLAGS += -std=gnu99
+
+ # If you want zic's -s option used when installing, uncomment the next line
+ # ZFLAGS= -s
+@@ -220,7 +220,7 @@
+ ZIC= $(zic) $(ZFLAGS)
+
+ # The name of a Posix-compliant `awk' on your system.
+-AWK= nawk
++AWK= awk
+
+ # The path where SGML DTDs are kept.
+ SGML_SEARCH_PATH= $(TOPDIR)/share/doc/sgml-lib/REC-html401-19991224/
+@@ -241,8 +241,10 @@
+
+ ###############################################################################
+
+-cc= cc
+-CC= $(cc) -DTZDIR=\"$(TZDIR)\"
++CC+= -DTZDIR=\"$(TZDIR)\"
++ifeq ($(NLS),1)
++CC += -DHAVE_GETTEXT=1 -DTZ_DOMAIN=\"libc\"
++endif
+
+ TZCSRCS= zic.c localtime.c asctime.c scheck.c ialloc.c
+ TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o
+@@ -282,14 +284,16 @@
+
+ ALL: all date
+
+-install: all $(DATA) $(REDO) $(TZLIB) $(MANS) $(TABDATA)
++install: all $(DATA) $(REDO) $(MANS) $(TABDATA)
+ $(ZIC) -y $(YEARISTYPE) \
+ -d $(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
+ -rm -f $(TZDIR)/iso3166.tab $(TZDIR)/zone.tab
+ cp iso3166.tab zone.tab $(TZDIR)/.
+- -mkdir $(TOPDIR) $(ETCDIR)
+- cp tzselect zic zdump $(ETCDIR)/.
+- -mkdir $(TOPDIR) $(MANDIR) \
++ -mkdir -p $(TOPDIR) $(SBINDIR)
++ cp zic zdump $(SBINDIR)/.
++ -mkdir -p $(TOPDIR) $(BINDIR)
++ cp tzselect $(BINDIR)/.
++ -mkdir -p $(TOPDIR) $(MANDIR) \
+ $(MANDIR)/man3 $(MANDIR)/man5 $(MANDIR)/man8
+ -rm -f $(MANDIR)/man3/newctime.3 \
+ $(MANDIR)/man3/newtzset.3 \
+@@ -298,13 +302,11 @@
+ $(MANDIR)/man8/zdump.8 \
+ $(MANDIR)/man8/zic.8
+ cp newctime.3 newtzset.3 $(MANDIR)/man3/.
+- cp tzfile.5 $(MANDIR)/man5/.
+- cp tzselect.8 zdump.8 zic.8 $(MANDIR)/man8/.
+
+ INSTALL: ALL install date.1
+- -mkdir $(TOPDIR) $(BINDIR)
++ -mkdir -p $(TOPDIR) $(BINDIR)
+ cp date $(BINDIR)/.
+- -mkdir $(TOPDIR) $(MANDIR) $(MANDIR)/man1
++ -mkdir -p $(TOPDIR) $(MANDIR) $(MANDIR)/man1
+ -rm -f $(MANDIR)/man1/date.1
+ cp date.1 $(MANDIR)/man1/.
+
+@@ -334,9 +336,9 @@
+ # You must replace all of $(TZDIR) to switch from not using leap seconds
+ # to using them, or vice versa.
+ other_two: zic leapseconds $(TDATA)
+- $(ZIC) -y $(YEARISTYPE) -d $(TZDIR)-posix -L /dev/null $(TDATA)
++ $(ZIC) -y $(YEARISTYPE) -d $(TZDIR)/posix -L /dev/null $(TDATA)
+ $(ZIC) -y $(YEARISTYPE) \
+- -d $(TZDIR)-leaps -L leapseconds $(TDATA)
++ -d $(TZDIR)/right -L leapseconds $(TDATA)
+
+ posix_right: posix_only other_two
+
+@@ -367,7 +369,7 @@
+ <$? >$@
+ chmod +x $@
+
+-check: check_tables check_web
++check: check_tables
+
+ check_tables: checktab.awk $(PRIMARY_YDATA)
+ $(AWK) -f checktab.awk $(PRIMARY_YDATA)
+diff -Naur src/tzselect.ksh src-p/tzselect.ksh
+--- src/tzselect.ksh 2007-08-20 16:47:42.000000000 +0200
++++ src-p/tzselect.ksh 2007-10-02 04:07:44.000000000 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/ksh
++#! /bin/bash
+
+ # '@(#)tzselect.ksh 8.1'
+
diff --git a/abs/core/tzdata/PKGBUILD b/abs/core/tzdata/PKGBUILD
new file mode 100644
index 0000000..544f1c7
--- /dev/null
+++ b/abs/core/tzdata/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 8190 2008-08-08 21:11:59Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=tzdata
+pkgver=2008e
+pkgrel=10
+_tzcode=2008e
+_tzdata=2008e
+pkgdesc="Sources for time zone and daylight saving time data"
+arch=('i686' 'x86_64')
+url="http://www.twinsun.com/tz/tz-link.htm"
+license=('GPL')
+groups=('base')
+depends=()
+makedepends=()
+options=()
+source=(ftp://elsie.nci.nih.gov/pub/tzcode${_tzcode}.tar.gz \
+ ftp://elsie.nci.nih.gov/pub/${pkgname}${_tzdata}.tar.gz \
+ Makefile.patch)
+md5sums=('12ec2d85324ddcba39db1471a03f486b'
+ '3b4578110a3d193ed9a00d61f27aba28'
+ 'a64ed97d1fc03c66ee8612c0d9f40507')
+
+build() {
+ cd ${srcdir}/
+
+ tar -xf tzcode${_tzcode}.tar.gz || return 1
+ tar -xf ${pkgname}${_tzdata}.tar.gz || return 1
+
+ patch -Np1 -i ../Makefile.patch || return 1
+
+ make || return 1
+ make DESTDIR="${pkgdir}" install
+
+ rm ${pkgdir}/usr/share/zoneinfo/localtime
+}
diff --git a/abs/core/tzdata/chile.patch b/abs/core/tzdata/chile.patch
new file mode 100644
index 0000000..38c389c
--- /dev/null
+++ b/abs/core/tzdata/chile.patch
@@ -0,0 +1,65 @@
+------- southamerica -------
+*** southamerica Wed Mar 5 14:40:25 2008
+--- southamerica Wed Mar 5 14:40:25 2008
+***************
+*** 1,4 ****
+! # @(#)southamerica 8.15
+ # <pre>
+
+ # This data is by no means authoritative; if you think you know better,
+--- 1,4 ----
+! # @(#)southamerica 8.18
+ # <pre>
+
+ # This data is by no means authoritative; if you think you know better,
+***************
+*** 759,764 ****
+--- 759,784 ----
+ # America/Santiago. The pre-1980 Pacific/Easter data are dubious,
+ # but we have no other source.
+
++ # From German Poo-Caaman~o (2008-03-03):
++ # Due to drought, Chile extends Daylight Time in three weeks. This
++ # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
++ # and Saturday 3/29 at 22:00 for Pacific/Easter)
++ # The Supreme Decree is located at
++ # <a href="http://www.shoa.cl/servicios/supremo316.pdf">
++ # http://www.shoa.cl/servicios/supremo316.pdf
++ # </a>
++ # and the instructions for 2008 are located in:
++ # <a href="http://www.horaoficial.cl/cambio.htm">
++ # http://www.horaoficial.cl/cambio.htm
++ # </a>.
++
++ # From José Miguel Garrido (2008-03-05):
++ # ...
++ # You could see the announces of the change on
++ # <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
++ # http://www.shoa.cl/noticias/2008/04hora/hora.htm
++ # </a>.
++
+ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+ Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
+ Rule Chile 1928 1932 - Apr 1 0:00 0 -
+***************
+*** 789,795 ****
+ Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+ Rule Chile 1999 only - Apr 4 3:00u 0 -
+ Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+! Rule Chile 2000 max - Mar Sun>=9 3:00u 0 -
+ # IATA SSIM anomalies: (1992-02) says 1992-03-14;
+ # (1996-09) says 1998-03-08. Ignore these.
+ # Zone NAME GMTOFF RULES FORMAT [UNTIL]
+--- 809,819 ----
+ Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+ Rule Chile 1999 only - Apr 4 3:00u 0 -
+ Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+! Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
+! # N.B.: the end of March 29 in Chile is March 30 in Universal time,
+! # which is used below in specifying the transition.
+! Rule Chile 2008 only - Mar 30 3:00u 0 -
+! Rule Chile 2009 max - Mar Sun>=9 3:00u 0 -
+ # IATA SSIM anomalies: (1992-02) says 1992-03-14;
+ # (1996-09) says 1998-03-08. Ignore these.
+ # Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
diff --git a/abs/core/udev/00-load-blacklist.rules b/abs/core/udev/00-load-blacklist.rules
new file mode 100644
index 0000000..b1a5faf
--- /dev/null
+++ b/abs/core/udev/00-load-blacklist.rules
@@ -0,0 +1 @@
+IMPORT{program} = "/lib/udev/mod-blacklist.sh"
diff --git a/abs/core/udev/51-arch.rules b/abs/core/udev/51-arch.rules
new file mode 100644
index 0000000..b06be93
--- /dev/null
+++ b/abs/core/udev/51-arch.rules
@@ -0,0 +1,191 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+# do not edit this file, it will be overwritten on update
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+# check if the device has already been claimed by a driver
+ACTION!="add", GOTO="drivers_end"
+DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+
+# SCSI addon modules
+SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+
+# SOUND addon modules
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-pcm-oss"
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-seq-oss"
+
+#PNP addon modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0800", RUN+="/lib/udev/load-modules.sh pcspkr"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc_cmos"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0510*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0511*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNPb02f", RUN+="/lib/udev/load-modules.sh analog"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0501", RUN+="/lib/udev/load-modules.sh ppp-generic"
+
+# PARPORT addon modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh lp"
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh ppdev"
+
+# fix ide cdrom detection on old proliant servers
+SUBSYSTEM=="pci", ENV{MODALIAS}=="pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00", RUN+="/lib/udev/load-modules.sh ide-generic"
+
+LABEL="drivers_end"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="cdsymlinks.sh"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+#####################################
+# Permissions and Symlinks - begin
+#####################################
+# fix /dev/root symlink
+SUBSYSTEM=="block", RUN+="root-link.sh"
+
+# permissions for IDE CD devices
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
+
+# permissions for SCSI CD devices
+SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", SYMLINK+="scd%n", GROUP="optical"
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", GROUP="optical"
+
+# permissions for removable devices like cardreaders or sticks
+KERNEL=="sd*", ATTRS{scsi_level}=="0", ATTRS{type}=="0", GROUP="storage"
+
+# permissions for firewire external drives
+KERNEL=="sd*", ATTRS{scsi_level}=="5", GROUP="storage"
+
+# permissions for usb to scsi external adapters
+KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="7", GROUP="storage"
+
+# permissions for ide storage like pcmcia card readers
+ACTION!="add", GOTO="pcmcia_end"
+SUBSYSTEM!="block", GOTO="pcmcia_end"
+KERNEL=="hd*[!0-9]", IMPORT{program}="ata_id --export $tempnode"
+KERNEL=="hd*", IMPORT{parent}=="ID_*"
+KERNEL=="hd*", ENV{ID_TYPE}=="generic", GROUP="storage"
+LABEL="pcmcia_end"
+
+# permissions for SCSI scanners
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="6", GROUP="scanner"
+
+# md block devices
+KERNEL=="md[0-9]*", NAME="md%n", SYMLINK+="md/%n"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+### xorg resets those permissions, adjust your xorg.conf!
+KERNEL=="nvidia*", GROUP="video"
+KERNEL=="3dfx*", GROUP="video"
+
+# i2c devices
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n", SYMLINK+="%k"
+
+# loop devices
+KERNEL=="loop[0-9]*", NAME="loop/%n", SYMLINK+="%k"
+
+# misc
+KERNEL=="nvram", NAME="misc/%k", SYMLINK+="%k", GROUP="kmem", MODE="0640"
+KERNEL=="psaux", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666"
+
+# sound devices
+# alsa devices
+SUBSYSTEM=="sound", GROUP="audio"
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hw[CD0-9]*", NAME="snd/%k"
+KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k"
+KERNEL=="midi[CD0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+# oss devices
+KERNEL=="audio*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dmmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="admmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="adsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="midi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="amidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="mixer*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="sequencer*", NAME="sound/%k", SYMLINK+="%k"
+
+# USB devices
+KERNEL=="hiddev*", NAME="usb/%k"
+KERNEL=="legousbtower*", NAME="usb/%k", MODE="0666"
+KERNEL=="dabusb*", NAME="usb/%k"
+
+# netlink devices
+KERNEL=="route", NAME="netlink/%k"
+KERNEL=="skip", NAME="netlink/%k"
+KERNEL=="usersock", NAME="netlink/%k"
+KERNEL=="fwmonitor", NAME="netlink/%k"
+KERNEL=="tcpdiag", NAME="netlink/%k"
+KERNEL=="nflog", NAME="netlink/%k"
+KERNEL=="xfrm", NAME="netlink/%k"
+KERNEL=="arpd", NAME="netlink/%k"
+KERNEL=="route6", NAME="netlink/%k"
+KERNEL=="ip6_fw", NAME="netlink/%k"
+KERNEL=="dnrtmsg", NAME="netlink/%k"
+### ! disabled seems to break device creation !
+# KERNEL=="tap*", NAME="netlink/%k"
+
+# CAPI devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20", GROUP="uucp"
+KERNEL=="capi*", NAME="capi/%n", GROUP="uucp"
+
+# IEEE1394 (firewire) devices
+KERNEL=="raw1394", NAME="%k", GROUP="video"
+
+# kbd devices
+KERNEL=="kbd", MODE="0664"
+
+#######################################
+# Permissions and Symlinks - end
+#######################################
diff --git a/abs/core/udev/PKGBUILD b/abs/core/udev/PKGBUILD
new file mode 100644
index 0000000..7c71a08
--- /dev/null
+++ b/abs/core/udev/PKGBUILD
@@ -0,0 +1,82 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+pkgname=udev
+pkgver=119
+pkgrel=10
+pkgdesc="The userspace dev tools (udev)"
+arch=(i686 x86_64)
+url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
+license=('GPL')
+groups=('base')
+depends=('glibc' 'coreutils' 'util-linux')
+install=udev.install
+backup=(etc/udev/udev.conf
+ etc/scsi_id.config
+ etc/udev/cdsymlinks.conf
+ etc/modprobe.d/framebuffer_blacklist)
+conflicts=('pcmcia-cs' 'hotplug')
+replaces=('devfsd')
+options=(!makeflags)
+source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/$pkgname-$pkgver.tar.bz2
+ migrate-udev start_udev 51-arch.rules load-modules.sh
+ cdrom-rules.patch cdsymlinks.sh root-link.sh readme-udev-arch.txt arch-udev-rules.patch)
+md5sums=('dd299c16371c9e14e52d79744bccf4c0'
+ '49434a593918c822077bc3af765f1aff'
+ 'a68a519d1ed8cbbd2f45c23eb32ea218'
+ '082e76ef9053495a5cade321817467cd'
+ '945f6d30ab458189b3c17f8e6722da1f'
+ '5de33ba31ce52ab4da47fe3ddd3c19ea'
+ '8424b78e9dd772e75b4ef90814807815'
+ '2d6dc6842464f107bccc68cd505a6c31'
+ '780db5316a762dc5cdcf52027ab8a8eb'
+ 'fab7fa68aa35f0595c0b2bd88c4dbfd9')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ make || return 1
+ make INSTALL=/bin/install DESTDIR=$startdir/pkg install \
+ EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id extras/firmware extras/floppy extras/scsi_id extras/usb_id extras/volume_id extras/path_id extras/rule_generator"
+
+ install -D -m755 extras/path_id/path_id $startdir/pkg/sbin/path_id
+ install -D -m755 $startdir/src/start_udev $startdir/pkg/etc/start_udev
+ install -D -m755 $startdir/src/migrate-udev $startdir/pkg/sbin/migrate-udev
+ install -D -m644 $startdir/src/51-arch.rules $startdir/pkg/etc/udev/rules.d/51-arch.rules
+ # install our module loading subsystem
+ install -D -m755 $startdir/src/load-modules.sh $startdir/pkg/lib/udev/load-modules.sh
+ # install cdsymlinks.sh
+ install -D -m755 $startdir/src/cdsymlinks.sh $startdir/pkg/lib/udev/cdsymlinks.sh
+ # install root-link.sh
+ install -D -m755 $startdir/src/root-link.sh $startdir/pkg/lib/udev/root-link.sh
+ # install instructions
+ install -D -m644 $startdir/src/readme-udev-arch.txt $startdir/pkg/etc/udev/readme-udev-arch.txt
+ # add devices dir
+ mkdir $startdir/pkg/lib/udev/devices
+ # disable error loggin to prevent startup failures printed to vc on boot
+ sed -i -e 's|udev_log="err"|udev_log="0"|g' $startdir/pkg/etc/udev/udev.conf
+ # install additional rules files
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/40-pilot-links.rules $startdir/pkg/etc/udev/rules.d/
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/64-device-mapper.rules $startdir/pkg/etc/udev/rules.d/
+ install -D -m 644 $startdir/src/$pkgname-$pkgver/etc/udev/packages/64-md-raid.rules $startdir/pkg/etc/udev/rules.d/
+ # fix 60-cdrom_id.rules
+ cd $startdir/pkg/etc/udev/rules.d/
+ patch -Np0 -i $startdir/src/cdrom-rules.patch || return 1
+ # fix standard udev rules to fit to arch
+ patch -Np0 -i $startdir/src/arch-udev-rules.patch || return 1
+ # fix program paths in rules files
+ for i in vol_id cdrom_id ata_id scsi_id path_id edd_id usb_id; do
+ sed -i -e "s#$i#/lib/udev/$i#g" $startdir/pkg/etc/udev/rules.d/*
+ done
+ # fix modprobe rules to use the load-modules.sh
+ sed -i -e "s#/sbin/modprobe#/lib/udev/load-modules.sh#g" $startdir/pkg/etc/udev/rules.d/*
+ # disable persistent cdromsymlinks and network by default
+ mv $startdir/pkg/etc/udev/rules.d/75-persistent-net-generator.rules \
+ $startdir/pkg/etc/udev/rules.d/75-persistent-net-generator.rules.optional
+ mv $startdir/pkg/etc/udev/rules.d/75-cd-aliases-generator.rules \
+ $startdir/pkg/etc/udev/rules.d/75-cd-aliases-generator.rules.optional
+ # create framebuffer blacklist
+ mkdir -p $startdir/pkg/etc/modprobe.d/
+ for mod in $(find /lib/modules/ -name '*fb*.ko' -exec basename {} .ko \;); do
+ echo "blacklist $mod" >> $startdir/pkg/etc/modprobe.d/framebuffer_blacklist
+ done
+}
diff --git a/abs/core/udev/arch-udev-rules.patch b/abs/core/udev/arch-udev-rules.patch
new file mode 100644
index 0000000..fc5ede0
--- /dev/null
+++ b/abs/core/udev/arch-udev-rules.patch
@@ -0,0 +1,151 @@
+--- 50-udev-default.rules.old 2008-03-09 17:52:59.000000000 +0100
++++ 50-udev-default.rules 2008-03-09 17:09:50.000000000 +0100
+@@ -4,12 +4,17 @@
+ KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"
+ KERNEL=="ptmx", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+ KERNEL=="tty", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+-KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", OPTIONS="last_rule"
+-KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty", OPTIONS="last_rule"
++KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", NAME="vc/%n", SYMLINK+="%k" OPTIONS="last_rule"
++KERNEL=="vcs", GROUP="tty", NAME="vcc/0", OPTIONS="last_rule"
++KERNEL=="vcs[0-9]*", GROUP="tty", NAME="vcc/%n", OPTIONS="last_rule"
++KERNEL=="vcsa", GROUP="tty", NAME="vcc/a0", OPTIONS="last_rule"
++KERNEL=="vcsa[0-9]*", GROUP="tty", NAME="vcc/a%n", OPTIONS="last_rule"
+ KERNEL=="console", MODE="0600", OPTIONS="last_rule"
+
+ # serial
+ KERNEL=="tty[A-Z]*|pppox*|ircomm*|noz*", GROUP="uucp"
++KERNEL=="ttyS[0-9]*", NAME="tts/%n", SYMLINK+="ttyS%n"
++KERNEL=="ttyUSB[0-9]*", NAME="tts/USB%n", SYMLINK+="%k"
+ KERNEL=="ppp", MODE="0600", OPTIONS+="ignore_remove"
+ KERNEL=="mwave", NAME="modems/mwave", GROUP="uucp"
+ KERNEL=="hvc*|hvsi*", GROUP="uucp"
+@@ -20,8 +25,7 @@
+ KERNEL=="null|zero|full|random|urandom", MODE="0666"
+ KERNEL=="null", SYMLINK+="XOR"
+ KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
+-KERNEL=="ram0", SYMLINK+="ramdisk"
+-KERNEL=="ram1", SYMLINK+="ram"
++KERNEL=="ram[0-9]*", NAME="rd/%n", SYMLINK+="%k"
+
+ # input
+ KERNEL=="mouse*|mice|event*", NAME="input/%k", MODE="0640"
+@@ -30,23 +34,30 @@
+
+ # video4linux
+ KERNEL=="vbi0", SYMLINK+="vbi"
++KERNEL=="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK+="%k", GROUP="video"
+ KERNEL=="radio0", SYMLINK+="radio"
++KERNEL=="radio[0-9]*", NAME="v4l/radio%n", SYMLINK+="radio%n", GROUP="video"
+ KERNEL=="video0", SYMLINK+="video"
++KERNEL=="video[0-9]*", NAME="v4l/video%n", SYMLINK+="%k", GROUP="video"
++KERNEL=="vtx0", SYMLINK+="vtx"
++KERNEL=="vtx[0-9]*", NAME="v4l/vtx%n", SYMLINK+="%k", GROUP="video"
+
+ # graphics
+-KERNEL=="agpgart", MODE="0600"
+-KERNEL=="card[0-9]*", NAME="dri/%k", MODE="0666"
++### xorg resets those permissions, adjust your xorg.conf!
++KERNEL=="agpgart", NAME="misc/%k", SYMLINK+="%k", GROUP="video", MODE="0600"
++KERNEL=="card[0-9]*", NAME="dri/%k", GROUP="video", MODE="0666"
++KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video"
+ KERNEL=="fb0", SYMLINK+="fb"
+
+ # DVB video
+-SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c"
++SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c", GROUP="video"
+
+ # Firewire
+-KERNEL=="dv1394*", SYMLINK+="dv1394/%n"
+-KERNEL=="video1394*", NAME="video1394/%n"
++KERNEL=="dv1394*", SYMLINK+="dv1394/%n", GROUP="video"
++KERNEL=="video1394*", NAME="video1394/%n", GROUP="video"
+
+ # firmware class requests
+-SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
++SUBSYSTEM=="firmware", ACTION=="add", ENV{FIRMWARE}=="?*", RUN+="firmware.sh"
+
+ # libusb device nodes
+ SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
+@@ -59,23 +70,20 @@
+ KERNEL=="irlpt[0-9]*", GROUP="lp"
+
+ # block, tapes, block-releated
+-SUBSYSTEM=="block", GROUP="disk", MODE="0640"
+-SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n"
++SUBSYSTEM=="block", GROUP="disk"
+ SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+ SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+-KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
+-KERNEL=="fd[0-9]", GROUP="floppy"
+-KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
++KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions", GROUP="floppy"
++KERNEL=="fd[0-9]*", NAME="fd%n", SYMLINK+="floppy/%n fd%nu1440 fd%nu720 fd%nh1200 fd%nu360", GROUP="floppy"
+ KERNEL=="sch[0-9]*", GROUP="disk"
+-KERNEL=="sg[0-9]*", ATTRS{type}!="3|6", GROUP="disk", MODE="0640"
+ KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="disk"
+ KERNEL=="pg[0-9]*", GROUP="disk"
+ KERNEL=="pt[0-9]*|npt[0-9]*", GROUP="disk"
+ KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
+ KERNEL=="rawctl", NAME="raw/%k", GROUP="disk"
+ SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", NAME="raw/%k", GROUP="disk"
+-KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k"
+-KERNEL=="pktcdvd", NAME="pktcdvd/control"
++KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k", GROUP="optical", MODE="0660"
++KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="optical", MODE="0660"
+ KERNEL=="qft0", SYMLINK+="ftape"
+ SUBSYSTEM=="bsg", NAME="bsg/%k"
+ SUBSYSTEM=="aoe", NAME="etherd/%k", GROUP="disk"
+@@ -84,13 +92,13 @@
+ KERNEL=="tun", NAME="net/%k", MODE="0666", OPTIONS+="ignore_remove"
+
+ # CPU
+-KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+-KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
++KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid", SYMLINK="%k"
++KERNEL=="msr[0-9]*", NAME="cpu/%n/msr", SYMLINK="%k"
+ KERNEL=="microcode", NAME="cpu/microcode", MODE="0600"
+
+ # miscellaneous
+ KERNEL=="fuse", MODE="0666"
+-KERNEL=="rtc|rtc0", MODE="0644"
++KERNEL=="rtc*", NAME="misc/%k", SYMLINK+="%k", GROUP="audio", MODE="0664"
+ KERNEL=="rtc0", SYMLINK+="rtc"
+ KERNEL=="auer[0-9]*", NAME="usb/%k"
+ KERNEL=="hw_random", NAME="hwrng", SYMLINK+="%k"
+--- 60-persistent-storage.rules.old 2008-03-09 17:52:59.000000000 +0100
++++ 60-persistent-storage.rules 2008-03-09 15:05:13.000000000 +0100
+@@ -3,11 +3,13 @@
+ # persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path}
+ # scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+-ACTION!="add|change", GOTO="persistent_storage_end"
++# needed like this!!!
++ACTION!="add|change", GOTO="persistent_storage_end"
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++# don't add dm-*!!!
++KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+--- 80-drivers.rules~ 2008-03-15 00:05:02.000000000 +0100
++++ 80-drivers.rules 2008-03-21 21:44:28.000000000 +0100
+@@ -3,10 +3,11 @@
+ ACTION!="add", GOTO="drivers_end"
+
+ DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/sbin/modprobe $env{MODALIAS}"
+-SUBSYSTEM=="pnp", DRIVER!="?*", ENV{MODALIAS}!="?*", \
+- RUN{ignore_error}+="/bin/sh -c '/sbin/modprobe -a $$(while read id; do echo pnp:d$$id; done < /sys$devpath/id)'"
+-SUBSYSTEM=="tifm", RUN+="/sbin/modprobe --all tifm_sd tifm_ms"
+-SUBSYSTEM=="memstick", RUN+="/sbin/modprobe --all ms_block mspro_block"
++SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", DRIVER!="?*", RUN{ignore_error}+="/bin/sh -c 'while read id; do /lib/udev/load-modules.sh pnp:d$$id; /lib/udev/load-modules.sh pnp:c$$id ; done < /sys$devpath/id'"
++SUBSYSTEM=="tifm", RUN+="/sbin/modprobe tifm_sd"
++SUBSYSTEM=="tifm", RUN+="/sbin/modprobe tifm_ms"
++SUBSYSTEM=="memstick", RUN+="/sbin/modprobe ms_block"
++SUBSYSTEM=="memstick", RUN+="/sbin/modprobe mspro_block"
+ SUBSYSTEM=="mmc", RUN+="/sbin/modprobe mmc_block"
+ SUBSYSTEM=="i2o", RUN+="/sbin/modprobe i2o_block"
+ SUBSYSTEM=="ide", ATTR{media}=="tape", RUN+="/sbin/modprobe ide-scsi"
diff --git a/abs/core/udev/cdrom-rules.patch b/abs/core/udev/cdrom-rules.patch
new file mode 100644
index 0000000..9b3518a
--- /dev/null
+++ b/abs/core/udev/cdrom-rules.patch
@@ -0,0 +1,8 @@
+--- 60-cdrom_id.rules.old 2006-09-07 09:57:04.000000000 +0200
++++ 60-cdrom_id.rules 2006-09-07 11:29:31.000000000 +0200
+@@ -1,3 +1,4 @@
+ # import optical drive properties
+
+-KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
++KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
++KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="path_id %p"
diff --git a/abs/core/udev/cdsymlinks.sh b/abs/core/udev/cdsymlinks.sh
new file mode 100755
index 0000000..c4185ac
--- /dev/null
+++ b/abs/core/udev/cdsymlinks.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Creates cdsymlinks in /dev
+# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+if [ -d /dev/cd ]; then
+ rm /dev/cdrom*
+ rm /dev/cdrw*
+ rm /dev/dvd*
+ rm /dev/dvdrw*
+ for i in /dev/cd/cdrom-*; do
+ if [ -h $i ]; then
+ [ "$CD_NUMBER" = "" ] && ln -s $i /dev/cdrom
+ [ "$CD_NUMBER" = "" ] && CD_NUMBER="-1"
+ ! [ "$CD_NUMBER" = "" ] && CD_NUMBER="$((CD_NUMBER+1))" && ln -s $i /dev/cdrom$CD_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/cdrw-*; do
+ if [ -h $i ]; then
+ [ "$CDRW_NUMBER" = "" ] && ln -s $i /dev/cdrw
+ [ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="-1"
+ ! [ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="$((CDRW_NUMBER+1))" && ln -s $i /dev/cdrw$CDRW_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/dvd-*; do
+ if [ -h $i ]; then
+ [ "$DVD_NUMBER" = "" ] && ln -s $i /dev/dvd
+ [ "$DVD_NUMBER" = "" ] && DVD_NUMBER="-1"
+ ! [ "$DVD_NUMBER" = "" ] && DVD_NUMBER="$((DVD_NUMBER+1))" && ln -s $i /dev/dvd$DVD_NUMBER
+ fi
+ done
+
+ for i in /dev/cd/dvdrw-*; do
+ if [ -h $i ]; then
+ [ "$DVDRW_NUMBER" = "" ] && ln -s $i /dev/dvdrw
+ [ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="-1"
+ ! [ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="$((DVDRW_NUMBER+1))" && ln -s $i /dev/dvdrw$DVDRW_NUMBER
+ fi
+ done
+else
+ rm /dev/cdrom*
+ rm /dev/cdrw*
+ rm /dev/dvd*
+ rm /dev/dvdrw*
+fi
diff --git a/abs/core/udev/load-modules.sh b/abs/core/udev/load-modules.sh
new file mode 100755
index 0000000..861b942
--- /dev/null
+++ b/abs/core/udev/load-modules.sh
@@ -0,0 +1,60 @@
+#! /bin/bash
+# Implement blacklisting for udev-loaded modules
+
+[ $# -ne 1 ] && exit 1
+
+. /etc/rc.conf
+
+# grab modules from rc.conf
+BLACKLIST="${MOD_BLACKLIST[@]}"
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+ #parse cmdline entries of the form "disablemodules=x,y,z"
+ if [ -n "$disablemodules" ]; then
+ BLACKLIST="$BLACKLIST $(echo $disablemodules | sed 's|,| |g')"
+ fi
+ if [ "$load_modules" == "off" ]; then
+ MOD_AUTOLOAD="no"
+ fi
+fi
+
+#MODULES entries in rc.conf that begin with ! are blacklisted
+for mod in ${MODULES[@]}; do
+ if [ "${mod}" != "${mod#!}" ]; then
+ BLACKLIST="$BLACKLIST ${mod#!}"
+ fi
+done
+
+
+if [ "$MOD_AUTOLOAD" = "yes" -o "$MOD_AUTOLOAD" = "YES" ]; then
+ if [ -n "$BLACKLIST" ]; then
+ depmods="$(/sbin/modprobe -i --show-depends $1)"
+ if [ $? -ne 0 ]; then
+ /usr/bin/logger -p info "cannot find module $1"
+ exit 1
+ fi
+
+ #sanitize our module names
+ depmods="$(echo "$depmods" | sed \
+ -e "s#^insmod /lib.*/\(.*\)\.ko.*#\1#g" \
+ -e 's|-|_|g')"
+
+ for mod in $depmods; do
+ if echo $BLACKLIST | /bin/grep "\<$mod\>" 2>&1 >/dev/null; then
+ /usr/bin/logger -p info "udev load-modules: $1 is blacklisted"
+ exit 1
+ fi
+ done
+ fi
+ /sbin/modprobe $1
+else
+ #/usr/bin/logger -p info \
+ echo \
+ "udev load-modules: autoloading is disabled, not loading $1"
+fi
+# vim: set et ts=4:
diff --git a/abs/core/udev/migrate-udev b/abs/core/udev/migrate-udev
new file mode 100644
index 0000000..a7a24c9
--- /dev/null
+++ b/abs/core/udev/migrate-udev
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# This script will create static system-critical device nodes in your /dev
+# tree so the initscripts can get by without devfs/udev long enough to start
+# up devfs/udev.
+
+STARTDIR=`pwd`
+TMPDIR=`mktemp -d`
+ROOT=/
+[ "$1" != "" ] && ROOT=$1
+
+mount --bind $ROOT $TMPDIR
+cd $TMPDIR
+
+echo -n "creating device nodes: "
+rm -f dev/console
+rm -f dev/null
+rm -f dev/zero
+mknod dev/console c 5 1
+echo -n "console "
+mknod -m 666 dev/null c 1 3
+echo -n "null "
+mknod -m 666 dev/zero c 1 5
+echo -n "zero "
+echo
+
+cd $STARTDIR
+umount $TMPDIR
+rm -rf $TMPDIR
diff --git a/abs/core/udev/mod-blacklist.sh b/abs/core/udev/mod-blacklist.sh
new file mode 100755
index 0000000..264192a
--- /dev/null
+++ b/abs/core/udev/mod-blacklist.sh
@@ -0,0 +1,47 @@
+#! /bin/bash
+# Export a combined blacklist of all modules
+# for use by the load-modules script
+#
+# NOTE: we only need bash because of rc.conf, but this
+# is a one-time use script, so we're good
+
+. /etc/rc.conf
+
+# grab modules from rc.conf
+BLACKLIST="${MOD_BLACKLIST[@]}"
+
+if [ -f /proc/cmdline ]; then
+ for cmd in $(cat /proc/cmdline); do
+ case $cmd in
+ *=*) eval $cmd ;;
+ esac
+ done
+ #parse cmdline entries of the form "disablemodules=x,y,z"
+ if [ -n "$disablemodules" ]; then
+ BLACKLIST="$BLACKLIST $(echo $disablemodules | sed 's|,| |g')"
+ fi
+ if [ "$load_modules" == "off" ]; then
+ MOD_AUTOLOAD="no"
+ fi
+fi
+
+# blacklist framebuffer modules
+DRIVER_DIR="/lib/modules/$(uname -r)/kernel/drivers/"
+for x in $DRIVER_DIR/video/*/*fb*; do
+ BLACKLIST="$BLACKLIST $(basename $x .ko)"
+done
+for x in $DRIVER_DIR/video/*fb*; do
+ BLACKLIST="$BLACKLIST $(basename $x .ko)"
+done
+
+#MODULES entries in rc.conf that begin with ! are blacklisted
+for mod in ${MODULES[@]}; do
+ if [ "${mod}" != "${mod#!}" ]; then
+ BLACKLIST="$BLACKLIST ${mod#!}"
+ fi
+done
+
+echo "MOD_AUTOLOAD=\"$MOD_AUTOLOAD\""
+echo "BLACKLIST=\"$BLACKLIST\""
+
+# vim: set et ts=4:
diff --git a/abs/core/udev/readme-udev-arch.txt b/abs/core/udev/readme-udev-arch.txt
new file mode 100644
index 0000000..ac4a693
--- /dev/null
+++ b/abs/core/udev/readme-udev-arch.txt
@@ -0,0 +1,264 @@
+==========================
+Cold/Hotplugging with Udev
+==========================
+Version 1.1.5
+written by Tobias Powalowski <tpowa@archlinux.org>
+
+---------------
+* Requirements:
+---------------
+- recommended kernel >=2.6.18 for this udev to work properly.
+- No more DevFS device paths! If you have them, update /etc/fstab:
+ /dev/discs/... etc. has been deprecated in favor of the old style:
+ /dev/discs/disc0/part1 -> /dev/hda1
+ /dev/discs/disc1/part2 -> /dev/hdb2
+- /etc/modprobe.conf should be cleaned from old install entries (see below).
+
+---------------
+* Udev Changes:
+---------------
+- The syntax of udev rules has been changed in >=098 release, please update your rules.
+ --- Snip Changelog Udev 098
+ Renaming of some key names:
+ BUS -> SUBSYSTEMS
+ ID -> KERNELS
+ SYSFS -> ATTRS
+ DRIVER -> DRIVERS
+ ATTR{file}="value" can be used now, to write to a sysfs file of the
+ event device. Instead of:
+ ..., SYSFS{type}=="0|7|14", RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'"
+ we now can do:
+ ..., ATTR{type}=="0|7|14", ATTR{timeout}="60"
+ All the PHYSDEV* keys are deprecated and will be removed from a
+ future kernel:
+ PHYDEVPATH - is the path of a parent device and should not be
+ needed at all.
+ PHYSDEVBUS - is just a SUBSYSTEM value of a parent, and can be
+ matched with SUBSYSTEMS==
+ PHYSDEVDRIVER - for bus devices it is available as ENV{DRIVER}.
+ Newer kernels will have DRIVER in the environment,
+ for older kernels udev puts in. Class device will
+ no longer carry this property of a parent and
+ DRIVERS== can be used to match such a parent value.
+ Note that ENV{DRIVER} is only available for a few bus devices, where
+ the driver is already bound at device event time. On coldplug, the
+ events for a lot devices are already bound to a driver, and they will have
+ that value set. But on hotplug, at the time the kernel creates the device,
+ it can't know what driver may claim the device after that, therefore
+ in most cases it will be empty.
+ --- snap Changelog Udev 098
+- optional udev >= 099 Persistent rules generator for network and cd/dvd devices was added.
+
+---------------
+* How it works:
+---------------
+- Udev replaces the functionality of hotplug and hwdetect scripts.
+- Udev does autoloading of modules and coldplugging.
+- Udev loads the modules simultaneously, which is much faster,
+ but can cause some troubles with multiple network/sound/etc devices
+ (see below).
+- To reload your rules please use /etc/start_udev.
+
+======================
+* Autoloading modules:
+======================
+
+-------------------------------------------------------------------------
+* Module autoloading is controlled by MOD_AUTOLOAD="" in /etc/rc.conf
+-------------------------------------------------------------------------
+MOD_AUTOLOAD="yes" in /etc/rc.conf is necessary:
+- if you want module autodetection
+- if you want modules be loaded by udev (hotplugging and coldplugging)
+
+MOD_AUTOLOAD="no" is necessary:
+- if you want to load modules strictly using 'modprobe <module>'
+- if you want to load only the modules listed in the MODULES=() array
+ in /etc/rc.conf
+
+---------------
+* Blacklisting:
+---------------
+- means udev will never try to load the module, even if MOD_AUTOLOAD="yes"
+ is set.
+
+You can do this in 2 ways:
+- MOD_BLACKLIST=(moduleA moduleB)
+- MODULES=(!moduleA !moduleB)
+
+Both entries mean the same thing to udev. MOD_BLACKLIST was used by hwdetect.
+hwdetect does not understand the MODULES= syntax, but it doesn't have to -- it
+is only used in mkinitrd now.
+
+==================================
+* Boot parameter: load_modules=off
+==================================
+
+- No modules are loaded during boot using udev autoloading or the MODULES array
+- Useful for repairing your system if something goes wrong during udev startup
+ and/or during loading modules
+
+==================================
+* Boot parameter: disablemodules=
+==================================
+
+- list modules there that shouldn't be loaded by udev
+- Syntax: disablemodules=module1,module2,module3,...
+- Useful for repairing your system if something goes wrong during udev startup
+ and/or during loading modules and you know the module that causes the trouble.
+
+========================================
+* Persistent CD/DVD symlinks (optional):
+========================================
+
+- To enable this feature copy in /etc/udev/rules.d
+ 75-cd-aliases-generator.rules.optinal
+ to 75-cd-aliases-generator.rules
+ Also disable this part in /etc/udev/rules.d/40-arch.rules by putting a # in front:
+ --- snip
+ ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+ ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+--- snap
+
+- To get the same device name for CD/DVD symlinks each time you boot,
+ a rule will be generated during bootup or by executing /etc/start_udev.
+- Examples: dvd, cdrom ,cdrw etc.
+- If you want to change those links,
+ modify '/etc/udev/rules.d/70-peristent-cd.rules' to your needs.
+
+Known issues:
+The symlink name is then bound to the hardware pci adress,
+if you change your CD/DVD device, you have to check the
+/etc/udev/rules.d/70-peristent-net.rules file for correctness.
+
+======================================
+* Persistent Network names (optional):
+======================================
+
+- To enable this feature copy in /etc/udev/rules.d
+ 75-persistent-net-generator.rules.optional
+ to 75-persistent-net-generator.rules
+- To get the same network device name each time you boot,
+ a rule will be generated during bootup or by executing /etc/start_udev.
+- Examples: eth0, eth1, wlan0 etc.
+- If you want to change those names,
+ modify '/etc/udev/rules.d/70-peristent-net.rules' to your needs.
+- NAME= determines the name of your network card. Use these names in your
+ network configuration in rc.conf as well.
+
+Known issues:
+The interface name is then bound to the hardware mac adress,
+if you change your network card, you have to check the
+/etc/udev/rules.d/70-peristent-net.rules file for correctness.
+
+====================================
+* Known Problems Hardware:
+====================================
+
+- BusLogic devices are broken and will cause a freeze during startup
+Solution:
+This is a kernel bug and no fix has been provided yet.
+
+- PCMCIA Card readers are not treated as removabel devices.
+Solution:
+To get access to them with hal's pmount backend add them to /etc/pmount.allow
+
+====================================
+* Known Problems MOD_AUTOLOAD="yes":
+====================================
+
+-----------------------------------------------------------------------------
+* Sound is not working or modules (eg. parport) are not loaded automatically:
+-----------------------------------------------------------------------------
+Solution:
+- Do you have a clean /etc/modprobe.conf?
+ - A clean /etc/modprobe.conf is empty. The stock modprobe.conf file
+ contains nothing
+- alsaconf can write output to modprobe.conf. Please keep that in mind.
+
+---------------------------------------------
+* Devices get mixed up eg. Network/Soundcards
+---------------------------------------------
+- Because udev loads all the modules at once, sometimes devices are initialized
+ in different orders (eg. network cards switch eth0 and eth1, sound cards
+ the same)
+
+Solution:
+- Load them in MODULES=() array in the order you need them
+- eg: MODULES=(moduleA moduleB)
+
+Second solution for network:
+- The "proper" way to configure net interfaces to hold static names within
+ udev rules. Add lines like these to a custom rules file such as
+ /etc/udev/rules.d/01-network.rules:
+ SUBSYSTEM=="net", SYSFS{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
+ SUBSYSTEM=="net", SYSFS{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"
+
+- To get the right mac address use this command:
+ udevinfo -a -p /sys/class/net/<yourdevice>
+- Make sure you use lower-case hex values in your udev rules.
+- NAME= determines the name of your network card. Use these names in your
+ network configuration in rc.conf as well.
+
+Third solution for network:
+- check Persistent Network part
+
+-----------------------------------
+* Network 8139too & 8139cp problem:
+-----------------------------------
+- Both modules have the same kernel entry, which can cause problems.
+Solution:
+- Enter the one you need in MODULES=() and blacklist the other one
+- eg: MODULES=(!8139cp 8139too)
+- The example tells udev to ignore 8139cp module and load 8139too afterwards.
+
+--------------------------------------------------------
+* You need a special loading order to get devices going:
+--------------------------------------------------------
+- Kernel loads modules in wrong order.
+Solution:
+- Load them in the correct order in MODULES=()
+
+-----------------------------
+* Module is not autodetected:
+-----------------------------
+- If your device does not provide a modalias in /sys it cannot be autodetected.
+- If modalias is not combined to a kernel module it cannot be autodetected.
+Known modules that are not autodetected:
+- SCSI CONTROLLER:
+ scsi_transport_sas ultrastor qlogicfas eata BusLogic pas16 wd7000 sym53c416
+ g_NCR5380_mmio fdomain u14-34f dtc initio in2000 imm t128 aha1542 aha152x
+ atp870u g_NCR5380 NCR53c406a qlogicfas408 megaraid_mm advansys
+- NETWORK CARDS:
+ hp ne de4x5 wd cs89x0 eepro smc9194 seeq8005 ni52 ni65 ac3200 smc-ultra
+ at1700 hp-plus depca eexpress 82596 de600 eth16i de620 lance ewrk3 e2100
+ lp486e 3c501 3c503 3c505 3c507 3c509 3c515 myri10ge
+Solution:
+- Enter the one you need in MODULES=()
+
+=======================================
+* Known Problems with MOD_AUTOLOAD="no"
+=======================================
+
+-----------------------------------------------------------------
+* Modules are not loaded anymore during coldplug or hotplug event
+-----------------------------------------------------------------
+- Udev is usually responsible for this, but the MOD_AUTOLOAD switch will
+ now disable it. If you want automatic hot/cold-plugging, turn on
+ MOD_AUTOLOAD. Otherwise you will have to load all your modules manually,
+ either with /sbin/modprobe or entries in the MODULES=() array.
+Solution:
+- For bootup (coldplug) enter this in rc.conf: MODULES=(moduleA moduleB)
+- After bootup (hotplug) use this: modprobe <moduleA>
+
+=========================================
+* Known problems for custom kernel users:
+=========================================
+
+----------------------------
+* Udev doesn't start at all:
+----------------------------
+- Check Requirements list
diff --git a/abs/core/udev/root-link.sh b/abs/core/udev/root-link.sh
new file mode 100755
index 0000000..05273fe
--- /dev/null
+++ b/abs/core/udev/root-link.sh
@@ -0,0 +1,7 @@
+#! /bin/sh
+# Creates root symlink in /dev
+# for Arch Linux by Roman Kyrylych <Roman.Kyrylych@gmail.com>
+
+if ! [ -L /dev/root ]; then
+ln -s $(cat /proc/cmdline | sed "s: :\n:g" | grep root= | sed "s:root=::") /dev/root
+fi \ No newline at end of file
diff --git a/abs/core/udev/start_udev b/abs/core/udev/start_udev
new file mode 100755
index 0000000..03c38fd
--- /dev/null
+++ b/abs/core/udev/start_udev
@@ -0,0 +1,137 @@
+#! /bin/sh
+#
+# start_udev
+# script to initialize /dev by using udev.
+#
+# Modified for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# Inspired by:
+#
+# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+#
+# Released under the GPL v2 only.
+#
+# This needs to be run at the earliest possible point in the boot
+# process.
+#
+# Based on the udev init.d script
+#
+# Thanks go out to the Gentoo developers for proving
+# that this is possible to do.
+#
+# Yes, it's very verbose, feel free to turn off all of the echo calls,
+# they were there to make me feel better that everything was working
+# properly during development...
+#
+
+prog=udev
+sysfs_dir=/sys
+bin=/sbin/udev
+udevd=/sbin/udevd
+udev_root="/dev"
+
+starttime=$(date +%s)
+
+
+function trigger_builtin_events() {
+ list="$(echo /sys/class/tty/ttyS*/uevent)"
+ for i in $list; do
+ case "$i" in
+ */class/uevent|*\**)
+ continue
+ ;;
+ */class/tty/ttyS*)
+ echo "add" > "$i"
+ ;;
+ esac
+ done
+ }
+
+function trigger_device_events() {
+ /sbin/udevtrigger
+}
+
+function wait_for_queue() {
+# loop=20
+# while ! [ "$loop" -gt 0 -a -d /dev/.udev/queue ]; do
+# sleep 0.1;
+# loop=$(($loop - 1))
+# done
+ /sbin/udevsettle
+}
+
+make_extra_nodes () {
+ # there are a few things that sysfs does not export for us.
+ # these things go here (and remember to remove them in
+ # remove_extra_nodes()
+ #
+ # Thanks to Gentoo for the initial list of these.
+ ln -snf /proc/self/fd $udev_root/fd
+ ln -snf /proc/self/fd/0 $udev_root/stdin
+ ln -snf /proc/self/fd/1 $udev_root/stdout
+ ln -snf /proc/self/fd/2 $udev_root/stderr
+ ln -snf /proc/kcore $udev_root/core
+
+ mkdir $udev_root/pts
+ mkdir $udev_root/shm
+}
+
+udev_init () {
+# don't use udev if sysfs is not mounted.
+if [ ! -d $sysfs_dir/block ]; then
+ exit 1
+fi
+
+echo "mounting... ramfs at $udev_root"
+mount -n -t ramfs none $udev_root
+
+# propogate /udev from /sys
+echo "Creating initial udev device nodes:"
+
+#echo "making extra nodes"
+make_extra_nodes
+
+# check if udevd is already running
+if [ `pidof -o %PPID /sbin/udevd` ]; then
+ grep -v "/dev/shm" /etc/mtab | grep -v "/dev/pts" > /etc/mtab
+ mount /dev/pts
+ mount /dev/shm
+else
+ echo "start udev daemon"
+ /sbin/udevd --daemon
+fi
+case "$(uname -r)" in
+ 2.6.[0-9]|2.6.[0-9][!0-9]*) ;;
+ *) if [ -f "/sys/class/tty/console/uevent" ]; then
+ echo "Kernel >= 2.6.15 and supports uevents"
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ # catch events that are real fast
+ mkdir -p /dev/.udev/queue
+ trigger_builtin_events
+ else
+ # for older kernels without uevents will be removed when udevstart dies in udev
+ echo "Kernel does not support uevents, you need a kernel >= 2.6.15!"
+ exit 1
+ fi
+ ;;
+esac
+}
+
+udev_uevents () {
+# configure all devices
+trigger_device_events
+# until we know how to do better, just wait for _all_ events to finish
+wait_for_queue
+}
+
+if [ $# -eq 0 ]; then
+udev_init
+udev_uevents
+fi
+
+[ "$1" = "init" ] && udev_init
+[ "$1" = "uevents" ] && udev_uevents
+
+echo "udev startup is finished! - time = $(( `date +%s` - $starttime ))"
+exit 0
diff --git a/abs/core/udev/udev.install b/abs/core/udev/udev.install
new file mode 100644
index 0000000..19d3546
--- /dev/null
+++ b/abs/core/udev/udev.install
@@ -0,0 +1,22 @@
+# arg 1: the new package version
+post_install() {
+ sbin/migrate-udev `pwd`
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+if [ "$(vercmp $2 100)" -lt 0 ]; then
+ echo "ATTENTION UDEV:"
+ echo "----------"
+ echo "udev >=098 rules syntax has changed, please update your own rules."
+ echo "udev >=099 Added persistent network and CD/DVD Symlink generator rules."
+ echo "Please read the instructions carefully before reboot."
+ echo "They are located in /etc/udev/readme-udev-arch.txt"
+ echo "----------"
+fi
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/udev/udev.rules b/abs/core/udev/udev.rules
new file mode 100644
index 0000000..f789e50
--- /dev/null
+++ b/abs/core/udev/udev.rules
@@ -0,0 +1,456 @@
+# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
+#
+# This ruleset should provide a DevFS-compatible device tree.
+#
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %k the kernel name for the device.
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute.
+# %% the '%' char itself.
+#
+# There are a number of modifiers that are allowed to be used in some of the
+# fields. See the udev man page for a full description of them.
+# global stuff
+#
+
+#####################################
+# Early rules - begin
+#####################################
+# wait for sysfs
+ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
+# Setting timeout for tape-devices (type 1) to 900 seconds
+# and 60 seconds for device types 0, 7 and 14
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+#####################################
+# Early rules -end
+#####################################
+
+#####################################
+###### Hotplug rules - begin
+#####################################
+# check if the device has already been claimed by a driver
+ENV{DRIVER}=="?*", SUBSYSTEM!="input", GOTO="hotplug_driver_loaded"
+ACTION!="add", GOTO="hotplug_not_add_event"
+
+#Skip auto-loading of framebuffer devices
+KERNEL=="fb[0-9]*", GOTO="hotplug_driver_loaded"
+
+# Modaliases to load
+ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+
+# SCSI addon modules
+SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st"
+SUBSYSTEM=="scsi", ATTRS{type}=="[235689]", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg"
+
+# load sg module for burners
+SUBSYSTEM=="block", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sg"
+
+# MMC block devices
+SUBSYSTEM=="mmc", RUN+="/lib/udev/load-modules.sh mmc_block"
+
+# I2O block devices
+SUBSYSTEM=="i2o", RUN+="/lib/udev/load-modules.sh i2o_block"
+
+# Skip already claimed drivers
+DRIVERS=="?*", GOTO="hotplug_driver_loaded"
+
+# PNP modules
+SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", RUN{ignore_error}+="/bin/sh -c 'while read id; do /lib/udev/load-modules.sh pnp:d$$id; /lib/udev/load-modules.sh pnp:c$$id ; done < /sys$devpath/id'"
+
+# SOUND addon modules
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-pcm-oss"
+SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-seq-oss"
+
+LABEL="hotplug_driver_loaded"
+
+#PNP addon modules
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0800", RUN+="/lib/udev/load-modules.sh pcspkr"
+# not needed anymore with kernel >= 2.6.21
+#ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0b00", RUN+="/lib/udev/load-modules.sh rtc_cmos"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0510*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0511*", RUN+="/lib/udev/load-modules.sh irtty-sir"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNPb02f", RUN+="/lib/udev/load-modules.sh analog"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0501", RUN+="/lib/udev/load-modules.sh ppp-generic"
+
+# PARPORT addon modules
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh lp"
+ACTION=="add", SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh ppdev"
+
+# fix ide cdrom detection on old proliant servers
+ACTION=="add", SUBSYSTEM=="pci", ENV{MODALIAS}=="pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00", RUN+="/lib/udev/load-modules.sh ide-generic"
+
+# FIRMWARE
+ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", RUN+="/lib/udev/firmware.sh"
+LABEL="hotplug_not_add_event"
+#####################################
+##### Hotplug rules - end
+#####################################
+
+#####################################
+###### CD/DVD symlinks - begin
+#####################################
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
+ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
+ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
+ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b"
+ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="/lib/udev/cdsymlinks.sh"
+#####################################
+###### CD/DVD symlinks - end
+#####################################
+
+# fix /dev/root symlink
+SUBSYSTEM=="block", RUN+="/lib/udev/root-link.sh"
+
+#####################################
+# Permissions and Symlinks - begin
+#####################################
+# default permissions for all block devices
+SUBSYSTEM=="block", GROUP="disk"
+
+# permissions for IDE CD devices
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
+
+# permissions for SCSI CD devices
+SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", SYMLINK+="scd%n", GROUP="optical"
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", GROUP="optical"
+
+# permissions for IDE floppy devices
+SUBSYSTEMS=="ide", KERNEL=="hd*", ATTRS{media}=="floppy*", NAME{all_partitions}="%k", GROUP="floppy"
+
+# permissions for removable devices like cardreaders or sticks
+KERNEL=="sd*", ATTRS{scsi_level}=="0", ATTRS{type}=="0", GROUP="storage"
+
+# permissions for firewire external drives
+KERNEL=="sd*", ATTRS{scsi_level}=="5", GROUP="storage"
+
+# permissions for usb to scsi external adapters
+KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="7", GROUP="storage"
+
+# permissions for ide storage like pcmcia card readers
+ACTION!="add", GOTO="pcmcia_end"
+SUBSYSTEM!="block", GOTO="pcmcia_end"
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*", IMPORT{parent}=="ID_*"
+KERNEL=="hd*", ENV{ID_TYPE}=="generic", GROUP="storage"
+LABEL="pcmcia_end"
+
+# permissions for SCSI scanners
+SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="6", GROUP="scanner"
+
+# pty and tty legacy devices
+KERNEL=="pty[a-z][a-z,0-9]*", NAME="legacy/%k", OPTIONS="last_rule"
+KERNEL=="tty[a-z][a-z,0-9]*", NAME="legacy/%k", OPTIONS="last_rule"
+
+# md block devices
+KERNEL=="md[0-9]*", NAME="md%n", SYMLINK+="md/%n"
+
+# device-mapper
+KERNEL=="device-mapper", NAME="mapper/control"
+
+# floppy devices
+KERNEL=="fd[0-9]*", NAME="fd%n", SYMLINK+="floppy/%n fd%nu1440 fd%nu720 fd%nh1200 fd%nu360", GROUP="floppy"
+
+# tty devices
+SUBSYSTEM=="tty", GROUP="tty"
+KERNEL=="tty[0-9]*", NAME="vc/%n", SYMLINK+="%k"
+KERNEL=="ttyS[0-9]*", NAME="tts/%n", SYMLINK+="ttyS%n"
+KERNEL=="ttyUSB[0-9]*", NAME="tts/USB%n", SYMLINK+="%k"
+
+# vc devices
+KERNEL=="vcs", NAME="vcc/0", OPTIONS="last_rule"
+KERNEL=="vcs[0-9]*", NAME="vcc/%n", OPTIONS="last_rule"
+KERNEL=="vcsa", NAME="vcc/a0", OPTIONS="last_rule"
+KERNEL=="vcsa[0-9]*", NAME="vcc/a%n", OPTIONS="last_rule"
+KERNEL=="ptmx", MODE="0666", OPTIONS="last_rule"
+KERNEL=="tty", MODE="0666", OPTIONS="last_rule"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; A=$${K%%%%.*}; D=$${K#*.}; echo dvb/adapter$$A/$$D'", \
+ NAME="%c", GROUP="video"
+### xorg resets those permissions, adjust your xorg.conf!
+KERNEL=="nvidia*", GROUP="video"
+KERNEL=="card[0-9]*", NAME="dri/%k", GROUP="video"
+KERNEL=="3dfx*", GROUP="video"
+
+# v4l devices
+KERNEL=="video[0-9]*", NAME="v4l/video%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="video0", SYMLINK+="video"
+KERNEL=="radio[0-9]*", NAME="v4l/radio%n", SYMLINK+="radio%n", GROUP="video"
+KERNEL=="radio0", SYMLINK+="radio"
+KERNEL=="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="vbi0", SYMLINK+="vbi"
+KERNEL=="vtx[0-9]*", NAME="v4l/vtx%n", SYMLINK+="%k", GROUP="video"
+KERNEL=="vtx0", SYMLINK+="vtx"
+
+# i2c devices
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n", SYMLINK+="%k"
+
+# loop devices
+KERNEL=="loop[0-9]*", NAME="loop/%n", SYMLINK+="%k"
+
+# ramdisks
+KERNEL=="ram[0-9]*", NAME="rd/%n", SYMLINK+="%k"
+
+# framebuffer devices
+KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video"
+
+# misc
+KERNEL=="rtc*", NAME="misc/%k", SYMLINK+="%k", GROUP="audio", MODE="0664"
+KERNEL=="rtc0", SYMLINK+="rtc"
+KERNEL=="nvram", NAME="misc/%k", SYMLINK+="%k", GROUP="kmem", MODE="0640"
+KERNEL=="psaux", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="agpgart", NAME="misc/%k", SYMLINK+="%k" GROUP="video"
+KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k"
+KERNEL=="random", MODE="0666"
+KERNEL=="urandom", MODE="0666"
+KERNEL=="mem", MODE="0640", GROUP="kmem"
+KERNEL=="kmem", MODE="0640", GROUP="kmem"
+KERNEL=="port", MODE="0640", GROUP="kmem"
+KERNEL=="full", MODE="0666"
+KERNEL=="null", MODE="0666"
+KERNEL=="zero", MODE="0666"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666"
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid", SYMLINK="%k"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr", SYMLINK="%k"
+
+# sound devices
+# alsa devices
+SUBSYSTEM=="sound", GROUP="audio"
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hw[CD0-9]*", NAME="snd/%k"
+KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k"
+KERNEL=="midi[CD0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+# oss devices
+KERNEL=="audio*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dmmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="admmidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="dsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="adsp*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="midi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="amidi*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="mixer*", NAME="sound/%k", SYMLINK+="%k"
+KERNEL=="sequencer*", NAME="sound/%k", SYMLINK+="%k"
+
+# input devices
+KERNEL=="mice", NAME="input/%k", MODE="0644"
+KERNEL=="mouse*", NAME="input/%k", MODE="0644"
+KERNEL=="event*", NAME="input/%k"
+KERNEL=="js*", NAME="input/%k", MODE="0664"
+KERNEL=="ts*", NAME="input/%k"
+KERNEL=="uinput", NAME="input/%k"
+
+# USB devices
+KERNEL=="hiddev*", NAME="usb/%k"
+KERNEL=="auer*", NAME="usb/%k"
+KERNEL=="legousbtower*", NAME="usb/%k", MODE="0666"
+KERNEL=="dabusb*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k", GROUP="lp"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="Palm Handheld*", SYMLINK+="pilot"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="palmOne Handheld*", SYMLINK+="pilot"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="Handspring Visor*", SYMLINK+="pilot"
+
+# printer devices
+SUBSYSTEM=="printer", GROUP="lp"
+
+# netlink devices
+KERNEL=="route", NAME="netlink/%k"
+KERNEL=="skip", NAME="netlink/%k"
+KERNEL=="usersock", NAME="netlink/%k"
+KERNEL=="fwmonitor", NAME="netlink/%k"
+KERNEL=="tcpdiag", NAME="netlink/%k"
+KERNEL=="nflog", NAME="netlink/%k"
+KERNEL=="xfrm", NAME="netlink/%k"
+KERNEL=="arpd", NAME="netlink/%k"
+KERNEL=="route6", NAME="netlink/%k"
+KERNEL=="ip6_fw", NAME="netlink/%k"
+KERNEL=="dnrtmsg", NAME="netlink/%k"
+### ! disabled seems to break device creation !
+# KERNEL=="tap*", NAME="netlink/%k"
+
+# CAPI devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi*", NAME="capi/%n"
+
+# Network devices
+KERNEL=="tun", NAME="net/%k", OPTIONS+="ignore_remove"
+KERNEL=="ppp", OPTIONS+="ignore_remove"
+
+# IEEE1394 (firewire) devices
+KERNEL=="raw1394", NAME="%k", GROUP="video"
+KERNEL=="dv1394*", NAME="dv1394/%n", GROUP="video"
+KERNEL=="video1394*", NAME="video1394/%n", GROUP="video"
+
+# raw devices
+KERNEL=="raw[0-9]*", NAME="raw/%k"
+
+# kbd devices
+KERNEL=="kbd", MODE="0664"
+
+# packet devices
+KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="optical", MODE="0660"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/pktcdvd%n", GROUP="optical", MODE="0660"
+
+# usbfs-like device nodes, libusb device access
+# for kernel 2.6.21 and below
+SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev};printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0664"
+# starting from kernel 2.6.22 use this rule
+SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0664"
+#######################################
+# Permissions and Symlinks - end
+#######################################
+
+#######################################
+# Persistant block device stuff - begin
+#######################################
+# persistent storage links: /dev/{disk,tape}/{by-id,by-uuid,by-label,by-path,by-name}
+# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
+
+# needed like this!!!
+ACTION!="add|change", GOTO="persistent_storage_end"
+KERNEL=="nst[0-9]", SUBSYSTEMS=="scsi", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
+
+# type 8 devices are "Medium Changers"
+KERNEL=="sg*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+# skip rules for inappropriate block devices
+# don't add dm-*!!!
+KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end"
+
+# never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
+KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_storage_end"
+
+# ignore partitions that span the entire disk
+ATTR{whole_disk}=="*", GOTO="persistent_storage_end"
+
+# /sys/class/block will export this
+ENV{DEVTYPE}!="?*", ATTR{range}=="?*", ENV{DEVTYPE}="disk"
+ENV{DEVTYPE}!="?*", ATTR{start}=="?*", ENV{DEVTYPE}="partition"
+
+# for partitions import parent information
+ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
+
+# by-id (hardware serial number)
+KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
+KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}"
+KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n"
+
+KERNEL=="sd*[!0-9]|sr*|st*", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_SUBSYSTEMS}="ieee1394"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export %p"
+KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode"
+KERNEL=="cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --ignore-sysfs -s %p -d $tempnode", ENV{ID_BUS}="cciss"
+KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
+KERNEL=="st*", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
+
+# libata compat (links like hd*)
+KERNEL=="sd*[!0-9]|sr*", ENV{ID_VENDOR}=="ATA", PROGRAM="/lib/udev/ata_id $tempnode", RESULT=="?*", ENV{ID_ATA_COMPAT}="$result", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}"
+KERNEL=="sd*[0-9]", ENV{ID_ATA_COMPAT}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}-part%n"
+
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n"
+
+# by-path (shortest physical path)
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/path_id %p"
+ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
+ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
+KERNEL=="st*", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}"
+
+KERNEL=="sr*|st*", GOTO="persistent_storage_end"
+KERNEL=="hd*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
+
+# by-label/by-uuid (filesystem properties)
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+# BIOS Enhanced Disk Device
+ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/edd_id --export $tempnode"
+ENV{DEVTYPE}=="disk", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}"
+ENV{DEVTYPE}=="partition", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n"
+LABEL="persistent_storage_end"
+
+# md links hook into "change" events, when the array becomes available
+KERNEL!="md[0-9]*", GOTO="md_end"
+ACTION!="add|change", GOTO="md_end"
+
+ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
+IMPORT{program}="/lib/udev/vol_id --export $tempnode"
+OPTIONS="link_priority=100"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+LABEL="md_end"
+# Persistant block device stuff - end
+#####################################
+
+#######################################
+# Persistant input stuff - begin
+#######################################
+SUBSYSTEM!="input", GOTO="persistent_input_end"
+ACTION!="add", GOTO="persistent_input_end"
+# ignore the mid-level drivers
+KERNEL=="input[0-9]*", GOTO="persistent_input_end"
+
+# usb devices
+SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export"
+SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="01", ENV{ID_CLASS}="kbd"
+SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="02", ENV{ID_CLASS}="mouse"
+
+# other devices
+DRIVERS=="pcspkr", ENV{ID_CLASS}="spkr"
+DRIVERS=="atkbd", ENV{ID_CLASS}="kbd"
+DRIVERS=="psmouse", ENV{ID_CLASS}="mouse"
+ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{ID_CLASS}="ir"
+ATTRS{modalias}=="input:*-*a[068],*|input:*-*a*,[68],*m*", ATTRS{modalias}!="input:*-*k*14A,*r*", ENV{ID_CLASS}="joystick"
+
+# fill empty serial number
+ENV{ID_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial"
+
+# by-id links, generic and for the event devices
+KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", ENV{ID_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_CLASS}"
+KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", ENV{ID_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{ID_CLASS}"
+
+
+# by-path links
+IMPORT{program}="/lib/udev/path_id %p"
+KERNEL=="mouse*|js*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{ID_CLASS}"
+KERNEL=="event*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{ID_CLASS}"
+
+LABEL="persistent_input_end"
+#####################################
+# Persistant input stuff - end
+#####################################
+
+# run a command on remove events
+ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
+
+# debugging monitor
+RUN+="socket:/org/kernel/udev/monitor"
diff --git a/abs/core/udev/usb_id-fix.patch b/abs/core/udev/usb_id-fix.patch
new file mode 100644
index 0000000..35fb2e1
--- /dev/null
+++ b/abs/core/udev/usb_id-fix.patch
@@ -0,0 +1,107 @@
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Mon, 15 Oct 2007 18:38:20 +0000 (+0200)
+Subject: usb_id: fail if vendor/product can not be retrieved
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=963033472f8d2aab0bf77147b916de8f3b0b5450
+
+usb_id: fail if vendor/product can not be retrieved
+
+Thanks to Daniel Drake for identifying the bug.
+---
+
+diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
+index d36a27b..5fb030d 100644
+--- a/extras/usb_id/usb_id.c
++++ b/extras/usb_id/usb_id.c
+@@ -1,7 +1,5 @@
+ /*
+- * usb_id.c
+- *
+- * Identify an USB (block) device
++ * usb_id - identify an USB device
+ *
+ * Copyright (c) 2005 SUSE Linux Products GmbH, Germany
+ *
+@@ -224,8 +222,6 @@ static int usb_id(const char *devpath)
+ struct sysfs_device *dev;
+ struct sysfs_device *dev_interface;
+ struct sysfs_device *dev_usb;
+- const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+- const char *usb_model = NULL, *usb_vendor = NULL, *usb_rev, *usb_serial;
+ const char *if_class, *if_subclass;
+ int if_class_num;
+ int protocol = 0;
+@@ -271,6 +267,7 @@ static int usb_id(const char *devpath)
+ /* mass storage */
+ if (protocol == 6 && !use_usb_info) {
+ struct sysfs_device *dev_scsi;
++ const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+ int host, bus, target, lun;
+
+ /* get scsi device */
+@@ -321,40 +318,50 @@ static int usb_id(const char *devpath)
+ }
+
+ fallback:
+- /* Fallback to USB vendor & device */
++ /* fallback to USB vendor & device */
+ if (vendor_str[0] == '\0') {
++ const char *usb_vendor = NULL;
++
+ if (!use_num_info)
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer")))
+- dbg("No USB vendor string found, using idVendor");
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer");
++
++ if (!usb_vendor)
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor");
+
+ if (!usb_vendor) {
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"))) {
+- dbg("No USB vendor information available\n");
+- sprintf(vendor_str,"0000");
+- }
++ info("No USB vendor information available");
++ return 1;
+ }
+- set_str(vendor_str,usb_vendor, sizeof(vendor_str) - 1);
++ set_str(vendor_str, usb_vendor, sizeof(vendor_str)-1);
+ }
+-
++
+ if (model_str[0] == '\0') {
++ const char *usb_model = NULL;
++
+ if (!use_num_info)
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "product")))
+- dbg("No USB model string found, using idProduct");
+-
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "product");
++
++ if (!usb_model)
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct");
++
+ if (!usb_model) {
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct")))
+- dbg("No USB model information available\n"); sprintf(model_str,"0000");
++ dbg("No USB model information available");
++ return 1;
+ }
+- set_str(model_str, usb_model, sizeof(model_str) - 1);
++ set_str(model_str, usb_model, sizeof(model_str)-1);
+ }
+
+ if (revision_str[0] == '\0') {
++ const char *usb_rev;
++
+ usb_rev = sysfs_attr_get_value(dev_usb->devpath, "bcdDevice");
+ if (usb_rev)
+ set_str(revision_str, usb_rev, sizeof(revision_str)-1);
+ }
+
+ if (serial_str[0] == '\0') {
++ const char *usb_serial;
++
+ usb_serial = sysfs_attr_get_value(dev_usb->devpath, "serial");
+ if (usb_serial)
+ set_str(serial_str, usb_serial, sizeof(serial_str)-1);
+
diff --git a/abs/core/unichrome-dri/PKGBUILD b/abs/core/unichrome-dri/PKGBUILD
new file mode 100644
index 0000000..c51bb2b
--- /dev/null
+++ b/abs/core/unichrome-dri/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 1898 2008-05-22 18:05:23Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=unichrome-dri
+pkgver=7.0.3
+_mesaver=7.0.3
+pkgrel=1
+pkgdesc="DRI drivers for Unichrome-based videochipsets"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('imake' 'mesa>=7.0.3' 'glproto>=1.4.9')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/Mesa-${_mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = unichrome" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core/unison/PKGBUILD b/abs/core/unison/PKGBUILD
new file mode 100644
index 0000000..b1efa5b
--- /dev/null
+++ b/abs/core/unison/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=unison
+pkgver=2.27.57
+pkgrel=1
+pkgdesc="Unison is a file-synchronization tool"
+arch=(i686 x86_64)
+license=('GPL2')
+url="http://www.cis.upenn.edu/~bcpierce/unison"
+depends=('glibc')
+#makedepends=('ocaml' 'lablgtk' 'lablgtk2' 'imagemagick')
+makedepends=('ocaml' )
+source=(http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/$pkgname-$pkgver.tar.gz \
+ $pkgname.desktop)
+options=(!makeflags)
+install=unison.install
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ CFLAGS=""
+ make clean
+ make UISTYLE=text DEBUGGING=false THREADS=true || return 1
+ mkdir -p $startdir/pkg/usr/bin
+ install -Dm755 unison $startdir/pkg/usr/bin/unison
+}
+md5sums=('4ba0a3e4bf4b4ad0c063f86391371f78'
+ '2daecba7705455a8e4b769e48b059872')
diff --git a/abs/core/unison/ocaml-3.08-extnames.patch b/abs/core/unison/ocaml-3.08-extnames.patch
new file mode 100644
index 0000000..e959be2
--- /dev/null
+++ b/abs/core/unison/ocaml-3.08-extnames.patch
@@ -0,0 +1,14 @@
+diff -ur unison-2.9.1/ubase/uprintf.ml unison-2.9.1.patched/ubase/uprintf.ml
+--- unison-2.9.1/ubase/uprintf.ml 2002-04-11 07:13:23.000000000 +0200
++++ unison-2.9.1.patched/ubase/uprintf.ml 2004-08-08 14:10:09.784776851 +0200
+@@ -10,8 +10,8 @@
+ (* *)
+ (***********************************************************************)
+
+-external format_int: string -> int -> string = "format_int"
+-external format_float: string -> float -> string = "format_float"
++external format_int: string -> int -> string = "caml_format_int"
++external format_float: string -> float -> string = "caml_format_float"
+
+ let fprintf outchan doafter format =
+ let format = (Obj.magic format : string) in
diff --git a/abs/core/unison/unison.desktop b/abs/core/unison/unison.desktop
new file mode 100644
index 0000000..3a7e1d7
--- /dev/null
+++ b/abs/core/unison/unison.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=unison
+Name[de]=unison
+Comment=File synchronisation tool for X11
+Comment[de]=Datei Abgleicher und Synchronisierer
+TryExec=unison-x11
+Exec=unison-x11
+Terminal=false
+Type=Application
+Categories=GTK;Application;Network;
+Icon=unison.png
+StartupNotify=true
diff --git a/abs/core/unison/unison.install b/abs/core/unison/unison.install
new file mode 100644
index 0000000..70e70b0
--- /dev/null
+++ b/abs/core/unison/unison.install
@@ -0,0 +1,32 @@
+# arg 1: the new package version
+post_install() {
+ echo "NOTE:"
+ echo " For gtk1 frontend please add 'gtk' package."
+ echo " For gtk2 frontend please add 'gtk2' package."
+ echo " Default X11 frontend is set to gtk2. "
+ echo ""
+ echo " If you want to default to gtk1 unison:"
+ echo " 'rm /usr/bin/unison-x11'"
+ echo " 'ln -s /usr/bin/unison-gtk /usr/bin/unison-x11'"
+ echo ""
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/usbutils/PKGBUILD b/abs/core/usbutils/PKGBUILD
new file mode 100644
index 0000000..944e26a
--- /dev/null
+++ b/abs/core/usbutils/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Curtis Campbell <curtisjamescampbell@hotmail.com>
+pkgname=usbutils
+pkgver=0.73
+pkgrel=14
+pkgdesc="USB Device Utilities"
+arch=(i686 x86_64)
+license=('GPL')
+groups=('base')
+makedepends=('wget')
+depends=('glibc' 'libusb')
+url="http://usb.cs.tum.edu/"
+source=(http://downloads.sourceforge.net/sourceforge/linux-usb/usbutils-$pkgver.tar.gz)
+md5sums=('88978b4ad891f610620b1b8e5e0f43eb')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./update-usbids.sh
+ sed -i 's|DEST=|&/usr/share/hwdata/|' update-usbids.sh
+ ./configure --prefix=/usr --datadir=/usr/share/hwdata --enable-usbmodules --disable-zlib
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+ install -D -m755 update-usbids.sh $startdir/pkg/usr/sbin/update-usbids
+}
diff --git a/abs/core/util-linux-ng/PKGBUILD b/abs/core/util-linux-ng/PKGBUILD
new file mode 100644
index 0000000..35207fd
--- /dev/null
+++ b/abs/core/util-linux-ng/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=util-linux-ng
+pkgver=2.14
+pkgrel=10
+pkgdesc="Miscellaneous system utilities for Linux"
+arch=('i686' 'x86_64')
+groups=('base')
+depends=('bash' 'ncurses' 'zlib' 'e2fsprogs')
+replaces=('linux32' 'util-linux')
+conflicts=('linux32' 'util-linux')
+provides=('linux32' 'util-linux')
+license=('GPL')
+source=(ftp://ftp.kernel.org/pub/linux/utils/${pkgname}/v2.14/${pkgname}-${pkgver}.tar.bz2
+ util-linux-ng-2.14-20080624.diff)
+md5sums=('23f227da49df36f33fe47e917e332cd8'
+ 'acb7bf692d239eb9872b0f00de437b7e')
+
+# The cryptoloop-support.patch comes from the boys at Rock Linux
+# (http://www.rocklinux.net/packages/util-linux.html)
+
+# Newer crypt support is here:
+# http://loop-aes.sourceforge.net/updates/util-linux-${_realver}.diff.bz2
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./autogen.sh
+ # cryptoloop support
+ patch -Np1 -i ${startdir}/src/util-linux-ng-2.14-20080624.diff || return 1
+ sed -e 's%etc/adjtime%var/lib/hwclock/adjtime%' -i hwclock/hwclock.c
+ mkdir -p ${startdir}/pkg/var/lib/hwclock
+ ./configure --enable-arch --enable-write --enable-raw --disable-wall --enable-rdev
+ make HAVE_SLN=yes ADD_RAW=yes || return 1
+ make HAVE_SLN=yes ADD_RAW=yes DESTDIR=${startdir}/pkg install
+ rm -f ${startdir}/pkg/bin/kill
+ rm -f ${startdir}/pkg/usr/share/man/man1/kill.1
+ rm -f ${startdir}/pkg/usr/share/man/man5/nfs.5
+}
diff --git a/abs/core/util-linux-ng/util-linux-ng-2.14-20080624.diff b/abs/core/util-linux-ng/util-linux-ng-2.14-20080624.diff
new file mode 100644
index 0000000..305d257
--- /dev/null
+++ b/abs/core/util-linux-ng/util-linux-ng-2.14-20080624.diff
@@ -0,0 +1,6826 @@
+If this patch does not apply cleanly to newer version of util-linux-ng, try
+replacing original lomount.c lomount.h loop.h losetup.8 files in mount
+subdirectory with versions from util-linux-ng that the patch is for. And
+then apply this patch.
+
+mount/Makefile.in is a generated file. You can ignore patch failures on that
+file if you generate it again by running the ./autogen.sh script. That
+./autogen.sh script needs recent versions of autohell tools.
+
+diff -urN util-linux-ng-2.14/mount/Makefile.am util-linux-ng-2.14-AES/mount/Makefile.am
+--- util-linux-ng-2.14/mount/Makefile.am 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/Makefile.am 2008-06-24 16:55:12.000000000 +0300
+@@ -12,21 +12,21 @@
+ lomount.h fsprobe.h realpath.h xmalloc.h \
+ getusername.h loop.h sundries.h
+
+-mount_common = fstab.c mount_mntent.c getusername.c lomount.c \
++mount_common = fstab.c mount_mntent.c getusername.c \
+ $(utils_common) $(headers_common) ../lib/env.c ../lib/linux_version.c \
+ ../lib/blkdev.c
+
+-mount_SOURCES = mount.c $(mount_common) ../lib/setproctitle.c
++mount_SOURCES = mount.c lomount.c loumount.c loop.c sha512.c rmd160.c aes.c $(mount_common) ../lib/setproctitle.c
+ mount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ mount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+
+-umount_SOURCES = umount.c $(mount_common)
++umount_SOURCES = umount.c loumount.c $(mount_common)
+ umount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+
+-swapon_SOURCES = swapon.c swap_constants.h $(utils_common)
++swapon_SOURCES = swapon.c loop.c sha512.c swap_constants.h $(utils_common)
+
+-losetup_SOURCES = lomount.c sundries.c xmalloc.c realpath.c \
++losetup_SOURCES = lomount.c loumount.c loop.c sha512.c rmd160.c aes.c sundries.c xmalloc.c \
+ loop.h lomount.h xmalloc.h sundries.h realpath.h
+ losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
+
+diff -urN util-linux-ng-2.14/mount/Makefile.in util-linux-ng-2.14-AES/mount/Makefile.in
+--- util-linux-ng-2.14/mount/Makefile.in 2008-06-09 15:02:13.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/Makefile.in 2008-06-24 16:55:12.000000000 +0300
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -15,11 +15,15 @@
+ @SET_MAKE@
+
+
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -75,28 +79,32 @@
+ sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS)
+ am_losetup_OBJECTS = losetup-lomount.$(OBJEXT) \
+- losetup-sundries.$(OBJEXT) losetup-xmalloc.$(OBJEXT) \
+- losetup-realpath.$(OBJEXT)
++ losetup-loumount.$(OBJEXT) losetup-loop.$(OBJEXT) \
++ losetup-sha512.$(OBJEXT) losetup-rmd160.$(OBJEXT) \
++ losetup-aes.$(OBJEXT) losetup-sundries.$(OBJEXT) \
++ losetup-xmalloc.$(OBJEXT)
+ losetup_OBJECTS = $(am_losetup_OBJECTS)
+ losetup_LDADD = $(LDADD)
+-am__losetup_static_SOURCES_DIST = lomount.c sundries.c xmalloc.c \
+- realpath.c loop.h lomount.h xmalloc.h sundries.h realpath.h
++am__losetup_static_SOURCES_DIST = lomount.c loumount.c loop.c sha512.c \
++ rmd160.c aes.c sundries.c xmalloc.c loop.h lomount.h xmalloc.h \
++ sundries.h realpath.h
+ am__objects_1 = losetup_static-lomount.$(OBJEXT) \
++ losetup_static-loumount.$(OBJEXT) \
++ losetup_static-loop.$(OBJEXT) losetup_static-sha512.$(OBJEXT) \
++ losetup_static-rmd160.$(OBJEXT) losetup_static-aes.$(OBJEXT) \
+ losetup_static-sundries.$(OBJEXT) \
+- losetup_static-xmalloc.$(OBJEXT) \
+- losetup_static-realpath.$(OBJEXT)
++ losetup_static-xmalloc.$(OBJEXT)
+ @HAVE_STATIC_LOSETUP_TRUE@am_losetup_static_OBJECTS = \
+ @HAVE_STATIC_LOSETUP_TRUE@ $(am__objects_1)
+ losetup_static_OBJECTS = $(am_losetup_static_OBJECTS)
+ losetup_static_LDADD = $(LDADD)
+-losetup_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(losetup_static_LDFLAGS) $(LDFLAGS) -o $@
+-am__mount_SOURCES_DIST = mount.c fstab.c mount_mntent.c getusername.c \
+- lomount.c sundries.c xmalloc.c realpath.c fsprobe.c \
+- fsprobe_blkid.c fsprobe_volumeid.c fstab.h mount_mntent.h \
+- mount_constants.h lomount.h fsprobe.h realpath.h xmalloc.h \
+- getusername.h loop.h sundries.h ../lib/env.c \
+- ../lib/linux_version.c ../lib/blkdev.c ../lib/setproctitle.c
++am__mount_SOURCES_DIST = mount.c lomount.c loumount.c loop.c sha512.c \
++ rmd160.c aes.c fstab.c mount_mntent.c getusername.c sundries.c \
++ xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++ fsprobe_volumeid.c fstab.h mount_mntent.h mount_constants.h \
++ lomount.h fsprobe.h realpath.h xmalloc.h getusername.h loop.h \
++ sundries.h ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
++ ../lib/setproctitle.c
+ @HAVE_BLKID_TRUE@am__objects_2 = mount-fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_3 = mount-fsprobe_volumeid.$(OBJEXT)
+ am__objects_4 = mount-sundries.$(OBJEXT) mount-xmalloc.$(OBJEXT) \
+@@ -104,10 +112,13 @@
+ $(am__objects_2) $(am__objects_3)
+ am__objects_5 =
+ am__objects_6 = mount-fstab.$(OBJEXT) mount-mount_mntent.$(OBJEXT) \
+- mount-getusername.$(OBJEXT) mount-lomount.$(OBJEXT) \
+- $(am__objects_4) $(am__objects_5) mount-env.$(OBJEXT) \
+- mount-linux_version.$(OBJEXT) mount-blkdev.$(OBJEXT)
+-am_mount_OBJECTS = mount-mount.$(OBJEXT) $(am__objects_6) \
++ mount-getusername.$(OBJEXT) $(am__objects_4) $(am__objects_5) \
++ mount-env.$(OBJEXT) mount-linux_version.$(OBJEXT) \
++ mount-blkdev.$(OBJEXT)
++am_mount_OBJECTS = mount-mount.$(OBJEXT) mount-lomount.$(OBJEXT) \
++ mount-loumount.$(OBJEXT) mount-loop.$(OBJEXT) \
++ mount-sha512.$(OBJEXT) mount-rmd160.$(OBJEXT) \
++ mount-aes.$(OBJEXT) $(am__objects_6) \
+ mount-setproctitle.$(OBJEXT)
+ mount_OBJECTS = $(am_mount_OBJECTS)
+ am__DEPENDENCIES_1 =
+@@ -116,14 +127,12 @@
+ am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
+ @HAVE_SELINUX_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+ mount_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5)
+-mount_LINK = $(CCLD) $(mount_CFLAGS) $(CFLAGS) $(mount_LDFLAGS) \
+- $(LDFLAGS) -o $@
+-am__mount_static_SOURCES_DIST = mount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
+- fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+- mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+- realpath.h xmalloc.h getusername.h loop.h sundries.h \
+- ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
++am__mount_static_SOURCES_DIST = mount.c lomount.c loumount.c loop.c \
++ sha512.c rmd160.c aes.c fstab.c mount_mntent.c getusername.c \
++ sundries.c xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++ fsprobe_volumeid.c fstab.h mount_mntent.h mount_constants.h \
++ lomount.h fsprobe.h realpath.h xmalloc.h getusername.h loop.h \
++ sundries.h ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c \
+ ../lib/setproctitle.c
+ @HAVE_BLKID_TRUE@am__objects_7 = fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_8 = fsprobe_volumeid.$(OBJEXT)
+@@ -131,17 +140,15 @@
+ realpath.$(OBJEXT) fsprobe.$(OBJEXT) $(am__objects_7) \
+ $(am__objects_8)
+ am__objects_10 = fstab.$(OBJEXT) mount_mntent.$(OBJEXT) \
+- getusername.$(OBJEXT) lomount.$(OBJEXT) $(am__objects_9) \
+- $(am__objects_5) env.$(OBJEXT) linux_version.$(OBJEXT) \
+- blkdev.$(OBJEXT)
+-am__objects_11 = mount.$(OBJEXT) $(am__objects_10) \
+- setproctitle.$(OBJEXT)
++ getusername.$(OBJEXT) $(am__objects_9) $(am__objects_5) \
++ env.$(OBJEXT) linux_version.$(OBJEXT) blkdev.$(OBJEXT)
++am__objects_11 = mount.$(OBJEXT) lomount.$(OBJEXT) loumount.$(OBJEXT) \
++ loop.$(OBJEXT) sha512.$(OBJEXT) rmd160.$(OBJEXT) aes.$(OBJEXT) \
++ $(am__objects_10) setproctitle.$(OBJEXT)
+ @HAVE_STATIC_MOUNT_TRUE@am_mount_static_OBJECTS = $(am__objects_11)
+ mount_static_OBJECTS = $(am_mount_static_OBJECTS)
+ @HAVE_SELINUX_FALSE@@HAVE_STATIC_MOUNT_TRUE@mount_static_DEPENDENCIES = $(am__DEPENDENCIES_4)
+ @HAVE_SELINUX_TRUE@mount_static_DEPENDENCIES = $(am__DEPENDENCIES_1)
+-mount_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(mount_static_LDFLAGS) $(LDFLAGS) -o $@
+ am_mtab_lock_test_OBJECTS = mtab_lock_test-fstab.$(OBJEXT) \
+ mtab_lock_test-sundries.$(OBJEXT) \
+ mtab_lock_test-xmalloc.$(OBJEXT) $(am__objects_5)
+@@ -150,21 +157,21 @@
+ pivot_root_SOURCES = pivot_root.c
+ pivot_root_OBJECTS = pivot_root.$(OBJEXT)
+ pivot_root_LDADD = $(LDADD)
+-am__swapon_SOURCES_DIST = swapon.c swap_constants.h sundries.c \
+- xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
++am__swapon_SOURCES_DIST = swapon.c loop.c sha512.c swap_constants.h \
++ sundries.c xmalloc.c realpath.c fsprobe.c fsprobe_blkid.c \
+ fsprobe_volumeid.c ../lib/linux_version.c ../lib/blkdev.c
+ @HAVE_VOLUME_ID_TRUE@am__objects_12 = linux_version.$(OBJEXT) \
+ @HAVE_VOLUME_ID_TRUE@ blkdev.$(OBJEXT)
+-am_swapon_OBJECTS = swapon.$(OBJEXT) $(am__objects_9) \
+- $(am__objects_12)
++am_swapon_OBJECTS = swapon.$(OBJEXT) loop.$(OBJEXT) sha512.$(OBJEXT) \
++ $(am__objects_9) $(am__objects_12)
+ swapon_OBJECTS = $(am_swapon_OBJECTS)
+ swapon_DEPENDENCIES = $(am__DEPENDENCIES_4)
+-am__umount_SOURCES_DIST = umount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
+- fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+- mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+- realpath.h xmalloc.h getusername.h loop.h sundries.h \
+- ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c
++am__umount_SOURCES_DIST = umount.c loumount.c fstab.c mount_mntent.c \
++ getusername.c sundries.c xmalloc.c realpath.c fsprobe.c \
++ fsprobe_blkid.c fsprobe_volumeid.c fstab.h mount_mntent.h \
++ mount_constants.h lomount.h fsprobe.h realpath.h xmalloc.h \
++ getusername.h loop.h sundries.h ../lib/env.c \
++ ../lib/linux_version.c ../lib/blkdev.c
+ @HAVE_BLKID_TRUE@am__objects_13 = umount-fsprobe_blkid.$(OBJEXT)
+ @HAVE_VOLUME_ID_TRUE@am__objects_14 = \
+ @HAVE_VOLUME_ID_TRUE@ umount-fsprobe_volumeid.$(OBJEXT)
+@@ -172,28 +179,25 @@
+ umount-realpath.$(OBJEXT) umount-fsprobe.$(OBJEXT) \
+ $(am__objects_13) $(am__objects_14)
+ am__objects_16 = umount-fstab.$(OBJEXT) umount-mount_mntent.$(OBJEXT) \
+- umount-getusername.$(OBJEXT) umount-lomount.$(OBJEXT) \
+- $(am__objects_15) $(am__objects_5) umount-env.$(OBJEXT) \
++ umount-getusername.$(OBJEXT) $(am__objects_15) \
++ $(am__objects_5) umount-env.$(OBJEXT) \
+ umount-linux_version.$(OBJEXT) umount-blkdev.$(OBJEXT)
+-am_umount_OBJECTS = umount-umount.$(OBJEXT) $(am__objects_16)
++am_umount_OBJECTS = umount-umount.$(OBJEXT) umount-loumount.$(OBJEXT) \
++ $(am__objects_16)
+ umount_OBJECTS = $(am_umount_OBJECTS)
+ umount_DEPENDENCIES = $(am__DEPENDENCIES_4)
+-umount_LINK = $(CCLD) $(umount_CFLAGS) $(CFLAGS) $(umount_LDFLAGS) \
+- $(LDFLAGS) -o $@
+-am__umount_static_SOURCES_DIST = umount.c fstab.c mount_mntent.c \
+- getusername.c lomount.c sundries.c xmalloc.c realpath.c \
++am__umount_static_SOURCES_DIST = umount.c loumount.c fstab.c \
++ mount_mntent.c getusername.c sundries.c xmalloc.c realpath.c \
+ fsprobe.c fsprobe_blkid.c fsprobe_volumeid.c fstab.h \
+ mount_mntent.h mount_constants.h lomount.h fsprobe.h \
+ realpath.h xmalloc.h getusername.h loop.h sundries.h \
+ ../lib/env.c ../lib/linux_version.c ../lib/blkdev.c
+-am__objects_17 = umount.$(OBJEXT) $(am__objects_10)
++am__objects_17 = umount.$(OBJEXT) loumount.$(OBJEXT) $(am__objects_10)
+ @HAVE_STATIC_UMOUNT_TRUE@am_umount_static_OBJECTS = $(am__objects_17)
+ umount_static_OBJECTS = $(am_umount_static_OBJECTS)
+ @HAVE_STATIC_UMOUNT_TRUE@umount_static_DEPENDENCIES = \
+ @HAVE_STATIC_UMOUNT_TRUE@ $(am__DEPENDENCIES_4)
+-umount_static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(umount_static_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -220,7 +224,27 @@
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
++AMDEP_FALSE = @AMDEP_FALSE@
++AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
++ARCH_86_64_FALSE = @ARCH_86_64_FALSE@
++ARCH_86_64_TRUE = @ARCH_86_64_TRUE@
++ARCH_HPPA_FALSE = @ARCH_HPPA_FALSE@
++ARCH_HPPA_TRUE = @ARCH_HPPA_TRUE@
++ARCH_I86_FALSE = @ARCH_I86_FALSE@
++ARCH_I86_TRUE = @ARCH_I86_TRUE@
++ARCH_IA64_FALSE = @ARCH_IA64_FALSE@
++ARCH_IA64_TRUE = @ARCH_IA64_TRUE@
++ARCH_M68K_FALSE = @ARCH_M68K_FALSE@
++ARCH_M68K_TRUE = @ARCH_M68K_TRUE@
++ARCH_MIPS_FALSE = @ARCH_MIPS_FALSE@
++ARCH_MIPS_TRUE = @ARCH_MIPS_TRUE@
++ARCH_PPC_FALSE = @ARCH_PPC_FALSE@
++ARCH_PPC_TRUE = @ARCH_PPC_TRUE@
++ARCH_S390_FALSE = @ARCH_S390_FALSE@
++ARCH_S390_TRUE = @ARCH_S390_TRUE@
++ARCH_SPARC_FALSE = @ARCH_SPARC_FALSE@
++ARCH_SPARC_TRUE = @ARCH_SPARC_TRUE@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+@@ -228,6 +252,40 @@
+ BLKID = @BLKID@
+ BLKID_LIBS = @BLKID_LIBS@
+ BLKID_LIBS_STATIC = @BLKID_LIBS_STATIC@
++BUILD_AGETTY_FALSE = @BUILD_AGETTY_FALSE@
++BUILD_AGETTY_TRUE = @BUILD_AGETTY_TRUE@
++BUILD_ARCH_FALSE = @BUILD_ARCH_FALSE@
++BUILD_ARCH_TRUE = @BUILD_ARCH_TRUE@
++BUILD_CRAMFS_FALSE = @BUILD_CRAMFS_FALSE@
++BUILD_CRAMFS_TRUE = @BUILD_CRAMFS_TRUE@
++BUILD_ELVTUNE_FALSE = @BUILD_ELVTUNE_FALSE@
++BUILD_ELVTUNE_TRUE = @BUILD_ELVTUNE_TRUE@
++BUILD_INIT_FALSE = @BUILD_INIT_FALSE@
++BUILD_INIT_TRUE = @BUILD_INIT_TRUE@
++BUILD_KILL_FALSE = @BUILD_KILL_FALSE@
++BUILD_KILL_TRUE = @BUILD_KILL_TRUE@
++BUILD_LAST_FALSE = @BUILD_LAST_FALSE@
++BUILD_LAST_TRUE = @BUILD_LAST_TRUE@
++BUILD_LOGIN_UTILS_FALSE = @BUILD_LOGIN_UTILS_FALSE@
++BUILD_LOGIN_UTILS_TRUE = @BUILD_LOGIN_UTILS_TRUE@
++BUILD_MESG_FALSE = @BUILD_MESG_FALSE@
++BUILD_MESG_TRUE = @BUILD_MESG_TRUE@
++BUILD_PARTX_FALSE = @BUILD_PARTX_FALSE@
++BUILD_PARTX_TRUE = @BUILD_PARTX_TRUE@
++BUILD_RAW_FALSE = @BUILD_RAW_FALSE@
++BUILD_RAW_TRUE = @BUILD_RAW_TRUE@
++BUILD_RDEV_FALSE = @BUILD_RDEV_FALSE@
++BUILD_RDEV_TRUE = @BUILD_RDEV_TRUE@
++BUILD_RENAME_FALSE = @BUILD_RENAME_FALSE@
++BUILD_RENAME_TRUE = @BUILD_RENAME_TRUE@
++BUILD_RESET_FALSE = @BUILD_RESET_FALSE@
++BUILD_RESET_TRUE = @BUILD_RESET_TRUE@
++BUILD_SCHEDUTILS_FALSE = @BUILD_SCHEDUTILS_FALSE@
++BUILD_SCHEDUTILS_TRUE = @BUILD_SCHEDUTILS_TRUE@
++BUILD_WALL_FALSE = @BUILD_WALL_FALSE@
++BUILD_WALL_TRUE = @BUILD_WALL_TRUE@
++BUILD_WRITE_FALSE = @BUILD_WRITE_FALSE@
++BUILD_WRITE_TRUE = @BUILD_WRITE_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -243,7 +301,46 @@
+ EXEEXT = @EXEEXT@
+ GMSGFMT = @GMSGFMT@
+ GREP = @GREP@
+-INSTALL = @INSTALL@
++HAVE_AUDIT_FALSE = @HAVE_AUDIT_FALSE@
++HAVE_AUDIT_TRUE = @HAVE_AUDIT_TRUE@
++HAVE_BLKID_FALSE = @HAVE_BLKID_FALSE@
++HAVE_BLKID_TRUE = @HAVE_BLKID_TRUE@
++HAVE_IOPRIO_GET_FALSE = @HAVE_IOPRIO_GET_FALSE@
++HAVE_IOPRIO_GET_TRUE = @HAVE_IOPRIO_GET_TRUE@
++HAVE_IOPRIO_SET_FALSE = @HAVE_IOPRIO_SET_FALSE@
++HAVE_IOPRIO_SET_TRUE = @HAVE_IOPRIO_SET_TRUE@
++HAVE_NCURSES_FALSE = @HAVE_NCURSES_FALSE@
++HAVE_NCURSES_TRUE = @HAVE_NCURSES_TRUE@
++HAVE_PAM_FALSE = @HAVE_PAM_FALSE@
++HAVE_PAM_TRUE = @HAVE_PAM_TRUE@
++HAVE_PIVOT_ROOT_FALSE = @HAVE_PIVOT_ROOT_FALSE@
++HAVE_PIVOT_ROOT_TRUE = @HAVE_PIVOT_ROOT_TRUE@
++HAVE_RAW_FALSE = @HAVE_RAW_FALSE@
++HAVE_RAW_TRUE = @HAVE_RAW_TRUE@
++HAVE_SCHED_GETAFFINITY_FALSE = @HAVE_SCHED_GETAFFINITY_FALSE@
++HAVE_SCHED_GETAFFINITY_TRUE = @HAVE_SCHED_GETAFFINITY_TRUE@
++HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
++HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
++HAVE_STATIC_FDISK_FALSE = @HAVE_STATIC_FDISK_FALSE@
++HAVE_STATIC_FDISK_TRUE = @HAVE_STATIC_FDISK_TRUE@
++HAVE_STATIC_LOSETUP_FALSE = @HAVE_STATIC_LOSETUP_FALSE@
++HAVE_STATIC_LOSETUP_TRUE = @HAVE_STATIC_LOSETUP_TRUE@
++HAVE_STATIC_MOUNT_FALSE = @HAVE_STATIC_MOUNT_FALSE@
++HAVE_STATIC_MOUNT_TRUE = @HAVE_STATIC_MOUNT_TRUE@
++HAVE_STATIC_SFDISK_FALSE = @HAVE_STATIC_SFDISK_FALSE@
++HAVE_STATIC_SFDISK_TRUE = @HAVE_STATIC_SFDISK_TRUE@
++HAVE_STATIC_UMOUNT_FALSE = @HAVE_STATIC_UMOUNT_FALSE@
++HAVE_STATIC_UMOUNT_TRUE = @HAVE_STATIC_UMOUNT_TRUE@
++HAVE_TERMCAP_FALSE = @HAVE_TERMCAP_FALSE@
++HAVE_TERMCAP_TRUE = @HAVE_TERMCAP_TRUE@
++HAVE_TINFO_FALSE = @HAVE_TINFO_FALSE@
++HAVE_TINFO_TRUE = @HAVE_TINFO_TRUE@
++HAVE_UTIL_FALSE = @HAVE_UTIL_FALSE@
++HAVE_UTIL_TRUE = @HAVE_UTIL_TRUE@
++HAVE_UUID_FALSE = @HAVE_UUID_FALSE@
++HAVE_UUID_TRUE = @HAVE_UUID_TRUE@
++HAVE_VOLUME_ID_FALSE = @HAVE_VOLUME_ID_FALSE@
++HAVE_VOLUME_ID_TRUE = @HAVE_VOLUME_ID_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -255,15 +352,20 @@
+ LIBINTL = @LIBINTL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LINUX_FALSE = @LINUX_FALSE@
++LINUX_TRUE = @LINUX_TRUE@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBINTL = @LTLIBINTL@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAKEINFO = @MAKEINFO@
+-MKDIR_P = @MKDIR_P@
++MAKEINSTALL_DO_CHOWN_FALSE = @MAKEINSTALL_DO_CHOWN_FALSE@
++MAKEINSTALL_DO_CHOWN_TRUE = @MAKEINSTALL_DO_CHOWN_TRUE@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+ MSGFMT = @MSGFMT@
+ MSGMERGE = @MSGMERGE@
+ NCURSES_LIBS = @NCURSES_LIBS@
++NEED_LIBCRYPT_FALSE = @NEED_LIBCRYPT_FALSE@
++NEED_LIBCRYPT_TRUE = @NEED_LIBCRYPT_TRUE@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -282,16 +384,18 @@
+ SUID_CFLAGS = @SUID_CFLAGS@
+ SUID_LDFLAGS = @SUID_LDFLAGS@
+ USE_NLS = @USE_NLS@
++USE_SLANG_FALSE = @USE_SLANG_FALSE@
++USE_SLANG_TRUE = @USE_SLANG_TRUE@
++USE_TTY_GROUP_FALSE = @USE_TTY_GROUP_FALSE@
++USE_TTY_GROUP_TRUE = @USE_TTY_GROUP_TRUE@
+ VERSION = @VERSION@
+ VOLID = @VOLID@
+ VOLUMEID_LIBS = @VOLUMEID_LIBS@
+ VOLUMEID_LIBS_STATIC = @VOLUMEID_LIBS_STATIC@
+ XGETTEXT = @XGETTEXT@
+-abs_builddir = @abs_builddir@
+-abs_srcdir = @abs_srcdir@
+-abs_top_builddir = @abs_top_builddir@
+-abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
++am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
++am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -303,7 +407,6 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+-builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -331,11 +434,8 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+-srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+-top_builddir = @top_builddir@
+-top_srcdir = @top_srcdir@
+
+ # The original default vaues of bindir and sbindir:
+ usrbinexecdir = ${exec_prefix}/bin
+@@ -359,19 +459,19 @@
+ lomount.h fsprobe.h realpath.h xmalloc.h \
+ getusername.h loop.h sundries.h
+
+-mount_common = fstab.c mount_mntent.c getusername.c lomount.c \
++mount_common = fstab.c mount_mntent.c getusername.c \
+ $(utils_common) $(headers_common) ../lib/env.c ../lib/linux_version.c \
+ ../lib/blkdev.c
+
+-mount_SOURCES = mount.c $(mount_common) ../lib/setproctitle.c
++mount_SOURCES = mount.c lomount.c loumount.c loop.c sha512.c rmd160.c aes.c $(mount_common) ../lib/setproctitle.c
+ mount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ mount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+-umount_SOURCES = umount.c $(mount_common)
++umount_SOURCES = umount.c loumount.c $(mount_common)
+ umount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
+ umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
+-swapon_SOURCES = swapon.c swap_constants.h $(utils_common) \
+- $(am__append_9)
+-losetup_SOURCES = lomount.c sundries.c xmalloc.c realpath.c \
++swapon_SOURCES = swapon.c loop.c sha512.c swap_constants.h \
++ $(utils_common) $(am__append_9)
++losetup_SOURCES = lomount.c loumount.c loop.c sha512.c rmd160.c aes.c sundries.c xmalloc.c \
+ loop.h lomount.h xmalloc.h sundries.h realpath.h
+
+ losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
+@@ -427,7 +527,7 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
++ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+@@ -453,7 +553,7 @@
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+ install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+- test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
++ test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+@@ -476,31 +576,31 @@
+ -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+ losetup$(EXEEXT): $(losetup_OBJECTS) $(losetup_DEPENDENCIES)
+ @rm -f losetup$(EXEEXT)
+- $(LINK) $(losetup_OBJECTS) $(losetup_LDADD) $(LIBS)
++ $(LINK) $(losetup_LDFLAGS) $(losetup_OBJECTS) $(losetup_LDADD) $(LIBS)
+ losetup.static$(EXEEXT): $(losetup_static_OBJECTS) $(losetup_static_DEPENDENCIES)
+ @rm -f losetup.static$(EXEEXT)
+- $(losetup_static_LINK) $(losetup_static_OBJECTS) $(losetup_static_LDADD) $(LIBS)
++ $(LINK) $(losetup_static_LDFLAGS) $(losetup_static_OBJECTS) $(losetup_static_LDADD) $(LIBS)
+ mount$(EXEEXT): $(mount_OBJECTS) $(mount_DEPENDENCIES)
+ @rm -f mount$(EXEEXT)
+- $(mount_LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
++ $(LINK) $(mount_LDFLAGS) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
+ mount.static$(EXEEXT): $(mount_static_OBJECTS) $(mount_static_DEPENDENCIES)
+ @rm -f mount.static$(EXEEXT)
+- $(mount_static_LINK) $(mount_static_OBJECTS) $(mount_static_LDADD) $(LIBS)
++ $(LINK) $(mount_static_LDFLAGS) $(mount_static_OBJECTS) $(mount_static_LDADD) $(LIBS)
+ mtab_lock_test$(EXEEXT): $(mtab_lock_test_OBJECTS) $(mtab_lock_test_DEPENDENCIES)
+ @rm -f mtab_lock_test$(EXEEXT)
+- $(LINK) $(mtab_lock_test_OBJECTS) $(mtab_lock_test_LDADD) $(LIBS)
++ $(LINK) $(mtab_lock_test_LDFLAGS) $(mtab_lock_test_OBJECTS) $(mtab_lock_test_LDADD) $(LIBS)
+ pivot_root$(EXEEXT): $(pivot_root_OBJECTS) $(pivot_root_DEPENDENCIES)
+ @rm -f pivot_root$(EXEEXT)
+- $(LINK) $(pivot_root_OBJECTS) $(pivot_root_LDADD) $(LIBS)
++ $(LINK) $(pivot_root_LDFLAGS) $(pivot_root_OBJECTS) $(pivot_root_LDADD) $(LIBS)
+ swapon$(EXEEXT): $(swapon_OBJECTS) $(swapon_DEPENDENCIES)
+ @rm -f swapon$(EXEEXT)
+- $(LINK) $(swapon_OBJECTS) $(swapon_LDADD) $(LIBS)
++ $(LINK) $(swapon_LDFLAGS) $(swapon_OBJECTS) $(swapon_LDADD) $(LIBS)
+ umount$(EXEEXT): $(umount_OBJECTS) $(umount_DEPENDENCIES)
+ @rm -f umount$(EXEEXT)
+- $(umount_LINK) $(umount_OBJECTS) $(umount_LDADD) $(LIBS)
++ $(LINK) $(umount_LDFLAGS) $(umount_OBJECTS) $(umount_LDADD) $(LIBS)
+ umount.static$(EXEEXT): $(umount_static_OBJECTS) $(umount_static_DEPENDENCIES)
+ @rm -f umount.static$(EXEEXT)
+- $(umount_static_LINK) $(umount_static_OBJECTS) $(umount_static_LDADD) $(LIBS)
++ $(LINK) $(umount_static_LDFLAGS) $(umount_static_OBJECTS) $(umount_static_LDADD) $(LIBS)
+
+ mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+@@ -508,6 +608,7 @@
+ distclean-compile:
+ -rm -f *.tab.c
+
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blkdev.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsprobe.Po@am__quote@
+@@ -517,14 +618,25 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux_version.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-lomount.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-rmd160.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup-xmalloc.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-lomount.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-rmd160.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/losetup_static-xmalloc.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loumount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-aes.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-blkdev.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-env.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-fsprobe.Po@am__quote@
+@@ -534,10 +646,14 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-linux_version.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-loop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-loumount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-mount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-mount_mntent.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-rmd160.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-setproctitle.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount-xmalloc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
+@@ -547,7 +663,9 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtab_lock_test-xmalloc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pivot_root.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realpath.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmd160.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setproctitle.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sundries.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swapon.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-blkdev.Po@am__quote@
+@@ -558,7 +676,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-fstab.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-getusername.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-linux_version.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-lomount.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-loumount.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-mount_mntent.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-realpath.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umount-sundries.Po@am__quote@
+@@ -568,637 +686,820 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+
+ .c.o:
+-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ losetup-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.o -MD -MP -MF $(DEPDIR)/losetup-lomount.Tpo -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-lomount.Tpo $(DEPDIR)/losetup-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.o -MD -MP -MF "$(DEPDIR)/losetup-lomount.Tpo" -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-lomount.Tpo" "$(DEPDIR)/losetup-lomount.Po"; else rm -f "$(DEPDIR)/losetup-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup-lomount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+
+ losetup-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.obj -MD -MP -MF $(DEPDIR)/losetup-lomount.Tpo -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-lomount.Tpo $(DEPDIR)/losetup-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-lomount.obj -MD -MP -MF "$(DEPDIR)/losetup-lomount.Tpo" -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-lomount.Tpo" "$(DEPDIR)/losetup-lomount.Po"; else rm -f "$(DEPDIR)/losetup-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup-lomount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+
++losetup-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loumount.o -MD -MP -MF "$(DEPDIR)/losetup-loumount.Tpo" -c -o losetup-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loumount.Tpo" "$(DEPDIR)/losetup-loumount.Po"; else rm -f "$(DEPDIR)/losetup-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++losetup-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loumount.obj -MD -MP -MF "$(DEPDIR)/losetup-loumount.Tpo" -c -o losetup-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loumount.Tpo" "$(DEPDIR)/losetup-loumount.Po"; else rm -f "$(DEPDIR)/losetup-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++losetup-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loop.o -MD -MP -MF "$(DEPDIR)/losetup-loop.Tpo" -c -o losetup-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loop.Tpo" "$(DEPDIR)/losetup-loop.Po"; else rm -f "$(DEPDIR)/losetup-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++losetup-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-loop.obj -MD -MP -MF "$(DEPDIR)/losetup-loop.Tpo" -c -o losetup-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-loop.Tpo" "$(DEPDIR)/losetup-loop.Po"; else rm -f "$(DEPDIR)/losetup-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++losetup-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sha512.o -MD -MP -MF "$(DEPDIR)/losetup-sha512.Tpo" -c -o losetup-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sha512.Tpo" "$(DEPDIR)/losetup-sha512.Po"; else rm -f "$(DEPDIR)/losetup-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++losetup-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sha512.obj -MD -MP -MF "$(DEPDIR)/losetup-sha512.Tpo" -c -o losetup-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sha512.Tpo" "$(DEPDIR)/losetup-sha512.Po"; else rm -f "$(DEPDIR)/losetup-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++losetup-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-rmd160.o -MD -MP -MF "$(DEPDIR)/losetup-rmd160.Tpo" -c -o losetup-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-rmd160.Tpo" "$(DEPDIR)/losetup-rmd160.Po"; else rm -f "$(DEPDIR)/losetup-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++losetup-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-rmd160.obj -MD -MP -MF "$(DEPDIR)/losetup-rmd160.Tpo" -c -o losetup-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-rmd160.Tpo" "$(DEPDIR)/losetup-rmd160.Po"; else rm -f "$(DEPDIR)/losetup-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++losetup-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-aes.o -MD -MP -MF "$(DEPDIR)/losetup-aes.Tpo" -c -o losetup-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-aes.Tpo" "$(DEPDIR)/losetup-aes.Po"; else rm -f "$(DEPDIR)/losetup-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++losetup-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-aes.obj -MD -MP -MF "$(DEPDIR)/losetup-aes.Tpo" -c -o losetup-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-aes.Tpo" "$(DEPDIR)/losetup-aes.Po"; else rm -f "$(DEPDIR)/losetup-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ losetup-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.o -MD -MP -MF $(DEPDIR)/losetup-sundries.Tpo -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-sundries.Tpo $(DEPDIR)/losetup-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.o -MD -MP -MF "$(DEPDIR)/losetup-sundries.Tpo" -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sundries.Tpo" "$(DEPDIR)/losetup-sundries.Po"; else rm -f "$(DEPDIR)/losetup-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ losetup-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.obj -MD -MP -MF $(DEPDIR)/losetup-sundries.Tpo -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-sundries.Tpo $(DEPDIR)/losetup-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-sundries.obj -MD -MP -MF "$(DEPDIR)/losetup-sundries.Tpo" -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-sundries.Tpo" "$(DEPDIR)/losetup-sundries.Po"; else rm -f "$(DEPDIR)/losetup-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ losetup-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.o -MD -MP -MF $(DEPDIR)/losetup-xmalloc.Tpo -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-xmalloc.Tpo $(DEPDIR)/losetup-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.o -MD -MP -MF "$(DEPDIR)/losetup-xmalloc.Tpo" -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-xmalloc.Tpo" "$(DEPDIR)/losetup-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ losetup-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.obj -MD -MP -MF $(DEPDIR)/losetup-xmalloc.Tpo -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-xmalloc.Tpo $(DEPDIR)/losetup-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-xmalloc.obj -MD -MP -MF "$(DEPDIR)/losetup-xmalloc.Tpo" -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup-xmalloc.Tpo" "$(DEPDIR)/losetup-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+-losetup-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-realpath.o -MD -MP -MF $(DEPDIR)/losetup-realpath.Tpo -c -o losetup-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-realpath.Tpo $(DEPDIR)/losetup-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup-realpath.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-
+-losetup-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup-realpath.obj -MD -MP -MF $(DEPDIR)/losetup-realpath.Tpo -c -o losetup-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup-realpath.Tpo $(DEPDIR)/losetup-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup-realpath.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-
+ losetup_static-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.o -MD -MP -MF $(DEPDIR)/losetup_static-lomount.Tpo -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-lomount.Tpo $(DEPDIR)/losetup_static-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.o -MD -MP -MF "$(DEPDIR)/losetup_static-lomount.Tpo" -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-lomount.Tpo" "$(DEPDIR)/losetup_static-lomount.Po"; else rm -f "$(DEPDIR)/losetup_static-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup_static-lomount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+
+ losetup_static-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.obj -MD -MP -MF $(DEPDIR)/losetup_static-lomount.Tpo -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-lomount.Tpo $(DEPDIR)/losetup_static-lomount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-lomount.obj -MD -MP -MF "$(DEPDIR)/losetup_static-lomount.Tpo" -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-lomount.Tpo" "$(DEPDIR)/losetup_static-lomount.Po"; else rm -f "$(DEPDIR)/losetup_static-lomount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='losetup_static-lomount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+
++losetup_static-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loumount.o -MD -MP -MF "$(DEPDIR)/losetup_static-loumount.Tpo" -c -o losetup_static-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loumount.Tpo" "$(DEPDIR)/losetup_static-loumount.Po"; else rm -f "$(DEPDIR)/losetup_static-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup_static-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++losetup_static-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loumount.obj -MD -MP -MF "$(DEPDIR)/losetup_static-loumount.Tpo" -c -o losetup_static-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loumount.Tpo" "$(DEPDIR)/losetup_static-loumount.Po"; else rm -f "$(DEPDIR)/losetup_static-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='losetup_static-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++losetup_static-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loop.o -MD -MP -MF "$(DEPDIR)/losetup_static-loop.Tpo" -c -o losetup_static-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loop.Tpo" "$(DEPDIR)/losetup_static-loop.Po"; else rm -f "$(DEPDIR)/losetup_static-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup_static-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++losetup_static-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-loop.obj -MD -MP -MF "$(DEPDIR)/losetup_static-loop.Tpo" -c -o losetup_static-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-loop.Tpo" "$(DEPDIR)/losetup_static-loop.Po"; else rm -f "$(DEPDIR)/losetup_static-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='losetup_static-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++losetup_static-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sha512.o -MD -MP -MF "$(DEPDIR)/losetup_static-sha512.Tpo" -c -o losetup_static-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sha512.Tpo" "$(DEPDIR)/losetup_static-sha512.Po"; else rm -f "$(DEPDIR)/losetup_static-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup_static-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++losetup_static-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sha512.obj -MD -MP -MF "$(DEPDIR)/losetup_static-sha512.Tpo" -c -o losetup_static-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sha512.Tpo" "$(DEPDIR)/losetup_static-sha512.Po"; else rm -f "$(DEPDIR)/losetup_static-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='losetup_static-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++losetup_static-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-rmd160.o -MD -MP -MF "$(DEPDIR)/losetup_static-rmd160.Tpo" -c -o losetup_static-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-rmd160.Tpo" "$(DEPDIR)/losetup_static-rmd160.Po"; else rm -f "$(DEPDIR)/losetup_static-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup_static-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++losetup_static-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-rmd160.obj -MD -MP -MF "$(DEPDIR)/losetup_static-rmd160.Tpo" -c -o losetup_static-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-rmd160.Tpo" "$(DEPDIR)/losetup_static-rmd160.Po"; else rm -f "$(DEPDIR)/losetup_static-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='losetup_static-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++losetup_static-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-aes.o -MD -MP -MF "$(DEPDIR)/losetup_static-aes.Tpo" -c -o losetup_static-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-aes.Tpo" "$(DEPDIR)/losetup_static-aes.Po"; else rm -f "$(DEPDIR)/losetup_static-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup_static-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++losetup_static-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-aes.obj -MD -MP -MF "$(DEPDIR)/losetup_static-aes.Tpo" -c -o losetup_static-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-aes.Tpo" "$(DEPDIR)/losetup_static-aes.Po"; else rm -f "$(DEPDIR)/losetup_static-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='losetup_static-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ losetup_static-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.o -MD -MP -MF $(DEPDIR)/losetup_static-sundries.Tpo -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-sundries.Tpo $(DEPDIR)/losetup_static-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.o -MD -MP -MF "$(DEPDIR)/losetup_static-sundries.Tpo" -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sundries.Tpo" "$(DEPDIR)/losetup_static-sundries.Po"; else rm -f "$(DEPDIR)/losetup_static-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup_static-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ losetup_static-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.obj -MD -MP -MF $(DEPDIR)/losetup_static-sundries.Tpo -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-sundries.Tpo $(DEPDIR)/losetup_static-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-sundries.obj -MD -MP -MF "$(DEPDIR)/losetup_static-sundries.Tpo" -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-sundries.Tpo" "$(DEPDIR)/losetup_static-sundries.Po"; else rm -f "$(DEPDIR)/losetup_static-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='losetup_static-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ losetup_static-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.o -MD -MP -MF $(DEPDIR)/losetup_static-xmalloc.Tpo -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-xmalloc.Tpo $(DEPDIR)/losetup_static-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.o -MD -MP -MF "$(DEPDIR)/losetup_static-xmalloc.Tpo" -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-xmalloc.Tpo" "$(DEPDIR)/losetup_static-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup_static-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup_static-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ losetup_static-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.obj -MD -MP -MF $(DEPDIR)/losetup_static-xmalloc.Tpo -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-xmalloc.Tpo $(DEPDIR)/losetup_static-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-xmalloc.obj -MD -MP -MF "$(DEPDIR)/losetup_static-xmalloc.Tpo" -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/losetup_static-xmalloc.Tpo" "$(DEPDIR)/losetup_static-xmalloc.Po"; else rm -f "$(DEPDIR)/losetup_static-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='losetup_static-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+-losetup_static-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-realpath.o -MD -MP -MF $(DEPDIR)/losetup_static-realpath.Tpo -c -o losetup_static-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-realpath.Tpo $(DEPDIR)/losetup_static-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup_static-realpath.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-
+-losetup_static-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT losetup_static-realpath.obj -MD -MP -MF $(DEPDIR)/losetup_static-realpath.Tpo -c -o losetup_static-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/losetup_static-realpath.Tpo $(DEPDIR)/losetup_static-realpath.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='losetup_static-realpath.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(losetup_static_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o losetup_static-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-
+ mount-mount.o: mount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.o -MD -MP -MF $(DEPDIR)/mount-mount.Tpo -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount.Tpo $(DEPDIR)/mount-mount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.o -MD -MP -MF "$(DEPDIR)/mount-mount.Tpo" -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount.Tpo" "$(DEPDIR)/mount-mount.Po"; else rm -f "$(DEPDIR)/mount-mount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount.c' object='mount-mount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount.o `test -f 'mount.c' || echo '$(srcdir)/'`mount.c
+
+ mount-mount.obj: mount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.obj -MD -MP -MF $(DEPDIR)/mount-mount.Tpo -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount.Tpo $(DEPDIR)/mount-mount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount.obj -MD -MP -MF "$(DEPDIR)/mount-mount.Tpo" -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount.Tpo" "$(DEPDIR)/mount-mount.Po"; else rm -f "$(DEPDIR)/mount-mount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount.c' object='mount-mount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount.obj `if test -f 'mount.c'; then $(CYGPATH_W) 'mount.c'; else $(CYGPATH_W) '$(srcdir)/mount.c'; fi`
+
++mount-lomount.o: lomount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.o -MD -MP -MF "$(DEPDIR)/mount-lomount.Tpo" -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-lomount.Tpo" "$(DEPDIR)/mount-lomount.Po"; else rm -f "$(DEPDIR)/mount-lomount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
++
++mount-lomount.obj: lomount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.obj -MD -MP -MF "$(DEPDIR)/mount-lomount.Tpo" -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-lomount.Tpo" "$(DEPDIR)/mount-lomount.Po"; else rm -f "$(DEPDIR)/mount-lomount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
++
++mount-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loumount.o -MD -MP -MF "$(DEPDIR)/mount-loumount.Tpo" -c -o mount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loumount.Tpo" "$(DEPDIR)/mount-loumount.Po"; else rm -f "$(DEPDIR)/mount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='mount-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++mount-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loumount.obj -MD -MP -MF "$(DEPDIR)/mount-loumount.Tpo" -c -o mount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loumount.Tpo" "$(DEPDIR)/mount-loumount.Po"; else rm -f "$(DEPDIR)/mount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='mount-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
++mount-loop.o: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loop.o -MD -MP -MF "$(DEPDIR)/mount-loop.Tpo" -c -o mount-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loop.Tpo" "$(DEPDIR)/mount-loop.Po"; else rm -f "$(DEPDIR)/mount-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='mount-loop.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loop.o `test -f 'loop.c' || echo '$(srcdir)/'`loop.c
++
++mount-loop.obj: loop.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-loop.obj -MD -MP -MF "$(DEPDIR)/mount-loop.Tpo" -c -o mount-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-loop.Tpo" "$(DEPDIR)/mount-loop.Po"; else rm -f "$(DEPDIR)/mount-loop.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loop.c' object='mount-loop.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-loop.obj `if test -f 'loop.c'; then $(CYGPATH_W) 'loop.c'; else $(CYGPATH_W) '$(srcdir)/loop.c'; fi`
++
++mount-sha512.o: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sha512.o -MD -MP -MF "$(DEPDIR)/mount-sha512.Tpo" -c -o mount-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sha512.Tpo" "$(DEPDIR)/mount-sha512.Po"; else rm -f "$(DEPDIR)/mount-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='mount-sha512.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sha512.o `test -f 'sha512.c' || echo '$(srcdir)/'`sha512.c
++
++mount-sha512.obj: sha512.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sha512.obj -MD -MP -MF "$(DEPDIR)/mount-sha512.Tpo" -c -o mount-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sha512.Tpo" "$(DEPDIR)/mount-sha512.Po"; else rm -f "$(DEPDIR)/mount-sha512.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha512.c' object='mount-sha512.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sha512.obj `if test -f 'sha512.c'; then $(CYGPATH_W) 'sha512.c'; else $(CYGPATH_W) '$(srcdir)/sha512.c'; fi`
++
++mount-rmd160.o: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-rmd160.o -MD -MP -MF "$(DEPDIR)/mount-rmd160.Tpo" -c -o mount-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-rmd160.Tpo" "$(DEPDIR)/mount-rmd160.Po"; else rm -f "$(DEPDIR)/mount-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='mount-rmd160.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-rmd160.o `test -f 'rmd160.c' || echo '$(srcdir)/'`rmd160.c
++
++mount-rmd160.obj: rmd160.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-rmd160.obj -MD -MP -MF "$(DEPDIR)/mount-rmd160.Tpo" -c -o mount-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-rmd160.Tpo" "$(DEPDIR)/mount-rmd160.Po"; else rm -f "$(DEPDIR)/mount-rmd160.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rmd160.c' object='mount-rmd160.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-rmd160.obj `if test -f 'rmd160.c'; then $(CYGPATH_W) 'rmd160.c'; else $(CYGPATH_W) '$(srcdir)/rmd160.c'; fi`
++
++mount-aes.o: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-aes.o -MD -MP -MF "$(DEPDIR)/mount-aes.Tpo" -c -o mount-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-aes.Tpo" "$(DEPDIR)/mount-aes.Po"; else rm -f "$(DEPDIR)/mount-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='mount-aes.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-aes.o `test -f 'aes.c' || echo '$(srcdir)/'`aes.c
++
++mount-aes.obj: aes.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-aes.obj -MD -MP -MF "$(DEPDIR)/mount-aes.Tpo" -c -o mount-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-aes.Tpo" "$(DEPDIR)/mount-aes.Po"; else rm -f "$(DEPDIR)/mount-aes.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='aes.c' object='mount-aes.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-aes.obj `if test -f 'aes.c'; then $(CYGPATH_W) 'aes.c'; else $(CYGPATH_W) '$(srcdir)/aes.c'; fi`
++
+ mount-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.o -MD -MP -MF $(DEPDIR)/mount-fstab.Tpo -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fstab.Tpo $(DEPDIR)/mount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.o -MD -MP -MF "$(DEPDIR)/mount-fstab.Tpo" -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fstab.Tpo" "$(DEPDIR)/mount-fstab.Po"; else rm -f "$(DEPDIR)/mount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mount-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ mount-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.obj -MD -MP -MF $(DEPDIR)/mount-fstab.Tpo -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fstab.Tpo $(DEPDIR)/mount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fstab.obj -MD -MP -MF "$(DEPDIR)/mount-fstab.Tpo" -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fstab.Tpo" "$(DEPDIR)/mount-fstab.Po"; else rm -f "$(DEPDIR)/mount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mount-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ mount-mount_mntent.o: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.o -MD -MP -MF $(DEPDIR)/mount-mount_mntent.Tpo -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount_mntent.Tpo $(DEPDIR)/mount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.o -MD -MP -MF "$(DEPDIR)/mount-mount_mntent.Tpo" -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount_mntent.Tpo" "$(DEPDIR)/mount-mount_mntent.Po"; else rm -f "$(DEPDIR)/mount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='mount-mount_mntent.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+
+ mount-mount_mntent.obj: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.obj -MD -MP -MF $(DEPDIR)/mount-mount_mntent.Tpo -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-mount_mntent.Tpo $(DEPDIR)/mount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-mount_mntent.obj -MD -MP -MF "$(DEPDIR)/mount-mount_mntent.Tpo" -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-mount_mntent.Tpo" "$(DEPDIR)/mount-mount_mntent.Po"; else rm -f "$(DEPDIR)/mount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='mount-mount_mntent.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+
+ mount-getusername.o: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.o -MD -MP -MF $(DEPDIR)/mount-getusername.Tpo -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-getusername.Tpo $(DEPDIR)/mount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.o -MD -MP -MF "$(DEPDIR)/mount-getusername.Tpo" -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-getusername.Tpo" "$(DEPDIR)/mount-getusername.Po"; else rm -f "$(DEPDIR)/mount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='mount-getusername.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+
+ mount-getusername.obj: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.obj -MD -MP -MF $(DEPDIR)/mount-getusername.Tpo -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-getusername.Tpo $(DEPDIR)/mount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-getusername.obj -MD -MP -MF "$(DEPDIR)/mount-getusername.Tpo" -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-getusername.Tpo" "$(DEPDIR)/mount-getusername.Po"; else rm -f "$(DEPDIR)/mount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='mount-getusername.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+
+-mount-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.o -MD -MP -MF $(DEPDIR)/mount-lomount.Tpo -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-lomount.Tpo $(DEPDIR)/mount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-
+-mount-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-lomount.obj -MD -MP -MF $(DEPDIR)/mount-lomount.Tpo -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-lomount.Tpo $(DEPDIR)/mount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='mount-lomount.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-
+ mount-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.o -MD -MP -MF $(DEPDIR)/mount-sundries.Tpo -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-sundries.Tpo $(DEPDIR)/mount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.o -MD -MP -MF "$(DEPDIR)/mount-sundries.Tpo" -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sundries.Tpo" "$(DEPDIR)/mount-sundries.Po"; else rm -f "$(DEPDIR)/mount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mount-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ mount-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.obj -MD -MP -MF $(DEPDIR)/mount-sundries.Tpo -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-sundries.Tpo $(DEPDIR)/mount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-sundries.obj -MD -MP -MF "$(DEPDIR)/mount-sundries.Tpo" -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-sundries.Tpo" "$(DEPDIR)/mount-sundries.Po"; else rm -f "$(DEPDIR)/mount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mount-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ mount-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.o -MD -MP -MF $(DEPDIR)/mount-xmalloc.Tpo -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-xmalloc.Tpo $(DEPDIR)/mount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.o -MD -MP -MF "$(DEPDIR)/mount-xmalloc.Tpo" -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-xmalloc.Tpo" "$(DEPDIR)/mount-xmalloc.Po"; else rm -f "$(DEPDIR)/mount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mount-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ mount-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.obj -MD -MP -MF $(DEPDIR)/mount-xmalloc.Tpo -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-xmalloc.Tpo $(DEPDIR)/mount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-xmalloc.obj -MD -MP -MF "$(DEPDIR)/mount-xmalloc.Tpo" -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-xmalloc.Tpo" "$(DEPDIR)/mount-xmalloc.Po"; else rm -f "$(DEPDIR)/mount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mount-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ mount-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.o -MD -MP -MF $(DEPDIR)/mount-realpath.Tpo -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-realpath.Tpo $(DEPDIR)/mount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.o -MD -MP -MF "$(DEPDIR)/mount-realpath.Tpo" -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-realpath.Tpo" "$(DEPDIR)/mount-realpath.Po"; else rm -f "$(DEPDIR)/mount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='mount-realpath.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+
+ mount-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.obj -MD -MP -MF $(DEPDIR)/mount-realpath.Tpo -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-realpath.Tpo $(DEPDIR)/mount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-realpath.obj -MD -MP -MF "$(DEPDIR)/mount-realpath.Tpo" -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-realpath.Tpo" "$(DEPDIR)/mount-realpath.Po"; else rm -f "$(DEPDIR)/mount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='mount-realpath.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+
+ mount-fsprobe.o: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.o -MD -MP -MF $(DEPDIR)/mount-fsprobe.Tpo -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe.Tpo $(DEPDIR)/mount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe.Tpo" -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe.Tpo" "$(DEPDIR)/mount-fsprobe.Po"; else rm -f "$(DEPDIR)/mount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='mount-fsprobe.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+
+ mount-fsprobe.obj: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe.Tpo -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe.Tpo $(DEPDIR)/mount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe.Tpo" -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe.Tpo" "$(DEPDIR)/mount-fsprobe.Po"; else rm -f "$(DEPDIR)/mount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='mount-fsprobe.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+
+ mount-fsprobe_blkid.o: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.o -MD -MP -MF $(DEPDIR)/mount-fsprobe_blkid.Tpo -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_blkid.Tpo $(DEPDIR)/mount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe_blkid.Tpo" -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo" "$(DEPDIR)/mount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='mount-fsprobe_blkid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+
+ mount-fsprobe_blkid.obj: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe_blkid.Tpo -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_blkid.Tpo $(DEPDIR)/mount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_blkid.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe_blkid.Tpo" -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo" "$(DEPDIR)/mount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='mount-fsprobe_blkid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+
+ mount-fsprobe_volumeid.o: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.o -MD -MP -MF $(DEPDIR)/mount-fsprobe_volumeid.Tpo -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_volumeid.Tpo $(DEPDIR)/mount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.o -MD -MP -MF "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" "$(DEPDIR)/mount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='mount-fsprobe_volumeid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+
+ mount-fsprobe_volumeid.obj: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.obj -MD -MP -MF $(DEPDIR)/mount-fsprobe_volumeid.Tpo -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-fsprobe_volumeid.Tpo $(DEPDIR)/mount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-fsprobe_volumeid.obj -MD -MP -MF "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo" "$(DEPDIR)/mount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/mount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='mount-fsprobe_volumeid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+
+ mount-env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.o -MD -MP -MF $(DEPDIR)/mount-env.Tpo -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-env.Tpo $(DEPDIR)/mount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.o -MD -MP -MF "$(DEPDIR)/mount-env.Tpo" -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-env.Tpo" "$(DEPDIR)/mount-env.Po"; else rm -f "$(DEPDIR)/mount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='mount-env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ mount-env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.obj -MD -MP -MF $(DEPDIR)/mount-env.Tpo -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-env.Tpo $(DEPDIR)/mount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-env.obj -MD -MP -MF "$(DEPDIR)/mount-env.Tpo" -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-env.Tpo" "$(DEPDIR)/mount-env.Po"; else rm -f "$(DEPDIR)/mount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='mount-env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ mount-linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.o -MD -MP -MF $(DEPDIR)/mount-linux_version.Tpo -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-linux_version.Tpo $(DEPDIR)/mount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.o -MD -MP -MF "$(DEPDIR)/mount-linux_version.Tpo" -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-linux_version.Tpo" "$(DEPDIR)/mount-linux_version.Po"; else rm -f "$(DEPDIR)/mount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='mount-linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ mount-linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.obj -MD -MP -MF $(DEPDIR)/mount-linux_version.Tpo -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-linux_version.Tpo $(DEPDIR)/mount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-linux_version.obj -MD -MP -MF "$(DEPDIR)/mount-linux_version.Tpo" -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-linux_version.Tpo" "$(DEPDIR)/mount-linux_version.Po"; else rm -f "$(DEPDIR)/mount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='mount-linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ mount-blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.o -MD -MP -MF $(DEPDIR)/mount-blkdev.Tpo -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-blkdev.Tpo $(DEPDIR)/mount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.o -MD -MP -MF "$(DEPDIR)/mount-blkdev.Tpo" -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-blkdev.Tpo" "$(DEPDIR)/mount-blkdev.Po"; else rm -f "$(DEPDIR)/mount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='mount-blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ mount-blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.obj -MD -MP -MF $(DEPDIR)/mount-blkdev.Tpo -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-blkdev.Tpo $(DEPDIR)/mount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-blkdev.obj -MD -MP -MF "$(DEPDIR)/mount-blkdev.Tpo" -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-blkdev.Tpo" "$(DEPDIR)/mount-blkdev.Po"; else rm -f "$(DEPDIR)/mount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='mount-blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+
+ mount-setproctitle.o: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.o -MD -MP -MF $(DEPDIR)/mount-setproctitle.Tpo -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-setproctitle.Tpo $(DEPDIR)/mount-setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.o -MD -MP -MF "$(DEPDIR)/mount-setproctitle.Tpo" -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-setproctitle.Tpo" "$(DEPDIR)/mount-setproctitle.Po"; else rm -f "$(DEPDIR)/mount-setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='mount-setproctitle.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+
+ mount-setproctitle.obj: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.obj -MD -MP -MF $(DEPDIR)/mount-setproctitle.Tpo -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mount-setproctitle.Tpo $(DEPDIR)/mount-setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -MT mount-setproctitle.obj -MD -MP -MF "$(DEPDIR)/mount-setproctitle.Tpo" -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mount-setproctitle.Tpo" "$(DEPDIR)/mount-setproctitle.Po"; else rm -f "$(DEPDIR)/mount-setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='mount-setproctitle.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mount_CFLAGS) $(CFLAGS) -c -o mount-setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+
+ env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.o -MD -MP -MF $(DEPDIR)/env.Tpo -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/env.Tpo $(DEPDIR)/env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.o -MD -MP -MF "$(DEPDIR)/env.Tpo" -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/env.Tpo" "$(DEPDIR)/env.Po"; else rm -f "$(DEPDIR)/env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.obj -MD -MP -MF $(DEPDIR)/env.Tpo -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/env.Tpo $(DEPDIR)/env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.obj -MD -MP -MF "$(DEPDIR)/env.Tpo" -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/env.Tpo" "$(DEPDIR)/env.Po"; else rm -f "$(DEPDIR)/env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.o -MD -MP -MF $(DEPDIR)/linux_version.Tpo -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/linux_version.Tpo $(DEPDIR)/linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.o -MD -MP -MF "$(DEPDIR)/linux_version.Tpo" -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/linux_version.Tpo" "$(DEPDIR)/linux_version.Po"; else rm -f "$(DEPDIR)/linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.obj -MD -MP -MF $(DEPDIR)/linux_version.Tpo -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/linux_version.Tpo $(DEPDIR)/linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linux_version.obj -MD -MP -MF "$(DEPDIR)/linux_version.Tpo" -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/linux_version.Tpo" "$(DEPDIR)/linux_version.Po"; else rm -f "$(DEPDIR)/linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.o -MD -MP -MF $(DEPDIR)/blkdev.Tpo -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/blkdev.Tpo $(DEPDIR)/blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.o -MD -MP -MF "$(DEPDIR)/blkdev.Tpo" -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/blkdev.Tpo" "$(DEPDIR)/blkdev.Po"; else rm -f "$(DEPDIR)/blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.obj -MD -MP -MF $(DEPDIR)/blkdev.Tpo -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/blkdev.Tpo $(DEPDIR)/blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT blkdev.obj -MD -MP -MF "$(DEPDIR)/blkdev.Tpo" -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/blkdev.Tpo" "$(DEPDIR)/blkdev.Po"; else rm -f "$(DEPDIR)/blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+
+ setproctitle.o: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.o -MD -MP -MF $(DEPDIR)/setproctitle.Tpo -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/setproctitle.Tpo $(DEPDIR)/setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.o -MD -MP -MF "$(DEPDIR)/setproctitle.Tpo" -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/setproctitle.Tpo" "$(DEPDIR)/setproctitle.Po"; else rm -f "$(DEPDIR)/setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='setproctitle.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o setproctitle.o `test -f '../lib/setproctitle.c' || echo '$(srcdir)/'`../lib/setproctitle.c
+
+ setproctitle.obj: ../lib/setproctitle.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.obj -MD -MP -MF $(DEPDIR)/setproctitle.Tpo -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/setproctitle.Tpo $(DEPDIR)/setproctitle.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT setproctitle.obj -MD -MP -MF "$(DEPDIR)/setproctitle.Tpo" -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/setproctitle.Tpo" "$(DEPDIR)/setproctitle.Po"; else rm -f "$(DEPDIR)/setproctitle.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/setproctitle.c' object='setproctitle.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o setproctitle.obj `if test -f '../lib/setproctitle.c'; then $(CYGPATH_W) '../lib/setproctitle.c'; else $(CYGPATH_W) '$(srcdir)/../lib/setproctitle.c'; fi`
+
+ mtab_lock_test-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-fstab.Tpo -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-fstab.Tpo $(DEPDIR)/mtab_lock_test-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-fstab.Tpo" -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo" "$(DEPDIR)/mtab_lock_test-fstab.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mtab_lock_test-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ mtab_lock_test-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-fstab.Tpo -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-fstab.Tpo $(DEPDIR)/mtab_lock_test-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-fstab.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-fstab.Tpo" -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo" "$(DEPDIR)/mtab_lock_test-fstab.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='mtab_lock_test-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ mtab_lock_test-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-sundries.Tpo -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-sundries.Tpo $(DEPDIR)/mtab_lock_test-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-sundries.Tpo" -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo" "$(DEPDIR)/mtab_lock_test-sundries.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mtab_lock_test-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ mtab_lock_test-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-sundries.Tpo -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-sundries.Tpo $(DEPDIR)/mtab_lock_test-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-sundries.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-sundries.Tpo" -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo" "$(DEPDIR)/mtab_lock_test-sundries.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='mtab_lock_test-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ mtab_lock_test-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.o -MD -MP -MF $(DEPDIR)/mtab_lock_test-xmalloc.Tpo -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-xmalloc.Tpo $(DEPDIR)/mtab_lock_test-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.o -MD -MP -MF "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" "$(DEPDIR)/mtab_lock_test-xmalloc.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mtab_lock_test-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ mtab_lock_test-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.obj -MD -MP -MF $(DEPDIR)/mtab_lock_test-xmalloc.Tpo -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mtab_lock_test-xmalloc.Tpo $(DEPDIR)/mtab_lock_test-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtab_lock_test-xmalloc.obj -MD -MP -MF "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo" "$(DEPDIR)/mtab_lock_test-xmalloc.Po"; else rm -f "$(DEPDIR)/mtab_lock_test-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='mtab_lock_test-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtab_lock_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtab_lock_test-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ umount-umount.o: umount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.o -MD -MP -MF $(DEPDIR)/umount-umount.Tpo -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-umount.Tpo $(DEPDIR)/umount-umount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.o -MD -MP -MF "$(DEPDIR)/umount-umount.Tpo" -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-umount.Tpo" "$(DEPDIR)/umount-umount.Po"; else rm -f "$(DEPDIR)/umount-umount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='umount.c' object='umount-umount.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-umount.o `test -f 'umount.c' || echo '$(srcdir)/'`umount.c
+
+ umount-umount.obj: umount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.obj -MD -MP -MF $(DEPDIR)/umount-umount.Tpo -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-umount.Tpo $(DEPDIR)/umount-umount.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-umount.obj -MD -MP -MF "$(DEPDIR)/umount-umount.Tpo" -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-umount.Tpo" "$(DEPDIR)/umount-umount.Po"; else rm -f "$(DEPDIR)/umount-umount.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='umount.c' object='umount-umount.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-umount.obj `if test -f 'umount.c'; then $(CYGPATH_W) 'umount.c'; else $(CYGPATH_W) '$(srcdir)/umount.c'; fi`
+
++umount-loumount.o: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-loumount.o -MD -MP -MF "$(DEPDIR)/umount-loumount.Tpo" -c -o umount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-loumount.Tpo" "$(DEPDIR)/umount-loumount.Po"; else rm -f "$(DEPDIR)/umount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='umount-loumount.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-loumount.o `test -f 'loumount.c' || echo '$(srcdir)/'`loumount.c
++
++umount-loumount.obj: loumount.c
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-loumount.obj -MD -MP -MF "$(DEPDIR)/umount-loumount.Tpo" -c -o umount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-loumount.Tpo" "$(DEPDIR)/umount-loumount.Po"; else rm -f "$(DEPDIR)/umount-loumount.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loumount.c' object='umount-loumount.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-loumount.obj `if test -f 'loumount.c'; then $(CYGPATH_W) 'loumount.c'; else $(CYGPATH_W) '$(srcdir)/loumount.c'; fi`
++
+ umount-fstab.o: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.o -MD -MP -MF $(DEPDIR)/umount-fstab.Tpo -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fstab.Tpo $(DEPDIR)/umount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.o -MD -MP -MF "$(DEPDIR)/umount-fstab.Tpo" -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fstab.Tpo" "$(DEPDIR)/umount-fstab.Po"; else rm -f "$(DEPDIR)/umount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='umount-fstab.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fstab.o `test -f 'fstab.c' || echo '$(srcdir)/'`fstab.c
+
+ umount-fstab.obj: fstab.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.obj -MD -MP -MF $(DEPDIR)/umount-fstab.Tpo -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fstab.Tpo $(DEPDIR)/umount-fstab.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fstab.obj -MD -MP -MF "$(DEPDIR)/umount-fstab.Tpo" -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fstab.Tpo" "$(DEPDIR)/umount-fstab.Po"; else rm -f "$(DEPDIR)/umount-fstab.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstab.c' object='umount-fstab.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fstab.obj `if test -f 'fstab.c'; then $(CYGPATH_W) 'fstab.c'; else $(CYGPATH_W) '$(srcdir)/fstab.c'; fi`
+
+ umount-mount_mntent.o: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.o -MD -MP -MF $(DEPDIR)/umount-mount_mntent.Tpo -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-mount_mntent.Tpo $(DEPDIR)/umount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.o -MD -MP -MF "$(DEPDIR)/umount-mount_mntent.Tpo" -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-mount_mntent.Tpo" "$(DEPDIR)/umount-mount_mntent.Po"; else rm -f "$(DEPDIR)/umount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='umount-mount_mntent.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-mount_mntent.o `test -f 'mount_mntent.c' || echo '$(srcdir)/'`mount_mntent.c
+
+ umount-mount_mntent.obj: mount_mntent.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.obj -MD -MP -MF $(DEPDIR)/umount-mount_mntent.Tpo -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-mount_mntent.Tpo $(DEPDIR)/umount-mount_mntent.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-mount_mntent.obj -MD -MP -MF "$(DEPDIR)/umount-mount_mntent.Tpo" -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-mount_mntent.Tpo" "$(DEPDIR)/umount-mount_mntent.Po"; else rm -f "$(DEPDIR)/umount-mount_mntent.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mount_mntent.c' object='umount-mount_mntent.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-mount_mntent.obj `if test -f 'mount_mntent.c'; then $(CYGPATH_W) 'mount_mntent.c'; else $(CYGPATH_W) '$(srcdir)/mount_mntent.c'; fi`
+
+ umount-getusername.o: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.o -MD -MP -MF $(DEPDIR)/umount-getusername.Tpo -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-getusername.Tpo $(DEPDIR)/umount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.o -MD -MP -MF "$(DEPDIR)/umount-getusername.Tpo" -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-getusername.Tpo" "$(DEPDIR)/umount-getusername.Po"; else rm -f "$(DEPDIR)/umount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='umount-getusername.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-getusername.o `test -f 'getusername.c' || echo '$(srcdir)/'`getusername.c
+
+ umount-getusername.obj: getusername.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.obj -MD -MP -MF $(DEPDIR)/umount-getusername.Tpo -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-getusername.Tpo $(DEPDIR)/umount-getusername.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-getusername.obj -MD -MP -MF "$(DEPDIR)/umount-getusername.Tpo" -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-getusername.Tpo" "$(DEPDIR)/umount-getusername.Po"; else rm -f "$(DEPDIR)/umount-getusername.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getusername.c' object='umount-getusername.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-getusername.obj `if test -f 'getusername.c'; then $(CYGPATH_W) 'getusername.c'; else $(CYGPATH_W) '$(srcdir)/getusername.c'; fi`
+
+-umount-lomount.o: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-lomount.o -MD -MP -MF $(DEPDIR)/umount-lomount.Tpo -c -o umount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-lomount.Tpo $(DEPDIR)/umount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='umount-lomount.o' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-lomount.o `test -f 'lomount.c' || echo '$(srcdir)/'`lomount.c
+-
+-umount-lomount.obj: lomount.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-lomount.obj -MD -MP -MF $(DEPDIR)/umount-lomount.Tpo -c -o umount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-lomount.Tpo $(DEPDIR)/umount-lomount.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lomount.c' object='umount-lomount.obj' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-lomount.obj `if test -f 'lomount.c'; then $(CYGPATH_W) 'lomount.c'; else $(CYGPATH_W) '$(srcdir)/lomount.c'; fi`
+-
+ umount-sundries.o: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.o -MD -MP -MF $(DEPDIR)/umount-sundries.Tpo -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-sundries.Tpo $(DEPDIR)/umount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.o -MD -MP -MF "$(DEPDIR)/umount-sundries.Tpo" -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-sundries.Tpo" "$(DEPDIR)/umount-sundries.Po"; else rm -f "$(DEPDIR)/umount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='umount-sundries.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-sundries.o `test -f 'sundries.c' || echo '$(srcdir)/'`sundries.c
+
+ umount-sundries.obj: sundries.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.obj -MD -MP -MF $(DEPDIR)/umount-sundries.Tpo -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-sundries.Tpo $(DEPDIR)/umount-sundries.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-sundries.obj -MD -MP -MF "$(DEPDIR)/umount-sundries.Tpo" -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-sundries.Tpo" "$(DEPDIR)/umount-sundries.Po"; else rm -f "$(DEPDIR)/umount-sundries.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sundries.c' object='umount-sundries.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-sundries.obj `if test -f 'sundries.c'; then $(CYGPATH_W) 'sundries.c'; else $(CYGPATH_W) '$(srcdir)/sundries.c'; fi`
+
+ umount-xmalloc.o: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.o -MD -MP -MF $(DEPDIR)/umount-xmalloc.Tpo -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-xmalloc.Tpo $(DEPDIR)/umount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.o -MD -MP -MF "$(DEPDIR)/umount-xmalloc.Tpo" -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-xmalloc.Tpo" "$(DEPDIR)/umount-xmalloc.Po"; else rm -f "$(DEPDIR)/umount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='umount-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-xmalloc.o `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+ umount-xmalloc.obj: xmalloc.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.obj -MD -MP -MF $(DEPDIR)/umount-xmalloc.Tpo -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-xmalloc.Tpo $(DEPDIR)/umount-xmalloc.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-xmalloc.obj -MD -MP -MF "$(DEPDIR)/umount-xmalloc.Tpo" -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-xmalloc.Tpo" "$(DEPDIR)/umount-xmalloc.Po"; else rm -f "$(DEPDIR)/umount-xmalloc.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmalloc.c' object='umount-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-xmalloc.obj `if test -f 'xmalloc.c'; then $(CYGPATH_W) 'xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/xmalloc.c'; fi`
+
+ umount-realpath.o: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.o -MD -MP -MF $(DEPDIR)/umount-realpath.Tpo -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-realpath.Tpo $(DEPDIR)/umount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.o -MD -MP -MF "$(DEPDIR)/umount-realpath.Tpo" -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-realpath.Tpo" "$(DEPDIR)/umount-realpath.Po"; else rm -f "$(DEPDIR)/umount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='umount-realpath.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-realpath.o `test -f 'realpath.c' || echo '$(srcdir)/'`realpath.c
+
+ umount-realpath.obj: realpath.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.obj -MD -MP -MF $(DEPDIR)/umount-realpath.Tpo -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-realpath.Tpo $(DEPDIR)/umount-realpath.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-realpath.obj -MD -MP -MF "$(DEPDIR)/umount-realpath.Tpo" -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-realpath.Tpo" "$(DEPDIR)/umount-realpath.Po"; else rm -f "$(DEPDIR)/umount-realpath.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='realpath.c' object='umount-realpath.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-realpath.obj `if test -f 'realpath.c'; then $(CYGPATH_W) 'realpath.c'; else $(CYGPATH_W) '$(srcdir)/realpath.c'; fi`
+
+ umount-fsprobe.o: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.o -MD -MP -MF $(DEPDIR)/umount-fsprobe.Tpo -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe.Tpo $(DEPDIR)/umount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe.Tpo" -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe.Tpo" "$(DEPDIR)/umount-fsprobe.Po"; else rm -f "$(DEPDIR)/umount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='umount-fsprobe.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe.o `test -f 'fsprobe.c' || echo '$(srcdir)/'`fsprobe.c
+
+ umount-fsprobe.obj: fsprobe.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe.Tpo -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe.Tpo $(DEPDIR)/umount-fsprobe.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe.Tpo" -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe.Tpo" "$(DEPDIR)/umount-fsprobe.Po"; else rm -f "$(DEPDIR)/umount-fsprobe.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe.c' object='umount-fsprobe.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe.obj `if test -f 'fsprobe.c'; then $(CYGPATH_W) 'fsprobe.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe.c'; fi`
+
+ umount-fsprobe_blkid.o: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.o -MD -MP -MF $(DEPDIR)/umount-fsprobe_blkid.Tpo -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_blkid.Tpo $(DEPDIR)/umount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe_blkid.Tpo" -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo" "$(DEPDIR)/umount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='umount-fsprobe_blkid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_blkid.o `test -f 'fsprobe_blkid.c' || echo '$(srcdir)/'`fsprobe_blkid.c
+
+ umount-fsprobe_blkid.obj: fsprobe_blkid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe_blkid.Tpo -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_blkid.Tpo $(DEPDIR)/umount-fsprobe_blkid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_blkid.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe_blkid.Tpo" -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo" "$(DEPDIR)/umount-fsprobe_blkid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_blkid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_blkid.c' object='umount-fsprobe_blkid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_blkid.obj `if test -f 'fsprobe_blkid.c'; then $(CYGPATH_W) 'fsprobe_blkid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_blkid.c'; fi`
+
+ umount-fsprobe_volumeid.o: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.o -MD -MP -MF $(DEPDIR)/umount-fsprobe_volumeid.Tpo -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_volumeid.Tpo $(DEPDIR)/umount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.o -MD -MP -MF "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" "$(DEPDIR)/umount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='umount-fsprobe_volumeid.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_volumeid.o `test -f 'fsprobe_volumeid.c' || echo '$(srcdir)/'`fsprobe_volumeid.c
+
+ umount-fsprobe_volumeid.obj: fsprobe_volumeid.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.obj -MD -MP -MF $(DEPDIR)/umount-fsprobe_volumeid.Tpo -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-fsprobe_volumeid.Tpo $(DEPDIR)/umount-fsprobe_volumeid.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-fsprobe_volumeid.obj -MD -MP -MF "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo" "$(DEPDIR)/umount-fsprobe_volumeid.Po"; else rm -f "$(DEPDIR)/umount-fsprobe_volumeid.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsprobe_volumeid.c' object='umount-fsprobe_volumeid.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-fsprobe_volumeid.obj `if test -f 'fsprobe_volumeid.c'; then $(CYGPATH_W) 'fsprobe_volumeid.c'; else $(CYGPATH_W) '$(srcdir)/fsprobe_volumeid.c'; fi`
+
+ umount-env.o: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.o -MD -MP -MF $(DEPDIR)/umount-env.Tpo -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-env.Tpo $(DEPDIR)/umount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.o -MD -MP -MF "$(DEPDIR)/umount-env.Tpo" -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-env.Tpo" "$(DEPDIR)/umount-env.Po"; else rm -f "$(DEPDIR)/umount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='umount-env.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-env.o `test -f '../lib/env.c' || echo '$(srcdir)/'`../lib/env.c
+
+ umount-env.obj: ../lib/env.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.obj -MD -MP -MF $(DEPDIR)/umount-env.Tpo -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-env.Tpo $(DEPDIR)/umount-env.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-env.obj -MD -MP -MF "$(DEPDIR)/umount-env.Tpo" -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-env.Tpo" "$(DEPDIR)/umount-env.Po"; else rm -f "$(DEPDIR)/umount-env.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/env.c' object='umount-env.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-env.obj `if test -f '../lib/env.c'; then $(CYGPATH_W) '../lib/env.c'; else $(CYGPATH_W) '$(srcdir)/../lib/env.c'; fi`
+
+ umount-linux_version.o: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.o -MD -MP -MF $(DEPDIR)/umount-linux_version.Tpo -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-linux_version.Tpo $(DEPDIR)/umount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.o -MD -MP -MF "$(DEPDIR)/umount-linux_version.Tpo" -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-linux_version.Tpo" "$(DEPDIR)/umount-linux_version.Po"; else rm -f "$(DEPDIR)/umount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='umount-linux_version.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-linux_version.o `test -f '../lib/linux_version.c' || echo '$(srcdir)/'`../lib/linux_version.c
+
+ umount-linux_version.obj: ../lib/linux_version.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.obj -MD -MP -MF $(DEPDIR)/umount-linux_version.Tpo -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-linux_version.Tpo $(DEPDIR)/umount-linux_version.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-linux_version.obj -MD -MP -MF "$(DEPDIR)/umount-linux_version.Tpo" -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-linux_version.Tpo" "$(DEPDIR)/umount-linux_version.Po"; else rm -f "$(DEPDIR)/umount-linux_version.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/linux_version.c' object='umount-linux_version.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-linux_version.obj `if test -f '../lib/linux_version.c'; then $(CYGPATH_W) '../lib/linux_version.c'; else $(CYGPATH_W) '$(srcdir)/../lib/linux_version.c'; fi`
+
+ umount-blkdev.o: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.o -MD -MP -MF $(DEPDIR)/umount-blkdev.Tpo -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-blkdev.Tpo $(DEPDIR)/umount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.o -MD -MP -MF "$(DEPDIR)/umount-blkdev.Tpo" -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-blkdev.Tpo" "$(DEPDIR)/umount-blkdev.Po"; else rm -f "$(DEPDIR)/umount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='umount-blkdev.o' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-blkdev.o `test -f '../lib/blkdev.c' || echo '$(srcdir)/'`../lib/blkdev.c
+
+ umount-blkdev.obj: ../lib/blkdev.c
+-@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.obj -MD -MP -MF $(DEPDIR)/umount-blkdev.Tpo -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/umount-blkdev.Tpo $(DEPDIR)/umount-blkdev.Po
++@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -MT umount-blkdev.obj -MD -MP -MF "$(DEPDIR)/umount-blkdev.Tpo" -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umount-blkdev.Tpo" "$(DEPDIR)/umount-blkdev.Po"; else rm -f "$(DEPDIR)/umount-blkdev.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../lib/blkdev.c' object='umount-blkdev.obj' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(umount_CFLAGS) $(CFLAGS) -c -o umount-blkdev.obj `if test -f '../lib/blkdev.c'; then $(CYGPATH_W) '../lib/blkdev.c'; else $(CYGPATH_W) '$(srcdir)/../lib/blkdev.c'; fi`
++uninstall-info-am:
+ install-man5: $(man5_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+- test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
++ test -z "$(man5dir)" || $(mkdir_p) "$(DESTDIR)$(man5dir)"
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+@@ -1243,7 +1544,7 @@
+ done
+ install-man8: $(man8_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+- test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
++ test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+@@ -1336,21 +1637,23 @@
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+- list='$(DISTFILES)'; \
+- dist_files=`for file in $$list; do echo $$file; done | \
+- sed -e "s|^$$srcdirstrip/||;t" \
+- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+- case $$dist_files in \
+- */*) $(MKDIR_P) `echo "$$dist_files" | \
+- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+- sort -u` ;; \
+- esac; \
+- for file in $$dist_files; do \
++ $(mkdir_p) $(distdir)/../config
++ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
++ list='$(DISTFILES)'; for file in $$list; do \
++ case $$file in \
++ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
++ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
++ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
++ dir="/$$dir"; \
++ $(mkdir_p) "$(distdir)$$dir"; \
++ else \
++ dir=''; \
++ fi; \
+ if test -d $$d/$$file; then \
+- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -1366,7 +1669,7 @@
+ all-am: Makefile $(PROGRAMS) $(MANS) $(DATA)
+ installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -1415,22 +1718,14 @@
+
+ install-data-am: install-man
+
+-install-dvi: install-dvi-am
+-
+ install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+-install-html: install-html-am
+-
+ install-info: install-info-am
+
+ install-man: install-man5 install-man8
+
+-install-pdf: install-pdf-am
+-
+-install-ps: install-ps-am
+-
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -1450,28 +1745,25 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-binPROGRAMS uninstall-man \
++uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+ uninstall-sbinPROGRAMS
+
+ uninstall-man: uninstall-man5 uninstall-man8
+
+-.MAKE: install-am install-exec-am install-strip
+-
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-noinstPROGRAMS clean-sbinPROGRAMS ctags \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+- install-dvi install-dvi-am install-exec install-exec-am \
+- install-exec-hook install-html install-html-am install-info \
++ install-exec install-exec-am install-exec-hook install-info \
+ install-info-am install-man install-man5 install-man8 \
+- install-pdf install-pdf-am install-ps install-ps-am \
+ install-sbinPROGRAMS install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+- uninstall-am uninstall-binPROGRAMS uninstall-man \
+- uninstall-man5 uninstall-man8 uninstall-sbinPROGRAMS
++ uninstall-am uninstall-binPROGRAMS uninstall-info-am \
++ uninstall-man uninstall-man5 uninstall-man8 \
++ uninstall-sbinPROGRAMS
+
+
+ install-exec-hook:
+diff -urN util-linux-ng-2.14/mount/aes.c util-linux-ng-2.14-AES/mount/aes.c
+--- util-linux-ng-2.14/mount/aes.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/aes.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,299 @@
++// I retain copyright in this code but I encourage its free use provided
++// that I don't carry any responsibility for the results. I am especially
++// happy to see it used in free and open source software. If you do use
++// it I would appreciate an acknowledgement of its origin in the code or
++// the product that results and I would also appreciate knowing a little
++// about the use to which it is being put. I am grateful to Frank Yellin
++// for some ideas that are used in this implementation.
++//
++// Dr B. R. Gladman <brg@gladman.uk.net> 6th April 2001.
++//
++// This is an implementation of the AES encryption algorithm (Rijndael)
++// designed by Joan Daemen and Vincent Rijmen. This version is designed
++// to provide both fixed and dynamic block and key lengths and can also
++// run with either big or little endian internal byte order (see aes.h).
++// It inputs block and key lengths in bytes with the legal values being
++// 16, 24 and 32.
++
++/*
++ * Modified by Jari Ruusu, May 1 2001
++ * - Fixed some compile warnings, code was ok but gcc warned anyway.
++ * - Changed basic types: byte -> unsigned char, word -> u_int32_t
++ * - Major name space cleanup: Names visible to outside now begin
++ * with "aes_" or "AES_". A lot of stuff moved from aes.h to aes.c
++ * - Removed C++ and DLL support as part of name space cleanup.
++ * - Eliminated unnecessary recomputation of tables. (actual bug fix)
++ * - Merged precomputed constant tables to aes.c file.
++ * - Removed data alignment restrictions for portability reasons.
++ * - Made block and key lengths accept bit count (128/192/256)
++ * as well byte count (16/24/32).
++ * - Removed all error checks. This change also eliminated the need
++ * to preinitialize the context struct to zero.
++ * - Removed some totally unused constants.
++ */
++
++/*
++ * Modified by Jari Ruusu, June 9 2003
++ * - Removed all code not necessary for small size
++ * optimized encryption using 256 bit keys.
++ */
++
++#include "aes.h"
++
++#if AES_BLOCK_SIZE != 16
++#error an illegal block size has been specified
++#endif
++
++// upr(x,n): rotates bytes within words by n positions, moving bytes
++// to higher index positions with wrap around into low positions
++// bval(x,n): extracts a byte from a word
++
++#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
++#define bval(x,n) ((unsigned char)((x) >> 8 * (n)))
++#define bytes2word(b0, b1, b2, b3) \
++ ((u_int32_t)(b3) << 24 | (u_int32_t)(b2) << 16 | (u_int32_t)(b1) << 8 | (b0))
++
++#if defined(i386) || defined(_I386) || defined(__i386__) || defined(__i386)
++/* little endian processor without data alignment restrictions */
++#define word_in(x) *(u_int32_t*)(x)
++#define word_out(x,v) *(u_int32_t*)(x) = (v)
++#else
++/* slower but generic big endian or with data alignment restrictions */
++#define word_in(x) ((u_int32_t)(((unsigned char *)(x))[0])|((u_int32_t)(((unsigned char *)(x))[1])<<8)|((u_int32_t)(((unsigned char *)(x))[2])<<16)|((u_int32_t)(((unsigned char *)(x))[3])<<24))
++#define word_out(x,v) ((unsigned char *)(x))[0]=(v),((unsigned char *)(x))[1]=((v)>>8),((unsigned char *)(x))[2]=((v)>>16),((unsigned char *)(x))[3]=((v)>>24)
++#endif
++
++// the finite field modular polynomial and elements
++
++#define ff_poly 0x011b
++#define ff_hi 0x80
++
++static int tab_gen = 0;
++static unsigned char s_box[256]; // the S box
++static u_int32_t rcon_tab[AES_RC_LENGTH]; // table of round constants
++static u_int32_t ft_tab[4][256];
++static u_int32_t fl_tab[4][256];
++
++// Generate the tables for the dynamic table option
++
++// It will generally be sensible to use tables to compute finite
++// field multiplies and inverses but where memory is scarse this
++// code might sometimes be better.
++
++// return 2 ^ (n - 1) where n is the bit number of the highest bit
++// set in x with x in the range 1 < x < 0x00000200. This form is
++// used so that locals within FFinv can be bytes rather than words
++
++static unsigned char hibit(const u_int32_t x)
++{ unsigned char r = (unsigned char)((x >> 1) | (x >> 2));
++
++ r |= (r >> 2);
++ r |= (r >> 4);
++ return (r + 1) >> 1;
++}
++
++// return the inverse of the finite field element x
++
++static unsigned char FFinv(const unsigned char x)
++{ unsigned char p1 = x, p2 = 0x1b, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0;
++
++ if(x < 2) return x;
++
++ for(;;)
++ {
++ if(!n1) return v1;
++
++ while(n2 >= n1)
++ {
++ n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2);
++ }
++
++ if(!n2) return v2;
++
++ while(n1 >= n2)
++ {
++ n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1);
++ }
++ }
++}
++
++// define the finite field multiplies required for Rijndael
++
++#define FFmul02(x) ((((x) & 0x7f) << 1) ^ ((x) & 0x80 ? 0x1b : 0))
++#define FFmul03(x) ((x) ^ FFmul02(x))
++
++// The forward and inverse affine transformations used in the S-box
++
++#define fwd_affine(x) \
++ (w = (u_int32_t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(unsigned char)(w^(w>>8)))
++
++static void gen_tabs(void)
++{ u_int32_t i, w;
++
++ for(i = 0, w = 1; i < AES_RC_LENGTH; ++i)
++ {
++ rcon_tab[i] = bytes2word(w, 0, 0, 0);
++ w = (w << 1) ^ (w & ff_hi ? ff_poly : 0);
++ }
++
++ for(i = 0; i < 256; ++i)
++ { unsigned char b;
++
++ s_box[i] = b = fwd_affine(FFinv((unsigned char)i));
++
++ w = bytes2word(b, 0, 0, 0);
++ fl_tab[0][i] = w;
++ fl_tab[1][i] = upr(w,1);
++ fl_tab[2][i] = upr(w,2);
++ fl_tab[3][i] = upr(w,3);
++ w = bytes2word(FFmul02(b), b, b, FFmul03(b));
++ ft_tab[0][i] = w;
++ ft_tab[1][i] = upr(w,1);
++ ft_tab[2][i] = upr(w,2);
++ ft_tab[3][i] = upr(w,3);
++ }
++}
++
++#define four_tables(x,tab,vf,rf,c) \
++ ( tab[0][bval(vf(x,0,c),rf(0,c))] \
++ ^ tab[1][bval(vf(x,1,c),rf(1,c))] \
++ ^ tab[2][bval(vf(x,2,c),rf(2,c))] \
++ ^ tab[3][bval(vf(x,3,c),rf(3,c))])
++
++#define vf1(x,r,c) (x)
++#define rf1(r,c) (r)
++#define rf2(r,c) ((r-c)&3)
++
++#define ls_box(x,c) four_tables(x,fl_tab,vf1,rf2,c)
++
++#define nc (AES_BLOCK_SIZE / 4)
++
++// Initialise the key schedule from the user supplied key.
++// The key length is now specified in bytes, 32.
++// This corresponds to bit length of 256 bits, and
++// to Nk value of 8 respectively.
++
++void aes_set_key(aes_context *cx, const unsigned char in_key[], int n_bytes, const int f)
++{ u_int32_t *kf, *kt, rci;
++
++ if(!tab_gen) { gen_tabs(); tab_gen = 1; }
++
++ cx->aes_Nkey = 8;
++ cx->aes_Nrnd = (cx->aes_Nkey > nc ? cx->aes_Nkey : nc) + 6;
++
++ cx->aes_e_key[0] = word_in(in_key );
++ cx->aes_e_key[1] = word_in(in_key + 4);
++ cx->aes_e_key[2] = word_in(in_key + 8);
++ cx->aes_e_key[3] = word_in(in_key + 12);
++
++ kf = cx->aes_e_key;
++ kt = kf + nc * (cx->aes_Nrnd + 1) - cx->aes_Nkey;
++ rci = 0;
++
++ switch(cx->aes_Nkey)
++ {
++ case 8: cx->aes_e_key[4] = word_in(in_key + 16);
++ cx->aes_e_key[5] = word_in(in_key + 20);
++ cx->aes_e_key[6] = word_in(in_key + 24);
++ cx->aes_e_key[7] = word_in(in_key + 28);
++ do
++ { kf[ 8] = kf[0] ^ ls_box(kf[7],3) ^ rcon_tab[rci++];
++ kf[ 9] = kf[1] ^ kf[ 8];
++ kf[10] = kf[2] ^ kf[ 9];
++ kf[11] = kf[3] ^ kf[10];
++ kf[12] = kf[4] ^ ls_box(kf[11],0);
++ kf[13] = kf[5] ^ kf[12];
++ kf[14] = kf[6] ^ kf[13];
++ kf[15] = kf[7] ^ kf[14];
++ kf += 8;
++ }
++ while (kf < kt);
++ break;
++ }
++}
++
++// y = output word, x = input word, r = row, c = column
++// for r = 0, 1, 2 and 3 = column accessed for row r
++
++#define s(x,c) x[c]
++
++// I am grateful to Frank Yellin for the following constructions
++// which, given the column (c) of the output state variable that
++// is being computed, return the input state variables which are
++// needed for each row (r) of the state
++
++// For the fixed block size options, compilers reduce these two
++// expressions to fixed variable references. For variable block
++// size code conditional clauses will sometimes be returned
++
++#define fwd_var(x,r,c) \
++ ( r==0 ? \
++ ( c==0 ? s(x,0) \
++ : c==1 ? s(x,1) \
++ : c==2 ? s(x,2) \
++ : c==3 ? s(x,3) \
++ : c==4 ? s(x,4) \
++ : c==5 ? s(x,5) \
++ : c==6 ? s(x,6) \
++ : s(x,7)) \
++ : r==1 ? \
++ ( c==0 ? s(x,1) \
++ : c==1 ? s(x,2) \
++ : c==2 ? s(x,3) \
++ : c==3 ? nc==4 ? s(x,0) : s(x,4) \
++ : c==4 ? s(x,5) \
++ : c==5 ? nc==8 ? s(x,6) : s(x,0) \
++ : c==6 ? s(x,7) \
++ : s(x,0)) \
++ : r==2 ? \
++ ( c==0 ? nc==8 ? s(x,3) : s(x,2) \
++ : c==1 ? nc==8 ? s(x,4) : s(x,3) \
++ : c==2 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \
++ : c==3 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \
++ : c==4 ? nc==8 ? s(x,7) : s(x,0) \
++ : c==5 ? nc==8 ? s(x,0) : s(x,1) \
++ : c==6 ? s(x,1) \
++ : s(x,2)) \
++ : \
++ ( c==0 ? nc==8 ? s(x,4) : s(x,3) \
++ : c==1 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \
++ : c==2 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \
++ : c==3 ? nc==4 ? s(x,2) : nc==8 ? s(x,7) : s(x,0) \
++ : c==4 ? nc==8 ? s(x,0) : s(x,1) \
++ : c==5 ? nc==8 ? s(x,1) : s(x,2) \
++ : c==6 ? s(x,2) \
++ : s(x,3)))
++
++#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c]
++#define so(y,x,c) word_out(y + 4 * c, s(x,c))
++
++#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c)
++#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c)
++
++#define locals(y,x) x[4],y[4]
++
++#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \
++ s(y,2) = s(x,2); s(y,3) = s(x,3);
++#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3)
++#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3)
++#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3)
++
++void aes_encrypt(const aes_context *cx, const unsigned char in_blk[], unsigned char out_blk[])
++{ u_int32_t locals(b0, b1);
++ const u_int32_t *kp = cx->aes_e_key;
++
++ state_in(b0, in_blk, kp); kp += nc;
++
++ { u_int32_t rnd;
++
++ for(rnd = 0; rnd < cx->aes_Nrnd - 1; ++rnd)
++ {
++ round(fwd_rnd, b1, b0, kp);
++ l_copy(b0, b1); kp += nc;
++ }
++
++ round(fwd_lrnd, b0, b1, kp);
++ }
++
++ state_out(out_blk, b0);
++}
+diff -urN util-linux-ng-2.14/mount/aes.h util-linux-ng-2.14-AES/mount/aes.h
+--- util-linux-ng-2.14/mount/aes.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/aes.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,97 @@
++// I retain copyright in this code but I encourage its free use provided
++// that I don't carry any responsibility for the results. I am especially
++// happy to see it used in free and open source software. If you do use
++// it I would appreciate an acknowledgement of its origin in the code or
++// the product that results and I would also appreciate knowing a little
++// about the use to which it is being put. I am grateful to Frank Yellin
++// for some ideas that are used in this implementation.
++//
++// Dr B. R. Gladman <brg@gladman.uk.net> 6th April 2001.
++//
++// This is an implementation of the AES encryption algorithm (Rijndael)
++// designed by Joan Daemen and Vincent Rijmen. This version is designed
++// to provide both fixed and dynamic block and key lengths and can also
++// run with either big or little endian internal byte order (see aes.h).
++// It inputs block and key lengths in bytes with the legal values being
++// 16, 24 and 32.
++
++/*
++ * Modified by Jari Ruusu, May 1 2001
++ * - Fixed some compile warnings, code was ok but gcc warned anyway.
++ * - Changed basic types: byte -> unsigned char, word -> u_int32_t
++ * - Major name space cleanup: Names visible to outside now begin
++ * with "aes_" or "AES_". A lot of stuff moved from aes.h to aes.c
++ * - Removed C++ and DLL support as part of name space cleanup.
++ * - Eliminated unnecessary recomputation of tables. (actual bug fix)
++ * - Merged precomputed constant tables to aes.c file.
++ * - Removed data alignment restrictions for portability reasons.
++ * - Made block and key lengths accept bit count (128/192/256)
++ * as well byte count (16/24/32).
++ * - Removed all error checks. This change also eliminated the need
++ * to preinitialize the context struct to zero.
++ * - Removed some totally unused constants.
++ */
++
++#ifndef _AES_H
++#define _AES_H
++
++#if defined(__linux__) && defined(__KERNEL__)
++# include <linux/types.h>
++#else
++# include <sys/types.h>
++#endif
++
++// CONFIGURATION OPTIONS (see also aes.c)
++//
++// Define AES_BLOCK_SIZE to set the cipher block size (16, 24 or 32) or
++// leave this undefined for dynamically variable block size (this will
++// result in much slower code).
++// IMPORTANT NOTE: AES_BLOCK_SIZE is in BYTES (16, 24, 32 or undefined). If
++// left undefined a slower version providing variable block length is compiled
++
++#define AES_BLOCK_SIZE 16
++
++// The number of key schedule words for different block and key lengths
++// allowing for method of computation which requires the length to be a
++// multiple of the key length
++//
++// Nk = 4 6 8
++// -------------
++// Nb = 4 | 60 60 64
++// 6 | 96 90 96
++// 8 | 120 120 120
++
++#if !defined(AES_BLOCK_SIZE) || (AES_BLOCK_SIZE == 32)
++#define AES_KS_LENGTH 120
++#define AES_RC_LENGTH 29
++#else
++#define AES_KS_LENGTH 4 * AES_BLOCK_SIZE
++#define AES_RC_LENGTH (9 * AES_BLOCK_SIZE) / 8 - 8
++#endif
++
++typedef struct
++{
++ u_int32_t aes_Nkey; // the number of words in the key input block
++ u_int32_t aes_Nrnd; // the number of cipher rounds
++ u_int32_t aes_e_key[AES_KS_LENGTH]; // the encryption key schedule
++ u_int32_t aes_d_key[AES_KS_LENGTH]; // the decryption key schedule
++#if !defined(AES_BLOCK_SIZE)
++ u_int32_t aes_Ncol; // the number of columns in the cipher state
++#endif
++} aes_context;
++
++// THE CIPHER INTERFACE
++
++#if !defined(AES_BLOCK_SIZE)
++extern void aes_set_blk(aes_context *, const int);
++#endif
++extern void aes_set_key(aes_context *, const unsigned char [], const int, const int);
++extern void aes_encrypt(const aes_context *, const unsigned char [], unsigned char []);
++extern void aes_decrypt(const aes_context *, const unsigned char [], unsigned char []);
++
++// The block length inputs to aes_set_block and aes_set_key are in numbers
++// of bytes or bits. The calls to subroutines must be made in the above
++// order but multiple calls can be made without repeating earlier calls
++// if their parameters have not changed.
++
++#endif // _AES_H
+diff -urN util-linux-ng-2.14/mount/lomount.c util-linux-ng-2.14-AES/mount/lomount.c
+--- util-linux-ng-2.14/mount/lomount.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/lomount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -1,4 +1,18 @@
+-/* Originally from Ted's losetup.c */
++/* Taken from Ted's losetup.c - Mitch <m.dsouza@mrc-apu.cam.ac.uk> */
++/* Added vfs mount options - aeb - 960223 */
++/* Removed lomount - aeb - 960224 */
++
++/*
++ * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
++ * - added Native Language Support
++ * 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * - fixed strerr(errno) in gettext calls
++ * 2001-04-11 Jari Ruusu
++ * - added AES support
++ */
++
++#define LOOPMAJOR 7
++
+ /*
+ * losetup.c - setup and control loop devices
+ */
+@@ -10,1010 +24,1318 @@
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <pwd.h>
++#include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
+ #include <sys/sysmacros.h>
+-#include <inttypes.h>
+-#include <dirent.h>
++#include <sys/wait.h>
++#include <limits.h>
++#include <fcntl.h>
++#include <mntent.h>
++#include <locale.h>
++#include <sys/time.h>
++#include <sys/utsname.h>
++#include <signal.h>
+
+ #include "loop.h"
+ #include "lomount.h"
+ #include "xstrncpy.h"
+ #include "nls.h"
+-#include "sundries.h"
+-#include "xmalloc.h"
+-#include "realpath.h"
++#include "sha512.h"
++#include "rmd160.h"
++#include "aes.h"
+
+-#define SIZE(a) (sizeof(a)/sizeof(a[0]))
++#if !defined(BLKGETSIZE64)
++# define BLKGETSIZE64 _IOR(0x12,114,size_t)
++#endif
+
+-#ifdef LOOP_SET_FD
++extern int verbose;
++extern char *xstrdup (const char *s); /* not: #include "sundries.h" */
++extern void error (const char *fmt, ...); /* idem */
++extern void show_all_loops(void);
++extern int read_options_from_fstab(char *, char **);
++extern int recompute_loop_dev_size(char *);
+
+-static int is_associated(int dev, struct stat *file, unsigned long long offset, int isoff);
++#if !defined(LOOP_PASSWORD_MIN_LENGTH)
++# define LOOP_PASSWORD_MIN_LENGTH 20
++#endif
+
+-static int
+-loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
+-{
+- memset(info, 0, sizeof(*info));
+- info->lo_number = info64->lo_number;
+- info->lo_device = info64->lo_device;
+- info->lo_inode = info64->lo_inode;
+- info->lo_rdevice = info64->lo_rdevice;
+- info->lo_offset = info64->lo_offset;
+- info->lo_encrypt_type = info64->lo_encrypt_type;
+- info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
+- info->lo_flags = info64->lo_flags;
+- info->lo_init[0] = info64->lo_init[0];
+- info->lo_init[1] = info64->lo_init[1];
+- if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
+- memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
+- else
+- memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
+- memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
+-
+- /* error in case values were truncated */
+- if (info->lo_device != info64->lo_device ||
+- info->lo_rdevice != info64->lo_rdevice ||
+- info->lo_inode != info64->lo_inode ||
+- info->lo_offset != info64->lo_offset)
+- return -EOVERFLOW;
+-
+- return 0;
+-}
+-
+-#define DEV_LOOP_PATH "/dev/loop"
+-#define DEV_PATH "/dev"
+-#define SYSFS_BLOCK_PATH "/sys/block"
+-#define LOOPMAJOR 7
+-#define NLOOPS_DEFAULT 8 /* /dev/loop[0-7] */
+-
+-struct looplist {
+- int flag; /* scanning options */
+- int ndef; /* number of tested default devices */
+- struct dirent **names; /* scandir-like list of loop devices */
+- int nnames; /* number of items in names */
+- int ncur; /* current possition in direcotry */
+- char name[32]; /* device name */
+- int ct_perm; /* count permission problems */
+- int ct_succ; /* count number of successfully
+- detected devices */
+-};
+-
+-#define LLFLG_USEDONLY (1 << 1) /* return used devices only */
+-#define LLFLG_FREEONLY (1 << 2) /* return non-used devices */
+-#define LLFLG_DONE (1 << 3) /* all is done */
+-#define LLFLG_SYSFS (1 << 4) /* try to use /sys/block */
+-#define LLFLG_SUBDIR (1 << 5) /* /dev/loop/N */
+-#define LLFLG_DFLT (1 << 6) /* directly try to check default loops */
++char *passFDnumber = (char *)0;
++char *passAskTwice = (char *)0;
++char *passSeedString = (char *)0;
++char *passHashFuncName = (char *)0;
++char *passIterThousands = (char *)0;
++char *loInitValue = (char *)0;
++char *gpgKeyFile = (char *)0;
++char *gpgHomeDir = (char *)0;
++char *clearTextKeyFile = (char *)0;
++char *loopOffsetBytes = (char *)0;
++char *loopSizeBytes = (char *)0;
++char *loopEncryptionType = (char *)0;
++
++static int multiKeyMode = 0; /* 0=single-key 64=multi-key-v2 65=multi-key-v3 1000=any */
++static char *multiKeyPass[66];
++static char *loopFileName;
+
+-int
+-is_loop_device (const char *device) {
+- struct stat st;
++#ifdef MAIN
++static char *
++crypt_name (int id, int *flags) {
++ int i;
+
+- return (stat(device, &st) == 0 &&
+- S_ISBLK(st.st_mode) &&
+- major(st.st_rdev) == LOOPMAJOR);
++ for (i = 0; loop_crypt_type_tbl[i].id != -1; i++)
++ if(id == loop_crypt_type_tbl[i].id) {
++ *flags = loop_crypt_type_tbl[i].flags;
++ return loop_crypt_type_tbl[i].name;
++ }
++ *flags = 0;
++ if(id == 18)
++ return "CryptoAPI";
++ return "undefined";
+ }
+
+ static int
+-is_loop_used(int fd)
+-{
+- struct loop_info li;
+- return ioctl (fd, LOOP_GET_STATUS, &li) == 0;
+-}
++show_loop(char *device) {
++ struct loop_info64 loopinfo;
++ int fd;
+
+-static char *
+-looplist_mk_devname(struct looplist *ll, int num)
+-{
+- if (ll->flag & LLFLG_SUBDIR)
+- snprintf(ll->name, sizeof(ll->name),
+- DEV_LOOP_PATH "/%d", num);
+- else
+- snprintf(ll->name, sizeof(ll->name),
+- DEV_PATH "/loop%d", num);
++ if ((fd = open(device, O_RDONLY)) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't open device %s: %s\n"),
++ device, strerror (errsv));
++ return 2;
++ }
++ if (loop_get_status64_ioctl(fd, &loopinfo) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
++ device, strerror (errsv));
++ close (fd);
++ return 1;
++ }
++ loopinfo.lo_file_name[LO_NAME_SIZE-1] = 0;
++ loopinfo.lo_crypt_name[LO_NAME_SIZE-1] = 0;
++ printf("%s: [%04llx]:%llu (%s)", device, (unsigned long long)loopinfo.lo_device,
++ (unsigned long long)loopinfo.lo_inode, loopinfo.lo_file_name);
++ if (loopinfo.lo_offset) {
++ if ((long long)loopinfo.lo_offset < 0) {
++ printf(_(" offset=@%llu"), -((unsigned long long)loopinfo.lo_offset));
++ } else {
++ printf(_(" offset=%llu"), (unsigned long long)loopinfo.lo_offset);
++ }
++ }
++ if (loopinfo.lo_sizelimit)
++ printf(_(" sizelimit=%llu"), (unsigned long long)loopinfo.lo_sizelimit);
++ if (loopinfo.lo_encrypt_type) {
++ int flags;
++ char *s = crypt_name (loopinfo.lo_encrypt_type, &flags);
++
++ printf(_(" encryption=%s"), s);
++ /* type 18 == LO_CRYPT_CRYPTOAPI */
++ if (loopinfo.lo_encrypt_type == 18) {
++ printf("/%s", loopinfo.lo_crypt_name);
++ } else {
++ if(flags & 2)
++ printf("-");
++ if(flags & 1)
++ printf("%u", (unsigned int)loopinfo.lo_encrypt_key_size << 3);
++ }
++ }
++ switch(loopinfo.lo_flags & 0x180000) {
++ case 0x180000:
++ printf(_(" multi-key-v3"));
++ break;
++ case 0x100000:
++ printf(_(" multi-key-v2"));
++ break;
++ }
++ /* type 2 == LO_CRYPT_DES */
++ if (loopinfo.lo_init[0] && (loopinfo.lo_encrypt_type != 2))
++ printf(_(" loinit=%llu"), (unsigned long long)loopinfo.lo_init[0]);
++ if (loopinfo.lo_flags & 0x200000)
++ printf(_(" read-only"));
++ printf("\n");
++ close (fd);
+
+- return is_loop_device(ll->name) ? ll->name : NULL;
++ return 0;
+ }
++#endif
+
+-/* ignores all non-loop devices, default loop devices */
+-static int
+-filter_loop(const struct dirent *d)
+-{
+- return strncmp(d->d_name, "loop", 4) == 0;
+-}
++#define SIZE(a) (sizeof(a)/sizeof(a[0]))
+
+-/* all loops exclude default loops */
+-static int
+-filter_loop_ndflt(const struct dirent *d)
+-{
+- int mn;
++#if !defined(MAIN)
++char *
++find_unused_loop_device (void) {
++ /* Just creating a device, say in /tmp, is probably a bad idea -
++ people might have problems with backup or so.
++ So, we just try /dev/loop[0-7]. */
++ char dev[20];
++ char *loop_formats[] = { "/dev/loop%d", "/dev/loop/%d" };
++ int i, j, fd, somedev = 0, someloop = 0;
++ struct stat statbuf;
+
+- if (strncmp(d->d_name, "loop", 4) == 0 &&
+- sscanf(d->d_name, "loop%d", &mn) == 1 &&
+- mn >= NLOOPS_DEFAULT)
+- return 1;
++ for (j = 0; j < SIZE(loop_formats); j++) {
++ for(i = 0; i < 256; i++) {
++ sprintf(dev, loop_formats[j], i);
++ if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ somedev++;
++ fd = open (dev, O_RDONLY);
++ if (fd >= 0) {
++ if (is_unused_loop_device(fd) == 0)
++ someloop++; /* in use */
++ else if (errno == ENXIO) {
++ close (fd);
++ return xstrdup(dev);/* probably free */
++ }
++ close (fd);
++ }
++ continue;/* continue trying as long as devices exist */
++ }
++ break;
++ }
++ }
++
++ if (!somedev)
++ error(_("mount: could not find any device /dev/loop#"));
++ else if (!someloop)
++ error(_("mount: Could not find any loop device. Maybe this kernel does not know\n"
++ " about the loop device? (If so, recompile or `modprobe loop'.)"));
++ else
++ error(_("mount: could not find any free loop device"));
+ return 0;
+ }
+
+-static int
+-filter_loop_num(const struct dirent *d)
++int is_loop_active(const char *dev, const char *backdev)
+ {
+- char *end = NULL;
+- int mn = strtol(d->d_name, &end, 10);
+-
+- if (mn >= NLOOPS_DEFAULT && end && *end == '\0')
+- return 1;
+- return 0;
++ int fd;
++ int ret = 0;
++ struct stat statbuf;
++ struct loop_info64 loopinfo;
++ if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ fd = open (dev, O_RDONLY);
++ if (fd < 0)
++ return 0;
++ if ((loop_get_status64_ioctl(fd, &loopinfo) == 0)
++ && (stat (backdev, &statbuf) == 0)
++ && (statbuf.st_dev == loopinfo.lo_device)
++ && (statbuf.st_ino == loopinfo.lo_inode))
++ ret = 1; /* backing device matches */
++ memset(&loopinfo, 0, sizeof(loopinfo));
++ close(fd);
++ }
++ return ret;
+ }
++#endif
+
+-static int
+-looplist_open(struct looplist *ll, int flag)
++static int rd_wr_retry(int fd, char *buf, int cnt, int w)
+ {
+- struct stat st;
++ int x, y, z;
+
+- memset(ll, 0, sizeof(*ll));
+- ll->flag = flag;
+- ll->ndef = -1;
+- ll->ncur = -1;
++ x = 0;
++ while(x < cnt) {
++ y = cnt - x;
++ if(w) {
++ z = write(fd, buf + x, y);
++ } else {
++ z = read(fd, buf + x, y);
++ if (!z) return x;
++ }
++ if(z < 0) {
++ if ((errno == EAGAIN) || (errno == ENOMEM) || (errno == ERESTART) || (errno == EINTR)) {
++ continue;
++ }
++ return x;
++ }
++ x += z;
++ }
++ return x;
++}
+
+- if (stat(DEV_PATH, &st) == -1 || (!S_ISDIR(st.st_mode)))
+- return -1; /* /dev doesn't exist */
++static char *get_FD_pass(int fd)
++{
++ char *p = NULL, *n;
++ int x = 0, y = 0;
+
+- if (stat(DEV_LOOP_PATH, &st) == 0 && S_ISDIR(st.st_mode))
+- ll->flag |= LLFLG_SUBDIR; /* /dev/loop/ exists */
++ do {
++ if(y >= (x - 1)) {
++ x += 128;
++ /* Must enforce some max limit here -- this code */
++ /* runs as part of mount, and mount is setuid root */
++ /* and has used mlockall(MCL_CURRENT | MCL_FUTURE) */
++ if(x > (4*1024)) return(NULL);
++ n = malloc(x);
++ if(!n) return(NULL);
++ if(p) {
++ memcpy(n, p, y);
++ memset(p, 0, y);
++ free(p);
++ }
++ p = n;
++ }
++ if(rd_wr_retry(fd, p + y, 1, 0) != 1) break;
++ if((p[y] == '\n') || !p[y]) break;
++ y++;
++ } while(1);
++ if(p) p[y] = 0;
++ return p;
++}
+
+- if ((ll->flag & LLFLG_USEDONLY) &&
+- stat(SYSFS_BLOCK_PATH, &st) == 0 &&
+- S_ISDIR(st.st_mode))
+- ll->flag |= LLFLG_SYSFS; /* try to use /sys/block/loopN */
++static unsigned long long mystrtoull(char *s, int acceptAT)
++{
++ unsigned long long v = 0;
++ int negative = 0;
+
+- ll->flag |= LLFLG_DFLT; /* required! */
+- return 0;
++ while ((*s == ' ') || (*s == '\t'))
++ s++;
++ if (acceptAT && (*s == '@')) {
++ s++;
++ negative = 1;
++ }
++ if (*s == '0') {
++ s++;
++ if ((*s == 'x') || (*s == 'X')) {
++ s++;
++ sscanf(s, "%llx", &v);
++ } else {
++ sscanf(s, "%llo", &v);
++ }
++ } else {
++ sscanf(s, "%llu", &v);
++ }
++ return negative ? -v : v;
+ }
+
+-static void
+-looplist_close(struct looplist *ll)
++static void warnAboutBadKeyData(int x)
+ {
+- if (ll->names) {
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++)
+- free(ll->names[ll->ncur]);
+-
+- free(ll->names);
+- ll->names = NULL;
+- ll->nnames = 0;
++ if((x > 1) && (x != 64) && (x != 65)) {
++ fprintf(stderr, _("Warning: Unknown key data format - using it anyway\n"));
+ }
+- ll->ncur = -1;
+- ll->flag |= LLFLG_DONE;
+ }
+
+-static int
+-looplist_is_wanted(struct looplist *ll, int fd)
++static int are_these_files_same(const char *name1, const char *name2)
+ {
+- int ret;
+-
+- if (!(ll->flag & (LLFLG_USEDONLY | LLFLG_FREEONLY)))
+- return 1;
+- ret = is_loop_used(fd);
++ struct stat statbuf1;
++ struct stat statbuf2;
+
+- if ((ll->flag & LLFLG_USEDONLY) && ret == 0)
+- return 0;
+- if ((ll->flag & LLFLG_FREEONLY) && ret == 1)
+- return 0;
+-
+- return 1;
++ if(!name1 || !*name1 || !name2 || !*name2) return 0;
++ if(stat(name1, &statbuf1)) return 0;
++ if(stat(name2, &statbuf2)) return 0;
++ if(statbuf1.st_dev != statbuf2.st_dev) return 0;
++ if(statbuf1.st_ino != statbuf2.st_ino) return 0;
++ return 1; /* are same */
+ }
+
+-static int
+-looplist_next(struct looplist *ll)
++static char *do_GPG_pipe(char *pass)
+ {
+- int fd;
+- int ret;
+- char *dirname, *dev;
+-
+- if (ll->flag & LLFLG_DONE)
+- return -1;
++ int x, pfdi[2], pfdo[2];
++ char str[10], *a[16], *e[2], *h;
++ pid_t gpid;
++ struct passwd *p;
++ void *oldSigPipeHandler;
+
+- /* A) try to use /sys/block/loopN devices (for losetup -a only)
+- */
+- if (ll->flag & LLFLG_SYSFS) {
+- int mn;
+-
+- if (!ll->nnames) {
+- ll->nnames = scandir(SYSFS_BLOCK_PATH, &ll->names,
+- filter_loop, versionsort);
+- ll->ncur = -1;
+- }
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++) {
+- ret = sscanf(ll->names[ll->ncur]->d_name, "loop%d", &mn);
+- free(ll->names[ll->ncur]);
+- if (ret != 1)
+- continue;
+- dev = looplist_mk_devname(ll, mn);
+- if (dev) {
+- ll->ct_succ++;
+- if ((fd = open(dev, O_RDONLY)) > -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
+- }
++ if((getuid() == 0) && gpgHomeDir && gpgHomeDir[0]) {
++ h = gpgHomeDir;
++ } else {
++ if(!(p = getpwuid(getuid()))) {
++ fprintf(stderr, _("Error: Unable to detect home directory for uid %d\n"), (int)getuid());
++ return NULL;
+ }
+- if (ll->nnames)
+- free(ll->names);
+- ll->names = NULL;
+- ll->ncur = -1;
+- ll->nnames = 0;
+- ll->flag &= ~LLFLG_SYSFS;
+- goto done;
++ h = p->pw_dir;
+ }
+-
+- /* B) Classic way, try first eight loop devices (default number
+- * of loop devices). This is enough for 99% of all cases.
+- */
+- if (ll->flag & LLFLG_DFLT) {
+- for (++ll->ncur; ll->ncur < NLOOPS_DEFAULT; ll->ncur++) {
+- dev = looplist_mk_devname(ll, ll->ncur);
+- if (dev) {
+- ll->ct_succ++;
+- if ((fd = open(dev, O_RDONLY)) > -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
+- }
+- }
+- ll->flag &= ~LLFLG_DFLT;
+- ll->ncur = -1;
++ if(!(e[0] = malloc(strlen(h) + 6))) {
++ nomem1:
++ fprintf(stderr, _("Error: Unable to allocate memory\n"));
++ return NULL;
+ }
++ sprintf(e[0], "HOME=%s", h);
++ e[1] = 0;
+
++ if(pipe(&pfdi[0])) {
++ nomem2:
++ free(e[0]);
++ goto nomem1;
++ }
++ if(pipe(&pfdo[0])) {
++ close(pfdi[0]);
++ close(pfdi[1]);
++ goto nomem2;
++ }
+
+- /* C) the worst posibility, scan all /dev or /dev/loop
++ /*
++ * When this code is run as part of losetup, normal read permissions
++ * affect the open() below because losetup is not setuid-root.
++ *
++ * When this code is run as part of mount, only root can set
++ * 'gpgKeyFile' and as such, only root can decide what file is opened
++ * below. However, since mount is usually setuid-root all non-root
++ * users can also open() the file too, but that file's contents are
++ * only piped to gpg. This readable-for-all is intended behaviour,
++ * and is very useful in situations where non-root users mount loop
++ * devices with their own gpg private key, and yet don't have access
++ * to the actual key used to encrypt loop device.
+ */
+- dirname = ll->flag & LLFLG_SUBDIR ? DEV_LOOP_PATH : DEV_PATH;
++ if((x = open(gpgKeyFile, O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open %s for reading\n"), gpgKeyFile);
++ nomem3:
++ free(e[0]);
++ close(pfdo[0]);
++ close(pfdo[1]);
++ close(pfdi[0]);
++ close(pfdi[1]);
++ return NULL;
++ }
+
+- if (!ll->nnames) {
+- ll->nnames = scandir(dirname, &ll->names,
+- ll->flag & LLFLG_SUBDIR ?
+- filter_loop_num : filter_loop_ndflt,
+- versionsort);
+- ll->ncur = -1;
+- }
+-
+- for(++ll->ncur; ll->ncur < ll->nnames; ll->ncur++) {
+- struct stat st;
+-
+- snprintf(ll->name, sizeof(ll->name),
+- "%s/%s", dirname, ll->names[ll->ncur]->d_name);
+- free(ll->names[ll->ncur]);
+- ret = stat(ll->name, &st);
+-
+- if (ret == 0 && S_ISBLK(st.st_mode) &&
+- major(st.st_rdev) == LOOPMAJOR &&
+- minor(st.st_rdev) >= NLOOPS_DEFAULT) {
+- ll->ct_succ++;
+- fd = open(ll->name, O_RDONLY);
+-
+- if (fd != -1) {
+- if (looplist_is_wanted(ll, fd))
+- return fd;
+- close(fd);
+- } else if (errno == EACCES)
+- ll->ct_perm++;
++ /*
++ * If someone puts a gpg key file at beginning of device and
++ * puts the real file system at some offset into the device,
++ * this code extracts that gpg key file into a temp file so gpg
++ * won't end up reading whole device when decrypting the key file.
++ *
++ * Example of encrypted cdrom mount with 8192 bytes reserved for gpg key file:
++ * mount -t iso9660 /dev/cdrom /cdrom -o loop=/dev/loop0,encryption=AES128,gpgkey=/dev/cdrom,offset=8192
++ * ^^^^^^^^^^ ^^^^^^^^^^ ^^^^
++ */
++ if(loopOffsetBytes && are_these_files_same(loopFileName, gpgKeyFile)) {
++ FILE *f;
++ char b[1024];
++ long long cnt;
++ int cnt2, cnt3;
++
++ cnt = mystrtoull(loopOffsetBytes, 1);
++ if(cnt < 0) cnt = -cnt;
++ if(cnt > (1024 * 1024)) cnt = 1024 * 1024; /* sanity check */
++ f = tmpfile();
++ if(!f) {
++ fprintf(stderr, _("Error: unable to create temp file\n"));
++ close(x);
++ goto nomem3;
++ }
++ while(cnt > 0) {
++ cnt2 = sizeof(b);
++ if(cnt < cnt2) cnt2 = cnt;
++ cnt3 = rd_wr_retry(x, b, cnt2, 0);
++ if(cnt3 && (fwrite(b, cnt3, 1, f) != 1)) {
++ tmpWrErr:
++ fprintf(stderr, _("Error: unable to write to temp file\n"));
++ fclose(f);
++ close(x);
++ goto nomem3;
++ }
++ if(cnt2 != cnt3) break;
++ cnt -= cnt3;
++ }
++ if(fflush(f)) goto tmpWrErr;
++ close(x);
++ x = dup(fileno(f));
++ fclose(f);
++ lseek(x, 0L, SEEK_SET);
++ }
++
++ sprintf(str, "%d", pfdi[0]);
++ if(!(gpid = fork())) {
++ dup2(x, 0);
++ dup2(pfdo[1], 1);
++ close(x);
++ close(pfdi[1]);
++ close(pfdo[0]);
++ close(pfdo[1]);
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 2);
++ close(x);
++ }
++ x = 0;
++ a[x++] = "gpg";
++ if(gpgHomeDir && gpgHomeDir[0]) {
++ a[x++] = "--homedir";
++ a[x++] = gpgHomeDir;
++ }
++ a[x++] = "--no-options";
++ a[x++] = "--quiet";
++ a[x++] = "--batch";
++ a[x++] = "--no-tty";
++ a[x++] = "--passphrase-fd";
++ a[x++] = str;
++ a[x++] = "--decrypt";
++ a[x] = 0;
++ if(setgid(getgid())) exit(1);
++ if(setuid(getuid())) exit(1);
++ for(x = 3; x < 1024; x++) {
++ if(x == pfdi[0]) continue;
++ close(x);
++ }
++ execve("/bin/gpg", &a[0], &e[0]);
++ execve("/usr/bin/gpg", &a[0], &e[0]);
++ execve("/usr/local/bin/gpg", &a[0], &e[0]);
++ exit(1);
++ }
++ free(e[0]);
++ close(x);
++ close(pfdi[0]);
++ close(pfdo[1]);
++ if(gpid == -1) {
++ close(pfdi[1]);
++ close(pfdo[0]);
++ goto nomem1;
++ }
++
++ x = strlen(pass);
++
++ /* ignore possible SIGPIPE signal while writing to gpg */
++ oldSigPipeHandler = signal(SIGPIPE, SIG_IGN);
++ rd_wr_retry(pfdi[1], pass, x, 1);
++ rd_wr_retry(pfdi[1], "\n", 1, 1);
++ if(oldSigPipeHandler != SIG_ERR) signal(SIGPIPE, oldSigPipeHandler);
++
++ close(pfdi[1]);
++ memset(pass, 0, x);
++ x = 0;
++ while(x < 66) {
++ multiKeyPass[x] = get_FD_pass(pfdo[0]);
++ if(!multiKeyPass[x]) {
++ /* mem alloc failed - abort */
++ multiKeyPass[0] = 0;
++ break;
+ }
++ if(strlen(multiKeyPass[x]) < LOOP_PASSWORD_MIN_LENGTH) break;
++ x++;
+ }
+-done:
+- looplist_close(ll);
+- return -1;
++ warnAboutBadKeyData(x);
++ if(x >= 65)
++ multiKeyMode = 65;
++ if(x == 64)
++ multiKeyMode = 64;
++ close(pfdo[0]);
++ waitpid(gpid, &x, 0);
++ if(!multiKeyPass[0]) goto nomem1;
++ return multiKeyPass[0];
+ }
+
+-#ifdef MAIN
+-
+-static int
+-show_loop_fd(int fd, char *device) {
+- struct loop_info loopinfo;
+- struct loop_info64 loopinfo64;
+- int errsv;
+-
+- if (ioctl(fd, LOOP_GET_STATUS64, &loopinfo64) == 0) {
+-
+- loopinfo64.lo_file_name[LO_NAME_SIZE-2] = '*';
+- loopinfo64.lo_file_name[LO_NAME_SIZE-1] = 0;
+- loopinfo64.lo_crypt_name[LO_NAME_SIZE-1] = 0;
+-
+- printf("%s: [%04" PRIx64 "]:%" PRIu64 " (%s)",
+- device, loopinfo64.lo_device, loopinfo64.lo_inode,
+- loopinfo64.lo_file_name);
+-
+- if (loopinfo64.lo_offset)
+- printf(_(", offset %" PRIu64 ), loopinfo64.lo_offset);
+-
+- if (loopinfo64.lo_sizelimit)
+- printf(_(", sizelimit %" PRIu64 ), loopinfo64.lo_sizelimit);
+-
+- if (loopinfo64.lo_encrypt_type ||
+- loopinfo64.lo_crypt_name[0]) {
+- char *e = (char *)loopinfo64.lo_crypt_name;
++static char *sGetPass(int minLen, int warnLen)
++{
++ char *p, *s, *seed;
++ int i, ask2, close_i_fd = 0;
+
+- if (*e == 0 && loopinfo64.lo_encrypt_type == 1)
+- e = "XOR";
+- printf(_(", encryption %s (type %" PRIu32 ")"),
+- e, loopinfo64.lo_encrypt_type);
++ if(!passFDnumber) {
++ if(clearTextKeyFile) {
++ if((i = open(clearTextKeyFile, O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open %s for reading\n"), clearTextKeyFile);
++ return NULL;
++ }
++ close_i_fd = 1;
++ goto contReadFrom_i;
+ }
+- printf("\n");
+- return 0;
++ p = getpass(_("Password: "));
++ ask2 = passAskTwice ? 1 : 0;
++ } else {
++ i = atoi(passFDnumber);
++ contReadFrom_i:
++ if(gpgKeyFile && gpgKeyFile[0]) {
++ p = get_FD_pass(i);
++ if(close_i_fd) close(i);
++ } else {
++ int x = 0;
++ while(x < 66) {
++ multiKeyPass[x] = get_FD_pass(i);
++ if(!multiKeyPass[x]) goto nomem;
++ if(strlen(multiKeyPass[x]) < LOOP_PASSWORD_MIN_LENGTH) break;
++ x++;
++ }
++ if(close_i_fd) close(i);
++ warnAboutBadKeyData(x);
++ if(x >= 65) {
++ multiKeyMode = 65;
++ return multiKeyPass[0];
++ }
++ if(x == 64) {
++ multiKeyMode = 64;
++ return multiKeyPass[0];
++ }
++ p = multiKeyPass[0];
++ }
++ ask2 = 0;
+ }
+-
+- if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) == 0) {
+- printf ("%s: [%04x]:%ld (%s)",
+- device, (unsigned int)loopinfo.lo_device, loopinfo.lo_inode,
+- loopinfo.lo_name);
+-
+- if (loopinfo.lo_offset)
+- printf(_(", offset %d"), loopinfo.lo_offset);
+-
+- if (loopinfo.lo_encrypt_type)
+- printf(_(", encryption type %d\n"),
+- loopinfo.lo_encrypt_type);
+-
+- printf("\n");
+- return 0;
++ if(!p) goto nomem;
++ if(gpgKeyFile && gpgKeyFile[0]) {
++ if(ask2) {
++ i = strlen(p);
++ s = malloc(i + 1);
++ if(!s) goto nomem;
++ strcpy(s, p);
++ p = getpass(_("Retype password: "));
++ if(!p) goto nomem;
++ if(strcmp(s, p)) goto compareErr;
++ memset(s, 0, i);
++ free(s);
++ ask2 = 0;
++ }
++ p = do_GPG_pipe(p);
++ if(!p) return(NULL);
++ if(!p[0]) {
++ fprintf(stderr, _("Error: gpg key file decryption failed\n"));
++ return(NULL);
++ }
++ if(multiKeyMode) return(p);
+ }
+-
+- errsv = errno;
+- fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
+- device, strerror (errsv));
+- return 1;
++ i = strlen(p);
++ if(i < minLen) {
++ fprintf(stderr, _("Error: Password must be at least %d characters.\n"), minLen);
++ return(NULL);
++ }
++ seed = passSeedString;
++ if(!seed) seed = "";
++ s = malloc(i + strlen(seed) + 1);
++ if(!s) {
++ nomem:
++ fprintf(stderr, _("Error: Unable to allocate memory\n"));
++ return(NULL);
++ }
++ strcpy(s, p);
++ memset(p, 0, i);
++ if(ask2) {
++ p = getpass(_("Retype password: "));
++ if(!p) goto nomem;
++ if(strcmp(s, p)) {
++ compareErr:
++ fprintf(stderr, _("Error: Passwords are not identical\n"));
++ return(NULL);
++ }
++ memset(p, 0, i);
++ }
++ if(i < warnLen) {
++ fprintf(stderr, _("WARNING - Please use longer password (%d or more characters)\n"), LOOP_PASSWORD_MIN_LENGTH);
++ }
++ strcat(s, seed);
++ return(s);
+ }
+
+-static int
+-show_loop(char *device) {
+- int ret, fd;
++/* this is for compatibility with historic loop-AES version */
++static void unhashed1_key_setup(unsigned char *keyStr, int ile, unsigned char *keyBuf, int bufSize)
++{
++ register int x, y, z, cnt = ile;
++ unsigned char *kp;
+
+- if ((fd = open(device, O_RDONLY)) < 0) {
+- int errsv = errno;
+- fprintf(stderr, _("loop: can't open device %s: %s\n"),
+- device, strerror (errsv));
+- return 2;
++ memset(keyBuf, 0, bufSize);
++ kp = keyStr;
++ for(x = 0; x < (bufSize * 8); x += 6) {
++ y = *kp++;
++ if(--cnt <= 0) {
++ kp = keyStr;
++ cnt = ile;
++ }
++ if((y >= '0') && (y <= '9')) y -= '0';
++ else if((y >= 'A') && (y <= 'Z')) y -= ('A' - 10);
++ else if((y >= 'a') && (y <= 'z')) y -= ('a' - 36);
++ else if((y == '.') || (y == '/')) y += (62 - '.');
++ else y &= 63;
++ z = x >> 3;
++ if(z < bufSize) {
++ keyBuf[z] |= y << (x & 7);
++ }
++ z++;
++ if(z < bufSize) {
++ keyBuf[z] |= y >> (8 - (x & 7));
++ }
+ }
+- ret = show_loop_fd(fd, device);
+- close(fd);
+- return ret;
+ }
+
++/* this is for compatibility with mainline mount */
++static void unhashed2_key_setup(unsigned char *keyStr, int ile, unsigned char *keyBuf, int bufSize)
++{
++ memset(keyBuf, 0, bufSize);
++ strncpy((char *)keyBuf, (char *)keyStr, bufSize - 1);
++ keyBuf[bufSize - 1] = 0;
++}
+
+-static int
+-show_used_loop_devices (void) {
+- struct looplist ll;
+- int fd;
++static void rmd160HashTwiceWithA(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ char tmpBuf[20 + 20];
++ char pwdCopy[130];
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return 1;
+- }
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 40) ole = 40;
++ rmd160_hash_buffer(&tmpBuf[0], (char *)ib, ile);
++ pwdCopy[0] = 'A';
++ if(ile > sizeof(pwdCopy) - 1) ile = sizeof(pwdCopy) - 1;
++ memcpy(pwdCopy + 1, ib, ile);
++ rmd160_hash_buffer(&tmpBuf[20], pwdCopy, ile + 1);
++ memcpy(ob, tmpBuf, ole);
++ memset(tmpBuf, 0, sizeof(tmpBuf));
++ memset(pwdCopy, 0, sizeof(pwdCopy));
++}
+
+- while((fd = looplist_next(&ll)) != -1) {
+- show_loop_fd(fd, ll.name);
+- close(fd);
+- }
+- looplist_close(&ll);
++extern long long llseek(int, long long, int);
+
+- if (ll.ct_succ && ll.ct_perm) {
+- error(_("%s: no permission to look at /dev/loop#"), progname);
+- return 1;
++static long long xx_lseek(int fd, long long offset, int whence)
++{
++ if(sizeof(off_t) >= 8) {
++ return lseek(fd, offset, whence);
++ } else {
++ return llseek(fd, offset, whence);
+ }
+- return 0;
+ }
+
+-/* list all associated loop devices */
+-static int
+-show_associated_loop_devices(char *filename, unsigned long long offset, int isoff)
++static int loop_create_random_keys(char *partition, long long offset, long long sizelimit, int loopro, unsigned char *k)
+ {
+- struct looplist ll;
+- struct stat filestat;
+- int fd;
++ int x, y, fd;
++ sha512_context s;
++ unsigned char b[4096];
+
+- if (stat(filename, &filestat) == -1) {
+- perror(filename);
++ if(loopro) {
++ fprintf(stderr, _("Error: read-only device %s\n"), partition);
+ return 1;
+ }
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
++ /*
++ * Compute SHA-512 over first 40 KB of old fs data. SHA-512 hash
++ * output is then used as entropy for new fs encryption key.
++ */
++ if((fd = open(partition, O_RDWR)) == -1) {
++ seekFailed:
++ fprintf(stderr, _("Error: unable to open/seek device %s\n"), partition);
+ return 1;
+ }
+-
+- while((fd = looplist_next(&ll)) != -1) {
+- if (is_associated(fd, &filestat, offset, isoff) == 1)
+- show_loop_fd(fd, ll.name);
++ if(offset < 0) offset = -offset;
++ if(xx_lseek(fd, offset, SEEK_SET) == -1) {
+ close(fd);
++ goto seekFailed;
+ }
+- looplist_close(&ll);
+-
+- return 0;
+-}
+-
+-#endif /* MAIN */
+-
+-/* check if the loopfile is already associated with the same given
+- * parameters.
+- *
+- * returns: -1 error
+- * 0 unused
+- * 1 loop device already used
+- */
+-static int
+-is_associated(int dev, struct stat *file, unsigned long long offset, int isoff)
+-{
+- struct loop_info64 linfo64;
+- struct loop_info64 linfo;
+- int ret = 0;
+-
+- if (ioctl(dev, LOOP_GET_STATUS64, &linfo64) == 0) {
+- if (file->st_dev == linfo64.lo_device &&
+- file->st_ino == linfo64.lo_inode &&
+- (isoff == 0 || offset == linfo64.lo_offset))
+- ret = 1;
+- return ret;
+- }
+- if (ioctl(dev, LOOP_GET_STATUS, &linfo) == 0) {
+- if (file->st_dev == linfo.lo_device &&
+- file->st_ino == linfo.lo_inode &&
+- (isoff == 0 || offset == linfo.lo_offset))
+- ret = 1;
+- return ret;
+- }
+-
+- return errno == ENXIO ? 0 : -1;
+-}
+-
+-/* check if the loop file is already used with the same given
+- * parameters. We check for device no, inode and offset.
+- * returns: associated devname or NULL
+- */
+-char *
+-loopfile_used (const char *filename, unsigned long long offset) {
+- struct looplist ll;
+- char *devname = NULL;
+- struct stat filestat;
+- int fd;
+-
+- if (stat(filename, &filestat) == -1) {
+- perror(filename);
+- return NULL;
++ sha512_init(&s);
++ for(x = 1; x <= 10; x++) {
++ if((sizelimit > 0) && ((sizeof(b) * x) > sizelimit)) break;
++ if(rd_wr_retry(fd, &b[0], sizeof(b), 0) != sizeof(b)) break;
++ sha512_write(&s, &b[0], sizeof(b));
+ }
++ sha512_final(&s);
+
+- if (looplist_open(&ll, LLFLG_USEDONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return NULL;
+- }
+-
+- while((fd = looplist_next(&ll)) != -1) {
+- int res = is_associated(fd, &filestat, offset, 1);
+- close(fd);
+- if (res == 1) {
+- devname = xstrdup(ll.name);
+- break;
++ /*
++ * Overwrite 40 KB of old fs data 20 times so that recovering
++ * SHA-512 output beyond this point is difficult and expensive.
++ */
++ for(y = 0; y < 20; y++) {
++ int z;
++ struct {
++ struct timeval tv;
++ unsigned char h[64];
++ int x,y,z;
++ } j;
++ if(xx_lseek(fd, offset, SEEK_SET) == -1) break;
++ memcpy(&j.h[0], &s.sha_out[0], 64);
++ gettimeofday(&j.tv, NULL);
++ j.y = y;
++ for(x = 1; x <= 10; x++) {
++ j.x = x;
++ for(z = 0; z < sizeof(b); z += 64) {
++ j.z = z;
++ sha512_hash_buffer((unsigned char *)&j, sizeof(j), &b[z], 64);
++ }
++ if((sizelimit > 0) && ((sizeof(b) * x) > sizelimit)) break;
++ if(rd_wr_retry(fd, &b[0], sizeof(b), 1) != sizeof(b)) break;
+ }
++ memset(&j, 0, sizeof(j));
++ if(fsync(fd)) break;
+ }
+- looplist_close(&ll);
+-
+- return devname;
+-}
+-
+-int
+-loopfile_used_with(char *devname, const char *filename, unsigned long long offset)
+-{
+- struct stat statbuf;
+- int fd, ret;
++ close(fd);
+
+- if (!is_loop_device(devname))
+- return 0;
++ /*
++ * Use all 512 bits of hash output
++ */
++ memcpy(&b[0], &s.sha_out[0], 64);
++ memset(&s, 0, sizeof(s));
+
+- if (stat(filename, &statbuf) == -1) {
+- perror(filename);
+- return -1;
++ /*
++ * Read 32 bytes of random entropy from kernel's random
++ * number generator. This code may be executed early on startup
++ * scripts and amount of random entropy may be non-existent.
++ * SHA-512 of old fs data is used as workaround for missing
++ * entropy in kernel's random number generator.
++ */
++ if((fd = open("/dev/urandom", O_RDONLY)) == -1) {
++ fprintf(stderr, _("Error: unable to open /dev/urandom\n"));
++ return 1;
+ }
++ rd_wr_retry(fd, &b[64], 32, 0);
+
+- fd = open(devname, O_RDONLY);
+- if (fd == -1) {
+- perror(devname);
+- return -1;
++ /* generate multi-key hashes */
++ x = 0;
++ while(x < 65) {
++ rd_wr_retry(fd, &b[64+32], 16, 0);
++ sha512_hash_buffer(&b[0], 64+32+16, k, 32);
++ k += 32;
++ x++;
+ }
+- ret = is_associated(fd, &statbuf, offset, 1);
+
+ close(fd);
+- return ret;
++ memset(&b[0], 0, sizeof(b));
++ return 0;
+ }
+
+-char *
+-find_unused_loop_device (void) {
+- struct looplist ll;
+- char *devname = NULL;
+- int fd;
++#if !defined(MAIN)
++static int loop_fork_mkfs_command(char *device, char *fstype)
++{
++ int x, y = 0;
++ char *a[10], *e[1];
+
+- if (looplist_open(&ll, LLFLG_FREEONLY) == -1) {
+- error(_("%s: /dev directory does not exist."), progname);
+- return NULL;
++ sync();
++ if(!(x = fork())) {
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 0);
++ dup2(x, 1);
++ dup2(x, 2);
++ close(x);
++ }
++ x = 0;
++ a[x++] = "mkfs";
++ a[x++] = "-t";
++ a[x++] = fstype;
++ /* mkfs.reiserfs and mkfs.xfs need -f option */
++ if(!strcmp(fstype, "reiserfs") || !strcmp(fstype, "xfs")) {
++ a[x++] = "-f";
++ }
++ a[x++] = device;
++ a[x] = 0;
++ e[0] = 0;
++ if(setgid(getgid())) exit(1);
++ if(setuid(getuid())) exit(1);
++ for(x = 3; x < 1024; x++) {
++ close(x);
++ }
++ execve("/sbin/mkfs", &a[0], &e[0]);
++ exit(1);
+ }
+-
+- if ((fd = looplist_next(&ll)) != -1) {
+- close(fd);
+- devname = xstrdup(ll.name);
++ if(x == -1) {
++ fprintf(stderr, _("Error: fork failed\n"));
++ return 1;
+ }
+- looplist_close(&ll);
+- if (devname)
+- return devname;
+-
+- if (ll.ct_succ && ll.ct_perm)
+- error(_("%s: no permission to look at /dev/loop#"), progname);
+- else if (ll.ct_succ)
+- error(_("%s: could not find any free loop device"), progname);
+- else
+- error(_(
+- "%s: Could not find any loop device. Maybe this kernel "
+- "does not know\n"
+- " about the loop device? (If so, recompile or "
+- "`modprobe loop'.)"), progname);
+- return NULL;
+-}
+-
+-/*
+- * A function to read the passphrase either from the terminal or from
+- * an open file descriptor.
+- */
+-static char *
+-xgetpass(int pfd, const char *prompt) {
+- char *pass;
+- int buflen, i;
+-
+- if (pfd < 0) /* terminal */
+- return getpass(prompt);
+-
+- pass = NULL;
+- buflen = 0;
+- for (i=0; ; i++) {
+- if (i >= buflen-1) {
+- /* we're running out of space in the buffer.
+- * Make it bigger: */
+- char *tmppass = pass;
+- buflen += 128;
+- pass = realloc(tmppass, buflen);
+- if (pass == NULL) {
+- /* realloc failed. Stop reading. */
+- error("Out of memory while reading passphrase");
+- pass = tmppass; /* the old buffer hasn't changed */
+- break;
+- }
+- }
+- if (read(pfd, pass+i, 1) != 1 ||
+- pass[i] == '\n' || pass[i] == 0)
+- break;
++ waitpid(x, &y, 0);
++ sync();
++ if(!WIFEXITED(y) || (WEXITSTATUS(y) != 0)) {
++ fprintf(stderr, _("Error: encrypted file system mkfs failed\n"));
++ return 1;
+ }
+-
+- if (pass == NULL)
+- return "";
+-
+- pass[i] = 0;
+- return pass;
+-}
+-
+-static int
+-digits_only(const char *s) {
+- while (*s)
+- if (!isdigit(*s++))
+- return 0;
+- return 1;
++ return 0;
+ }
++#endif
+
+ int
+-set_loop(const char *device, const char *file, unsigned long long offset,
+- unsigned long long sizelimit, const char *encryption, int pfd, int *options) {
+- struct loop_info64 loopinfo64;
+- int fd, ffd, mode, i;
+- char *pass;
+- char *filename;
+-
+- if (verbose) {
+- char *xdev = loopfile_used(file, offset);
+-
+- if (xdev) {
+- printf(_("warning: %s is already associated with %s\n"),
+- file, xdev);
+- free(xdev);
+- }
+- }
+-
+- mode = (*options & SETLOOP_RDONLY) ? O_RDONLY : O_RDWR;
++set_loop(const char *device, const char *file, int *loopro, const char **fstype, unsigned int *AutoChmodPtr, int busyRetVal) {
++ struct loop_info64 loopinfo;
++ int fd, ffd, mode, i, errRetVal = 1;
++ char *pass, *apiName = NULL;
++ void (*hashFunc)(unsigned char *, int, unsigned char *, int);
++ unsigned char multiKeyBits[65][32];
++ int minPassLen = LOOP_PASSWORD_MIN_LENGTH;
++ int run_mkfs_command = 0;
++
++ loopFileName = (char *)file;
++ multiKeyMode = 0;
++ mode = (*loopro ? O_RDONLY : O_RDWR);
+ if ((ffd = open(file, mode)) < 0) {
+- if (!(*options & SETLOOP_RDONLY) && errno == EROFS)
++ if (!*loopro && errno == EROFS)
+ ffd = open(file, mode = O_RDONLY);
+ if (ffd < 0) {
+ perror(file);
+ return 1;
+ }
+- *options |= SETLOOP_RDONLY;
+ }
+ if ((fd = open(device, mode)) < 0) {
+ perror (device);
+- close(ffd);
+- return 1;
++ goto close_ffd_return1;
+ }
+- memset(&loopinfo64, 0, sizeof(loopinfo64));
++ *loopro = (mode == O_RDONLY);
+
+- if (!(filename = canonicalize(file)))
+- filename = (char *) file;
+- xstrncpy((char *)loopinfo64.lo_file_name, filename, LO_NAME_SIZE);
+-
+- if (encryption && *encryption) {
+- if (digits_only(encryption)) {
+- loopinfo64.lo_encrypt_type = atoi(encryption);
+- } else {
+- loopinfo64.lo_encrypt_type = LO_CRYPT_CRYPTOAPI;
+- snprintf((char *)loopinfo64.lo_crypt_name, LO_NAME_SIZE,
+- "%s", encryption);
+- }
++ if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
++ if(errno == EBUSY)
++ errRetVal = busyRetVal;
++ if((errRetVal != 2) || verbose)
++ perror("ioctl: LOOP_SET_FD");
++keyclean_close_fd_ffd_return1:
++ memset(loopinfo.lo_encrypt_key, 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close (fd);
++close_ffd_return1:
++ close (ffd);
++ return errRetVal;
+ }
+
+- loopinfo64.lo_offset = offset;
+- loopinfo64.lo_sizelimit = sizelimit;
++ memset (&loopinfo, 0, sizeof (loopinfo));
++ xstrncpy ((char *)loopinfo.lo_file_name, file, LO_NAME_SIZE);
++ if (loopEncryptionType)
++ loopinfo.lo_encrypt_type = loop_crypt_type (loopEncryptionType, &loopinfo.lo_encrypt_key_size, &apiName);
++ if (loopOffsetBytes)
++ loopinfo.lo_offset = mystrtoull(loopOffsetBytes, 1);
++ if (loopSizeBytes)
++ loopinfo.lo_sizelimit = mystrtoull(loopSizeBytes, 0);
+
+ #ifdef MCL_FUTURE
+ /*
+ * Oh-oh, sensitive data coming up. Better lock into memory to prevent
+ * passwd etc being swapped out and left somewhere on disk.
+ */
+- if (loopinfo64.lo_encrypt_type != LO_CRYPT_NONE) {
+- if(mlockall(MCL_CURRENT | MCL_FUTURE)) {
+- perror("memlock");
+- fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
+- exit(1);
+- }
++
++ if(loopinfo.lo_encrypt_type && mlockall(MCL_CURRENT | MCL_FUTURE)) {
++ perror("memlock");
++ ioctl (fd, LOOP_CLR_FD, 0);
++ fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
++ exit(1);
+ }
+ #endif
+
+- switch (loopinfo64.lo_encrypt_type) {
++ switch (loopinfo.lo_encrypt_type) {
+ case LO_CRYPT_NONE:
+- loopinfo64.lo_encrypt_key_size = 0;
++ loopinfo.lo_encrypt_key_size = 0;
+ break;
+ case LO_CRYPT_XOR:
+- pass = getpass(_("Password: "));
+- goto gotpass;
++ pass = sGetPass (1, 0);
++ if(!pass) goto loop_clr_fd_out;
++ xstrncpy ((char *)loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
++ loopinfo.lo_encrypt_key_size = strlen((char*)loopinfo.lo_encrypt_key);
++ break;
++ case 3: /* LO_CRYPT_FISH2 */
++ case 4: /* LO_CRYPT_BLOW */
++ case 7: /* LO_CRYPT_SERPENT */
++ case 8: /* LO_CRYPT_MARS */
++ case 11: /* LO_CRYPT_RC6 */
++ case 12: /* LO_CRYPT_DES_EDE3 */
++ case 16: /* LO_CRYPT_AES */
++ case 18: /* LO_CRYPT_CRYPTOAPI */
++ /* set default hash function */
++ hashFunc = sha256_hash_buffer;
++ if(loopinfo.lo_encrypt_key_size == 24) hashFunc = sha384_hash_buffer;
++ if(loopinfo.lo_encrypt_key_size == 32) hashFunc = sha512_hash_buffer;
++ /* possibly override default hash function */
++ if(passHashFuncName) {
++ if(!strcasecmp(passHashFuncName, "sha256")) {
++ hashFunc = sha256_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "sha384")) {
++ hashFunc = sha384_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "sha512")) {
++ hashFunc = sha512_hash_buffer;
++ } else if(!strcasecmp(passHashFuncName, "rmd160")) {
++ hashFunc = rmd160HashTwiceWithA;
++ minPassLen = 1;
++ } else if(!strcasecmp(passHashFuncName, "unhashed1")) {
++ hashFunc = unhashed1_key_setup;
++ } else if(!strcasecmp(passHashFuncName, "unhashed2")) {
++ hashFunc = unhashed2_key_setup;
++ minPassLen = 1;
++ } else if(!strcasecmp(passHashFuncName, "unhashed3") && passFDnumber && !gpgKeyFile) {
++ /* unhashed3 hash type reads binary key from file descriptor. */
++ /* This is not compatible with gpgkey= mount option */
++ if(rd_wr_retry(atoi(passFDnumber), (char *)&loopinfo.lo_encrypt_key[0], LO_KEY_SIZE, 0) < 1) {
++ fprintf(stderr, _("Error: couldn't read binary key\n"));
++ goto loop_clr_fd_out;
++ }
++ break; /* out of switch(loopinfo.lo_encrypt_type) */
++ } else if(!strncasecmp(passHashFuncName, "random", 6) && ((passHashFuncName[6] == 0) || (passHashFuncName[6] == '/'))) {
++ /* random hash type sets up 65 random keys */
++ /* WARNING! DO NOT USE RANDOM HASH TYPE ON PARTITION WITH EXISTING */
++ /* IMPORTANT DATA ON IT. RANDOM HASH TYPE WILL DESTROY YOUR DATA. */
++ if(loop_create_random_keys((char*)file, loopinfo.lo_offset, loopinfo.lo_sizelimit, *loopro, &multiKeyBits[0][0])) {
++ goto loop_clr_fd_out;
++ }
++ memcpy(&loopinfo.lo_encrypt_key[0], &multiKeyBits[0][0], sizeof(loopinfo.lo_encrypt_key));
++ run_mkfs_command = multiKeyMode = 1000;
++ break; /* out of switch(loopinfo.lo_encrypt_type) */
++ }
++ }
++ pass = sGetPass (minPassLen, LOOP_PASSWORD_MIN_LENGTH);
++ if(!pass) goto loop_clr_fd_out;
++ i = strlen(pass);
++ if(hashFunc == unhashed1_key_setup) {
++ /* this is for compatibility with historic loop-AES version */
++ loopinfo.lo_encrypt_key_size = 16; /* 128 bits */
++ if(i >= 32) loopinfo.lo_encrypt_key_size = 24; /* 192 bits */
++ if(i >= 43) loopinfo.lo_encrypt_key_size = 32; /* 256 bits */
++ }
++ (*hashFunc)((unsigned char *)pass, i, &loopinfo.lo_encrypt_key[0], sizeof(loopinfo.lo_encrypt_key));
++ if(multiKeyMode) {
++ int r = 0, t;
++ while(r < multiKeyMode) {
++ t = strlen(multiKeyPass[r]);
++ (*hashFunc)((unsigned char *)multiKeyPass[r], t, &multiKeyBits[r][0], 32);
++ memset(multiKeyPass[r], 0, t);
++ /*
++ * MultiKeyMode uses md5 IV. One key mode uses sector IV. Sector IV
++ * and md5 IV v2 and v3 are all computed differently. This first key
++ * byte XOR with 0x55/0xF4 is needed to cause complete decrypt failure
++ * in cases where data is encrypted with one type of IV and decrypted
++ * with another type IV. If identical key was used but only IV was
++ * computed differently, only first plaintext block of 512 byte CBC
++ * chain would decrypt incorrectly and rest would decrypt correctly.
++ * Partially correct decryption is dangerous. Decrypting all blocks
++ * incorrectly is safer because file system mount will simply fail.
++ */
++ if(multiKeyMode == 65) {
++ multiKeyBits[r][0] ^= 0xF4; /* version 3 */
++ } else {
++ multiKeyBits[r][0] ^= 0x55; /* version 2 */
++ }
++ r++;
++ }
++ } else if(passIterThousands) {
++ aes_context ctx;
++ unsigned long iter = 0;
++ unsigned char tempkey[32];
++ /*
++ * Set up AES-256 encryption key using same password and hash function
++ * as before but with password bit 0 flipped before hashing. That key
++ * is then used to encrypt actual loop key 'itercountk' thousand times.
++ */
++ pass[0] ^= 1;
++ (*hashFunc)((unsigned char *)pass, i, &tempkey[0], 32);
++ aes_set_key(&ctx, &tempkey[0], 32, 0);
++ sscanf(passIterThousands, "%lu", &iter);
++ iter *= 1000;
++ while(iter > 0) {
++ /* encrypt both 128bit blocks with AES-256 */
++ aes_encrypt(&ctx, &loopinfo.lo_encrypt_key[ 0], &loopinfo.lo_encrypt_key[ 0]);
++ aes_encrypt(&ctx, &loopinfo.lo_encrypt_key[16], &loopinfo.lo_encrypt_key[16]);
++ /* exchange upper half of first block with lower half of second block */
++ memcpy(&tempkey[0], &loopinfo.lo_encrypt_key[8], 8);
++ memcpy(&loopinfo.lo_encrypt_key[8], &loopinfo.lo_encrypt_key[16], 8);
++ memcpy(&loopinfo.lo_encrypt_key[16], &tempkey[0], 8);
++ iter--;
++ }
++ memset(&ctx, 0, sizeof(ctx));
++ memset(&tempkey[0], 0, sizeof(tempkey));
++ }
++ memset(pass, 0, i); /* erase original password */
++ break;
+ default:
+- pass = xgetpass(pfd, _("Password: "));
+- gotpass:
+- memset(loopinfo64.lo_encrypt_key, 0, LO_KEY_SIZE);
+- xstrncpy((char *)loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
+- memset(pass, 0, strlen(pass));
+- loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE;
++ fprintf (stderr, _("Error: don't know how to get key for encryption system %d\n"), loopinfo.lo_encrypt_type);
++ goto loop_clr_fd_out;
+ }
+
+- if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
+- int rc = 1;
+-
+- if (errno == EBUSY) {
+- if (verbose)
+- printf(_("ioctl LOOP_SET_FD failed: %s\n"),
+- strerror(errno));
+- rc = 2;
+- } else
+- perror("ioctl: LOOP_SET_FD");
+-
+- close(fd);
+- close(ffd);
+- if (file != filename)
+- free(filename);
+- return rc;
++ if(loInitValue) {
++ /* cipher modules are free to do whatever they want with this value */
++ i = 0;
++ sscanf(loInitValue, "%d", &i);
++ loopinfo.lo_init[0] = i;
++ }
++
++ /* type 18 == LO_CRYPT_CRYPTOAPI */
++ if ((loopinfo.lo_encrypt_type == 18) || (loop_set_status64_ioctl(fd, &loopinfo) < 0)) {
++ /* direct cipher interface failed - try CryptoAPI interface now */
++ if(!apiName || (try_cryptoapi_loop_interface(fd, &loopinfo, apiName) < 0)) {
++ fprintf(stderr, _("ioctl: LOOP_SET_STATUS: %s, requested cipher or key length (%d bits) not supported by kernel\n"), strerror(errno), loopinfo.lo_encrypt_key_size << 3);
++ loop_clr_fd_out:
++ (void) ioctl (fd, LOOP_CLR_FD, 0);
++ goto keyclean_close_fd_ffd_return1;
++ }
++ }
++ if(multiKeyMode >= 65) {
++ if(ioctl(fd, LOOP_MULTI_KEY_SETUP_V3, &multiKeyBits[0][0]) < 0) {
++ if(multiKeyMode == 1000) goto try_v2_setup;
++ perror("ioctl: LOOP_MULTI_KEY_SETUP_V3");
++ goto loop_clr_fd_out;
++ }
++ } else if(multiKeyMode == 64) {
++ try_v2_setup:
++ if((ioctl(fd, LOOP_MULTI_KEY_SETUP, &multiKeyBits[0][0]) < 0) && (multiKeyMode != 1000)) {
++ perror("ioctl: LOOP_MULTI_KEY_SETUP");
++ goto loop_clr_fd_out;
++ }
+ }
+- close (ffd);
+-
+- if (*options & SETLOOP_AUTOCLEAR)
+- loopinfo64.lo_flags = LO_FLAGS_AUTOCLEAR;
+
+- i = ioctl(fd, LOOP_SET_STATUS64, &loopinfo64);
+- if (i) {
+- struct loop_info loopinfo;
+- int errsv = errno;
++ memset(loopinfo.lo_encrypt_key, 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close (fd);
++ close (ffd);
+
+- i = loop_info64_to_old(&loopinfo64, &loopinfo);
+- if (i) {
+- errno = errsv;
+- *options &= ~SETLOOP_AUTOCLEAR;
+- perror("ioctl: LOOP_SET_STATUS64");
++#if !defined(MAIN)
++ if(run_mkfs_command && fstype && *fstype && **fstype && (getuid() == 0)) {
++ if(!loop_fork_mkfs_command((char *)device, (char *)(*fstype))) {
++ /* !strncasecmp(passHashFuncName, "random", 6) test matched */
++ /* This reads octal mode for newly created file system root */
++ /* directory node from '-o phash=random/1777' mount option. */
++ /* octal mode--^^^^ */
++ sscanf(passHashFuncName + 6, "/%o", AutoChmodPtr);
+ } else {
+- i = ioctl(fd, LOOP_SET_STATUS, &loopinfo);
+- if (i)
+- perror("ioctl: LOOP_SET_STATUS");
+- else if (*options & SETLOOP_AUTOCLEAR)
+- {
+- i = ioctl(fd, LOOP_GET_STATUS, &loopinfo);
+- if (i || !(loopinfo.lo_flags & LO_FLAGS_AUTOCLEAR))
+- *options &= ~SETLOOP_AUTOCLEAR;
++ if((fd = open(device, mode)) >= 0) {
++ ioctl(fd, LOOP_CLR_FD, 0);
++ close(fd);
++ return 1;
+ }
+ }
+- memset(&loopinfo, 0, sizeof(loopinfo));
+- }
+- else if (*options & SETLOOP_AUTOCLEAR)
+- {
+- i = ioctl(fd, LOOP_GET_STATUS64, &loopinfo64);
+- if (i || !(loopinfo64.lo_flags & LO_FLAGS_AUTOCLEAR))
+- *options &= ~SETLOOP_AUTOCLEAR;
+ }
+- memset(&loopinfo64, 0, sizeof(loopinfo64));
+-
+-
+- if (i) {
+- ioctl (fd, LOOP_CLR_FD, 0);
+- close (fd);
+- if (file != filename)
+- free(filename);
+- return 1;
+- }
+-
+- /*
+- * HACK: here we're leeking a file descriptor,
+- * but mount is a short-lived process anyway.
+- */
+- if (!(*options & SETLOOP_AUTOCLEAR))
+- close (fd);
++#endif
+
+ if (verbose > 1)
+- printf(_("set_loop(%s,%s,%llu,%llu): success\n"),
+- device, filename, offset, sizelimit);
+- if (file != filename)
+- free(filename);
++ printf(_("set_loop(%s,%s): success\n"), device, file);
+ return 0;
+ }
+
+-int
+-del_loop (const char *device) {
+- int fd;
++#ifdef MAIN
+
+- if ((fd = open (device, O_RDONLY)) < 0) {
+- int errsv = errno;
+- fprintf(stderr, _("loop: can't delete device %s: %s\n"),
+- device, strerror (errsv));
+- return 1;
+- }
+- if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
+- perror ("ioctl: LOOP_CLR_FD");
+- close(fd);
+- return 1;
+- }
+- close (fd);
+- if (verbose > 1)
+- printf(_("del_loop(%s): success\n"), device);
+- return 0;
+-}
++#include <getopt.h>
++#include <stdarg.h>
++
++int verbose = 0;
++static char *progname;
+
+-#else /* no LOOP_SET_FD defined */
+ static void
+-mutter(void) {
+- fprintf(stderr,
+- _("This mount was compiled without loop support. "
+- "Please recompile.\n"));
++usage(void) {
++ fprintf(stderr, _("usage:\n\
++ %s [options] loop_device file # setup\n\
++ %s -F [options] loop_device [file] # setup, read /etc/fstab\n\
++ %s loop_device # give info\n\
++ %s -a # give info of all loops\n\
++ %s -d loop_device # delete\n\
++ %s -R loop_device # resize\n\
++options: -e encryption -o offset -s sizelimit -p passwdfd -T -S pseed\n\
++ -H phash -I loinit -K gpgkey -G gpghome -C itercountk -v -r\n\
++ -P cleartextkey\n"),
++ progname, progname, progname, progname, progname, progname);
++ exit(1);
+ }
+
+-int
+-set_loop(const char *device, const char *file, unsigned long long offset,
+- unsigned long long sizelimit, const char *encryption, int pfd, int *loopro,
+- int keysz, int hash_pass) {
+- mutter();
+- return 1;
++void
++show_all_loops(void)
++{
++ char dev[20];
++ char *lfmt[] = { "/dev/loop%d", "/dev/loop/%d" };
++ int i, j, fd, x;
++ struct stat statbuf;
++
++ for(i = 0; i < 256; i++) {
++ for(j = (sizeof(lfmt) / sizeof(lfmt[0])) - 1; j >= 0; j--) {
++ sprintf(dev, lfmt[j], i);
++ if(stat(dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ fd = open(dev, O_RDONLY);
++ if(fd >= 0) {
++ x = is_unused_loop_device(fd);
++ close(fd);
++ if(x == 0) {
++ show_loop(dev);
++ j = 0;
++ }
++ }
++ }
++ }
++ }
+ }
+
+ int
+-del_loop (const char *device) {
+- mutter();
+- return 1;
+-}
++read_options_from_fstab(char *loopToFind, char **partitionPtr)
++{
++ FILE *f;
++ struct mntent *m;
++ int y, foundMatch = 0;
++ char *opt, *fr1, *fr2;
++ struct options {
++ char *name; /* name of /etc/fstab option */
++ char **dest; /* destination where it is written to */
++ char *line; /* temp */
++ };
++ struct options tbl[] = {
++ { "device/file name ", partitionPtr }, /* must be index 0 */
++ { "loop=", &loopToFind }, /* must be index 1 */
++ { "offset=", &loopOffsetBytes },
++ { "sizelimit=", &loopSizeBytes },
++ { "encryption=", &loopEncryptionType },
++ { "pseed=", &passSeedString },
++ { "phash=", &passHashFuncName },
++ { "loinit=", &loInitValue },
++ { "gpgkey=", &gpgKeyFile },
++ { "gpghome=", &gpgHomeDir },
++ { "cleartextkey=", &clearTextKeyFile },
++ { "itercountk=", &passIterThousands },
++ };
++ struct options *p;
+
+-char *
+-find_unused_loop_device (void) {
+- mutter();
+- return 0;
++ if (!(f = setmntent("/etc/fstab", "r"))) {
++ fprintf(stderr, _("Error: unable to open /etc/fstab for reading\n"));
++ return 0;
++ }
++ while ((m = getmntent(f)) != NULL) {
++ tbl[0].line = fr1 = xstrdup(m->mnt_fsname);
++ p = &tbl[1];
++ do {
++ p->line = NULL;
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ opt = fr2 = xstrdup(m->mnt_opts);
++ for (opt = strtok(opt, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ p = &tbl[1];
++ do {
++ y = strlen(p->name);
++ if (!strncmp(opt, p->name, y))
++ p->line = opt + y;
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ }
++ if (tbl[1].line && !strcmp(loopToFind, tbl[1].line)) {
++ if (++foundMatch > 1) {
++ fprintf(stderr, _("Error: multiple loop=%s options found in /etc/fstab\n"), loopToFind);
++ endmntent(f);
++ return 0;
++ }
++ p = &tbl[0];
++ do {
++ if (!*p->dest && p->line) {
++ *p->dest = p->line;
++ if (verbose)
++ printf(_("using %s%s from /etc/fstab\n"), p->name, p->line);
++ }
++ } while (++p < &tbl[sizeof(tbl) / sizeof(struct options)]);
++ fr1 = fr2 = NULL;
++ }
++ if(fr1) free(fr1);
++ if(fr2) free(fr2);
++ }
++ endmntent(f);
++ if (foundMatch == 0) {
++ fprintf(stderr, _("Error: loop=%s option not found in /etc/fstab\n"), loopToFind);
++ }
++ return foundMatch;
+ }
+
+-#endif /* !LOOP_SET_FD */
+-
+-#ifdef MAIN
+-
+-#ifdef LOOP_SET_FD
+-
+-#include <getopt.h>
+-#include <stdarg.h>
++int
++recompute_loop_dev_size(char *device)
++{
++ int fd, err1 = 0, err2, err3;
++ long long oldBytes = -1, newBytes = -1;
+
+-static void
+-usage(void) {
+- fprintf(stderr, _("\nUsage:\n"
+- " %1$s loop_device give info\n"
+- " %1$s -a | --all list all used\n"
+- " %1$s -d | --detach <loopdev> delete\n"
+- " %1$s -f | --find find unused\n"
+- " %1$s -j | --associated <file> [-o <num>] list all associated with <file>\n"
+- " %1$s [ options ] {-f|--find|loopdev} <file> setup\n"),
+- progname);
+-
+- fprintf(stderr, _("\nOptions:\n"
+- " -e | --encryption <type> enable data encryption with specified <name/num>\n"
+- " -h | --help this help\n"
+- " -o | --offset <num> start at offset <num> into file\n"
+- " --sizelimit <num> loop limited to only <num> bytes of the file\n"
+- " -p | --pass-fd <num> read passphrase from file descriptor <num>\n"
+- " -r | --read-only setup read-only loop device\n"
+- " --show print device name (with -f <file>)\n"
+- " -v | --verbose verbose mode\n\n"));
+- exit(1);
+- }
++ fd = open(device, O_RDONLY);
++ if(fd < 0) {
++ perror(device);
++ return 1;
++ }
++ if(verbose) {
++ err1 = ioctl(fd, BLKGETSIZE64, &oldBytes);
++ }
++ err2 = ioctl(fd, LOOP_RECOMPUTE_DEV_SIZE, 0);
++ if(err2) {
++ perror(device);
++ goto done1;
++ }
++ if(verbose) {
++ err3 = ioctl(fd, BLKGETSIZE64, &newBytes);
++ if(!err1 && (oldBytes >= 0)) {
++ printf("%s: old size %lld bytes\n", device, oldBytes);
++ }
++ if(!err3 && (newBytes >= 0)) {
++ printf("%s: new size %lld bytes\n", device, newBytes);
++ }
++ }
++done1:
++ close(fd);
++ return err2;
++}
+
+ int
+ main(int argc, char **argv) {
+- char *p, *offset, *sizelimit, *encryption, *passfd, *device, *file, *assoc;
+- int delete, find, c, all;
++ char *partitionName = NULL;
++ int delete,c,option_a=0,option_F=0,option_R=0,setup_o=0;
+ int res = 0;
+- int showdev = 0;
+ int ro = 0;
+- int pfd = -1;
+- unsigned long long off, slimit;
+- struct option longopts[] = {
+- { "all", 0, 0, 'a' },
+- { "detach", 0, 0, 'd' },
+- { "encryption", 1, 0, 'e' },
+- { "find", 0, 0, 'f' },
+- { "help", 0, 0, 'h' },
+- { "associated", 1, 0, 'j' },
+- { "offset", 1, 0, 'o' },
+- { "sizelimit", 1, 0, 128 },
+- { "pass-fd", 1, 0, 'p' },
+- { "read-only", 0, 0, 'r' },
+- { "show", 0, 0, 's' },
+- { "verbose", 0, 0, 'v' },
+- { NULL, 0, 0, 0 }
+- };
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+- delete = find = all = 0;
+- off = 0;
+- slimit = 0;
+- assoc = offset = sizelimit = encryption = passfd = NULL;
+-
++ delete = 0;
+ progname = argv[0];
+- if ((p = strrchr(progname, '/')) != NULL)
+- progname = p+1;
+-
+- while ((c = getopt_long(argc, argv, "ade:E:fhj:o:p:rsv",
+- longopts, NULL)) != -1) {
++ while ((c = getopt(argc,argv,"aC:de:FG:H:I:K:o:p:P:rRs:S:Tv")) != -1) {
+ switch (c) {
+- case 'a':
+- all = 1;
++ case 'a': /* show status of all loops */
++ option_a = 1;
+ break;
+- case 'r':
+- ro = 1;
++ case 'C':
++ passIterThousands = optarg;
++ setup_o = 1;
+ break;
+ case 'd':
+ delete = 1;
+ break;
+- case 'E':
+ case 'e':
+- encryption = optarg;
++ loopEncryptionType = optarg;
++ setup_o = 1;
+ break;
+- case 'f':
+- find = 1;
++ case 'F': /* read loop related options from /etc/fstab */
++ option_F = 1;
++ setup_o = 1;
+ break;
+- case 'j':
+- assoc = optarg;
++ case 'G': /* GnuPG home dir */
++ gpgHomeDir = optarg;
++ setup_o = 1;
++ break;
++ case 'H': /* passphrase hash function name */
++ passHashFuncName = optarg;
++ setup_o = 1;
++ break;
++ case 'I': /* lo_init[0] value (in string form) */
++ loInitValue = optarg;
++ setup_o = 1;
++ break;
++ case 'K': /* GnuPG key file name */
++ gpgKeyFile = optarg;
++ setup_o = 1;
+ break;
+ case 'o':
+- offset = optarg;
++ loopOffsetBytes = optarg;
++ setup_o = 1;
++ break;
++ case 'p': /* read passphrase from given fd */
++ passFDnumber = optarg;
++ setup_o = 1;
++ break;
++ case 'P': /* read passphrase from given file */
++ clearTextKeyFile = optarg;
++ setup_o = 1;
++ break;
++ case 'r': /* read-only */
++ ro = 1;
++ setup_o = 1;
+ break;
+- case 'p':
+- passfd = optarg;
++ case 'R': /* recompute loop dev size */
++ option_R = 1;
+ break;
+ case 's':
+- showdev = 1;
++ loopSizeBytes = optarg;
++ setup_o = 1;
++ break;
++ case 'S': /* optional seed for passphrase */
++ passSeedString = optarg;
++ setup_o = 1;
++ break;
++ case 'T': /* ask passphrase _twice_ */
++ passAskTwice = "T";
++ setup_o = 1;
+ break;
+ case 'v':
+- verbose = 1;
++ verbose++;
+ break;
+-
+- case 128: /* --sizelimit */
+- sizelimit = optarg;
+- break;
+-
+ default:
+ usage();
+ }
+ }
+-
+- if (argc == 1) {
+- usage();
++ if (option_a + delete + option_R + setup_o > 1) usage();
++ if (option_a) {
++ /* show all loops */
++ if (argc != optind) usage();
++ show_all_loops();
++ res = 0;
+ } else if (delete) {
+- if (argc != optind+1 || encryption || offset || sizelimit ||
+- find || all || showdev || assoc || ro)
+- usage();
+- } else if (find) {
+- if (all || assoc || argc < optind || argc > optind+1)
+- usage();
+- } else if (all) {
+- if (argc > 2)
+- usage();
+- } else if (assoc) {
+- if (encryption || showdev || passfd || ro)
+- usage();
++ /* delete loop */
++ if (argc != optind+1) usage();
++ res = del_loop(argv[optind]);
++ } else if (option_R) {
++ /* resize existing loop */
++ if (argc != optind+1) usage();
++ res = recompute_loop_dev_size(argv[optind]);
++ } else if ((argc == optind+1) && !setup_o) {
++ /* show one loop */
++ res = show_loop(argv[optind]);
+ } else {
+- if (argc < optind+1 || argc > optind+2)
++ /* set up new loop */
++ if ((argc < optind+1) || ((argc == optind+1) && !option_F) || (argc > optind+2))
+ usage();
+- }
+-
+- if (offset && sscanf(offset, "%llu", &off) != 1)
+- usage();
+-
+- if (sizelimit && sscanf(sizelimit, "%llu", &slimit) != 1)
+- usage();
+-
+- if (all)
+- return show_used_loop_devices();
+- else if (assoc)
+- return show_associated_loop_devices(assoc, off, offset ? 1 : 0);
+- else if (find) {
+- device = find_unused_loop_device();
+- if (device == NULL)
+- return -1;
+- if (argc == optind) {
+- if (verbose)
+- printf("Loop device is %s\n", device);
+- printf("%s\n", device);
+- return 0;
+- }
+- file = argv[optind];
+- } else {
+- device = argv[optind];
+- if (argc == optind+1)
+- file = NULL;
+- else
+- file = argv[optind+1];
+- }
+-
+- if (delete)
+- res = del_loop(device);
+- else if (file == NULL)
+- res = show_loop(device);
+- else {
+- if (passfd && sscanf(passfd, "%d", &pfd) != 1)
+- usage();
+- do {
+- res = set_loop(device, file, off, slimit, encryption, pfd, &ro);
+- if (res == 2 && find) {
+- if (verbose)
+- printf("stolen loop=%s...trying again\n",
+- device);
+- free(device);
+- if (!(device = find_unused_loop_device()))
+- return -1;
+- }
+- } while (find && res == 2);
+-
+- if (verbose && res == 0)
+- printf("Loop device is %s\n", device);
+-
+- if (res == 0 && showdev && find)
+- printf("%s\n", device);
++ if (argc > optind+1)
++ partitionName = argv[optind+1];
++ if (option_F && (read_options_from_fstab(argv[optind], &partitionName) != 1))
++ exit(1);
++ res = set_loop(argv[optind],partitionName,&ro,(const char**)0,(unsigned int *)0, 1);
+ }
+ return res;
+ }
+-
+-#else /* LOOP_SET_FD not defined */
+-
+-int
+-main(int argc, char **argv) {
+- fprintf(stderr,
+- _("No loop support was available at compile time. "
+- "Please recompile.\n"));
+- return -1;
+-}
+-#endif /* !LOOP_SET_FD*/
+-#endif /* MAIN */
++#endif
+diff -urN util-linux-ng-2.14/mount/lomount.h util-linux-ng-2.14-AES/mount/lomount.h
+--- util-linux-ng-2.14/mount/lomount.h 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/lomount.h 2008-06-24 16:55:13.000000000 +0300
+@@ -1,11 +1,19 @@
+-extern int set_loop(const char *, const char *, unsigned long long, unsigned long long,
+- const char *, int, int *);
++extern int verbose;
++extern int set_loop(const char *, const char *, int *, const char **, unsigned int *, int);
+ extern int del_loop(const char *);
+ extern int is_loop_device(const char *);
++extern int is_loop_active(const char *, const char *);
+ extern char * find_unused_loop_device(void);
+
+-extern int loopfile_used_with(char *devname, const char *filename, unsigned long long offset);
+-extern char *loopfile_used (const char *filename, unsigned long long offset);
+-
+-#define SETLOOP_RDONLY (1<<0) /* Open loop read-only */
+-#define SETLOOP_AUTOCLEAR (1<<1) /* Automatically detach loop on close (2.6.25?) */
++extern char *passFDnumber;
++extern char *passAskTwice;
++extern char *passSeedString;
++extern char *passHashFuncName;
++extern char *passIterThousands;
++extern char *loInitValue;
++extern char *gpgKeyFile;
++extern char *gpgHomeDir;
++extern char *clearTextKeyFile;
++extern char *loopOffsetBytes;
++extern char *loopSizeBytes;
++extern char *loopEncryptionType;
+diff -urN util-linux-ng-2.14/mount/loop.c util-linux-ng-2.14-AES/mount/loop.c
+--- util-linux-ng-2.14/mount/loop.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/loop.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,221 @@
++/*
++ * loop.c
++ *
++ * Copyright 2003 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU GPL
++ */
++
++/* collection of loop helper functions used by losetup, mount and swapon */
++
++#include <stdio.h>
++#include <string.h>
++#include <ctype.h>
++#include <sys/ioctl.h>
++#include <sys/types.h>
++#include <errno.h>
++#include "loop.h"
++
++static void convert_info_to_info64(struct loop_info *info, struct loop_info64 *info64)
++{
++ memset(info64, 0, sizeof(*info64));
++ info64->lo_number = info->lo_number;
++ info64->lo_device = info->lo_device;
++ info64->lo_inode = info->lo_inode;
++ info64->lo_rdevice = info->lo_rdevice;
++ info64->lo_offset = info->lo_offset;
++ info64->lo_encrypt_type = info->lo_encrypt_type;
++ info64->lo_encrypt_key_size = info->lo_encrypt_key_size;
++ info64->lo_flags = info->lo_flags;
++ info64->lo_init[0] = info->lo_init[0];
++ info64->lo_init[1] = info->lo_init[1];
++ info64->lo_sizelimit = 0;
++ if (info->lo_encrypt_type == 18) /* LO_CRYPT_CRYPTOAPI */
++ memcpy(info64->lo_crypt_name, info->lo_name, sizeof(info64->lo_crypt_name));
++ else
++ memcpy(info64->lo_file_name, info->lo_name, sizeof(info64->lo_file_name));
++ memcpy(info64->lo_encrypt_key, info->lo_encrypt_key, sizeof(info64->lo_encrypt_key));
++}
++
++static int convert_info64_to_info(struct loop_info64 *info64, struct loop_info *info)
++{
++ memset(info, 0, sizeof(*info));
++ info->lo_number = info64->lo_number;
++ info->lo_device = info64->lo_device;
++ info->lo_inode = info64->lo_inode;
++ info->lo_rdevice = info64->lo_rdevice;
++ info->lo_offset = info64->lo_offset;
++ info->lo_encrypt_type = info64->lo_encrypt_type;
++ info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
++ info->lo_flags = info64->lo_flags;
++ info->lo_init[0] = info64->lo_init[0];
++ info->lo_init[1] = info64->lo_init[1];
++ if (info->lo_encrypt_type == 18) /* LO_CRYPT_CRYPTOAPI */
++ memcpy(info->lo_name, info64->lo_crypt_name, sizeof(info->lo_name));
++ else
++ memcpy(info->lo_name, info64->lo_file_name, sizeof(info->lo_name));
++ memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, sizeof(info->lo_encrypt_key));
++
++ /* error in case values were truncated */
++ if (info->lo_device != info64->lo_device ||
++ info->lo_rdevice != info64->lo_rdevice ||
++ info->lo_inode != info64->lo_inode ||
++ info->lo_offset != info64->lo_offset ||
++ info64->lo_sizelimit) {
++ errno = EOVERFLOW;
++ return -1;
++ }
++ return 0;
++}
++
++int loop_set_status64_ioctl(int fd, struct loop_info64 *info64)
++{
++ struct loop_info info;
++ struct loop_info64 tmp;
++ int r;
++
++ /*
++ * This ugly work around is needed because some
++ * Red Hat kernels are using same ioctl code:
++ * #define LOOP_CHANGE_FD 0x4C04
++ * vs.
++ * #define LOOP_SET_STATUS64 0x4C04
++ * that is used by modern loop driver.
++ *
++ * Attempt to detect presense of LOOP_GET_STATUS64
++ * ioctl before issuing LOOP_SET_STATUS64 ioctl.
++ * Red Hat kernels with above LOOP_CHANGE_FD damage
++ * should return -1 and set errno to EINVAL.
++ */
++ r = ioctl(fd, LOOP_GET_STATUS64, &tmp);
++ memset(&tmp, 0, sizeof(tmp));
++ if ((r == 0) || (errno != EINVAL)) {
++ r = ioctl(fd, LOOP_SET_STATUS64, info64);
++ if (!r)
++ return 0;
++ }
++ r = convert_info64_to_info(info64, &info);
++ if (!r)
++ r = ioctl(fd, LOOP_SET_STATUS, &info);
++
++ /* don't leave copies of encryption key on stack */
++ memset(&info, 0, sizeof(info));
++ return r;
++}
++
++int loop_get_status64_ioctl(int fd, struct loop_info64 *info64)
++{
++ struct loop_info info;
++ int r;
++
++ memset(info64, 0, sizeof(*info64));
++ r = ioctl(fd, LOOP_GET_STATUS64, info64);
++ if (!r)
++ return 0;
++ r = ioctl(fd, LOOP_GET_STATUS, &info);
++ if (!r)
++ convert_info_to_info64(&info, info64);
++
++ /* don't leave copies of encryption key on stack */
++ memset(&info, 0, sizeof(info));
++ return r;
++}
++
++/* returns: 1=unused 0=busy */
++int is_unused_loop_device(int fd)
++{
++ struct loop_info64 info64;
++ struct loop_info info;
++ int r;
++
++ r = ioctl(fd, LOOP_GET_STATUS64, &info64);
++ memset(&info64, 0, sizeof(info64));
++ if (!r)
++ return 0;
++ if (errno == ENXIO)
++ return 1;
++
++ r = ioctl(fd, LOOP_GET_STATUS, &info);
++ memset(&info, 0, sizeof(info));
++ if (!r)
++ return 0;
++ if (errno == ENXIO)
++ return 1;
++ if (errno == EOVERFLOW)
++ return 0;
++ return 1;
++}
++
++struct loop_crypt_type_struct loop_crypt_type_tbl[] = {
++ { 0, 0, 0, "no" },
++ { 0, 0, 0, "none" },
++ { 1, 0, 0, "xor" },
++ { 3, 1, 16, "twofish" },
++ { 4, 1, 16, "blowfish" },
++ { 7, 1, 16, "serpent" },
++ { 8, 1, 16, "mars" },
++ { 11, 3, 16, "rc6" },
++ { 12, 0, 21, "tripleDES" },
++ { 12, 0, 24, "3des" },
++ { 12, 0, 24, "des3_ede" },
++ { 16, 1, 16, "AES" },
++ { -1, 0, 0, NULL }
++};
++
++static char *getApiName(char *e, int *len)
++{
++ int x, y, z = 1, q = -1;
++ unsigned char *s;
++
++ *len = y = 0;
++ s = (unsigned char *)strdup(e);
++ if(!s)
++ return "";
++ x = strlen((char *)s);
++ while(x > 0) {
++ x--;
++ if(!isdigit(s[x]))
++ break;
++ y += (s[x] - '0') * z;
++ z *= 10;
++ q = x;
++ }
++ while(x >= 0) {
++ s[x] = tolower(s[x]);
++ if(s[x] == '-')
++ s[x] = 0;
++ x--;
++ }
++ if(y >= 40) {
++ if(q >= 0)
++ s[q] = 0;
++ *len = y;
++ }
++ return((char *)s);
++}
++
++int loop_crypt_type(const char *name, u_int32_t *kbyp, char **apiName)
++{
++ int i, k;
++
++ *apiName = getApiName((char *)name, &k);
++ if(k < 0)
++ k = 0;
++ if(k > 256)
++ k = 256;
++ for (i = 0; loop_crypt_type_tbl[i].id != -1; i++) {
++ if (!strcasecmp (*apiName , loop_crypt_type_tbl[i].name)) {
++ *kbyp = k ? k >> 3 : loop_crypt_type_tbl[i].keyBytes;
++ return loop_crypt_type_tbl[i].id;
++ }
++ }
++ *kbyp = 16; /* 128 bits */
++ return 18; /* LO_CRYPT_CRYPTOAPI */
++}
++
++int try_cryptoapi_loop_interface(int fd, struct loop_info64 *loopinfo, char *apiName)
++{
++ snprintf((char *)loopinfo->lo_crypt_name, sizeof(loopinfo->lo_crypt_name), "%s-cbc", apiName);
++ loopinfo->lo_crypt_name[LO_NAME_SIZE - 1] = 0;
++ loopinfo->lo_encrypt_type = 18; /* LO_CRYPT_CRYPTOAPI */
++ return(loop_set_status64_ioctl(fd, loopinfo));
++}
+diff -urN util-linux-ng-2.14/mount/loop.h util-linux-ng-2.14-AES/mount/loop.h
+--- util-linux-ng-2.14/mount/loop.h 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/loop.h 2008-06-24 16:55:13.000000000 +0300
+@@ -1,19 +1,20 @@
+-#ifndef MNT_LOOP_H
+-#define MNT_LOOP_H
++/*
++ * loop.h
++ *
++ * Copyright 2003 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU GPL
++ */
+
+-#include <linux/posix_types.h>
+-#include <stdint.h>
+-#include "linux_version.h"
++#ifndef _LOOP_H
++#define _LOOP_H 1
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68)
+-#define my_dev_t __kernel_dev_t
+-#else
+-#define my_dev_t __kernel_old_dev_t
+-#endif
++#include <sys/types.h>
++#include <linux/version.h>
++#include <linux/posix_types.h>
+
+-#define LO_CRYPT_NONE 0
+-#define LO_CRYPT_XOR 1
+-#define LO_CRYPT_DES 2
++#define LO_CRYPT_NONE 0
++#define LO_CRYPT_XOR 1
++#define LO_CRYPT_DES 2
+ #define LO_CRYPT_CRYPTOAPI 18
+
+ #define LOOP_SET_FD 0x4C00
+@@ -22,22 +23,26 @@
+ #define LOOP_GET_STATUS 0x4C03
+ #define LOOP_SET_STATUS64 0x4C04
+ #define LOOP_GET_STATUS64 0x4C05
++#define LOOP_MULTI_KEY_SETUP 0x4C4D
++#define LOOP_MULTI_KEY_SETUP_V3 0x4C4E
++#define LOOP_RECOMPUTE_DEV_SIZE 0x4C52
+
+-/* Flags for loop_into{64,}->lo_flags */
+-enum {
+- LO_FLAGS_READ_ONLY = 1,
+- LO_FLAGS_USE_AOPS = 2,
+- LO_FLAGS_AUTOCLEAR = 4, /* New in 2.6.25 */
+-};
+-
+-#define LO_NAME_SIZE 64
+-#define LO_KEY_SIZE 32
++#define LO_NAME_SIZE 64
++#define LO_KEY_SIZE 32
+
+ struct loop_info {
+ int lo_number;
+- my_dev_t lo_device;
++#if LINUX_VERSION_CODE >= 0x20600
++ __kernel_old_dev_t lo_device;
++#else
++ __kernel_dev_t lo_device;
++#endif
+ unsigned long lo_inode;
+- my_dev_t lo_rdevice;
++#if LINUX_VERSION_CODE >= 0x20600
++ __kernel_old_dev_t lo_rdevice;
++#else
++ __kernel_dev_t lo_rdevice;
++#endif
+ int lo_offset;
+ int lo_encrypt_type;
+ int lo_encrypt_key_size;
+@@ -49,19 +54,34 @@
+ };
+
+ struct loop_info64 {
+- uint64_t lo_device;
+- uint64_t lo_inode;
+- uint64_t lo_rdevice;
+- uint64_t lo_offset;
+- uint64_t lo_sizelimit; /* bytes, 0 == max available */
+- uint32_t lo_number;
+- uint32_t lo_encrypt_type;
+- uint32_t lo_encrypt_key_size;
+- uint32_t lo_flags;
+- uint8_t lo_file_name[LO_NAME_SIZE];
+- uint8_t lo_crypt_name[LO_NAME_SIZE];
+- uint8_t lo_encrypt_key[LO_KEY_SIZE];
+- uint64_t lo_init[2];
++ u_int64_t lo_device; /* ioctl r/o */
++ u_int64_t lo_inode; /* ioctl r/o */
++ u_int64_t lo_rdevice; /* ioctl r/o */
++ u_int64_t lo_offset; /* bytes */
++ u_int64_t lo_sizelimit; /* bytes, 0 == max available */
++ u_int32_t lo_number; /* ioctl r/o */
++ u_int32_t lo_encrypt_type;
++ u_int32_t lo_encrypt_key_size; /* ioctl w/o */
++ u_int32_t lo_flags; /* ioctl r/o */
++ unsigned char lo_file_name[LO_NAME_SIZE];
++ unsigned char lo_crypt_name[LO_NAME_SIZE];
++ unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
++ u_int64_t lo_init[2];
+ };
+
+-#endif /* MNT_LOOP_H */
++extern int loop_set_status64_ioctl(int, struct loop_info64 *);
++extern int loop_get_status64_ioctl(int, struct loop_info64 *);
++extern int is_unused_loop_device(int);
++
++struct loop_crypt_type_struct {
++ short int id;
++ unsigned char flags; /* bit0 = show keybits, bit1 = add '-' before keybits */
++ unsigned char keyBytes;
++ char *name;
++};
++
++extern struct loop_crypt_type_struct loop_crypt_type_tbl[];
++extern int loop_crypt_type(const char *, u_int32_t *, char **);
++extern int try_cryptoapi_loop_interface(int, struct loop_info64 *, char *);
++
++#endif
+diff -urN util-linux-ng-2.14/mount/losetup.8 util-linux-ng-2.14-AES/mount/losetup.8
+--- util-linux-ng-2.14/mount/losetup.8 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/losetup.8 2008-06-24 16:55:13.000000000 +0300
+@@ -1,49 +1,29 @@
+-.TH LOSETUP 8 "2003-07-01" "Linux" "MAINTENANCE COMMANDS"
++.TH LOSETUP 8 "2007-09-02" "Linux" "MAINTENANCE COMMANDS"
+ .SH NAME
+ losetup \- set up and control loop devices
+ .SH SYNOPSIS
+ .ad l
+-Get info:
+-.sp
+-.in +5
+ .B losetup
++[options]
+ .I loop_device
+-.sp
++file
++.br
++.B losetup -F
++[options]
++.I loop_device
++[file]
++.br
++.B losetup
++[
++.B \-d
++]
++.I loop_device
++.br
+ .B losetup -a
+-.sp
+-.B losetup -j <file> [-o offset]
+-.sp
+-.in -5
+-Delete loop:
+-.sp
+-.in +5
+-.B "losetup \-d"
++.br
++.B losetup
++.B \-R
+ .I loop_device
+-.sp
+-.in -5
+-Print name of first unused loop device:
+-.sp
+-.in +5
+-.B "losetup \-f"
+-.sp
+-.in -5
+-Setup loop device:
+-.sp
+-.in +5
+-.B losetup
+-.RB [{\-e | \-E}
+-.IR encryption ]
+-.RB [ \-o
+-.IR offset ]
+-.RB [ \-\-sizelimit
+-.IR limit ]
+-.RB [ \-p
+-.IR pfd ]
+-.RB [ \-r ]
+-.in +8
+-.RB { \-f [ \-\-show ] | \fIloop_device\fP }
+-.I file
+-.in -13
+ .ad b
+ .SH DESCRIPTION
+ .B losetup
+@@ -51,62 +31,135 @@
+ to detach loop devices and to query the status of a loop device. If only the
+ \fIloop_device\fP argument is given, the status of the corresponding loop
+ device is shown.
+-
+-.SS "Encryption"
+-It is possible to specify transfer functions (for encryption/decryption
+-or other purposes) using one of the
+-.B \-E
+-and
+-.B \-e
+-options.
+-There are two mechanisms to specify the desired encryption: by number
+-and by name. If an encryption is specified by number then one
+-has to make sure that the Linux kernel knows about the encryption with that
+-number, probably by patching the kernel. Standard numbers that are
+-always present are 0 (no encryption) and 1 (XOR encryption).
+-When the cryptoloop module is loaded (or compiled in), it uses number 18.
+-This cryptoloop module will take the name of an arbitrary encryption type
+-and finds the module that knows how to perform that encryption.
+ .SH OPTIONS
+-.IP "\fB\-a, \-\-all\fP"
+-show status of all loop devices
+-.IP "\fB\-d, \-\-detach\fP"
+-detach the file or device associated with the specified loop device
+-.IP "\fB\-e, \-E, \-\-encryption \fIencryption_type\fP"
+-enable data encryption with specified name or number
+-.IP "\fB\-f, \-\-find\fP"
+-find the first unused loop device. If a
+-.I file
+-argument is present, use this device. Otherwise, print its name
+-.IP "\fB\-h, \-\-help\fP"
+-print help
+-.IP "\fB\-j, \-\-associated \fIfile\fP"
+-show status of all loop devices associated with given
+-.I file
+-.IP "\fB\-o, \-\-offset \fIoffset\fP"
+-the data start is moved \fIoffset\fP bytes into the specified file or
+-device
+-.IP "\fB\-\-sizelimit \fIlimit\fP"
+-the data end is set to no more than \fIsizelimit\fP bytes after the data start
+-.IP "\fB\-p, \-\-pass-fd \fInum\fP"
+-read the passphrase from file descriptor with number
+-.I num
+-instead of from the terminal
+-.IP "\fB\-r, \-\-read-only\fP"
+-setup read-only loop device
+-.IP "\fB\-\-show\fP"
+-print device name if the
+-.I -f
+-option and a
+-.I file
+-argument are present.
+-
+-The short form of this option (\fB\-s\fP) is deprecated. This short form could
+-be in collision with Loop-AES implementation where the same option is used for
+-\fB\-\-sizelimit\fP.
+-.IP "\fB\-v, \-\-verbose\fP"
+-verbose mode
++.IP \fB\-a\fP
++Show status of all loop devices.
++.IP "\fB\-C \fIitercountk\fP"
++Runs hashed passphrase through \fIitercountk\fP thousand iterations of AES-256
++before using it for loop encryption. This consumes lots of CPU cycles at
++loop setup/mount time but not thereafter. In combination with passphrase seed
++this slows down dictionary attacks. Iteration is not done in multi-key mode.
++.IP "\fB\-d\fP"
++Detach the file or device associated with the specified loop device.
++.IP "\fB\-e \fIencryption\fP"
++.RS
++Enable data encryption. Following encryption types are recognized:
++.IP \fBNONE\fP
++Use no encryption (default).
++.PD 0
++.IP \fBXOR\fP
++Use a simple XOR encryption.
++.IP "\fBAES128 AES\fP"
++Use 128 bit AES encryption. Passphrase is hashed with SHA-256 by default.
++.IP \fBAES192\fP
++Use 192 bit AES encryption. Passphrase is hashed with SHA-384 by default.
++.IP \fBAES256\fP
++Use 256 bit AES encryption. Passphrase is hashed with SHA-512 by default.
++
++.IP "\fBtwofish128 twofish160 twofish192 twofish256\fP"
++.IP "\fBblowfish128 blowfish160 blowfish192 blowfish256\fP"
++.IP "\fBserpent128 serpent192 serpent256 mars128 mars192\fP"
++.IP "\fBmars256 rc6-128 rc6-192 rc6-256 tripleDES\fP"
++These encryption types are available if they are enabled in kernel
++configuration or corresponding modules have been loaded to kernel.
++.PD
++.RE
++.IP "\fB\-F\fP"
++Reads and uses mount options from /etc/fstab that match specified loop
++device, including offset= sizelimit= encryption= pseed= phash= loinit=
++gpgkey= gpghome= cleartextkey= itercountk= and looped to device/file name.
++loop= option in /etc/fstab must match specified loop device name. Command
++line options take precedence in case of conflict.
++.IP "\fB\-G \fIgpghome\fP"
++Set gpg home directory to \fIgpghome\fP, so that gpg uses public/private
++keys on \fIgpghome\fP directory. This is only used when gpgkey file needs to
++be decrypted using public/private keys. If gpgkey file is encrypted with
++symmetric cipher only, public/private keys are not required and this option
++has no effect.
++.IP "\fB\-H \fIphash\fP"
++Uses \fIphash\fP function to hash passphrase. Available hash functions are
++sha256, sha384, sha512 and rmd160. unhashed1, unhashed2 and unhashed3
++functions also exist for compatibility with some obsolete implementations.
++
++Hash function random does not ask for passphrase but sets up random keys and
++attempts to put loop to multi-key mode. When random/1777 hash type is used
++as mount option for mount program, mount program will create new file system
++on the loop device and construct initial permissions of file system root
++directory from octal digits that follow the slash character.
++
++WARNING! DO NOT USE RANDOM HASH TYPE ON PARTITION WITH EXISTING IMPORTANT
++DATA ON IT. RANDOM HASH TYPE WILL DESTROY YOUR DATA.
++.IP "\fB\-I \fIloinit\fP"
++Passes a numeric value of \fIloinit\fP as a parameter to cipher transfer
++function. Cipher transfer functions are free to interpret value as they
++want.
++.IP "\fB\-K \fIgpgkey\fP"
++Passphrase is piped to gpg so that gpg can decrypt file \fIgpgkey\fP which
++contains the real keys that are used to encrypt loop device. If decryption
++requires public/private keys and gpghome is not specified, all users use
++their own gpg public/private keys to decrypt \fIgpgkey\fP. Decrypted
++\fIgpgkey\fP should contain 1 or 64 or 65 keys, each key at least 20
++characters and separated by newline. If decrypted \fIgpgkey\fP contains 64
++or 65 keys, then loop device is put to multi-key mode. In multi-key mode
++first key is used for first sector, second key for second sector, and so on.
++65th key, if present, is used as additional input to MD5 IV computation.
++.IP "\fB\-o \fIoffset\fP"
++The data start is moved \fIoffset\fP bytes into the specified file or
++device. Normally offset is included in IV (initialization vector)
++computations. If offset is prefixed with @ character, then offset is not
++included in IV computations. @ prefix functionality may not be supported on
++some older kernels and/or loop drivers.
++.IP "\fB\-p \fIpasswdfd\fP"
++Read the passphrase from file descriptor \fIpasswdfd\fP instead of the
++terminal. If -K option is not being used (no gpg key file), then losetup
++attempts to read 65 keys from \fIpasswdfd\fP, each key at least 20
++characters and separated by newline. If losetup successfully reads 64 or 65
++keys, then loop device is put to multi-key mode. If losetup encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode.
++
++echo SecretPassphraseHere | losetup -p0 -K foo.gpg -e AES128 ...
+
++In above example, losetup reads passphrase from file descriptor 0 (stdin).
++.IP "\fB\-P \fIcleartextkey\fP"
++Read the passphrase from file \fIcleartextkey\fP instead of the
++terminal. If -K option is not being used (no gpg key file), then losetup
++attempts to read 65 keys from \fIcleartextkey\fP, each key at least 20
++characters and separated by newline. If losetup successfully reads 64 or 65
++keys, then loop device is put to multi-key mode. If losetup encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode. If both -p and -P options are used, then -p option takes
++precedence. These are equivalent:
++
++losetup -p3 -K foo.gpg -e AES128 ... 3<someFileName
++
++losetup -P someFileName -K foo.gpg -e AES128 ...
++
++In first line of above example, in addition to normal open file descriptors
++(0==stdin 1==stdout 2==stderr), shell opens the file and passes open file
++descriptor to started losetup program. In second line of above example,
++losetup opens the file itself.
++.IP "\fB\-r\fP"
++Read-only mode.
++.IP "\fB\-R\fP"
++Resize existing, already set up loop device, to new changed underlying
++device size. This option is for changing mounted live file system size on
++LVM volume. This functionality may not be supported on some older kernels
++and/or loop drivers.
++.IP "\fB\-s \fIsizelimit\fP"
++Size of loop device is limited to \fIsizelimit\fP bytes. If unspecified or
++set to zero, loop device size is set to maximum available (file size minus
++offset). This option may not be supported on some older kernels and/or loop
++drivers.
++.IP "\fB\-S \fIpseed\fP"
++Sets encryption passphrase seed \fIpseed\fP which is appended to user supplied
++passphrase before hashing. Using different seeds for different partitions
++makes dictionary attacks slower but does not prevent them if user supplied
++passphrase is guessable. Seed is not used in multi-key mode.
++.IP "\fB\-T\fP"
++Asks passphrase twice.
++.IP "\fB\-v\fP"
++Verbose mode.
+ .SH RETURN VALUE
+ .B losetup
+ returns 0 on success, nonzero on failure. When
+@@ -118,49 +171,26 @@
+
+ .SH FILES
+ .nf
+-/dev/loop0, /dev/loop1, ... loop devices (major=7)
++/dev/loop0,/dev/loop1,... loop devices (major=7)
+ .fi
+ .SH EXAMPLE
+-If you are using the loadable module you must have the module loaded
+-first with the command
+-.IP
+-# insmod loop.o
+-.LP
+-Maybe also encryption modules are needed.
+-.IP
+-# insmod des.o
+-# insmod cryptoloop.o
+-.LP
+ The following commands can be used as an example of using the loop device.
+ .nf
+-.IP
+-# dd if=/dev/zero of=/file bs=1k count=100
+-# losetup -e des /dev/loop0 /file
+-Password:
+-Init (up to 16 hex digits):
+-# mkfs -t ext2 /dev/loop0 100
+-# mount -t ext2 /dev/loop0 /mnt
++
++dd if=/dev/zero of=/file bs=1k count=500
++head -c 3705 /dev/random | uuencode -m - | head -n 66 \\
++ | tail -n 65 | gpg --symmetric -a >/etc/fskey9.gpg
++losetup -e AES128 -K /etc/fskey9.gpg /dev/loop0 /file
++mkfs -t ext2 /dev/loop0
++mount -t ext2 /dev/loop0 /mnt
+ ...
+-# umount /dev/loop0
+-# losetup -d /dev/loop0
+-.fi
+-.LP
+-If you are using the loadable module you may remove the module with
+-the command
+-.IP
+-# rmmod loop
+-.LP
++umount /dev/loop0
++losetup -d /dev/loop0
+ .fi
+ .SH RESTRICTION
+-DES encryption is painfully slow. On the other hand, XOR is terribly weak.
+-
+-Cryptoloop is deprecated in favor of dm-crypt. For more details see
+-.B cryptsetup(8).
+-.SH AVAILABILITY
+-The losetup command is part of the util-linux-ng package and is available from
+-ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
+-.\" .SH AUTHORS
+-.\" .nf
+-.\" Original version: Theodore Ts'o <tytso@athena.mit.edu>
+-.\" Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
+-.\" .fi
++XOR encryption is terribly weak.
++.SH AUTHORS
++.nf
++Original version: Theodore Ts'o <tytso@athena.mit.edu>
++AES support: Jari Ruusu
++.fi
+diff -urN util-linux-ng-2.14/mount/loumount.c util-linux-ng-2.14-AES/mount/loumount.c
+--- util-linux-ng-2.14/mount/loumount.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/loumount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,60 @@
++/*
++ * loumount.c
++ *
++ * This code was extracted to separate file from lomount.c so that umount
++ * program doesn't have to link with all loop related setup code
++ */
++
++#define LOOPMAJOR 7
++
++#include <stdio.h>
++#include <string.h>
++#include <ctype.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <pwd.h>
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/stat.h>
++#include <sys/mman.h>
++#include <sys/sysmacros.h>
++#include <sys/wait.h>
++#include <fcntl.h>
++#include <mntent.h>
++#include <locale.h>
++
++#include "loop.h"
++#include "lomount.h"
++#include "xstrncpy.h"
++#include "nls.h"
++
++int
++is_loop_device (const char *device) {
++ struct stat statbuf;
++
++ return (stat(device, &statbuf) == 0 &&
++ S_ISBLK(statbuf.st_mode) &&
++ major(statbuf.st_rdev) == LOOPMAJOR);
++}
++
++int
++del_loop (const char *device) {
++ int fd;
++
++ if ((fd = open (device, O_RDONLY)) < 0) {
++ int errsv = errno;
++ fprintf(stderr, _("loop: can't delete device %s: %s\n"),
++ device, strerror (errsv));
++ return 1;
++ }
++ if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
++ perror ("ioctl: LOOP_CLR_FD");
++ return 1;
++ }
++ close (fd);
++ if (verbose > 1)
++ printf(_("del_loop(%s): success\n"), device);
++ return 0;
++}
+diff -urN util-linux-ng-2.14/mount/mount.8 util-linux-ng-2.14-AES/mount/mount.8
+--- util-linux-ng-2.14/mount/mount.8 2008-06-09 12:28:17.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/mount.8 2008-06-24 16:55:13.000000000 +0300
+@@ -321,6 +321,16 @@
+ .B \-v
+ Verbose mode.
+ .TP
++.B \-p "\fIpasswdfd\fP"
++If the mount requires a passphrase to be entered, read it from file
++descriptor \fIpasswdfd\fP instead of from the terminal. If mount uses
++encrypted loop device and gpgkey= mount option is not being used (no gpg key
++file), then mount attempts to read 65 keys from \fIpasswdfd\fP, each key at
++least 20 characters and separated by newline. If mount successfully reads 64
++or 65 keys, then loop device is put to multi-key mode. If mount encounters
++end-of-file before 64 keys are read, then only first key is used in
++single-key mode.
++.TP
+ .B \-a
+ Mount all filesystems (of the given types) mentioned in
+ .IR fstab .
+@@ -370,12 +380,6 @@
+ .I /etc
+ is on a read-only file system.
+ .TP
+-.BI \-p " num"
+-In case of a loop mount with encryption, read the passphrase from
+-file descriptor
+-.I num
+-instead of from the terminal.
+-.TP
+ .B \-s
+ Tolerate sloppy mount options rather than failing. This will ignore
+ mount options not supported by a filesystem type. Not all filesystems
+@@ -2028,13 +2032,19 @@
+ and then mount this device on
+ .IR /mnt .
+
+-This type of mount knows about four options, namely
+-.BR loop ", " offset ", " sizelimit " and " encryption ,
++This type of mount knows about 11 options, namely
++.BR loop ", " offset ", " sizelimit ", " encryption ", " pseed ", " phash ", " loinit ", " gpgkey ", " gpghome ", " cleartextkey " and " itercountk
+ that are really options to
+ .BR \%losetup (8).
+ (These options can be used in addition to those specific
+ to the filesystem type.)
+
++If the mount requires a passphrase, you will be prompted for one unless you
++specify a file descriptor to read from instead with the
++.BR \-p
++command line option, or specify a file name with
++.BR cleartextkey
++mount option.
+ If no explicit loop device is mentioned
+ (but just an option `\fB\-o loop\fP' is given), then
+ .B mount
+diff -urN util-linux-ng-2.14/mount/mount.c util-linux-ng-2.14-AES/mount/mount.c
+--- util-linux-ng-2.14/mount/mount.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/mount.c 2008-06-24 16:55:13.000000000 +0300
+@@ -11,6 +11,7 @@
+ #include <string.h>
+ #include <getopt.h>
+ #include <stdio.h>
++#include <locale.h>
+
+ #include <pwd.h>
+ #include <grp.h>
+@@ -84,9 +85,6 @@
+ /* True if ruid != euid. */
+ static int suid = 0;
+
+-/* Contains the fd to read the passphrase from, if any. */
+-static int pfd = -1;
+-
+ /* Map from -o and fstab option strings to the flag argument to mount(2). */
+ struct opt_map {
+ const char *opt; /* option name */
+@@ -182,8 +180,8 @@
+
+ static int opt_nofail = 0;
+
+-static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_sizelimit,
+- *opt_encryption, *opt_speed, *opt_comment, *opt_uhelper;
++static const char *opt_loopdev, *opt_vfstype,
++ *opt_speed, *opt_comment, *opt_uhelper;
+
+ static int mounted (const char *spec0, const char *node0);
+ static int check_special_mountprog(const char *spec, const char *node,
+@@ -196,9 +194,16 @@
+ } string_opt_map[] = {
+ { "loop=", 0, &opt_loopdev },
+ { "vfs=", 1, &opt_vfstype },
+- { "offset=", 0, &opt_offset },
+- { "sizelimit=", 0, &opt_sizelimit },
+- { "encryption=", 0, &opt_encryption },
++ { "pseed=", 1, (const char **)&passSeedString },
++ { "phash=", 0, (const char **)&passHashFuncName },
++ { "loinit=", 0, (const char **)&loInitValue },
++ { "gpgkey=", 0, (const char **)&gpgKeyFile },
++ { "gpghome=", 0, (const char **)&gpgHomeDir },
++ { "cleartextkey=", 0, (const char **)&clearTextKeyFile },
++ { "itercountk=", 1, (const char **)&passIterThousands },
++ { "offset=", 0, (const char **)&loopOffsetBytes },
++ { "sizelimit=", 0, (const char **)&loopSizeBytes },
++ { "encryption=", 0, (const char **)&loopEncryptionType },
+ { "speed=", 0, &opt_speed },
+ { "comment=", 1, &opt_comment },
+ { "uhelper=", 0, &opt_uhelper },
+@@ -827,6 +832,9 @@
+ *flags &= ~(MS_OWNER | MS_GROUP);
+ }
+
++/* if loop is already set up, following test is unnecessary */
++/* because loop set up will fail if it is done again */
++#if 0
+ /* Check, if there already exists a mounted loop device on the mountpoint node
+ * with the same parameters.
+ */
+@@ -867,13 +875,12 @@
+ free(node);
+ return res;
+ }
++#endif
+
+ static int
+ loop_check(const char **spec, const char **type, int *flags,
+- int *loop, const char **loopdev, const char **loopfile,
+- const char *node) {
++ int *loop, const char **loopdev, const char **loopfile, const char *node, unsigned int *AutoChmodPtr) {
+ int looptype;
+- unsigned long long offset, sizelimit;
+
+ /*
+ * In the case of a loop mount, either type is of the form lo@/dev/loop5
+@@ -898,7 +905,7 @@
+ *type = opt_vfstype;
+ }
+
+- *loop = ((*flags & MS_LOOP) || *loopdev || opt_offset || opt_sizelimit || opt_encryption);
++ *loop = ((*flags & MS_LOOP) || *loopdev || loopOffsetBytes || loopSizeBytes || loopEncryptionType);
+ *loopfile = *spec;
+
+ if (*loop) {
+@@ -906,20 +913,22 @@
+ if (fake) {
+ if (verbose)
+ printf(_("mount: skipping the setup of a loop device\n"));
++ } else if (*loopdev && is_loop_active(*loopdev, *loopfile)) {
++ if (verbose)
++ printf(_("mount: skipping the setup of a loop device\n"));
++ *spec = *loopdev;
+ } else {
+- int loop_opts = SETLOOP_AUTOCLEAR; /* always attempt autoclear */
++ int loopro = (*flags & MS_RDONLY);
+ int res;
+
+- if (*flags & MS_RDONLY)
+- loop_opts |= SETLOOP_RDONLY;
+-
+- offset = opt_offset ? strtoull(opt_offset, NULL, 0) : 0;
+- sizelimit = opt_sizelimit ? strtoull(opt_sizelimit, NULL, 0) : 0;
+-
++/* if loop is already set up, following test is unnecessary */
++/* because loop set up will fail if it is done again */
++#if 0
+ if (is_mounted_same_loopfile(node, *loopfile, offset)) {
+ error(_("mount: according to mtab %s is already mounted on %s as loop"), *loopfile, node);
+ return EX_FAIL;
+ }
++#endif
+
+ do {
+ if (!*loopdev || !**loopdev)
+@@ -929,21 +938,13 @@
+ if (verbose)
+ printf(_("mount: going to use the loop device %s\n"), *loopdev);
+
+- if ((res = set_loop(*loopdev, *loopfile, offset, sizelimit,
+- opt_encryption, pfd, &loop_opts))) {
+- if (res == 2) {
+- /* loop dev has been grabbed by some other process,
+- try again, if not given explicitly */
+- if (!opt_loopdev) {
+- if (verbose)
+- printf(_("mount: stolen loop=%s ...trying again\n"), *loopdev);
+- my_free(*loopdev);
+- *loopdev = NULL;
+- continue;
+- }
+- error(_("mount: stolen loop=%s"), *loopdev);
+- return EX_FAIL;
+-
++ if ((res = set_loop(*loopdev, *loopfile, &loopro, type, AutoChmodPtr, !opt_loopdev ? 2 : 1))) {
++ if ((res == 2) && !opt_loopdev) {
++ /* loop dev has been grabbed by some other process, try again */
++ if (verbose)
++ printf(_("mount: loop=%s not available ...trying again\n"), *loopdev);
++ my_free(*loopdev);
++ *loopdev = NULL;
+ } else {
+ if (verbose)
+ printf(_("mount: failed setting up loop device\n"));
+@@ -959,13 +960,8 @@
+ if (verbose > 1)
+ printf(_("mount: setup loop device successfully\n"));
+ *spec = *loopdev;
+-
+- if (loop_opts & SETLOOP_RDONLY)
++ if (loopro)
+ *flags |= MS_RDONLY;
+-
+- if (loop_opts & SETLOOP_AUTOCLEAR)
+- /* Prevent recording loop dev in mtab for cleanup on umount */
+- *loop = 0;
+ }
+ }
+
+@@ -1026,14 +1022,6 @@
+ }
+
+ static void
+-set_pfd(char *s) {
+- if (!isdigit(*s))
+- die(EX_USAGE,
+- _("mount: argument to -p or --pass-fd must be a number"));
+- pfd = atoi(optarg);
+-}
+-
+-static void
+ cdrom_setspeed(const char *spec) {
+ #define CDROM_SELECT_SPEED 0x5322 /* Set the CD-ROM speed */
+ if (opt_speed) {
+@@ -1070,6 +1058,7 @@
+ const char *opts, *spec, *node, *types;
+ char *user = 0;
+ int loop = 0;
++ unsigned int LoopMountAutomaticChmod = 0;
+ const char *loopdev = 0, *loopfile = 0;
+ struct stat statbuf;
+
+@@ -1116,7 +1105,7 @@
+ * stale assignments of files to loop devices. Nasty when used for
+ * encryption.
+ */
+- res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile, node);
++ res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile, node, &LoopMountAutomaticChmod);
+ if (res)
+ goto out;
+ }
+@@ -1139,7 +1128,16 @@
+ if (!fake) {
+ mnt5_res = guess_fstype_and_mount (spec, node, &types, flags & ~MS_NOSYS,
+ mount_opts, &special, &status);
+-
++ if(!mnt5_res && LoopMountAutomaticChmod && (getuid() == 0)) {
++ /*
++ * If loop was set up using random keys and new file system
++ * was created on the loop device, initial permissions for
++ * file system root directory need to be set here.
++ */
++ if(chmod(node, LoopMountAutomaticChmod)) {
++ error (_("Error: encrypted file system chmod() failed"));
++ }
++ }
+ if (special) {
+ block_signals (SIG_UNBLOCK);
+ res = status;
+@@ -1874,8 +1872,8 @@
+ case 'O': /* with -t: mount only if (not) opt */
+ test_opts = append_opt(test_opts, optarg, NULL);
+ break;
+- case 'p': /* fd on which to read passwd */
+- set_pfd(optarg);
++ case 'p': /* read passphrase from given fd */
++ passFDnumber = optarg;
+ break;
+ case 'r': /* mount readonly */
+ readonly = 1;
+diff -urN util-linux-ng-2.14/mount/rmd160.c util-linux-ng-2.14-AES/mount/rmd160.c
+--- util-linux-ng-2.14/mount/rmd160.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/rmd160.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,532 @@
++/* rmd160.c - RIPE-MD160
++ * Copyright (C) 1998 Free Software Foundation, Inc.
++ */
++
++/* This file was part of GnuPG. Modified for use within the Linux
++ * mount utility by Marc Mutz <Marc@Mutz.com>. None of this code is
++ * by myself. I just removed everything that you don't need when all
++ * you want to do is to use rmd160_hash_buffer().
++ * My comments are marked with (mm). */
++
++/* GnuPG 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.
++ *
++ * GnuPG 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 */
++
++#include <string.h> /* (mm) for memcpy */
++#include <endian.h> /* (mm) for BIG_ENDIAN and BYTE_ORDER */
++#include "rmd160.h"
++
++/* (mm) these are used by the original GnuPG file. In order to modify
++ * that file not too much, we keep the notations. maybe it would be
++ * better to include linux/types.h and typedef __u32 to u32 and __u8
++ * to byte? */
++typedef unsigned int u32; /* taken from e.g. util-linux's minix.h */
++typedef unsigned char byte;
++
++typedef struct {
++ u32 h0,h1,h2,h3,h4;
++ u32 nblocks;
++ byte buf[64];
++ int count;
++} RMD160_CONTEXT;
++
++/****************
++ * Rotate a 32 bit integer by n bytes
++ */
++#if defined(__GNUC__) && defined(__i386__)
++static inline u32
++rol( u32 x, int n)
++{
++ __asm__("roll %%cl,%0"
++ :"=r" (x)
++ :"0" (x),"c" (n));
++ return x;
++}
++#else
++ #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
++#endif
++
++/*********************************
++ * RIPEMD-160 is not patented, see (as of 25.10.97)
++ * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
++ * Note that the code uses Little Endian byteorder, which is good for
++ * 386 etc, but we must add some conversion when used on a big endian box.
++ *
++ *
++ * Pseudo-code for RIPEMD-160
++ *
++ * RIPEMD-160 is an iterative hash function that operates on 32-bit words.
++ * The round function takes as input a 5-word chaining variable and a 16-word
++ * message block and maps this to a new chaining variable. All operations are
++ * defined on 32-bit words. Padding is identical to that of MD4.
++ *
++ *
++ * RIPEMD-160: definitions
++ *
++ *
++ * nonlinear functions at bit level: exor, mux, -, mux, -
++ *
++ * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15)
++ * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31)
++ * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47)
++ * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63)
++ * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79)
++ *
++ *
++ * added constants (hexadecimal)
++ *
++ * K(j) = 0x00000000 (0 <= j <= 15)
++ * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2))
++ * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3))
++ * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5))
++ * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7))
++ * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2))
++ * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3))
++ * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5))
++ * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7))
++ * K'(j) = 0x00000000 (64 <= j <= 79)
++ *
++ *
++ * selection of message word
++ *
++ * r(j) = j (0 <= j <= 15)
++ * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
++ * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
++ * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
++ * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
++ * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
++ * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
++ * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
++ * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
++ * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
++ *
++ *
++ * amount for rotate left (rol)
++ *
++ * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
++ * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
++ * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
++ * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
++ * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
++ * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
++ * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
++ * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
++ * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
++ * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
++ *
++ *
++ * initial value (hexadecimal)
++ *
++ * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476;
++ * h4 = 0xC3D2E1F0;
++ *
++ *
++ * RIPEMD-160: pseudo-code
++ *
++ * It is assumed that the message after padding consists of t 16-word blocks
++ * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15.
++ * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left
++ * shift (rotate) over s positions.
++ *
++ *
++ * for i := 0 to t-1 {
++ * A := h0; B := h1; C := h2; D = h3; E = h4;
++ * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4;
++ * for j := 0 to 79 {
++ * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E;
++ * A := E; E := D; D := rol_10(C); C := B; B := T;
++ * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)]
++ [+] K'(j)) [+] E';
++ * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T;
++ * }
++ * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A';
++ * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T;
++ * }
++ */
++
++/* Some examples:
++ * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31
++ * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
++ * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
++ * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36
++ * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc
++ * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b
++ * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189
++ * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb
++ * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528
++ */
++
++
++static void
++rmd160_init( RMD160_CONTEXT *hd )
++{
++ hd->h0 = 0x67452301;
++ hd->h1 = 0xEFCDAB89;
++ hd->h2 = 0x98BADCFE;
++ hd->h3 = 0x10325476;
++ hd->h4 = 0xC3D2E1F0;
++ hd->nblocks = 0;
++ hd->count = 0;
++}
++
++
++
++/****************
++ * Transform the message X which consists of 16 32-bit-words
++ */
++static void
++transform( RMD160_CONTEXT *hd, byte *data )
++{
++ u32 a,b,c,d,e,aa,bb,cc,dd,ee,t;
++ #if BYTE_ORDER == BIG_ENDIAN
++ u32 x[16];
++ { int i;
++ byte *p2, *p1;
++ for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
++ p2[3] = *p1++;
++ p2[2] = *p1++;
++ p2[1] = *p1++;
++ p2[0] = *p1++;
++ }
++ }
++ #else
++ #if 0
++ u32 *x =(u32*)data;
++ #else
++ /* this version is better because it is always aligned;
++ * The performance penalty on a 586-100 is about 6% which
++ * is acceptable - because the data is more local it might
++ * also be possible that this is faster on some machines.
++ * This function (when compiled with -02 on gcc 2.7.2)
++ * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec;
++ * [measured with a 4MB data and "gpgm --print-md rmd160"] */
++ u32 x[16];
++ memcpy( x, data, 64 );
++ #endif
++ #endif
++
++
++#define K0 0x00000000
++#define K1 0x5A827999
++#define K2 0x6ED9EBA1
++#define K3 0x8F1BBCDC
++#define K4 0xA953FD4E
++#define KK0 0x50A28BE6
++#define KK1 0x5C4DD124
++#define KK2 0x6D703EF3
++#define KK3 0x7A6D76E9
++#define KK4 0x00000000
++#define F0(x,y,z) ( (x) ^ (y) ^ (z) )
++#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) )
++#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) )
++#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) )
++#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) )
++#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
++ a = rol(t,s) + e; \
++ c = rol(c,10); \
++ } while(0)
++
++ /* left lane */
++ a = hd->h0;
++ b = hd->h1;
++ c = hd->h2;
++ d = hd->h3;
++ e = hd->h4;
++ R( a, b, c, d, e, F0, K0, 0, 11 );
++ R( e, a, b, c, d, F0, K0, 1, 14 );
++ R( d, e, a, b, c, F0, K0, 2, 15 );
++ R( c, d, e, a, b, F0, K0, 3, 12 );
++ R( b, c, d, e, a, F0, K0, 4, 5 );
++ R( a, b, c, d, e, F0, K0, 5, 8 );
++ R( e, a, b, c, d, F0, K0, 6, 7 );
++ R( d, e, a, b, c, F0, K0, 7, 9 );
++ R( c, d, e, a, b, F0, K0, 8, 11 );
++ R( b, c, d, e, a, F0, K0, 9, 13 );
++ R( a, b, c, d, e, F0, K0, 10, 14 );
++ R( e, a, b, c, d, F0, K0, 11, 15 );
++ R( d, e, a, b, c, F0, K0, 12, 6 );
++ R( c, d, e, a, b, F0, K0, 13, 7 );
++ R( b, c, d, e, a, F0, K0, 14, 9 );
++ R( a, b, c, d, e, F0, K0, 15, 8 );
++ R( e, a, b, c, d, F1, K1, 7, 7 );
++ R( d, e, a, b, c, F1, K1, 4, 6 );
++ R( c, d, e, a, b, F1, K1, 13, 8 );
++ R( b, c, d, e, a, F1, K1, 1, 13 );
++ R( a, b, c, d, e, F1, K1, 10, 11 );
++ R( e, a, b, c, d, F1, K1, 6, 9 );
++ R( d, e, a, b, c, F1, K1, 15, 7 );
++ R( c, d, e, a, b, F1, K1, 3, 15 );
++ R( b, c, d, e, a, F1, K1, 12, 7 );
++ R( a, b, c, d, e, F1, K1, 0, 12 );
++ R( e, a, b, c, d, F1, K1, 9, 15 );
++ R( d, e, a, b, c, F1, K1, 5, 9 );
++ R( c, d, e, a, b, F1, K1, 2, 11 );
++ R( b, c, d, e, a, F1, K1, 14, 7 );
++ R( a, b, c, d, e, F1, K1, 11, 13 );
++ R( e, a, b, c, d, F1, K1, 8, 12 );
++ R( d, e, a, b, c, F2, K2, 3, 11 );
++ R( c, d, e, a, b, F2, K2, 10, 13 );
++ R( b, c, d, e, a, F2, K2, 14, 6 );
++ R( a, b, c, d, e, F2, K2, 4, 7 );
++ R( e, a, b, c, d, F2, K2, 9, 14 );
++ R( d, e, a, b, c, F2, K2, 15, 9 );
++ R( c, d, e, a, b, F2, K2, 8, 13 );
++ R( b, c, d, e, a, F2, K2, 1, 15 );
++ R( a, b, c, d, e, F2, K2, 2, 14 );
++ R( e, a, b, c, d, F2, K2, 7, 8 );
++ R( d, e, a, b, c, F2, K2, 0, 13 );
++ R( c, d, e, a, b, F2, K2, 6, 6 );
++ R( b, c, d, e, a, F2, K2, 13, 5 );
++ R( a, b, c, d, e, F2, K2, 11, 12 );
++ R( e, a, b, c, d, F2, K2, 5, 7 );
++ R( d, e, a, b, c, F2, K2, 12, 5 );
++ R( c, d, e, a, b, F3, K3, 1, 11 );
++ R( b, c, d, e, a, F3, K3, 9, 12 );
++ R( a, b, c, d, e, F3, K3, 11, 14 );
++ R( e, a, b, c, d, F3, K3, 10, 15 );
++ R( d, e, a, b, c, F3, K3, 0, 14 );
++ R( c, d, e, a, b, F3, K3, 8, 15 );
++ R( b, c, d, e, a, F3, K3, 12, 9 );
++ R( a, b, c, d, e, F3, K3, 4, 8 );
++ R( e, a, b, c, d, F3, K3, 13, 9 );
++ R( d, e, a, b, c, F3, K3, 3, 14 );
++ R( c, d, e, a, b, F3, K3, 7, 5 );
++ R( b, c, d, e, a, F3, K3, 15, 6 );
++ R( a, b, c, d, e, F3, K3, 14, 8 );
++ R( e, a, b, c, d, F3, K3, 5, 6 );
++ R( d, e, a, b, c, F3, K3, 6, 5 );
++ R( c, d, e, a, b, F3, K3, 2, 12 );
++ R( b, c, d, e, a, F4, K4, 4, 9 );
++ R( a, b, c, d, e, F4, K4, 0, 15 );
++ R( e, a, b, c, d, F4, K4, 5, 5 );
++ R( d, e, a, b, c, F4, K4, 9, 11 );
++ R( c, d, e, a, b, F4, K4, 7, 6 );
++ R( b, c, d, e, a, F4, K4, 12, 8 );
++ R( a, b, c, d, e, F4, K4, 2, 13 );
++ R( e, a, b, c, d, F4, K4, 10, 12 );
++ R( d, e, a, b, c, F4, K4, 14, 5 );
++ R( c, d, e, a, b, F4, K4, 1, 12 );
++ R( b, c, d, e, a, F4, K4, 3, 13 );
++ R( a, b, c, d, e, F4, K4, 8, 14 );
++ R( e, a, b, c, d, F4, K4, 11, 11 );
++ R( d, e, a, b, c, F4, K4, 6, 8 );
++ R( c, d, e, a, b, F4, K4, 15, 5 );
++ R( b, c, d, e, a, F4, K4, 13, 6 );
++
++ aa = a; bb = b; cc = c; dd = d; ee = e;
++
++ /* right lane */
++ a = hd->h0;
++ b = hd->h1;
++ c = hd->h2;
++ d = hd->h3;
++ e = hd->h4;
++ R( a, b, c, d, e, F4, KK0, 5, 8);
++ R( e, a, b, c, d, F4, KK0, 14, 9);
++ R( d, e, a, b, c, F4, KK0, 7, 9);
++ R( c, d, e, a, b, F4, KK0, 0, 11);
++ R( b, c, d, e, a, F4, KK0, 9, 13);
++ R( a, b, c, d, e, F4, KK0, 2, 15);
++ R( e, a, b, c, d, F4, KK0, 11, 15);
++ R( d, e, a, b, c, F4, KK0, 4, 5);
++ R( c, d, e, a, b, F4, KK0, 13, 7);
++ R( b, c, d, e, a, F4, KK0, 6, 7);
++ R( a, b, c, d, e, F4, KK0, 15, 8);
++ R( e, a, b, c, d, F4, KK0, 8, 11);
++ R( d, e, a, b, c, F4, KK0, 1, 14);
++ R( c, d, e, a, b, F4, KK0, 10, 14);
++ R( b, c, d, e, a, F4, KK0, 3, 12);
++ R( a, b, c, d, e, F4, KK0, 12, 6);
++ R( e, a, b, c, d, F3, KK1, 6, 9);
++ R( d, e, a, b, c, F3, KK1, 11, 13);
++ R( c, d, e, a, b, F3, KK1, 3, 15);
++ R( b, c, d, e, a, F3, KK1, 7, 7);
++ R( a, b, c, d, e, F3, KK1, 0, 12);
++ R( e, a, b, c, d, F3, KK1, 13, 8);
++ R( d, e, a, b, c, F3, KK1, 5, 9);
++ R( c, d, e, a, b, F3, KK1, 10, 11);
++ R( b, c, d, e, a, F3, KK1, 14, 7);
++ R( a, b, c, d, e, F3, KK1, 15, 7);
++ R( e, a, b, c, d, F3, KK1, 8, 12);
++ R( d, e, a, b, c, F3, KK1, 12, 7);
++ R( c, d, e, a, b, F3, KK1, 4, 6);
++ R( b, c, d, e, a, F3, KK1, 9, 15);
++ R( a, b, c, d, e, F3, KK1, 1, 13);
++ R( e, a, b, c, d, F3, KK1, 2, 11);
++ R( d, e, a, b, c, F2, KK2, 15, 9);
++ R( c, d, e, a, b, F2, KK2, 5, 7);
++ R( b, c, d, e, a, F2, KK2, 1, 15);
++ R( a, b, c, d, e, F2, KK2, 3, 11);
++ R( e, a, b, c, d, F2, KK2, 7, 8);
++ R( d, e, a, b, c, F2, KK2, 14, 6);
++ R( c, d, e, a, b, F2, KK2, 6, 6);
++ R( b, c, d, e, a, F2, KK2, 9, 14);
++ R( a, b, c, d, e, F2, KK2, 11, 12);
++ R( e, a, b, c, d, F2, KK2, 8, 13);
++ R( d, e, a, b, c, F2, KK2, 12, 5);
++ R( c, d, e, a, b, F2, KK2, 2, 14);
++ R( b, c, d, e, a, F2, KK2, 10, 13);
++ R( a, b, c, d, e, F2, KK2, 0, 13);
++ R( e, a, b, c, d, F2, KK2, 4, 7);
++ R( d, e, a, b, c, F2, KK2, 13, 5);
++ R( c, d, e, a, b, F1, KK3, 8, 15);
++ R( b, c, d, e, a, F1, KK3, 6, 5);
++ R( a, b, c, d, e, F1, KK3, 4, 8);
++ R( e, a, b, c, d, F1, KK3, 1, 11);
++ R( d, e, a, b, c, F1, KK3, 3, 14);
++ R( c, d, e, a, b, F1, KK3, 11, 14);
++ R( b, c, d, e, a, F1, KK3, 15, 6);
++ R( a, b, c, d, e, F1, KK3, 0, 14);
++ R( e, a, b, c, d, F1, KK3, 5, 6);
++ R( d, e, a, b, c, F1, KK3, 12, 9);
++ R( c, d, e, a, b, F1, KK3, 2, 12);
++ R( b, c, d, e, a, F1, KK3, 13, 9);
++ R( a, b, c, d, e, F1, KK3, 9, 12);
++ R( e, a, b, c, d, F1, KK3, 7, 5);
++ R( d, e, a, b, c, F1, KK3, 10, 15);
++ R( c, d, e, a, b, F1, KK3, 14, 8);
++ R( b, c, d, e, a, F0, KK4, 12, 8);
++ R( a, b, c, d, e, F0, KK4, 15, 5);
++ R( e, a, b, c, d, F0, KK4, 10, 12);
++ R( d, e, a, b, c, F0, KK4, 4, 9);
++ R( c, d, e, a, b, F0, KK4, 1, 12);
++ R( b, c, d, e, a, F0, KK4, 5, 5);
++ R( a, b, c, d, e, F0, KK4, 8, 14);
++ R( e, a, b, c, d, F0, KK4, 7, 6);
++ R( d, e, a, b, c, F0, KK4, 6, 8);
++ R( c, d, e, a, b, F0, KK4, 2, 13);
++ R( b, c, d, e, a, F0, KK4, 13, 6);
++ R( a, b, c, d, e, F0, KK4, 14, 5);
++ R( e, a, b, c, d, F0, KK4, 0, 15);
++ R( d, e, a, b, c, F0, KK4, 3, 13);
++ R( c, d, e, a, b, F0, KK4, 9, 11);
++ R( b, c, d, e, a, F0, KK4, 11, 11);
++
++
++ t = hd->h1 + d + cc;
++ hd->h1 = hd->h2 + e + dd;
++ hd->h2 = hd->h3 + a + ee;
++ hd->h3 = hd->h4 + b + aa;
++ hd->h4 = hd->h0 + c + bb;
++ hd->h0 = t;
++}
++
++
++/* Update the message digest with the contents
++ * of INBUF with length INLEN.
++ */
++static void
++rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen)
++{
++ if( hd->count == 64 ) { /* flush the buffer */
++ transform( hd, hd->buf );
++ hd->count = 0;
++ hd->nblocks++;
++ }
++ if( !inbuf )
++ return;
++ if( hd->count ) {
++ for( ; inlen && hd->count < 64; inlen-- )
++ hd->buf[hd->count++] = *inbuf++;
++ rmd160_write( hd, NULL, 0 );
++ if( !inlen )
++ return;
++ }
++
++ while( inlen >= 64 ) {
++ transform( hd, inbuf );
++ hd->count = 0;
++ hd->nblocks++;
++ inlen -= 64;
++ inbuf += 64;
++ }
++ for( ; inlen && hd->count < 64; inlen-- )
++ hd->buf[hd->count++] = *inbuf++;
++}
++
++/* The routine terminates the computation
++ */
++
++static void
++rmd160_final( RMD160_CONTEXT *hd )
++{
++ u32 t, msb, lsb;
++ byte *p;
++
++ rmd160_write(hd, NULL, 0); /* flush */;
++
++ msb = 0;
++ t = hd->nblocks;
++ if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
++ msb++;
++ msb += t >> 26;
++ t = lsb;
++ if( (lsb = t + hd->count) < t ) /* add the count */
++ msb++;
++ t = lsb;
++ if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
++ msb++;
++ msb += t >> 29;
++
++ if( hd->count < 56 ) { /* enough room */
++ hd->buf[hd->count++] = 0x80; /* pad */
++ while( hd->count < 56 )
++ hd->buf[hd->count++] = 0; /* pad */
++ }
++ else { /* need one extra block */
++ hd->buf[hd->count++] = 0x80; /* pad character */
++ while( hd->count < 64 )
++ hd->buf[hd->count++] = 0;
++ rmd160_write(hd, NULL, 0); /* flush */;
++ memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
++ }
++ /* append the 64 bit count */
++ hd->buf[56] = lsb ;
++ hd->buf[57] = lsb >> 8;
++ hd->buf[58] = lsb >> 16;
++ hd->buf[59] = lsb >> 24;
++ hd->buf[60] = msb ;
++ hd->buf[61] = msb >> 8;
++ hd->buf[62] = msb >> 16;
++ hd->buf[63] = msb >> 24;
++ transform( hd, hd->buf );
++
++ p = hd->buf;
++ #if BYTE_ORDER == BIG_ENDIAN
++ #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \
++ *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0)
++ #else /* little endian */
++ #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
++ #endif
++ X(0);
++ X(1);
++ X(2);
++ X(3);
++ X(4);
++ #undef X
++}
++
++/****************
++ * Shortcut functions which puts the hash value of the supplied buffer
++ * into outbuf which must have a size of 20 bytes.
++ */
++void
++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
++{
++ RMD160_CONTEXT hd;
++
++ rmd160_init( &hd );
++ rmd160_write( &hd, (byte*)buffer, length );
++ rmd160_final( &hd );
++ memcpy( outbuf, hd.buf, 20 );
++}
+diff -urN util-linux-ng-2.14/mount/rmd160.h util-linux-ng-2.14-AES/mount/rmd160.h
+--- util-linux-ng-2.14/mount/rmd160.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/rmd160.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,9 @@
++#ifndef RMD160_H
++#define RMD160_H
++
++void
++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length );
++
++#endif /*RMD160_H*/
++
++
+diff -urN util-linux-ng-2.14/mount/sha512.c util-linux-ng-2.14-AES/mount/sha512.c
+--- util-linux-ng-2.14/mount/sha512.c 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/sha512.c 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,432 @@
++/*
++ * sha512.c
++ *
++ * Written by Jari Ruusu, April 16 2001
++ *
++ * Copyright 2001 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU Public License.
++ */
++
++#include <string.h>
++#include <sys/types.h>
++#include "sha512.h"
++
++/* Define one or more of these. If none is defined, you get all of them */
++#if !defined(SHA256_NEEDED)&&!defined(SHA512_NEEDED)&&!defined(SHA384_NEEDED)
++# define SHA256_NEEDED 1
++# define SHA512_NEEDED 1
++# define SHA384_NEEDED 1
++#endif
++
++#if defined(SHA256_NEEDED)
++static const u_int32_t sha256_hashInit[8] = {
++ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,
++ 0x1f83d9ab, 0x5be0cd19
++};
++static const u_int32_t sha256_K[64] = {
++ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
++ 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
++ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
++ 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
++ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
++ 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
++ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
++ 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
++ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
++ 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
++ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
++};
++#endif
++
++#if defined(SHA512_NEEDED)
++static const u_int64_t sha512_hashInit[8] = {
++ 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL,
++ 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
++ 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
++};
++#endif
++
++#if defined(SHA384_NEEDED)
++static const u_int64_t sha384_hashInit[8] = {
++ 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL,
++ 0x152fecd8f70e5939ULL, 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
++ 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL
++};
++#endif
++
++#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED)
++static const u_int64_t sha512_K[80] = {
++ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
++ 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
++ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
++ 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
++ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
++ 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
++ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
++ 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
++ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
++ 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
++ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
++ 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
++ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
++ 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
++ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
++ 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
++ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
++ 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
++ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
++ 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
++ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
++ 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
++ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
++ 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
++ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
++ 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
++ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
++};
++#endif
++
++#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
++#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
++#define R(x,y) ((y) >> (x))
++
++#if defined(SHA256_NEEDED)
++void sha256_init(sha256_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha256_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_bufCnt = 0;
++}
++
++#define S(x,y) (((y) >> (x)) | ((y) << (32 - (x))))
++#define uSig0(x) ((S(2,(x))) ^ (S(13,(x))) ^ (S(22,(x))))
++#define uSig1(x) ((S(6,(x))) ^ (S(11,(x))) ^ (S(25,(x))))
++#define lSig0(x) ((S(7,(x))) ^ (S(18,(x))) ^ (R(3,(x))))
++#define lSig1(x) ((S(17,(x))) ^ (S(19,(x))) ^ (R(10,(x))))
++
++static void sha256_transform(sha256_context *ctx, unsigned char *datap)
++{
++ register int j;
++ u_int32_t a, b, c, d, e, f, g, h;
++ u_int32_t T1, T2, W[64], Wm2, Wm15;
++
++ /* read the data, big endian byte order */
++ j = 0;
++ do {
++ W[j] = (((u_int32_t)(datap[0]))<<24) | (((u_int32_t)(datap[1]))<<16) |
++ (((u_int32_t)(datap[2]))<<8 ) | ((u_int32_t)(datap[3]));
++ datap += 4;
++ } while(++j < 16);
++
++ /* initialize variables a...h */
++ a = ctx->sha_H[0];
++ b = ctx->sha_H[1];
++ c = ctx->sha_H[2];
++ d = ctx->sha_H[3];
++ e = ctx->sha_H[4];
++ f = ctx->sha_H[5];
++ g = ctx->sha_H[6];
++ h = ctx->sha_H[7];
++
++ /* apply compression function */
++ j = 0;
++ do {
++ if(j >= 16) {
++ Wm2 = W[j - 2];
++ Wm15 = W[j - 15];
++ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16];
++ }
++ T1 = h + uSig1(e) + Ch(e,f,g) + sha256_K[j] + W[j];
++ T2 = uSig0(a) + Maj(a,b,c);
++ h = g; g = f; f = e;
++ e = d + T1;
++ d = c; c = b; b = a;
++ a = T1 + T2;
++ } while(++j < 64);
++
++ /* compute intermediate hash value */
++ ctx->sha_H[0] += a;
++ ctx->sha_H[1] += b;
++ ctx->sha_H[2] += c;
++ ctx->sha_H[3] += d;
++ ctx->sha_H[4] += e;
++ ctx->sha_H[5] += f;
++ ctx->sha_H[6] += g;
++ ctx->sha_H[7] += h;
++
++ ctx->sha_blocks++;
++}
++
++void sha256_write(sha256_context *ctx, unsigned char *datap, int length)
++{
++ while(length > 0) {
++ if(!ctx->sha_bufCnt) {
++ while(length >= sizeof(ctx->sha_out)) {
++ sha256_transform(ctx, datap);
++ datap += sizeof(ctx->sha_out);
++ length -= sizeof(ctx->sha_out);
++ }
++ if(!length) return;
++ }
++ ctx->sha_out[ctx->sha_bufCnt] = *datap++;
++ length--;
++ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) {
++ sha256_transform(ctx, &ctx->sha_out[0]);
++ ctx->sha_bufCnt = 0;
++ }
++ }
++}
++
++void sha256_final(sha256_context *ctx)
++{
++ register int j;
++ u_int64_t bitLength;
++ u_int32_t i;
++ unsigned char padByte, *datap;
++
++ bitLength = (ctx->sha_blocks << 9) | (ctx->sha_bufCnt << 3);
++ padByte = 0x80;
++ sha256_write(ctx, &padByte, 1);
++
++ /* pad extra space with zeroes */
++ padByte = 0;
++ while(ctx->sha_bufCnt != 56) {
++ sha256_write(ctx, &padByte, 1);
++ }
++
++ /* write bit length, big endian byte order */
++ ctx->sha_out[56] = bitLength >> 56;
++ ctx->sha_out[57] = bitLength >> 48;
++ ctx->sha_out[58] = bitLength >> 40;
++ ctx->sha_out[59] = bitLength >> 32;
++ ctx->sha_out[60] = bitLength >> 24;
++ ctx->sha_out[61] = bitLength >> 16;
++ ctx->sha_out[62] = bitLength >> 8;
++ ctx->sha_out[63] = bitLength;
++ sha256_transform(ctx, &ctx->sha_out[0]);
++
++ /* return results in ctx->sha_out[0...31] */
++ datap = &ctx->sha_out[0];
++ j = 0;
++ do {
++ i = ctx->sha_H[j];
++ datap[0] = i >> 24;
++ datap[1] = i >> 16;
++ datap[2] = i >> 8;
++ datap[3] = i;
++ datap += 4;
++ } while(++j < 8);
++
++ /* clear sensitive information */
++ memset(&ctx->sha_out[32], 0, sizeof(sha256_context) - 32);
++}
++
++void sha256_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha256_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 32) ole = 32;
++ sha256_init(&ctx);
++ sha256_write(&ctx, ib, ile);
++ sha256_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++
++#endif
++
++#if defined(SHA512_NEEDED)
++void sha512_init(sha512_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha512_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_blocksMSB = 0;
++ ctx->sha_bufCnt = 0;
++}
++#endif
++
++#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED)
++#undef S
++#undef uSig0
++#undef uSig1
++#undef lSig0
++#undef lSig1
++#define S(x,y) (((y) >> (x)) | ((y) << (64 - (x))))
++#define uSig0(x) ((S(28,(x))) ^ (S(34,(x))) ^ (S(39,(x))))
++#define uSig1(x) ((S(14,(x))) ^ (S(18,(x))) ^ (S(41,(x))))
++#define lSig0(x) ((S(1,(x))) ^ (S(8,(x))) ^ (R(7,(x))))
++#define lSig1(x) ((S(19,(x))) ^ (S(61,(x))) ^ (R(6,(x))))
++
++static void sha512_transform(sha512_context *ctx, unsigned char *datap)
++{
++ register int j;
++ u_int64_t a, b, c, d, e, f, g, h;
++ u_int64_t T1, T2, W[80], Wm2, Wm15;
++
++ /* read the data, big endian byte order */
++ j = 0;
++ do {
++ W[j] = (((u_int64_t)(datap[0]))<<56) | (((u_int64_t)(datap[1]))<<48) |
++ (((u_int64_t)(datap[2]))<<40) | (((u_int64_t)(datap[3]))<<32) |
++ (((u_int64_t)(datap[4]))<<24) | (((u_int64_t)(datap[5]))<<16) |
++ (((u_int64_t)(datap[6]))<<8 ) | ((u_int64_t)(datap[7]));
++ datap += 8;
++ } while(++j < 16);
++
++ /* initialize variables a...h */
++ a = ctx->sha_H[0];
++ b = ctx->sha_H[1];
++ c = ctx->sha_H[2];
++ d = ctx->sha_H[3];
++ e = ctx->sha_H[4];
++ f = ctx->sha_H[5];
++ g = ctx->sha_H[6];
++ h = ctx->sha_H[7];
++
++ /* apply compression function */
++ j = 0;
++ do {
++ if(j >= 16) {
++ Wm2 = W[j - 2];
++ Wm15 = W[j - 15];
++ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16];
++ }
++ T1 = h + uSig1(e) + Ch(e,f,g) + sha512_K[j] + W[j];
++ T2 = uSig0(a) + Maj(a,b,c);
++ h = g; g = f; f = e;
++ e = d + T1;
++ d = c; c = b; b = a;
++ a = T1 + T2;
++ } while(++j < 80);
++
++ /* compute intermediate hash value */
++ ctx->sha_H[0] += a;
++ ctx->sha_H[1] += b;
++ ctx->sha_H[2] += c;
++ ctx->sha_H[3] += d;
++ ctx->sha_H[4] += e;
++ ctx->sha_H[5] += f;
++ ctx->sha_H[6] += g;
++ ctx->sha_H[7] += h;
++
++ ctx->sha_blocks++;
++ if(!ctx->sha_blocks) ctx->sha_blocksMSB++;
++}
++
++void sha512_write(sha512_context *ctx, unsigned char *datap, int length)
++{
++ while(length > 0) {
++ if(!ctx->sha_bufCnt) {
++ while(length >= sizeof(ctx->sha_out)) {
++ sha512_transform(ctx, datap);
++ datap += sizeof(ctx->sha_out);
++ length -= sizeof(ctx->sha_out);
++ }
++ if(!length) return;
++ }
++ ctx->sha_out[ctx->sha_bufCnt] = *datap++;
++ length--;
++ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) {
++ sha512_transform(ctx, &ctx->sha_out[0]);
++ ctx->sha_bufCnt = 0;
++ }
++ }
++}
++
++void sha512_final(sha512_context *ctx)
++{
++ register int j;
++ u_int64_t bitLength, bitLengthMSB;
++ u_int64_t i;
++ unsigned char padByte, *datap;
++
++ bitLength = (ctx->sha_blocks << 10) | (ctx->sha_bufCnt << 3);
++ bitLengthMSB = (ctx->sha_blocksMSB << 10) | (ctx->sha_blocks >> 54);
++ padByte = 0x80;
++ sha512_write(ctx, &padByte, 1);
++
++ /* pad extra space with zeroes */
++ padByte = 0;
++ while(ctx->sha_bufCnt != 112) {
++ sha512_write(ctx, &padByte, 1);
++ }
++
++ /* write bit length, big endian byte order */
++ ctx->sha_out[112] = bitLengthMSB >> 56;
++ ctx->sha_out[113] = bitLengthMSB >> 48;
++ ctx->sha_out[114] = bitLengthMSB >> 40;
++ ctx->sha_out[115] = bitLengthMSB >> 32;
++ ctx->sha_out[116] = bitLengthMSB >> 24;
++ ctx->sha_out[117] = bitLengthMSB >> 16;
++ ctx->sha_out[118] = bitLengthMSB >> 8;
++ ctx->sha_out[119] = bitLengthMSB;
++ ctx->sha_out[120] = bitLength >> 56;
++ ctx->sha_out[121] = bitLength >> 48;
++ ctx->sha_out[122] = bitLength >> 40;
++ ctx->sha_out[123] = bitLength >> 32;
++ ctx->sha_out[124] = bitLength >> 24;
++ ctx->sha_out[125] = bitLength >> 16;
++ ctx->sha_out[126] = bitLength >> 8;
++ ctx->sha_out[127] = bitLength;
++ sha512_transform(ctx, &ctx->sha_out[0]);
++
++ /* return results in ctx->sha_out[0...63] */
++ datap = &ctx->sha_out[0];
++ j = 0;
++ do {
++ i = ctx->sha_H[j];
++ datap[0] = i >> 56;
++ datap[1] = i >> 48;
++ datap[2] = i >> 40;
++ datap[3] = i >> 32;
++ datap[4] = i >> 24;
++ datap[5] = i >> 16;
++ datap[6] = i >> 8;
++ datap[7] = i;
++ datap += 8;
++ } while(++j < 8);
++
++ /* clear sensitive information */
++ memset(&ctx->sha_out[64], 0, sizeof(sha512_context) - 64);
++}
++
++void sha512_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha512_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 64) ole = 64;
++ sha512_init(&ctx);
++ sha512_write(&ctx, ib, ile);
++ sha512_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++#endif
++
++#if defined(SHA384_NEEDED)
++void sha384_init(sha512_context *ctx)
++{
++ memcpy(&ctx->sha_H[0], &sha384_hashInit[0], sizeof(ctx->sha_H));
++ ctx->sha_blocks = 0;
++ ctx->sha_blocksMSB = 0;
++ ctx->sha_bufCnt = 0;
++}
++
++void sha384_hash_buffer(unsigned char *ib, int ile, unsigned char *ob, int ole)
++{
++ sha512_context ctx;
++
++ if(ole < 1) return;
++ memset(ob, 0, ole);
++ if(ole > 48) ole = 48;
++ sha384_init(&ctx);
++ sha512_write(&ctx, ib, ile);
++ sha512_final(&ctx);
++ memcpy(ob, &ctx.sha_out[0], ole);
++ memset(&ctx, 0, sizeof(ctx));
++}
++#endif
+diff -urN util-linux-ng-2.14/mount/sha512.h util-linux-ng-2.14-AES/mount/sha512.h
+--- util-linux-ng-2.14/mount/sha512.h 1970-01-01 02:00:00.000000000 +0200
++++ util-linux-ng-2.14-AES/mount/sha512.h 2008-06-24 16:55:13.000000000 +0300
+@@ -0,0 +1,45 @@
++/*
++ * sha512.h
++ *
++ * Written by Jari Ruusu, April 16 2001
++ *
++ * Copyright 2001 by Jari Ruusu.
++ * Redistribution of this file is permitted under the GNU Public License.
++ */
++
++#include <sys/types.h>
++
++typedef struct {
++ unsigned char sha_out[64]; /* results are here, bytes 0...31 */
++ u_int32_t sha_H[8];
++ u_int64_t sha_blocks;
++ int sha_bufCnt;
++} sha256_context;
++
++typedef struct {
++ unsigned char sha_out[128]; /* results are here, bytes 0...63 */
++ u_int64_t sha_H[8];
++ u_int64_t sha_blocks;
++ u_int64_t sha_blocksMSB;
++ int sha_bufCnt;
++} sha512_context;
++
++/* no sha384_context, use sha512_context */
++
++/* 256 bit hash, provides 128 bits of security against collision attacks */
++extern void sha256_init(sha256_context *);
++extern void sha256_write(sha256_context *, unsigned char *, int);
++extern void sha256_final(sha256_context *);
++extern void sha256_hash_buffer(unsigned char *, int, unsigned char *, int);
++
++/* 512 bit hash, provides 256 bits of security against collision attacks */
++extern void sha512_init(sha512_context *);
++extern void sha512_write(sha512_context *, unsigned char *, int);
++extern void sha512_final(sha512_context *);
++extern void sha512_hash_buffer(unsigned char *, int, unsigned char *, int);
++
++/* 384 bit hash, provides 192 bits of security against collision attacks */
++extern void sha384_init(sha512_context *);
++/* no sha384_write(), use sha512_write() */
++/* no sha384_final(), use sha512_final(), result in ctx->sha_out[0...47] */
++extern void sha384_hash_buffer(unsigned char *, int, unsigned char *, int);
+diff -urN util-linux-ng-2.14/mount/swapon.8 util-linux-ng-2.14-AES/mount/swapon.8
+--- util-linux-ng-2.14/mount/swapon.8 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/swapon.8 2008-06-24 16:55:13.000000000 +0300
+@@ -136,6 +136,22 @@
+ .I /proc/swaps
+ or
+ .IR /etc/fstab ).
++.PP
++If
++.I loop=/dev/loop?
++and
++.I encryption=AES128
++options are present in
++.I /etc/fstab
++then
++.BR "swapon -a"
++will set up loop devices using random keys, run
++.BR "mkswap"
++on them, and enable encrypted swap on specified loop devices. Encrypted loop
++devices are set up with page size offset so that unencrypted swap signatures
++on first page of swap devices are not touched.
++.BR "swapoff -a"
++will tear down such loop devices.
+ .SH NOTE
+ You should not use
+ .B swapon
+diff -urN util-linux-ng-2.14/mount/swapon.c util-linux-ng-2.14-AES/mount/swapon.c
+--- util-linux-ng-2.14/mount/swapon.c 2008-05-29 02:01:02.000000000 +0300
++++ util-linux-ng-2.14-AES/mount/swapon.c 2008-06-24 16:55:13.000000000 +0300
+@@ -1,5 +1,18 @@
+ /*
+ * A swapon(8)/swapoff(8) for Linux 0.99.
++ * swapon.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp
++ *
++ * 1997-02-xx <Vincent.Renardias@waw.com>
++ * - added '-s' (summary option)
++ * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
++ * - added Native Language Support
++ * 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * - fixed strerr(errno) in gettext calls
++ * 2001-03-22 Erik Troan <ewt@redhat.com>
++ * - added -e option for -a
++ * - -a shouldn't try to add swaps that are already enabled
++ * 2002-04-14 Jari Ruusu
++ * - added encrypted swap support
+ */
+ #include <ctype.h>
+ #include <stdlib.h>
+@@ -9,6 +22,9 @@
+ #include <mntent.h>
+ #include <errno.h>
+ #include <sys/stat.h>
++#include <sys/ioctl.h>
++#include <sys/utsname.h>
++#include <sys/time.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+@@ -20,6 +36,9 @@
+ #include "realpath.h"
+ #include "pathnames.h"
+ #include "sundries.h"
++#include "loop.h"
++#include "xstrncpy.h"
++#include "sha512.h"
+
+ #define PATH_MKSWAP "/sbin/mkswap"
+
+@@ -381,6 +400,262 @@
+ }
+
+ static int
++prepare_encrypted_swap(const char *partition, char *loop, char *encryption)
++{
++ int x, y, fd, ffd;
++ int page_size;
++ sha512_context s;
++ unsigned char b[4096], multiKeyBits[65][32];
++ char *a[10], *apiName;
++ struct loop_info64 loopinfo;
++ FILE *f;
++
++ /*
++ * Some sanity checks
++ */
++ if(strlen(partition) < 1) {
++ fprintf(stderr, _("swapon: invalid swap device name\n"));
++ return 0;
++ }
++ if(strlen(loop) < 1) {
++ fprintf(stderr, _("swapon: invalid loop device name\n"));
++ return 0;
++ }
++ if(strlen(encryption) < 1) {
++ fprintf(stderr, _("swapon: invalid encryption type\n"));
++ return 0;
++ }
++
++ /*
++ * Abort if loop device does not exist or is already in use
++ */
++ if((fd = open(loop, O_RDWR)) == -1) {
++ fprintf(stderr, _("swapon: unable to open loop device %s\n"), loop);
++ return 0;
++ }
++ if(is_unused_loop_device(fd) == 0) {
++ fprintf(stderr, _("swapon: loop device %s already in use\n"), loop);
++ goto errout0;
++ }
++
++ /*
++ * Compute SHA-512 over first 40 KB of old swap data. This data
++ * is mostly unknown data encrypted using unknown key. SHA-512 hash
++ * output is then used as entropy for new swap encryption key.
++ */
++ if(!(f = fopen(partition, "r+"))) {
++ fprintf(stderr, _("swapon: unable to open swap device %s\n"), partition);
++ goto errout0;
++ }
++ page_size = getpagesize();
++ fseek(f, (long)page_size, SEEK_SET);
++ sha512_init(&s);
++ for(x = 0; x < 10; x++) {
++ if(fread(&b[0], sizeof(b), 1, f) != 1) break;
++ sha512_write(&s, &b[0], sizeof(b));
++ }
++ sha512_final(&s);
++
++ /*
++ * Overwrite 40 KB of old swap data 20 times so that recovering
++ * SHA-512 output beyond this point is difficult and expensive.
++ */
++ for(y = 0; y < 20; y++) {
++ int z;
++ struct {
++ struct timeval tv;
++ unsigned char h[64];
++ int x,y,z;
++ } j;
++ if(fseek(f, (long)page_size, SEEK_SET)) break;
++ memcpy(&j.h[0], &s.sha_out[0], 64);
++ gettimeofday(&j.tv, NULL);
++ j.y = y;
++ for(x = 0; x < 10; x++) {
++ j.x = x;
++ for(z = 0; z < sizeof(b); z += 64) {
++ j.z = z;
++ sha512_hash_buffer((unsigned char *)&j, sizeof(j), &b[z], 64);
++ }
++ if(fwrite(&b[0], sizeof(b), 1, f) != 1) break;
++ }
++ memset(&j, 0, sizeof(j));
++ if(fflush(f)) break;
++ if(fsync(fileno(f))) break;
++ }
++ fclose(f);
++
++ /*
++ * Use all 512 bits of hash output
++ */
++ memcpy(&b[0], &s.sha_out[0], 64);
++ memset(&s, 0, sizeof(s));
++
++ /*
++ * Read 32 bytes of random entropy from kernel's random
++ * number generator. This code may be executed early on startup
++ * scripts and amount of random entropy may be non-existent.
++ * SHA-512 of old swap data is used as workaround for missing
++ * entropy in kernel's random number generator.
++ */
++ if(!(f = fopen("/dev/urandom", "r"))) {
++ fprintf(stderr, _("swapon: unable to open /dev/urandom\n"));
++ goto errout0;
++ }
++ fread(&b[64], 32, 1, f);
++
++ /*
++ * Set up struct loop_info64
++ */
++ if((ffd = open(partition, O_RDWR)) < 0) {
++ fprintf(stderr, _("swapon: unable to open swap device %s\n"), partition);
++ goto errout1;
++ }
++ memset(&loopinfo, 0, sizeof(loopinfo));
++ xstrncpy((char *)loopinfo.lo_file_name, partition, LO_NAME_SIZE);
++ loopinfo.lo_encrypt_type = loop_crypt_type(encryption, &loopinfo.lo_encrypt_key_size, &apiName);
++ if(loopinfo.lo_encrypt_type <= 1) {
++ fprintf(stderr, _("swapon: unsupported swap encryption type %s\n"), encryption);
++errout2:
++ close(ffd);
++errout1:
++ fclose(f);
++errout0:
++ close(fd);
++ memset(&loopinfo.lo_encrypt_key[0], 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ return 0;
++ }
++ loopinfo.lo_offset = page_size;
++ /* single-key hash */
++ sha512_hash_buffer(&b[0], 64+32, &loopinfo.lo_encrypt_key[0], sizeof(loopinfo.lo_encrypt_key));
++ /* multi-key hash */
++ x = 0;
++ while(x < 65) {
++ fread(&b[64+32], 16, 1, f);
++ sha512_hash_buffer(&b[0], 64+32+16, &multiKeyBits[x][0], 32);
++ x++;
++ }
++
++ /*
++ * Try to set up single-key loop
++ */
++ if(ioctl(fd, LOOP_SET_FD, ffd) < 0) {
++ fprintf(stderr, _("swapon: LOOP_SET_FD failed\n"));
++ goto errout2;
++ }
++ if ((loopinfo.lo_encrypt_type == 18) || (loop_set_status64_ioctl(fd, &loopinfo) < 0)) {
++ if(try_cryptoapi_loop_interface(fd, &loopinfo, apiName) < 0) {
++ fprintf(stderr, _("swapon: LOOP_SET_STATUS failed\n"));
++ ioctl(fd, LOOP_CLR_FD, 0);
++ goto errout2;
++ }
++ }
++
++ /*
++ * Try to put loop to multi-key v3 or v2 mode.
++ * If this fails, then let it operate in single-key mode.
++ */
++ if(ioctl(fd, LOOP_MULTI_KEY_SETUP_V3, &multiKeyBits[0][0]) < 0) {
++ ioctl(fd, LOOP_MULTI_KEY_SETUP, &multiKeyBits[0][0]);
++ }
++
++ /*
++ * Loop is now set up. Clean up the keys.
++ */
++ memset(&loopinfo.lo_encrypt_key[0], 0, sizeof(loopinfo.lo_encrypt_key));
++ memset(&multiKeyBits[0][0], 0, sizeof(multiKeyBits));
++ close(ffd);
++ fclose(f);
++ close(fd);
++
++ /*
++ * Write 40 KB of zeroes to loop device. That same data is written
++ * to underlying partition in encrypted form. This is done to guarantee
++ * that next time encrypted swap is initialized, the SHA-512 hash will
++ * be different. And, if encrypted swap data writes over this data, that's
++ * even better.
++ */
++ if(!(f = fopen(loop, "r+"))) {
++ fprintf(stderr, _("swapon: unable to open loop device %s\n"), loop);
++ return 0;
++ }
++ memset(&b[0], 0, sizeof(b));
++ for(x = 0; x < 10; x++) {
++ if(fwrite(&b[0], sizeof(b), 1, f) != 1) break;
++ }
++ fflush(f);
++ fsync(fileno(f));
++ fclose(f);
++ sync();
++
++ /*
++ * Run mkswap on loop device so that kernel understands it as swap.
++ * Redirect stderr to /dev/null and ignore exit value.
++ */
++ if(!(x = fork())) {
++ if((x = open("/dev/null", O_WRONLY)) >= 0) {
++ dup2(x, 2);
++ close(x);
++ }
++ a[0] = "mkswap";
++ a[1] = loop;
++ a[2] = 0;
++ execvp(a[0], &a[0]);
++ execv("/sbin/mkswap", &a[0]);
++ /* error to stdout, stderr is directed to /dev/null */
++ printf(_("swapon: unable to execute mkswap\n"));
++ exit(1);
++ }
++ if(x == -1) {
++ fprintf(stderr, _("swapon: fork failed\n"));
++ return 0;
++ }
++ waitpid(x, &y, 0);
++ sync();
++
++ return 1;
++}
++
++static void
++shutdown_encrypted_swap(char *loop)
++{
++ int fd;
++ struct stat statbuf;
++ struct loop_info64 loopinfo;
++ unsigned char b[32];
++ FILE *f;
++
++ if(stat(loop, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
++ if((fd = open(loop, O_RDWR)) >= 0) {
++ if(!loop_get_status64_ioctl(fd, &loopinfo)) {
++ /*
++ * Read 32 bytes of random data from kernel's random
++ * number generator and write that to loop device.
++ * This preserves some of kernel's random entropy
++ * to next activation of encrypted swap on this
++ * partition.
++ */
++ if((f = fopen("/dev/urandom", "r")) != NULL) {
++ fread(&b[0], 32, 1, f);
++ fclose(f);
++ write(fd, &b[0], 32);
++ fsync(fd);
++ }
++ }
++ close(fd);
++ }
++ sync();
++ if((fd = open(loop, O_RDONLY)) >= 0) {
++ if(!loop_get_status64_ioctl(fd, &loopinfo)) {
++ ioctl(fd, LOOP_CLR_FD, 0);
++ }
++ close(fd);
++ }
++ }
++}
++
++static int
+ swapon_all(void) {
+ FILE *fp;
+ struct mntent *fstab;
+@@ -400,6 +675,8 @@
+ const char *special;
+ int skip = 0;
+ int pri = priority;
++ char *opt, *opts;
++ char *loop = NULL, *encryption = NULL;
+
+ if (!streq(fstab->mnt_type, MNTTYPE_SWAP))
+ continue;
+@@ -408,23 +685,39 @@
+ if (!special)
+ continue;
+
+- if (!is_in_proc_swaps(special) &&
+- (!ifexists || !access(special, R_OK))) {
+- /* parse mount options; */
+- char *opt, *opts = strdup(fstab->mnt_opts);
+-
+- for (opt = strtok(opts, ","); opt != NULL;
+- opt = strtok(NULL, ",")) {
+- if (strncmp(opt, "pri=", 4) == 0)
+- pri = atoi(opt+4);
+- if (strcmp(opt, "noauto") == 0)
+- skip = 1;
++ /* parse mount options; */
++ opts = strdup(fstab->mnt_opts);
++ if (!opts) {
++ fprintf(stderr, "not enough memory");
++ exit(1);
++ }
++ for (opt = strtok(opts, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ if (strncmp(opt, "pri=", 4) == 0)
++ pri = atoi(opt+4);
++ if (strcmp(opt, "noauto") == 0)
++ skip = 1;
++ if (strncmp(opt, "loop=", 5) == 0)
++ loop = opt + 5;
++ if (strncmp(opt, "encryption=", 11) == 0)
++ encryption = opt + 11;
++ }
++ if(skip)
++ continue;
++ if (loop && encryption) {
++ if(!is_in_proc_swaps(loop) && (!ifexists || !access(special, R_OK))) {
++ if (!prepare_encrypted_swap(special, loop, encryption)) {
++ status |= -1;
++ continue;
++ }
++ status |= do_swapon(loop, pri, CANONIC);
+ }
+- if (!skip)
+- status |= do_swapon(special, pri, CANONIC);
++ continue;
++ }
++ if (!is_in_proc_swaps(special) && (!ifexists || !access(special, R_OK))) {
++ status |= do_swapon(special, pri, CANONIC);
+ }
+ }
+- fclose(fp);
++ endmntent(fp);
+
+ return status;
+ }
+@@ -587,19 +880,51 @@
+ exit(2);
+ }
+ while ((fstab = getmntent(fp)) != NULL) {
++ const char *orig_special = fstab->mnt_fsname;
+ const char *special;
++ int skip = 0;
++ char *opt, *opts;
++ char *loop = NULL, *encryption = NULL;
+
+ if (!streq(fstab->mnt_type, MNTTYPE_SWAP))
+ continue;
+
+- special = fsprobe_get_devname(fstab->mnt_fsname);
++ special = fsprobe_get_devname(orig_special);
+ if (!special)
+ continue;
+
+- if (!is_in_proc_swaps(special))
++ /* parse mount options; */
++ opts = strdup(fstab->mnt_opts);
++ if (!opts) {
++ fprintf(stderr, "not enough memory");
++ exit(1);
++ }
++ for (opt = strtok(opts, ","); opt != NULL; opt = strtok(NULL, ",")) {
++ if (strcmp(opt, "noauto") == 0)
++ skip = 1;
++ if (strncmp(opt, "loop=", 5) == 0)
++ loop = opt + 5;
++ if (strncmp(opt, "encryption=", 11) == 0)
++ encryption = opt + 11;
++ }
++ if (loop && encryption) {
++ if (!is_in_proc_swaps(loop)) {
++ if(skip)
++ continue;
++ do_swapoff(loop, QUIET, CANONIC);
++ }
++ shutdown_encrypted_swap(loop);
++ continue;
++ }
++ if(skip)
++ continue;
++ if (!is_in_proc_swaps(special)) {
+ do_swapoff(special, QUIET, CANONIC);
++ }
++
++
+ }
+- fclose(fp);
++ endmntent(fp);
+ }
+
+ return status;
diff --git a/abs/core/v4l-dvb/PKGBUILD b/abs/core/v4l-dvb/PKGBUILD
new file mode 100644
index 0000000..8db31a2
--- /dev/null
+++ b/abs/core/v4l-dvb/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=v4l-dvb
+_kernver=2.6.26-ARCH
+pkgver=1
+pkgrel=1
+pkgdesc="V4L-DVB drivers from mercurial"
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://linuxtv.org/"
+depends=('kernel26')
+makedepends=(kernel-headers)
+install=v4l-dvb.install
+source=(http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz)
+
+build() {
+ cd $startdir/src/v4l-dvb*/
+ 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*
+}
diff --git a/abs/core/v4l-dvb/v4l-dvb.install b/abs/core/v4l-dvb/v4l-dvb.install
new file mode 100644
index 0000000..c87bb82
--- /dev/null
+++ b/abs/core/v4l-dvb/v4l-dvb.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ 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.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.26-ARCH'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/vbetool/PKGBUILD b/abs/core/vbetool/PKGBUILD
new file mode 100644
index 0000000..9b279e6
--- /dev/null
+++ b/abs/core/vbetool/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: James Rayner <james@archlinux.org>
+# Contributor: Christian Storm <Christian.Storm@gmx.DE>
+pkgname=vbetool
+pkgver=1.0
+pkgrel=2
+pkgdesc="vbetool uses lrmi in order to run code from the video BIOS"
+arch=('i686' 'x86_64')
+url="http://www.srcf.ucam.org/~mjg59/vbetool/"
+license=('GPL2')
+depends=('zlib' 'libx86')
+makedepends=('pciutils')
+source=(http://www.codon.org.uk/~mjg59/vbetool/download/vbetool-${pkgver}.tar.gz)
+
+
+build() {
+ cd $startdir/src/vbetool-$pkgver
+ if [ "${CARCH}" = "x86_64" ]; then
+ ./configure --prefix=/usr --without-x86emu
+ else
+ ./configure --prefix=/usr
+ fi
+ make LIBS=-lpci || return 1
+ make DESTDIR=$startdir/pkg install
+}
+
+
+
+
+
+
+md5sums=('e57b5475b8200e3c44df7f53f0fbdc72')
diff --git a/abs/core/vi/PKGBUILD b/abs/core/vi/PKGBUILD
new file mode 100644
index 0000000..1165431
--- /dev/null
+++ b/abs/core/vi/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 3026 2008-06-18 02:38:15Z eric $
+# Maintainer: tobias [ tobias at archlinux org ]
+
+pkgname=vi
+_srcver=7.1
+_patchlevel=330
+pkgver=${_srcver}.${_patchlevel}
+pkgrel=10
+pkgdesc="a highly configurable, improved version of the vi text editor (basic version)"
+arch=(i686 x86_64)
+license=('custom:vim')
+url="http://www.vim.org"
+groups=('base')
+depends=('glibc' 'ncurses' 'coreutils')
+makedepends=('wget' 'sed' 'grep')
+backup=(etc/virc)
+install=${pkgname}.install
+# we need the extra-stuff to get all patches applied smoothly
+source=(ftp://ftp.vim.org/pub/vim/unix/vim-${_srcver}.tar.bz2 \
+ ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-extra.tar.gz \
+ ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-lang.tar.gz \
+ fetch_patches.sh fetch_runtime.sh)
+md5sums=('44c6b4914f38d6f9aa959640b89da329' '605cc7ae31bcc9d7864bb0bb6025f55d' \
+ '144aa049ba70621acf4247f0459f3ee7' '0fbebfbf8464b1e65fb6a9ca4bddefe1' \
+ '92e3dc8844d446c1ecd28e7257a47cb7')
+
+build()
+{
+ # pull in patches from vim.org (or the src cache alternatively)
+ . ${startdir}/src/fetch_patches.sh
+ . ${startdir}/src/fetch_runtime.sh
+ get_patches || return 1
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ # set the virc different from vimrc
+ sed -i 's|^.*\(#define SYS_VIMRC_FILE.*"\) .*$|\1|' src/feature.h
+ sed -i 's|^.*\(#define VIMRC_FILE.*"\) .*$|\1|' src/feature.h
+ sed -i 's|^.*\(#define USR_VIMRC_FILE\t"\).*$|\1$HOME/.virc"|' src/feature.h
+ sed -i 's|/etc/vimrc|/etc/virc|' src/feature.h
+ sed -i 's|\.vimrc|.virc|' src/feature.h
+ # build party
+ ./configure --prefix=/usr --localstatedir=/var/lib/vim --mandir=/usr/share/man \
+ --with-compiledby=ArchLinux --with-features=normal \
+ --with-global-runtime=/usr/share/vim --with-vim-name=vi \
+ --disable-gpm --disable-acl --with-x=no --disable-gui --enable-multibyte
+ make || return 1
+ make VIMRCLOC=/etc DESTDIR=${startdir}/pkg VIMRTDIR= install
+ cd ${startdir}/pkg/usr/bin
+ rm -f vim rvim view rview
+ ln -s vi evi
+
+ _runtimedir="${startdir}/pkg/usr/share/vim/"
+ update_runtime
+ # kill vim and x specific stuff
+ sed -i '/vms/,+4 d;/Convenient command/,+3 d;/mouse work/,+2 d'\
+ ${startdir}/pkg/usr/share/vim/vimrc_example.vim
+ install -Dm644 ${startdir}/pkg/usr/share/vim/vimrc_example.vim \
+ ${startdir}/pkg/etc/virc
+ rm -f ${startdir}/pkg/usr/share/vim/gvimrc_example.vim
+ install -dm755 ${startdir}/pkg/usr/share/licenses/vim
+ cd ${startdir}/pkg/usr/share/licenses/vim
+ ln -s ../../vim/doc/uganda.txt license.txt
+}
diff --git a/abs/core/vi/fetch_patches.sh b/abs/core/vi/fetch_patches.sh
new file mode 100644
index 0000000..1f38e42
--- /dev/null
+++ b/abs/core/vi/fetch_patches.sh
@@ -0,0 +1,63 @@
+# the external logic for pulling in patches
+
+get_patches() {
+ _patchdir=${startdir}/src/patches
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ if [ -d ${_patchdir} ]; then
+ rm -rf ${_patchdir}
+ echo -e "\tremove patches from old build"
+ fi
+ mkdir ${_patchdir} && cd ${_patchdir}
+ _rpath=ftp://ftp.vim.org/pub/vim/patches/${_srcver}
+
+ # change IFS to loop line-by-line
+ _OLDIFS=$IFS
+ IFS="
+"
+ echo -e "\tfetching checksumfile for patches"
+ wget ${_rpath}/MD5SUMS >/dev/null 2>&1
+
+ downloads=0
+ for _line in $(/bin/cat MD5SUMS); do
+ downloads=$((${downloads} + 1))
+ _md5=$(echo $_line | cut -d ' ' -f1)
+ _file=$(echo $_line | cut -d ' ' -f3)
+ if [ -f ${SRCDEST}/vim-${_srcver}/${_file} ]; then
+ echo -e "\thaving patch file:${_file}"
+ cp ${SRCDEST}/vim-${_srcver}/${_file} ./
+ else
+ echo -n -e "\t... fetching patch file: ${_file} ..."
+ wget ${_rpath}/${_file} >/dev/null 2>&1
+ if [ -w ${SRCDEST} ]; then
+ if [ ! -d ${SRCDEST}/vim-${_srcver} ]; then
+ mkdir -p ${SRCDEST}/vim-${_srcver}
+ fi
+ cp ${_file} ${SRCDEST}/vim-${_srcver}/
+ echo " done!"
+ fi
+ fi
+
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ echo ${_file} md5sums do not match
+ return 1
+ fi
+ done
+
+ ## TEMPFIX stupid fuckup upstream
+ mv ./7.1.126ne ./7.1.126
+ downloads=$((${downloads} - 1))
+ ########
+
+ if [ ${downloads} != ${_patchlevel} ]; then
+ echo -e "Number of patches does not match the patchlevel!\nEdit the PKGBUILD accordingly!"
+ return 1
+ fi
+ IFS=$_OLDIFS
+ rm MD5SUMS
+ cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")
+ for _patch in $(/bin/ls ${_patchdir}); do
+ patch -Np0 -i ${_patchdir}/${_patch} || return 1
+ done
+ rm -rf ${_patchdir}
+ return 0
+}
diff --git a/abs/core/vi/fetch_runtime.sh b/abs/core/vi/fetch_runtime.sh
new file mode 100644
index 0000000..f244ea5
--- /dev/null
+++ b/abs/core/vi/fetch_runtime.sh
@@ -0,0 +1,117 @@
+# the purpose of this magic is to pull in the latest runtime files for vim
+# we start withe theruntime provoded by the tarballs and compare MD5s against
+# the latest runtime
+# if this fails we look in the local source cache if they have been fetched
+# for an earlier build and compare those MD5 files
+# if this fails, we fetch the stuff from online and store it in the local src
+# cache.
+# The local cache has to be set (makepkg.conf) AND it has to be writable
+
+update_runtime() {
+ _OLDDIR=$(pwd) #get absolute path
+ _errors=0
+ _ftp="ftp://ftp.vim.org/pub/vim/runtime"
+
+ # we're gonna be sneaky and grok the A-A-P recipe for the files we need
+ _recipe="getunix.aap"
+ _srccache="${SRCDEST}/vim-${_srcver}/"
+
+ echo "getting runtime recipe"
+ cd ${startdir}/src
+ [ -f "${_recipe}" ] && rm "${_recipe}"
+ wget "${_ftp}/${_recipe}" >/dev/null 2>&1
+
+ cd "${_runtimedir}"
+ _runtimedir=$(pwd) #get absolute path
+
+ # change IFS to loop line-by-line
+ _OLDIFS=$IFS
+ IFS="
+"
+ echo "begin fetching updated runtime files..."
+ for _file in $(grep "file = " "${startdir}/src/${_recipe}"); do
+ _file=$(echo ${_file} | sed "s|.*file = \(.*\)|\1|")
+ _md5=$(grep -A2 "file = ${_file} *$" "${startdir}/src/${_recipe}" | \
+ grep "get_md5" | \
+ sed 's|@if get_md5(file) != "\(.*\)":|\1|g')
+ _dir=$(dirname "${_file}")
+
+ mkdir -p "${_dir}"
+
+ echo -e "\t${_file}"
+ _havefile=0
+ # if we have the file and the MD5sum fails, we technically don't have the file
+ if [ -f ${_file} ]; then
+ # MD5 fails ? ... we don't have the file
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ rm ${_file}
+ else
+ _havefile=1
+ fi
+ fi
+ # look files that were not copied from the unzipped sources
+ _cachefile=${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")/runtime/${_file}
+ if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then
+ # MD5 fails ? ... we lookup if we downloaded another version earlier
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ _cachefile=${_srccache}/${_file}
+ if [ -f ${_cachefile} ]; then
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ rm ${_cachefile}
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ # look up the local $SRCDEST
+ _cachefile=${_srccache}/${_file}
+ if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then
+ # MD5 fails ? ... we don't have the file
+ if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then
+ rm ${_cachefile}
+ else
+ cp ${_cachefile} ${_dir}
+ _havefile=1
+ fi
+ fi
+ # so we finally have to fetch it and store it to $SRCDEST (cache)
+ if [ ${_havefile} -ne 1 ]; then
+ echo -n -e "\t ... fetching file ${_file} ..."
+ cd "${_dir}"
+ wget "${_ftp}/${_file}" >/dev/null 2>&1
+ cd "${_runtimedir}"
+ # store freshly downloaded file in SRCDEST
+ mkdir -p ${_srccache}/${_dir}
+ cp ${_file} ${_srccache}/${_dir}
+ echo -e " done!"
+ fi
+
+ # check the MD5 sum finally
+ if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then
+ echo "!!!! md5sum check for ${_file} failed !!!!"
+ errors=$((${_errors} + 1))
+ fi
+ done
+ IFS=${_OLDIFS}
+
+ echo "vim runtime got updated"
+
+ if [ ${_errors} -gt 0 ]; then
+ echo "${_errors} failed MD5 checks while updating runtime files -> build can't be completed"
+ return 1
+ else
+ echo -e "\tpatching filetype.vim for better handling of pacman related files ..."
+ sed -i "s/rpmsave/pacsave/;s/rpmnew/pacnew/;s/,\*\.ebuild/\0,PKGBUILD*,*.install/" filetype.vim
+ sed -i "/find the end/,+3{s/changelog_date_entry_search/changelog_date_end_entry_search/}" ftplugin/changelog.vim
+ fi
+ # make Aaron happy
+ wget http://www.vim.org/scripts/download_script.php\?src_id=7766 \
+ -O autoload/pythoncomplete.vim
+ cd "${_OLDDIR}"
+ return 0
+}
diff --git a/abs/core/vi/vi.install b/abs/core/vi/vi.install
new file mode 100644
index 0000000..ebb73c0
--- /dev/null
+++ b/abs/core/vi/vi.install
@@ -0,0 +1,37 @@
+post_install() {
+ # if we have vim installed create view/rview symlinks to vim
+ if [ ! -f usr/bin/vim ] ; then
+ cd usr/bin
+ ln -s vi view
+ ln -s vi rview
+ cd ${OLDPWD}
+ echo "Create vi related symlinks..."
+ fi
+ echo -n "Updating vi help tags..."
+ usr/bin/vi --noplugins -u NONE -U NONE \
+ --cmd ":helptags usr/share/vim/doc" --cmd ":q" > /dev/null 2>&1
+ echo "done."
+}
+
+pre_remove() {
+ # if vi is a binary instead of a symlink we have an intact gvim installation
+ # with a different binary/symlink structure
+ # we recover what pacmans database knows about Vim
+ if [ ! -f usr/bin/vim ] ; then
+ rm -f usr/bin/view usr/bin/rview
+ echo "Remove vi related symlinks ..."
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_upgrade() {
+ pre_remove $2
+}
+
+
+op=$1
+shift
+[ "$(type -t "$op")" = "function" ] && $op "$@"
diff --git a/abs/core/videoproto/PKGBUILD b/abs/core/videoproto/PKGBUILD
new file mode 100644
index 0000000..711149d
--- /dev/null
+++ b/abs/core/videoproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=videoproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Video extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('44292d74a9a3c94b1ecb9d77a0da83e8')
+sha1sums=('904eb59ae2451dea52370d927bf490b696f9033c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/wget/PKGBUILD b/abs/core/wget/PKGBUILD
new file mode 100644
index 0000000..5a9e0cb
--- /dev/null
+++ b/abs/core/wget/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4756 2008-07-09 20:00:54Z andyrtr $
+# Maintainer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=wget
+pkgver=1.11.4
+pkgrel=10
+pkgdesc="A network utility to retrieve files from the Web"
+arch=(i686 x86_64)
+url="http://www.gnu.org/software/wget/wget.html"
+license=('GPL3')
+groups=('base')
+depends=('glibc' 'openssl')
+backup=('etc/wgetrc')
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('69e8a7296c0e12c53bd9ffd786462e87')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${pkgdir} install
+}
diff --git a/abs/core/which/PKGBUILD b/abs/core/which/PKGBUILD
new file mode 100644
index 0000000..3bd0175
--- /dev/null
+++ b/abs/core/which/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: judd <jvinet@zeroflux.org>
+pkgname=which
+pkgver=2.19
+pkgrel=11
+pkgdesc="A utility to show the full path of commands"
+arch=(i686 x86_64)
+url="http://www.xs4all.nl/~carlo17/which"
+license=('GPL3')
+groups=('base')
+depends=('glibc')
+source=(http://www.xs4all.nl/~carlo17/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('bbd094cec2444cd78befbc0cf09deea4')
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=$startdir/pkg install
+}
diff --git a/abs/core/wlan-ng26-utils/PKGBUILD b/abs/core/wlan-ng26-utils/PKGBUILD
new file mode 100644
index 0000000..e842c99
--- /dev/null
+++ b/abs/core/wlan-ng26-utils/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 7972 2008-08-05 11:03:19Z tpowa $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=wlan-ng26-utils
+pkgver=0.2.9
+pkgrel=1
+pkgdesc="Wireless Lan userspace tools."
+depends=('glibc' 'bash')
+makedepends=('kernel26')
+source=(ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-$pkgver.tar.bz2 \
+ wlan-ng.patch wlan kernel-2.6.26.patch)
+url="ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/"
+backup=(etc/wlan/wlan.conf)
+arch=('i686' 'x86_64')
+license=('MPL')
+
+build() {
+ cd $startdir/src/linux-wlan-ng-$pkgver
+ patch -Np0 -i ../kernel-2.6.26.patch || return 1
+ sed -i "s#TARGET_ROOT_ON_HOST=#TARGET_ROOT_ON_HOST=$startdir/pkg#;s#PRISM2_PLX=y#PRISM2_PLX=n#;s#PRISM2_PCI=y#PRISM2_PCI=n#" config.in
+ patch -p1 < ../wlan-ng.patch
+ make auto_config
+ make all || return 1
+ make install
+ mkdir -p $startdir/pkg/etc/rc.d
+ rm -r $startdir/pkg/{init.d,lib,etc/pcmcia}
+ install -m 755 $startdir/src/wlan $startdir/pkg/etc/rc.d/wlan
+}
+md5sums=('96130b36f9674521b08fb3e2a6ac0382'
+ '706464f9e6e127558aed25b9f454f905'
+ '1056365bdbe7102b1a668c84926ecb17'
+ '6ed5a5fefc2c149e0e0a98de211ba147')
diff --git a/abs/core/wlan-ng26-utils/kernel-2.6.22-r1832.patch b/abs/core/wlan-ng26-utils/kernel-2.6.22-r1832.patch
new file mode 100644
index 0000000..f1aa310
--- /dev/null
+++ b/abs/core/wlan-ng26-utils/kernel-2.6.22-r1832.patch
@@ -0,0 +1,120 @@
+diff -uNr linux-wlan-ng-0.2.8/CHANGES linux-wlan-ng-svn-1832/CHANGES
+--- linux-wlan-ng-0.2.8/CHANGES 2007-05-04 13:29:27.000000000 +0100
++++ linux-wlan-ng-svn-1832/CHANGES 2007-06-27 11:28:14.000000000 +0100
+@@ -41,6 +41,8 @@
+ * Intersil Corporation as part of PRISM(R) chipset product development.
+ *
+ * --------------------------------------------------------------------
++ - Tweaks to support Fedora 7 (Dan Williams)
++ - Support 2.6.22 kernels
+ 0.2.8
+ - Fix up a pile of sparse warnings (Pavel Roskin)
+ - Support 2.6.20 kernels (Pavel Roskin)
+diff -uNr linux-wlan-ng-0.2.8/Configure linux-wlan-ng-svn-1832/Configure
+--- linux-wlan-ng-0.2.8/Configure 2007-05-07 23:00:22.000000000 +0100
++++ linux-wlan-ng-svn-1832/Configure 2007-06-27 11:28:14.000000000 +0100
+@@ -277,9 +277,9 @@
+ fi
+ write_bool KERN_2_6_17
+
+-if [ $VERSION_CODE -gt `version 2 6 21` ] ; then
++if [ $VERSION_CODE -gt `version 2 6 22` ] ; then
+ $ECHO "******* WARNING WARNING WARNING *******"
+- $ECHO "Kernels newer than 2.6.21.x are not supported."
++ $ECHO "Kernels newer than 2.6.22.x are not supported."
+ $ECHO "******* WARNING WARNING WARNING *******"
+ fi
+
+diff -uNr linux-wlan-ng-0.2.8/config.in linux-wlan-ng-svn-1832/config.in
+--- linux-wlan-ng-0.2.8/config.in 2007-02-09 21:51:58.000000000 +0000
++++ linux-wlan-ng-svn-1832/config.in 2007-06-27 11:28:14.000000000 +0100
+@@ -1,6 +1,6 @@
+ WLAN_VERSION=0
+ WLAN_PATCHLEVEL=2
+-WLAN_SUBLEVEL=8
++WLAN_SUBLEVEL=9
+ WLAN_EXTRAVERSION=
+ #LINUX_SRC=/usr/src/linux
+ PCMCIA_SRC=
+diff -uNr linux-wlan-ng-0.2.8/etc/udev/rules.d/40-prism2.rules linux-wlan-ng-svn-1832/etc/udev/rules.d/40-prism2.rules
+--- linux-wlan-ng-0.2.8/etc/udev/rules.d/40-prism2.rules 2006-06-26 16:03:27.000000000 +0100
++++ linux-wlan-ng-svn-1832/etc/udev/rules.d/40-prism2.rules 2007-06-27 11:28:14.000000000 +0100
+@@ -1 +1,2 @@
+-ACTION=="add",BUS=="usb",DRIVER=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
++#ACTION=="add",BUS=="usb",DRIVER=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
++KERNEL="wlan*",ACTION=="add",DRIVERS=="prism2_usb" ,RUN+="/etc/wlan/wlan-udev.sh %k"
+diff -uNr linux-wlan-ng-0.2.8/src/include/wlan/wlan_compat.h linux-wlan-ng-svn-1832/src/include/wlan/wlan_compat.h
+--- linux-wlan-ng-0.2.8/src/include/wlan/wlan_compat.h 2007-02-28 15:44:02.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/include/wlan/wlan_compat.h 2007-06-27 11:28:14.000000000 +0100
+@@ -479,6 +479,13 @@
+ #endif
+ #endif /* _LINUX_PROC_FS_H */
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
++#define skb_reset_mac_header(__a) (__a)->mac.raw = (__a)->data
++#define SKB_MAC_HEADER(__a) (__a)->mac.raw
++#else
++#define SKB_MAC_HEADER(__a) (__a)->mac_header
++#endif
++
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+ #ifndef INIT_TQUEUE
+ #define PREPARE_TQUEUE(_tq, _routine, _data) \
+diff -uNr linux-wlan-ng-0.2.8/src/p80211/p80211conv.c linux-wlan-ng-svn-1832/src/p80211/p80211conv.c
+--- linux-wlan-ng-0.2.8/src/p80211/p80211conv.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/p80211/p80211conv.c 2007-06-27 11:28:14.000000000 +0100
+@@ -498,7 +498,7 @@
+ }
+
+ skb->protocol = eth_type_trans(skb, netdev);
+- skb->mac.raw = (unsigned char *) e_hdr; /* new MAC header */
++ SKB_MAC_HEADER(skb) = (unsigned char *) e_hdr; /* new MAC header */
+
+ /* jkriegl: process signal and noise as set in hfa384x_int_rx() */
+ /* jkriegl: only process signal/noise if requested by iwspy */
+diff -uNr linux-wlan-ng-0.2.8/src/p80211/p80211netdev.c linux-wlan-ng-svn-1832/src/p80211/p80211netdev.c
+--- linux-wlan-ng-0.2.8/src/p80211/p80211netdev.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/p80211/p80211netdev.c 2007-06-27 11:28:14.000000000 +0100
+@@ -389,7 +389,8 @@
+
+ /* set up various data fields */
+ skb->dev = dev;
+- skb->mac.raw = skb->data ;
++ skb_reset_mac_header(skb);
++
+ skb->ip_summed = CHECKSUM_NONE;
+ skb->pkt_type = PACKET_OTHERHOST;
+ skb->protocol = htons(ETH_P_80211_RAW);
+@@ -929,7 +930,7 @@
+ dev->open = p80211knetdev_open;
+ dev->stop = p80211knetdev_stop;
+
+-#ifdef CONFIG_NET_WIRELESS
++#if defined(CONFIG_NET_WIRELESS) || defined(WIRELESS_EXT)
+ #if ((WIRELESS_EXT < 17) && (WIRELESS_EXT < 21))
+ dev->get_wireless_stats = p80211wext_get_wireless_stats;
+ #endif
+diff -uNr linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x.c linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x.c
+--- linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x.c 2007-06-27 11:28:14.000000000 +0100
+@@ -3645,7 +3645,7 @@
+ /* the prism2 cards don't return the FCS */
+ datap = skb_put(skb, WLAN_CRC_LEN);
+ memset (datap, 0xff, WLAN_CRC_LEN);
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+
+ /* Attach the rxmeta, set some stuff */
+ p80211skb_rxmeta_attach(wlandev, skb);
+diff -uNr linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x_usb.c linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x_usb.c
+--- linux-wlan-ng-0.2.8/src/prism2/driver/hfa384x_usb.c 2007-03-19 15:37:00.000000000 +0000
++++ linux-wlan-ng-svn-1832/src/prism2/driver/hfa384x_usb.c 2007-06-27 11:28:14.000000000 +0100
+@@ -4255,7 +4255,7 @@
+ /* The prism2 series does not return the CRC */
+ memset(skb_put(skb, WLAN_CRC_LEN), 0xff, WLAN_CRC_LEN);
+
+- skb->mac.raw = skb->data;
++ skb_reset_mac_header(skb);
+
+ /* Attach the rxmeta, set some stuff */
+ p80211skb_rxmeta_attach(wlandev, skb);
diff --git a/abs/core/wlan-ng26-utils/kernel-2.6.26.patch b/abs/core/wlan-ng26-utils/kernel-2.6.26.patch
new file mode 100644
index 0000000..ec306f0
--- /dev/null
+++ b/abs/core/wlan-ng26-utils/kernel-2.6.26.patch
@@ -0,0 +1,14 @@
+Index: src/p80211/p80211netdev.c
+===================================================================
+--- src/p80211/p80211netdev.c (revision 1865)
++++ src/p80211/p80211netdev.c (working copy)
+@@ -947,7 +947,9 @@
+ #endif
+ #endif
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) )
++ dev_net_set(dev, &init_net);
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
+ dev->nd_net = &init_net;
+ #endif \ No newline at end of file
diff --git a/abs/core/wlan-ng26-utils/wlan b/abs/core/wlan-ng26-utils/wlan
new file mode 100644
index 0000000..6b3252d
--- /dev/null
+++ b/abs/core/wlan-ng26-utils/wlan
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+if [ ! -f /etc/wlan/shared ] ; then
+ echo "/etc/wlan/shared not present"
+ exit 0
+fi
+
+. /etc/wlan/shared
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ # This will implicitly fire off wland via hotplug.
+ stat_busy "Starting WLAN Devices"
+ if ! $MODPROBE p80211; then
+ echo "Failed to load p80211.o."
+ exit 1
+ fi
+
+ # NOTE: We don't explicitly insmod the card driver here. The
+ # best thing to do is to specify an alias in /etc/modules.conf.
+
+ for DEVICE in $WLAN_DEVICES; do
+ $MODPROBE $DEVICE
+ # if we don't have hotplug.. do things the old-fashioned way.
+ if [ $HAS_HOTPLUG = 'n' ] ; then
+ wlan_bring_it_up $DEVICE
+ fi
+ done
+
+ # And hotplug will take care of the rest, namely device
+ # initialization and whatnot.
+
+ add_daemon wlan
+ stat_done
+
+ ;;
+
+ stop)
+ stat_busy "Shutting Down WLAN Devices"
+ # Do a reset on each device to make sure none of them are still
+ # trying to generate interrupts.
+ for DEVICE in $WLAN_DEVICES; do
+ wlan_disable $DEVICE
+ ifconfig $DEVICE down
+ $MODPROBE -r $DEVICE
+ done
+
+ # remove p80211, which will implictly kill wland.
+ $MODPROBE -r p80211
+
+ rm_daemon wlan
+ stat_done
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ EXITCODE=$?
+ ;;
+
+ *)
+ echo "usage: $0 {start|stop|restart}"
+ ;;
+
+esac
+exit 0
diff --git a/abs/core/wlan-ng26-utils/wlan-ng.patch b/abs/core/wlan-ng26-utils/wlan-ng.patch
new file mode 100644
index 0000000..9449975
--- /dev/null
+++ b/abs/core/wlan-ng26-utils/wlan-ng.patch
@@ -0,0 +1,14 @@
+diff -ur linux-wlan-ng-0.2.1pre22/man/Makefile linux-wlan-ng-0.2.1pre22-new/man/Makefile
+--- linux-wlan-ng-0.2.1pre22/man/Makefile 2004-08-04 14:09:27.000000000 -0700
++++ linux-wlan-ng-0.2.1pre22-new/man/Makefile 2004-10-18 12:23:19.000000000 -0700
+@@ -48,8 +48,8 @@
+ @echo "Nothing to do..."
+
+ install:
+- mkdir -p $(TARGET_ROOT_ON_HOST)/usr/local/man/man1
+- cp *.1 $(TARGET_ROOT_ON_HOST)/usr/local/man/man1
++ mkdir -p $(TARGET_ROOT_ON_HOST)/usr/share/man/man1
++ cp *.1 $(TARGET_ROOT_ON_HOST)/usr/share/man/man1
+
+ clean:
+ rm -f core core.* *.o .*.o *.s *.a .depend tmp_make *~ tags
diff --git a/abs/core/wlan-ng26/PKGBUILD b/abs/core/wlan-ng26/PKGBUILD
new file mode 100644
index 0000000..c592386
--- /dev/null
+++ b/abs/core/wlan-ng26/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 7952 2008-08-05 10:33:48Z tpowa $
+# Maintainer: Tom Killian <tom@archlinux.org>
+
+pkgname=wlan-ng26
+pkgver=0.2.9
+pkgrel=1
+_kernver=2.6.26-ARCH
+pkgdesc="Wireless Lan usb modules. For kernel26."
+arch=(i686 x86_64)
+license=('MPL')
+depends=('kernel26>=2.6.26-1' 'kernel26<2.6.27' 'wlan-ng26-utils')
+source=(ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-$pkgver.tar.bz2
+ kernel-2.6.26.patch)
+url="ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/"
+install=wlan-ng26.install
+options=(!makeflags)
+
+build() {
+ cd $startdir/src/linux-wlan-ng-$pkgver
+ patch -Np0 -i ../kernel-2.6.26.patch || return 1
+ # only built usb modules the rest is covered by hostap and orinoco driver, according to gentoo changelog
+ sed -i "s#PRISM2_PCMCIA=y#PRISM2_PCMCIA=n#;s#TARGET_ROOT_ON_HOST=#TARGET_ROOT_ON_HOST=$startdir/pkg#;s#PRISM2_PLX=y#PRISM2_PLX=n#;s#PRISM2_PCI=y#PRISM2_PCI=n#;s#PRISM2_USB=n#PRISM2_USB=y#;s%#LINUX_SRC=/usr/src/linux%LINUX_SRC=/lib/modules/${_kernver}/build%" config.in
+ make auto_config
+ make all || return 1
+ make install
+ sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" $startdir/wlan-ng26.install
+ rm -r $startdir/pkg/{etc,sbin,usr,init.d}
+ # fix module path
+ mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless
+ mv $startdir/pkg/lib/modules/${_kernver}/linux-wlan-ng \
+ $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/net/wireless
+}
+
+md5sums=('96130b36f9674521b08fb3e2a6ac0382'
+ '6ed5a5fefc2c149e0e0a98de211ba147')
diff --git a/abs/core/wlan-ng26/kernel-2.6.26.patch b/abs/core/wlan-ng26/kernel-2.6.26.patch
new file mode 100644
index 0000000..ec306f0
--- /dev/null
+++ b/abs/core/wlan-ng26/kernel-2.6.26.patch
@@ -0,0 +1,14 @@
+Index: src/p80211/p80211netdev.c
+===================================================================
+--- src/p80211/p80211netdev.c (revision 1865)
++++ src/p80211/p80211netdev.c (working copy)
+@@ -947,7 +947,9 @@
+ #endif
+ #endif
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) )
++ dev_net_set(dev, &init_net);
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) )
+ dev->nd_net = &init_net;
+ #endif \ No newline at end of file
diff --git a/abs/core/wlan-ng26/wlan-ng26.install b/abs/core/wlan-ng26/wlan-ng26.install
new file mode 100644
index 0000000..fe7abaa
--- /dev/null
+++ b/abs/core/wlan-ng26/wlan-ng26.install
@@ -0,0 +1,30 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ # updating module dependencies
+ echo ">>> Updating module dependencies. Please wait ..."
+ KERNEL_VERSION=2.6.26-ARCH
+ depmod -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/wpa_supplicant/PKGBUILD b/abs/core/wpa_supplicant/PKGBUILD
new file mode 100644
index 0000000..2f022ce
--- /dev/null
+++ b/abs/core/wpa_supplicant/PKGBUILD
@@ -0,0 +1,36 @@
+# Contributor: iztok pizorn <pizorn@gmail.com>
+# Contributor: William Rea <sillywilly@gmail.com>
+pkgname=wpa_supplicant
+pkgver=0.5.10
+_madwifi_ver=0.9.4
+pkgrel=10
+pkgdesc="A utility providing key negotiation for WPA wireless networks"
+arch=('i686' 'x86_64')
+makedepends=('kernel26>=2.6.24' 'kernel26<=2.6.26.3')
+depends=('openssl')
+license=('GPL')
+groups=('base')
+backup=('etc/wpa_supplicant.conf')
+url="http://hostap.epitest.fi/wpa_supplicant"
+source=(http://hostap.epitest.fi/releases/wpa_supplicant-$pkgver.tar.gz
+ config
+ http://downloads.sourceforge.net/sourceforge/madwifi/madwifi-${_madwifi_ver}.tar.gz)
+install='wpa_supplicant.install'
+md5sums=('9e7b99da67c47d81121368c6d580d069'
+ '87a7bb38e0b4820b29065a9b3e8f4e06'
+ '399d20de8d855a59f20058857c2178ad')
+
+build() {
+ cd ${startdir}/src/
+ mv madwifi-${_madwifi_ver} madwifi
+ cd $startdir/src/$pkgname-$pkgver
+ cp ../config ./.config
+ sed -i 's@/usr/local@$(PREFIX)@g' Makefile
+ sed -i 's@dynamic_eap_methods@@g' Makefile
+ make || return 1
+ make PREFIX=/usr DESTDIR=$startdir/pkg install || return 1
+ install -D -m644 wpa_supplicant.conf $startdir/pkg/etc/wpa_supplicant.conf || return 1
+ install -d -m755 $startdir/pkg/usr/man/man{5,8} || return 1
+ install -m644 doc/docbook/wpa_supplicant.conf.5 $startdir/pkg/usr/man/man5 || return 1
+ install -m644 doc/docbook/{wpa_background,wpa_cli,wpa_passphrase,wpa_supplicant}.8 $startdir/pkg/usr/man/man8 || return 1
+}
diff --git a/abs/core/wpa_supplicant/config b/abs/core/wpa_supplicant/config
new file mode 100644
index 0000000..8841fe3
--- /dev/null
+++ b/abs/core/wpa_supplicant/config
@@ -0,0 +1,308 @@
+# Example wpa_supplicant build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cases, these lines should use += in order not
+# to override previous values of the variables.
+
+
+# Uncomment following two lines and fix the paths if you have installed OpenSSL
+# or GnuTLS in non-default location
+#CFLAGS += -I/usr/local/openssl/include
+#LIBS += -L/usr/local/openssl/lib
+
+# Some Red Hat versions seem to include kerberos header files from OpenSSL, but
+# the kerberos files are not in the default include path. Following line can be
+# used to fix build issues on such systems (krb5.h not found).
+#CFLAGS += -I/usr/include/kerberos
+
+# Example configuration for various cross-compilation platforms
+
+#### sveasoft (e.g., for Linksys WRT54G) ######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
+#LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
+###############################################################################
+
+#### openwrt (e.g., for Linksys WRT54G) #######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS=-I../src/include -I../openssl-0.9.7d/include \
+# -I../WRT54GS/release/src/include
+#LIBS = -lssl
+###############################################################################
+
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for Agere driver
+#CONFIG_DRIVER_HERMES=y
+# Change include directories to match with the local setup
+#CFLAGS += -I../../hcf -I../../include -I../../include/hcf
+#CFLAGS += -I../../include/wireless
+
+# Driver interface for madwifi driver
+CONFIG_DRIVER_MADWIFI=y
+# Change include directories to match with the local setup
+CFLAGS += -I../madwifi
+
+# Driver interface for Prism54 driver
+# (Note: Prism54 is not yet supported, i.e., this will not work as-is and is
+# for developers only)
+CONFIG_DRIVER_PRISM54=y
+
+# Driver interface for ndiswrapper
+CONFIG_DRIVER_NDISWRAPPER=y
+
+# Driver interface for Atmel driver
+CONFIG_DRIVER_ATMEL=y
+
+# Driver interface for Broadcom driver
+#CONFIG_DRIVER_BROADCOM=y
+# Example path for wlioctl.h; change to match your configuration
+#CFLAGS += -I/opt/WRT54GS/release/src/include
+
+# Driver interface for Intel ipw2100/2200 driver
+CONFIG_DRIVER_IPW=y
+
+# Driver interface for generic Linux wireless extensions
+CONFIG_DRIVER_WEXT=y
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+
+# Driver interface for Windows NDIS
+#CONFIG_DRIVER_NDIS=y
+#CFLAGS += -I/usr/include/w32api/ddk
+#LIBS += -L/usr/local/lib
+# For native build using mingw
+#CONFIG_NATIVE_WINDOWS=y
+# Additional directories for cross-compilation on Linux host for mingw target
+#CFLAGS += -I/opt/mingw/mingw32/include/ddk
+#LIBS += -L/opt/mingw/mingw32/lib
+#CC=mingw32-gcc
+# By default, driver_ndis uses WinPcap for low-level operations. This can be
+# replaced with the following option which replaces WinPcap calls with NDISUIO.
+# However, this requires that WZC is disabled (net stop wzcsvc) before starting
+# wpa_supplicant.
+# CONFIG_USE_NDISUIO=y
+
+# Driver interface for development testing
+#CONFIG_DRIVER_TEST=y
+
+# Driver interface for wired Ethernet drivers
+CONFIG_DRIVER_WIRED=y
+
+# Enable IEEE 802.1X Supplicant (automatically included if any EAP method is
+# included)
+CONFIG_IEEE8021X_EAPOL=y
+
+# EAP-MD5
+CONFIG_EAP_MD5=y
+
+# EAP-MSCHAPv2
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-TLS
+CONFIG_EAP_TLS=y
+
+# EAL-PEAP
+CONFIG_EAP_PEAP=y
+
+# EAP-TTLS
+CONFIG_EAP_TTLS=y
+
+# EAP-GTC
+CONFIG_EAP_GTC=y
+
+# EAP-OTP
+CONFIG_EAP_OTP=y
+
+# EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)
+#CONFIG_EAP_SIM=y
+
+# EAP-PSK (experimental; this is _not_ needed for WPA-PSK)
+#CONFIG_EAP_PSK=y
+
+# EAP-PAX
+#CONFIG_EAP_PAX=y
+
+# LEAP
+CONFIG_EAP_LEAP=y
+
+# EAP-AKA (enable CONFIG_PCSC, if EAP-AKA is used)
+#CONFIG_EAP_AKA=y
+
+# EAP-SAKE
+#CONFIG_EAP_SAKE=y
+
+# EAP-GPSK
+#CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+#CONFIG_EAP_GPSK_SHA256=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# Smartcard support (i.e., private key on a smartcard), e.g., with openssl
+# engine.
+CONFIG_SMARTCARD=y
+
+# PC/SC interface for smartcards (USIM, GSM SIM)
+# Enable this if EAP-SIM or EAP-AKA is included
+#CONFIG_PCSC=y
+
+# Development testing
+#CONFIG_EAPOL_TEST=y
+
+# Replace native Linux implementation of packet sockets with libdnet/libpcap.
+# This will be automatically set for non-Linux OS.
+#CONFIG_DNET_PCAP=y
+
+# Select control interface backend for external programs, e.g, wpa_cli:
+# unix = UNIX domain sockets (default for Linux/*BSD)
+# udp = UDP sockets (default for Windows)
+# y = use default (backwards compatibility)
+# If this option is commented out, control interface is not included in the
+# build.
+CONFIG_CTRL_IFACE=y
+
+# Include support for GNU Readline and History Libraries in wpa_cli.
+# When building a wpa_cli binary for distribution, please note that these
+# libraries are licensed under GPL and as such, BSD license may not apply for
+# the resulting binary.
+#CONFIG_READLINE=y
+
+# Remove debugging code that is printing out debug message to stdout.
+# This can be used to reduce the size of the wpa_supplicant considerably
+# if debugging code is not needed. The size reduction can be around 35%
+# (e.g., 90 kB).
+#CONFIG_NO_STDOUT_DEBUG=y
+
+# Remove WPA support, e.g., for wired-only IEEE 802.1X supplicant, to save
+# 35-50 kB in code size.
+#CONFIG_NO_WPA=y
+
+# Remove WPA2 support. This allows WPA to be used, but removes WPA2 code to
+# save about 1 kB in code size when building only WPA-Personal (no EAP support)
+# or 6 kB if building for WPA-Enterprise.
+#CONFIG_NO_WPA2=y
+
+# Remove AES extra functions. This can be used to reduce code size by about
+# 1.5 kB by removing extra AES modes that are not needed for commonly used
+# client configurations (they are needed for some EAP types).
+#CONFIG_NO_AES_EXTRAS=y
+
+# Select configuration backend:
+# file = text file (e.g., wpa_supplicant.conf)
+# winreg = Windows registry (see win_example.reg for an example)
+CONFIG_BACKEND=file
+
+# Select program entry point implementation:
+# main = UNIX/POSIX like main() function (default)
+# main_winsvc = Windows service (read parameters from registry)
+# main_none = Very basic example (development use only)
+#CONFIG_MAIN=main
+
+# Select wrapper for operatins system and C library specific functions
+# unix = UNIX/POSIX like systems (default)
+# win32 = Windows systems
+# none = Empty template
+#CONFIG_OS=unix
+
+# Select event loop implementation
+# eloop = select() loop (default)
+# eloop_win = Windows events and WaitForMultipleObject() loop
+# eloop_none = Empty template
+#CONFIG_ELOOP=eloop
+
+# Select layer 2 packet implementation
+# linux = Linux packet socket (default)
+# pcap = libpcap/libdnet/WinPcap
+# freebsd = FreeBSD libpcap
+# winpcap = WinPcap with receive thread
+# ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)
+# none = Empty template
+#CONFIG_L2_PACKET=linux
+
+# IEEE 802.11i/IEEE 802.11e STAKey negotiation for direct link connection
+#CONFIG_STAKEY=y
+
+# Proposed replacement for STAKey negotiation: PeerKey handshake for
+# Station to Station Link
+CONFIG_PEERKEY=y
+
+# Select TLS implementation
+# openssl = OpenSSL (default)
+# gnutls = GnuTLS (needed for TLS/IA, see also CONFIG_GNUTLS_EXTRA)
+# internal = Internal TLSv1 implementation (experimental)
+# none = Empty template
+#CONFIG_TLS=openssl
+
+# Whether to enable TLS/IA support, which is required for EAP-TTLSv1.
+# You need CONFIG_TLS=gnutls for this to have any effect. Please note that
+# even though the core GnuTLS library is released under LGPL, this extra
+# library uses GPL and as such, the terms of GPL apply to the combination
+# of wpa_supplicant and GnuTLS if this option is enabled. BSD license may not
+# apply for distribution of the resulting binary.
+#CONFIG_GNUTLS_EXTRA=y
+
+# If CONFIG_TLS=internal is used, additional library and include paths are
+# needed for LibTomCrypt and TomsFastMath.
+#LTC_PATH=/usr/src/libtomcrypt-1.11
+#TFM_PATH=/usr/src/tomsfastmath-0.09
+#CFLAGS += -I$(LTC_PATH)/src/headers
+#LIBS += -L$(LTC_PATH) -L$(TFM_PATH)
+#LIBS_p += -L$(LTC_PATH) -L$(TFM_PATH)
+
+# Integrate ndis_events.exe functionality into wpa_supplicant.
+# This is only for Windows builds and requires WMI-related header files and
+# WbemUuid.Lib from Platform SDK even when building with MinGW.
+#CONFIG_NDIS_EVENTS_INTEGRATED=y
+#PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib"
+
+# Add support for DBus control interface
+#CONFIG_CTRL_IFACE_DBUS=y
+
+# Add support for loading EAP methods dynamically as shared libraries.
+# When this option is enabled, each EAP method can be either included
+# statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn).
+# Dynamic EAP methods are build as shared objects (eap_*.so) and they need to
+# be loaded in the beginning of the wpa_supplicant configuration file
+# (see load_dynamic_eap parameter in the example file) before being used in
+# the network blocks.
+#
+# Note that some shared parts of EAP methods are included in the main program
+# and in order to be able to use dynamic EAP methods using these parts, the
+# main program must have been build with the EAP method enabled (=y or =dyn).
+# This means that EAP-TLS/PEAP/TTLS/FAST cannot be added as dynamic libraries
+# unless at least one of them was included in the main build to force inclusion
+# of the shared code. Similarly, at least one of EAP-SIM/AKA must be included
+# in the main build to be able to load these methods dynamically.
+#
+# Please also note that using dynamic libraries will increase the total binary
+# size. Thus, it may not be the best option for targets that have limited
+# amount of memory/flash.
+CONFIG_DYNAMIC_EAP_METHODS=y
+
+# Include client MLME (management frame processing).
+# This can be used to move MLME processing of Devicescape IEEE 802.11 stack
+# into user space.
+#CONFIG_CLIENT_MLME=y
+# Currently, driver_devicescape.c build requires some additional parameters
+# to be able to include some of the kernel header files. Following lines can
+# be used to set these (WIRELESS_DEV must point to the root directory of the
+# wireless-dev.git tree).
+WIRELESS_DEV=/lib/modules/2.6.24-ARCH/build
+CFLAGS += -I$(WIRELESS_DEV)/net/mac80211
diff --git a/abs/core/wpa_supplicant/wpa_supplicant.install b/abs/core/wpa_supplicant/wpa_supplicant.install
new file mode 100644
index 0000000..0c31765
--- /dev/null
+++ b/abs/core/wpa_supplicant/wpa_supplicant.install
@@ -0,0 +1,15 @@
+# arg 1: the new package version
+post_install() {
+ post_upgrade
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ echo "==> For wpa_gui please install 'wpa_supplicant_gui'"
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/x264/PKGBUILD b/abs/core/x264/PKGBUILD
new file mode 100644
index 0000000..fd30204
--- /dev/null
+++ b/abs/core/x264/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 3616 2008-06-26 02:00:55Z paul $
+# Contributor: damir <damir@archlinux.org>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=x264
+pkgver=20080625
+pkgrel=1
+pkgdesc="free library for encoding H264/AVC video streams"
+arch=(i686 x86_64)
+url="http://www.videolan.org/developers/x264.html"
+license=('GPL')
+depends=('libx11')
+makedepends=('yasm')
+source=(ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-$pkgver-2245.tar.bz2)
+md5sums=('6b4da463cf4c800b69fbf8518d6461e5')
+
+build() {
+ cd "$srcdir/$pkgname-snapshot-$pkgver-2245" || return 1
+
+ ./configure \
+ --enable-pthread \
+ --enable-visualize \
+ --enable-shared \
+ --enable-pic || return 1
+
+ make || return 1
+
+ make DESTDIR="$pkgdir" \
+ bindir=/usr/bin \
+ libdir=/usr/lib \
+ includedir=/usr/include \
+ install || return 1
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/xbitmaps/PKGBUILD b/abs/core/xbitmaps/PKGBUILD
new file mode 100644
index 0000000..dbf65d3
--- /dev/null
+++ b/abs/core/xbitmaps/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xbitmaps
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org Bitmap files"
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig')
+_xorg=X11R7.0
+_relname=xbitmaps
+arch=('i686' 'x86_64')
+source=(${url}/releases/${_xorg}/src/everything/${_relname}-${_xorg}-${pkgver}.tar.bz2)
+md5sums=('22c6f4a17220cd6b41d9799905f8e357')
+
+build() {
+ cd ${startdir}/src/${_relname}-${_xorg}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/xcb-proto/PKGBUILD b/abs/core/xcb-proto/PKGBUILD
new file mode 100644
index 0000000..b17aa2d
--- /dev/null
+++ b/abs/core/xcb-proto/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xcb-proto
+pkgver=1.1
+pkgrel=1
+pkgdesc="XML-XCB protocol descriptions"
+arch=(i686 x86_64)
+url="http://xcb.freedesktop.org/"
+license=('custom')
+source=(${url}/dist/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('dd34acc58c0a438e812f72a9afe7b2a0')
diff --git a/abs/core/xcursor-themes/PKGBUILD b/abs/core/xcursor-themes/PKGBUILD
new file mode 100644
index 0000000..6bc9ddc
--- /dev/null
+++ b/abs/core/xcursor-themes/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xcursor-themes
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org Cursor themes"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig' 'xorg-apps')
+source=(${url}/releases/individual/data/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('014bad415e64c49994679cdb71a97e37')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/xextproto/PKGBUILD b/abs/core/xextproto/PKGBUILD
new file mode 100644
index 0000000..3ec2c1b
--- /dev/null
+++ b/abs/core/xextproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3231 2008-06-21 15:50:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xextproto
+pkgver=7.0.3
+pkgrel=1
+pkgdesc="X11 various extension wire protocol"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3a2e0252e853ab30b3bff05ac92ec61c')
+sha1sums=('4a59150f0d9400f3997df542828834969a2c4842')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xf86-input-acecad/PKGBUILD b/abs/core/xf86-input-acecad/PKGBUILD
new file mode 100644
index 0000000..aa3513f
--- /dev/null
+++ b/abs/core/xf86-input-acecad/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-acecad
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X.Org acecad tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('2d6596b2b0cfa527b5ed4df2014684bf')
diff --git a/abs/core/xf86-input-aiptek/PKGBUILD b/abs/core/xf86-input-aiptek/PKGBUILD
new file mode 100644
index 0000000..f3d5b39
--- /dev/null
+++ b/abs/core/xf86-input-aiptek/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-aiptek
+pkgver=1.0.1
+pkgrel=4
+pkgdesc="X.Org Aiptek USB Digital Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('951b2b1a270f67d28e2e89fd2b9f15ae')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-calcomp/PKGBUILD b/abs/core/xf86-input-calcomp/PKGBUILD
new file mode 100644
index 0000000..b18d89c
--- /dev/null
+++ b/abs/core/xf86-input-calcomp/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-calcomp
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org CalComp Drawing Board input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('689099e2ade8a8c9f68f82fdf569b3ad')
diff --git a/abs/core/xf86-input-citron/PKGBUILD b/abs/core/xf86-input-citron/PKGBUILD
new file mode 100644
index 0000000..1cd8713
--- /dev/null
+++ b/abs/core/xf86-input-citron/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-citron
+pkgver=2.2.1
+pkgrel=1
+pkgdesc="X.Org Citron Infrared Touch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4e254fcefb3bea55772e63c12570f6d9')
diff --git a/abs/core/xf86-input-digitaledge/PKGBUILD b/abs/core/xf86-input-digitaledge/PKGBUILD
new file mode 100644
index 0000000..2017d0f
--- /dev/null
+++ b/abs/core/xf86-input-digitaledge/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-digitaledge
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org Digital Edge Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('53461c34cc0712aacab92b820b9fcb84')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-dmc/PKGBUILD b/abs/core/xf86-input-dmc/PKGBUILD
new file mode 100644
index 0000000..5839019
--- /dev/null
+++ b/abs/core/xf86-input-dmc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-dmc
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org DMC FIT10 serial input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('f21f008220bc7687ce1c34ab557ec32f')
diff --git a/abs/core/xf86-input-dynapro/PKGBUILD b/abs/core/xf86-input-dynapro/PKGBUILD
new file mode 100644
index 0000000..467e05d
--- /dev/null
+++ b/abs/core/xf86-input-dynapro/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-dynapro
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org DynaPro Touch Screen input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d47be12a230c44a05d56d6b79ebcfc38')
diff --git a/abs/core/xf86-input-elo2300/PKGBUILD b/abs/core/xf86-input-elo2300/PKGBUILD
new file mode 100644
index 0000000..da91799
--- /dev/null
+++ b/abs/core/xf86-input-elo2300/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3251 2008-06-21 18:19:51Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-elo2300
+pkgver=1.1.2
+pkgrel=1
+pkgdesc="X.org ELOGraphics 2300 TouchScreen input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('611d0a77a80286bc926dd3c414e59555')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-elographics/PKGBUILD b/abs/core/xf86-input-elographics/PKGBUILD
new file mode 100644
index 0000000..374fcaa
--- /dev/null
+++ b/abs/core/xf86-input-elographics/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3250 2008-06-21 18:18:33Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-elographics
+pkgver=1.2.2
+pkgrel=1
+pkgdesc="X.org Elographics TouchScreen input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('50a9c32af12ca4733afe23042f012f9c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xf86-input-evdev/PKGBUILD b/abs/core/xf86-input-evdev/PKGBUILD
new file mode 100644
index 0000000..0745861
--- /dev/null
+++ b/abs/core/xf86-input-evdev/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3693 2008-06-29 11:05:37Z jgc $
+# Maintainer: Alexander Baldeck <Alexander@archlinux.org
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-evdev
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="X.org evdev input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'inputproto>=1.4.3' 'randrproto>=1.2.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('061c4558316b1ec9ee71478bdf68b10c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-fpit/PKGBUILD b/abs/core/xf86-input-fpit/PKGBUILD
new file mode 100644
index 0000000..c8931e9
--- /dev/null
+++ b/abs/core/xf86-input-fpit/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-fpit
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org Fujitsu Stylistic Tablet PC input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a31066a2076d18619ceaea67f6d89698')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-hyperpen/PKGBUILD b/abs/core/xf86-input-hyperpen/PKGBUILD
new file mode 100644
index 0000000..8873552
--- /dev/null
+++ b/abs/core/xf86-input-hyperpen/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-hyperpen
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org HyperPen Tablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('1dfccb75069e61e0c6f990b47eb58c40')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-jamstudio/PKGBUILD b/abs/core/xf86-input-jamstudio/PKGBUILD
new file mode 100644
index 0000000..28be4e1
--- /dev/null
+++ b/abs/core/xf86-input-jamstudio/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-jamstudio
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.Org KB-Gear JamStudio pentablet input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a32e36a24545791a3408cdc5563b6523')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-joystick/PKGBUILD b/abs/core/xf86-input-joystick/PKGBUILD
new file mode 100644
index 0000000..e2146e8
--- /dev/null
+++ b/abs/core/xf86-input-joystick/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-joystick
+pkgver=1.3.1
+pkgrel=1
+pkgdesc="X.Org Joystick input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ff25ea697cfa1570cc28f4b9cf9c761f')
diff --git a/abs/core/xf86-input-keyboard/PKGBUILD b/abs/core/xf86-input-keyboard/PKGBUILD
new file mode 100644
index 0000000..8e30c84
--- /dev/null
+++ b/abs/core/xf86-input-keyboard/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 3248 2008-06-21 18:17:00Z jgc $
+# Maintainer; Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-keyboard
+pkgver=1.3.1
+pkgrel=1
+pkgdesc="X.Org keyboard input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg' 'xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('ebe5dcf8eed819103909f18321fc3b9d')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xf86-input-keyboard/new-server.patch b/abs/core/xf86-input-keyboard/new-server.patch
new file mode 100644
index 0000000..0d50466
--- /dev/null
+++ b/abs/core/xf86-input-keyboard/new-server.patch
@@ -0,0 +1,5087 @@
+diff -ruN xf86-input-keyboard-1.2.0/Makefile.in xf86-input-keyboard/Makefile.in
+--- xf86-input-keyboard-1.2.0/Makefile.in 2006-11-01 22:19:32.000000000 +0000
++++ xf86-input-keyboard/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -33,15 +33,11 @@
+ # ADAM JACKSON 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.
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = .
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -55,17 +51,17 @@
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
++subdir = .
+ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/configure COPYING ChangeLog config.guess \
+ config.sub depcomp install-sh ltmain.sh missing
+-subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+- configure.lineno configure.status.lineno
++ configure.lineno config.status.lineno
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES =
+@@ -73,10 +69,13 @@
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+- install-exec-recursive install-info-recursive \
+- install-recursive installcheck-recursive installdirs-recursive \
+- pdf-recursive ps-recursive uninstall-info-recursive \
+- uninstall-recursive
++ install-dvi-recursive install-exec-recursive \
++ install-html-recursive install-info-recursive \
++ install-pdf-recursive install-ps-recursive install-recursive \
++ installcheck-recursive installdirs-recursive pdf-recursive \
++ ps-recursive uninstall-recursive
++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
++ distclean-recursive maintainer-clean-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+@@ -94,8 +93,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -104,8 +101,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -132,8 +127,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -144,16 +138,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -164,23 +155,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -192,6 +180,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -220,8 +209,11 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+ SUBDIRS = src man
+ all: config.h
+@@ -265,7 +257,7 @@
+ config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+- $(MAKE) stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+@@ -287,7 +279,6 @@
+
+ distclean-libtool:
+ -rm -f libtool
+-uninstall-info-am:
+
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+@@ -320,8 +311,7 @@
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+-mostlyclean-recursive clean-recursive distclean-recursive \
+-maintainer-clean-recursive:
++$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+@@ -423,23 +413,22 @@
+
+ distdir: $(DISTFILES)
+ $(am__remove_distdir)
+- mkdir $(distdir)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ test -d $(distdir) || mkdir $(distdir)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -453,7 +442,7 @@
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+- || $(mkdir_p) "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+@@ -461,6 +450,8 @@
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
++ am__remove_distdir=: \
++ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+@@ -468,7 +459,7 @@
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+ dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+@@ -543,7 +534,7 @@
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+ distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+@@ -613,12 +604,20 @@
+
+ install-data-am:
+
++install-dvi: install-dvi-recursive
++
+ install-exec-am:
+
++install-html: install-html-recursive
++
+ install-info: install-info-recursive
+
+ install-man:
+
++install-pdf: install-pdf-recursive
++
++install-ps: install-ps-recursive
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-recursive
+@@ -639,24 +638,26 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-info-am
++uninstall-am:
+
+-uninstall-info: uninstall-info-recursive
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
++ install-strip
+
+-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+- check-am clean clean-generic clean-libtool clean-recursive \
+- ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+- dist-shar dist-tarZ dist-zip distcheck distclean \
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-generic distclean-hdr distclean-libtool \
+- distclean-recursive distclean-tags distcleancheck distdir \
+- distuninstallcheck dvi dvi-am html html-am info info-am \
+- install install-am install-data install-data-am install-exec \
+- install-exec-am install-info install-info-am install-man \
+- install-strip installcheck installcheck-am installdirs \
+- installdirs-am maintainer-clean maintainer-clean-generic \
+- maintainer-clean-recursive mostlyclean mostlyclean-generic \
+- mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+- tags tags-recursive uninstall uninstall-am uninstall-info-am
++ distclean-tags distcleancheck distdir distuninstallcheck dvi \
++ dvi-am html html-am info info-am install install-am \
++ install-data install-data-am install-dvi install-dvi-am \
++ install-exec install-exec-am install-html install-html-am \
++ install-info install-info-am install-man install-pdf \
++ install-pdf-am install-ps install-ps-am install-strip \
++ installcheck installcheck-am installdirs installdirs-am \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ tags tags-recursive uninstall uninstall-am
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -ruN xf86-input-keyboard-1.2.0/configure.ac xf86-input-keyboard/configure.ac
+--- xf86-input-keyboard-1.2.0/configure.ac 2006-11-01 22:16:54.000000000 +0000
++++ xf86-input-keyboard/configure.ac 2007-09-03 10:34:00.000000000 +0000
+@@ -22,7 +22,7 @@
+
+ AC_PREREQ(2.57)
+ AC_INIT([xf86-input-keyboard],
+- 1.2.0,
++ 1.2.1,
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
+ xf86-input-keyboard)
+
+diff -ruN xf86-input-keyboard-1.2.0/depcomp xf86-input-keyboard/depcomp
+--- xf86-input-keyboard-1.2.0/depcomp 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/depcomp 2007-09-03 10:36:18.000000000 +0000
+@@ -1,9 +1,10 @@
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+
+-scriptversion=2005-07-09.11
++scriptversion=2006-10-15.18
+
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
++# Foundation, Inc.
+
+ # 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
+@@ -91,7 +92,20 @@
+ ## gcc 3 implements dependency tracking that does exactly what
+ ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+ ## it if -MD -MP comes after the -MF stuff. Hmm.
+- "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
++## Unfortunately, FreeBSD c89 acceptance of flags depends upon
++## the command line argument order; so add the flags where they
++## appear in depend2.am. Note that the slowdown incurred here
++## affects only configure: in makefiles, %FASTDEP% shortcuts this.
++ for arg
++ do
++ case $arg in
++ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
++ *) set fnord "$@" "$arg" ;;
++ esac
++ shift # fnord
++ shift # $arg
++ done
++ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+@@ -276,6 +290,46 @@
+ rm -f "$tmpdepfile"
+ ;;
+
++hp2)
++ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
++ # compilers, which have integrated preprocessors. The correct option
++ # to use with these is +Maked; it writes dependencies to a file named
++ # 'foo.d', which lands next to the object file, wherever that
++ # happens to be.
++ # Much of this is similar to the tru64 case; see comments there.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir.libs/$base.d
++ "$@" -Wc,+Maked
++ else
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir$base.d
++ "$@" +Maked
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
++ # Add `dependent.h:' lines.
++ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile" "$tmpdepfile2"
++ ;;
++
+ tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+@@ -288,13 +342,13 @@
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+- # static library. This mecanism is used in libtool 1.4 series to
++ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+- # compilations output dependencies in in $dir.libs/$base.o.d and
++ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+diff -ruN xf86-input-keyboard-1.2.0/install-sh xf86-input-keyboard/install-sh
+--- xf86-input-keyboard-1.2.0/install-sh 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/install-sh 2007-09-03 10:36:18.000000000 +0000
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+
+-scriptversion=2005-05-14.22
++scriptversion=2006-10-14.15
+
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+@@ -39,15 +39,24 @@
+ # when there is no Makefile.
+ #
+ # This script is compatible with the BSD install script, but was written
+-# from scratch. It can only install one file at a time, a restriction
+-# shared with many OS's install programs.
++# from scratch.
++
++nl='
++'
++IFS=" "" $nl"
+
+ # set DOITPROG to echo to test this script
+
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+ doit="${DOITPROG-}"
++if test -z "$doit"; then
++ doit_exec=exec
++else
++ doit_exec=$doit
++fi
+
+-# put in absolute paths if you don't have them in your path; or use env. vars.
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
+
+ mvprog="${MVPROG-mv}"
+ cpprog="${CPPROG-cp}"
+@@ -58,7 +67,13 @@
+ rmprog="${RMPROG-rm}"
+ mkdirprog="${MKDIRPROG-mkdir}"
+
+-chmodcmd="$chmodprog 0755"
++posix_glob=
++posix_mkdir=
++
++# Desired mode of installed file.
++mode=0755
++
++chmodcmd=$chmodprog
+ chowncmd=
+ chgrpcmd=
+ stripcmd=
+@@ -95,7 +110,7 @@
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+ "
+
+-while test -n "$1"; do
++while test $# -ne 0; do
+ case $1 in
+ -c) shift
+ continue;;
+@@ -111,9 +126,15 @@
+
+ --help) echo "$usage"; exit $?;;
+
+- -m) chmodcmd="$chmodprog $2"
++ -m) mode=$2
+ shift
+ shift
++ case $mode in
++ *' '* | *' '* | *'
++'* | *'*'* | *'?'* | *'['*)
++ echo "$0: invalid mode: $mode" >&2
++ exit 1;;
++ esac
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+@@ -136,25 +157,33 @@
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+- *) # When -d is used, all remaining arguments are directories to create.
+- # When -t is used, the destination is already specified.
+- test -n "$dir_arg$dstarg" && break
+- # Otherwise, the last argument is the destination. Remove it from $@.
+- for arg
+- do
+- if test -n "$dstarg"; then
+- # $@ is not empty: it contains at least $arg.
+- set fnord "$@" "$dstarg"
+- shift # fnord
+- fi
+- shift # arg
+- dstarg=$arg
+- done
++ --) shift
+ break;;
++
++ -*) echo "$0: invalid option: $1" >&2
++ exit 1;;
++
++ *) break;;
+ esac
+ done
+
+-if test -z "$1"; then
++if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
++ # When -d is used, all remaining arguments are directories to create.
++ # When -t is used, the destination is already specified.
++ # Otherwise, the last argument is the destination. Remove it from $@.
++ for arg
++ do
++ if test -n "$dstarg"; then
++ # $@ is not empty: it contains at least $arg.
++ set fnord "$@" "$dstarg"
++ shift # fnord
++ fi
++ shift # arg
++ dstarg=$arg
++ done
++fi
++
++if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+@@ -164,6 +193,33 @@
+ exit 0
+ fi
+
++if test -z "$dir_arg"; then
++ trap '(exit $?); exit' 1 2 13 15
++
++ # Set umask so as not to create temps with too-generous modes.
++ # However, 'strip' requires both read and write access to temps.
++ case $mode in
++ # Optimize common cases.
++ *644) cp_umask=133;;
++ *755) cp_umask=22;;
++
++ *[0-7])
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw='% 200'
++ fi
++ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++ *)
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw=,u+rw
++ fi
++ cp_umask=$mode$u_plus_rw;;
++ esac
++fi
++
+ for src
+ do
+ # Protect names starting with `-'.
+@@ -173,15 +229,11 @@
+
+ if test -n "$dir_arg"; then
+ dst=$src
+- src=
+-
+- if test -d "$dst"; then
+- mkdircmd=:
+- chmodcmd=
+- else
+- mkdircmd=$mkdirprog
+- fi
++ dstdir=$dst
++ test -d "$dstdir"
++ dstdir_status=$?
+ else
++
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+@@ -208,53 +260,188 @@
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+- dst=$dst/`basename "$src"`
++ dstdir=$dst
++ dst=$dstdir/`basename "$src"`
++ dstdir_status=0
++ else
++ # Prefer dirname, but fall back on a substitute if dirname fails.
++ dstdir=`
++ (dirname "$dst") 2>/dev/null ||
++ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$dst" : 'X\(//\)[^/]' \| \
++ X"$dst" : 'X\(//\)$' \| \
++ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++ echo X"$dst" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'
++ `
++
++ test -d "$dstdir"
++ dstdir_status=$?
+ fi
+ fi
+
+- # This sed command emulates the dirname command.
+- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+-
+- # Make sure that the destination directory exists.
++ obsolete_mkdir_used=false
+
+- # Skip lots of stat calls in the usual case.
+- if test ! -d "$dstdir"; then
+- defaultIFS='
+- '
+- IFS="${IFS-$defaultIFS}"
+-
+- oIFS=$IFS
+- # Some sh's can't handle IFS=/ for some reason.
+- IFS='%'
+- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+- shift
+- IFS=$oIFS
++ if test $dstdir_status != 0; then
++ case $posix_mkdir in
++ '')
++ # Create intermediate dirs using mode 755 as modified by the umask.
++ # This is like FreeBSD 'install' as of 1997-10-28.
++ umask=`umask`
++ case $stripcmd.$umask in
++ # Optimize common cases.
++ *[2367][2367]) mkdir_umask=$umask;;
++ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++ *[0-7])
++ mkdir_umask=`expr $umask + 22 \
++ - $umask % 100 % 40 + $umask % 20 \
++ - $umask % 10 % 4 + $umask % 2
++ `;;
++ *) mkdir_umask=$umask,go-w;;
++ esac
++
++ # With -d, create the new directory with the user-specified mode.
++ # Otherwise, rely on $mkdir_umask.
++ if test -n "$dir_arg"; then
++ mkdir_mode=-m$mode
++ else
++ mkdir_mode=
++ fi
++
++ posix_mkdir=false
++ case $umask in
++ *[123567][0-7][0-7])
++ # POSIX mkdir -p sets u+wx bits regardless of umask, which
++ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++ ;;
++ *)
++ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
++
++ if (umask $mkdir_umask &&
++ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++ then
++ if test -z "$dir_arg" || {
++ # Check for POSIX incompatibilities with -m.
++ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++ # other-writeable bit of parent directory when it shouldn't.
++ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++ ls_ld_tmpdir=`ls -ld "$tmpdir"`
++ case $ls_ld_tmpdir in
++ d????-?r-*) different_mode=700;;
++ d????-?--*) different_mode=755;;
++ *) false;;
++ esac &&
++ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++ }
++ }
++ then posix_mkdir=:
++ fi
++ rmdir "$tmpdir/d" "$tmpdir"
++ else
++ # Remove any dirs left behind by ancient mkdir implementations.
++ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++ fi
++ trap '' 0;;
++ esac;;
++ esac
+
+- pathcomp=
++ if
++ $posix_mkdir && (
++ umask $mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++ )
++ then :
++ else
+
+- while test $# -ne 0 ; do
+- pathcomp=$pathcomp$1
++ # The umask is ridiculous, or mkdir does not conform to POSIX,
++ # or it failed possibly due to a race condition. Create the
++ # directory the slow way, step by step, checking for races as we go.
++
++ case $dstdir in
++ /*) prefix=/ ;;
++ -*) prefix=./ ;;
++ *) prefix= ;;
++ esac
++
++ case $posix_glob in
++ '')
++ if (set -f) 2>/dev/null; then
++ posix_glob=true
++ else
++ posix_glob=false
++ fi ;;
++ esac
++
++ oIFS=$IFS
++ IFS=/
++ $posix_glob && set -f
++ set fnord $dstdir
+ shift
+- if test ! -d "$pathcomp"; then
+- $mkdirprog "$pathcomp"
+- # mkdir can fail with a `File exist' error in case several
+- # install-sh are creating the directory concurrently. This
+- # is OK.
+- test -d "$pathcomp" || exit
++ $posix_glob && set +f
++ IFS=$oIFS
++
++ prefixes=
++
++ for d
++ do
++ test -z "$d" && continue
++
++ prefix=$prefix$d
++ if test -d "$prefix"; then
++ prefixes=
++ else
++ if $posix_mkdir; then
++ (umask=$mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++ # Don't fail if two instances are running concurrently.
++ test -d "$prefix" || exit 1
++ else
++ case $prefix in
++ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++ *) qprefix=$prefix;;
++ esac
++ prefixes="$prefixes '$qprefix'"
++ fi
++ fi
++ prefix=$prefix/
++ done
++
++ if test -n "$prefixes"; then
++ # Don't fail if two instances are running concurrently.
++ (umask $mkdir_umask &&
++ eval "\$doit_exec \$mkdirprog $prefixes") ||
++ test -d "$dstdir" || exit 1
++ obsolete_mkdir_used=true
+ fi
+- pathcomp=$pathcomp/
+- done
++ fi
+ fi
+
+ if test -n "$dir_arg"; then
+- $doit $mkdircmd "$dst" \
+- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+-
++ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+- dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+@@ -262,10 +449,9 @@
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+- trap '(exit $?); exit' 1 2 13 15
+
+ # Copy the file name to the temp name.
+- $doit $cpprog "$src" "$dsttmp" &&
++ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+@@ -276,10 +462,10 @@
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
++ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
++ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+@@ -291,11 +477,12 @@
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+- if test -f "$dstdir/$dstfile"; then
+- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
++ if test -f "$dst"; then
++ $doit $rmcmd -f "$dst" 2>/dev/null \
++ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
++ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+ || {
+- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
++ echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ else
+@@ -304,16 +491,13 @@
+ } &&
+
+ # Now rename the file to the real destination.
+- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
++ $doit $mvcmd "$dsttmp" "$dst"
+ }
+- }
+- fi || { (exit 1); exit 1; }
+-done
++ } || exit 1
+
+-# The final little trick to "correctly" pass the exit status to the exit trap.
+-{
+- (exit 0); exit 0
+-}
++ trap '' 0
++ fi
++done
+
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+diff -ruN xf86-input-keyboard-1.2.0/ltmain.sh xf86-input-keyboard/ltmain.sh
+--- xf86-input-keyboard-1.2.0/ltmain.sh 2006-06-19 18:36:49.000000000 +0000
++++ xf86-input-keyboard/ltmain.sh 2007-06-26 19:45:46.000000000 +0000
+@@ -1,8 +1,8 @@
+ # ltmain.sh - Provide generalized library-building support services.
+ # NOTE: Changing this file will not affect anything until you rerun configure.
+ #
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
++# 2007 Free Software Foundation, Inc.
+ # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+ #
+ # This program is free software; you can redistribute it and/or modify
+@@ -43,14 +43,22 @@
+
+ PROGRAM=ltmain.sh
+ PACKAGE=libtool
+-VERSION="1.5.22 Debian 1.5.22-4"
+-TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
++VERSION=1.5.24
++TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)"
+
+-# See if we are running on zsh, and set the options which allow our
+-# commands through without removal of \ escapes.
+-if test -n "${ZSH_VERSION+set}" ; then
++# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+ fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Check that we have a working $echo.
+ if test "X$1" = X--no-reexec; then
+@@ -105,12 +113,14 @@
+ # These must not be set unconditionally because not all systems understand
+ # e.g. LANG=C (notably SCO).
+ # We save the old values to restore during execute mode.
+-if test "${LC_ALL+set}" = set; then
+- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+-fi
+-if test "${LANG+set}" = set; then
+- save_LANG="$LANG"; LANG=C; export LANG
+-fi
++for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++do
++ eval "if test \"\${$lt_var+set}\" = set; then
++ save_$lt_var=\$$lt_var
++ $lt_var=C
++ export $lt_var
++ fi"
++done
+
+ # Make sure IFS has a sensible default
+ lt_nl='
+@@ -136,6 +146,8 @@
+ preserve_args=
+ lo2o="s/\\.lo\$/.${objext}/"
+ o2lo="s/\\.${objext}\$/.lo/"
++extracted_archives=
++extracted_serial=0
+
+ #####################################
+ # Shell function definitions:
+@@ -196,7 +208,13 @@
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+- $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
++ $SED -n -e '1,100{
++ / I /{
++ s,.*,import,
++ p
++ q
++ }
++ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+@@ -327,7 +345,17 @@
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
+- my_xdir="$my_gentop/$my_xlib"
++ my_xlib_u=$my_xlib
++ while :; do
++ case " $extracted_archives " in
++ *" $my_xlib_u "*)
++ extracted_serial=`expr $extracted_serial + 1`
++ my_xlib_u=lt$extracted_serial-$my_xlib ;;
++ *) break ;;
++ esac
++ done
++ extracted_archives="$extracted_archives $my_xlib_u"
++ my_xdir="$my_gentop/$my_xlib_u"
+
+ $show "${rm}r $my_xdir"
+ $run ${rm}r "$my_xdir"
+@@ -454,11 +482,12 @@
+ ;;
+
+ --version)
+- $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+- $echo
+- $echo "Copyright (C) 2005 Free Software Foundation, Inc."
+- $echo "This is free software; see the source for copying conditions. There is NO"
+- $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++ echo "\
++$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
++
++Copyright (C) 2007 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit $?
+ ;;
+
+@@ -755,9 +784,10 @@
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+- *.f90) xform=f90 ;;
++ *.[fF][09]?) xform=[fF][09]. ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
++ *.obj) xform=obj ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+@@ -1138,8 +1168,9 @@
+ for arg
+ do
+ case $arg in
+- -all-static | -static)
+- if test "X$arg" = "X-all-static"; then
++ -all-static | -static | -static-libtool-libs)
++ case $arg in
++ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+@@ -1147,12 +1178,20 @@
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+- else
++ ;;
++ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+- fi
++ ;;
++ -static-libtool-libs)
++ if test -z "$pic_flag" && test -n "$link_static_flag"; then
++ dlopen_self=$dlopen_self_static
++ fi
++ prefer_static_libs=yes
++ ;;
++ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+@@ -1600,7 +1639,7 @@
+ continue
+ ;;
+
+- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+@@ -1620,10 +1659,11 @@
+ # -m* pass through architecture-specific compiler args for GCC
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+- # -pg pass through profiling flag for GCC
++ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
++ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # @file GCC response files
+- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+- -t[45]*|-txscale*|@*)
++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+@@ -1651,9 +1691,9 @@
+
+ -no-install)
+ case $host in
+- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+ # The PATH hackery in wrapper scripts is required on Windows
+- # in order for the loader to find any dlls it needs.
++ # and Darwin in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+@@ -1712,7 +1752,7 @@
+ continue
+ ;;
+
+- -static)
++ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+@@ -2082,10 +2122,7 @@
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+- link)
+- libs="$deplibs %DEPLIBS%"
+- test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+- ;;
++ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+@@ -2097,7 +2134,7 @@
+ lib=
+ found=no
+ case $deplib in
+- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+@@ -2493,7 +2530,9 @@
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
++ { { test "$prefer_static_libs" = no ||
++ test "$prefer_static_libs,$installed" = "built,yes"; } ||
++ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+@@ -3189,7 +3228,7 @@
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+- darwin|linux|osf|windows)
++ darwin|linux|osf|windows|none)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+@@ -3200,14 +3239,10 @@
+ age="0"
+ ;;
+ irix|nonstopux)
+- current=`expr $number_major + $number_minor - 1`
++ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_minor"
+- ;;
+- *)
+- $echo "$modename: unknown library version type \`$version_type'" 1>&2
+- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+- exit $EXIT_FAILURE
++ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+@@ -3266,7 +3301,8 @@
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+- verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
++ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
++ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+@@ -3280,8 +3316,11 @@
+ ;;
+
+ irix | nonstopux)
+- major=`expr $current - $age + 1`
+-
++ if test "X$lt_irix_increment" = "Xno"; then
++ major=`expr $current - $age`
++ else
++ major=`expr $current - $age + 1`
++ fi
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+@@ -3418,11 +3457,11 @@
+ fi
+
+ # Eliminate all temporary directories.
+- for path in $notinst_path; do
+- lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
+- deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
+- dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+- done
++ #for path in $notinst_path; do
++ # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
++ # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
++ # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
++ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+@@ -3523,13 +3562,12 @@
+ int main() { return 0; }
+ EOF
+ $rm conftest
+- $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
+- if test "$?" -eq 0 ; then
++ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name=`expr $i : '-l\(.*\)'`
+ # If $name is empty we are operating on a -L argument.
+- if test "$name" != "" && test "$name" -ne "0"; then
++ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+@@ -3568,9 +3606,7 @@
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+- $LTCC $LTCFLAGS -o conftest conftest.c $i
+- # Did it work?
+- if test "$?" -eq 0 ; then
++ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+@@ -3602,7 +3638,7 @@
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+- $echo "*** make it link in! You will probably need to install it or some"
++ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+@@ -3888,7 +3924,10 @@
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
++ case $archive_cmds in
++ *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
++ *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
++ esac
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+@@ -4247,12 +4286,14 @@
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+- # -Wl from whole_archive_flag_spec
++ # -Wl from whole_archive_flag_spec and hope we can get by with
++ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
++ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
++ reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+@@ -4700,16 +4741,16 @@
+ case $host in
+ *cygwin* | *mingw* )
+ if test -f "$output_objdir/${outputname}.def" ; then
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ else
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ fi
+ ;;
+ * )
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ ;;
+ esac
+ ;;
+@@ -4724,13 +4765,13 @@
+ # really was required.
+
+ # Nullify the symbol file.
+- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
++ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+ fi
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+@@ -4817,7 +4858,7 @@
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
++ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
+ else
+ # fast_install is set to needless
+ relink_command=
+@@ -4854,7 +4895,7 @@
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ fi
+
+ # Quote $echo for shipping.
+@@ -5261,6 +5302,20 @@
+ Xsed='${SED} -e 1s/^X//'
+ sed_quote_subst='$sed_quote_subst'
+
++# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
++if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '\${1+\"\$@\"}'='\"\$@\"'
++ setopt NO_GLOB_SUBST
++else
++ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
+ # The HP-UX ksh and POSIX shell print the target directory to stdout
+ # if CDPATH is set.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+@@ -5403,7 +5458,7 @@
+ ;;
+ esac
+ $echo >> $output "\
+- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
++ \$echo \"\$0: cannot exec \$program \$*\"
+ exit $EXIT_FAILURE
+ fi
+ else
+@@ -5589,7 +5644,7 @@
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+@@ -5934,9 +5989,9 @@
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
++ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
+ else
+- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
++ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+@@ -6145,7 +6200,7 @@
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
++ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+@@ -6356,8 +6411,10 @@
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+- exit $EXIT_FAILURE
++ if test ! -f "$dir/$dlname"; then
++ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
++ exit $EXIT_FAILURE
++ fi
+ fi
+ ;;
+
+@@ -6421,12 +6478,12 @@
+ fi
+
+ # Restore saved environment variables
+- if test "${save_LC_ALL+set}" = set; then
+- LC_ALL="$save_LC_ALL"; export LC_ALL
+- fi
+- if test "${save_LANG+set}" = set; then
+- LANG="$save_LANG"; export LANG
+- fi
++ for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++ do
++ eval "if test \"\${save_$lt_var+set}\" = set; then
++ $lt_var=\$save_$lt_var; export $lt_var
++ fi"
++ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+@@ -6783,9 +6840,9 @@
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+- try to export only the symbols listed in SYMFILE
++ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+- try to export only the symbols matching REGEX
++ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+@@ -6799,9 +6856,11 @@
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+- -static do not do any dynamic linking of libtool libraries
++ -static do not do any dynamic linking of uninstalled libtool libraries
++ -static-libtool-libs
++ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+- specify library version info [each variable defaults to 0]
++ specify library version info [each variable defaults to 0]
+
+ All other options (arguments beginning with \`-') are ignored.
+
+diff -ruN xf86-input-keyboard-1.2.0/man/.cvsignore xf86-input-keyboard/man/.cvsignore
+--- xf86-input-keyboard-1.2.0/man/.cvsignore 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/man/.cvsignore 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,2 @@
++Makefile
++Makefile.in
+diff -ruN xf86-input-keyboard-1.2.0/man/Makefile.in xf86-input-keyboard/man/Makefile.in
+--- xf86-input-keyboard-1.2.0/man/Makefile.in 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/man/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -41,15 +41,11 @@
+ # from the copyright holders.
+ #
+
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -87,8 +83,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -97,8 +91,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -125,8 +117,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -137,16 +128,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -157,23 +145,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = sed
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -185,6 +170,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -213,14 +199,16 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ drivermandir = $(DRIVER_MAN_DIR)
+ driverman_PRE = @DRIVER_NAME@.man
+ driverman_DATA = $(driverman_PRE:man=@DRIVER_MAN_SUFFIX@)
+ EXTRA_DIST = @DRIVER_NAME@.man
+ CLEANFILES = $(driverman_DATA)
+-SED = sed
+
+ # Strings to replace in man pages
+ XORGRELSTRING = @PACKAGE_STRING@
+@@ -277,13 +265,9 @@
+
+ clean-libtool:
+ -rm -rf .libs _libs
+-
+-distclean-libtool:
+- -rm -f libtool
+-uninstall-info-am:
+ install-drivermanDATA: $(driverman_DATA)
+ @$(NORMAL_INSTALL)
+- test -z "$(drivermandir)" || $(mkdir_p) "$(DESTDIR)$(drivermandir)"
++ test -z "$(drivermandir)" || $(MKDIR_P) "$(DESTDIR)$(drivermandir)"
+ @list='$(driverman_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+@@ -306,22 +290,21 @@
+
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -337,7 +320,7 @@
+ all-am: Makefile $(DATA)
+ installdirs:
+ for dir in "$(DESTDIR)$(drivermandir)"; do \
+- test -z "$$dir" || $(mkdir_p) "$$dir"; \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -370,7 +353,7 @@
+
+ distclean: distclean-am
+ -rm -f Makefile
+-distclean-am: clean-am distclean-generic distclean-libtool
++distclean-am: clean-am distclean-generic
+
+ dvi: dvi-am
+
+@@ -384,12 +367,20 @@
+
+ install-data-am: install-drivermanDATA
+
++install-dvi: install-dvi-am
++
+ install-exec-am:
+
++install-html: install-html-am
++
+ install-info: install-info-am
+
+ install-man:
+
++install-pdf: install-pdf-am
++
++install-ps: install-ps-am
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -408,18 +399,21 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-drivermanDATA uninstall-info-am
++uninstall-am: uninstall-drivermanDATA
++
++.MAKE: install-am install-strip
+
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+- install-data install-data-am install-drivermanDATA \
+- install-exec install-exec-am install-info install-info-am \
+- install-man install-strip installcheck installcheck-am \
+- installdirs maintainer-clean maintainer-clean-generic \
+- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+- ps ps-am uninstall uninstall-am uninstall-drivermanDATA \
+- uninstall-info-am
++ install-data install-data-am install-drivermanDATA install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-ps install-ps-am \
++ install-strip installcheck installcheck-am installdirs \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ uninstall uninstall-am uninstall-drivermanDATA
+
+
+ .man.$(DRIVER_MAN_SUFFIX):
+diff -ruN xf86-input-keyboard-1.2.0/man/keyboard.man xf86-input-keyboard/man/keyboard.man
+--- xf86-input-keyboard-1.2.0/man/keyboard.man 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/man/keyboard.man 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,108 @@
++.\" $XdotOrg: $
++.\" $XFree86: xc/programs/Xserver/hw/xfree86/input/keyboard/keyboard.man,v 1.2 2001/01/27 18:20:57 dawes Exp $
++.\" shorthand for double quote that works everywhere.
++.ds q \N'34'
++.TH KEYBOARD __drivermansuffix__ __vendorversion__
++.SH NAME
++keyboard \- Keyboard input driver
++.SH SYNOPSIS
++.nf
++.B "Section \*qInputDevice\*q"
++.BI " Identifier \*q" idevname \*q
++.B " Driver \*qkeyboard\*q"
++\ \ ...
++.B EndSection
++.fi
++.SH DESCRIPTION
++.B keyboard
++is an __xservername__ input driver for keyboards. The driver supports the standard
++OS-provided keyboard interface.
++.PP
++The
++.B keyboard
++driver functions as a keyboard input device, and may be used as the
++X server's core keyboard.
++.PP
++This driver is built-in to the core X server, and multiple instances are not
++supported. A loadable driver,
++.BR kbd ,
++is available, and is planned to replace the
++.B keyboard
++driver in a future release of the __xservername__ server.
++.SH CONFIGURATION DETAILS
++Please refer to __xconfigfile__(__filemansuffix__) for general configuration
++details and for options that can be used with all input drivers. This
++section only covers configuration details specific to this driver.
++.PP
++The following driver
++.B Options
++are supported:
++.TP 7
++.BI "Option \*qProtocol\*q \*q" string \*q
++Specify the keyboard protocol. Valid protocol types include:
++.PP
++.RS 12
++Standard, Xqueue.
++.RE
++.PP
++.RS 7
++Not all protocols are supported on all platforms. Default: "Standard".
++.RE
++.TP 7
++.BI "Option \*qAutoRepeat\*q \*q" "delay rate" \*q
++sets the auto repeat behaviour for the keyboard. This is not implemented
++on all platforms.
++.I delay
++is the time in milliseconds before a key starts repeating.
++.I rate
++is the number of times a key repeats per second. Default: "500 30".
++.TP 7
++.BI "Option \*qXLeds\*q \*q" ledlist \*q
++makes the keyboard LEDs specified in
++.I ledlist
++available for client use instead of their traditional function
++(Scroll Lock, Caps Lock and Num Lock). The numbers in the list are
++in the range 1 to 3. Default: empty list.
++.TP 7
++.BI "Option \*qXkbDisable\*q \*q" boolean \*q
++disable/enable the XKEYBOARD extension. The \-kb command line
++option overrides this config file option. Default: XKB is enabled.
++.PP
++.RS 7
++NOTE: This option should be specified in the
++.B ServerFlags
++section rather than here. It's use here is deprecated.
++.RE
++.TP 7
++.BI "Option \*qXkbRules\*q \*q" rules \*q
++specifies which XKB rules file to use for interpreting the
++.BR XkbModel ,
++.BR XkbLayout ,
++.BR XkbVariant ,
++and
++.B XkbOptions
++settings. Default: "xorg" for most platforms, but "xfree98" for the
++Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbModel\*q \*q" modelname \*q
++specifies the XKB keyboard model name. Default: "pc105" for most platforms,
++but "pc98" for the Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbLayout\*q \*q" layoutname \*q
++specifies the XKB keyboard layout name. This is usually the country or
++language type of the keyboard. Default: "us" for most platforms, but
++"nec/jp" for the Japanese PC-98 platforms.
++.TP 7
++.BI "Option \*qXkbVariant\*q \*q" variants \*q
++specifies the XKB keyboard variant components. These can be used to
++enhance the keyboard layout details. Default: not set.
++.TP 7
++.BI "Option \*qXkbOptions\*q \*q" options \*q
++specifies the XKB keyboard option components. These can be used to
++enhance the keyboard behaviour. Default: not set.
++.PP
++Some other XKB-related options are available, but they are incompatible
++with the ones listed above and are not recommended, so they are not
++documented here.
++.SH "SEE ALSO"
++kbd(__drivermansuffix__), __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__).
+diff -ruN xf86-input-keyboard-1.2.0/missing xf86-input-keyboard/missing
+--- xf86-input-keyboard-1.2.0/missing 2006-11-01 22:19:31.000000000 +0000
++++ xf86-input-keyboard/missing 2007-09-03 10:36:18.000000000 +0000
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Common stub for a few missing GNU programs while installing.
+
+-scriptversion=2005-06-08.21
++scriptversion=2006-05-10.23
+
+-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+ # Free Software Foundation, Inc.
+ # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+@@ -33,6 +33,8 @@
+ fi
+
+ run=:
++sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
++sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+ # In the cases where this matters, `missing' is being run in the
+ # srcdir already.
+@@ -44,7 +46,7 @@
+
+ msg="missing on your system"
+
+-case "$1" in
++case $1 in
+ --run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+@@ -77,6 +79,7 @@
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
++ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+@@ -106,7 +109,7 @@
+ # Now exit if we have it, but it failed. Also exit now if we
+ # don't have it and --version was passed (most likely to detect
+ # the program).
+-case "$1" in
++case $1 in
+ lex|yacc)
+ # Not GNU programs, they don't have --version.
+ ;;
+@@ -135,7 +138,7 @@
+
+ # If it does not exist, or fails to run (possibly an outdated version),
+ # try to emulate it.
+-case "$1" in
++case $1 in
+ aclocal*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+@@ -164,7 +167,7 @@
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+- case "$f" in
++ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+@@ -192,8 +195,8 @@
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+- file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+- test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+@@ -214,25 +217,25 @@
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+- if [ $# -ne 1 ]; then
++ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+- case "$LASTARG" in
++ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+- if [ ! -f y.tab.h ]; then
++ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+- if [ ! -f y.tab.c ]; then
++ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+@@ -244,18 +247,18 @@
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+- if [ $# -ne 1 ]; then
++ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+- case "$LASTARG" in
++ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+- if [ -f "$SRCFILE" ]; then
++ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+- if [ ! -f lex.yy.c ]; then
++ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+@@ -267,11 +270,9 @@
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+- if test -z "$file"; then
+- file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+- fi
+- if [ -f "$file" ]; then
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+@@ -289,11 +290,17 @@
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
++ file=`sed -n '
++ /^@setfilename/{
++ s/.* \([^ ]*\) *$/\1/
++ p
++ q
++ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+@@ -317,13 +324,13 @@
+ fi
+ firstarg="$1"
+ if shift; then
+- case "$firstarg" in
++ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+- case "$firstarg" in
++ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+diff -ruN xf86-input-keyboard-1.2.0/src/.cvsignore xf86-input-keyboard/src/.cvsignore
+--- xf86-input-keyboard-1.2.0/src/.cvsignore 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/.cvsignore 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,6 @@
++.deps
++.libs
++Makefile
++Makefile.in
++*.la
++*.lo
+diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.am xf86-input-keyboard/src/Makefile.am
+--- xf86-input-keyboard-1.2.0/src/Makefile.am 2006-11-01 22:16:43.000000000 +0000
++++ xf86-input-keyboard/src/Makefile.am 2007-09-03 10:34:00.000000000 +0000
+@@ -21,33 +21,32 @@
+ driverdir = @inputdir@
+ driver_LTLIBRARIES = kbd_drv.la
+ kbd_drv_la_LDFLAGS = -avoid-version -module
+-kbd_drv_la_SOURCES = kbd.c
++kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h
+
+-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+-HURD_SOURCES = hurd_kbd.c at_scancode.c
+-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
+-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
++BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
++HURD_SRCS = hurd_kbd.c at_scancode.c
++LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
++SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
++SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
+
+ if BSD
+-kbd_drv_la_SOURCES += $(BSD_SOURCES)
++kbd_drv_la_SOURCES += $(BSD_SRCS)
+ endif
+
+ if SOLARIS
+-kbd_drv_la_SOURCES += $(SOLARIS_SOURCES)
++kbd_drv_la_SOURCES += $(SOLARIS_SRCS)
+ endif
+
+ if LINUX
+-kbd_drv_la_SOURCES += $(LINUX_SOURCES)
++kbd_drv_la_SOURCES += $(LINUX_SRCS)
+ endif
+
+ if SCO
+-kbd_drv_la_SOURCES += $(SCO_SOURCES)
++kbd_drv_la_SOURCES += $(SCO_SRCS)
+ endif
+
+ if HURD
+-kbd_drv_la_SOURCES += $(HURD_SOURCES)
++kbd_drv_la_SOURCES += $(HURD_SRCS)
+ endif
+
+-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
+- $(SOLARIS_SOURCES)
++EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
+diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.in xf86-input-keyboard/src/Makefile.in
+--- xf86-input-keyboard-1.2.0/src/Makefile.in 2006-11-01 22:19:32.000000000 +0000
++++ xf86-input-keyboard/src/Makefile.in 2007-09-03 10:36:18.000000000 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -34,15 +34,11 @@
+ # 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.
+
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+-top_builddir = ..
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -56,11 +52,11 @@
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+-@BSD_TRUE@am__append_1 = $(BSD_SOURCES)
+-@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SOURCES)
+-@LINUX_TRUE@am__append_3 = $(LINUX_SOURCES)
+-@SCO_TRUE@am__append_4 = $(SCO_SOURCES)
+-@HURD_TRUE@am__append_5 = $(HURD_SOURCES)
++@BSD_TRUE@am__append_1 = $(BSD_SRCS)
++@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SRCS)
++@LINUX_TRUE@am__append_3 = $(LINUX_SRCS)
++@SCO_TRUE@am__append_4 = $(SCO_SRCS)
++@HURD_TRUE@am__append_5 = $(HURD_SRCS)
+ subdir = src
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+@@ -80,13 +76,13 @@
+ driverLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(driver_LTLIBRARIES)
+ kbd_drv_la_LIBADD =
+-am__kbd_drv_la_SOURCES_DIST = kbd.c bsd_KbdMap.c bsd_kbd.c bsd_kbd.h \
+- at_scancode.c sun_kbd.c sun_kbd.h sun_kbdEv.c lnx_KbdMap.c \
+- lnx_kbd.c lnx_kbd.h sco_KbdMap.c sco_kbd.c sco_kbd.h \
+- hurd_kbd.c
++am__kbd_drv_la_SOURCES_DIST = kbd.c xf86OSKbd.h xf86Keymap.h \
++ bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c sun_kbd.c \
++ sun_kbd.h sun_kbdMap.c lnx_KbdMap.c lnx_kbd.c lnx_kbd.h \
++ sco_KbdMap.c sco_kbd.c sco_kbd.h hurd_kbd.c
+ am__objects_1 = bsd_KbdMap.lo bsd_kbd.lo at_scancode.lo
+ @BSD_TRUE@am__objects_2 = $(am__objects_1)
+-am__objects_3 = sun_kbd.lo sun_kbdEv.lo
++am__objects_3 = sun_kbd.lo sun_kbdMap.lo
+ @SOLARIS_TRUE@am__objects_4 = $(am__objects_3)
+ am__objects_5 = lnx_KbdMap.lo lnx_kbd.lo at_scancode.lo
+ @LINUX_TRUE@am__objects_6 = $(am__objects_5)
+@@ -97,17 +93,21 @@
+ am_kbd_drv_la_OBJECTS = kbd.lo $(am__objects_2) $(am__objects_4) \
+ $(am__objects_6) $(am__objects_8) $(am__objects_10)
+ kbd_drv_la_OBJECTS = $(am_kbd_drv_la_OBJECTS)
+-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
++kbd_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(kbd_drv_la_LDFLAGS) $(LDFLAGS) -o $@
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+- $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+- $(AM_LDFLAGS) $(LDFLAGS) -o $@
++LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
++ $(LDFLAGS) -o $@
+ SOURCES = $(kbd_drv_la_SOURCES)
+ DIST_SOURCES = $(am__kbd_drv_la_SOURCES_DIST)
+ ETAGS = etags
+@@ -116,8 +116,6 @@
+ ACLOCAL = @ACLOCAL@
+ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+-AMDEP_FALSE = @AMDEP_FALSE@
+-AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ APP_MAN_DIR = @APP_MAN_DIR@
+ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+@@ -126,8 +124,6 @@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+-BSD_FALSE = @BSD_FALSE@
+-BSD_TRUE = @BSD_TRUE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+@@ -154,8 +150,7 @@
+ FILE_MAN_DIR = @FILE_MAN_DIR@
+ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+ GREP = @GREP@
+-HURD_FALSE = @HURD_FALSE@
+-HURD_TRUE = @HURD_TRUE@
++INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -166,16 +161,13 @@
+ LIBTOOL = @LIBTOOL@
+ LIB_MAN_DIR = @LIB_MAN_DIR@
+ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+-LINUX_FALSE = @LINUX_FALSE@
+-LINUX_TRUE = @LINUX_TRUE@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ MISC_MAN_DIR = @MISC_MAN_DIR@
+ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
++MKDIR_P = @MKDIR_P@
+ OBJEXT = @OBJEXT@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+@@ -186,23 +178,20 @@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+ RANLIB = @RANLIB@
+-SCO_FALSE = @SCO_FALSE@
+-SCO_TRUE = @SCO_TRUE@
++SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+-SOLARIS_FALSE = @SOLARIS_FALSE@
+-SOLARIS_TRUE = @SOLARIS_TRUE@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+ XORG_CFLAGS = @XORG_CFLAGS@
+ XORG_LIBS = @XORG_LIBS@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_F77 = @ac_ct_F77@
+-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -214,6 +203,7 @@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
++builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -242,21 +232,23 @@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
+ driverdir = @inputdir@
+ driver_LTLIBRARIES = kbd_drv.la
+ kbd_drv_la_LDFLAGS = -avoid-version -module
+-kbd_drv_la_SOURCES = kbd.c $(am__append_1) $(am__append_2) \
+- $(am__append_3) $(am__append_4) $(am__append_5)
+-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+-HURD_SOURCES = hurd_kbd.c at_scancode.c
+-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
+-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
+-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
+- $(SOLARIS_SOURCES)
+-
++kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h $(am__append_1) \
++ $(am__append_2) $(am__append_3) $(am__append_4) \
++ $(am__append_5)
++BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
++HURD_SRCS = hurd_kbd.c at_scancode.c
++LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
++SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
++SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
++EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
+ all: all-am
+
+ .SUFFIXES:
+@@ -292,7 +284,7 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ install-driverLTLIBRARIES: $(driver_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+- test -z "$(driverdir)" || $(mkdir_p) "$(DESTDIR)$(driverdir)"
++ test -z "$(driverdir)" || $(MKDIR_P) "$(DESTDIR)$(driverdir)"
+ @list='$(driver_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+@@ -303,7 +295,7 @@
+
+ uninstall-driverLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @set -x; list='$(driver_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(driver_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(driverdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(driverdir)/$$p"; \
+@@ -318,7 +310,7 @@
+ rm -f "$${dir}/so_locations"; \
+ done
+ kbd_drv.la: $(kbd_drv_la_OBJECTS) $(kbd_drv_la_DEPENDENCIES)
+- $(LINK) -rpath $(driverdir) $(kbd_drv_la_LDFLAGS) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
++ $(kbd_drv_la_LINK) -rpath $(driverdir) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
+
+ mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+@@ -336,25 +328,25 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_KbdMap.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_kbd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbd.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdEv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdMap.Plo@am__quote@
+
+ .c.o:
+-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+-@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -365,10 +357,6 @@
+ clean-libtool:
+ -rm -rf .libs _libs
+
+-distclean-libtool:
+- -rm -f libtool
+-uninstall-info-am:
+-
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -418,22 +406,21 @@
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+ distdir: $(DISTFILES)
+- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+- list='$(DISTFILES)'; for file in $$list; do \
+- case $$file in \
+- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+- esac; \
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+- dir="/$$dir"; \
+- $(mkdir_p) "$(distdir)$$dir"; \
+- else \
+- dir=''; \
+- fi; \
+ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+@@ -449,7 +436,7 @@
+ all-am: Makefile $(LTLIBRARIES)
+ installdirs:
+ for dir in "$(DESTDIR)$(driverdir)"; do \
+- test -z "$$dir" || $(mkdir_p) "$$dir"; \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+ install-exec: install-exec-am
+@@ -484,7 +471,7 @@
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+- distclean-libtool distclean-tags
++ distclean-tags
+
+ dvi: dvi-am
+
+@@ -498,12 +485,20 @@
+
+ install-data-am: install-driverLTLIBRARIES
+
++install-dvi: install-dvi-am
++
+ install-exec-am:
+
++install-html: install-html-am
++
+ install-info: install-info-am
+
+ install-man:
+
++install-pdf: install-pdf-am
++
++install-ps: install-ps-am
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -524,20 +519,24 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-driverLTLIBRARIES uninstall-info-am
++uninstall-am: uninstall-driverLTLIBRARIES
++
++.MAKE: install-am install-strip
+
+ .PHONY: CTAGS GTAGS all all-am check check-am clean \
+ clean-driverLTLIBRARIES clean-generic clean-libtool ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+- install-data-am install-driverLTLIBRARIES install-exec \
+- install-exec-am install-info install-info-am install-man \
++ install-data-am install-driverLTLIBRARIES install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+- uninstall-driverLTLIBRARIES uninstall-info-am
++ uninstall-driverLTLIBRARIES
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -ruN xf86-input-keyboard-1.2.0/src/kbd.c xf86-input-keyboard/src/kbd.c
+--- xf86-input-keyboard-1.2.0/src/kbd.c 2006-11-01 22:16:43.000000000 +0000
++++ xf86-input-keyboard/src/kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -383,7 +383,22 @@
+ InputInfoPtr pInfo = (InputInfoPtr) device->public.devicePrivate;
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+
+- if ( ctrl->leds & XCOMP ) {
++ if ( ctrl->leds & XLED1) {
++ pKbd->keyLeds |= CAPSFLAG;
++ } else {
++ pKbd->keyLeds &= ~CAPSFLAG;
++ }
++ if ( ctrl->leds & XLED2) {
++ pKbd->keyLeds |= NUMFLAG;
++ } else {
++ pKbd->keyLeds &= ~NUMFLAG;
++ }
++ if ( ctrl->leds & XLED3) {
++ pKbd->keyLeds |= SCROLLFLAG;
++ } else {
++ pKbd->keyLeds &= ~SCROLLFLAG;
++ }
++ if ( ctrl->leds & (XCOMP|XLED4) ) {
+ pKbd->keyLeds |= COMPOSEFLAG;
+ } else {
+ pKbd->keyLeds &= ~COMPOSEFLAG;
+@@ -419,6 +434,8 @@
+ kevent.u.keyButtonPointer.rootX = 0;
+ kevent.u.keyButtonPointer.rootY = 0;
+
++/* The server does this for us with i-h. */
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 1
+ /*
+ * Hmm... here is the biggest hack of every time !
+ * It may be possible that a switch-vt procedure has finished BEFORE
+@@ -448,6 +465,8 @@
+ (* pKeyboard->public.processInputProc)(&kevent, pKeyboard, 1);
+ }
+ }
++#endif
++
+ pKbd->scanPrefix = 0;
+
+ if (init) {
+@@ -830,7 +849,7 @@
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+ XORG_VERSION_CURRENT,
+- 1, 1, 0,
++ PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
+ ABI_CLASS_XINPUT,
+ ABI_XINPUT_VERSION,
+ MOD_CLASS_XINPUT,
+diff -ruN xf86-input-keyboard-1.2.0/src/lnx_kbd.c xf86-input-keyboard/src/lnx_kbd.c
+--- xf86-input-keyboard-1.2.0/src/lnx_kbd.c 2006-11-01 22:18:25.000000000 +0000
++++ xf86-input-keyboard/src/lnx_kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -6,6 +6,10 @@
+ * Based on the code from lnx_io.c which is
+ * Copyright 1992 by Orest Zborowski <obz@Kodak.com>
+ * Copyright 1993 by David Dawes <dawes@xfree86.org>
++ *
++ * Portions based on kbdrate.c from util-linux 2.9t, which is
++ * Copyright 1992 Rickard E. Faith. Distributed under the GPL.
++ * This program comes with ABSOLUTELY NO WARRANTY.
+ */
+
+ #define NEED_EVENTS
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.c xf86-input-keyboard/src/sun_kbd.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbd.c 2006-11-01 22:18:26.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbd.c 2007-09-03 10:34:00.000000000 +0000
+@@ -22,7 +22,7 @@
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+-/* Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved.
++/* Copyright 2004-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+@@ -59,42 +59,36 @@
+ #include "xf86_OSlib.h"
+ #include "xf86OSKbd.h"
+ #include "sun_kbd.h"
+-
+-/***************************************************************************
+- * Common implementation of routines shared by "keyboard" driver in sun_io.c
+- * and "kbd" driver (later on in this file)
+- */
++#include "atKeynames.h"
+
+ #include <sys/stropts.h>
+ #include <sys/vuid_event.h>
+ #include <sys/kbd.h>
+
+-_X_HIDDEN int
+-sunKbdOpen(const char *devName, pointer options)
++static void
++sunKbdSetLeds(InputInfoPtr pInfo, int leds)
+ {
+- int kbdFD;
+- const char *kbdPath = NULL;
+- const char *defaultKbd = "/dev/kbd";
++ int i;
+
+- if (options != NULL) {
+- kbdPath = xf86SetStrOption(options, "Device", NULL);
+- }
+- if (kbdPath == NULL) {
+- kbdPath = defaultKbd;
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSLED, &leds));
++ if (i < 0) {
++ xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
++ pInfo->name, strerror(errno));
+ }
++}
+
+- kbdFD = open(kbdPath, O_RDONLY | O_NONBLOCK);
+-
+- if (kbdFD == -1) {
+- xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", devName, kbdPath);
+- } else {
+- xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", devName, kbdPath);
+- }
+-
+- if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
+- xfree(kbdPath);
++
++static int
++sunKbdGetLeds(InputInfoPtr pInfo)
++{
++ int i, leds = 0;
++
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGLED, &leds));
++ if (i < 0) {
++ xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
++ pInfo->name, strerror(errno));
+ }
+- return kbdFD;
++ return leds;
+ }
+
+
+@@ -102,15 +96,16 @@
+ * Save initial keyboard state. This is called at the start of each server
+ * generation.
+ */
+-
+-_X_HIDDEN int
+-sunKbdInit(sunKbdPrivPtr priv, int kbdFD, const char *devName, pointer options)
++static int
++KbdInit(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++ pointer options = pInfo->options;
++
+ int ktype, klayout, i;
+ const char *ktype_name;
+
+- priv->kbdFD = kbdFD;
+- priv->devName = devName;
+ priv->otranslation = -1;
+ priv->odirect = -1;
+
+@@ -121,25 +116,25 @@
+ }
+
+ if (priv->strmod) {
+- SYSCALL(i = ioctl(priv->kbdFD, I_PUSH, priv->strmod));
++ SYSCALL(i = ioctl(pInfo->fd, I_PUSH, priv->strmod));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: cannot push module '%s' onto keyboard device: %s\n",
+- priv->devName, priv->strmod, strerror(errno));
++ pInfo->name, priv->strmod, strerror(errno));
+ }
+ }
+
+- SYSCALL(i = ioctl(kbdFD, KIOCTYPE, &ktype));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTYPE, &ktype));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to determine keyboard type: %s\n",
+- devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+- SYSCALL(i = ioctl(kbdFD, KIOCLAYOUT, &klayout));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCLAYOUT, &klayout));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to determine keyboard layout: %s\n",
+- devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+@@ -157,213 +152,181 @@
+ }
+
+ xf86Msg(X_PROBED, "%s: Keyboard type: %s (%d)\n",
+- devName, ktype_name, ktype);
+- xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", devName, klayout);
++ pInfo->name, ktype_name, ktype);
++ xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", pInfo->name, klayout);
+
+ priv->ktype = ktype;
+- priv->keyMap = sunGetKbdMapping(ktype);
+- priv->oleds = sunKbdGetLeds(priv);
++ priv->oleds = sunKbdGetLeds(pInfo);
+
+ return Success;
+ }
+
+-_X_HIDDEN int
+-sunKbdOn(sunKbdPrivPtr priv)
++
++static int
++KbdOn(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int ktrans, kdirect, i;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGDIRECT, &kdirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGDIRECT, &kdirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to determine keyboard direct setting: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ priv->odirect = kdirect;
+ kdirect = 1;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &kdirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &kdirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed turning keyboard direct mode on: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ /* Setup translation */
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGTRANS, &ktrans));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCGTRANS, &ktrans));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to determine keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
+ priv->otranslation = ktrans;
+ ktrans = TR_UNTRANS_EVENT;
+
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &ktrans));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &ktrans));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed setting keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+
++ /* If Caps Lock or Num Lock LEDs are on when server starts,
++ * send a fake key down on those keys to set the server state
++ * to match the LED's.
++ */
++ if ( priv->oleds & (LED_CAPS_LOCK | LED_NUM_LOCK) ) {
++ int capslock = -1;
++ int numlock = -1;
++ int j;
++ TransMapPtr kmap = pKbd->scancodeMap;
++
++ for (j = kmap->begin; j < kmap->end ; j++) {
++ switch (kmap->map[j]) {
++ case KEY_CapsLock:
++ capslock = j;
++ break;
++ case KEY_NumLock:
++ numlock = j;
++ break;
++ default:
++ /* nothing to do */
++ break;
++ }
++ if ((capslock >= 0) && (numlock >= 0)) {
++ break;
++ }
++ }
++ if ((priv->oleds & LED_CAPS_LOCK) && (capslock > 0)) {
++ pKbd->PostEvent(pInfo, capslock, TRUE); /* Press */
++ pKbd->PostEvent(pInfo, capslock, FALSE); /* Release */
++ }
++ if ((priv->oleds & LED_NUM_LOCK) && (numlock > 0)) {
++ pKbd->PostEvent(pInfo, numlock, TRUE); /* Press */
++ pKbd->PostEvent(pInfo, numlock, FALSE); /* Release */
++ }
++ }
++
+ return Success;
+ }
+
+-_X_HIDDEN int
+-sunKbdOff(sunKbdPrivPtr priv)
++static int
++KbdOff(InputInfoPtr pInfo, int what)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int i;
+
+ /* restore original state */
+
+- sunKbdSetLeds(priv, priv->oleds);
++ sunKbdSetLeds(pInfo, priv->oleds);
+
+ if (priv->otranslation != -1) {
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &priv->otranslation));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &priv->otranslation));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to restore keyboard translation mode: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+ priv->otranslation = -1;
+ }
+
+ if (priv->odirect != -1) {
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &priv->odirect));
++ SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &priv->odirect));
+ if (i < 0) {
+ xf86Msg(X_ERROR,
+ "%s: Unable to restore keyboard direct setting: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ return BadImplementation;
+ }
+ priv->odirect = -1;
+ }
+
+ if (priv->strmod) {
+- SYSCALL(i = ioctl(priv->kbdFD, I_POP, priv->strmod));
++ SYSCALL(i = ioctl(pInfo->fd, I_POP, priv->strmod));
+ if (i < 0) {
+ xf86Msg(X_WARNING,
+ "%s: cannot pop module '%s' off keyboard device: %s\n",
+- priv->devName, priv->strmod, strerror(errno));
++ pInfo->name, priv->strmod, strerror(errno));
+ }
+ }
+
+ return Success;
+ }
+
+-_X_HIDDEN void
+-sunKbdSoundBell(sunKbdPrivPtr priv, int loudness, int pitch, int duration)
++
++static void
++SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
+ {
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++
+ int kbdCmd, i;
+
+ if (loudness && pitch)
+ {
+ kbdCmd = KBD_CMD_BELL;
+
+- SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
++ SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed to activate bell: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ }
+
+ usleep(duration * loudness * 20);
+
+ kbdCmd = KBD_CMD_NOBELL;
+- SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
++ SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
+ if (i < 0) {
+ xf86Msg(X_ERROR, "%s: Failed to deactivate bell: %s\n",
+- priv->devName, strerror(errno));
++ pInfo->name, strerror(errno));
+ }
+ }
+ }
+
+-_X_HIDDEN void
+-sunKbdSetLeds(sunKbdPrivPtr priv, int leds)
+-{
+- int i;
+-
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCSLED, &leds));
+- if (i < 0) {
+- xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
+- priv->devName, strerror(errno));
+- }
+-}
+-
+-_X_HIDDEN int
+-sunKbdGetLeds(sunKbdPrivPtr priv)
+-{
+- int i, leds = 0;
+-
+- SYSCALL(i = ioctl(priv->kbdFD, KIOCGLED, &leds));
+- if (i < 0) {
+- xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
+- priv->devName, strerror(errno));
+- }
+- return leds;
+-}
+-
+-/* ARGSUSED0 */
+-_X_HIDDEN void
+-sunKbdSetRepeat(sunKbdPrivPtr priv, char rad)
+-{
+- /* Nothing to do */
+-}
+-
+-/***************************************************************************
+- * Routines called from "kbd" driver via proc vectors filled in by
+- * xf86OSKbdPreInit().
+- */
+-
+-
+-static int
+-KbdInit(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdInit(priv, pInfo->fd, pInfo->name, pInfo->options);
+-}
+-
+-
+-static int
+-KbdOn(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdOn(priv);
+-}
+-
+-static int
+-KbdOff(InputInfoPtr pInfo, int what)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- return sunKbdOff(priv);
+-}
+-
+-
+-static void
+-SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
+-{
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- sunKbdSoundBell(priv, loudness, pitch, duration);
+-}
+-
+ static void
+ SetKbdLeds(InputInfoPtr pInfo, int leds)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+- int real_leds = sunKbdGetLeds(priv);
++ int real_leds = sunKbdGetLeds(pInfo);
+
+ real_leds &= ~(LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_COMPOSE);
+
+@@ -372,16 +335,14 @@
+ if (leds & XLED3) real_leds |= LED_SCROLL_LOCK;
+ if (leds & XLED4) real_leds |= LED_COMPOSE;
+
+- sunKbdSetLeds(priv, real_leds);
++ sunKbdSetLeds(pInfo, real_leds);
+ }
+
+ static int
+ GetKbdLeds(InputInfoPtr pInfo)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+ int leds = 0;
+- int real_leds = sunKbdGetLeds(priv);
++ int real_leds = sunKbdGetLeds(pInfo);
+
+ if (real_leds & LED_CAPS_LOCK) leds |= XLED1;
+ if (real_leds & LED_NUM_LOCK) leds |= XLED2;
+@@ -391,27 +352,17 @@
+ return leds;
+ }
+
++/* ARGSUSED0 */
+ static void
+ SetKbdRepeat(InputInfoPtr pInfo, char rad)
+ {
+- KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+-
+- sunKbdSetRepeat(priv, rad);
+-}
+-
+-static void
+-KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
+-{
+- /* Should probably do something better here */
+- xf86KbdGetMapping(pKeySyms, pModMap);
++ /* Nothing to do */
+ }
+
+ static void
+ ReadInput(InputInfoPtr pInfo)
+ {
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+- sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+ Firm_event event[64];
+ int nBytes, i;
+
+@@ -420,7 +371,7 @@
+ if ((nBytes = read(pInfo->fd, (char *)event, sizeof(event))) > 0)
+ {
+ for (i = 0; i < (nBytes / sizeof(Firm_event)); i++) {
+- pKbd->PostEvent(pInfo, priv->keyMap[event[i].id],
++ pKbd->PostEvent(pInfo, event[i].id & 0xFF,
+ event[i].value == VKEY_DOWN ? TRUE : FALSE);
+ }
+ }
+@@ -429,13 +380,34 @@
+ static Bool
+ OpenKeyboard(InputInfoPtr pInfo)
+ {
+- pInfo->fd = sunKbdOpen(pInfo->name, pInfo->options);
++ const char *kbdPath = NULL;
++ const char *defaultKbd = "/dev/kbd";
+
+- if (pInfo->fd >= 0) {
+- pInfo->read_input = ReadInput;
+- return TRUE;
++ if (pInfo->options != NULL) {
++ kbdPath = xf86SetStrOption(pInfo->options, "Device", NULL);
++ }
++ if (kbdPath == NULL) {
++ kbdPath = defaultKbd;
++ }
++
++ pInfo->fd = open(kbdPath, O_RDONLY | O_NONBLOCK);
++
++ if (pInfo->fd == -1) {
++ xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", pInfo->name, kbdPath);
+ } else {
++ xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", pInfo->name,
++ kbdPath);
++ }
++
++ if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
++ xfree(kbdPath);
++ }
++
++ if (pInfo->fd == -1) {
+ return FALSE;
++ } else {
++ pInfo->read_input = ReadInput;
++ return TRUE;
+ }
+ }
+
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.h xf86-input-keyboard/src/sun_kbd.h
+--- xf86-input-keyboard-1.2.0/src/sun_kbd.h 2006-11-01 22:18:26.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbd.h 2007-09-03 10:34:00.000000000 +0000
+@@ -1,4 +1,4 @@
+-/* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
++/* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+@@ -29,41 +29,16 @@
+ #ifndef _XORG_SUN_KBD_H_
+ #define _XORG_SUN_KBD_H_
+
+-/*
+- * Keyboard common implementation routines shared by "keyboard" driver
+- * in sun_io.c and "kbd" driver in sun_kbd.c
+- */
+-
+ typedef struct {
+- int kbdFD;
+- const char * devName;
+ int ktype; /* Keyboard type from KIOCTYPE */
+ Bool kbdActive; /* Have we set kbd modes for X? */
+ int otranslation; /* Original translation mode */
+ int odirect; /* Original "direct" mode setting */
+ unsigned char oleds; /* Original LED state */
+ const char * strmod; /* Streams module pushed on kbd device */
+- const unsigned char *keyMap;
+ } sunKbdPrivRec, *sunKbdPrivPtr;
+
+-/* sun_kbd.c */
+-extern int sunKbdOpen (const char *devName, pointer options);
+-extern int sunKbdInit (sunKbdPrivPtr priv, int kbdFD,
+- const char *devName, pointer options);
+-extern int sunKbdOn (sunKbdPrivPtr priv);
+-extern int sunKbdOff (sunKbdPrivPtr priv);
+-
+-extern void sunKbdSoundBell (sunKbdPrivPtr priv,
+- int loudness, int pitch, int duration);
+-
+-extern void sunKbdSetLeds (sunKbdPrivPtr priv, int leds);
+-extern int sunKbdGetLeds (sunKbdPrivPtr priv);
+-extern void sunKbdSetRepeat (sunKbdPrivPtr priv, char rad);
+-
+-/* sun_kbdEv.c */
+-#include <sys/vuid_event.h>
+-extern void sunPostKbdEvent (int ktype, Firm_event *event);
+-
+-extern const unsigned char *sunGetKbdMapping(int ktype);
+-
++/* sun_kbdMap.c */
++extern void KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms,
++ CARD8 *pModMap);
+ #endif
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdEv.c xf86-input-keyboard/src/sun_kbdEv.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbdEv.c 2006-11-01 22:18:27.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbdEv.c 1970-01-01 00:00:00.000000000 +0000
+@@ -1,855 +0,0 @@
+-/*
+- * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+- * Copyright 1993 by David Dawes <dawes@xfree86.org>
+- *
+- * Permission to use, copy, modify, distribute, and sell this software and its
+- * documentation for any purpose is hereby granted without fee, provided that
+- * the above copyright notice appear in all copies and that both that copyright
+- * notice and this permission notice appear in supporting documentation, and
+- * that the names of Thomas Roell and David Dawes not be used in advertising or
+- * publicity pertaining to distribution of the software without specific,
+- * written prior permission. Thomas Roell and David Dawes make no
+- * representations about the suitability of this software for any purpose. It
+- * is provided "as is" without express or implied warranty.
+- *
+- * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+- * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
+- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+- * PERFORMANCE OF THIS SOFTWARE.
+- */
+-
+-/* [JCH-96/01/21] Extended std reverse map to four buttons. */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#endif
+-
+-#include "xf86.h"
+-#include "xf86Priv.h"
+-#include "xf86_OSlib.h"
+-#include "xf86OSKbd.h"
+-#include "sun_kbd.h"
+-
+-#ifdef XINPUT
+-#include <X11/extensions/XI.h>
+-#include <X11/extensions/XIproto.h>
+-#include "xf86Xinput.h"
+-#endif
+-
+-#include "inputstr.h"
+-
+-#include <sys/kbd.h>
+-#include "atKeynames.h"
+-
+-#ifdef XKB
+-extern Bool noXkbExtension;
+-#endif
+-
+-#define XE_POINTER 1
+-#define XE_KEYBOARD 2
+-
+-#ifdef XINPUT
+-#define ENQUEUE(ev, code, direction, dev_type) \
+- (ev)->u.u.detail = (code); \
+- (ev)->u.u.type = (direction); \
+- xf86eqEnqueue((ev))
+-#else
+-#define ENQUEUE(ev, code, direction, dev_type) \
+- (ev)->u.u.detail = (code); \
+- (ev)->u.u.type = (direction); \
+- mieqEnqueue((ev))
+-#endif
+-
+-static void startautorepeat(long keycode);
+-static CARD32 processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg);
+-
+-static OsTimerPtr sunTimer = NULL;
+-
+-/* Map the Solaris keycodes to the "XFree86" keycodes. */
+-/*
+- * This doesn't seem right. It probably needs to be dependent on a keyboard
+- * type.
+- */
+-
+-/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
+-#define KEY_Kanji 0x82
+-#define KEY_Execute 0x83
+-
+-static unsigned char map[256] = {
+-#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
+- KEY_NOTUSED, /* 0 */
+- KEY_Tilde, /* 1 */
+- KEY_1, /* 2 */
+- KEY_2, /* 3 */
+- KEY_3, /* 4 */
+- KEY_4, /* 5 */
+- KEY_5, /* 6 */
+- KEY_6, /* 7 */
+- KEY_7, /* 8 */
+- KEY_8, /* 9 */
+- KEY_9, /* 10 */
+- KEY_0, /* 11 */
+- KEY_Minus, /* 12 */
+- KEY_Equal, /* 13 */
+- 0x7D, /*KEY_P_YEN*/ /* 14 */
+- KEY_BackSpace, /* 15 */
+- KEY_Tab, /* 16 */
+- KEY_Q, /* 17 */
+- KEY_W, /* 18 */
+- KEY_E, /* 19 */
+- KEY_R, /* 20 */
+- KEY_T, /* 21 */
+- KEY_Y, /* 22 */
+- KEY_U, /* 23 */
+- KEY_I, /* 24 */
+- KEY_O, /* 25 */
+- KEY_P, /* 26 */
+- KEY_LBrace, /* 27 */
+- KEY_RBrace, /* 28 */
+- KEY_BSlash, /* 29 */
+- KEY_CapsLock, /* 30 */
+- KEY_A, /* 31 */
+- KEY_S, /* 32 */
+- KEY_D, /* 33 */
+- KEY_F, /* 34 */
+- KEY_G, /* 35 */
+- KEY_H, /* 36 */
+- KEY_J, /* 37 */
+- KEY_K, /* 38 */
+- KEY_L, /* 39 */
+- KEY_SemiColon, /* 40 */
+- KEY_Quote, /* 41 */
+- KEY_UNKNOWN, /* 42 */
+- KEY_Enter, /* 43 */
+- KEY_ShiftL, /* 44 */
+- KEY_Less, /* 45 */
+- KEY_Z, /* 46 */
+- KEY_X, /* 47 */
+- KEY_C, /* 48 */
+- KEY_V, /* 49 */
+- KEY_B, /* 50 */
+- KEY_N, /* 51 */
+- KEY_M, /* 52 */
+- KEY_Comma, /* 53 */
+- KEY_Period, /* 54 */
+- KEY_Slash, /* 55 */
+- KEY_BSlash2, /* 56 */
+- KEY_ShiftR, /* 57 */
+- KEY_LCtrl, /* 58 */
+- KEY_LMeta, /* 59 */
+- KEY_Alt, /* 60 */
+- KEY_Space, /* 61 */
+- KEY_AltLang, /* 62 */
+- KEY_RMeta, /* 63 */
+- KEY_RCtrl, /* 64 */
+- KEY_Menu, /* 65 */
+- KEY_UNKNOWN, /* 66 */
+- KEY_UNKNOWN, /* 67 */
+- KEY_UNKNOWN, /* 68 */
+- KEY_UNKNOWN, /* 69 */
+- KEY_UNKNOWN, /* 70 */
+- KEY_UNKNOWN, /* 71 */
+- KEY_UNKNOWN, /* 72 */
+- KEY_UNKNOWN, /* 73 */
+- KEY_UNKNOWN, /* 74 */
+- KEY_Insert, /* 75 */
+- KEY_Delete, /* 76 */
+- KEY_UNKNOWN, /* 77 */
+- KEY_UNKNOWN, /* 78 */
+- KEY_Left, /* 79 */
+- KEY_Home, /* 80 */
+- KEY_End, /* 81 */
+- KEY_UNKNOWN, /* 82 */
+- KEY_Up, /* 83 */
+- KEY_Down, /* 84 */
+- KEY_PgUp, /* 85 */
+- KEY_PgDown, /* 86 */
+- KEY_UNKNOWN, /* 87 */
+- KEY_UNKNOWN, /* 88 */
+- KEY_Right, /* 89 */
+- KEY_NumLock, /* 90 */
+- KEY_KP_7, /* 91 */
+- KEY_KP_4, /* 92 */
+- KEY_KP_1, /* 93 */
+- KEY_UNKNOWN, /* 94 */
+- KEY_KP_Divide, /* 95 */
+- KEY_KP_8, /* 96 */
+- KEY_KP_5, /* 97 */
+- KEY_KP_2, /* 98 */
+- KEY_KP_0, /* 99 */
+- KEY_KP_Multiply, /* 100 */
+- KEY_KP_9, /* 101 */
+- KEY_KP_6, /* 102 */
+- KEY_KP_3, /* 103 */
+- KEY_KP_Decimal, /* 104 */
+- KEY_KP_Minus, /* 105 */
+- KEY_KP_Plus, /* 106 */
+- KEY_UNKNOWN, /* 107 */
+- KEY_KP_Enter, /* 108 */
+- KEY_UNKNOWN, /* 109 */
+- KEY_Escape, /* 110 */
+- KEY_UNKNOWN, /* 111 */
+- KEY_F1, /* 112 */
+- KEY_F2, /* 113 */
+- KEY_F3, /* 114 */
+- KEY_F4, /* 115 */
+- KEY_F5, /* 116 */
+- KEY_F6, /* 117 */
+- KEY_F7, /* 118 */
+- KEY_F8, /* 119 */
+- KEY_F9, /* 120 */
+- KEY_F10, /* 121 */
+- KEY_F11, /* 122 */
+- KEY_F12, /* 123 */
+- KEY_Print, /* 124 */
+- KEY_ScrollLock, /* 125 */
+- KEY_Pause, /* 126 */
+- KEY_UNKNOWN, /* 127 */
+- KEY_UNKNOWN, /* 128 */
+- KEY_UNKNOWN, /* 129 */
+- KEY_UNKNOWN, /* 130 */
+- KEY_NFER, /* 131 */
+- KEY_XFER, /* 132 */
+- KEY_HKTG, /* 133 */
+- KEY_UNKNOWN, /* 134 */
+-#elif defined(sparc) || defined(__sparc__)
+- KEY_UNKNOWN, /* 0x00 */
+- KEY_UNKNOWN, /* 0x01 */
+- KEY_UNKNOWN, /* 0x02 */
+- KEY_UNKNOWN, /* 0x03 */
+- KEY_UNKNOWN, /* 0x04 */
+- KEY_F1, /* 0x05 */
+- KEY_F2, /* 0x06 */
+- KEY_F10, /* 0x07 */
+- KEY_F3, /* 0x08 */
+- KEY_F11, /* 0x09 */
+- KEY_F4, /* 0x0A */
+- KEY_F12, /* 0x0B */
+- KEY_F5, /* 0x0C */
+- KEY_UNKNOWN, /* 0x0D */
+- KEY_F6, /* 0x0E */
+- KEY_UNKNOWN, /* 0x0F */
+- KEY_F7, /* 0x10 */
+- KEY_F8, /* 0x11 */
+- KEY_F9, /* 0x12 */
+- KEY_Alt, /* 0x13 */
+- KEY_Up, /* 0x14 */
+- KEY_Pause, /* 0x15 */
+- KEY_SysReqest, /* 0x16 */
+- KEY_ScrollLock, /* 0x17 */
+- KEY_Left, /* 0x18 */
+- KEY_UNKNOWN, /* 0x19 */
+- KEY_UNKNOWN, /* 0x1A */
+- KEY_Down, /* 0x1B */
+- KEY_Right, /* 0x1C */
+- KEY_Escape, /* 0x1D */
+- KEY_1, /* 0x1E */
+- KEY_2, /* 0x1F */
+- KEY_3, /* 0x20 */
+- KEY_4, /* 0x21 */
+- KEY_5, /* 0x22 */
+- KEY_6, /* 0x23 */
+- KEY_7, /* 0x24 */
+- KEY_8, /* 0x25 */
+- KEY_9, /* 0x26 */
+- KEY_0, /* 0x27 */
+- KEY_Minus, /* 0x28 */
+- KEY_Equal, /* 0x29 */
+- KEY_Tilde, /* 0x2A */
+- KEY_BackSpace, /* 0x2B */
+- KEY_Insert, /* 0x2C */
+- KEY_UNKNOWN, /* 0x2D */
+- KEY_KP_Divide, /* 0x2E */
+- KEY_KP_Multiply, /* 0x2F */
+- KEY_UNKNOWN, /* 0x30 */
+- KEY_UNKNOWN, /* 0x31 */
+- KEY_KP_Decimal, /* 0x32 */
+- KEY_UNKNOWN, /* 0x33 */
+- KEY_Home, /* 0x34 */
+- KEY_Tab, /* 0x35 */
+- KEY_Q, /* 0x36 */
+- KEY_W, /* 0x37 */
+- KEY_E, /* 0x38 */
+- KEY_R, /* 0x39 */
+- KEY_T, /* 0x3A */
+- KEY_Y, /* 0x3B */
+- KEY_U, /* 0x3C */
+- KEY_I, /* 0x3D */
+- KEY_O, /* 0x3E */
+- KEY_P, /* 0x3F */
+- KEY_LBrace, /* 0x40 */
+- KEY_RBrace, /* 0x41 */
+- KEY_Delete, /* 0x42 */
+- KEY_UNKNOWN, /* 0x43 */
+- KEY_KP_7, /* 0x44 */
+- KEY_KP_8, /* 0x45 */
+- KEY_KP_9, /* 0x46 */
+- KEY_KP_Minus, /* 0x47 */
+- KEY_UNKNOWN, /* 0x48 */
+- KEY_UNKNOWN, /* 0x49 */
+- KEY_End, /* 0x4A */
+- KEY_UNKNOWN, /* 0x4B */
+- KEY_LCtrl, /* 0x4C */
+- KEY_A, /* 0x4D */
+- KEY_S, /* 0x4E */
+- KEY_D, /* 0x4F */
+- KEY_F, /* 0x50 */
+- KEY_G, /* 0x51 */
+- KEY_H, /* 0x52 */
+- KEY_J, /* 0x53 */
+- KEY_K, /* 0x54 */
+- KEY_L, /* 0x55 */
+- KEY_SemiColon, /* 0x56 */
+- KEY_Quote, /* 0x57 */
+- KEY_BSlash, /* 0x58 */
+- KEY_Enter, /* 0x59 */
+- KEY_KP_Enter, /* 0x5A */
+- KEY_KP_4, /* 0x5B */
+- KEY_KP_5, /* 0x5C */
+- KEY_KP_6, /* 0x5D */
+- KEY_KP_0, /* 0x5E */
+- KEY_UNKNOWN, /* 0x5F */
+- KEY_PgUp, /* 0x60 */
+- KEY_UNKNOWN, /* 0x61 */
+- KEY_NumLock, /* 0x62 */
+- KEY_ShiftL, /* 0x63 */
+- KEY_Z, /* 0x64 */
+- KEY_X, /* 0x65 */
+- KEY_C, /* 0x66 */
+- KEY_V, /* 0x67 */
+- KEY_B, /* 0x68 */
+- KEY_N, /* 0x69 */
+- KEY_M, /* 0x6A */
+- KEY_Comma, /* 0x6B */
+- KEY_Period, /* 0x6C */
+- KEY_Slash, /* 0x6D */
+- KEY_ShiftR, /* 0x6E */
+- KEY_UNKNOWN, /* 0x6F */
+- KEY_KP_1, /* 0x70 */
+- KEY_KP_2, /* 0x71 */
+- KEY_KP_3, /* 0x72 */
+- KEY_UNKNOWN, /* 0x73 */
+- KEY_UNKNOWN, /* 0x74 */
+- KEY_UNKNOWN, /* 0x75 */
+- KEY_UNKNOWN, /* 0x76 */
+- KEY_CapsLock, /* 0x77 */
+- KEY_LMeta, /* 0x78 */
+- KEY_Space, /* 0x79 */
+- KEY_RMeta, /* 0x7A */
+- KEY_PgDown, /* 0x7B */
+- KEY_UNKNOWN, /* 0x7C */
+- KEY_KP_Plus, /* 0x7D */
+- KEY_UNKNOWN, /* 0x7E */
+- KEY_UNKNOWN, /* 0x7F */
+-#endif
+- /* The rest default to KEY_UNKNOWN */
+-};
+-
+-#if defined(KB_USB)
+-static unsigned char usbmap[256] = {
+-/*
+- * partially taken from ../bsd/bsd_KbdMap.c
+- *
+- * added keycodes for Sun special keys (left function keys, audio control)
+- */
+- /* 0 */ KEY_NOTUSED,
+- /* 1 */ KEY_NOTUSED,
+- /* 2 */ KEY_NOTUSED,
+- /* 3 */ KEY_NOTUSED,
+- /* 4 */ KEY_A,
+- /* 5 */ KEY_B,
+- /* 6 */ KEY_C,
+- /* 7 */ KEY_D,
+- /* 8 */ KEY_E,
+- /* 9 */ KEY_F,
+- /* 10 */ KEY_G,
+- /* 11 */ KEY_H,
+- /* 12 */ KEY_I,
+- /* 13 */ KEY_J,
+- /* 14 */ KEY_K,
+- /* 15 */ KEY_L,
+- /* 16 */ KEY_M,
+- /* 17 */ KEY_N,
+- /* 18 */ KEY_O,
+- /* 19 */ KEY_P,
+- /* 20 */ KEY_Q,
+- /* 21 */ KEY_R,
+- /* 22 */ KEY_S,
+- /* 23 */ KEY_T,
+- /* 24 */ KEY_U,
+- /* 25 */ KEY_V,
+- /* 26 */ KEY_W,
+- /* 27 */ KEY_X,
+- /* 28 */ KEY_Y,
+- /* 29 */ KEY_Z,
+- /* 30 */ KEY_1, /* 1 !*/
+- /* 31 */ KEY_2, /* 2 @ */
+- /* 32 */ KEY_3, /* 3 # */
+- /* 33 */ KEY_4, /* 4 $ */
+- /* 34 */ KEY_5, /* 5 % */
+- /* 35 */ KEY_6, /* 6 ^ */
+- /* 36 */ KEY_7, /* 7 & */
+- /* 37 */ KEY_8, /* 8 * */
+- /* 38 */ KEY_9, /* 9 ( */
+- /* 39 */ KEY_0, /* 0 ) */
+- /* 40 */ KEY_Enter, /* Return */
+- /* 41 */ KEY_Escape, /* Escape */
+- /* 42 */ KEY_BackSpace, /* Backspace Delete */
+- /* 43 */ KEY_Tab, /* Tab */
+- /* 44 */ KEY_Space, /* Space */
+- /* 45 */ KEY_Minus, /* - _ */
+- /* 46 */ KEY_Equal, /* = + */
+- /* 47 */ KEY_LBrace, /* [ { */
+- /* 48 */ KEY_RBrace, /* ] } */
+- /* 49 */ KEY_BSlash, /* \ | */
+- /* 50 */ KEY_BSlash, /* \ _ # ~ on some keyboards */
+- /* 51 */ KEY_SemiColon, /* ; : */
+- /* 52 */ KEY_Quote, /* ' " */
+- /* 53 */ KEY_Tilde, /* ` ~ */
+- /* 54 */ KEY_Comma, /* , < */
+- /* 55 */ KEY_Period, /* . > */
+- /* 56 */ KEY_Slash, /* / ? */
+- /* 57 */ KEY_CapsLock, /* Caps Lock */
+- /* 58 */ KEY_F1, /* F1 */
+- /* 59 */ KEY_F2, /* F2 */
+- /* 60 */ KEY_F3, /* F3 */
+- /* 61 */ KEY_F4, /* F4 */
+- /* 62 */ KEY_F5, /* F5 */
+- /* 63 */ KEY_F6, /* F6 */
+- /* 64 */ KEY_F7, /* F7 */
+- /* 65 */ KEY_F8, /* F8 */
+- /* 66 */ KEY_F9, /* F9 */
+- /* 67 */ KEY_F10, /* F10 */
+- /* 68 */ KEY_F11, /* F11 */
+- /* 69 */ KEY_F12, /* F12 */
+- /* 70 */ KEY_Print, /* PrintScrn SysReq */
+- /* 71 */ KEY_ScrollLock, /* Scroll Lock */
+- /* 72 */ KEY_Pause, /* Pause Break */
+- /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
+- /* 74 */ KEY_Home, /* Home */
+- /* 75 */ KEY_PgUp, /* Page Up */
+- /* 76 */ KEY_Delete, /* Delete */
+- /* 77 */ KEY_End, /* End */
+- /* 78 */ KEY_PgDown, /* Page Down */
+- /* 79 */ KEY_Right, /* Right Arrow */
+- /* 80 */ KEY_Left, /* Left Arrow */
+- /* 81 */ KEY_Down, /* Down Arrow */
+- /* 82 */ KEY_Up, /* Up Arrow */
+- /* 83 */ KEY_NumLock, /* Num Lock */
+- /* 84 */ KEY_KP_Divide, /* Keypad / */
+- /* 85 */ KEY_KP_Multiply, /* Keypad * */
+- /* 86 */ KEY_KP_Minus, /* Keypad - */
+- /* 87 */ KEY_KP_Plus, /* Keypad + */
+- /* 88 */ KEY_KP_Enter, /* Keypad Enter */
+- /* 89 */ KEY_KP_1, /* Keypad 1 End */
+- /* 90 */ KEY_KP_2, /* Keypad 2 Down */
+- /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
+- /* 92 */ KEY_KP_4, /* Keypad 4 Left */
+- /* 93 */ KEY_KP_5, /* Keypad 5 */
+- /* 94 */ KEY_KP_6, /* Keypad 6 */
+- /* 95 */ KEY_KP_7, /* Keypad 7 Home */
+- /* 96 */ KEY_KP_8, /* Keypad 8 Up */
+- /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
+- /* 98 */ KEY_KP_0, /* Keypad 0 Ins */
+- /* 99 */ KEY_KP_Decimal, /* Keypad . Del */
+- /* 100 */ KEY_Less, /* < > on some keyboards */
+- /* 101 */ KEY_Menu, /* Menu */
+- /* 102 */ KEY_Power, /* Sun: Power */
+- /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
+- /* 104 */ KEY_NOTUSED,
+- /* 105 */ KEY_NOTUSED,
+- /* 106 */ KEY_NOTUSED,
+- /* 107 */ KEY_NOTUSED,
+- /* 108 */ KEY_NOTUSED,
+- /* 109 */ KEY_NOTUSED,
+- /* 110 */ KEY_NOTUSED,
+- /* 111 */ KEY_NOTUSED,
+- /* 112 */ KEY_NOTUSED,
+- /* 113 */ KEY_NOTUSED,
+- /* 114 */ KEY_NOTUSED,
+- /* 115 */ KEY_NOTUSED,
+- /* 116 */ KEY_L7, /* Sun: Open */
+- /* 117 */ KEY_Help, /* Sun: Help */
+- /* 118 */ KEY_L3, /* Sun: Props */
+- /* 119 */ KEY_L5, /* Sun: Front */
+- /* 120 */ KEY_L1, /* Sun: Stop */
+- /* 121 */ KEY_L2, /* Sun: Again */
+- /* 122 */ KEY_L4, /* Sun: Undo */
+- /* 123 */ KEY_L10, /* Sun: Cut */
+- /* 124 */ KEY_L6, /* Sun: Copy */
+- /* 125 */ KEY_L8, /* Sun: Paste */
+- /* 126 */ KEY_L9, /* Sun: Find */
+- /* 127 */ KEY_Mute, /* Sun: AudioMute */
+- /* 128 */ KEY_AudioRaise, /* Sun: AudioRaise */
+- /* 129 */ KEY_AudioLower, /* Sun: AudioLower */
+- /* 130 */ KEY_NOTUSED,
+- /* 131 */ KEY_NOTUSED,
+- /* 132 */ KEY_NOTUSED,
+- /* 133 */ KEY_NOTUSED,
+- /* 134 */ KEY_NOTUSED,
+- /* 135 */ KEY_BSlash2, /* Sun Japanese Kbd: Backslash / Underscore */
+- /* 136 */ KEY_XFER, /* Sun Japanese Kbd: Henkan Mode */
+- /* 137 */ KEY_Yen, /* Sun Japanese Kbd: Yen / Brokenbar */
+- /* 138 */ KEY_Kanji, /* Sun Japanese Kbd: Kanji */
+- /* 139 */ KEY_Execute, /* Sun Japanese Kbd: Execute */
+- /* 140 */ KEY_NOTUSED,
+- /* 141 */ KEY_NOTUSED,
+- /* 142 */ KEY_NOTUSED,
+- /* 143 */ KEY_NOTUSED,
+- /* 144 */ KEY_NOTUSED,
+- /* 145 */ KEY_NOTUSED,
+- /* 146 */ KEY_NOTUSED,
+- /* 147 */ KEY_NOTUSED,
+- /* 148 */ KEY_NOTUSED,
+- /* 149 */ KEY_NOTUSED,
+- /* 150 */ KEY_NOTUSED,
+- /* 151 */ KEY_NOTUSED,
+- /* 152 */ KEY_NOTUSED,
+- /* 153 */ KEY_NOTUSED,
+- /* 154 */ KEY_NOTUSED,
+- /* 155 */ KEY_NOTUSED,
+- /* 156 */ KEY_NOTUSED,
+- /* 157 */ KEY_NOTUSED,
+- /* 158 */ KEY_NOTUSED,
+- /* 159 */ KEY_NOTUSED,
+- /* 160 */ KEY_NOTUSED,
+- /* 161 */ KEY_NOTUSED,
+- /* 162 */ KEY_NOTUSED,
+- /* 163 */ KEY_NOTUSED,
+- /* 164 */ KEY_NOTUSED,
+- /* 165 */ KEY_NOTUSED,
+- /* 166 */ KEY_NOTUSED,
+- /* 167 */ KEY_NOTUSED,
+- /* 168 */ KEY_NOTUSED,
+- /* 169 */ KEY_NOTUSED,
+- /* 170 */ KEY_NOTUSED,
+- /* 171 */ KEY_NOTUSED,
+- /* 172 */ KEY_NOTUSED,
+- /* 173 */ KEY_NOTUSED,
+- /* 174 */ KEY_NOTUSED,
+- /* 175 */ KEY_NOTUSED,
+- /* 176 */ KEY_NOTUSED,
+- /* 177 */ KEY_NOTUSED,
+- /* 178 */ KEY_NOTUSED,
+- /* 179 */ KEY_NOTUSED,
+- /* 180 */ KEY_NOTUSED,
+- /* 181 */ KEY_NOTUSED,
+- /* 182 */ KEY_NOTUSED,
+- /* 183 */ KEY_NOTUSED,
+- /* 184 */ KEY_NOTUSED,
+- /* 185 */ KEY_NOTUSED,
+- /* 186 */ KEY_NOTUSED,
+- /* 187 */ KEY_NOTUSED,
+- /* 188 */ KEY_NOTUSED,
+- /* 189 */ KEY_NOTUSED,
+- /* 190 */ KEY_NOTUSED,
+- /* 191 */ KEY_NOTUSED,
+- /* 192 */ KEY_NOTUSED,
+- /* 193 */ KEY_NOTUSED,
+- /* 194 */ KEY_NOTUSED,
+- /* 195 */ KEY_NOTUSED,
+- /* 196 */ KEY_NOTUSED,
+- /* 197 */ KEY_NOTUSED,
+- /* 198 */ KEY_NOTUSED,
+- /* 199 */ KEY_NOTUSED,
+- /* 200 */ KEY_NOTUSED,
+- /* 201 */ KEY_NOTUSED,
+- /* 202 */ KEY_NOTUSED,
+- /* 203 */ KEY_NOTUSED,
+- /* 204 */ KEY_NOTUSED,
+- /* 205 */ KEY_NOTUSED,
+- /* 206 */ KEY_NOTUSED,
+- /* 207 */ KEY_NOTUSED,
+- /* 208 */ KEY_NOTUSED,
+- /* 209 */ KEY_NOTUSED,
+- /* 210 */ KEY_NOTUSED,
+- /* 211 */ KEY_NOTUSED,
+- /* 212 */ KEY_NOTUSED,
+- /* 213 */ KEY_NOTUSED,
+- /* 214 */ KEY_NOTUSED,
+- /* 215 */ KEY_NOTUSED,
+- /* 216 */ KEY_NOTUSED,
+- /* 217 */ KEY_NOTUSED,
+- /* 218 */ KEY_NOTUSED,
+- /* 219 */ KEY_NOTUSED,
+- /* 220 */ KEY_NOTUSED,
+- /* 221 */ KEY_NOTUSED,
+- /* 222 */ KEY_NOTUSED,
+- /* 223 */ KEY_NOTUSED,
+- /* 224 */ KEY_LCtrl, /* Left Control */
+- /* 225 */ KEY_ShiftL, /* Left Shift */
+- /* 226 */ KEY_Alt, /* Left Alt */
+- /* 227 */ KEY_LMeta, /* Left Meta */
+- /* 228 */ KEY_RCtrl, /* Right Control */
+- /* 229 */ KEY_ShiftR, /* Right Shift */
+- /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
+- /* 231 */ KEY_RMeta, /* Right Meta */
+-};
+-
+-#endif /* KB_USB */
+-
+-_X_HIDDEN const unsigned char *
+-sunGetKbdMapping(int ktype) {
+-#if defined(KB_USB)
+- if (ktype == KB_USB)
+- return usbmap;
+- else
+-#endif
+- return map;
+-}
+-
+-
+-/*
+- * sunPostKbdEvent --
+- * Translate the raw hardware Firm_event into an XEvent, and tell DIX
+- * about it. KeyCode preprocessing and so on is done ...
+- *
+- * Most of the Solaris stuff has whacked Panix/PC98 support in the
+- * interests of simplicity - DWH 8/30/99
+- */
+-
+-_X_HIDDEN void
+-sunPostKbdEvent(int sun_ktype, Firm_event *event)
+-{
+- Bool down;
+- KeyClassRec *keyc = ((DeviceIntPtr)xf86Info.pKeyboard)->key;
+- Bool updateLeds = FALSE;
+- xEvent kevent;
+- KeySym *keysym;
+- int keycode;
+- static int lockkeys = 0;
+-
+- /* Give down a value */
+- if (event->value == VKEY_DOWN)
+- down = TRUE;
+- else
+- down = FALSE;
+-
+-
+-#if defined(KB_USB)
+- if(sun_ktype == KB_USB)
+- keycode = usbmap[event->id];
+- else
+-#endif
+- keycode = map[event->id];
+-
+- /*
+- * and now get some special keysequences
+- */
+-
+-#ifdef XKB
+- if (((xf86Info.ddxSpecialKeys == SKWhenNeeded) &&
+- (!xf86Info.ActionKeyBindingsSet)) ||
+- noXkbExtension || (xf86Info.ddxSpecialKeys == SKAlways))
+-#endif
+- {
+- if (!(ModifierDown(ShiftMask)) &&
+- ((ModifierDown(ControlMask | AltMask)) ||
+- (ModifierDown(ControlMask | AltLangMask))))
+- {
+- switch (keycode) {
+- /*
+- * The idea here is to pass the scancode down to a list of
+- * registered routines. There should be some standard conventions
+- * for processing certain keys.
+- */
+- case KEY_BackSpace:
+- xf86ProcessActionEvent(ACTION_TERMINATE, NULL);
+- break;
+-
+- /*
+- * Check grabs
+- */
+- case KEY_KP_Divide:
+- xf86ProcessActionEvent(ACTION_DISABLEGRAB, NULL);
+- break;
+- case KEY_KP_Multiply:
+- xf86ProcessActionEvent(ACTION_CLOSECLIENT, NULL);
+- break;
+-
+- /*
+- * Video mode switches
+- */
+- case KEY_KP_Minus: /* Keypad - */
+- if (down) xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
+- if (!xf86Info.dontZoom) return;
+- break;
+-
+- case KEY_KP_Plus: /* Keypad + */
+- if (down) xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
+- if (!xf86Info.dontZoom) return;
+- break;
+- }
+- }
+- }
+-
+- /*
+- * Now map the scancodes to real X-keycodes ...
+- */
+- if (keycode == KEY_NOTUSED) {
+- xf86MsgVerb(X_INFO, 0,
+- "raw code %d mapped to KEY_NOTUSED -- please report\n", event->id);
+- return;
+- }
+- if (keycode == KEY_UNKNOWN) {
+- xf86MsgVerb(X_INFO, 0,
+- "raw code %d mapped to KEY_UNKNOWN -- please report\n", event->id);
+- return;
+- }
+- keycode += MIN_KEYCODE;
+- keysym = keyc->curKeySyms.map +
+- (keyc->curKeySyms.mapWidth *
+- (keycode - keyc->curKeySyms.minKeyCode));
+-
+-#ifdef XKB
+- if (noXkbExtension)
+-#endif
+- {
+- /*
+- * Toggle lock keys.
+- */
+-#define CAPSFLAG 0x01
+-#define NUMFLAG 0x02
+-#define SCROLLFLAG 0x04
+-#define MODEFLAG 0x08
+-
+- if (down) {
+- /*
+- * Handle the KeyPresses of the lock keys.
+- */
+-
+- switch (keysym[0]) {
+-
+- case XK_Caps_Lock:
+- if (lockkeys & CAPSFLAG) {
+- lockkeys &= ~CAPSFLAG;
+- return;
+- }
+- lockkeys |= CAPSFLAG;
+- updateLeds = TRUE;
+- xf86Info.capsLock = down;
+- break;
+-
+- case XK_Num_Lock:
+- if (lockkeys & NUMFLAG) {
+- lockkeys &= ~NUMFLAG;
+- return;
+- }
+- lockkeys |= NUMFLAG;
+- updateLeds = TRUE;
+- xf86Info.numLock = down;
+- break;
+-
+- case XK_Scroll_Lock:
+- if (lockkeys & SCROLLFLAG) {
+- lockkeys &= ~SCROLLFLAG;
+- return;
+- }
+- lockkeys |= SCROLLFLAG;
+- updateLeds = TRUE;
+- xf86Info.scrollLock = down;
+- break;
+- }
+- } else {
+- /*
+- * Handle the releases of the lock keys.
+- */
+-
+- switch (keysym[0]) {
+-
+- case XK_Caps_Lock:
+- if (lockkeys & CAPSFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.capsLock = down;
+- break;
+-
+- case XK_Num_Lock:
+- if (lockkeys & NUMFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.numLock = down;
+- break;
+-
+- case XK_Scroll_Lock:
+- if (lockkeys & SCROLLFLAG)
+- return;
+- updateLeds = TRUE;
+- xf86Info.scrollLock = down;
+- break;
+- }
+- }
+-
+- if (updateLeds)
+- xf86KbdLeds();
+-
+- /*
+- * If this keycode is not a modifier key, and its down initiate the
+- * autorepeate sequence. (Only necessary if not using XKB).
+- *
+- * If its not down, then reset the timer.
+- */
+- if (!keyc->modifierMap[keycode]) {
+- if (down) {
+- startautorepeat(keycode);
+- } else {
+- TimerFree(sunTimer);
+- sunTimer = NULL;
+- }
+- }
+- }
+-
+- xf86Info.lastEventTime =
+- kevent.u.keyButtonPointer.time =
+- GetTimeInMillis();
+-
+- /*
+- * And now send these prefixes ...
+- * NOTE: There cannot be multiple Mode_Switch keys !!!!
+- */
+-
+- ENQUEUE(&kevent, keycode, (down ? KeyPress : KeyRelease), XE_KEYBOARD);
+-}
+-
+-
+-
+-/*
+- * Autorepeat stuff
+- */
+-
+-void
+-startautorepeat(long keycode)
+-{
+- sunTimer = TimerSet(sunTimer, /* Timer */
+- 0, /* Flags */
+- xf86Info.kbdDelay, /* millis */
+- processautorepeat, /* callback */
+- (pointer) keycode); /* arg for timer */
+-}
+-
+-CARD32
+-processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg)
+-{
+- xEvent kevent;
+- int keycode;
+-
+- keycode = (long)arg;
+-
+- xf86Info.lastEventTime =
+- kevent.u.keyButtonPointer.time =
+- GetTimeInMillis();
+-
+- /*
+- * Repeat a key by faking a KeyRelease, and a KeyPress event in rapid
+- * succession
+- */
+-
+- ENQUEUE(&kevent, keycode, KeyRelease, XE_KEYBOARD);
+- ENQUEUE(&kevent, keycode, KeyPress, XE_KEYBOARD);
+-
+- /* And return the appropriate value so we get rescheduled */
+- return xf86Info.kbdRate;
+-}
+diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdMap.c xf86-input-keyboard/src/sun_kbdMap.c
+--- xf86-input-keyboard-1.2.0/src/sun_kbdMap.c 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/sun_kbdMap.c 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,671 @@
++/*
++ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
++ * Copyright 1993 by David Dawes <dawes@xfree86.org>
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the names of Thomas Roell and David Dawes not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. Thomas Roell and David Dawes make no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
++ * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
++ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
++ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <X11/Xfuncproto.h>
++#include <X11/Sunkeysym.h>
++#include "atKeynames.h"
++#include "xf86OSKbd.h"
++#include "xf86Keymap.h"
++#include "sun_kbd.h"
++
++#include <sys/kbd.h>
++
++/* Map the Solaris keycodes to the "XFree86" keycodes. */
++
++/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
++#define KEY_Kanji 0x82
++#define KEY_Execute 0x83
++
++static unsigned char sunmap[256] = {
++#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
++ KEY_NOTUSED, /* 0 */
++ KEY_Tilde, /* 1 */
++ KEY_1, /* 2 */
++ KEY_2, /* 3 */
++ KEY_3, /* 4 */
++ KEY_4, /* 5 */
++ KEY_5, /* 6 */
++ KEY_6, /* 7 */
++ KEY_7, /* 8 */
++ KEY_8, /* 9 */
++ KEY_9, /* 10 */
++ KEY_0, /* 11 */
++ KEY_Minus, /* 12 */
++ KEY_Equal, /* 13 */
++ 0x7D, /*KEY_P_YEN*/ /* 14 */
++ KEY_BackSpace, /* 15 */
++ KEY_Tab, /* 16 */
++ KEY_Q, /* 17 */
++ KEY_W, /* 18 */
++ KEY_E, /* 19 */
++ KEY_R, /* 20 */
++ KEY_T, /* 21 */
++ KEY_Y, /* 22 */
++ KEY_U, /* 23 */
++ KEY_I, /* 24 */
++ KEY_O, /* 25 */
++ KEY_P, /* 26 */
++ KEY_LBrace, /* 27 */
++ KEY_RBrace, /* 28 */
++ KEY_BSlash, /* 29 */
++ KEY_CapsLock, /* 30 */
++ KEY_A, /* 31 */
++ KEY_S, /* 32 */
++ KEY_D, /* 33 */
++ KEY_F, /* 34 */
++ KEY_G, /* 35 */
++ KEY_H, /* 36 */
++ KEY_J, /* 37 */
++ KEY_K, /* 38 */
++ KEY_L, /* 39 */
++ KEY_SemiColon, /* 40 */
++ KEY_Quote, /* 41 */
++ KEY_UNKNOWN, /* 42 */
++ KEY_Enter, /* 43 */
++ KEY_ShiftL, /* 44 */
++ KEY_Less, /* 45 */
++ KEY_Z, /* 46 */
++ KEY_X, /* 47 */
++ KEY_C, /* 48 */
++ KEY_V, /* 49 */
++ KEY_B, /* 50 */
++ KEY_N, /* 51 */
++ KEY_M, /* 52 */
++ KEY_Comma, /* 53 */
++ KEY_Period, /* 54 */
++ KEY_Slash, /* 55 */
++ KEY_BSlash2, /* 56 */
++ KEY_ShiftR, /* 57 */
++ KEY_LCtrl, /* 58 */
++ KEY_LMeta, /* 59 */
++ KEY_Alt, /* 60 */
++ KEY_Space, /* 61 */
++ KEY_AltLang, /* 62 */
++ KEY_RMeta, /* 63 */
++ KEY_RCtrl, /* 64 */
++ KEY_Menu, /* 65 */
++ KEY_UNKNOWN, /* 66 */
++ KEY_UNKNOWN, /* 67 */
++ KEY_UNKNOWN, /* 68 */
++ KEY_UNKNOWN, /* 69 */
++ KEY_UNKNOWN, /* 70 */
++ KEY_UNKNOWN, /* 71 */
++ KEY_UNKNOWN, /* 72 */
++ KEY_UNKNOWN, /* 73 */
++ KEY_UNKNOWN, /* 74 */
++ KEY_Insert, /* 75 */
++ KEY_Delete, /* 76 */
++ KEY_UNKNOWN, /* 77 */
++ KEY_UNKNOWN, /* 78 */
++ KEY_Left, /* 79 */
++ KEY_Home, /* 80 */
++ KEY_End, /* 81 */
++ KEY_UNKNOWN, /* 82 */
++ KEY_Up, /* 83 */
++ KEY_Down, /* 84 */
++ KEY_PgUp, /* 85 */
++ KEY_PgDown, /* 86 */
++ KEY_UNKNOWN, /* 87 */
++ KEY_UNKNOWN, /* 88 */
++ KEY_Right, /* 89 */
++ KEY_NumLock, /* 90 */
++ KEY_KP_7, /* 91 */
++ KEY_KP_4, /* 92 */
++ KEY_KP_1, /* 93 */
++ KEY_UNKNOWN, /* 94 */
++ KEY_KP_Divide, /* 95 */
++ KEY_KP_8, /* 96 */
++ KEY_KP_5, /* 97 */
++ KEY_KP_2, /* 98 */
++ KEY_KP_0, /* 99 */
++ KEY_KP_Multiply, /* 100 */
++ KEY_KP_9, /* 101 */
++ KEY_KP_6, /* 102 */
++ KEY_KP_3, /* 103 */
++ KEY_KP_Decimal, /* 104 */
++ KEY_KP_Minus, /* 105 */
++ KEY_KP_Plus, /* 106 */
++ KEY_UNKNOWN, /* 107 */
++ KEY_KP_Enter, /* 108 */
++ KEY_UNKNOWN, /* 109 */
++ KEY_Escape, /* 110 */
++ KEY_UNKNOWN, /* 111 */
++ KEY_F1, /* 112 */
++ KEY_F2, /* 113 */
++ KEY_F3, /* 114 */
++ KEY_F4, /* 115 */
++ KEY_F5, /* 116 */
++ KEY_F6, /* 117 */
++ KEY_F7, /* 118 */
++ KEY_F8, /* 119 */
++ KEY_F9, /* 120 */
++ KEY_F10, /* 121 */
++ KEY_F11, /* 122 */
++ KEY_F12, /* 123 */
++ KEY_Print, /* 124 */
++ KEY_ScrollLock, /* 125 */
++ KEY_Pause, /* 126 */
++ KEY_UNKNOWN, /* 127 */
++ KEY_UNKNOWN, /* 128 */
++ KEY_UNKNOWN, /* 129 */
++ KEY_UNKNOWN, /* 130 */
++ KEY_NFER, /* 131 */
++ KEY_XFER, /* 132 */
++ KEY_HKTG, /* 133 */
++ KEY_UNKNOWN, /* 134 */
++#elif defined(sparc) || defined(__sparc__)
++ KEY_UNKNOWN, /* 0x00 */
++ KEY_UNKNOWN, /* 0x01 */
++ KEY_UNKNOWN, /* 0x02 */
++ KEY_UNKNOWN, /* 0x03 */
++ KEY_UNKNOWN, /* 0x04 */
++ KEY_F1, /* 0x05 */
++ KEY_F2, /* 0x06 */
++ KEY_F10, /* 0x07 */
++ KEY_F3, /* 0x08 */
++ KEY_F11, /* 0x09 */
++ KEY_F4, /* 0x0A */
++ KEY_F12, /* 0x0B */
++ KEY_F5, /* 0x0C */
++ KEY_UNKNOWN, /* 0x0D */
++ KEY_F6, /* 0x0E */
++ KEY_UNKNOWN, /* 0x0F */
++ KEY_F7, /* 0x10 */
++ KEY_F8, /* 0x11 */
++ KEY_F9, /* 0x12 */
++ KEY_Alt, /* 0x13 */
++ KEY_Up, /* 0x14 */
++ KEY_Pause, /* 0x15 */
++ KEY_SysReqest, /* 0x16 */
++ KEY_ScrollLock, /* 0x17 */
++ KEY_Left, /* 0x18 */
++ KEY_UNKNOWN, /* 0x19 */
++ KEY_UNKNOWN, /* 0x1A */
++ KEY_Down, /* 0x1B */
++ KEY_Right, /* 0x1C */
++ KEY_Escape, /* 0x1D */
++ KEY_1, /* 0x1E */
++ KEY_2, /* 0x1F */
++ KEY_3, /* 0x20 */
++ KEY_4, /* 0x21 */
++ KEY_5, /* 0x22 */
++ KEY_6, /* 0x23 */
++ KEY_7, /* 0x24 */
++ KEY_8, /* 0x25 */
++ KEY_9, /* 0x26 */
++ KEY_0, /* 0x27 */
++ KEY_Minus, /* 0x28 */
++ KEY_Equal, /* 0x29 */
++ KEY_Tilde, /* 0x2A */
++ KEY_BackSpace, /* 0x2B */
++ KEY_Insert, /* 0x2C */
++ KEY_UNKNOWN, /* 0x2D */
++ KEY_KP_Divide, /* 0x2E */
++ KEY_KP_Multiply, /* 0x2F */
++ KEY_UNKNOWN, /* 0x30 */
++ KEY_UNKNOWN, /* 0x31 */
++ KEY_KP_Decimal, /* 0x32 */
++ KEY_UNKNOWN, /* 0x33 */
++ KEY_Home, /* 0x34 */
++ KEY_Tab, /* 0x35 */
++ KEY_Q, /* 0x36 */
++ KEY_W, /* 0x37 */
++ KEY_E, /* 0x38 */
++ KEY_R, /* 0x39 */
++ KEY_T, /* 0x3A */
++ KEY_Y, /* 0x3B */
++ KEY_U, /* 0x3C */
++ KEY_I, /* 0x3D */
++ KEY_O, /* 0x3E */
++ KEY_P, /* 0x3F */
++ KEY_LBrace, /* 0x40 */
++ KEY_RBrace, /* 0x41 */
++ KEY_Delete, /* 0x42 */
++ KEY_UNKNOWN, /* 0x43 */
++ KEY_KP_7, /* 0x44 */
++ KEY_KP_8, /* 0x45 */
++ KEY_KP_9, /* 0x46 */
++ KEY_KP_Minus, /* 0x47 */
++ KEY_UNKNOWN, /* 0x48 */
++ KEY_UNKNOWN, /* 0x49 */
++ KEY_End, /* 0x4A */
++ KEY_UNKNOWN, /* 0x4B */
++ KEY_LCtrl, /* 0x4C */
++ KEY_A, /* 0x4D */
++ KEY_S, /* 0x4E */
++ KEY_D, /* 0x4F */
++ KEY_F, /* 0x50 */
++ KEY_G, /* 0x51 */
++ KEY_H, /* 0x52 */
++ KEY_J, /* 0x53 */
++ KEY_K, /* 0x54 */
++ KEY_L, /* 0x55 */
++ KEY_SemiColon, /* 0x56 */
++ KEY_Quote, /* 0x57 */
++ KEY_BSlash, /* 0x58 */
++ KEY_Enter, /* 0x59 */
++ KEY_KP_Enter, /* 0x5A */
++ KEY_KP_4, /* 0x5B */
++ KEY_KP_5, /* 0x5C */
++ KEY_KP_6, /* 0x5D */
++ KEY_KP_0, /* 0x5E */
++ KEY_UNKNOWN, /* 0x5F */
++ KEY_PgUp, /* 0x60 */
++ KEY_UNKNOWN, /* 0x61 */
++ KEY_NumLock, /* 0x62 */
++ KEY_ShiftL, /* 0x63 */
++ KEY_Z, /* 0x64 */
++ KEY_X, /* 0x65 */
++ KEY_C, /* 0x66 */
++ KEY_V, /* 0x67 */
++ KEY_B, /* 0x68 */
++ KEY_N, /* 0x69 */
++ KEY_M, /* 0x6A */
++ KEY_Comma, /* 0x6B */
++ KEY_Period, /* 0x6C */
++ KEY_Slash, /* 0x6D */
++ KEY_ShiftR, /* 0x6E */
++ KEY_UNKNOWN, /* 0x6F */
++ KEY_KP_1, /* 0x70 */
++ KEY_KP_2, /* 0x71 */
++ KEY_KP_3, /* 0x72 */
++ KEY_UNKNOWN, /* 0x73 */
++ KEY_UNKNOWN, /* 0x74 */
++ KEY_UNKNOWN, /* 0x75 */
++ KEY_UNKNOWN, /* 0x76 */
++ KEY_CapsLock, /* 0x77 */
++ KEY_LMeta, /* 0x78 */
++ KEY_Space, /* 0x79 */
++ KEY_RMeta, /* 0x7A */
++ KEY_PgDown, /* 0x7B */
++ KEY_UNKNOWN, /* 0x7C */
++ KEY_KP_Plus, /* 0x7D */
++ KEY_UNKNOWN, /* 0x7E */
++ KEY_UNKNOWN, /* 0x7F */
++#endif
++ /* The rest default to KEY_UNKNOWN */
++};
++
++static
++TransMapRec sunTransMap = {
++ 0,
++ (sizeof(sunmap)/sizeof(unsigned char)),
++ sunmap
++};
++
++#if defined(KB_USB)
++static unsigned char usbmap[256] = {
++/*
++ * partially taken from ../bsd/bsd_KbdMap.c
++ *
++ * added keycodes for Sun special keys (left function keys, audio control)
++ */
++ /* 0 */ KEY_NOTUSED,
++ /* 1 */ KEY_NOTUSED,
++ /* 2 */ KEY_NOTUSED,
++ /* 3 */ KEY_NOTUSED,
++ /* 4 */ KEY_A,
++ /* 5 */ KEY_B,
++ /* 6 */ KEY_C,
++ /* 7 */ KEY_D,
++ /* 8 */ KEY_E,
++ /* 9 */ KEY_F,
++ /* 10 */ KEY_G,
++ /* 11 */ KEY_H,
++ /* 12 */ KEY_I,
++ /* 13 */ KEY_J,
++ /* 14 */ KEY_K,
++ /* 15 */ KEY_L,
++ /* 16 */ KEY_M,
++ /* 17 */ KEY_N,
++ /* 18 */ KEY_O,
++ /* 19 */ KEY_P,
++ /* 20 */ KEY_Q,
++ /* 21 */ KEY_R,
++ /* 22 */ KEY_S,
++ /* 23 */ KEY_T,
++ /* 24 */ KEY_U,
++ /* 25 */ KEY_V,
++ /* 26 */ KEY_W,
++ /* 27 */ KEY_X,
++ /* 28 */ KEY_Y,
++ /* 29 */ KEY_Z,
++ /* 30 */ KEY_1, /* 1 !*/
++ /* 31 */ KEY_2, /* 2 @ */
++ /* 32 */ KEY_3, /* 3 # */
++ /* 33 */ KEY_4, /* 4 $ */
++ /* 34 */ KEY_5, /* 5 % */
++ /* 35 */ KEY_6, /* 6 ^ */
++ /* 36 */ KEY_7, /* 7 & */
++ /* 37 */ KEY_8, /* 8 * */
++ /* 38 */ KEY_9, /* 9 ( */
++ /* 39 */ KEY_0, /* 0 ) */
++ /* 40 */ KEY_Enter, /* Return */
++ /* 41 */ KEY_Escape, /* Escape */
++ /* 42 */ KEY_BackSpace, /* Backspace Delete */
++ /* 43 */ KEY_Tab, /* Tab */
++ /* 44 */ KEY_Space, /* Space */
++ /* 45 */ KEY_Minus, /* - _ */
++ /* 46 */ KEY_Equal, /* = + */
++ /* 47 */ KEY_LBrace, /* [ { */
++ /* 48 */ KEY_RBrace, /* ] } */
++ /* 49 */ KEY_BSlash, /* \ | */
++ /* 50 */ KEY_BSlash, /* \ _ # ~ on some keyboards */
++ /* 51 */ KEY_SemiColon, /* ; : */
++ /* 52 */ KEY_Quote, /* ' " */
++ /* 53 */ KEY_Tilde, /* ` ~ */
++ /* 54 */ KEY_Comma, /* , < */
++ /* 55 */ KEY_Period, /* . > */
++ /* 56 */ KEY_Slash, /* / ? */
++ /* 57 */ KEY_CapsLock, /* Caps Lock */
++ /* 58 */ KEY_F1, /* F1 */
++ /* 59 */ KEY_F2, /* F2 */
++ /* 60 */ KEY_F3, /* F3 */
++ /* 61 */ KEY_F4, /* F4 */
++ /* 62 */ KEY_F5, /* F5 */
++ /* 63 */ KEY_F6, /* F6 */
++ /* 64 */ KEY_F7, /* F7 */
++ /* 65 */ KEY_F8, /* F8 */
++ /* 66 */ KEY_F9, /* F9 */
++ /* 67 */ KEY_F10, /* F10 */
++ /* 68 */ KEY_F11, /* F11 */
++ /* 69 */ KEY_F12, /* F12 */
++ /* 70 */ KEY_Print, /* PrintScrn SysReq */
++ /* 71 */ KEY_ScrollLock, /* Scroll Lock */
++ /* 72 */ KEY_Pause, /* Pause Break */
++ /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
++ /* 74 */ KEY_Home, /* Home */
++ /* 75 */ KEY_PgUp, /* Page Up */
++ /* 76 */ KEY_Delete, /* Delete */
++ /* 77 */ KEY_End, /* End */
++ /* 78 */ KEY_PgDown, /* Page Down */
++ /* 79 */ KEY_Right, /* Right Arrow */
++ /* 80 */ KEY_Left, /* Left Arrow */
++ /* 81 */ KEY_Down, /* Down Arrow */
++ /* 82 */ KEY_Up, /* Up Arrow */
++ /* 83 */ KEY_NumLock, /* Num Lock */
++ /* 84 */ KEY_KP_Divide, /* Keypad / */
++ /* 85 */ KEY_KP_Multiply, /* Keypad * */
++ /* 86 */ KEY_KP_Minus, /* Keypad - */
++ /* 87 */ KEY_KP_Plus, /* Keypad + */
++ /* 88 */ KEY_KP_Enter, /* Keypad Enter */
++ /* 89 */ KEY_KP_1, /* Keypad 1 End */
++ /* 90 */ KEY_KP_2, /* Keypad 2 Down */
++ /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
++ /* 92 */ KEY_KP_4, /* Keypad 4 Left */
++ /* 93 */ KEY_KP_5, /* Keypad 5 */
++ /* 94 */ KEY_KP_6, /* Keypad 6 */
++ /* 95 */ KEY_KP_7, /* Keypad 7 Home */
++ /* 96 */ KEY_KP_8, /* Keypad 8 Up */
++ /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
++ /* 98 */ KEY_KP_0, /* Keypad 0 Ins */
++ /* 99 */ KEY_KP_Decimal, /* Keypad . Del */
++ /* 100 */ KEY_Less, /* < > on some keyboards */
++ /* 101 */ KEY_Menu, /* Menu */
++ /* 102 */ KEY_Power, /* Sun: Power */
++ /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
++ /* 104 */ KEY_NOTUSED,
++ /* 105 */ KEY_NOTUSED,
++ /* 106 */ KEY_NOTUSED,
++ /* 107 */ KEY_NOTUSED,
++ /* 108 */ KEY_NOTUSED,
++ /* 109 */ KEY_NOTUSED,
++ /* 110 */ KEY_NOTUSED,
++ /* 111 */ KEY_NOTUSED,
++ /* 112 */ KEY_NOTUSED,
++ /* 113 */ KEY_NOTUSED,
++ /* 114 */ KEY_NOTUSED,
++ /* 115 */ KEY_NOTUSED,
++ /* 116 */ KEY_L7, /* Sun: Open */
++ /* 117 */ KEY_Help, /* Sun: Help */
++ /* 118 */ KEY_L3, /* Sun: Props */
++ /* 119 */ KEY_L5, /* Sun: Front */
++ /* 120 */ KEY_L1, /* Sun: Stop */
++ /* 121 */ KEY_L2, /* Sun: Again */
++ /* 122 */ KEY_L4, /* Sun: Undo */
++ /* 123 */ KEY_L10, /* Sun: Cut */
++ /* 124 */ KEY_L6, /* Sun: Copy */
++ /* 125 */ KEY_L8, /* Sun: Paste */
++ /* 126 */ KEY_L9, /* Sun: Find */
++ /* 127 */ KEY_Mute, /* Sun: AudioMute */
++ /* 128 */ KEY_AudioRaise, /* Sun: AudioRaise */
++ /* 129 */ KEY_AudioLower, /* Sun: AudioLower */
++ /* 130 */ KEY_NOTUSED,
++ /* 131 */ KEY_NOTUSED,
++ /* 132 */ KEY_NOTUSED,
++ /* 133 */ KEY_NOTUSED,
++ /* 134 */ KEY_NOTUSED,
++ /* 135 */ KEY_BSlash2, /* Sun Japanese Kbd: Backslash / Underscore */
++ /* 136 */ KEY_XFER, /* Sun Japanese Kbd: Henkan Mode */
++ /* 137 */ KEY_Yen, /* Sun Japanese Kbd: Yen / Brokenbar */
++ /* 138 */ KEY_Kanji, /* Sun Japanese Kbd: Kanji */
++ /* 139 */ KEY_Execute, /* Sun Japanese Kbd: Execute */
++ /* 140 */ KEY_NOTUSED,
++ /* 141 */ KEY_NOTUSED,
++ /* 142 */ KEY_NOTUSED,
++ /* 143 */ KEY_NOTUSED,
++ /* 144 */ KEY_NOTUSED,
++ /* 145 */ KEY_NOTUSED,
++ /* 146 */ KEY_NOTUSED,
++ /* 147 */ KEY_NOTUSED,
++ /* 148 */ KEY_NOTUSED,
++ /* 149 */ KEY_NOTUSED,
++ /* 150 */ KEY_NOTUSED,
++ /* 151 */ KEY_NOTUSED,
++ /* 152 */ KEY_NOTUSED,
++ /* 153 */ KEY_NOTUSED,
++ /* 154 */ KEY_NOTUSED,
++ /* 155 */ KEY_NOTUSED,
++ /* 156 */ KEY_NOTUSED,
++ /* 157 */ KEY_NOTUSED,
++ /* 158 */ KEY_NOTUSED,
++ /* 159 */ KEY_NOTUSED,
++ /* 160 */ KEY_NOTUSED,
++ /* 161 */ KEY_NOTUSED,
++ /* 162 */ KEY_NOTUSED,
++ /* 163 */ KEY_NOTUSED,
++ /* 164 */ KEY_NOTUSED,
++ /* 165 */ KEY_NOTUSED,
++ /* 166 */ KEY_NOTUSED,
++ /* 167 */ KEY_NOTUSED,
++ /* 168 */ KEY_NOTUSED,
++ /* 169 */ KEY_NOTUSED,
++ /* 170 */ KEY_NOTUSED,
++ /* 171 */ KEY_NOTUSED,
++ /* 172 */ KEY_NOTUSED,
++ /* 173 */ KEY_NOTUSED,
++ /* 174 */ KEY_NOTUSED,
++ /* 175 */ KEY_NOTUSED,
++ /* 176 */ KEY_NOTUSED,
++ /* 177 */ KEY_NOTUSED,
++ /* 178 */ KEY_NOTUSED,
++ /* 179 */ KEY_NOTUSED,
++ /* 180 */ KEY_NOTUSED,
++ /* 181 */ KEY_NOTUSED,
++ /* 182 */ KEY_NOTUSED,
++ /* 183 */ KEY_NOTUSED,
++ /* 184 */ KEY_NOTUSED,
++ /* 185 */ KEY_NOTUSED,
++ /* 186 */ KEY_NOTUSED,
++ /* 187 */ KEY_NOTUSED,
++ /* 188 */ KEY_NOTUSED,
++ /* 189 */ KEY_NOTUSED,
++ /* 190 */ KEY_NOTUSED,
++ /* 191 */ KEY_NOTUSED,
++ /* 192 */ KEY_NOTUSED,
++ /* 193 */ KEY_NOTUSED,
++ /* 194 */ KEY_NOTUSED,
++ /* 195 */ KEY_NOTUSED,
++ /* 196 */ KEY_NOTUSED,
++ /* 197 */ KEY_NOTUSED,
++ /* 198 */ KEY_NOTUSED,
++ /* 199 */ KEY_NOTUSED,
++ /* 200 */ KEY_NOTUSED,
++ /* 201 */ KEY_NOTUSED,
++ /* 202 */ KEY_NOTUSED,
++ /* 203 */ KEY_NOTUSED,
++ /* 204 */ KEY_NOTUSED,
++ /* 205 */ KEY_NOTUSED,
++ /* 206 */ KEY_NOTUSED,
++ /* 207 */ KEY_NOTUSED,
++ /* 208 */ KEY_NOTUSED,
++ /* 209 */ KEY_NOTUSED,
++ /* 210 */ KEY_NOTUSED,
++ /* 211 */ KEY_NOTUSED,
++ /* 212 */ KEY_NOTUSED,
++ /* 213 */ KEY_NOTUSED,
++ /* 214 */ KEY_NOTUSED,
++ /* 215 */ KEY_NOTUSED,
++ /* 216 */ KEY_NOTUSED,
++ /* 217 */ KEY_NOTUSED,
++ /* 218 */ KEY_NOTUSED,
++ /* 219 */ KEY_NOTUSED,
++ /* 220 */ KEY_NOTUSED,
++ /* 221 */ KEY_NOTUSED,
++ /* 222 */ KEY_NOTUSED,
++ /* 223 */ KEY_NOTUSED,
++ /* 224 */ KEY_LCtrl, /* Left Control */
++ /* 225 */ KEY_ShiftL, /* Left Shift */
++ /* 226 */ KEY_Alt, /* Left Alt */
++ /* 227 */ KEY_LMeta, /* Left Meta */
++ /* 228 */ KEY_RCtrl, /* Right Control */
++ /* 229 */ KEY_ShiftR, /* Right Shift */
++ /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
++ /* 231 */ KEY_RMeta, /* Right Meta */
++};
++
++static
++TransMapRec usbTransMap = {
++ 0,
++ (sizeof(usbmap)/sizeof(unsigned char)),
++ usbmap
++};
++#endif /* KB_USB */
++
++_X_HIDDEN void
++KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
++{
++ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
++ sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
++ const unsigned char *keymap;
++ int i;
++ KeySym *k;
++
++#if defined(KB_USB)
++ if (priv->ktype == KB_USB)
++ pKbd->scancodeMap = &usbTransMap;
++ else
++#endif
++ pKbd->scancodeMap = &sunTransMap;
++
++ /*
++ * Add Sun keyboard keysyms to default map
++ */
++#define map_for_key(k,c) map[(k * GLYPHS_PER_KEY) + c]
++ map_for_key(KEY_Kanji, 0) = XK_Kanji;
++ map_for_key(KEY_Execute, 0) = XK_Execute;
++ map_for_key(KEY_Power, 0) = SunXK_PowerSwitch;
++ map_for_key(KEY_Power, 1) = SunXK_PowerSwitchShift;
++ map_for_key(KEY_Mute, 0) = SunXK_AudioMute;
++ map_for_key(KEY_Mute, 1) = SunXK_VideoDegauss;
++ map_for_key(KEY_AudioLower, 0) = SunXK_AudioLowerVolume;
++ map_for_key(KEY_AudioLower, 1) = SunXK_VideoLowerBrightness;
++ map_for_key(KEY_AudioRaise, 0) = SunXK_AudioRaiseVolume;
++ map_for_key(KEY_AudioRaise, 1) = SunXK_VideoRaiseBrightness;
++ map_for_key(KEY_Help, 0) = XK_Help;
++ map_for_key(KEY_L1, 0) = XK_L1;
++ map_for_key(KEY_L2, 0) = XK_L2;
++ map_for_key(KEY_L3, 0) = XK_L3;
++ map_for_key(KEY_L4, 0) = XK_L4;
++ map_for_key(KEY_L5, 0) = XK_L5;
++ map_for_key(KEY_L6, 0) = XK_L6;
++ map_for_key(KEY_L7, 0) = XK_L7;
++ map_for_key(KEY_L8, 0) = XK_L8;
++ map_for_key(KEY_L9, 0) = XK_L9;
++ map_for_key(KEY_L10, 0) = XK_L10;
++ map_for_key(KEY_F11, 0) = SunXK_F36;
++ map_for_key(KEY_F12, 0) = SunXK_F37;
++ map_for_key(KEY_Menu, 0) = XK_Multi_key;
++
++ /*
++ * compute the modifier map
++ */
++ for (i = 0; i < MAP_LENGTH; i++)
++ pModMap[i] = NoSymbol; /* make sure it is restored */
++
++ for (k = map, i = MIN_KEYCODE;
++ i < (NUM_KEYCODES + MIN_KEYCODE);
++ i++, k += 4)
++ {
++ switch(*k) {
++
++ case XK_Shift_L:
++ case XK_Shift_R:
++ pModMap[i] = ShiftMask;
++ break;
++
++ case XK_Control_L:
++ case XK_Control_R:
++ pModMap[i] = ControlMask;
++ break;
++
++ case XK_Caps_Lock:
++ pModMap[i] = LockMask;
++ break;
++
++ case XK_Alt_L:
++ case XK_Alt_R:
++ pModMap[i] = AltMask;
++ break;
++
++ case XK_Num_Lock:
++ pModMap[i] = NumLockMask;
++ break;
++
++ case XK_Scroll_Lock:
++ pModMap[i] = ScrollLockMask;
++ break;
++
++ /* kana support */
++ case XK_Kana_Lock:
++ case XK_Kana_Shift:
++ pModMap[i] = KanaMask;
++ break;
++
++ /* alternate toggle for multinational support */
++ case XK_Mode_switch:
++ pModMap[i] = AltLangMask;
++ break;
++
++ }
++ }
++
++ pKeySyms->map = map;
++ pKeySyms->mapWidth = GLYPHS_PER_KEY;
++ pKeySyms->minKeyCode = MIN_KEYCODE;
++ pKeySyms->maxKeyCode = MAX_KEYCODE;
++}
+diff -ruN xf86-input-keyboard-1.2.0/src/xf86Keymap.h xf86-input-keyboard/src/xf86Keymap.h
+--- xf86-input-keyboard-1.2.0/src/xf86Keymap.h 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/xf86Keymap.h 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,308 @@
++
++/*
++ * Copyright (c) 1994-2002 by The XFree86 Project, Inc.
++ *
++ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
++ *
++ * Except as contained in this notice, the name of the copyright holder(s)
++ * and author(s) shall not be used in advertising or otherwise to promote
++ * the sale, use or other dealings in this Software without prior written
++ * authorization from the copyright holder(s) and author(s).
++ */
++
++/*
++ *
++ * For Scancodes see notes in atKeynames.h !!!!
++ *
++ */
++/* $XConsortium: xf86Keymap.h /main/14 1996/02/21 17:38:47 kaleb $ */
++
++#include "xorg-server.h"
++
++static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = {
++
++ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
++ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
++ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
++ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
++ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
++ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
++ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
++ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
++ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
++ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
++ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
++ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,NoSymbol, NoSymbol,
++ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
++ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
++ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
++ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
++ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
++ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
++ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
++ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
++ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
++ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
++ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
++ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
++ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
++ /* 0x4c */ XK_KP_Begin, XK_KP_5, NoSymbol, NoSymbol,
++ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
++ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
++ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
++ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
++ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
++ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
++ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
++ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x59 */ XK_Home, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5a */ XK_Up, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5b */ XK_Prior, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5c */ XK_Left, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5d */ XK_Begin, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5e */ XK_Right, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5f */ XK_End, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x60 */ XK_Down, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x61 */ XK_Next, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x62 */ XK_Insert, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x63 */ XK_Delete, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
++ /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6e */ XK_F13, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6f */ XK_F14, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x70 */ XK_F15, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x71 */ XK_F16, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x72 */ XK_F17, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x73 */ XK_backslash, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x79 */ XK_Henkan, XK_Mode_switch, NoSymbol, NoSymbol,
++ /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7b */ XK_Muhenkan, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7d */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++};
++
++#if !defined(Lynx) && \
++ !defined(__UNIXOS2__) && \
++ !defined(__mips__) && \
++ !defined(linux) && \
++ !defined(CSRG_BASED) && \
++ !defined(__CYGWIN__) && \
++ !defined(__SOL8__) && \
++ (!defined(sun) || defined(i386))
++
++static KeySym map84[NUM_KEYCODES * GLYPHS_PER_KEY] = {
++ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
++ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
++ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
++ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
++ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
++ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
++ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
++ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
++ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
++ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
++ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
++ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
++ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x0f */ XK_Tab, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
++ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
++ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
++ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
++ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
++ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
++ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
++ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
++ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
++ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
++ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
++ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
++ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
++ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
++ /* 0x4c */ NoSymbol, XK_KP_5, NoSymbol, NoSymbol,
++ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
++ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
++ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
++ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
++ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
++ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
++ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
++ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x59 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x5f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x60 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x61 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x62 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x63 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
++ /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x6f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x70 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x71 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x72 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x73 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x79 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++ /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
++};
++#endif
+diff -ruN xf86-input-keyboard-1.2.0/src/xf86OSKbd.h xf86-input-keyboard/src/xf86OSKbd.h
+--- xf86-input-keyboard-1.2.0/src/xf86OSKbd.h 1970-01-01 00:00:00.000000000 +0000
++++ xf86-input-keyboard/src/xf86OSKbd.h 2007-09-03 10:34:00.000000000 +0000
+@@ -0,0 +1,132 @@
++/*
++ * Copyright (c) 2002-2003 by The XFree86 Project, Inc.
++ *
++ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
++ *
++ * Except as contained in this notice, the name of the copyright holder(s)
++ * and author(s) shall not be used in advertising or otherwise to promote
++ * the sale, use or other dealings in this Software without prior written
++ * authorization from the copyright holder(s) and author(s).
++ *
++ * Author: Ivan Pascal.
++ */
++
++#include "xf86Xinput.h"
++
++Bool ATScancode(InputInfoPtr pInfo, int *scanCode);
++
++/* Public interface to OS-specific keyboard support. */
++
++typedef int (*KbdInitProc)(InputInfoPtr pInfo, int what);
++typedef int (*KbdOnProc)(InputInfoPtr pInfo, int what);
++typedef int (*KbdOffProc)(InputInfoPtr pInfo, int what);
++typedef void (*BellProc)(InputInfoPtr pInfo,
++ int loudness, int pitch, int duration);
++typedef void (*SetLedsProc)(InputInfoPtr pInfo, int leds);
++typedef int (*GetLedsProc)(InputInfoPtr pInfo);
++typedef void (*SetKbdRepeatProc)(InputInfoPtr pInfo, char rad);
++typedef void (*KbdGetMappingProc)(InputInfoPtr pInfo,
++ KeySymsPtr pKeySyms, CARD8* pModMap);
++typedef int (*GetSpecialKeyProc)(InputInfoPtr pInfo, int scanCode);
++typedef Bool (*SpecialKeyProc)(InputInfoPtr pInfo,
++ int key, Bool down, int modifiers);
++typedef int (*RemapScanCodeProc)(InputInfoPtr pInfo, int *scanCode);
++typedef Bool (*OpenKeyboardProc)(InputInfoPtr pInfo);
++typedef void (*PostEventProc)(InputInfoPtr pInfo,
++ unsigned int key, Bool down);
++typedef struct {
++ int begin;
++ int end;
++ unsigned char *map;
++} TransMapRec, *TransMapPtr;
++
++typedef struct {
++ KbdInitProc KbdInit;
++ KbdOnProc KbdOn;
++ KbdOffProc KbdOff;
++ BellProc Bell;
++ SetLedsProc SetLeds;
++ GetLedsProc GetLeds;
++ SetKbdRepeatProc SetKbdRepeat;
++ KbdGetMappingProc KbdGetMapping;
++ RemapScanCodeProc RemapScanCode;
++ GetSpecialKeyProc GetSpecialKey;
++ SpecialKeyProc SpecialKey;
++
++ OpenKeyboardProc OpenKeyboard;
++ PostEventProc PostEvent;
++
++ int rate;
++ int delay;
++ int bell_pitch;
++ int bell_duration;
++ Bool autoRepeat;
++ unsigned long leds;
++ unsigned long xledsMask;
++ unsigned long keyLeds;
++ int scanPrefix;
++ Bool vtSwitchSupported;
++ Bool CustomKeycodes;
++ Bool noXkb;
++ Bool isConsole;
++ TransMapPtr scancodeMap;
++ TransMapPtr specialMap;
++
++ /* os specific */
++ pointer private;
++ int kbdType;
++ int consType;
++ int wsKbdType;
++ Bool sunKbd;
++ Bool Panix106;
++
++} KbdDevRec, *KbdDevPtr;
++
++typedef enum {
++ PROT_STD,
++ PROT_XQUEUE,
++ PROT_WSCONS,
++ PROT_USB,
++ PROT_UNKNOWN_KBD
++} KbdProtocolId;
++
++typedef struct {
++ const char *name;
++ KbdProtocolId id;
++} KbdProtocolRec;
++
++Bool xf86OSKbdPreInit(InputInfoPtr pInfo);
++
++/* Adjust this when the kbd interface changes. */
++
++/*
++ * History:
++ *
++ * 1.0.0 - Initial version.
++ */
++
++#define OS_KBD_VERSION_MAJOR 1
++#define OS_KBD_VERSION_MINOR 0
++#define OS_KBD_VERSION_PATCH 0
++
++#define OS_KBD_VERSION_CURRENT \
++ BUILTIN_INTERFACE_VERSION_NUMERIC(OS_KBD_VERSION_MAJOR, \
++ OS_KBD_VERSION_MINOR, \
++ OS_KBD_VERSION_PATCH)
++
diff --git a/abs/core/xf86-input-magellan/PKGBUILD b/abs/core/xf86-input-magellan/PKGBUILD
new file mode 100644
index 0000000..324c0be
--- /dev/null
+++ b/abs/core/xf86-input-magellan/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-magellan
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.Org Magellan Space mouse input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('8a966d3b74dc2a801ff09b895037090c')
diff --git a/abs/core/xf86-input-magictouch/PKGBUILD b/abs/core/xf86-input-magictouch/PKGBUILD
new file mode 100644
index 0000000..fdd4a4a
--- /dev/null
+++ b/abs/core/xf86-input-magictouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-magictouch
+pkgver=1.0.0.5
+pkgrel=5
+pkgdesc="X.org magictouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d23f2791cd634ef85b7cc5e9da8f8407')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-microtouch/PKGBUILD b/abs/core/xf86-input-microtouch/PKGBUILD
new file mode 100644
index 0000000..be6b234
--- /dev/null
+++ b/abs/core/xf86-input-microtouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-microtouch
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org microtouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('9843fbea6cc0c4129e96ce9a6c893cf6')
diff --git a/abs/core/xf86-input-mouse/PKGBUILD b/abs/core/xf86-input-mouse/PKGBUILD
new file mode 100644
index 0000000..e7b96a2
--- /dev/null
+++ b/abs/core/xf86-input-mouse/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4397 2008-07-06 20:23:13Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-mouse
+pkgver=1.3.0
+pkgrel=1
+pkgdesc="X.org mouse input driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+options=('!libtool')
+groups=('xorg' 'xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('31a51b0e5ddc4fac19754f48a3adf881')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/xf86-input-mutouch/PKGBUILD b/abs/core/xf86-input-mutouch/PKGBUILD
new file mode 100644
index 0000000..36da1e3
--- /dev/null
+++ b/abs/core/xf86-input-mutouch/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-mutouch
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org mutouch input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('98ae915c67cabf0e6d40a425dbdbe10b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-palmax/PKGBUILD b/abs/core/xf86-input-palmax/PKGBUILD
new file mode 100644
index 0000000..ff5c4b2
--- /dev/null
+++ b/abs/core/xf86-input-palmax/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-palmax
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org palmax input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('0959dbf7972dfb95f56e4bd3f56447cf')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-penmount/PKGBUILD b/abs/core/xf86-input-penmount/PKGBUILD
new file mode 100644
index 0000000..062401f
--- /dev/null
+++ b/abs/core/xf86-input-penmount/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-penmount
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org penmount input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('268af4dceda544d8c815b9b7e87d4536')
diff --git a/abs/core/xf86-input-spaceorb/PKGBUILD b/abs/core/xf86-input-spaceorb/PKGBUILD
new file mode 100644
index 0000000..7291085
--- /dev/null
+++ b/abs/core/xf86-input-spaceorb/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-spaceorb
+pkgver=1.1.1
+pkgrel=1
+pkgdesc="X.org spaceorb input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('c7fb96281874733480ba86a5a0a3b5af')
diff --git a/abs/core/xf86-input-summa/PKGBUILD b/abs/core/xf86-input-summa/PKGBUILD
new file mode 100644
index 0000000..9b0c9ef
--- /dev/null
+++ b/abs/core/xf86-input-summa/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-summa
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org summa input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+options=('!libtool')
+groups=('xorg-input-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('b37a432fd87bb9f46d011622d6fce6b3')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-tek4957/PKGBUILD b/abs/core/xf86-input-tek4957/PKGBUILD
new file mode 100644
index 0000000..2ea7a0f
--- /dev/null
+++ b/abs/core/xf86-input-tek4957/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-tek4957
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org tek4957 input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('be8a4bd474ad6c85b93f66dd6fcfa6ee')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-ur98/PKGBUILD b/abs/core/xf86-input-ur98/PKGBUILD
new file mode 100644
index 0000000..8fcafc0
--- /dev/null
+++ b/abs/core/xf86-input-ur98/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-ur98
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org ur98 input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('3cf8928411458baaa9e726e51772c550')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-input-vmmouse/PKGBUILD b/abs/core/xf86-input-vmmouse/PKGBUILD
new file mode 100644
index 0000000..55eed97
--- /dev/null
+++ b/abs/core/xf86-input-vmmouse/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-input-vmmouse
+pkgver=12.4.3
+pkgrel=1
+pkgdesc="X.org VMWare Mouse input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('44730af795616ed4d4a0cd9a3a07935d')
diff --git a/abs/core/xf86-input-void/PKGBUILD b/abs/core/xf86-input-void/PKGBUILD
new file mode 100644
index 0000000..d2d5b2b
--- /dev/null
+++ b/abs/core/xf86-input-void/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-input-void
+pkgver=1.1.0
+pkgrel=2
+pkgdesc="X.org void input driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-input-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('ea72a92d43b95f413347df96d6a73933')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-amd/PKGBUILD b/abs/core/xf86-video-amd/PKGBUILD
new file mode 100644
index 0000000..1bf6f62
--- /dev/null
+++ b/abs/core/xf86-video-amd/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=xf86-video-amd
+pkgver=2.7.7.6
+pkgrel=1
+pkgdesc="X.org AMD/Geode LX & NX video driver"
+# there is no 64bit geode yet!
+arch=(i686)
+url="http://xorg.freedesktop.org/"
+makedepends=('pkgconfig' 'xorg-server>=1.4')
+options=('!libtool')
+license=('custom:amd')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST} \
+ --enable-visibility
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
+md5sums=('e839cc4552032b7bd44beb72e575980f')
diff --git a/abs/core/xf86-video-apm/PKGBUILD b/abs/core/xf86-video-apm/PKGBUILD
new file mode 100644
index 0000000..7808dbc
--- /dev/null
+++ b/abs/core/xf86-video-apm/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3262 2008-06-21 18:38:40Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-apm
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="X.org Alliance ProMotion video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('4f78650d79656dc803a720049d65682e')
diff --git a/abs/core/xf86-video-ark/PKGBUILD b/abs/core/xf86-video-ark/PKGBUILD
new file mode 100644
index 0000000..cbe38bd
--- /dev/null
+++ b/abs/core/xf86-video-ark/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3260 2008-06-21 18:36:28Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-ark
+pkgver=0.7.0
+pkgrel=1
+pkgdesc="X.org ark video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('6826c556ebe9a1248cbc7f7edd44f956')
diff --git a/abs/core/xf86-video-ati/PKGBUILD b/abs/core/xf86-video-ati/PKGBUILD
new file mode 100644
index 0000000..c95c021
--- /dev/null
+++ b/abs/core/xf86-video-ati/PKGBUILD
@@ -0,0 +1,51 @@
+# $Id: PKGBUILD 3261 2008-06-21 18:38:23Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-ati
+pkgver=6.8.0
+pkgrel=4
+_mesaver="7.0.3"
+pkgdesc="X.org ati video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4' 'imake' 'mesa>=7.0.3'
+ 'glproto>=1.4.9' 'xf86driproto' 'diffutils')
+groups=('xorg-video-drivers')
+options=('!libtool')
+license=('custom')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ # currently commented, see FS#7590 for details
+ #echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = r128 radeon r200 r300" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('3c97c7925ebf4162eeb3463e23adc0e3'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core/xf86-video-chips/PKGBUILD b/abs/core/xf86-video-chips/PKGBUILD
new file mode 100644
index 0000000..60161c3
--- /dev/null
+++ b/abs/core/xf86-video-chips/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3258 2008-06-21 18:34:07Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-chips
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="X.org Chips and Technologies video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(glibc)
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('0fec6bee65383790485d917247a61629')
diff --git a/abs/core/xf86-video-cirrus/PKGBUILD b/abs/core/xf86-video-cirrus/PKGBUILD
new file mode 100644
index 0000000..02aecfc
--- /dev/null
+++ b/abs/core/xf86-video-cirrus/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3247 2008-06-21 18:15:30Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-cirrus
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org Cirrus Logic video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('bc28fdedaee9059180e2534f9dbcd2f6')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-dummy/PKGBUILD b/abs/core/xf86-video-dummy/PKGBUILD
new file mode 100644
index 0000000..51763f6
--- /dev/null
+++ b/abs/core/xf86-video-dummy/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-dummy
+pkgver=0.2.0
+pkgrel=4
+pkgdesc="X.org dummy video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('22b7cc20a33443cbd218bd2521850cfe')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-fbdev/PKGBUILD b/abs/core/xf86-video-fbdev/PKGBUILD
new file mode 100644
index 0000000..c5d835c
--- /dev/null
+++ b/abs/core/xf86-video-fbdev/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-fbdev
+pkgver=0.3.1
+pkgrel=4
+pkgdesc="X.org framebuffer video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('9ae810c6c6c3c9713a67866fe794d4ff')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-glint/PKGBUILD b/abs/core/xf86-video-glint/PKGBUILD
new file mode 100644
index 0000000..15c0dce
--- /dev/null
+++ b/abs/core/xf86-video-glint/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-glint
+pkgver=1.1.1
+pkgrel=5
+pkgdesc="X.org GLINT/Permedia video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.3.99.2' 'xf86driproto' 'mesa')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('2cf49f701024a145bd25aff9da11d479')
diff --git a/abs/core/xf86-video-i128/PKGBUILD b/abs/core/xf86-video-i128/PKGBUILD
new file mode 100644
index 0000000..fcf2c06
--- /dev/null
+++ b/abs/core/xf86-video-i128/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-i128
+pkgver=1.2.1
+pkgrel=4
+pkgdesc="X.org Number 9 I128 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d0080732eaa15059b0a953aa3522185a')
diff --git a/abs/core/xf86-video-i740/PKGBUILD b/abs/core/xf86-video-i740/PKGBUILD
new file mode 100644
index 0000000..9101847
--- /dev/null
+++ b/abs/core/xf86-video-i740/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-i740
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org Intel i740 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('57302e225060a7286ae1a970c87a589b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-imstt/PKGBUILD b/abs/core/xf86-video-imstt/PKGBUILD
new file mode 100644
index 0000000..6ad7ed6
--- /dev/null
+++ b/abs/core/xf86-video-imstt/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-imstt
+pkgver=1.1.0
+pkgrel=4
+pkgdesc="X.org Integrated Micro Solutions Twin Turbo video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('94853ca217238ed1f568a10cbeebe057')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-intel/PKGBUILD b/abs/core/xf86-video-intel/PKGBUILD
new file mode 100644
index 0000000..106ec41
--- /dev/null
+++ b/abs/core/xf86-video-intel/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 3246 2008-06-21 18:13:57Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+pkgname=xf86-video-intel
+pkgver=2.3.2
+pkgrel=1
+pkgdesc="X.org Intel i810/i830/i915 video drivers"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('intel-dri' 'libdrm')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'xorg-util-macros' 'xf86driproto>=2.0.4' 'glproto>=1.4.9' 'mesa>=7.0.3')
+
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('fef32ffc428d9d565ab10b338ce17855')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ rm -f ${startdir}/pkg/usr/lib/xorg/modules/drivers/i810_drv.so
+ rm -f ${startdir}/pkg/usr/share/man/man4/i810.4*
+}
diff --git a/abs/core/xf86-video-mga/PKGBUILD b/abs/core/xf86-video-mga/PKGBUILD
new file mode 100644
index 0000000..1d07b1f
--- /dev/null
+++ b/abs/core/xf86-video-mga/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 4390 2008-07-06 20:07:05Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-mga
+pkgver=1.4.9
+pkgrel=1
+pkgdesc="X.org mga video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3' \
+ 'xf86driproto' 'glproto>=1.4.9')
+options=('!libtool' 'force')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('11066b84b949cd04300ec819c9c51532'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = mga" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-neomagic/PKGBUILD b/abs/core/xf86-video-neomagic/PKGBUILD
new file mode 100644
index 0000000..cbe614d
--- /dev/null
+++ b/abs/core/xf86-video-neomagic/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3245 2008-06-21 18:12:45Z jgc $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-neomagic
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X.org neomagic video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('a72f57fca4f4dff9a2c82eb1fe7456f4')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-nv/PKGBUILD b/abs/core/xf86-video-nv/PKGBUILD
new file mode 100644
index 0000000..ad4b2ee
--- /dev/null
+++ b/abs/core/xf86-video-nv/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 1904 2008-05-22 18:19:19Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-nv
+pkgver=2.1.9
+pkgrel=1
+pkgdesc="X.org nv video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90')
+options=('!libtool')
+license=('custom')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('c6b7e52fa18455c22eb040b8d2575ce5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/core/xf86-video-radeonhd/PKGBUILD b/abs/core/xf86-video-radeonhd/PKGBUILD
new file mode 100644
index 0000000..7173afd
--- /dev/null
+++ b/abs/core/xf86-video-radeonhd/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 861 2008-04-23 21:44:36Z juergen $
+# Maintainer: <juergen@archlinux.org>
+pkgname=xf86-video-radeonhd
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="Experimental Radeon HD video driver for r500 and r600 ATI cards"
+arch=(i686 x86_64)
+url="http://wiki.x.org/wiki/radeonhd"
+license=('custom')
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server' 'diffutils')
+options=('!libtool')
+conflicts=('xf86-video-radeonhd-git')
+replaces=('xf86-video-radeonhd-git')
+groups=('xorg-video-drivers')
+source=(ftp://ftp.freedesktop.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2)
+md5sums=('9db15e1f1f891f514ca72dd9a3cc360a')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 -D ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE || return 1
+}
diff --git a/abs/core/xf86-video-rendition/PKGBUILD b/abs/core/xf86-video-rendition/PKGBUILD
new file mode 100644
index 0000000..20fba5f
--- /dev/null
+++ b/abs/core/xf86-video-rendition/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-rendition
+pkgver=4.1.3
+pkgrel=4
+pkgdesc="X.org Rendition video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('a8b97feccb32184820d5856fe78d34db')
diff --git a/abs/core/xf86-video-s3/PKGBUILD b/abs/core/xf86-video-s3/PKGBUILD
new file mode 100644
index 0000000..c7aefc2
--- /dev/null
+++ b/abs/core/xf86-video-s3/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-s3
+pkgver=0.5.0
+pkgrel=4
+pkgdesc="X.org S3 video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('d95ab6445cab477f39adfbbc81006f67')
diff --git a/abs/core/xf86-video-s3virge/PKGBUILD b/abs/core/xf86-video-s3virge/PKGBUILD
new file mode 100644
index 0000000..4a27540
--- /dev/null
+++ b/abs/core/xf86-video-s3virge/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3244 2008-06-21 18:11:55Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-s3virge
+pkgver=1.10.1
+pkgrel=1
+pkgdesc="X.org S3 Virge video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('expat>=2.0' 'libdrm')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('4a293047e988d4ea1e9e96d3b5793f43'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = s3v" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-savage/PKGBUILD b/abs/core/xf86-video-savage/PKGBUILD
new file mode 100644
index 0000000..99e5324
--- /dev/null
+++ b/abs/core/xf86-video-savage/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3243 2008-06-21 18:08:53Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-savage
+pkgver=2.2.1
+pkgrel=1
+pkgdesc="X.org savage video driver"
+mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'imake' 'mesa>=7.0.3' 'xf86driproto' 'glproto>=1.4.9')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.bz2)
+md5sums=('62b8aba48b54eaefeae87df502bf219c'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}
+
+ cd configs
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = savage" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-siliconmotion/PKGBUILD b/abs/core/xf86-video-siliconmotion/PKGBUILD
new file mode 100644
index 0000000..0e785ed
--- /dev/null
+++ b/abs/core/xf86-video-siliconmotion/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-siliconmotion
+pkgver=1.5.1
+pkgrel=4
+pkgdesc="X.org siliconmotion video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('ee35d7714ce44a2b5ac7ad7b7b7dd75a')
diff --git a/abs/core/xf86-video-sis/PKGBUILD b/abs/core/xf86-video-sis/PKGBUILD
new file mode 100644
index 0000000..02c519d
--- /dev/null
+++ b/abs/core/xf86-video-sis/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-sis
+pkgver=0.9.4
+pkgrel=3
+pkgdesc="X.org SiS video driver"
+mesaver="7.0.4"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'xf86driproto' 'mesa>=7.0.3rc1' 'glproto>=1.4.9')
+options=('!libtool')
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://voxel.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-${mesaver}.tar.gz)
+md5sums=('43f12cabf770b06170cdd1cdaafdc50f'
+ '909afa3a01ae31478d363837681415ac')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${mesaver}/configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = sis" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-sisusb/PKGBUILD b/abs/core/xf86-video-sisusb/PKGBUILD
new file mode 100644
index 0000000..43992ab
--- /dev/null
+++ b/abs/core/xf86-video-sisusb/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-sisusb
+pkgver=0.8.1
+pkgrel=4
+pkgdesc="X.org SiS USB video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('cbd669507e4aa35e468905f09b546333')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-tdfx/PKGBUILD b/abs/core/xf86-video-tdfx/PKGBUILD
new file mode 100644
index 0000000..82a75af
--- /dev/null
+++ b/abs/core/xf86-video-tdfx/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3259 2008-06-21 18:34:20Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-tdfx
+pkgver=1.4.0
+pkgrel=1
+pkgdesc="X.org tdfx video driver"
+_mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('expat>=2.0' 'libdrm>=2.3.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'mesa>=7.0.3')
+options=(!libtool)
+groups=('xorg-video-drivers')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}
+ cd configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS} -fno-strict-aliasing" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = tdfx" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('b13132f24683ef759bfb0c1db5096496'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core/xf86-video-trident/PKGBUILD b/abs/core/xf86-video-trident/PKGBUILD
new file mode 100644
index 0000000..5616e12
--- /dev/null
+++ b/abs/core/xf86-video-trident/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 3257 2008-06-21 18:32:30Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-trident
+pkgver=1.3.0
+pkgrel=2
+pkgdesc="X.org Trident video driver"
+_mesaver="7.0.3"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libdrm>=2.3.0' 'expat>=2.0')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'imake' 'mesa>=7.0.3' 'xf86driproto')
+groups=('xorg-video-drivers')
+options=(!libtool)
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --enable-dri || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ cd ${startdir}/src/Mesa-${_mesaver}
+ cd configs
+
+ CONFIG="linux-dri-x86"
+ [ "$CARCH" = "x86_64" ] && CONFIG="linux-dri-x86-64"
+ echo "EXTRA_LIB_PATH =" >> ${CONFIG}
+ echo "OPT_FLAGS = ${CFLAGS}" >> ${CONFIG}
+ echo "SRC_DIRS = glx/x11 mesa" >> ${CONFIG}
+ echo "USING_EGL = 0" >> ${CONFIG}
+ echo "PROGRAM_DIRS =" >> ${CONFIG}
+ echo "MKDEP = makedepend" >> ${CONFIG}
+ echo "DRI_DIRS = trident" >> ${CONFIG}
+ echo "DRI_DRIVER_SEARCH_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "DRI_DRIVER_INSTALL_DIR = /usr/lib/xorg/modules/dri" >> ${CONFIG}
+ echo "ARCH_FLAGS += -DGLX_USE_TLS" >> ${CONFIG}
+ echo "X11_INCLUDES = `pkg-config --cflags-only-I x11`" >> ${CONFIG}
+
+ ln -s ${CONFIG} current
+ cd ${startdir}/src/Mesa-${_mesaver}/src/mesa
+ make linux-solo || return 1
+ cd drivers/dri
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('e89799579d0cf3858362bd751469e0bf'
+ 'e6e6379d7793af40a6bc3ce1bace572e')
diff --git a/abs/core/xf86-video-tseng/PKGBUILD b/abs/core/xf86-video-tseng/PKGBUILD
new file mode 100644
index 0000000..6863c46
--- /dev/null
+++ b/abs/core/xf86-video-tseng/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-tseng
+pkgver=1.1.1
+pkgrel=4
+pkgdesc="X.org tseng video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('488aa9c3ec7a95e6589afa4b50bec8b4')
diff --git a/abs/core/xf86-video-unichrome/PKGBUILD b/abs/core/xf86-video-unichrome/PKGBUILD
new file mode 100644
index 0000000..2f618ca
--- /dev/null
+++ b/abs/core/xf86-video-unichrome/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 3256 2008-06-21 18:31:47Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-unichrome
+pkgver=0.2.6
+pkgrel=8
+pkgdesc="Unichrome video drivers for X.Org"
+arch=(i686 x86_64)
+url="http://unichrome.sf.net/"
+depends=('unichrome-dri>=7.0.3')
+makedepends=('pkgconfig' 'xorg-server>=1.4.0.90' 'xorg-util-macros' 'xf86driproto' \
+ 'glproto' 'mesa>=7.0.3' 'autoconf' 'automake' 'libtool')
+options=('!libtool')
+conflicts=('xf86-video-via' 'openchrome')
+groups=('xorg-video-drivers')
+source=(http://downloads.sf.net/unichrome/${pkgname}-${pkgver}.tar.gz
+ fix-defines.patch)
+md5sums=('fd81a739ae8145bb9729fa9665ef426c' '84142497ed91048bb2d0d082ce8a0229')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -Np1 -i ${startdir}/src/fix-defines.patch || return 1
+ ./autogen.sh --prefix=/usr \
+ --enable-dri
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-unichrome/fix-defines.patch b/abs/core/xf86-video-unichrome/fix-defines.patch
new file mode 100644
index 0000000..5b9f040
--- /dev/null
+++ b/abs/core/xf86-video-unichrome/fix-defines.patch
@@ -0,0 +1,68 @@
+From: Luc Verhaegen <libv@skynet.be>
+Date: Wed, 6 Dec 2006 23:16:01 +0000 (+0100)
+Subject: Fix build issues due to hard uint32_t and Bool #defines.
+X-Git-Url: http://gitweb.freedesktop.org/?p=users/libv/xf86-video-unichrome.git;a=commitdiff;h=13c214345787a3340f230e77b7770b7c2d115c85
+
+Fix build issues due to hard uint32_t and Bool #defines.
+
+Ported from xf86-video_via, which was by Matthias Hopf.
+---
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -70,6 +70,7 @@ sdkdir=$(pkg-config --variable=sdkdir xo
+
+ # Checks for header files.
+ AC_HEADER_STDC
++AC_CHECK_HEADERS([inttypes.h])
+
+ if test "$DRI" != no; then
+ AC_CHECK_FILE([${sdkdir}/dri.h],
+--- a/src/via_dri.h
++++ b/src/via_dri.h
+@@ -35,7 +35,7 @@
+ #define VIA_DRIDDX_VERSION_MINOR 0
+ #define VIA_DRIDDX_VERSION_PATCH 0
+
+-#ifndef XFree86Server
++#if !defined(XFree86Server) && !defined(_XTYPEDEF_BOOL)
+ typedef int Bool;
+ #endif
+
+--- a/src/via_drmclient.h
++++ b/src/via_drmclient.h
+@@ -27,7 +27,13 @@
+ #include "drm.h"
+ #include "xf86drm.h"
+
+-typedef CARD32 uint32_t;
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#else
++# ifndef uint32_t
++# define uint32_t CARD32
++# endif
++#endif
+
+ #ifdef X_NEED_DRMLOCK
+ #define drm_hw_lock_t drmLock
+--- a/src/via_video.c
++++ b/src/via_video.c
+@@ -367,7 +367,7 @@ ViaSwovCopyDMA(VIAPtr pVia, struct ViaMe
+ if (error) {
+ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: DMA copy sheduling failed: %d.\n",
+ __FUNCTION__, error);
+- xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08lX\n",
++ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08X\n",
+ __func__, blit.mem_addr, blit.fb_addr);
+ if (new_buf)
+ xfree(new_buf);
+@@ -391,7 +391,7 @@ ViaSwovCopyDMA(VIAPtr pVia, struct ViaMe
+ if (error) {
+ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: DMA copy sync failed: %d - %d\n",
+ __FUNCTION__, error, -EAGAIN);
+- xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08lX\n",
++ xf86DrvMsg(pVia->scrnIndex, X_ERROR, "%s: Copying %p to %08X\n",
+ __func__, blit.mem_addr, blit.fb_addr);
+ return FALSE;
+ }
diff --git a/abs/core/xf86-video-v4l/PKGBUILD b/abs/core/xf86-video-v4l/PKGBUILD
new file mode 100644
index 0000000..dc8ba80
--- /dev/null
+++ b/abs/core/xf86-video-v4l/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-v4l
+pkgver=0.1.1
+pkgrel=4
+pkgdesc="X.org v4l video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('69339c38eba2cebc357d67e7a755d734')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-vesa/COPYING b/abs/core/xf86-video-vesa/COPYING
new file mode 100644
index 0000000..22b4b13
--- /dev/null
+++ b/abs/core/xf86-video-vesa/COPYING
@@ -0,0 +1,24 @@
+Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.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
+CONECTIVA LINUX 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.
+
+Except as contained in this notice, the name of Conectiva Linux shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from
+Conectiva Linux.
diff --git a/abs/core/xf86-video-vesa/PKGBUILD b/abs/core/xf86-video-vesa/PKGBUILD
new file mode 100644
index 0000000..ed4acc7
--- /dev/null
+++ b/abs/core/xf86-video-vesa/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 5566 2008-07-18 20:48:52Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-vesa
+pkgver=1.3.0
+pkgrel=6
+pkgdesc="X.org vesa video driver"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2')
+groups=('xorg' 'xorg-video-drivers')
+options=('!libtool' 'force')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ COPYING)
+md5sums=('4a307852f3b4850e436a41dab2a73676'
+ 'e5418e7a75e21268637984e70265e146')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xf86-video-vga/PKGBUILD b/abs/core/xf86-video-vga/PKGBUILD
new file mode 100644
index 0000000..1ac84a7
--- /dev/null
+++ b/abs/core/xf86-video-vga/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86-video-vga
+pkgver=4.1.0
+pkgrel=4
+pkgdesc="X.org VGA 16 color video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.1.1')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('b93e5fe9757db779a75cd3ce97b9613d')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-vmware/PKGBUILD b/abs/core/xf86-video-vmware/PKGBUILD
new file mode 100644
index 0000000..5992099
--- /dev/null
+++ b/abs/core/xf86-video-vmware/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3242 2008-06-21 18:06:18Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-vmware
+pkgver=10.16.2
+pkgrel=1
+pkgdesc="X.org vmware video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.4.2' 'randrproto' 'renderproto' 'xextproto' 'xineramaproto' 'videoproto')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('d79b660e1effb86628930e5c01989216')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86-video-voodoo/PKGBUILD b/abs/core/xf86-video-voodoo/PKGBUILD
new file mode 100644
index 0000000..bbbc518
--- /dev/null
+++ b/abs/core/xf86-video-voodoo/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86-video-voodoo
+pkgver=1.1.1
+pkgrel=4
+pkgdesc="X.org voodoo video driver"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('glibc')
+makedepends=('pkgconfig' 'xorg-server>=1.2.0')
+groups=('xorg-video-drivers')
+options=('!libtool')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --build=${CHOST} --host=${CHOST}
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('bc878e795688b49a595b355482d27174')
diff --git a/abs/core/xf86dgaproto/PKGBUILD b/abs/core/xf86dgaproto/PKGBUILD
new file mode 100644
index 0000000..b24270f
--- /dev/null
+++ b/abs/core/xf86dgaproto/PKGBUILD
@@ -0,0 +1,18 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xf86dgaproto
+pkgver=2.0.3
+pkgrel=1
+pkgdesc="X11 Direct Graphics Access extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+md5sums=('42fdcebc66efac02ab4beec2b1b0ad6e')
diff --git a/abs/core/xf86miscproto/PKGBUILD b/abs/core/xf86miscproto/PKGBUILD
new file mode 100644
index 0000000..ca025a5
--- /dev/null
+++ b/abs/core/xf86miscproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86miscproto
+pkgver=0.9.2
+pkgrel=1
+pkgdesc="X11 XFree86-Miscellaneous extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('acae8edeb05a406f7f60bcbb218a8f1d')
+sha1sums=('bfaf893bb97085c79ef84e9911c97d11b2a4fdbe')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xf86vidmodeproto/PKGBUILD b/abs/core/xf86vidmodeproto/PKGBUILD
new file mode 100644
index 0000000..378f02d
--- /dev/null
+++ b/abs/core/xf86vidmodeproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xf86vidmodeproto
+pkgver=2.2.2
+pkgrel=1
+pkgdesc="X11 Video Mode extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('f00844a63d6e76b69eb0eb5e41eed843')
+sha1sums=('4a228958879eb06206d13f4f09ec902f837fb8dd')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xfsprogs/PKGBUILD b/abs/core/xfsprogs/PKGBUILD
new file mode 100644
index 0000000..9750021
--- /dev/null
+++ b/abs/core/xfsprogs/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 3596 2008-06-25 23:37:31Z paul $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=xfsprogs
+pkgver=2.9.8
+pkgrel=10
+pkgdesc="XFS filesystem utilities"
+arch=(i686 x86_64)
+license=('LGPL')
+url="http://oss.sgi.com/projects/xfs/"
+groups=('base')
+depends=(e2fsprogs)
+options=('!makeflags' '!libtool')
+source=(ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_${pkgver}-1.tar.gz)
+md5sums=('f32ab3282c3e02ce25128f7a6c2d5157')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ #sed -i '/autoconf/d' Makefile
+
+ if [ "$CARCH" == "x86_64" ]; then
+ export OPTIMIZER="-march=x86-64 -O1" # for x86_64
+ else export OPTIMIZER="-march=${CARCH} -O1" # for i686
+fi
+
+ export DEBUG=-DNDEBUG
+ make || return 1
+ make DIST_ROOT=${startdir}/pkg install install-dev
+}
diff --git a/abs/core/xineramaproto/PKGBUILD b/abs/core/xineramaproto/PKGBUILD
new file mode 100644
index 0000000..f1c69e0
--- /dev/null
+++ b/abs/core/xineramaproto/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xineramaproto
+pkgver=1.1.2
+pkgrel=1
+pkgdesc="X11 Xinerama extension wire protocol"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('1cc292c562962ad0ad3a253cae68c632')
+sha1sums=('d09ef306ffc0d058120051d88dd64776fd0de0d5')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xkeyboard-config/PKGBUILD b/abs/core/xkeyboard-config/PKGBUILD
new file mode 100644
index 0000000..5b26253
--- /dev/null
+++ b/abs/core/xkeyboard-config/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 7542 2008-08-02 21:31:59Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+pkgname=xkeyboard-config
+pkgver=1.3
+pkgrel=1
+pkgdesc="X keyboard configuration files"
+arch=(i686 x86_64)
+license=('custom')
+url="http://www.freedesktop.org/wiki/Software/XKeyboardConfig"
+depends=('xorg-xkb-utils')
+makedepends=('perlxml' 'pkgconfig')
+provides=('xkbdata')
+replaces=('xkbdata')
+conflicts=('xkbdata')
+source=(http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-${pkgver}.tar.bz2)
+md5sums=('d9e9f69f9c6ef5c5a8255cfbe6a57d51')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --with-xkb-base=/usr/share/X11/xkb \
+ --with-xkb-rules-symlink=xorg \
+ --enable-compat-rules=yes || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ rm -f ${startdir}/pkg/usr/share/X11/xkb/compiled || return 1
+ install -m755 -d ${startdir}/pkg/var/lib/xkb
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xmltv/PKGBUILD b/abs/core/xmltv/PKGBUILD
new file mode 100755
index 0000000..2583e94
--- /dev/null
+++ b/abs/core/xmltv/PKGBUILD
@@ -0,0 +1,29 @@
+# Maintainer: Allan McRae <mcrae_allan@hotmail.com>
+# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+
+pkgname=xmltv
+pkgver=0.5.51
+pkgrel=2
+pkgdesc="Set of utilities to download tv listings and format them in xml"
+arch=(i686 x86_64)
+url="http://xmltv.org/wiki/"
+license="GPL"
+depends=('perl-archive-zip' 'perl-date-manip' 'perl-file-slurp' 'perl-html-tree' \
+ 'perl-http-cache-transparent' 'perl-io-stringy' 'perl-xml-libxml' \
+ 'perl-lingua-en-numbers' 'perl-lingua-en-numbers-ordinate' 'perl-lingua-preferred' \
+ 'perl-soap-lite' 'perl-term-progressbar' 'perl-term-readkey' 'perl-text-bidi' \
+ 'perl-text-kakasi' 'perl-timedate' 'perl-tk-tablematrix' 'perl-unicode-string' \
+ 'perl-unicode-utf8simple' 'perl-www-mechanize' 'perl-xml-twig' 'perl-xml-writer')
+source=(http://downloads.sourceforge.net/xmltv/xmltv-${pkgver}.tar.bz2)
+md5sums=('b0b3f0d31b0e7fbc2f615024faedfbb7')
+
+build() {
+ cd $startdir/src/xmltv-${pkgver}
+ yes | perl Makefile.PL PREFIX=/usr INSTALLDIRS=vendor
+ make || return 1
+ make DESTDIR=$startdir/pkg PREFIX=/usr install
+
+ # remove perllocal.pod and .packlist
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+} \ No newline at end of file
diff --git a/abs/core/xorg-apps/PKGBUILD b/abs/core/xorg-apps/PKGBUILD
new file mode 100644
index 0000000..dae4b4e
--- /dev/null
+++ b/abs/core/xorg-apps/PKGBUILD
@@ -0,0 +1,78 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-apps
+pkgver=1.0.3
+pkgrel=3
+pkgdesc="Various X.Org applications"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(libxcursor libxkbfile libpng libxft libfontenc libxaw)
+makedepends=(pkgconfig xbitmaps)
+
+source=(${url}/releases/individual/app/oclock-1.0.1.tar.bz2
+ ${url}/releases/individual/app/luit-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xclock-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xpr-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xwd-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xwud-1.0.1.tar.bz2
+ ${url}/releases/individual/app/x11perf-1.4.1.tar.bz2
+ ${url}/releases/individual/app/xbiff-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xclipboard-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xconsole-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xcursorgen-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xeyes-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xkill-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xload-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xlogo-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xmag-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmessage-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xcalc-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xman-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xedit-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmh-1.0.1.tar.bz2)
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ case "${i}" in
+ x11perf*)
+ sed -e 's|^LIBPATH = $(libdir)|LIBPATH = $(datadir)|' \
+ -i Makefile.* || return 1
+ ;;
+ xedit*)
+ sed -e 's|^XEDITDIR = ${libdir}|XEDITDIR = ${datadir}|' \
+ -i Makefile.* || return 1
+ ;;
+ esac
+ ./configure --prefix=/usr --disable-xprint \
+ --with-localealiasfile=/usr/share/X11/locale/locale.alias
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
+md5sums=('91f49547f9ed3cd0137c8b7c3183e360'
+ 'b01e4f71c20fc1c79ed727759c1df40c'
+ '6b930326f71993fb54b7203902b387cd'
+ '6b3a6896081f628bf5a2c9129417c86f'
+ '911addfb7fa402217ddac63e5c1d97c7'
+ '6e3c5d0297d88e890b6f5df31f73dd60'
+ 'fd06c8b8e3572a0e14af65a49e0dd7d1'
+ '404f5add4537d22dd109c33e518a5190'
+ '2c6ecedb10dc51adbb64c95f22fd99c2'
+ '0e1a3110bebabecc2897d67a973526b0'
+ '6fc90896b8c786cb1a2100b4167f7874'
+ '033f14f7c4e30d1f4edbb22d5ef86883'
+ 'f66d76abb0f75514ca32272e23cca757'
+ 'b41ed6b4bcfc9897366c27a94d2bf150'
+ '4c5482552f38a7d42398a694cc9b2ee6'
+ '7c6a783e42c88360ac31d259a864a19d'
+ 'b3674c3a00a089764d86aa94e257ccec'
+ 'd31a99795b9668f047aa11bf36df6df0'
+ '855f2dbfa2aff58b8b9cd6a1c1120fad'
+ 'c56160e93c24ddf17e69891ed50deb72'
+ '656bcbdd41818a8b5a9f7dba77a3eeba')
diff --git a/abs/core/xorg-font-utils/PKGBUILD b/abs/core/xorg-font-utils/PKGBUILD
new file mode 100644
index 0000000..a97db44
--- /dev/null
+++ b/abs/core/xorg-font-utils/PKGBUILD
@@ -0,0 +1,54 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-font-utils
+pkgver=1.0.3
+pkgrel=3
+pkgdesc="X.Org font utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+options=('!libtool')
+depends=('libxfont' 'libfontenc' 'xproto')
+makedepends=('pkgconfig')
+replaces=('font-util')
+provides=('font-util')
+conflicts=('font-util')
+install=xorg-font-utils.install
+source=(${url}/releases/individual/app/bdftopcf-1.0.1.tar.bz2
+ ${url}/releases/individual/app/fonttosfnt-1.0.3.tar.bz2
+ ${url}/releases/individual/app/mkfontdir-1.0.3.tar.bz2
+ ${url}/releases/individual/app/mkfontscale-1.0.3.tar.bz2
+ ${url}/releases/individual/font/font-util-1.0.1.tar.bz2
+ http://people.redhat.com/yshao/ttmkfdir2.20021109.tar.bz2
+ ttmkfdir.patch
+ ttmkfdir_gcc43.patch)
+
+build() {
+ cd ${startdir}/src
+
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ if [ "${i}" = "ttmkfdir2" ]; then
+ patch -Np0 -i ${startdir}/src/ttmkfdir.patch || return 1
+ patch -Np1 -i ${startdir}/src/ttmkfdir_gcc43.patch || return 1
+ make || return 1
+ mkdir -p ${startdir}/pkg/usr/bin
+ install -m755 ttmkfdir ${startdir}/pkg/usr/bin/ || return 1
+ else
+ ./configure --prefix=/usr --with-mapdir=/usr/share/fonts/util
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ fi
+ popd
+ fi
+ done
+}
+md5sums=('9685fab33d39954ab8a0d22e0969d5a4'
+ 'b0ebd86029571239b9d7b0c61191b591'
+ '4d0f89a23f77e22f1671a77bf0898955'
+ '1d608771aca9695b828cec1e34178fd1'
+ 'b81535f78fe05732931f02841e5ca37b'
+ '79e0401393c9728865aa73bb2bd68dd4'
+ '099278628ad63631e872bc5590bade74'
+ '43cd6303d38dbbf36ba91d3a08430bb4')
diff --git a/abs/core/xorg-font-utils/ttmkfdir.patch b/abs/core/xorg-font-utils/ttmkfdir.patch
new file mode 100644
index 0000000..983c18b
--- /dev/null
+++ b/abs/core/xorg-font-utils/ttmkfdir.patch
@@ -0,0 +1,86 @@
+--- encoding.cpp.orig Tue Mar 12 15:40:09 2002
++++ encoding.cpp Sun Mar 21 22:33:00 2004
+@@ -2,7 +2,7 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+-#include "freetype/freetype.h"
++#include <ft2build.h>
+
+ #include "ttmkfdir.h"
+ #include "encoding.h"
+
+--- encoding.h.orig Tue Mar 12 15:41:27 2002
++++ encoding.h Sun Mar 21 22:35:15 2004
+@@ -6,7 +6,8 @@
+ #include <map>
+ #include <string>
+
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
+
+ #include "util.h"
+
+--- ttf.h.orig Wed Mar 13 19:16:38 2002
++++ ttf.h Sun Mar 21 22:30:16 2004
+@@ -3,15 +3,18 @@
+ #define TTF_H__
+
+ #include <string>
+-#include "freetype/freetype.h"
+-#include "freetype/tttables.h"
+-#include "freetype/ftsnames.h"
+-#include "freetype/ttnameid.h"
+-#include "freetype/fterrors.h"
+-#include "freetype/ftmodule.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include FT_TRUETYPE_TABLES_H
++#include FT_SFNT_NAMES_H
++#include FT_TRUETYPE_IDS_H
++#include FT_ERRORS_H
++#include FT_MODULE_H
+
+ #include "util.h"
+ #include "encoding.h"
++
++using namespace std;
+
+ namespace ttf {
+
+--- Makefile.orig Thu Mar 14 14:03:49 2002
++++ Makefile Sun Jan 22 20:15:17 2006
+@@ -1,10 +1,7 @@
+-FREETYPE_BASE=/usr/include/freetype2
+-FREETYPE_INCL=-I$(FREETYPE_BASE)/.
+-FREETYPE_LIB=/usr/lib/libfreetype.so
+-
+-DEBUG=-ggdb
+-CXX=g++
+-CXXFLAGS=-Wall -pedantic $(FREETYPE_INCL) $(DEBUG)
++FREETYPE_INCL=`freetype-config --cflags`
++FREETYPE_LIB=`freetype-config --libs`
+
+-LDFLAGS=$(FREETYPE_LIB) $(DEBUG)
++CXXFLAGS+=$(FREETYPE_INCL)
++
++LDFLAGS+=$(FREETYPE_LIB)
+
+@@ -21,3 +18,3 @@
+ parser.cpp: encoding.l
+- flex -i -8 -o$@ $<
++ lex -i -8 -o$@ $<
+
+--- ttf.cpp.orig 2002-11-07 06:30:04.000000000 +0100
++++ ttf.cpp
+@@ -226,7 +226,7 @@ Face::FontFamilyName (void) const
+ for (i = 0; i < n; i++) {
+ if ((fterror = FT_Get_Sfnt_Name (face, i, &NamePtr)) != FT_Err_Ok) {
+ std::cout << "Warning: Can't SFNT name : " << FileName << "(" << fterror << ")" << std::endl;
+- return;
++ return "unknown";
+ };
+ platform = NamePtr.platform_id;
+ encoding = NamePtr.encoding_id;
+
diff --git a/abs/core/xorg-font-utils/ttmkfdir_gcc43.patch b/abs/core/xorg-font-utils/ttmkfdir_gcc43.patch
new file mode 100644
index 0000000..5dadb11
--- /dev/null
+++ b/abs/core/xorg-font-utils/ttmkfdir_gcc43.patch
@@ -0,0 +1,8 @@
+--- ttmkfdir-3.0.9-orig/directory.cpp 2008-04-20 19:48:00.000000000 -0600
++++ ttmkfdir-3.0.9/directory.cpp 2008-04-20 19:48:39.000000000 -0600
+@@ -1,4 +1,5 @@
+ #include <cctype>
++#include <cstring>
+ #include <dirent.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
diff --git a/abs/core/xorg-font-utils/xorg-font-utils.install b/abs/core/xorg-font-utils/xorg-font-utils.install
new file mode 100644
index 0000000..a291dc6
--- /dev/null
+++ b/abs/core/xorg-font-utils/xorg-font-utils.install
@@ -0,0 +1,8 @@
+# arg 1: the new package version
+post_install() {
+ ldconfig -r .
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/xorg-fonts-100dpi/PKGBUILD b/abs/core/xorg-fonts-100dpi/PKGBUILD
new file mode 100644
index 0000000..1c3cb5f
--- /dev/null
+++ b/abs/core/xorg-fonts-100dpi/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-fonts-100dpi
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org 100dpi fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xorg-fonts-encodings' 'xorg-fonts-alias' 'xorg-font-utils' 'fontconfig')
+groups=('xorg')
+install=xfonts.install
+source=(${url}/releases/individual/font/font-adobe-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-adobe-utopia-100dpi-1.0.1.tar.bz2
+ ${url}/releases/individual/font/font-bh-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bh-lucidatypewriter-100dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bitstream-100dpi-1.0.0.tar.bz2)
+md5sums=('443acfe70e26716282f9068730fe92c4' '5d28a30efef966f8dbbaff9a6619f01a'\
+ 'e5592de74a5c04e3a2608800dd079197' 'c44d3f730564da465993e9292a33c235'\
+ '173352ddec3d26e2b91df1edcf1ae85b')
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-100dpi-1.0.0 font-*-100dpi-1.0.1; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/100dpi
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ done
+ rm -f ${startdir}/pkg/usr/share/fonts/100dpi/fonts.*
+}
+
diff --git a/abs/core/xorg-fonts-100dpi/xfonts.install b/abs/core/xorg-fonts-100dpi/xfonts.install
new file mode 100644
index 0000000..9400b64
--- /dev/null
+++ b/abs/core/xorg-fonts-100dpi/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/100dpi
+ mkfontdir /usr/share/fonts/100dpi
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/xorg-fonts-75dpi/PKGBUILD b/abs/core/xorg-fonts-75dpi/PKGBUILD
new file mode 100644
index 0000000..435c14f
--- /dev/null
+++ b/abs/core/xorg-fonts-75dpi/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-fonts-75dpi
+pkgver=1.0.1
+pkgrel=2
+pkgdesc="X.org 75dpi fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig)
+groups=('xorg')
+install=xfonts.install
+source=(${url}/releases/individual/font/font-adobe-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-adobe-utopia-75dpi-1.0.1.tar.bz2
+ ${url}/releases/individual/font/font-bh-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bh-lucidatypewriter-75dpi-1.0.0.tar.bz2
+ ${url}/releases/individual/font/font-bitstream-75dpi-1.0.0.tar.bz2)
+md5sums=('813b5d3723c84388a938ab6732e1329c' 'dd912284e4750023f9682812532fa033'\
+ '6e51cd02f4ce32e1393e34ab17a9b211' 'fdd9be5b9db94ef363a33e39b7977e2b'\
+ 'beb476657d50d07d17eef7c325a5ed08')
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-75dpi-1.0.0 font-*-75dpi-1.0.1; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/75dpi
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ done
+ rm -f ${startdir}/pkg/usr/share/fonts/75dpi/fonts.*
+}
+
diff --git a/abs/core/xorg-fonts-75dpi/xfonts.install b/abs/core/xorg-fonts-75dpi/xfonts.install
new file mode 100644
index 0000000..997982b
--- /dev/null
+++ b/abs/core/xorg-fonts-75dpi/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/75dpi
+ mkfontdir /usr/share/fonts/75dpi
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/xorg-fonts-alias/PKGBUILD b/abs/core/xorg-fonts-alias/PKGBUILD
new file mode 100644
index 0000000..41b431d
--- /dev/null
+++ b/abs/core/xorg-fonts-alias/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-alias
+pkgver=1.0.1
+pkgrel=1
+pkgdesc="X.org font alias files"
+url="http://xorg.freedesktop.org/"
+_xorg=X11R7.0
+_relname=font-alias
+arch=('i686' 'x86_64')
+source=(${url}/releases/${_xorg}/src/everything/${_relname}-${_xorg}-${pkgver}.tar.bz2)
+md5sums=('de7035b15ba7edc36f8685ab3c17a9cf')
+
+build() {
+ cd ${startdir}/src/${_relname}-${_xorg}-${pkgver}
+ ./configure --prefix=/usr \
+ --with-top-fontdir=/usr/share/fonts
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
+
diff --git a/abs/core/xorg-fonts-encodings/PKGBUILD b/abs/core/xorg-fonts-encodings/PKGBUILD
new file mode 100644
index 0000000..e0e3633
--- /dev/null
+++ b/abs/core/xorg-fonts-encodings/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-encodings
+pkgver=1.0.2
+pkgrel=2
+pkgdesc="X.org font encoding files"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('xorg-font-utils')
+install="xorg-fonts-encodings.install"
+source=(${url}/releases/individual/font/encodings-${pkgver}.tar.bz2)
+md5sums=('11adda157b03d63fd61d95ad7ef00466')
+
+build() {
+ cd ${startdir}/src/encodings-${pkgver}
+ ./configure --prefix=/usr \
+ --with-encodingsdir=/usr/share/fonts/encodings
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/core/xorg-fonts-encodings/xorg-fonts-encodings.install b/abs/core/xorg-fonts-encodings/xorg-fonts-encodings.install
new file mode 100644
index 0000000..37eac40
--- /dev/null
+++ b/abs/core/xorg-fonts-encodings/xorg-fonts-encodings.install
@@ -0,0 +1,16 @@
+# arg 1: the new package version
+post_install() {
+ echo -n "Regenerating font encodings... "
+ pushd usr/share/fonts/encodings &>/dev/null
+ mkfontscale -n -e "/usr/share/fonts/encodings" -e "/usr/share/fonts/encodings/large"
+ popd &>/dev/null
+ echo "done."
+}
+
+post_upgrade() {
+ post_install
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/xorg-fonts-misc/PKGBUILD b/abs/core/xorg-fonts-misc/PKGBUILD
new file mode 100644
index 0000000..6c51349
--- /dev/null
+++ b/abs/core/xorg-fonts-misc/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+#Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-fonts-misc
+pkgver=1.0.0
+pkgrel=3
+pkgdesc="X.org misc fonts"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig)
+install=xfonts.install
+source=(${url}/releases/individual/font/font-arabic-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-cursor-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-daewoo-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-dec-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-isas-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-jis-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-micro-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-misc-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-mutt-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-schumacher-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-sony-misc-${pkgver}.tar.bz2
+ ${url}/releases/individual/font/font-sun-misc-${pkgver}.tar.bz2)
+
+md5sums=(81595016e2ff859716fc256ebb136ba6 305fa22cdfefb8f80babd711051a534b
+ 61f9eab48c619af5494d3e384d8d7d79 284e554db1c64fb7580a06df01444a2b
+ ec709a96b64b497a5cb5658c93bd38dc 61febb49a71065723a1fba17cbf23c67
+ 8c8bffd7540f05caa0dbb4e6e1d6c58e 2a57f6188c41d4bc1b88ca3d08ad011d
+ 648b409b7eb78ad1cd5f6d7fac3eef88 f1c6063d2fadc57e696a0aab69afd6e0
+ 0dfddd1a946e4497f009094c0ae1bdd5 e17d43a7c6c0d862cfba0908ff132ffa)
+
+build() {
+ cd ${startdir}/src
+ for dir in font-*-misc-${pkgver}; do
+ pushd ${dir}
+ ./configure --prefix=/usr \
+ --with-mapfiles=/usr/share/fonts/util \
+ --with-fontdir=/usr/share/fonts/misc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ rm -f ${startdir}/pkg/usr/share/fonts/*/fonts.*
+ done
+}
+
diff --git a/abs/core/xorg-fonts-misc/xfonts.install b/abs/core/xorg-fonts-misc/xfonts.install
new file mode 100644
index 0000000..6b5cf74
--- /dev/null
+++ b/abs/core/xorg-fonts-misc/xfonts.install
@@ -0,0 +1,20 @@
+post_install() {
+ echo -n "Updating font cache... "
+ fc-cache -f > /dev/null
+ mkfontscale /usr/share/fonts/misc
+ mkfontdir /usr/share/fonts/misc
+ echo "done."
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/core/xorg-res-utils/PKGBUILD b/abs/core/xorg-res-utils/PKGBUILD
new file mode 100644
index 0000000..7e062e5
--- /dev/null
+++ b/abs/core/xorg-res-utils/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-res-utils
+pkgver=1.0.3
+pkgrel=2
+pkgdesc="X.Org X11 resource utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxaw')
+makedepends=('pkgconfig')
+groups=('xorg')
+source=(${url}/releases/individual/app/appres-1.0.1.tar.bz2
+ ${url}/releases/individual/app/editres-1.0.3.tar.bz2
+ ${url}/releases/individual/app/listres-1.0.1.tar.bz2
+ ${url}/releases/individual/app/viewres-1.0.1.tar.bz2)
+md5sums=('420e6cdf38bb771ec8b00228bf09e8ff' 'a25f931cc6c8d03daaed434f5db5df2d'\
+ '827a1ac5adf9aadd0c13b54a897e297b' 'cdbed540daf7975b56000420c9aa5bf9')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr --disable-xprint
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core/xorg-server-utils/PKGBUILD b/abs/core/xorg-server-utils/PKGBUILD
new file mode 100644
index 0000000..eb30890
--- /dev/null
+++ b/abs/core/xorg-server-utils/PKGBUILD
@@ -0,0 +1,75 @@
+# $Id: PKGBUILD 3241 2008-06-21 18:04:39Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-server-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="X.Org utilities required by xorg-server"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxfontcache' 'libxi' 'liblbxutil' 'libxrandr>=1.2.1' 'libxxf86misc'
+ 'libxaw' 'libxxf86vm' 'libxtrap' 'mcpp>=2.6' 'xtrans')
+makedepends=('pkgconfig' 'xbitmaps' 'xproxymngproto')
+source=(${url}/releases/individual/app/iceauth-1.0.2.tar.bz2
+ ${url}/releases/individual/app/lbxproxy-1.0.1.tar.bz2
+ ${url}/releases/individual/app/rgb-1.0.3.tar.bz2
+ ${url}/releases/individual/app/sessreg-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xcmsdb-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xbacklight-1.1.tar.bz2
+ ${url}/releases/individual/app/xgamma-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xhost-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xmodmap-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xrandr-1.2.3.tar.bz2
+ ${url}/releases/individual/app/xrdb-1.0.5.tar.bz2
+ ${url}/releases/individual/app/xrefresh-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xset-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xsetmode-1.0.0.tar.bz2
+ ${url}/releases/individual/app/xsetpointer-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xsetroot-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xstdcmap-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xtrap-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xvidtune-1.0.1.tar.bz2)
+md5sums=('7ab8b64edf0212a9d9a3c8129901a450'
+ '9d5045a5c76b1fe360221b967a5aa0e9'
+ '44ea16cc3104de6401bc74035f642357'
+ '839e968d7197b9563f0fd8a5a3aac2e3'
+ '8579d5f50ba7f0c4a5bf16b9670fea01'
+ '51b4a1c0ae2b3bd77417306fd78a3e94'
+ 'f13ddedaa63a608d3b025d326f4f5b5d'
+ 'f746aba36f075ae4cae313d849a94f4e'
+ '626731003ec22a74ecf9e44ed098bbdf'
+ '41a9d0cc073fa6165a31fbf9e85f68a6'
+ '9c30b8e1709d5367beb7706146640c07'
+ '1228f890f86148e4e6ae22aa73118cbb'
+ '2f41fd983ba4d89419204854936025e2'
+ 'd074e79d380b031d2f60e4cd56538c93'
+ '9e5bcbeda4aaf02bfa095e41d30baee4'
+ '9af7db9f3052aef0b11636720b3101dd'
+ '86ab558441edfb86f853639e4290a754'
+ '97a62a011a11f03b46d72851aa298fa8'
+ 'e0744594f4e5969b20df28d897781318')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ case "${i}" in
+ xrdb*)
+ ./configure --prefix=/usr --with-cpp=/usr/bin/mcpp\ -@old
+ ;;
+ lbxproxy*)
+ sed -e 's|$(libdir)/X11/lbxproxy|$(datadir)/X11/libxproxy|g' \
+ -i Makefile.* || return 1
+ ./configure --prefix=/usr
+ ;;
+ *)
+ ./configure --prefix=/usr
+ ;;
+ esac
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core/xorg-server/PKGBUILD b/abs/core/xorg-server/PKGBUILD
new file mode 100644
index 0000000..0582a82
--- /dev/null
+++ b/abs/core/xorg-server/PKGBUILD
@@ -0,0 +1,92 @@
+# $Id: PKGBUILD 3240 2008-06-21 18:01:37Z jgc $
+# Maintainer: Alexander Baldeck <kth5@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+
+pkgname=xorg-server
+pkgver=1.4.2
+pkgrel=1
+_mesaver=7.0.3
+pkgdesc="X.Org X servers"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org"
+depends=('libxkbui' 'ncurses' 'libxxf86misc' 'libxfont'
+ 'libxaw' 'libxxf86vm' 'xcursor-themes'
+ 'xkeyboard-config' 'xorg-server-utils' 'xorg-utils' 'libdrm>=2.3.0'
+ 'xorg-fonts-misc' 'pixman>=0.10' 'xbitmaps')
+makedepends=('pkgconfig' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto'
+ 'xf86bigfontproto' 'resourceproto' 'evieext' 'damageproto>=1.1.0'
+ 'compositeproto>=0.4' 'scrnsaverproto' 'libxres' 'xorg-util-macros'
+ 'randrproto' 'glproto>=1.4.9' 'renderproto>=0.9.3' 'autoconf'
+ 'automake' 'libtool' 'bison' 'flex' 'gcc' 'libxrender'
+ 'libxfixes' 'quilt' 'mesa')
+options=('!libtool')
+provides=('x-server')
+groups=('xorg')
+install=xorg-server.install
+source=(${url}/releases/individual/xserver/${pkgname}-${pkgver}.tar.bz2
+ http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2
+ ftp://ftp.archlinux.org/other/xorg-server/xorg-server-patches-1.4.2-1.tar.bz2)
+md5sums=('fa2915ae377f61c340a18ebef484b64b'
+ 'e6e6379d7793af40a6bc3ce1bace572e'
+ 'bc907d6d69b55b445c3046a4d7ecc8ef')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ quilt push -a || return 1
+ libtoolize --force --copy || return 1
+ aclocal || return 1
+ autoconf || return 1
+ automake --add-missing || return 1
+ ./configure --prefix=/usr \
+ --with-mesa-source=${startdir}/src/Mesa-${_mesaver} \
+ --enable-ipv6 \
+ --enable-dri \
+ --disable-dmx \
+ --enable-xvfb \
+ --enable-xnest \
+ --enable-composite \
+ --enable-xcsecurity \
+ --enable-xorg \
+ --enable-xtrap \
+ --enable-xevie \
+ --enable-xephyr \
+ --enable-glx-tls \
+ --enable-xorgcfg \
+ --enable-kdrive \
+ --disable-xfbdev \
+ --disable-xfake \
+ --disable-xsdl \
+ --disable-kdrive-vesa \
+ --enable-install-setuid \
+ --disable-xprint \
+ --sysconfdir=/etc/X11 \
+ --localstatedir=/var \
+ --with-default-font-path=/usr/share/fonts/misc,/usr/share/fonts/100dpi:unscaled,/usr/share/fonts/75dpi:unscaled,/usr/share/fonts/TTF,/usr/share/fonts/Type1 \
+ --with-rgb-path=/usr/share/X11/rgb \
+ --with-xkb-path=/usr/share/X11/xkb \
+ --with-xkb-output=/usr/share/X11/xkb/compiled \
+ --with-dri-driver-path=/usr/lib/xorg/modules/dri \
+ --disable-config-hal \
+ --disable-static
+
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${startdir}/pkg/etc/X11 || return 1
+ install -m755 -d ${startdir}/pkg/var/lib || return 1
+ mv ${startdir}/pkg/usr/share/X11/xkb/compiled ${startdir}/pkg/var/lib/xkb
+ ln -sf /var/lib/xkb ${startdir}/pkg/usr/share/X11/xkb/compiled || return 1
+
+ cd ${startdir}/pkg/usr/lib/xorg/modules/extensions
+ mv libGLcore.so libGLcore.xorg
+ mv libglx.so libglx.xorg
+
+ # No longer needed, but as nvidia-utils mangles these files,
+ # keep them like this so they can be restored
+ mv ${startdir}/pkg/usr/lib/xorg/modules/libwfb.so \
+ ${startdir}/pkg/usr/lib/xorg/modules/libwfb.so.1.4 || return 1
+
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xorg-server/xorg-server.install b/abs/core/xorg-server/xorg-server.install
new file mode 100644
index 0000000..f7ff03a
--- /dev/null
+++ b/abs/core/xorg-server/xorg-server.install
@@ -0,0 +1,12 @@
+post_install() {
+ rm -f /usr/lib/xorg/modules/libwfb.so
+ ln -sf libwfb.so.1.4 /usr/lib/xorg/modules/libwfb.so
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ rm -f /usr/lib/xorg/modules/libwfb.so
+}
diff --git a/abs/core/xorg-utils/PKGBUILD b/abs/core/xorg-utils/PKGBUILD
new file mode 100644
index 0000000..2355fd9
--- /dev/null
+++ b/abs/core/xorg-utils/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id: PKGBUILD 3238 2008-06-21 17:44:50Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="Collection of client utilities used to query the X server"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxxf86dga' 'libxi' 'libxxf86misc' 'libxtst' 'libxinerama' 'libxv'
+ 'libdmx' 'libxft' 'libxaw')
+makedepends=('pkgconfig' 'mesa')
+source=(${url}/releases/individual/app/xdpyinfo-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xdriinfo-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xev-1.0.3.tar.bz2
+ ${url}/releases/individual/app/xfd-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xfontsel-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xlsatoms-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xlsclients-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xlsfonts-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xprop-1.0.4.tar.bz2
+ ${url}/releases/individual/app/xvinfo-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xwininfo-1.0.3.tar.bz2)
+md5sums=('b7cbab6cbcd12bf7ad65dbc12d86e104'
+ 'a5ec51ed9f0a55dc3462d90d52ff899c'
+ 'a9532c3d1683c99bb5df1895cb3a60b1'
+ 'c72abd90f50ef459bc14b39ec9fcc7f8'
+ '288fe4cf8a990e4e602aac16dd9109fb'
+ '69adcda848479acc3b82b3928812d191'
+ '44473b880d26bfbe8b3d4d72b183cba7'
+ '28958248590ff60ecd70e8f590d977b7'
+ '48aa8fd78802f477dcbf9ef0dfd9f783'
+ 'e1e318436f49e2f0f3764593dadd9ad2'
+ '721f84332c98c33152460bb22ba9ded6')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core/xorg-xauth/PKGBUILD b/abs/core/xorg-xauth/PKGBUILD
new file mode 100644
index 0000000..5f42377
--- /dev/null
+++ b/abs/core/xorg-xauth/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 4401 2008-07-06 20:28:57Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xauth
+pkgver=1.0.3
+pkgrel=1
+pkgdesc="X.Org authorization settings program"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+depends=('libxmu')
+makedepends=('pkgconfig')
+source=(${url}/releases/individual/app/xauth-${pkgver}.tar.bz2)
+md5sums=('e91e10ace1df0d5f2cbc74ead256407a')
+
+build() {
+ cd ${startdir}/src/xauth-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg 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/xorg-xinit/PKGBUILD b/abs/core/xorg-xinit/PKGBUILD
new file mode 100644
index 0000000..ffad09c
--- /dev/null
+++ b/abs/core/xorg-xinit/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 3232 2008-06-21 15:51:37Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xinit
+pkgver=1.1.0
+pkgrel=1
+pkgdesc="X.Org initialisation program "
+arch=(i686 x86_64)
+license=('GPL')
+url="http://xorg.freedesktop.org/"
+depends=('libx11' 'xorg-xauth')
+makedepends=('pkgconfig')
+backup=('etc/skel/.xinitrc'
+ 'etc/skel/.xsession'
+ 'etc/X11/xinit/xserverrc'
+ 'etc/X11/xinit/xinitrc')
+groups=('xorg')
+source=(${url}/releases/individual/app/xinit-${pkgver}.tar.bz2
+ xinitrc
+ xsession
+ xserverrc)
+options=(!emptydirs)
+md5sums=('9144097186c3d2454beffe8ac3b53c6e'
+ 'f165d9a52284ef8cd4c8a129463a2b49'
+ '7873d97db30d6c279ed37e3559e7c59d'
+ 'bb550d3b9a2d2b6cbe6e2667a3a7cd03')
+
+build() {
+ cd ${startdir}/src/xinit-${pkgver}
+ ./configure --prefix=/usr
+ make XINITDIR=/etc/X11/xinit || return 1
+ make XINITDIR=/etc/X11/xinit DESTDIR=${startdir}/pkg install || return 1
+
+ install -m755 -d ${pkgdir}/etc/skel
+ install -m755 -d ${pkgdir}/etc/X11/xinit
+ install -m755 ${srcdir}/xinitrc ${pkgdir}/etc/skel/.xinitrc || return 1
+ install -m755 ${srcdir}/xsession ${pkgdir}/etc/skel/.xsession || return 1
+ install -m755 ${srcdir}/xserverrc ${pkgdir}/etc/X11/xinit/xserverrc
+}
diff --git a/abs/core/xorg-xinit/xinitrc b/abs/core/xorg-xinit/xinitrc
new file mode 100644
index 0000000..7af398d
--- /dev/null
+++ b/abs/core/xorg-xinit/xinitrc
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+#
+# ~/.xinitrc
+#
+# Executed by startx (run your window manager from here)
+#
+
+# exec gnome-session
+# exec startkde
+# exec startxfce4
+# exec icewm
+# exec openbox
+# exec blackbox
+# exec fluxbox
+# exec ratpoison
+# exec dwm
+# ... or any other WM of your choosing ...
diff --git a/abs/core/xorg-xinit/xserverrc b/abs/core/xorg-xinit/xserverrc
new file mode 100644
index 0000000..6a636c1
--- /dev/null
+++ b/abs/core/xorg-xinit/xserverrc
@@ -0,0 +1 @@
+exec /usr/bin/X -nolisten tcp
diff --git a/abs/core/xorg-xinit/xsession b/abs/core/xorg-xinit/xsession
new file mode 100644
index 0000000..a16dc0b
--- /dev/null
+++ b/abs/core/xorg-xinit/xsession
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+#
+# ~/.xsession
+#
+# Executed by xdm/gdm/kdm at login
+#
+
+/bin/bash --login -i ~/.xinitrc
+
diff --git a/abs/core/xorg-xkb-utils/PKGBUILD b/abs/core/xorg-xkb-utils/PKGBUILD
new file mode 100644
index 0000000..5bfac78
--- /dev/null
+++ b/abs/core/xorg-xkb-utils/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 4399 2008-07-06 20:26:41Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xorg-xkb-utils
+pkgver=7.3
+pkgrel=1
+pkgdesc="X.org keyboard utilities"
+arch=(i686 x86_64)
+url="http://xorg.freedesktop.org/"
+depends=('libxaw' 'libxkbfile')
+makedepends=(pkgconfig)
+source=(${url}/releases/individual/app/xkbutils-1.0.1.tar.bz2
+ ${url}/releases/individual/app/xkbcomp-1.0.5.tar.bz2
+ ${url}/releases/individual/app/xkbevd-1.0.2.tar.bz2
+ ${url}/releases/individual/app/xkbprint-1.0.1.tar.bz2
+ ${url}/releases/individual/app/setxkbmap-1.0.4.tar.bz2)
+md5sums=('84396a3dd75337caaae29d8fa5616fb1'
+ '6cc96c3e4ed5d9802fe717beac008f19'
+ '68f2a143716c23b566f8509d9498f516'
+ 'b98ae2d8b21c545b7b322d0b302efefa'
+ '6fab3bb176be9e510c5613d054ef1ca4')
+
+build() {
+ cd ${startdir}/src
+ for i in *; do
+ if [ -d "${i}" ]; then
+ pushd "${i}"
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ popd
+ fi
+ done
+}
diff --git a/abs/core/xproto/PKGBUILD b/abs/core/xproto/PKGBUILD
new file mode 100644
index 0000000..bdde6af
--- /dev/null
+++ b/abs/core/xproto/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 3230 2008-06-21 15:50:01Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xproto
+pkgver=7.0.13
+pkgrel=1
+pkgdesc="X11 core wire protocol and auxiliary headers"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/proto/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('7d26f45dca52632712a696e0631dc17b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ install -D -m644 ${startdir}/src/${pkgname}-${pkgver}/COPYING \
+ ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/abs/core/xterm/PKGBUILD b/abs/core/xterm/PKGBUILD
new file mode 100644
index 0000000..ced251a
--- /dev/null
+++ b/abs/core/xterm/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 3697 2008-06-29 12:44:48Z jgc $
+# ppc Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# i686 Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=xterm
+pkgver=235
+pkgrel=1
+pkgdesc="X Terminal Emulator"
+arch=(i686 x86_64)
+url="http://invisible-island.net/xterm/"
+depends=('libxft' 'libxaw' 'ncurses' 'xorg-apps')
+groups=('xorg')
+source=(ftp://invisible-island.net/${pkgname}/${pkgname}-${pkgver}.tgz)
+md5sums=('5060cab9cef0ea09a24928f3c7fbde2b')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --libdir=/etc \
+ --with-app-defaults=/usr/share/X11/app-defaults/ \
+ --with-x \
+ --disable-full-tgetent \
+ --disable-imake \
+ --enable-ansi-color \
+ --enable-88-color \
+ --enable-256-color \
+ --enable-broken-osc \
+ --enable-broken-st \
+ --enable-load-vt-fonts \
+ --enable-i18n \
+ --enable-wide-chars \
+ --enable-doublechars \
+ --enable-warnings \
+ --enable-tcap-query \
+ --enable-logging \
+ --enable-dabbrev \
+ --enable-freetype \
+ --enable-luit \
+ --enable-mini-luit \
+ --enable-narrowproto || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ chmod 0755 ${startdir}/pkg/usr/bin/xterm || return 1
+}
diff --git a/abs/core/xtrans/PKGBUILD b/abs/core/xtrans/PKGBUILD
new file mode 100644
index 0000000..f1f0b19
--- /dev/null
+++ b/abs/core/xtrans/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 4408 2008-07-06 20:48:35Z jgc $
+# Maintainer: Alexander Baldeck <alexander@archlinux.org>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+pkgname=xtrans
+pkgver=1.2.1
+pkgrel=1
+pkgdesc="X transport library"
+arch=(i686 x86_64)
+license=('custom')
+url="http://xorg.freedesktop.org/"
+source=(${url}/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('96e142331edd498a9364887b2548f1bb')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m755 -d ${startdir}/pkg/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/core/xvidcore/PKGBUILD b/abs/core/xvidcore/PKGBUILD
new file mode 100644
index 0000000..82e87b5
--- /dev/null
+++ b/abs/core/xvidcore/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: tobias <tobias@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+
+pkgname=xvidcore
+pkgver=1.1.3
+pkgrel=1
+pkgdesc="XviD is an open source MPEG-4 video codec"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.xvid.org/"
+depends=('glibc')
+makedepends=('nasm')
+source=(http://downloads.xvid.org/downloads/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('29c60d4d991ac18f687a8fd13cfe64b7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}/build/generic
+ ./configure --prefix=/usr
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ #Fix dynamic libraries
+ cd ${startdir}/pkg/usr/lib
+ mylib=$(basename libxvidcore.so.*)
+ ln -sf ${mylib} libxvidcore.so.4
+ ln -sf ${mylib} libxvidcore.so
+}
diff --git a/abs/core/zd1211-firmware/PKGBUILD b/abs/core/zd1211-firmware/PKGBUILD
new file mode 100644
index 0000000..179a8ca
--- /dev/null
+++ b/abs/core/zd1211-firmware/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=zd1211-firmware
+pkgver=1.4
+pkgrel=2
+pkgdesc="Firmware for the in-kernel26 zd1211rw wireless driver"
+arch=(i686 x86_64)
+url="http://zd1211.wiki.sourceforge.net/"
+# firmware files are here:
+# http://sourceforge.net/project/showfiles.php?group_id=129083
+license=('GPL')
+provides=('zd1211')
+source=(http://downloads.sourceforge.net/zd1211/zd1211-firmware-$pkgver.tar.bz2)
+md5sums=('19f28781d76569af8551c9d11294c870')
+
+build() {
+ cd $startdir/src/zd1211-firmware
+ mkdir -p $startdir/pkg/lib/firmware/zd1211/
+ # just unpack the files to the firmware directory
+ install -m644 * $startdir/pkg/lib/firmware/zd1211/ || return 1
+}
diff --git a/abs/core/zlib/PKGBUILD b/abs/core/zlib/PKGBUILD
new file mode 100644
index 0000000..70d4b2d
--- /dev/null
+++ b/abs/core/zlib/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 4237 2008-07-05 19:17:35Z pierre $
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+
+pkgname=zlib
+pkgver=1.2.3.3
+pkgrel=14
+pkgdesc="A compression/decompression Library"
+arch=('i686' 'x86_64')
+license=('custom:zlib')
+url="http://www.gzip.org/zlib"
+groups=('base')
+depends=('glibc')
+source=("ftp://ftp.archlinux.org/other/zlib/zlib-${pkgver}.tar.gz")
+md5sums=('c444cf020e5f0e3323b11f5a2d8af8d3')
+
+build() {
+ cd ${srcdir}/zlib-$pkgver
+
+ ./configure --prefix=/usr --shared
+ make || return 1
+ make install prefix=${pkgdir}/usr || return 1
+
+ grep -A 24 '^ Copyright' zlib.h > license.txt
+ install -D license.txt ${pkgdir}/usr/share/licenses/zlib/license.txt
+}
diff --git a/abs/extra-testing/README b/abs/extra-testing/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/extra-testing/README
diff --git a/abs/extra/README b/abs/extra/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/abs/extra/README